入门图形学:颜色空间

     图形学,顾名思义就是给人看的,所以最终呈现在人们眼前的是“观感”,但这个“观感”里面还有些学问。

     比如我国庆去海边看日出,五六点起来,看着太阳渐渐从海水水平线升起,可以感受光强逐渐加强的过程,如果把黑暗表示为光强为0,把白昼表示为光强为1,那么太阳逐渐升起,则光强线性的从0到1。什么是“线性”?大家应该理解吧,就是可加性和比例性,如果用函数表示就是:

     1.f(a+b) = f(a)+f(b)

     2.f(k*a) = k*f(a)

     用函数图像简单表示就是一条直线:

    

     那么从现实世界来看,我们观察日出,则是光强线性增强,我们的“观感”就是世界平滑变亮。

     但是我们人类的技术一开始却不是这么“自然”的,比如前面说过了,最开始的显示器是阴极射线管显示器,也就是CRT“大屁股”显示器,它是发出电子击打荧光物质进行像素显示的,但是输出亮度和电压不是上面说的线性关系,而是亮度=电压^2.2的关系,如下:

      luminance = voltage^2.2

      但是变压器的电压确是基本线性变化(不然容易搞坏元器件),当电压从0-1升压,亮度的则呈现一条陡峭的曲线,如下图:

     

      看得出来,曲线的y采样更多集中在0-0.5,则颜色偏暗,所以以前的显示器看起来大体都偏暗。

      如果我们通过某个算法,还原这条曲线成为上面的直线,那么就达到了还原亮度的功能,这个操作叫做gamma矫正。

      我们用一个0.45(1/2.2)的幂运算还原上面的2.2的幂运算,如下:

     

     看得出来吧,和上面的函数图像相加,则成为了标准的线性直线。

     这里不得不提到sRGB色彩空间,在每个引擎的纹理设置面板中,都会有这个选项,如下:

    

     我先贴上百度百科:sRGB

     sRGB是microsoft、爱普生、HP惠普开发出来的色彩空间参照,看得出来吧,这些软硬件厂商特意开发一个色彩空间,就是为了从源头(也就是纹理)处理gamma矫正,这样就确定了色彩规范,省去了运行时矫正的消耗了。

     顺便我查了下市面上的显示器,现在基本还是需要sRGB和gamma correct消除过程,因为为了照顾老式的CRT显示器?!,如果我们用sRGB色彩空间创作,那么得到输出可以在CRT上正常显示,同时现代LED显示器等则模拟CRT的gamma correct消除过程,达到同样的显示画面输出,为了达到向后兼容。对此我只能说,as you like,反正我根本不在意画面如何,我虽然学习图形学,但是目标只是图形开发,而不是TA技术美术,美感对我来说不敏感,9012年了,我玩gba 16bit都能玩的飞起,游戏的玩法才是我喜欢的,同时部分3A的高质量画质我都不感冒,不好玩就是不好玩。

     so,接下来继续,前面我们谈了老半天gamma空间矫正sRGB,就是为了衬托linear线性空间,或者说现实世界的光照是线性的,而我们以前因为技术能力问题,整出了gamma等乱七八糟的,但是目标就是linear线性空间,因为在线性空间中渲染更加真实,更接近实际物理现实的表现。

     那么美术为了真实感画面渲染需要,需要使用linear线性渲染,那么纹理则不必使用sRGB颜色空间,你就算勾选了sRGB颜色空间,unity也会帮你消除gamma矫正,设置如下:

     

      所以如果我们要做3A真实感渲染,最好从美术源头就使用线性空间制作标准,也就是纹理制作的时候就使用线性空间标准。

      如果跟我一样做卡通NPR风,无所谓了,反正光照数学计算公式都不一样,gamma/linear都行。

      那么,就来说一下纹理规范了:

      1.对于颜色类采样纹理,你是用gamma渲染,则勾选sRGB,当然unity默认帮我们勾选了,因为我们切换到linear渲染,unity也自动消除gamma correct。

      2.对于数据类采样纹理,比如normalmap/noisemap/replacemap/heightmap等,则在linear渲染下,不要勾选sRGB,不然unity会做一个额外的数学计算。

      最后,根据需要选择渲染空间就好了。

    

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值