maxscript自动将rgb颜色转换为gamma 2.2?

时间:2016-03-18 15:47:16

标签: maxscript

基本上,我有许多旧的3D模型,材料是在1.0伽玛环境下制作的,每次我想使用其中一个,我必须手动转换所有颜色以匹配2.2伽马等效。

我使用的公式是255 *((old / 255)^ 2.2),基于mintviz的教程,但是必须手动校正所有颜色是一个繁琐且耗时的过程,并且至少在理论上可能是高度自动化的

我想的是一个简单的按钮,当您按下时,将所有现有颜色从仅选定对象转换为2.2等效颜色。

我已经在maxscript中完成了一些自定义属性接口,但这就是全部,所以我没有很多经验,所以我需要一些帮助。

脚本只对选定对象的材质进行处理,然后检查每个对象以查找分配给地图槽,子地图等的现有颜色,并将公式应用于所有这些,或者只是强力应用所有可能的插槽的公式。

你怎么想?

它应该很简单,我甚至不知道从哪里开始

1 个答案:

答案 0 :(得分:0)

您可以尝试获取所选对象所依赖的所有材质和纹理贴图类,并更改包含颜色值的所有属性:

fn gammaCorrectClr clrP4 gamma =
    (255 * [clrP4.x^gamma, clrP4.y^gamma, clrP4.z^gamma]) as Color

mapped fn gammaCorrectMaterial mat gamma =
(
    local props = getPropNames mat

    for prop in props where isKindOf (local val = getProperty mat prop) Color do
        setProperty mat prop (gammaCorrectClr (val as Point4) gamma)
)

for matClass in Material.classes do gammaCorrectMaterial (getClassInstances matClass target:selection[1]) 2.2
for texClass in TextureMap.classes do gammaCorrectMaterial (getClassInstances texClass target:selection[1]) 2.2

如果您只想对整个场景而不是选定的对象执行相同的操作,请从target:selection[1]次调用中移除getClassInstances部分。