Exemplo n.º 1
0
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
Exemplo n.º 2
0
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)
Exemplo n.º 3
0
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
Exemplo n.º 4
0
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)
Exemplo n.º 5
0
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
Exemplo n.º 6
0
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