Maya教程:分析衰减深度帖图阴影(2)
Section5
然后把聚光灯到两个 locator 的距离连接到 plusMinusAverage Utility 节点上,并将此节点设为 Subtract 方式,这是一个将聚光灯到两个 locator 的距离相减的工具,我们可以了解到两个距离之差(注意这里是遵循矢量加减法则)。
这个距离上的差值将决定两个 Ramp texture 节点如何影响 dmap shadow 的 Filter Size 和 Shadow Color。(图06)
图06
Section6
为了确定聚光灯到某个点的距离,必须使用 Light Info Utility 节点和 Sampler Info 节点,Light Info 节点与其他节点连接时能提供某个被渲染点的信息。
Light Info 与 Sampler Info 不同之处在于需要将一个灯光信息连接到 Light Info 上。你会注意到在渲染网络中 dmapSoftShadow 聚光灯的 worldMatrix[0] 属性连接到了 Light Info 节点的 worldMatrix 属性上,它告诉了 Light Info 从场景中的什么地方计算输出属性 Sample Distance。
Sample Distance 是从聚光灯中心到某个被渲染点的距离。
注意:Light Info 节点在确定 Sample Distance 时十分有用。(图07、图08)
图07
图08
Section7
Section7 和 Section5 的方法类似,我们用另一个 plusMinusAverage 节点来确定 Sample Distance 和聚光灯到 startShadow locator 的距离差。为方便起见,这个差值命名为 sample point difference。(图09)
图09
Section8
上一步中得到的 sample point difference 是用来调整阴影的。如果这个值比较小,那么被渲染的点就离 startShadow locator 比较近。如果这个值比较大,那么被渲染的点就离 startShadow locator 比较远。
但是这个 sample point difference 地值可以是从0到一个很大的数,这个无限的范围不太适合用于 Ramp 节点 .Ramp 节点适合于0-1的范围,为了解决这个问题,需要使用一些数学手段来把这个距离差值转化到0-1的范围内。
我们把 Section5 中得到的聚光灯到 startShadow locator 和 endShadow locator 的距离之差称为 total difference。
使用 Multiply Divid 节点,计算出 sample point difference 与 total difference 的比值。即 sample point difference 在 total difference 所占百分比。这样就把 sample point difference 转换到了0-1范围内。
注意:对于位预 startShadow locator 与聚光灯之间和 endShadow locator 之外的点的返回值将不在0-1之间,我们将在下一个节点 Clamp 中调整,因此locator 的位置并不需要十分精确的位于阴影开始和结束的地方。我们可以以后在做调整。(图10)
图10