阴影

在 3D 世界中,光与影一直都是极其重要的组成部分,它们能够丰富整个环境,质量好的阴影可以达到以假乱真的效果,并且使得整个世界具有立体感。

Creator 3.0 目前支持 PlanarShadowMap 两种阴影类型。

shadow

开启阴影

物体开启阴影效果的步骤如下:

  1. 层级管理器 中选中 Scene,然后在 属性检查器shadows 组件中勾选 Enabled 属性。

    enable-shadow

  2. 层级管理器 中选中需要显示阴影的 3D 节点,然后在 属性检查器MeshRenderer 组件中将 ShadowCastingMode 属性设置为 ON

    set-meshrenderer

    若阴影类型是 ShadowMap,还需要将 MeshRenderer 组件上的 ReceiveShadow 属性设置为 ON

注意:如果阴影无法正常显示,需要调整一下方向光的照射方向。

shadows 类型

阴影类型可在 shadows 组件的 Type 属性中设置。

Planar shadow

Planar 阴影类型一般用于较为简单的场景。

planar properties

属性说明
Enabled是否开启阴影效果
Type阴影类型
Saturation调节阴影饱和度
ShadowColor设置阴影颜色
Normal垂直于阴影的法线,用于调整阴影的倾斜度
Distance阴影在法线的方向上与坐标原点的距离

调节方向光照射的方向可以调节阴影的投射位置。

注意:Planar 类型的阴影只有投射在平面上才能正常显示,不会投射在物体上,也就是说 MeshRenderer 组件中的 ReceiveShadow 属性是无效的。

ShadowMap

ShadowMap 是以光源为视点来渲染场景的。从光源位置出发,场景中看不到的地方就是阴影产生的地方。

shadow Map 面板细节

属性说明
Enabled是否开启阴影效果
Type设置阴影类型
Saturation调节阴影饱和度
Pcf设置阴影边缘反走样等级,目前支持 HARDSOFTSOFT_2X,详情可参考下文 PCF 软阴影 部分的介绍。
MaxReceived最多支持产生阴影的光源数量,默认为 4 个,可根据需要自行调整
Bias设置阴影偏移值,防止 z-fiting
NormalBias设置法线偏移值,防止曲面出现锯齿状
ShadowMapSize设置阴影纹理大小
AutoAdapt若勾选该项,则自动计算阴影产生的范围,详情可参考下文介绍。
若不勾选该项,则启用下列属性来手动设置阴影产生的范围
Near设置主光源相机的近裁剪面
Far设置主光源相机的远裁剪面
OrthoSize设置主光源相机的正交视口大小

ShadowMap 在开启了物体 MeshRenderer 组件上的 ReceiveShadow 后,就会接收并显示其它物体产生的阴影效果。

ShadowMap 一般用于要求光影效果比较真实,且较为复杂的场景。但不足之处在于如果不移动光源,那么之前生成的 Shadow Map 就可以重复使用,而一旦移动了光源,那么就需要重新计算新的 ShadowMap。

PCF 软阴影

百分比渐近过滤(PCF)是一个简单、常见的用于实现阴影边缘反走样的技术,通过对阴影边缘进行平滑处理来消除阴影贴图的锯齿现象。原理是在当前像素(也叫做片段)周围进行采样,然后计算样本跟片段相比更接近光源的比例,使用这个比例对散射光和镜面光成分进行缩放,然后再对片段着色,以达到模糊阴影边缘的效果。

目前 Cocos Creator 支持 5 倍、9 倍 和 25 倍采样,倍数越大,采样区域越大,阴影边缘也就越模糊。

AutoAdapt 自适应阴影计算技术

AutoAdapt 自适应阴影计算会自动计算视口(lightView)下阴影产生的范围,以及阴影相机的远近。

支持动态合批提高性能

对于材质中已经开启 instancing 的模型,平面阴影也会自动同步使用 instancing 绘制,详情请参考 动态合批