def __init__(self, position, color, intensity): self.d_pos = vki.SVVec3(glm.vec3(position)) self.d_intensity = Spectrum(glm.vec3(color) * intensity) self.m_cptr = SVCombine_Create( { 'pos': self.d_pos, 'intensity': self.d_intensity }, ''' Spectrum sample_l(in Comb_#hash# self, in vec3 ip, inout RNGState state, inout vec3 dirToLight, inout float distance, inout float pdfw) { vec3 v = self.pos - ip; float len = length(v); dirToLight = v / len; pdfw = len*len; distance = len; return self.intensity; } ''')
def __init__(self): self.m_t = vki.SVFloat(0.0) self.m_normal = vki.SVVec3(glm.vec3(0.0)) self.m_cptr = SVCombine_Create( { 't': self.m_t, 'normal': self.m_normal, 'lambert': BxDF_Lambert.dummy }, ''' Spectrum evaluate_bsdf(in Comb_#hash# self, in vec3 wo, in vec3 wi) { return f(self.lambert, self.normal, wo, wi); } float pdf_bsdf(in Comb_#hash# self, in vec3 wo, in vec3 wi) { return pdf(self.lambert, self.normal, wo, wi); } Spectrum sample_bsdf(in Comb_#hash# self, in vec3 wo, inout vec3 wi, inout RNGState state, inout float path_pdf) { return sample_f(self.lambert, self.normal, wo, wi, state, path_pdf); } ''')
def __init__(self, color=(0.0, 0.0, 0.0)): self.m_rgb = glm.vec3(color) self.m_svdata = vki.SVVec3(self.m_rgb) self.m_cptr = SVCombine_Create({'data': self.m_svdata}, ''' void incr(inout Comb_#hash# a, in Comb_#hash# b) { a.data += b.data; } Comb_#hash# add(in Comb_#hash# a, in Comb_#hash# b) { Comb_#hash# ret; ret.data = a.data + b.data; return ret; } Comb_#hash# sub(in Comb_#hash# a, in Comb_#hash# b) { Comb_#hash# ret; ret.data = a.data - b.data; return ret; } Comb_#hash# mult(in Comb_#hash# a, in Comb_#hash# b) { Comb_#hash# ret; ret.data = a.data * b.data; return ret; } Comb_#hash# div(in Comb_#hash# a, in Comb_#hash# b) { Comb_#hash# ret; ret.data = a.data / b.data; return ret; } Comb_#hash# mult(in Comb_#hash# a, float b) { Comb_#hash# ret; ret.data = a.data * b; return ret; } Comb_#hash# mult(float b, in Comb_#hash# a) { Comb_#hash# ret; ret.data = a.data * b; return ret; } void amplify(inout Comb_#hash# a, in Comb_#hash# b ) { a.data *= b.data; } void amplify(inout Comb_#hash# a, float b ) { a.data *= b; } Comb_#hash# div(in Comb_#hash# a, float b) { Comb_#hash# ret; ret.data = a.data / b; return ret; } void diminish(inout Comb_#hash# a, float b ) { a.data /= b; } Comb_#hash# neg(in Comb_#hash# a) { Comb_#hash# ret; ret.data = -a.data; return ret; } void from_rgb(out Comb_#hash# a, in vec3 rgb) { a.data = rgb; } vec3 to_rgb(in Comb_#hash# a) { return a.data; } void from_xyz(out Comb_#hash# a, in vec3 xyz) { a.data = xyz2rgb(xyz); } vec3 to_xyz(in Comb_#hash# a) { return rgb2xyz(a.data); } float max_component_value(in Comb_#hash# a) { return max(max(a.data.x, a.data.y), a.data.z); } #define Spectrum Comb_#hash# ''')