目录
本文内容
unity从推出SRP渲染管线后,相继为使用者基于SRP定制了两套渲染管线:URP和HDRP。越来越多的手游团队也开始着手于从Built-in管线升级到URP管线。那从Built-in升级到URP有个比较大的变化之一是什么呢,就是色彩空间从Gamma Space转到了Linear Space。那随之而来可能会出现些什么问题呢,比如:“相同的场景和光照,升级后变暗”、“个人定制化的PBR显示不正确了”、“特效显示不正确了”等等。本文主要讨论造成这些问题的缘由。
伽马(Gamma)
为什么要讨论Gamma这个概念,就先从人眼对光亮度的非线性感知说起。
举个例子,夜晚时,当人处于一个漆黑的房间,这时点亮1盏100瓦的灯,人眼会觉得很明显的变亮了。接着点亮第2盏100瓦的灯,人眼会觉得有亮了很多,但亮度的变化会没有第一盏灯亮强烈。然后继续依次点灯,当灯数量增长到一定多,比如50盏100瓦的灯,现在不论是熄灭一盏灯还是再点亮一盏灯,人眼都基本没有任何亮度变化的感知了。
但是呢,对于灯发射的光子数量,却还是在继续的变化。当你点亮1盏灯时,有1x的光子数量进入人眼,当2盏灯时,有2x的光子数量进入人眼,50盏灯时,就会有50x的光子数量进入人眼。
如果把光子数量和对应人眼感知看到的亮度表示成一张图片,就会有下边这样子一个光子数量线性,但肉眼看起来非线性的物理光强图。
在此图中有一个特殊地方,用于表现中间调,名为中性灰,也叫做18%的灰。高于此点的即为亮部,低于此点的即为暗部。
相机是怎么存储图像的呢?不论说是胶片相机还是数码相机,都是无法直接感知真实世界的颜色,而是通过光子数量来存储颜色(接下里主要讨论的是数码相机)。相机的光感原件通过均匀的信号采样,存储下采样到的光子数量,就得到了一张图像。
假如采样10个信号,可以发现亮部采样了大约80%个点,而暗部采样了大约20%个点。
这时会出现一个问题。亮部采样点足够多,表现充分;而暗部采样过少,表现不足,出现很