Dynamic Shadow Projector

来源:互联网 发布:砍柴网源码 编辑:程序博客网 时间:2024/06/10 16:39
本教程演示如何将动态阴影投影对象添加到场景中。
双击点击视频演示!吐舌头


1.开始新建一个场景
现在,场景只有一个主摄像机以及一个定向光。在项目中,有DynamicShadowProjector和标准资源(相机包和角色包)。

2.添加一个平面对象和角色对象
你已经有一个地形对象,并在场景中的玩家角色对象。在本教程中,我使用标准的资源平面物体作为一个地形,并ThirdPersonController作为一个玩家角色。

3.关闭阴影贴图
如果你能在这一点上看到一个影子,它是一个阴影贴图。选择Hierarchy视图中的定向光,并更改阴影类型为“No Shadows”。如果你想使用GI,它可能会更好地使用质量设置来禁用阴影贴图。

4.创建一个投影对象
定向光线下创建一个空的游戏对象,因此该对象的变换可以相同变换方向的光线,并将其命名为对象的“Shadow Projector”。

5.添加“Draw Target Object”组件到投影机的对象
,点击“AddComponent”在Inspector 视图按钮,然后选择“Scripts”>“DynamicShadowProjector”>“Draw Target Object”。

6. 设置角色对象作为目标
影子投影对象应具有 Projector(投影)组件,ShadowTexture Renderer(渲染影子纹理) 组件,和Draw Target Object (绘制目标对象)的组件。拖动ThirdPersonController对象(角色对象),并将其拖放到Draw Target Object component组件Target插槽里。


7.创建阴影投影机新材质
接下来,你需要创建一个材质为这个投影组件。右键单击Assets文件夹,选择“Create”>“Material”。然后,命名材质“影子投影机”。您可以为这种材质使用任何投影着色器,例如,“Projector/Multiply”着色器的标准的资源里的 Effects package。在本教程中,我想用“DynamicShadowProjector/Projector/Dynamic/MipmappedShadow”着色器演示百分比接近过滤器像软阴影。


8.Projector组件指定材质
选择 Hierarchy视图的ShadowProjector对象,拖动Projector的材质,并将其拖放到Projector组件的Material插槽里。


9.调整 这个Projector的位置和大小
现在是准备好绘制阴影。设置Projector组件的参数,并调整为下面的图片在场景视图投影对象的位置。请注意的是,位置的右侧值将根据该角色对象的位置发生变化。确保阴影图像位于纹理的中心。


10.纹理设置更改
要充分利用Mipmapped阴影着色器的优势,你需要改变纹理设置为如下图所示。你会看到在场景鉴于阴影纹理窗口几个影子图像。最左边的图像是MIP 0级图像,最右边的图像是最高级别的图像。
*版本 1.0有一个内存泄漏的bug。如果mip级别大于0,一个临时渲染纹理尚未释放每一帧。1.0.1版本即将发布。请不要忘记更新该资源。


11.调整剪切面距离
尽管模糊的影子Mipmapped影子纹理,人物对象仍然有一个硬的阴影。这是因为,MIP 0级的图像始终用于阴影。通过Mipmapped阴影着色器选择了一个MIP级别从Projector 的近剪裁平面和阴影被丢弃点之间的距离的。这意味着,mip级别0将被用于绘制阴影周围邻近剪辑平面,和最高水平将用于绘制阴影围绕远截面。因此,要使阴影更加模糊需要调整的 Projector 组件的剪裁平面。

12.为角色对象添加一个图层
如果你从角色后面看一下,你会发现,阴影在人物的脚铸造。要删除角色自身投射阴影,你需要为角色对象添加一个Layer。点击“Layers”下拉菜单,在单位窗口的顶部右侧,然后选择“Edit Layers...”。然后你会看到在Inspector视图“Tags& Layers”设置。输入图层名称到用户层。


13.为角色对象指定层
选择角色对象,并指定在 Inspector 视图Layer指定Shadow Caster。



14.在这个Projector
添加忽略层

回到ShadowProjector对象,在Projector组件添加“Ignore Layers”。然后添加Shadow Caster,自身投下阴影就会消失。


15.添加备用部件
现在阴影看上去很完美了,但还有一个步骤。Mipmapped阴影着色器使用tex2Dlod功能。它需要支持ShaderModel 3.0(的DirectX)的OpenGL ES3.0OpenGL ES 2.0+纹理LOD扩展。因此,它可能无法正常工作的一些老设备。更好准备一个备用的设备,特别是如果你的目标是移动设备。

点击“AddFallback Component”按钮。然后,Mipmapped阴影备用组件将被添加到影子投影对象。如果你勾选“Test Fallback”,你可以测试场景视图中回退,并调整回退参数



16.添加一个摄像机和播放的场景
现在是时候测试场景了。为了更容易检查的阴影,让我们添加一个摄像机。拖放MultipurposeCameraRig在标准的资源进入现场,并设置角色目标的摄像机的目标。不要忘了删除旧的主摄像机。