线性空间与GAMMA校正

开发gamma编码是用来抵消阴极射线管(CRT)显示器的输入和输出特性。电子枪的电流,也就是光的亮度,与输入的正极电压的变化是非线性的。通过gamma压缩来改变输入信号抵消了这个非线性,因此输出图像就能有预期的亮度。

对于3D美术来说,做贴图的时候如果想要做50%灰,应该用186/255而不是127/255

50%灰度是186: pow(0.5, 1.0/2.2)*255

使用脚本 ColorSpace QualitySettings.activeColorSpace来检查是否支持线性空间

public enum ColorSpace
{
    /// <summary>
    ///   <para>Uninitialized color space.</para>
    /// </summary>
    Uninitialized = -1,
    /// <summary>
    ///   <para>Gamma color space.</para>
    /// </summary>
    Gamma,
    /// <summary>
    ///   <para>Linear color space.</para>
    /// </summary>
    Linear
}
有一批不支持linear的设备(iphone5及以下,android4.3以下都不支持OpenGL ES3.0,而3.0才开始支持texture和RBO的sRGB)

sRGB的纹理会在shader运算前通过power 2.2切换到线性空间,然后再计算完毕后,通过power 1/2.2再切换回gamma空间。非sRGB纹理则会直接在shader中进行运算,比如normal map、mask、GUI。其中legacy GUI比较特殊,虽然这个纹理是gamma space的,理论上应该标记为sRGB,但是它在shader中的计算不需要linear,所以它不会在shader运算前,从gamma转linear,在运算结束后,从linear转gamma,而是会直接去运算,假装它是linear space的.

PBR主要用于光源比较复杂的情况下,做出照片级的效果,同时要配合大量的光照探针、反射探针,需要HDR(因为PBS计算需要高精度,所以需要HDR,而HDR需要浮点纹理,只有OpenGL ES3.0才开始支持。由于HDR的原因MSAA也失效了,所以要在后处理中进行AA和tonemapping)。美术流程也有很大不同,不再是普通的法线+高光反射纹理,而是更细腻复杂的纹理,比如金属值纹理、高光反射纹理、粗糙度纹理、遮挡纹理、细节纹理等。

美术的职责从感性到理性。之前觉得美术好不好,就说做的东西好看不好看,用了PBR之后,就要看做的东西是否正确,皮革是否像皮革,金属反射粗糙度对不对。这样就可以用客观的标准验收美术资源。制作流程也就拆分了,美术负责正确,灯光师负责好看。当正确的场景和正确的光照,就很容易出很好的效果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值