def _rgb_to_rgb_spectrum_shader(rgb_mgr): code = """ return rgb(color[0], color[1], color[2]) """ vec = Vec3Arg('color', Vector3.zero()) shader = Shader(code=code, name='rgb_to_spectrum', func_args=[vec], is_func=True) return shader
def argument_factory(name, cls): if cls == int: return IntArg(name, int()) elif cls == float: return FloatArg(name, float()) elif cls == Vector3: return Vec3Arg(name, Vector3.zero()) else: raise ValueError("Argument factory. Unsuported arugment type", name, cls)
def _rgb_to_sampled_shader(sampled_mgr): code = """ # conversion of reflectance r = color[0] g = color[1] b = color[2] tmp = min(r, g) tmp = min(tmp, b) if tmp == r: # Compute illuminant with red as minimum rez = r * spect_white if g > b: rez = rez + (b - r) * spect_cyan rez = rez + (g - b) * spect_green else: rez = rez + (g - r) * spect_cyan rez = rez + (b - g) * spect_blue else: dummy = 999999 # elif is still not supported in shading language if tmp == g: # Compute illuminant with green as minimum rez = g * spect_white if r > b: rez = rez + (b - g) * spect_magenta rez = rez + (r - b) * spect_red else: rez = rez + (r - g) * spect_magenta rez = rez + (b - r) * spect_blue else: # Compute illuminant with blue as minimum rez = b * spect_white if r > g: rez = rez + (g - b) * spect_yellow rez = rez + (r - g) * spect_red else: rez = rez + (r - b) * spect_yellow rez = rez + (g - r) * spect_green rez = rez * 0.94 #rez.clamp() return rez """ vec = Vec3Arg('color', Vector3.zero()) spect_cyan = SampledArg('spect_cyan', sampled_mgr._spect_cyan) spect_blue = SampledArg('spect_blue', sampled_mgr._spect_blue) spect_green = SampledArg('spect_green', sampled_mgr._spect_green) spect_magenta = SampledArg('spect_magenta', sampled_mgr._spect_magenta) spect_red = SampledArg('spect_red', sampled_mgr._spect_red) spect_yellow = SampledArg('spect_yellow', sampled_mgr._spect_yellow) spect_white = SampledArg('spect_white', sampled_mgr._spect_white) args = [ spect_cyan, spect_blue, spect_green, spect_magenta, spect_red, spect_yellow, spect_white ] shader = Shader(code=code, args=args, name='rgb_to_spectrum', func_args=[vec], is_func=True) return shader
def _rgb_to_sampled_shader(sampled_mgr): code = """ # conversion of reflectance r = color[0] g = color[1] b = color[2] tmp = min(r, g) tmp = min(tmp, b) if tmp == r: # Compute illuminant with red as minimum rez = r * spect_white if g > b: rez = rez + (b - r) * spect_cyan rez = rez + (g - b) * spect_green else: rez = rez + (g - r) * spect_cyan rez = rez + (b - g) * spect_blue else: dummy = 999999 # elif is still not supported in shading language if tmp == g: # Compute illuminant with green as minimum rez = g * spect_white if r > b: rez = rez + (b - g) * spect_magenta rez = rez + (r - b) * spect_red else: rez = rez + (r - g) * spect_magenta rez = rez + (b - r) * spect_blue else: # Compute illuminant with blue as minimum rez = b * spect_white if r > g: rez = rez + (g - b) * spect_yellow rez = rez + (r - g) * spect_red else: rez = rez + (r - b) * spect_yellow rez = rez + (g - r) * spect_green rez = rez * 0.94 #rez.clamp() return rez """ vec = Vec3Arg('color', Vector3.zero()) spect_cyan = SampledArg('spect_cyan', sampled_mgr._spect_cyan) spect_blue = SampledArg('spect_blue', sampled_mgr._spect_blue) spect_green = SampledArg('spect_green', sampled_mgr._spect_green) spect_magenta = SampledArg('spect_magenta', sampled_mgr._spect_magenta) spect_red = SampledArg('spect_red', sampled_mgr._spect_red) spect_yellow = SampledArg('spect_yellow', sampled_mgr._spect_yellow) spect_white = SampledArg('spect_white', sampled_mgr._spect_white) args = [spect_cyan, spect_blue, spect_green, spect_magenta, spect_red, spect_yellow, spect_white] shader = Shader(code=code, args=args, name='rgb_to_spectrum', func_args=[vec], is_func=True) return shader