Beispiel #1
0
    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;    
}
''')
Beispiel #2
0
    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);
}
''')
Beispiel #3
0
    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#

''')