Maya经典老教程分析衰减深度帖图阴影.docx
《Maya经典老教程分析衰减深度帖图阴影.docx》由会员分享,可在线阅读,更多相关《Maya经典老教程分析衰减深度帖图阴影.docx(15页珍藏版)》请在冰豆网上搜索。
![Maya经典老教程分析衰减深度帖图阴影.docx](https://file1.bdocx.com/fileroot1/2023-1/6/20e19c33-c679-4941-a2ab-794f0d4ee5b9/20e19c33-c679-4941-a2ab-794f0d4ee5b91.gif)
Maya经典老教程分析衰减深度帖图阴影
Maya经典老教程:
分析衰减深度帖图阴影
来源:
网络编辑:
爆豆
发布时间:
2010-04-13
导言:
这套教程是我很久以前收藏的,虽然教程比较老,但个人感觉对衰减深度贴图阴影分析的非常好,今天拿出来与大家分享,希望对大家能够有所帮助。
下面教程开始。
我们可以用使用深度帖图阴影来模拟柔和的光线追踪(RayTracing)的效果。
衰减(ATTENUATED)这个词的含义是消减和柔化阴影。
在以下的例子中,我们通过调整阴影的颜色来减弱阴影的亮度。
我们这里所演示的技巧在某些场景中是十分有效的。
他能极大的减少渲染时间。
例如当光线通过使用了透明帖图的物体或有颜色的透明表面时,就要必须使用光线追踪。
下面两图是左边用光线追踪右边是衰减深度帖图渲染。
效果差不多但是光线追踪的渲染时间要多2.6倍。
(图01)
图01
Section1
打开场景,包含一个椅子模型和一个加上了attenuateddmapshadow效果的聚光灯,其名称为dmapSoftShadow。
(图02
图
Section2
在Hypershade窗口中的light选项卡下选择dmapSoftShadow,并点击ShowUpstreamConnections按钮,便可以看到这个聚光灯的网络节点。
这个网络是为了从最近点到最远点淡化阴影而设置的,它包含3个Locators,一个灯光信息节点以及一些能驱使两个Ramptextures调整阴影的过滤尺寸和颜色属性的数学节点。
Section3
Locator的作用是在空间里标定位置。
第一个Locator的位置就是聚光灯的位置,他和聚光灯之间有constrained的联系。
另外两个Locator分别在阴影的开始和结束的位置。
(图03)
图03
Section4
这3个locators与2个DistanceBetween节点连接,DistanceBetween节点是用来计算聚光灯和另外两个locator的距离的。
DistanceBetween节点输出的是3D空间上两点间的距离,是通过下面的公式计算的。
(图04)
图04
(x1、y1、z1)和(x2、y2、z2)分别是两个locator的坐标。
注意:
必须用MEL命令来创建DistanceBetween节点,输入createNodedistanceBetween;命令。
这个节点不会在Hypershade出现,你必须在Outliner中用鼠标中键把它拖到Hypershade中去。
(图05)
图05
Section5
然后把聚光灯到两个locator的距离连接到plusMinusAverageUtility节点上,并将此节点设为Subtract方式,这是一个将聚光灯到两个locator的距离相减的工具,我们可以了解到两个距离之差 (注意这里是遵循矢量加减法则)。
这个距离上的差值将决定两个Ramptexture节点如何影响dmapshadow的FilterSize和ShadowColor。
(图06)
图06
Maya经典老教程:
分析衰减深度帖图阴影
来源:
网络编辑:
爆豆
发布时间:
2010-04-13
本文仅为提供更多信息,不代表火星时代同意其观点或描述,如需转载请注明出处。
Section6
为了确定聚光灯到某个点的距离,必须使用LightInfoUtility节点和SamplerInfo节点,LightInfo节点与其他节点连接时能提供某个被渲染点的信息。
LightInfo与SamplerInfo不同之处在于需要将一个灯光信息连接到LightInfo上。
你会注意到在渲染网络中dmapSoftShadow聚光灯的worldMatrix[0]属性连接到了LightInfo节点的worldMatrix属性上,它告诉了LightInfo从场景中的什么地方计算输出属性SampleDistance。
SampleDistance是从聚光灯中心到某个被渲染点的距离。
注意:
LightInfo节点在确定SampleDistance时十分有用。
(图07、图08)
图07
图08
Section7
Section7和Section5的方法类似,我们用另一个plusMinusAverage节点来确定SampleDistance和聚光灯到startShadowlocator的距离差。
为方便起见,这个差值命名为samplepointdifference。
(图09)
图09
Section8
上一步中得到的samplepointdifference是用来调整阴影的。
如果这个值比较小,那么被渲染的点就离startShadowlocator比较近。
如果这个值比较大,那么被渲染的点就离startShadowlocator比较远。
但是这个samplepointdifference地值可以是从0到一个很大的数,这个无限的范围不太适合用于Ramp节点.Ramp节点适合于0-1的范围,为了解决这个问题,需要使用一些数学手段来把这个距离差值转化到0-1的范围内。
我们把Section5中得到的聚光灯到startShadowlocator和endShadowlocator的距离之差称为totaldifference。
使用MultiplyDivid节点,计算出samplepointdifference与totaldifference的比值。
即samplepointdifference在totaldifference所占百分比。
这样就把samplepointdifference转换到了0-1范围内。
注意:
对于位预startShadowlocator与聚光灯之间和endShadowlocator之外的点的返回值将不在0-1之间,我们将在下一个节点Clamp中调整,因此locator的位置并不需要十分精确的位于阴影开始和结束的地方。
我们可以以后在做调整。
(图10)
图10
Section9
Clamp节点能把输入值限制在一定范围内输出,MultiplyDivide节点在被连接到Ramp节点的vCoordinate属性之前,将通过先Clamp节点来限制范围。
Clamp的Min和Max分别设为0和1,这意味这从MultiplyDivide节点过来的输入值在0-1之间的保持不变,小于0的按0输出,大于1的按1输出。
(图11)
图11
注意:
在clamp节点中只使用x-channel,这是因为距离这个属性是单值的,当输入的是3值类型的数据时(例如颜色的RGB值)就要用到其他的channel。
(图12)
图12
在这个渲染网络中,clamp节点的输出值将连接到Ramp节点的vCoordinate属性上。
0表示vCoordinate在底部,1表示vCoordinate在顶部。
(图13)
图13
我们可以通过调整ramp的位置和数值来控制输出,最后ramp将连接到聚光灯的FilterSize和ShadowColor属性上。
注意:
如果输入的数据没有经过clamp节点,在0-1范围之外的数据将重复coordinate的值,会导致一些不可预料的结果。
(图14)
图14
Section10
最终将用2个ramp节点来控制dmapshadow的FilterSize和theShadowColor属性。
FilterSize将影响dmapshadow的柔化和模糊效果,本例中它被blurInterpolationRamp节点控制。
这个节点有两个colorentries,在底部设为2,在顶部设为32。
这意味着FilterSize的最小值为2,这个值用于渲染离startShadowlocator最近的点,而最大值32将用于渲染离endShadowlocator最近的点,这能给dmapshadow产生柔化的衰减效果。
下图是将FilterSize设为1和不设置的比较。
(图15)
图15
为了加强最终效果,我们把另一个ramp节点连接到ShadowColor属性上,这个ramp的两个colorentries的值分别设为0.5和-0.5.-0.5将startShadowlocator附近的阴影变暗。
而0.5使endShadowlocator附近的阴影变亮和透明。
(图16)
图16
结论
以上例子证明了我们可以用一个衰减深度帖图的渲染网络来节省渲染时间,在许多情况下能代替光线追踪的方式。