# CSM performance

**URL:** <https://forum.babylonjs.com/t/csm-performance/28461>\
**Category:** Feature requests\
**Tags:** lighting\
**Created:** [March 16, 2022, 2:19am UTC](https://forum.babylonjs.com/t/csm-performance/28461 "2022-03-16T02:19:33Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![woniubushiniu](https://sea2.discourse-cdn.com/flex024/user_avatar/forum.babylonjs.com/woniubushiniu/32/22130_2.png) [@woniubushiniu](https://forum.babylonjs.com/u/woniubushiniu)\
**Post date:** [March 16, 2022, 2:19am UTC](https://forum.babylonjs.com/t/csm-performance/28461/1 "2022-03-16T02:19:33Z")

</div>

when i use csm as shadowGenerator,the draw call will increase when numCascades increase.can we use subfrustum culling to reduce draw call?

---

<div class="post-metadata">

**Author:** ![Evgeni\_Popov](https://sea2.discourse-cdn.com/flex024/user_avatar/forum.babylonjs.com/evgeni_popov/32/4432_2.png) [@Evgeni\_Popov](https://forum.babylonjs.com/u/Evgeni_Popov)\
**Post date:** [March 16, 2022, 10:54am UTC](https://forum.babylonjs.com/t/csm-performance/28461/2 "2022-03-16T10:54:52Z")

</div>

You can use your own culling for each cascade by implementing the `getCustomRenderList` callback.

See [Cascaded Shadow Maps | Babylon.js Documentation](https://doc.babylonjs.com/divingDeeper/lights/shadows_csm#culling)

---

<div class="post-metadata">

**Author:** ![woniubushiniu](https://sea2.discourse-cdn.com/flex024/user_avatar/forum.babylonjs.com/woniubushiniu/32/22130_2.png) [@woniubushiniu](https://forum.babylonjs.com/u/woniubushiniu)\
**Post date:** [March 16, 2022, 10:59am UTC](https://forum.babylonjs.com/t/csm-performance/28461/3 "2022-03-16T10:59:34Z")

</div>

ok,thank you .Is there a pg to deal with it?I am a novice

---

<div class="post-metadata">

**Author:** ![Evgeni\_Popov](https://sea2.discourse-cdn.com/flex024/user_avatar/forum.babylonjs.com/evgeni_popov/32/4432_2.png) [@Evgeni\_Popov](https://forum.babylonjs.com/u/Evgeni_Popov)\
**Post date:** [March 16, 2022, 11:34am UTC](https://forum.babylonjs.com/t/csm-performance/28461/4 "2022-03-16T11:34:36Z")

</div>

I don’t know if someone ever implemented a custom culling for CSM…

---

<div class="post-metadata">

**Author:** ![woniubushiniu](https://sea2.discourse-cdn.com/flex024/user_avatar/forum.babylonjs.com/woniubushiniu/32/22130_2.png) [@woniubushiniu](https://forum.babylonjs.com/u/woniubushiniu)\
**Post date:** [March 16, 2022, 1:57pm UTC](https://forum.babylonjs.com/t/csm-performance/28461/5 "2022-03-16T13:57:51Z")

</div>

i see the source code,and find

```auto

        this._shadowMap.onBeforeRenderObservable.add((layer: number) => {
            if (this._sceneUBOs) {
                this._scene.setSceneUniformBuffer(this._sceneUBOs[layer]);
            }
            this._currentLayer = layer;
            if (this._filter === ShadowGenerator.FILTER_PCF) {
                engine.setColorWrite(false);
            }
            this._scene.setTransformMatrix(this.getCascadeViewMatrix(layer)!, this.getCascadeProjectionMatrix(layer)!);
            if (this._useUBO) {
                this._scene.getSceneUniformBuffer().unbindEffect();
                this._scene.finalizeSceneUbo();
            }
        });

```

i think frustum culling has been implemented,Could it be a problem with the frustum matrix calculation that caused an error in frustum culling?

---

<div class="post-metadata">

**Author:** ![Evgeni\_Popov](https://sea2.discourse-cdn.com/flex024/user_avatar/forum.babylonjs.com/evgeni_popov/32/4432_2.png) [@Evgeni\_Popov](https://forum.babylonjs.com/u/Evgeni_Popov)\
**Post date:** [March 16, 2022, 2:02pm UTC](https://forum.babylonjs.com/t/csm-performance/28461/6 "2022-03-16T14:02:10Z")

</div>

This code is not doing frustum culling for the cascade, it is simply setting the transformation matrix used by the mesh rendering code.

Culling would involve getting the bounding box of each mesh, transforming them by the transformation matrix and testing them against the frustum of the cascade, something which is currently not implemented.

---

<div class="post-metadata">

**Author:** ![sebavan](https://sea2.discourse-cdn.com/flex024/user_avatar/forum.babylonjs.com/sebavan/32/57_2.png) [@sebavan](https://forum.babylonjs.com/u/sebavan)\
**Post date:** [March 16, 2022, 4:43pm UTC](https://forum.babylonjs.com/t/csm-performance/28461/7 "2022-03-16T16:43:41Z")

</div>

@woniubushiniu please try to keep the question in one thread as this looks like a dup of [woniubushiniu](https://forum.babylonjs.com/u/woniubushiniu)
