Tri*_*cky 5 ios metal metalkit
我试图在金属片段(或计算)着色器的上下文中理解颜色。
我的理解是,在金属着色器的上下文中,任何颜色值始终是线性的。无论纹理附加到片段或计算函数,金属都会在进入着色器时应用任何线性传递函数(伽玛)的反函数,并在退出时再次应用它。
考虑到这一点,如果在着色器的上下文中,我返回一个近似线性中间灰度值约为 22.25% 的值,当使用金属套件通过简单纹理渲染到屏幕时,我希望得到.bgra8Unorm一个非线性 sRGB 读数约为 128,128,128。
fragment float4 fragment_shader(
TextureMappingVertex in [[stage_in]]
) {
float middleGrey = float(0.2225);
return float4(middleGrey, middleGrey, middleGrey, 1);
}
Run Code Online (Sandbox Code Playgroud)
但事实上,如果着色器内没有与线性颜色空间之间的转换,我会得到 57,57,57 的输出:
我在这里缺少什么?
一方面,这当然看起来更直观,但它违背了我认为的金属着色器的规则,因为它们总是在线性空间中。
| 归档时间: |
|
| 查看次数: |
536 次 |
| 最近记录: |