Skip to content
myl2232 edited this page Oct 30, 2020 · 22 revisions

场景Shadow和角色Shadow

阴影方案分两类,场景阴影和角色自阴影。场景阴影靠一个主光,自阴影靠UniqueShadow。

  • 最早使用的是Dynamic Shadow的方案,来制作场景阴影,场景中的一个GameObject挂载Projector,由它来限定投射范围,把project范围内的对象重画一遍黑片到一个固定RT上,虽然减少了投影pass的数量,但是对美术 并不友好,需要经常调整projector的形态,总的渲染效率来看似乎并不占优势。故而最终废掉了。
  • 采用场景主光的投影,需要把被投射的地形层、建筑物层等选入,也需把需要投射阴影的对象层都选中,否则没有阴影。另外,需要注意的是,如果在Grapics Setting当中选择了Cascade Shadow,那就默认会走一个ScreenSpace shadow,但是需要开启buildin shadow,否则看不到任何阴影。
  • 自阴影的方案UniqueShadow,主要做法是在GameObject上挂一个MeshRender,当主相机Render的时候(或者是SceneCamera、DialogCamera等),主动调用这个组件挂载一个用作投影Camera的Render,画在一个固定RT上。 起初只挂在单一角色上,每个角色独立占用一个RT,至少512x512。后期改造为多人占用一个RT,可以至少是1024x1024。在Timeline下,可能更多需要单人自阴影,可以提供更好的细节效果。在游戏运行中,使用多人自阴影 。
  • 对于Cascade shadow,需要在GraphicSetting当中开启,并且启用build-in中的ScreenSpaceShadows。但是此举会开启深度渲染。此时无论在QualitySettings当中是如何选择,一定会开启cascade。即便只是只有一级的Cascade。基本原理上是对相机方向做多级渲染,由光照方向提出一个球体来同相机裁剪区间相交,原本应该是box,用球体也是为了避免Flickering抖动,因为两帧之间如果相机移动过快,可能导致同样区域SM的有效分辨率变化极大,所以采用了球去做相交检测。

Clone this wiki locally