主题:  --==材质教程==--如何用深度贴图阴影来模拟光线追踪阴影

在耕田呢

职务:版主
等级:2
金币:10.0
发贴:378
#12002/9/9 11:35:44
削弱的深度贴图阴影文件证明:如何只用一个深度贴图阴影仿造一个看起来象光线追踪柔和的阴影。


这削弱的条件参考了从产生阴影的物体上得到更多的分散或柔化的阴影。在这个例子里,阴影颜色也是随着阴影的距离来修改微妙削弱的强度。


显示在这里的效果是有用的用于某个场景,因为它能值得注意地减少渲染时间。然而,那儿将用在你需要去光线追踪的地方。例如,穿过透明贴图产生阴影或穿过彩色透明表面如彩色玻璃窗产生的彩色阴影。

下面的右图是和左图一样使用光线追踪阴影的场景。它两看起来非常象,但它的渲染时间是削弱的深度阴影贴图图像的2.6倍。


图片如下:


打开场景文件:


相关文件:点这儿打开

这个文件包括一个椅子模型和一个用于削弱深度阴影贴图效果的材质网络,在聚光灯上名为dmapSoftShadow.



图片如下:



在耕田呢

职务:版主
等级:2
金币:10.0
发贴:378
#22002/9/9 11:46:25
在 Hypershade 窗口的顶部,到灯光条,图表叫做dmapSoftShadow聚光灯网络。

点击鼠标左键,选择名为dmapSoftShadow.的灯光
点击Show Upstream Connections显示上游连接按钮
要在Hypershade窗口里得到更多的空间,用Show Bottom Tabs Only按钮关闭顶部的部分。

在这个着色方式网络里的思想是从阴影的最近点到阴影的最远点去柔化和淡化阴影。这个效果通过使用三个定位器完成的,一个灯光信息节点,和一些数学节点去驱动两个RAMP纹理去修改阴影的 Filter Size 过滤器尺寸和 Color颜色属性。

一个定位器是一个在世界坐标空间里标记的一个位置。它看起来象在每个主要的轴向上(X,Y,Z轴)的线的延伸的一个小的指时针。

图片如下:


第一个定位器是定位在与聚光灯同样的位置。它实际上是聚光灯的点约束。

其它两个定位器是定位在地面上在落下阴影的开始和结束的大约位置。

注意:那些地面上的定位器的位置能稍后时被调整去配合阴影衰减的散开。

这三个定位器是连接到Distance Between节点上。那些节点计算点聚光灯的定位器和地面上每个定位器之间的距离。

图片如下:


输出被通过从每个Distance Between 节点叫做Distance。这是在3D空间里两点间的实际距离。用在3D里用这个特别的节点(Distance Between)是比用几个功能节点去寻找距离要容易。Distance Between节点执行下面的计算:


图片如下:


.(x1,y1,z1)和 (x2,y2,z2)是第一个定位器和第二个定位器各自的位置。

注意:创建一个Distance Between节点,你需要用MEL命令:
createNode distanceBetween;

节点不会出现在Hypershade窗里。打开Hypershade或Outliner并用中键拖拽新节点在Hypershade工作区去加入到你的网络里。






在耕田呢

职务:版主
等级:2
金币:10.0
发贴:378
#32002/9/9 11:51:36
下一步,那两个距离(在聚光灯和地面上的每个定位器间的距离)是传递给一个plusMinusAverage功能节点。在这个节点上操作设置为减操作。通过第二个距离(灯到结束阴影点)减去第一个距离(灯到开始阴影点),你得到定位器间从光源处有多远距离。


图片如下:


注意:另一个节点间的距离也能被plusMinusAverage节点所替代。

从灯光处到在地面上的定位器间多远的距离,能被用于决定两个渐变纹理节点,如何影响深度贴图阴影的Filter Size和 Shadow Color的外观。接下来的步骤包括必需的计算,来得到数值去驱动那些RAMP节点。

要找到从聚光灯到一个阴影点之间的距离,一个Light Info功能节点能被被用到。


图片如下:


象Sampler Info节点,Light Info 是一个特别指定属性的节点,当连接到其它节点后,它在渲染时提供阴影点的信息。


图片如下:


Light Info节点不同于Sampler Info节点的,它需要一个灯光的输入点好让它知道它引用的是哪一个灯光。你将在这个着色方式网络里,dmapSoftShadow聚光灯是通过将它的worldMatrix[0]属性连接到Light Info节点的worldMatrix属性。这提供给Light Info节点在世界坐标里的一个位置,好让它去计算它的叫做Sample Distance采样距离的输出属性。



图片如下:


Sample Distance采样距离是灯光中心到一个着色点的距离。

注意:Light Info节点能非常有用地从任何物体上寻找Sample Distance,它不只用于灯光。例如,它可用于Bump Depth凹凸深度。距离证明在一个摄像机的worldMatrix属性连接在一个Light Info节点上的worldMatrix的属性后,它替代了一个灯光。这会找到摄像机到被着色点间的距离。



在耕田呢

职务:版主
等级:2
金币:10.0
发贴:378
#42002/9/9 11:57:03
同样的方法减操作是用于去寻找光源到在地面的开始阴影处和结束阴影处定位器之间的距离,另一个plusMinusAverage节点是用于寻找从灯光到开始阴影定位器的Sample Distance。因为方便,这个差异值叫做sample point difference.采样点差异。

图片如下:


在这点上,在上一步发现的差异值能用于修改阴影,因为你现在有一个方法去知道每个着色点是从光源相对于从光源到开始阴影定位器的有多远的距离。

换句话说,如果距离是很短,那么被着色点是靠近开始阴影定位器。如果差异是大的,那么被着色点是离开始阴影定位器很远。

然而,这个采样点的不同值能是任何值从非常小到非常大的数字。如此一个无限制范围的数字将不会工作的很好当通过一个工作在0-1数值范围的RAMP节点。要解决这个,一个小的数学计算是必需的,它将十进位的数值转换成为0-1的数值。


回到第五部分,total difference 是指在光源到开始阴影点的多远距离和光源到结束阴影点的多远距离之间的差异值。



图片如下:


使用一个Multiply Divide节点,这个概念是获得采样点差异值并算出表现的总计差异值为多少。这和寻找一个百分比相象。


最简单的做这个的方法是用总计的差异值去除采样点的差异值。结果将在0-1之间的十进制的数值,因为任何被采样点都是在两个地面的定位器之间。换句话说,当一个点是在地面上的两个定位器的中间时,将它的采样点差值除以总差值将得到数值0.5。

注意:这个转换数值到0-1之间的过程叫做规格式数值。

注意:任何被着色点是靠近光源比靠近开始阴影定位器要近一些或远离光源比远离结束阴影定位器要远一些,将返回的数值在0-1范围之外。这是好的,因为任何0-1范围之外数值将在着色网络里的下一个叫做CLAMP节点所校正。因为这个原因,在地面上定位器的位置不用严格地在阴影的开始和结束范围里。事实上,你能移动它们更近或更远来分别地帮助你调整阴影的视觉效果。

CLAMP节点将正确地,你会直观地期待,它取得输入点的值并被限制它们在一个特别的输出范围里。在这个例子里,从Multiply Divide节点的输出值将通过CLAMP节点,传递给RAMP节点的vCoordinate属性。



图片如下:


在CLAMP节点里的Min和Max属性分别设置为0和1。这意为任何从Multiply Divide节点过来的值将在0-1之间,它在连接到RAMP节点时保持不变;当到RAMP节点时任何负数将被改为0,任何超过1的数将被改为1。





在耕田呢

职务:版主
等级:2
金币:10.0
发贴:378
#52002/9/9 12:15:06

图片如下:
[upload=jpg]

注意:在CLAMP节点里只在X通道是被使用,因为从Multiply Divide节点传过来的的距离数值是一个单一的数值。在CLAMP的其它通道是可以使用的,万一传过来是三个数值如RGB颜色数值。

uploadFiles/2002991294584248.jpg[/upload]

在这个着色网络里,RAMP节点产生象一个查找表格,那里的输入数值在渲染时将和RAMP节点里的某些vCoordinate属性相符合。0是RAMP的底部而1是RAMP的顶部。

通过简单地调整RAMP位置项和数值,你几乎无限制地控制你将传递给下一个节点最终的数值。在这个例子里,数值传递给聚光灯节点的 Filter Size和Shadow Color属性。

注意:如果输入值没有被夹住,任何超出0-1范围的数值将开始重复坐标数值,当RAMP纹理是重复的或包围的。这能创建意外的结果如显示在这儿的条带。因为这个原因,当使用RAMP纹理贴图时,被推荐工作在0-1之间的范围里的数值。


图片如下:



那儿在两个单独的RAMP节点被用来控制DMAP的Filter Size和 Shadow Color最终数值。

Filter Size影响深度阴影贴图的模糊度和柔和度,是通过blurInterpolationRamp节点来控制的。RAMP有两个颜色条。那些颜色条的颜色值是在底部设置为2和在顶部设置为32。

这意为最小的Filter Size数值将是2,并且用于接近startShadow定位器的被着色点。Filter Size数值将是32将被用于接近endShadow 定位器的被着色点。(32是MAYA能使用的Filter Size的最大值)。这是为什么创建一个柔和的削弱的深度阴影贴图的外观。

在这比较的图像使用Filter Size值为1 的阴影外观和使用RAMP节点的定制的削弱外观。


图片如下:


注意:要看到RAMP的颜色项的值,选择一个并在被选择颜色的样本上点击,在RAMP属性编辑窗里。你将看到value属性在颜色拾取器里能设置成你需要的颜色。


图片如下:


要提高最终的效果,另一个RAMP节点用于轻微地修改Shadow Color阴影颜色属性。在RAMP节点上两个颜色项是设置为0.5和-0.5。-0.5将变暗阴影去接近startShadow开始阴影定位器。在RAMP的顶部的0.5项创建一个微亮和更加透明的阴影,靠近在地面上的endShadow结束阴影定位器。

削弱的深度阴影材质网络证明了一个相对简单的材质网络能节省极大量的渲染时间,在多个位置,通过它可消除必需的光线追踪阴影。


译的不好,错漏难免,请多包涵。



5DMaya版主

职务:版主
等级:3
金币:10.0
发贴:737
#62002/9/9 13:35:49
辛苦了,qinggong兄!



CG先锋

职务:普通成员
等级:1
金币:0.0
发贴:25
#72002/9/10 1:34:04
这么复杂啊?

难~~



CoolFire

职务:普通成员
等级:1
金币:1.0
发贴:301
#82002/9/11 16:49:22
太复杂。
有没有易懂的教程(就是说初学maya渲染和渲染器的教程)。



CoolFire

职务:普通成员
等级:1
金币:1.0
发贴:301
#92002/9/11 16:53:04
急需maya渲染和渲染器的精髓和入门的教程。



白驹

职务:普通成员
等级:1
金币:0.0
发贴:2
#102002/9/11 22:30:49
好帖,比另一遍同样的教程要细致。
建议初学才好好照着做几遍。



在耕田呢

职务:版主
等级:2
金币:10.0
发贴:378
#112002/9/12 9:12:36
COOLFIRE:

这可就是渲染的精髓呀。

有时,你不可能用到光线追踪,因为它是需要大量的时间来完成的。而你又想要它产生的效果,这里提供了一个实用的技巧来模拟它。

我上面说了,光线追踪的方法比这个方法要多2.6倍。



CoolFire

职务:普通成员
等级:1
金币:1.0
发贴:301
#122002/9/12 18:03:53
好的。



CoolFire

职务:普通成员
等级:1
金币:1.0
发贴:301
#132002/9/12 18:05:56
我会仔细看的。
(不会的还要麻烦你呀!~)
Thank you



Nuo_5d

职务:普通成员
等级:1
金币:0.0
发贴:58
#142002/9/12 18:06:28
很好,很好。


[img]http://www.photoshopcn.com/bbs/attach/2002/07/11/264405-style-1-embed.JPG[/img]

309

职务:普通成员
等级:2
金币:1.0
发贴:547
#152002/9/14 20:51:12
我觉得我还有很长的路要走啊