投射阴影
灯光,点,DirectLight和Spotlight节点都具有控件,可用于调整灯光在3D场景中投射阴影的方式。以下几何节点还具有控件,使您可以选择它们是否接收由灯光投射的阴影以及它们本身是否在其他对象上投射阴影:
• 卡
• 立方体
• 圆筒
• 球
• 合并
• 建模者
• PointCloudGenerator
• PositionToPoints
• 阅读纪
• 现场
注意: 在不同的渲染节点之间,用于创建阴影的方法有所不同:
• ScanlineRender uses depth mapping to create shadows. 它首先为投射阴影的每个光线绘制一个深度图。深度图是从光源的角度渲染的,深度图中的每个像素代表从光源到光源在特定方向上照亮的最近表面的距离。然后从相机的角度将深度图与渲染进行比较。如果相机看到的图像中的某个点比深度图中的更远,则认为该点在阴影中。
深度贴图阴影的渲染速度通常比光线跟踪阴影要快,但可能看起来不真实。
• PrmanRender creates shadows through raytracing. 它针对每个像素将来自相机的单独光线发射到场景中。当光线照射到场景中的表面时,PrmanRender会在交点和场景中的每个光源之间跟踪所谓的阴影光线。如果相交点和光源之间有障碍物,则认为相交点处于阴影中。
光线追踪的优点在于,它可以用于创建更准确的阴影以及具有柔和边缘的阴影,与真实世界中的阴影非常相似。但是,与使用深度贴图创建阴影相比,光线跟踪可以花费更长的时间进行渲染。
投射阴影:
1. | 打开场景中3D对象的属性面板。 |
2. | 检查cast shadow要么receive shadow框,或两者兼而有之。 |
Cast shadow告诉灯光路径中的对象将阴影投射到场景中的其他对象上。
Receive shadow告诉对象显示场景中其他对象投射的阴影。这对于显示场景中的遮挡很有用。
您也可以使用“场景”节点为与其连接的所有3D对象定义这些设置。在“场景”属性中,设置shadow至override inputs并使用cast shadow和receive shadow控件,以覆盖各个3D对象上的相应控件。
3. | 确保已将Shader节点附加到要接收阴影的任何3D对象。 |
4. | 给场景添加灯光,然后检查castshadows盒子上Shadows标签。 |
在下面的示例节点树中,我们使用的是ScanlineRender节点,但是您可以改用PrmanRender节点。
注意: 如果使用点光源,则ScanlineRender节点不支持投射阴影。
5. | 根据您使用的渲染节点,执行以下任一操作: |
• 使用ScanlineRender时调整阴影在下面,或
使用ScanlineRender时调整阴影
1. | 在Shadows节点属性的选项卡,设置shadow mode至: |
• solid -从灯光看到的投射阴影的对象被认为是完全固体的。
• clipped alpha -如果对象的Alpha值低于灯光的修剪阈值控件,则投射阴影的对象将被视为透明对象。所有其他alpha值完全遮挡光线。
• full alpha -阴影是根据光线穿过不透明的遮挡物时的减少程度来计算的。
这会根据对象的不透明度影响对象投射的阴影。
|
|
|
固体。(阴影是 |
剪裁的Alpha。 |
完整Alpha。 |
2. | 如果要使光节点输出阴影贴图,请设置 outputmask到要存储此内容的频道。您可以启用此功能,即使cast shadows被禁用。 |
3. | 如果您设定shadow mode至solid要么clipped alpha,您可以调整以下内容: |
• depthmap resolution -设置深度图的分辨率。较大的值会导致阴影的边缘较松脆,伪影较少,但需要更多时间进行处理。
|
|
Depthmap resolution组 到800。 |
Depthmap resolution组 至7400。 |
注意: 您还可以通过增加samples而不是增加深度图的分辨率。
• samples -设置生成柔和阴影时光的样本数量。如果场景中的柔和阴影看起来有些杂乱或嘈杂,请尝试增加此值。值越高,阴影变得越柔和。
|
|
Samples设置为1。 | Samples设置为50。 |
• jitter scale -对软阴影进行百分比更近过滤(PCF)时使用的抖动量。更大的jitter scale值可产生更柔和,更可感知的准确阴影。
PCF通过在同一点附近的许多不同位置采样深度图来工作。从光的角度来看,该点的最终阴影值是被遮挡或可见的样本数量的平均值。
• bias -这是一个恒定的偏移量,它将表面样本点从表面移向投射阴影的光。如果图像中出现自阴影伪影,则可能需要增加此值。但是请注意,如果将值增加太多,某些阴影可能会开始偏离投射它们的对象的底部。
|
|
阴影文物。 | 越来越多bias可以帮忙 减少伪像。 |
• slope bias -这就像bias,但偏移量与深度图的斜率成比例。这使您可以根据深度相对于灯光的坡度为深度图中的每个值赋予不同的偏移量。例如,如果表面相对于光线的坡度较浅,则深度图中的值可能是正确的近似值,并且不需要偏移量(或仅需要很小的偏移量)。如果表面相对于光线的坡度陡峭,则深度图中的值不太可能是正确的近似值,而需要较大的偏移量。
如果增加bias减少了现有的自阴影伪像,但在图像的其他区域引入了更多的伪像,您可能希望带来bias下降一点并增加slope bias代替。然后,调整两个值,直到对结果满意为止。
在里面clipped alpha模式,您还可以调整:
• filter -要使用的过滤器类型。有关可用过滤算法的更多信息,请参见选择过滤算法。
• clipping threshold -任何alpha值低于此阈值的表面样本均被视为透明。值越高,对象上投射阴影的区域就越多,它们被认为是透明的并且可以通过某些光线。
|
|
Clipping threshold设置为0.1。 | Clipping threshold设置为0.9。 |
4. | 如果您设定shadow mode至full alpha,您可以调整以下内容: |
• filter -要使用的过滤器类型。有关可用过滤算法的更多信息,请参见选择过滤算法。
• scene epsilon -将采样点从几何图形表面移向投射阴影的光的偏移量。增大此值可以减少自阴影伪像。
小费: 要从直射光生成准确的阴影,请通过直射光查看场景(使用“查看器”的相机下拉菜单)并调整直射光的scale控件,以便场景中应投射阴影的部分适合视图。这样可以确保深度图不会遗漏任何阴影几何形状。
使用PrmanRender时调整阴影
1. | 打开PrmanRender属性,并确保shadows已启用。 |
2. | 打开光源节点属性,然后转到Shadows标签。 |
3. | 确保shadow mode设定为solid。使用PrmanRender时,其他两种模式无关。 |
4. | 如果要从光线投射柔和的阴影,请增加 samplewidth。该值乘以阴影区域周围的软区域的宽度。值越高,软区域越大。 |
|
|
Sample width设置为1。 | Sample width设置为15。 |
5. | 如果增加sample width在上一步中,场景中产生的柔和阴影看起来像是点点杂色或嘈杂,请增加samples。设置生成柔和阴影时光线的样本数量。值越高,柔和阴影变得越平滑。 |
|
|
Samples设置为10。 | Samples设置为80。 |
6. | 如果图像中出现自阴影伪影,请增加bias 值。这会将表面样本点移离表面。但是请注意,如果将值增加太多,某些阴影可能会开始偏离投射它们的对象的底部。 |
|
|
阴影文物。 | 越来越多bias可以帮忙 减少伪像。 |