阴影

在 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 阴影类型一般用于较为简单的场景。

plannar properties

属性 说明
Enabled 是否开启阴影效果
Type 阴影类型
ShadowColor 设置阴影颜色
Normal 垂直于阴影的法线,用于调整阴影的倾斜度
Distance 阴影接收平面与坐标原点的距离

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

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

ShadowMap

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

shadow Map 面板细节

属性 说明
Enabled 是否开启阴影效果
Type 设置阴影类型
ShadowColor 设置阴影颜色
Pcf 设置阴影边缘反走样等级,目前包括 HARDFILTER_X5FILTER_X9FILTER_X25 四种,详情可参考下文 PCF 软阴影 部分的介绍。
MaxReceived 最多支持产生阴影的光源数量,默认为 4 个,可根据需要自行调整
Bias 设置阴影偏移值,防止 z-fitting
Packing shadowMap 压缩,部分不支持浮点纹理的设备可开启该项。该项可优化性能,但纹理质量较低(与 Linear 项互斥,二者只能选其一)
Linear 开启线性深度,仅对聚光灯生效,可用于提高聚光灯的阴影质量(与 Packing 项互斥)
SelfShadow 开启场景中物体的自阴影效果
NormalBias 设置法线偏移值,取值范围为 -1 ~ 1。当开启了 SelfShadow 后,物体的弯曲表面出现漏光现象,可以通过调整该项的值来解决(该项仅在勾选了 SelfShadow 后显示)
AutoAdapt 若勾选该项,则自动计算阴影产生的范围,详情可参考下文介绍。
若不勾选该项,则启用下列属性来手动设置阴影产生的范围
Near 设置主光源相机的近裁剪面
Far 设置主光源相机的远裁剪面
orthoSize 设置主光源相机的正交视口大小
ShadowMapSize 设置阴影的纹理贴图大小
Aspect 设置主光源相机的正交投影矩阵长宽比

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

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

PCF 软阴影

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

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

AutoAdapt 自适应阴影计算技术

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

支持动态合批提高性能

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

条与 "" 相匹配的结果

    没有与 "" 匹配的结果