分析削弱的深度阴影贴图
作者:网友整理死亡阴影v1.4.8 53.46M /
点击下载奥拉星麒麟舞版本v1.2.1 27.67M /
点击下载游戏调谐器v1.3p 3.10M / 简体中文
点击下载下面的右图是和左图一样使用光线追踪阴影的场景。它两看起来非常象,但它的渲染时间是削弱的深度阴影贴图图像的2.6倍。
这个文件包括一个椅子模型和一个用于削弱深度阴影贴图效果的材质网络,在聚光灯上名为dmapSoftShadow。
在 Hypershade 窗口的顶部,到灯光条,图表叫做dmapSoftShadow聚光灯网络。With LMB, select the light called dmapSoftShadow. 击鼠标左键,选择名为dmapSoftShadow.的灯光,Click on the Show Upstream Connections button
点击Show Upstream Connections显示上游连接按钮,For more space in Hypershade, turn off the top section using the Show Bottom Tabs Only button。要在Hypershade窗口里得到更多的空间,用Show Bottom Tabs Only按钮关闭顶部的部分。在这个着色方式网络里的思想是从阴影的最近点到阴影的最远点去柔化和淡化阴影。这个效果通过使用三个定位器完成的,一个灯光信息节点,和一些数学节点去驱动两个RAMP纹理去修改阴影的 Filter Size 过滤器尺寸和 Color颜色属性。
一个定位器是一个在世界坐标空间里标记的一个位置。它看起来象在每个主要的轴向上(X,Y,Z轴)的线的延伸的一个小的指时针。第一个定位器是定位在与聚光灯同样的位置。它实际上是聚光灯的点约束。其它两个定位器是定位在地面上在落下阴影的开始和结束的大约位置。注意:那些地面上的定位器的位置能稍后时被调整去配合阴影衰减的散开。
这三个定位器是连接到Distance Between节点上。那些节点计算点聚光灯的定位器和地面上每个定位器之间的距离。
[page]
输出被通过从每个Distance Between 节点叫做Distance。这是在3D空间里两点间的实际距离。用在3D里用这个特别的节点(Distance Between)是比用几个功能节点去寻找距离要容易。Distance Between节点执行下面的计算:(x1,y1,z1)和 (x2,y2,z2)是第一个定位器和第二个定位器各自的位置。注意:创建一个Distance Between节点,你需要用MEL命令:createNode distanceBetween; 节点不会出现在Hypershade窗里。打开Hypershade或Outliner并用中键拖拽新节点在Hypershade工作区去加入到你的网络里。
下一步,那两个距离(在聚光灯和地面上的每个定位器间的距离)是传递给一个plusMinusAverage功能节点。在这个节点上操作设置为减操作。通过第二个距离(灯到结束阴影点)减去第一个距离(灯到开始阴影点),你得到定位器间从光源处有多远距离。 注意:另一个节点间的距离也能被plusMinusAverage节点所替代。
从灯光处到在地面上的定位器间多远的距离,能被用于决定两个渐变纹理节点,如何影响深度贴图阴影的Filter Size和 Shadow Color的外观。接下来的步骤包括必需的计算,来得到数值去驱动那些RAMP节点。
[page]
同样的方法减操作是用于去寻找光源到在地面的开始阴影处和结束阴影处定位器之间的距离,另一个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。
注意:在CLAMP节点里只在X通道是被使用,因为从Multiply Divide节点传过来的的距离数值是一个单一的数值。在CLAMP的其它通道是可以使用的,万一传过来是三个数值如RGB颜色数值。
在这个着色网络里,RAMP节点产生一个象查找表格,那里的输入数值在渲染时将和RAMP节点里的某些vCoordinate属性相符合。0是RAMP的底部而1是RAMP的顶部。
通过简单地调整RAMP位置项和数值,你几乎无限制地控制你将传递给下一个节点最终的数值。在这个例子里,数值传递给聚光灯节点的 Filter Size和Shadow Color属性。
注意:如果输入值没有被夹住,任何超出0-1范围的数值将开始重复坐标数值,当RAMP纹理是重复的或包围的。这能创建意外的结果如显示在这儿的条带。因为这个原因,当使用RAMP纹理贴图时,被推荐工作在0-1之间的范围里的数值。
[page]
如图。
那儿在两个单独的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结束阴影定位器。
削弱的深度阴影材质网络证明了一个相对简单的材质网络能节省极大量的渲染时间,在多个位置,通过它可消除必需的光线追踪阴影。
加载全部内容