
Three.js์์ Points ๊ฐ์ฒด๋ฅผ ์ด์ฉํด ์
์ ๊ธฐ๋ฐ์ผ๋ก ์ค๋ธ์ ํธ๋ฅผ ๊ตฌ์ฑํ๊ณ ์์๋๋ฐ, ์ด์ํ๊ฒ๋ ํน์ ์นด๋ฉ๋ผ ์์น๋ ๊ฑฐ๋ฆฌ์์ ์ผ๋ถ ์ค๋ธ์ ํธ๊ฐ ๋ ๋๋ง๋์ง ์๋ ํ์์ด ๋ฐ์ํ๋ค.
์ง์ ์ ์ธ ์์ธ์ ์ถ์ ํด๋ณธ ๊ฒฐ๊ณผ, ์ด๋ Three.js์ ์ ๋์ฒด ์ปฌ๋ง(Frustum Culling) ๋๋ฌธ์ ๋ฐ์ํ ์ด์์๋ค.
โ ์ ๋์ฒด ์ปฌ๋ง์ด๋?
์นด๋ฉ๋ผ์ ์์ผ(์ ๋์ฒด) ๋ฐ์ ์๋ ์ค๋ธ์ ํธ๋ฅผ ์๋์ผ๋ก ๋ ๋๋ง ๋์์์ ์ ์ธํ์ฌ ์ฑ๋ฅ์ ์ต์ ํํ๋ ๊ธฐ์ ์ด๋ค.
ํ์ง๋ง ๋ด๊ฐ ๋์ ์ผ๋ก ์์ฑํ THREE.Points ์ค๋ธ์ ํธ๋ boundingSphere๊ฐ ์๋์ผ๋ก ์
๋ฐ์ดํธ๋์ง ์์์ ์ ๋์ฒด ๋ฐ์ผ๋ก ์ธ์๋์๊ณ , ๊ทธ ๊ฒฐ๊ณผ ๋ ๋๋ง๋์ง ์๋ ์ํฉ์ด ๋ฒ์ด์ก๋ ๊ฒ์ด๋ค.
| ์ ๋์ฒด ์ | ์ ๋์ฒด ๋ฐ |
|---|---|
![]() | ![]() |
Three.js์ ๊ฐ์ 3D ๊ทธ๋ํฝ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ์ ๋์ฒด(Frustum)๋ ์นด๋ฉ๋ผ๊ฐ "๋ณผ ์ ์๋ ๊ณต๊ฐ"์ ์๋ฏธํ๋ค.
์ ํํ ๋งํ๋ฉด ์นด๋ฉ๋ผ๊ฐ ๋ฐ๋ผ๋ณด๋ ๋ฐฉํฅ์ ๊ธฐ์ค์ผ๋ก ์๋ฆฐ ํผ๋ผ๋ฏธ๋ ํํ์ ๊ณต๊ฐ์ด๋ฉฐ, ์ด ๊ณต๊ฐ ์์ ์๋ ๊ฐ์ฒด๋ค๋ง ๋ ๋๋ง๋๋ค.
์ด๋ GPU ๋ฆฌ์์ค๋ฅผ ์ ์ฝํ๊ณ ๋ ๋๋ง ์ฑ๋ฅ์ ๋์ด๊ธฐ ์ํ ์ค์ํ ์ต์ ํ ๊ธฐ๋ฒ ์ค ํ๋๋ค.

๐ ์๋๋ ๋๋ฒ๊น ์ค ์งํํ๋ ๋จ๊ณ๋ณ ๋ก๊ทธ๋ค.
Points๊ฐ ๋ถ๋ช
ํ ์ฌ์ ์กด์ฌํ์ง๋ง ํ๋ฉด์ ๋ณด์ด์ง ์์.geometry.computeBoundingSphere() ๋ฅผ ๋ช
์์ ์ผ๋ก ํธ์ถํ์ง ์์ Three.js ๋ด๋ถ์์ ์ ๋์ฒด ๊ต์ฐจ ํ์ ์ด ์ ๋๋ก ๋์ง ์์.computeBoundingSphere()๋ฅผ ํธ์ถ geometry.computeBoundingSphere();
geometry.boundingSphere = new THREE.Sphere(new THREE.Vector3(0, 0, 0), 25);
Points, InstancedMesh ๋ฑ ๋์ ์ผ๋ก ๊ตฌ์ฑํ Geometry์๋ bounding ์ ๋ณด๊ฐ ์
๋ฐ์ดํธ ๋์ง ์๋ ๊ฒฝ์ฐ๊ฐ ์์ผ๋ฏ๋ก, ์ ๋์ฒด ์ปฌ๋ง์ ๊ณ ๋ คํ ๋ณ๋์ ์ฒ๋ฆฌ๊ฐ ํ์ํ๋ค.์ด๋ฒ ์ ๋์ฒด ์ปฌ๋ง ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ฉฐ, ์ด์ ๋น์ฃผ์ผ์ ์ผ๋ก ๋ณด๋ค ์์ ๋ ํ๊ฒฝ์ ๋ง๋ค ์ ์๊ฒ ๋์๋ค.