电脑的颜色 ( 这里以 24 位色为例 ) ,是从 [r0,g0,b0]( 亮度 0 纯黑色 ) 到 [r255,g255,b255]( 亮度 1 纯白色 ) ,然而在自然界中,颜色远远不止于此,只不过不论是人眼还是摄像机都只能接受亮度在 0 和 1 之间的颜色,超过这个范围的颜色 ( 色彩溢出 ) 会被clamp在0和1 之间。比如太阳,大家都知道它的光是偏黄的大约是 [ r3000,g2800,b2000] 左右 ( 估计的 ) ,但是用于它太亮了,就被校验成了白色。而且,不论是显示器还是照片都不可能显示亮度超过1的颜色,所以24位色用来显示已经够了。
然而,在渲染的时候,问题就来了。如果两个物体之间的颜色不互相影响,那就没什么问题,所以在 max 里,这个问题几乎被人们遗忘了;一旦物体之间的颜色有影响,那24位色就不够用了,而最近出的 finalrender 的全局照明就依靠物体之间的颜色的相互影响。于是就推出了 HDRI ,其实并不神秘,就是记录了超亮的颜色而已。
在 max 中,两个物体之间的颜色也不是完全不互相影响的,如果你用了折射或反射,或半透明,都是两个物体之间的颜色互相影响,这时就看出 24 位色的局限了。两盏灯,亮度不同,渲染出来一样,都是白色,但在诸如大理石之类的表面的反射就不一样了。这样我们就要用到那种超亮的颜色,也就是非校验色none clamp color 了。
看这幅图,白色的数字之间看起来亮度一样,但是看反射就不一样了。黑色数字也一样。
白色数字代表它自己的亮度,黑色数字则代表负的亮度,也就是比黑色还黑的颜色,也许这种超黑色用于表面色或自发光不太现实,但是用于透明度或高光贴图等则会有特殊效果。
如何实现呢?其实很简单,有 finalrender 可以用 HDRI ,不过 max 有它自己的方法,适合 max 的所有版本。不知道大家注意没有,在绝大部分的程序贴图的最后都有一个 output 参数栏,对于没有 output 参数栏的, max 准备了 output 材质
这里主要用到右边的输出量 output amount ;色彩偏移 RGB offset ;色彩级别 RGB level 三个参数和校验 clamp 选项。
色彩偏移 RGB offset 相当于亮度。也就是把这个值加到颜色上。
色彩级别 RGB level 相当于对比度,也就是把这个值乘以颜色。 1 就是不变, 2 就是加倍。