def test_sampled_spectrum(self): code = """ spec2 = Spectrum(spec, 0.23) """ vals = [(450, 0.13), (480, 0.45), (620, 0.58)] samples = create_samples(vals, 32, 400, 700) sam_spec = SampledSpectrum(samples) spec = SampledArg('spec', sam_spec) vals = [(450, 0.11)] samples = create_samples(vals, 32, 400, 700) sam_spec = SampledSpectrum(samples) spec2 = SampledArg('spec2', sam_spec) shader = Shader(code=code, args=[spec, spec2]) shader.compile() runtime = Runtime() shader.prepare([runtime]) shader.execute() val = shader.get_value('spec2') for i in range(len(val.samples)): self.assertAlmostEqual(val.samples[i], 0.23)
def test_sampled_lum(self): mgr = SampledManager() shader = lum_sampled_shader(mgr) shader.compile() runtime = Runtime() shader.prepare([runtime]) code = """ rez = lumminance(r1) """ vals = [(450, 0.13), (480, 0.45), (620, 0.58)] samples = create_samples(vals, 32, 400, 700) sam_spec = SampledSpectrum(samples) s = SampledArg('r1', sam_spec) rez = FloatArg('rez', 0.0) shader2 = Shader(code=code, args=[rez, s]) shader2.compile([shader]) shader2.prepare([runtime]) shader2.execute() val = shader2.get_value('rez') lum = mgr.lumminance(sam_spec) self.assertAlmostEqual(lum, val)
def test_sampled_spec_to_vec(self): mgr = SampledManager() shader = sampled_to_vec_shader(mgr) shader.compile() runtime = Runtime() shader.prepare([runtime]) code = """ rez = spectrum_to_vec(r1) """ vals = [(450, 0.13), (480, 0.45), (620, 0.58)] samples = create_samples(vals, 32, 400, 700) sam_spec = SampledSpectrum(samples) s = SampledArg('r1', sam_spec) rez = Vec3Arg('rez', Vector3(0.0, 0.0, 0.0)) shader2 = Shader(code=code, args=[rez, s]) shader2.compile([shader]) shader2.prepare([runtime]) shader2.execute() val = shader2.get_value('rez') conv = mgr.sampled_to_rgb(sam_spec) self.assertAlmostEqual(val.x, conv.r, places=6) self.assertAlmostEqual(val.y, conv.g, places=6) self.assertAlmostEqual(val.z, conv.b, places=6)
def test_assign_sampled_spectrum(self): code = """ p2 = p1 """ vals = [(450, 0.33), (480, 0.45)] samples = create_samples(vals, 32, 400, 700) p1 = SampledArg('p1', SampledSpectrum(samples)) vals = [(430, 0.23), (480, 0.55), (600, 0.77)] samples2 = create_samples(vals, 32, 400, 700) p2 = SampledArg('p2', SampledSpectrum(samples2)) shader = Shader(code=code, args=[p1, p2]) shader.compile() shader.prepare([Runtime()]) shader.execute() v = shader.get_value('p2') for val1, val2 in zip(samples, v.samples): self.assertAlmostEqual(val1, val2)
def test_sampled_arithmetic(self): code = """ tmp = p2 + p1 p3 = tmp p4 = p1 * 0.3 p5 = 0.22 * p2 p6 = p1 * 8 p7 = 5 * p2 """ vals = [(450, 0.33), (480, 0.45)] samples = create_samples(vals, 32, 400, 700) p1 = SampledArg('p1', SampledSpectrum(samples)) vals = [(430, 0.23), (480, 0.55), (600, 0.77)] samples2 = create_samples(vals, 32, 400, 700) p2 = SampledArg('p2', SampledSpectrum(samples2)) vals = [(430, 0.1), (480, 0.1), (600, 0.1)] samples3 = create_samples(vals, 32, 400, 700) p3 = SampledArg('p3', SampledSpectrum(samples3)) vals = [(430, 0.1), (480, 0.1), (600, 0.1)] samples4 = create_samples(vals, 32, 400, 700) p4 = SampledArg('p4', SampledSpectrum(samples4)) vals = [(430, 0.1), (480, 0.1), (600, 0.1)] samples5 = create_samples(vals, 32, 400, 700) p5 = SampledArg('p5', SampledSpectrum(samples5)) vals = [(430, 0.1), (480, 0.1), (600, 0.1)] samples6 = create_samples(vals, 32, 400, 700) p6 = SampledArg('p6', SampledSpectrum(samples6)) vals = [(430, 0.1), (480, 0.1), (600, 0.1)] samples7 = create_samples(vals, 32, 400, 700) p7 = SampledArg('p7', SampledSpectrum(samples7)) shader = Shader(code=code, args=[p1, p2, p3, p4, p5, p6, p7]) shader.compile() shader.prepare([Runtime()]) shader.execute() v = shader.get_value('p3') for i in range(32): val = samples[i] + samples2[i] self.assertAlmostEqual(v.samples[i], val, places=6) v = shader.get_value('p4') for i in range(32): self.assertAlmostEqual(v.samples[i], samples[i] * 0.3) v = shader.get_value('p5') for i in range(32): self.assertAlmostEqual(v.samples[i], samples2[i] * 0.22) v = shader.get_value('p6') for i in range(32): self.assertAlmostEqual(v.samples[i], samples[i] * 8, places=6) v = shader.get_value('p7') for i in range(32): self.assertAlmostEqual(v.samples[i], samples2[i] * 5, places=6)