首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Shady中的自定义传递函数( LUT)

Shady中的自定义传递函数( LUT)
EN

Stack Overflow用户
提问于 2020-09-23 01:04:47
回答 1查看 77关注 0票数 2

如何实现自定义的颜色传递功能?

我想仔细控制我的视觉刺激的颜色。我已经看到,我可以设置一个通道的伽玛,但如果我的传递函数不是很适合一个典型的伽马曲线呢?

我试过使用查找表,但是Shady的唯一LUT实现似乎只使用红色通道并同时查找所有通道,而我想要的是能够独立查找每个通道的东西,以便能够使用独立的线性R、G和B通道?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-23 21:11:36

确实,LUTs在输入端只是一维的.Shady的LUT支持根本不是为您描述的那种使用而设计的(另外,请注意,当您使用LUT时,还有其他的副作用,比如禁用抖动)。真正需要的是一些应用任意转换的方法(不一定要量化)。

从1.12版本开始,Shady就能够通过全局AddCustomColorTransformation函数以及相应的Stimulus类和全局COLORTRANS命名空间的.colorTransformation属性定制“颜色转换”。就像添加自定义函数(信号、调制或窗口函数)的其他方法一样,它向着色器注入自定义GL阴影语言的片段,并且必须在构建World之前完成。这里有一个例子,摘自Shady的更全面解释的色彩转换演示

代码语言:javascript
复制
import Shady;  Shady.RequireShadyVersion('1.12')

Shady.AddCustomColorTransformation("""

    vec4 PhotoNegative(vec4 color)
    {
        color.rgb = 1.0 - color.rgb;
        return color;
    }

""")
w = Shady.World()
s = w.Stimulus(Shady.EXAMPLE_MEDIA.alien1, frame=Shady.Integral(16))
s.colorTransformation = Shady.COLORTRANS.PhotoNegative

自定义函数的一个明显的潜在缺点是,它们要求您动手编写实际的GLSL代码,这反过来意味着要关注优化您正在编写的代码的计算复杂性,这样您就可以避免速度过慢。

不过,在大多数情况下,这种努力可能是微不足道的。色觉研究中的自定义变换可以通过将自定义函数分别应用于color.rcolor.gcolor.b和/或将矩阵变换应用到color.rgb中来实现,这样着色器可以非常有效地完成这些转换。记住,在1.0时保持α通道值color.a不变(在Shady中,α混合中断线性化)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64019588

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档