欢迎来到天天文库
浏览记录
ID:14514911
大小:593.50 KB
页数:16页
时间:2018-07-29
《unity3d角色阴影制作》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、本文将重点介绍两种目前在移动平台上的主流阴影制作技术,同时也会简单介绍两种移动平台上相对较为高级的动态阴影生成方法。 更多精彩请关注【狗刨学习网】 由于目前主流使用Unity3.x在移动平台上并不支持阴影的动态生成技术,所以目前最普遍流行同时性价比也最高的阴影生成方法有以下两种:1、 简单贴图法 所谓简单贴图法即是直接在角色的角底附加一个阴影半透明贴图,并让其跟随角色一起运动,一般是将该阴影Object成为角色模型的子物体,该种阴影生成效果如下: 阴影的Inspector视图如下:
2、 其中ShadowComponent是控制阴影的一个脚本,与其生成无关,故不再这里介绍。影响该应用生成的主要有两个部分,一个是Shadow网格,另外一个则是渲染所需要的材质“NoName”。需要注意的是,Shadow网格是一个平面,但不建议使用Unity自身生成的Plane,因为Unity生成的面数较多,可通过3DMax等建模工具来自行建模,如下所示: 对于材质,最重要的则是Shader的书写,我将其列在下方,以方便大家使用:1.2.Shader"iPh
3、one/SimpleShadow" 3.{4. Properties5. {6. _MainTex("MainTex",2D)=""{} 7. }8. SubShader9. {10. Tags{"Queue"="Transparent"} 11. Pass12. {13. BlendSrcAlphaOneMinusSrcAlpha14. Color[_clrBase]15. CullOff1. Lighti
4、ngOff2. SetTexture[_MainTex]{combinetexture,one-texture}3. }4. }5.}6.复制代码 通过以上设置即可生成最简单的阴影效果,大家可以通过自己设定脚本来控制阴影的移动和变化等等。 但是,该阴影生成方法有一个明显的“硬伤”,即该阴影只能适用于平坦的地面,一旦地面凹凸不平或有遮挡物,则会出现“穿帮”的效果,如下图所示,该方法生成的阴影对脚下的正方体完全没有影响,所以为了解决这种问题,投影生成法应运而生。 2、
5、投影生成法 该方法本质上来说是一种贴花(Decal)技术,即设定一个投影器,然后将阴影贴图投射到你想展现阴影的地方,该方法的优点在于投影效果不取决于被投影区域的几何形状,即被投影区域可以任意凹凸的曲面,也可以处理各种障碍物。该方法生成的阴影效果如下: 下面我就具体介绍一下该阴影的生成方法: (1)通过“GameObject->CreateEmpty”来创建一个空的物体,并取名为“ShadowProjector”。 (2)通过“Component->Effects->rojector”在该空物体上加入P
6、rojector组件,并通过平移、旋转和调整参数达到如下效果: (3)然后在Material选项中拖入已经准备好的材质,即可投影出阴影,效果如下: 我们看到,场景中不仅生成了阴影,同时角色的身体也“变黑”了,这是因为投影器的“IgnoreLayers”设定为“Nothing”的缘故,我们将可忽略层设为角色的层“Player”,则可使角色不再被投影,效果如下: (4)最终的ShadowProjector的Inspector视图如下: 其中材质所用到的shader为:1.7、ontface="新宋体"size="2">2.Shader"Projector/Multiply"{ 3. Properties{4. _ShadowTex("Cookie",2D)="gray"{TexGenObjectLinear} 5. _FalloffTex("FallOff",2D)="white"{TexGenObjectLinear } 6. }7. Subshader{1. Tags{"RenderType"="Transparent-1"} 2. Pass{38、. ZWriteOff4. Fog{Color(1,1,1)}5. AlphaTestGreater06. ColorMaskRGB7. BlendDstColorZero8. Offset-1,-19. SetTexture[_ShadowTex]{10.
7、ontface="新宋体"size="2">2.Shader"Projector/Multiply"{ 3. Properties{4. _ShadowTex("Cookie",2D)="gray"{TexGenObjectLinear} 5. _FalloffTex("FallOff",2D)="white"{TexGenObjectLinear } 6. }7. Subshader{1. Tags{"RenderType"="Transparent-1"} 2. Pass{3
8、. ZWriteOff4. Fog{Color(1,1,1)}5. AlphaTestGreater06. ColorMaskRGB7. BlendDstColorZero8. Offset-1,-19. SetTexture[_ShadowTex]{10.
此文档下载收益归作者所有