Dmap-深度贴图
Raytrace—光线追踪

曾经在那篇T.G.Jay灯光教程里面提到过
有五种情况将不可避免地用到Raytrace算法产生阴影
1) Ambient light产生阴影
2) 透明贴图产生阴影(还可能带有颜色)
3) 阴影衰减
4) 配合焦散等特殊效果产生的阴影
5)灯光雾透过透明贴图产生的效果

但工作了就会发现 大多项目都是国外的高清数字电影或电视
分辨率达到1920*1280
平时在自己机器上渲染小图可能 不能体会Dmap阴影速度的优越
但在渲染大分辨率和序列帧差别就体现出来了
所以我有一个想法 就是在现有条件下 尽量淘汰掉Raytrace阴影
我这两天做了一些试验 有些成果 也遇到了问题
先写出来交流一下

1) Ambient light产生阴影

Ambient light虽然只能产生Raytrace阴影
但效果和point light产生Dmap阴影是差不多的
所以实战中几乎每人用Ambient light产生阴影

2) 透明贴图产生阴影(还可能带有颜色)

我们不能指望通过计算机算出光穿过透明贴图的阴影了
不过我们可以“画”出阴影
先把透明贴图赋予Surface Shader
再从灯光的角度渲一张图 这张图用来模拟阴影
(如果透明贴图带有色彩 这张图也是有色彩的)
稍在平面软件中处理以后
就可以通过Projection节点的perspective方式赋予灯光的Shadow Color属性
下面这张就是用这个方法模拟的Dmap阴影

3) 阴影衰减

衰减程度和距离有一定关系
所以这里又要用到模拟Z通道的方法算距离了 就不再赘述
有一个要注意的问题是 结果输出到dmap resolution还是dmap filter size
我的方法是输出到dmap filter size 因为maya的算法优化了部分属性
这些属性的值如果是2的n次方 将会大大增加算图速度
dmap resolution属性就是其中之一
128 256 512 1024……这些不连续的值是被优化过的
而输出结果确实连续的 所以不适合输出到dmap resolution属性
(当然输出到dmap filter size也不是最好的选择
因为dmap filter size属性只支持1-32之间的整数
不过没办法了 没有第三个属性可以输出了)
这张图的阴影是用Raytrace算出的

这张图的阴影是用dmap算出的

dmap的效果是可以接受的
用时如下:
Dmap Time For Frame Render (hh:mm:ss): 00:01:47
Rtrace Time For Frame Render (hh:mm:ss): 00:07:45

4) 配合焦散等特殊效果产生的阴影

可以用Damp产生阴影 只是Raytrace效果更好罢了
其他情况可以灵活处理

5) 灯光雾透过透明贴图产生的效果

有些想法 但试验下来是失败的
其他想法还在尝试
欢迎大家给些idea

Copyright T.G.Jay © 2004-2006. All rights reserved.