向 Prism 渲染图形添加阴影¶
以下步骤介绍如何向 Prism 渲染图形添加不同类型的阴影,以及如何定义哪些对象投射阴影。
有关 Prism 图形的介绍,请先参阅 Prism 图,了解创建基础 Prism 图形的分步说明。
场景设置¶
创建可用于测试阴影的基础场景。
将要投射阴影的对象添加到场景中。
本示例使用一个地面盒子和 Kanzi Studio Asset Toolkit 包中的一个汽车模型。您可以使用任何现有的对象进行操作。
转到 Asset Packages,在资源浏览视图中选择 Asset Toolkit > Car。使用鼠标将汽车模型拖放到场景中。
通过右键点击 Scene > Create > Box 向场景中添加地面盒子。
使用 Properties 面板中的 Transform 3D 属性调整盒子的位置和缩放。
在场景中选择地面盒子。在 Properties 中,转到 Mesh Material 属性,然后点击 Navigate to selected item 按钮以高亮显示该模型的材质。
从 Material Type 下拉菜单中选择 SmartPhysicallyBased,将材质类型切换为该类型。
这样会将材质切换为使用 Smart Physically Based Material 类型,这是使用阴影最简单的方式。智能材质可以轻松地按需启用或禁用着色器功能。要了解有关智能材质的更多信息,请参阅 使用智能材质。
备注
如果您的工程中还没有 Smart Physically Based Material 类型,可以在 Library > Materials and Textures > Material Types 中右键点击,然后选择 Create > Material Type > SmartPhysicallyBased 来创建一个。
创建新的材质类型时,也会自动向工程中添加一个对应的材质。将该材质用于地面盒子。
阴影材质属性¶
材质类型默认未启用阴影功能。必须启用着色器,才能支持每种阴影类型。
点击 Material Type 字段上的 Navigate to selected item,在 Library 中选择 SmartPhysicallyBasedMaterial 类型。
点击 Properties 菜单右下角的 Add Properties 按钮。启用 Shadow for Directional Light、Shadow for Point Light 和 Shadow for Spot Light。
智能材质现在已可以接收阴影。
小技巧
如果工程不使用智能材质,要在自定义材质上启用阴影,需要在材质中设置预处理器定义。
打开 Material Type,向下滚动到 Preprocessor Definitions 部分。将 KANZI_SHADER_RECEIVE_SPOT_SHADOW、KANZI_SHADER_RECEIVE_POINT_SHADOW 和 KANZI_SHADER_RECEIVE_DIRECTIONAL_SHADOW 的值设置为 1 以启用它们。
这会在材质上启用相应的各阴影类型。
创建 Prism 图¶
转到 Library > Rendering > Prism Graphs。
右键点击 Prism Graphs 文件夹,然后选择 Create > Default Prism Graph。
对大多数渲染图而言,默认 Prism 图是一个很好的起点。
选择要使用该图进行渲染的 Viewport 2D。在视口的 Properties 中找到 Render Pass Prefab 属性,然后从下拉菜单中选择已创建的 Prism 图。
渲染效果可能看起来与之前相同,但现在使用的是已创建的 Prism 图。
聚光灯阴影¶
在场景对象上,按住 Alt 并右键点击以打开对象创建菜单。选择 Spot Light 以创建新的聚光灯。将聚光灯移动到能照亮对象并投射阴影的位置。
在 Library 中 双击 Prism 图以将其打开。
向图中添加一个新的 Generate Shadow Map 节点。在 Light 下拉菜单中选择聚光灯。
点击 + 图标并选择 Shadows > Spot Shadow Map,将 Spot Shadow Map 属性添加到 Multi-Draw 节点。
将 Generate Shadow Map 节点的输出插槽连接到 Multi-Draw 节点的 Spot Shadow Map 插槽。
图现在已完成,对象应会投射聚光灯阴影。
调整阴影接触点¶
有时阴影可能看起来略微浮在表面上方。阴影具有近平面和远平面设置,用于定义阴影贴图的深度范围。这两项设置都会影响阴影与表面的对齐方式。
可以通过向光源添加 Camera Near、Camera Far 和 Shadow Bias 属性来调整这些设置。
小技巧
一个常见问题是阴影痤疮 (shadow acne),即阴影出现斑点或瑕疵。这通常是由阴影贴图中的精度问题引起的。向相应的光源类型添加 Spot Shadow Bias、Point Shadow Bias 或 Directional Shadow Bias 可以改善这一问题。
调整阴影分辨率¶
可以在 Prism 编辑器中调整阴影贴图分辨率。
点击 Generate Shadow Map 节点上的 + 图标,添加 Width 和 Height 属性并调整其值。
提高分辨率能以牺牲性能为代价改善阴影质量。
点光源阴影¶
点光源阴影与聚光灯阴影大体相似,但它从空间中的一个点向所有方向投射阴影。
在 Kanzi 中,主要区别在于如何在 Prism 图中设置阴影贴图分辨率。
按住 Alt 并右键点击 Scene。选择 Point Light。
在 Library 中双击该 Prism 图将其打开。
向图中添加一个新的 Generate Shadow Map 节点,并向 Multi-Draw 节点添加 Point Shadow Map 属性。
Point Shadow Map 节点将给定的立方体贴图深度合成到 Multi-Draw 通道中。它的插槽需要一个立方体贴图深度纹理作为输入。
将 Generate Shadow Map 节点的输出插槽连接到 Multi-Draw 节点的 Point Shadow Map 插槽。
在 Light 下拉菜单中选择点光源。
光源必须为 Point Light 类型,点光源阴影才能生效。
与聚光灯阴影类似,可以向光源添加 Camera Near、Camera Far 和 Shadow Bias 属性来调整阴影外观。有关更多详细信息,请参阅 调整阴影接触点。
Prism 图现在已完成,对象应会投射点光源阴影。
提高点光源阴影分辨率¶
如果需要调整默认分辨率,可以在 Generate Shadow Map 节点的属性中提高分辨率。
点击 Generate Shadow Map 节点上的 + 图标,然后添加 Cubemap Resolution 属性。
将分辨率提高到更高的值(例如 256),以提升阴影质量。
请注意,更高分辨率的阴影可能会影响性能。
方向阴影¶
方向阴影通常用于模拟阳光或其他远距离光源。
其过程与其他阴影类型类似,但方向阴影需要额外的属性来定义阴影区域。
右键点击 Scene,然后选择 Create > Directional Light。
选择该光源,然后点击 Properties 面板右下角的 Add Properties 按钮。为其添加 Z Far、Z Near 和 Orthographic Plane Size 属性。
这些属性定义渲染阴影的区域。调整这些值,使其覆盖需要阴影的区域。Orthographic Plane Size 定义投射阴影区域的尺寸,而 Z Near 和 Z Far 定义深度范围。
配置完光源属性后,在 Prism 图中设置阴影贴图。
在 Library 中双击该 Prism 图将其打开。
向图中添加一个新的 Generate Shadow Map 节点,并为 Multi-Draw 节点添加 Directional Shadow Map 属性。
将 Generate Shadow Map 节点的输出插槽连接到 Multi-Draw 节点的 Directional Shadow Map 插槽。
从 Light 下拉菜单中选择该方向光。
光源必须为 Directional Light 类型,方向阴影才能生效。
要了解如何调整阴影分辨率,请参阅 调整阴影分辨率。
图现已完成。
配置了全部三种阴影类型的最终 Prism 图如下所示:
现在,所有阴影类型都应在场景中可见。