# In three js have Occlusion Culling?

**URL:** <https://discourse.threejs.org/t/in-three-js-have-occlusion-culling/15076>\
**Category:** Questions\
**Tags:** optimization, culling, occlusion\
**Created:** [May 11, 2020, 4:01am UTC](https://discourse.threejs.org/t/in-three-js-have-occlusion-culling/15076 "2020-05-11T04:01:18Z")\
**Posts on this page:** 9\
**Page:** 1

<div class="post-metadata">

**Author:** ![pagongamedev](https://yyz1.discourse-cdn.com/flex035/user_avatar/discourse.threejs.org/pagongamedev/32/6687_2.png) [@pagongamedev](https://discourse.threejs.org/u/pagongamedev)\
**Post date:** [May 11, 2020, 4:01am UTC](https://discourse.threejs.org/t/in-three-js-have-occlusion-culling/15076/1 "2020-05-11T04:01:18Z")

</div>

in three js have Occlusion Culling ?!

look like this.  
 ![bae16e2ef3993ce658d0874aa5477d12](https://canada1.discourse-cdn.com/flex035/uploads/threejs/original/2X/c/c68e930965b29be39645c43ae4ad1cd7808c937e.jpeg)

![0_R76SDHvk8h-6ZJ0a](https://canada1.discourse-cdn.com/flex035/uploads/threejs/original/2X/6/61406af82ba29741938fbd22ec5328d88f0b255a.jpeg)

---

<div class="post-metadata">

**Author:** ![Fyrestar](https://yyz1.discourse-cdn.com/flex035/user_avatar/discourse.threejs.org/fyrestar/32/52793_2.png) [@Fyrestar](https://discourse.threejs.org/u/Fyrestar)\
**Post date:** [May 11, 2020, 8:26am UTC](https://discourse.threejs.org/t/in-three-js-have-occlusion-culling/15076/2 "2020-05-11T08:26:43Z")

</div>

THREE performs by default frustum culling like in the first image, but no standard for occlusion culling yet - you can add it yourself if you know how to deal with the bare WebGL api, it’s a WebGL 2 feature though without a WebGL 1 fallback.

---

<div class="post-metadata">

**Author:** ![Mugen87](https://yyz1.discourse-cdn.com/flex035/user_avatar/discourse.threejs.org/mugen87/32/5645_2.png) [@Mugen87](https://discourse.threejs.org/u/Mugen87)\
**Post date:** [May 11, 2020, 8:53am UTC](https://discourse.threejs.org/t/in-three-js-have-occlusion-culling/15076/3 "2020-05-11T08:53:45Z")

</div>

Related PR at GitHub:

> <https://github.com/mrdoob/three.js/pull/15450>

---

<div class="post-metadata">

**Author:** ![Three65](https://yyz1.discourse-cdn.com/flex035/user_avatar/discourse.threejs.org/three65/32/27993_2.png) [@Three65](https://discourse.threejs.org/u/Three65)\
**Post date:** [September 22, 2023, 6:14pm UTC](https://discourse.threejs.org/t/in-three-js-have-occlusion-culling/15076/4 "2023-09-22T18:14:28Z")

</div>

So is this integrated into Threejs now? I followed the link for the example, but where in the world is the code that makes the example work?

---

<div class="post-metadata">

**Author:** ![Lawrence3DPK](https://yyz1.discourse-cdn.com/flex035/user_avatar/discourse.threejs.org/lawrence3dpk/32/29184_2.png) [@Lawrence3DPK](https://discourse.threejs.org/u/Lawrence3DPK)\
**Post date:** [September 22, 2023, 10:51pm UTC](https://discourse.threejs.org/t/in-three-js-have-occlusion-culling/15076/5 "2023-09-22T22:51:33Z")

</div>

@Three65

 ![Screenshot_20230922_235020](https://canada1.discourse-cdn.com/flex035/uploads/threejs/original/3X/c/3/c3aa32685ce5e60c62ee9d5dd37c8e52ad94cc0d.jpeg)  
It looks like it hasn’t been merged yet…

---

<div class="post-metadata">

**Author:** ![ThisIsMonta](https://yyz1.discourse-cdn.com/flex035/user_avatar/discourse.threejs.org/thisismonta/32/48176_2.png) [@ThisIsMonta](https://discourse.threejs.org/u/ThisIsMonta)\
**Post date:** [October 25, 2024, 4:14pm UTC](https://discourse.threejs.org/t/in-three-js-have-occlusion-culling/15076/6 "2024-10-25T16:14:52Z")

</div>

They just closed the pull request, for now WebGL2 Occlusion queries will be available only for **WebGPURenderer**

---

<div class="post-metadata">

**Author:** ![Mugen87](https://yyz1.discourse-cdn.com/flex035/user_avatar/discourse.threejs.org/mugen87/32/5645_2.png) [@Mugen87](https://discourse.threejs.org/u/Mugen87)\
**Post date:** [October 26, 2024, 8:01pm UTC](https://discourse.threejs.org/t/in-three-js-have-occlusion-culling/15076/7 "2024-10-26T20:01:23Z")

</div>

Respective demo: [three.js webgpu - occlusion](https://threejs.org/examples/webgpu_occlusion)

---

<div class="post-metadata">

**Author:** ![Lawrence3DPK](https://yyz1.discourse-cdn.com/flex035/user_avatar/discourse.threejs.org/lawrence3dpk/32/29184_2.png) [@Lawrence3DPK](https://discourse.threejs.org/u/Lawrence3DPK)\
**Post date:** [October 26, 2024, 8:11pm UTC](https://discourse.threejs.org/t/in-three-js-have-occlusion-culling/15076/8 "2024-10-26T20:11:45Z")

</div>

This is immensely satisfying!

---

<div class="post-metadata">

**Author:** ![wildy13](https://yyz1.discourse-cdn.com/flex035/user_avatar/discourse.threejs.org/wildy13/32/53564_2.png) [@wildy13](https://discourse.threejs.org/u/wildy13)\
**Post date:** [March 25, 2025, 8:56am UTC](https://discourse.threejs.org/t/in-three-js-have-occlusion-culling/15076/9 "2025-03-25T08:56:09Z")

</div>

> [@ThisIsMonta](#):
>
> hey just close

in xr, can we using occlusion culling?
