关键点:
1、需要显示阴影的mesh 的 receiveShadows 属性设置为true
2、阴影对光源有限制,一般为定向光
3、级联阴影更容易生成真实的阴影
4、开启光源的autoCalcShadowZBounds 属性更容易生成阴影
// 创建定向光
this.light = new BABYLON.DirectionalLight(
'DirectionalLight',
new BABYLON.Vector3(0.2, -0.7, 0.4),
this._scene,
)
// 自动计算阴影投射的最小和最大 Z 值
this.light.autoCalcShadowZBounds = true
// 创建一个级联阴影生成器,并传入阴影贴图分辨率和光源
this.shadowGenerator = new BABYLON.CascadedShadowGenerator(1920, this.light);
// 设置阴影偏移量
this.shadowGenerator.bias = 0.001;
// 设置级联阴影参数 lambda
this.shadowGenerator.lambda = 0.9;
// 设置阴影投射的最大 Z 值为 3500
this.shadowGenerator.shadowMaxZ = 3500;
//添加需要投射阴影的mesh
this.shadowGenerator.addShadowCaster(mesh)
// 开启接收阴影 将需要显示阴影的mesh 的 receiveShadows 属性设置为true
const ground = BABYLON.MeshBuilder.CreateGround('ground', { width: 10000, height: 10000 })
ground.receiveShadows = true