VR ์ปจํธ๋กค๋ฌ๋ฅผ ์ฌ์ฉํ์ฌ ์๋ง์ 3D ๊ฐ์ฒด์ ์ํธ ์์ฉํ ์ ์๋ WebVR-Vive-Dragging ๊ณผ ์ ์ฌํ VR ์์ฉ ํ๋ก๊ทธ๋จ์ ๊ตฌ์ถํ์ต๋๋ค. ์ฆ, ์ฌ์ฉ์๋ VR ์ปจํธ๋กค๋ฌ๋ก ๊ฐ์ฒด๋ฅผ ์ก๊ณ ์ด๋ํ๊ฑฐ๋ ํฌ๊ธฐ๋ฅผ ์กฐ์ ํ ์ ์์ต๋๋ค.
๋ฌธ์ : ์ฅ๋ฉด์ ๋ณต์กํ 3D ๊ฐ์ฒด๊ฐ ์๋ ๊ฒฝ์ฐ(์: THREE.Mesh
๊ฐ์ฒด์ ์ ์ ์๊ฐ ๋งค์ฐ ๋ง์ ํ์์ด ์๋ ๊ฒฝ์ฐ) ์ถฉ๋ ๊ฐ์ง ์ค ๋ ์ด์บ์คํ
์ด ๋งค์ฐ ๋๋ ค์ง๋๋ค. ๋ฐ๋ผ์ ๋ฌธ์ ๋ ํ ๊ฐ์ฒด์ ๊ธฐํํ์ด ๋ณต์กํ๋ค๋ ๊ฒ์
๋๋ค.
Octree ๋๋ R-Tree ์ ๊ฐ์ ๋น ๋ฅธ ๊ณต๊ฐ ๊ฒ์์ ์ํ ํธ๋ฆฌ ๋ฐ์ดํฐ ๊ตฌ์กฐ๊ฐ ์์ต๋๋ค. ์ง์ค๋ฉํธ๋ฆฌ๋ฅผ ๋ ์์ ๋ฉ์ด๋ฆฌ๋ก ๋ถํ ํ ์ ์๋ threeocttree ๋ฅผ ์ฐพ์์ง๋ง ์ฝ๊ฐ ์ค๋๋ ๊ฒ ๊ฐ์ต๋๋ค(Three.js r60).
๋ด๊ฐ ์๋ ํ THREE.Mesh
๊ฐ์ฒด์ raycast
๋ฉ์๋์๋ ์ด๋ฏธ ์ผ๋ถ ์ฑ๋ฅ ์ต์ ํ๊ฐ ์์ต๋๋ค(์ค์ ๋ ์ด์บ์คํธ๋ฅผ ์ํํ๊ธฐ ์ ์ ๊ฒฝ๊ณ ์์์ ๊ตฌ๋ฅผ ๋จผ์ ํ์ธ). ๊ณต๊ฐ ํ์ ํธ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ ์ด์ ๊ฐ์ ๋ ๋ค๋ฅธ ๊ฒ์ฌ ๋จ๊ณ๋ฅผ ๊ฐ๋ ๊ฒ์ด ์๋ฏธ๊ฐ ์์ง ์์๊น์?! ์ด๋ป๊ฒ ์๊ฐํด?
์๋ถ
๋ช
๋ฐฑํ ๋งํ ์ํ์ด ์์ง๋ง ์ด๋ฏธ repo( examples/js/Octree.js )์ ์๋ threeocttree
๋ฒ์ ์ ์ฌ์ฉํด ๋ณด์
จ์ต๋๊น?
๋๋ three.js
์์ ๊ณต๊ฐ ๊ฒ์ ํธ๋ฆฌ์ ํ๋ ์์ด์ด ์ฌ์ฉ์ ํฌํํ์ง ์์ต๋๋ค. ์ด๋ฌํ ์๊ณ ๋ฆฌ์ฆ์ ์ค๋ฒํค๋/๋ณต์ก์ฑ์ ๋ง์ ์์ฉ ํ๋ก๊ทธ๋จ์์ ์ฑ๋ฅ ํฅ์์ ๊ท ํ์ ์ด๊ณผํฉ๋๋ค.
์ค์ ๋ ์ด์บ์คํธ๋ฅผ ์ํํ๊ธฐ ์ ์ ๋จผ์ ๊ฒฝ๊ณ ์์์ ๊ตฌ๋ฅผ ํ์ธํฉ๋๋ค.
์ด๋ ํฉ๋ฆฌ์ ์ด๋ฉฐ ์ถฉ๋ถํด์ผ ํฉ๋๋ค. ์ฌ์ฉ์๊ฐ ๊ณ ๊ธ ์ฌ์ฉ ์ฌ๋ก์ ๊ด๋ จํ์ฌ ๋ ๋ง์ ์ฑ๋ฅ์ด ํ์ํ ๊ฒฝ์ฐ ์ธ๊ธ๋ ์๋ฅผ ์์์ ์ผ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ฅํธ๋ฆฌ๊ฐ ์ข์ ์ ํ์ด ๋ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ ๊ทผ ๋ฐฉ์์ด ๋งค์ฐ ์ ๊ตํ๊ธฐ ๋๋ฌธ์ ๋ํํ 3D ์์ฉ ํ๋ก๊ทธ๋จ์์ R-Tree ์๋ฃจ์ ์ ๋ณธ ์ ์ด ์์ต๋๋ค(์๊ณ ๋ฆฌ์ฆ์ด ๊ณต๊ฐ ๋ถํ ๋์ ๋ฐ์ดํฐ๋ฅผ ์ํํจ).
์๋
ํ์ธ์, ๋ต๋ณํด์ฃผ์
์ ๊ฐ์ฌํฉ๋๋ค.
@Mugen87 ๋ง์ ์ฌ์ฉ ์ฌ๋ก์์ ๊ทธ๋ ๊ฒ ๋น ๋ฅธ ๊ฒ์์ด ํ์ํ์ง ์๋ค๋ ๋ฐ ๋์ํฉ๋๋ค. ๊ทธ๋ฌ๋ 3D ๊ฐ์ฒด์ ์ํธ ์์ฉํ๋ ๋ฉ์ปค๋์ฆ์ด ์๋ ๊ฒฝ์ฐ(๋๋ถ๋ถ ์ฌ์ฉ๋๋ ๊ฒฝ์ฐ) THREE.Raycaster
์ ๊ฒฝ๊ณ ์์/๊ตฌ์ฒด๋ฅผ ๋จผ์ ํ์ธํ๋ ๋จ๊ณ(ํฉ๋ฆฌ์ ์ด๋ผ๋ ๋ฐ ์ ์ ์ผ๋ก ๋์ํฉ๋๋ค )์์ ์ค์ ๋ ์ด์บ์คํธ๋ฅผ ์ํํ ๋ ์ ํ ์๊ฐ ๋
ธ๋ ฅ์ ๋ํ ์ผ์ ํ ์๊ฐ์ด ์๋นํ ํฝ๋๋ค. ํ๋์ ์ ์ญ ๊ฒ์ ํธ๋ฆฌ ๋์ ์ผ์ข
์ "๊ธฐํํ ๊ฒ์ ํธ๋ฆฌ"๋ฅผ ์์ํ ์ ์์ต๋๋ค. ์ง์ค๋ฉํธ๋ฆฌ๊ฐ ๋ณ๊ฒฝ๋์ง ์๋ ํ(์ข
์ข
๋ณํ์ด ์ง์ค๋ฉํธ๋ฆฌ ๋ณ๊ฒฝ๋ณด๋ค ํจ์ฌ ๊ฐ๋ฅ์ฑ์ด ๋์) ๊ฒ์ ํธ๋ฆฌ๋ฅผ ์
๋ฐ์ดํธํ ํ์๊ฐ ์์ต๋๋ค.
๊ทธ๋์ ๊ณต๊ฐ ๊ฒ์ ํธ๋ฆฌ๋ฅผ ์ฌ์ฉํ ์ด๋ฌํ ์ข
๋ฅ์ ์ต์ ํ๊ฐ three.js
์์ ๋ ์ค์ํ ๋ถ๋ถ์ด ๋ ์ ์๋ค๊ณ ์๊ฐํ์ต๋๋ค. ๊ทธ๋ฌ๋ ์ด๊ฒ์ด ์ถ๊ฐ์ ์ธ ๋ณต์ก์ฑ๊ณผ ์ค๋ฒํค๋๋ฅผ ์ ๋ฐํ๋ค๋ ๊ฒ๋ ์ดํดํฉ๋๋ค.
@moraxy ์์ ๋ฒ์ ์ ์ดํด๋ณด๊ฒ ์ต๋๋ค. ๊ทธ๋ฌํ ๊ธฐ๋ฅ์ด ์๋ฏธ๊ฐ ์๋์ง ์๊ณ ์ถ์์ต๋๋ค.
๋ค์ ํ ๋ฒ ๊ฐ์ฌ๋๋ฆฝ๋๋ค.
๋ ๊ฐ๋จํ ๊ฒ์ ํธ๋ฆฌ๋ฅผ THREE.BufferGeometry
์ ํตํฉํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด computeBoundingBox
์ ๋ํ ํธ์ถ์ ํด๋น ์ ์ ์ ์ฐธ์กฐํ๋ ์ผ์ข
์ ์ฝ๊ธฐ ์ ์ฉ ๊ฒ์ ํธ๋ฆฌ๋ฅผ ๊ตฌ์ถํ ์๋ ์์ต๋๋ค. THREE.BufferGeometry
๋
์ธ์คํด์คํํ ํ ์ง์ค๋ฉํธ๋ฆฌ๋ฅผ ๋ง์ด ์กฐ์ํ ํ์๊ฐ ์๋ ์ ์ ๊ฐ์ฒด์ ๊ฐ์ฅ ์ ํฉํฉ๋๋ค.
์ด ๊ฒ์ ํธ๋ฆฌ๋ ์ด๊ธฐํ ํ ๋ณ๊ฒฝํ ํ์๊ฐ ์์ต๋๋ค. ์ด๊ฒ์ ์ ๋ฐ์ดํธ/์ญ์ ์ ๋ํ ์ฝ๊ฐ์ ์ค๋ฒํค๋๋ฅผ ์ค์ ๋๋ค. Octree๋ ์ข์ ์ถ๋ฐ์ ์ด ๋ ๊ฒ์ ๋๋ค( BabylonJS์ ์ ์ฌํ ๊ฐ๋ ).
์ธ์คํด์คํํ ํ ์ง์ค๋ฉํธ๋ฆฌ๋ฅผ ๋ง์ด ์กฐ์ํ ํ์๊ฐ ์๋ ์ ์ ๊ฐ์ฒด์ ๊ฐ์ฅ ์ ํฉํฉ๋๋ค.
FWIW, ๋๋ ๊ทธ๊ฒ์ด ์ง์คํ ์ง์ ์ด๋ผ๊ณ ๋ฏฟ์ง ์์ต๋๋ค.
@WestLangley THREE.BufferGeometry
๋ฌธ์์ ์ธ์ฉ๋ฌธ
THREE.BufferGeometry ๋ฌธ์
๊ทธ๊ฒ์ ์๋ง๋ ์ ๊ฑฐ๋์ด์ผ ํ ๊ฒ์ ๋๋ค - ์ด์จ๋ , ๋๋ ๊ทธ๊ฒ์ด ์ด๋ค ์ข ๋ฅ์ ๊ธฐ์ ์ ์ง์ ์ ์๋ฏธํ๋ค๊ณ ์๊ฐํ์ง ์์ต๋๋ค. ์คํ๋ ค ๊ทธ๊ฒ์ด ์์ฑ๋ ํ ์ฌ์ฉ์๊ฐ ์ง์ค๋ฉํธ๋ฆฌ๋ฅผ ์กฐ์ํ๊ธฐ๊ฐ ๋ ์ด๋ ต๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
์๋ง๋ ์ ๊ฑฐํด์ผ ํ ๊ฒ์ ๋๋ค
๊ฐ์ฅ ํ์คํฉ๋๋ค.
๋ฐฉ๊ธ PlaneBufferGeometry์์ ๋ ์ด์บ์คํ ์ ์ํ ๋ ๋์ ๋ฐฉ๋ฒ์ ๊ตฌํํ์ต๋๋ค. ๋๋ far ๋งค๊ฐ๋ณ์๋ฅผ ์ฌ์ฉํ๊ณ ์ฒซ ๋ฒ์งธ์ ๋ง์ง๋ง ์ธ๋ฑ์ค ์์น๋ฅผ ์ฐพ์ต๋๋ค. ์ธ๋ฑ์ค ๋ฐฐ์ด์ด x/y ์์๋ก ๋์ด ์๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ ํ๋ฉด ๋ฒํผ์์ ์๋ํฉ๋๋ค. x/y ๊ฒฝ๊ณ ์์๋ฅผ ๋ฒ์ด๋๋ฉด ๋ชจ๋ ์ถฉ๋์ด ์๊ฑฐ๋ฆฌ ๋ฒ์ ๋ฐ์ ์์ด์ผ ํฉ๋๋ค. ์ด๊ฒ์ ์ด๋๊ฐ์ ์ ์ง๋ฅด๊ณ ์ถ์ ์๋ง์ด ์์ต๋๊น? ํ์ฌ ๊ตฌํ์ ๋ด ์ฌ์ฉ ์ฌ๋ก์ ๋ฐ๋ผ ๋ค๋ฅด์ง๋ง ์ํ๋ ๊ฒฝ์ฐ ๋ ์ผ๋ฐ์ ์ผ๋ก ๋ง๋ค๋ ค๊ณ ํฉ๋๋ค. ํฐ planeBuffer(2.5์ด์์ 10ms)์์ ๋ ์ด์บ์คํ ์ฑ๋ฅ์ ํฌ๊ฒ ์ค์ผ ์ ์์์ต๋๋ค.
@kpetrow three.js octree ์์ ๊ฐ ์ ์ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋ฌผ๋ก ๋ค๋ฅธ ์ฌ๋๋ค์๊ฒ ์ ์ฉํ๋ค๊ณ ์๊ฐ๋๋ฉด GitHub์์ ์์ ๋กญ๊ฒ ์ฝ๋๋ฅผ ๊ณต์ ํ ์ ์์ต๋๋ค.
๊ณผ๊ฑฐ์ threejs์ ํฌํจ๋ ๊ณต๊ฐ ์ธ๋ฑ์ค๋ฅผ ์ ์ํ ์ ์ด ์์ต๋๋ค. ์ด ๋ฐฉํฅ์ผ๋ก ์์ ์ด ์์๊ณ ๊ธฐ์กด oct-tree ์์ ๊ฐ ๊ทธ ์ค ํ๋์ ๋๋ค. ๊ถ๊ทน์ ์ผ๋ก ์ด ๊ธฐ๋ฅ์ ์ผ๋ฅ ์๋ฏผ์ผ๋ก ์ผ๋ ๊ฒ๊ณผ ๊ด๋ จํ์ฌ ํต์ฌ ์ปค๋ฎค๋ํฐ์ ๊ด์ฌ์ด ๋ถ์กฑํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
๊ธฐ๋ณธ ๋ฐฐํฌํ(์์ ์๋)์ ํฌํจํ ์ถฉ๋ถํ ๊ด์ฌ๊ณผ ์๋๊ฐ ์๋ ๊ฒฝ์ฐ ๋ด BVH ์ฝ๋๋ฅผ ํ๋ก์ ํธ์ ๊ธฐ๋ถํ ์ ์์ด ๊ธฐ์ฉ๋๋ค.
๋ด ์ฝ๋๋ ๋ ๊ฐ์ง ์ธก๋ฉด์ ์ค์ ์ ๋ก๋๋ค.
2๊ฐ์ง ๊ตฌํ์ด ์์ต๋๋ค.
๊ฐ์ธ์ ์ผ๋ก, ๋๋ ๊ณต๊ฐ ์ธ๋ฑ์ค ์์ด๋ ์ด ์ ์์ต๋๋ค. ๊ทธ๊ฒ์ n^2์ log(n) ์ฑ๋ฅ์ ์ฐจ์ด์ ๋๋ค. ์๋ฅผ ๋ค์ด, ํ์ฌ ํ๋ก์ ํธ์์ ๋ค์ ๋ถ๋ถ์ ๊ณต๊ฐ ์ธ๋ฑ์ค์ ์์กดํฉ๋๋ค.
http://server1.lazy-kitty.com/komrade
์งํ์๋ ์ฝ 1m ํด๋ฆฌ๊ณค์ด ์์ผ๋ฉฐ ์์ฒ ๊ทธ๋ฃจ์ ๋๋ฌด๋ฅผ ๋ฐฐ์นํ๊ณ ์ฌ๊ธฐ์ ์ค์๊ฐ ๋ ์ด์บ์คํธ๋ฅผ ์คํํ๋ ๊ฒ์ ํนํ ์ ์ฌ์ ์ฅ์น์ ๊ฒฝ์ฐ ์ ๋ ํด์๋ ์ ๋ฉ๋๋ค.
๋ ์ด์บ์คํธ๋ฅผ ์ต์ ํํ ์ ์๋ ๋ชจ๋ ๊ฒ์ ๋ณด๊ณ ์ถ์ต๋๋ค. ๋ณต์ก์ฑ์ ์ถ๊ฐํ์ง ์๊ณ ์ต์ ํํ ์ ์๋ ์ฌ์ง๊ฐ ์์ต๋๊น? Octree์๋ ๋ชจ๋ ์๋ก์ด ์ถ๊ฐ ๋ฐ ์ ๋ฐ์ดํธ ๋ฑ์ด ํฌํจ๋ ๋ชจ๋ ์๋ก์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ํ์ํฉ๋๋ค.
๋ด๊ฐ ์์์ฐจ๋ฆฐ ํ ๊ฐ์ง๋ ์ง์ค๋ฉํธ๋ฆฌ๊ฐ ์ธ๋ฑ์ค๋ ๋ฒํผ ๋ฐฐ์ด๋ก ๋ณํ๋๋ฉด ๋ ์ด์ ์๋ ์ง์ค๋ฉํธ๋ฆฌ์ ์์ฑ์ ํ๋ช ํ๊ฒ ์ฌ์ฉํ์ง ์๋๋ค๋ ๊ฒ์ ๋๋ค. ์์์ ์ธ๊ธํ๋ฏ์ด ํ๋ฉด ๋ฒํผ ๊ธฐํํ์ arrayBuffer๊ฐ PlaneGeometry์์ ์๋ค๋ ๊ฒ์ ์๋ฉด ๋งค์ฐ ์ต์ ํ๋ ์ ์์ต๋๋ค. MESH.raycast( raycaster, intersects ) ๋ฉ์๋๋ฅผ ์ง์ค๋ฉํธ๋ฆฌ ์ ํ์ ๊ธฐ๋ฐ์ผ๋ก ๋ฎ์ด์ธ ์ ์์ต๋๊น?
๋ ๋ค๋ฅธ ์ ๊ทผ ๋ฐฉ์์ Raycaster๋ฅผ ๋ณ๋์ ํ๋ฌ๊ทธ์ธ์ผ๋ก ์ฌ์ฉํ๋ ๊ฒ์ ๋๋ค. ๋ํ์ ์ปจํธ๋กค๊ณผ ๋ก๋๋ ๋ง์ฐฌ๊ฐ์ง์ ๋๋ค. ๊ทธ๋ฐ ๋ค์ @Usnul ์ด ์ ์ํ๋ ๊ฒ๊ณผ ์ ์ฌํ ์ฑ๋ฅ์ ๋ ์ด์บ์คํฐ๋ฅผ ์ถ๊ฐํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
ํ๋ฌ๊ทธํ Raycaster๊ฐ ์๋ค๋ ์์ด๋์ด๊ฐ ๋ง์์ ๋ค์ง๋ง ์ฝ๊ฐ์ ํผ๋์ด ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋ด๊ฐ ์ ์ฉํ๋ค๊ณ ์๊ฐํ๋ ๊ฒ์ Raycaster ์์ฒด๊ฐ ์๋๋ผ ๊ณต๊ฐ ์ธ๋ฑ์ค์ ๋๋ค. ๊ณต๊ฐ ์ธ๋ฑ์ค๋ ๋ค์๊ณผ ๊ฐ์ ๊ฒ์ ํ์ฉํฉ๋๋ค.
ํ์ฌ three.js๋ ์ด ์ค 2๊ฐ๋ฅผ ๋ช ์์ ์ผ๋ก(์ ๋ ฌ ๋ฐ ์ปฌ๋ง) ์ํํ๊ณ 1๊ฐ๋ ์์ (๋ ์ด ํธ๋ ์ด์ฑ ๋ ๋๋ฌ)๋ฅผ ํตํด ์ํํฉ๋๋ค.
๊ณต๊ฐ ์ธ๋ฑ์ค๋ฅผ ๋ด๋ถ์ ์ผ๋ก ์ ์งํ๋ฉด ์ ๋ ฌ ๋ฐ ์ปฌ๋ง์ด ๊ฐ์ํ๋์ด ์ธ๋ฑ์ค๋ฅผ ์ ์ฅํ๋ ๋ฐ ํ์ํ ์ถ๊ฐ RAM ๋น์ฉ์ผ๋ก ๋ ํฐ ์ฅ๋ฉด์ ๋ํด ์ ์ง์ ์ผ๋ก ๋ ๋ง์ ์ด์ ์ ์ป์ ์ ์์ต๋๋ค.
GPU ์ ํ์ ์ฌ์ฉํ์ง ์๋ ์ด์ ๋ ๋ฌด์์ ๋๊น? ์ฃผ๋ณ์ ๋ช ๊ฐ์ง ์๊ฐ ์์ผ๋ฉฐ ๊ตฌํํ๊ธฐ๊ฐ ์๋นํ ์ฝ์ต๋๋ค. ๊ณต์ฐ์ ๋ฐค๋ฎ์ด๋ค. ๋ฐฑ๋ง ๊ฐ ์ด์์ ํด๋ฆฌ๊ณค ๋ชจ๋ธ์ด ์๋ ์ฌ์ฉ ์ฌ๋ก์์ ์ ํ์ ๊ฑฐ์ 1์ด์์ 60fps๋ก ์ค์๊ฐ์ผ๋ก ์คํ๋๋ ๋์์ ๋ชจ๋ธ ์๋ก ๋๋๊ทธํ์ต๋๋ค.
@hccampos
GPU ์ ํ์ด CPU์์ ์ํํ๋ ๊ฒ๋ณด๋ค ๋ฐ๋์ ๋ ๋น ๋ฅธ ๊ฒ์ ์๋๋๋ค. GPU์ ๊ฒฝ์ฐ ์ํ๋ ์ ๋ฐ๋์ ๋น๋กํ๋ ํด์๋๋ก ๋ ๋๋งํด์ผ ํ๋ฏ๋ก ํฝ์
์ ํ๋๋ฅผ ์ํ๋ฉด 1:1 ํ๋ฉด ํด์๋๋ก ๋ ๋๋งํด์ผ ํฉ๋๋ค. ์ด๊ฒ์ ๋ณ๋์ ๋ ๋ ํจ์ค์ด๋ฉฐ ๊ฐ์ฒด๋ฅผ ๋ณ๋์ ๊ณ ์ ์์์ผ๋ก ๋ ๋๋งํ๋ค๋ ์ ์ ๋ช
์ฌํ์ญ์์ค. ์ถ๊ฐ ๋ ๋ ํจ์ค๋ ๊ทธ๋ํฝ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ์๋ฏธํฉ๋๋ค(์ง์ฐ๋ ํ์ดํ๋ผ์ธ์ ๊ฒฝ์ฐ ์ผ๋ฐ์ ).
์ด์ง ๊ณต๊ฐ ๋ถํ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ๋ฉด ์ ํ์ ๋ํ ๋ก๊ทธ(n) ํ์ด๋ฐ ํ๋กํ์ด ์ ๊ณต๋๋ฏ๋ก 1,000,000๊ฐ์ ํด๋ฆฌ๊ณค์ ๋ํด ๊ด์ ์ฟผ๋ฆฌ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์ฝ 14๊ฐ์ ์์
์ ๋ณด๊ฒ ๋ฉ๋๋ค. ๋ฐ์ดํฐ ๊ตฌ์กฐ์ ๋ฐ๋ผ - ๋ช ๋ง์ดํฌ๋ก์ด๊ฐ ์์๋ ์ ์์ผ๋ฉฐ ํ๋ ์ ์์ฐ์ ์ํฅ์ ๋ฏธ์น๊ธฐ ์์ํ๊ธฐ ์ ์ ์์ฒ ๊ฐ์ ์ฟผ๋ฆฌ๋ฅผ ํ์ฉํ ์ ์์ต๋๋ค.
1m ํด๋ฆฌ ๋ชจ๋ธ์ด ์๊ณ ์นด๋ฉ๋ผ ๋ฐฉํฅ์ ๋ฐ๋ผ ํ๋ฉด ๊ณต๊ฐ์์ ์ง์ ์ฅ๋ฉด์ผ๋ก ๊ด์ ์ ํฌ์ฌํ๋ ค๊ณ ํ๋ค๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค(์ฌ์ฉ ์ฌ๋ก ์ ํ). ๋ฐฐ๋ด ํด์๋์ ํ๋จ์ธ "ํ HD" ๋๋ 1920 ร 1080์ ์ฌ์ฉํ๋ค๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค. RGB๋ง ๋ ๋๋ง(ํฝ์
๋น 24๋นํธ)ํ๋ค๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค. ๋ ๋๋งํ๋ ค๋ฉด 6220800๋ฐ์ดํธ(์ฝ 6Mb) ๋๋ ๊ทธ๋ํฝ RAM์ด ํ์ํฉ๋๋ค ์ ๊ฒ. CPU ์๋ฃจ์
์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ๋ฆฌํ๋น 10๊ฐ์ ํด๋ฆฌ๊ณค์ด ์๋ AABB BVH๋ฅผ ์ฌ์ฉํ๋ค๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค. ์ฆ, ์ฝ 200,000๊ฐ์ ๋
ธ๋๊ฐ ํ์ํฉ๋๋ค. ๊ฐ ๋
ธ๋๋ ์ขํ์ ๋ํด ์ฝ 6 * 8๋ฐ์ดํธ์ด๊ณ ์ค๊ฐ ๋
ธ๋์๋ ํ์ ํฌ์ธํฐ์ ๋ํด ์ถ๊ฐ 2 * 4๋ฐ์ดํธ๊ฐ ์์ต๋๋ค. ๋ฆฌํ ๋
ธ๋๋ ํด๋ฆฌ๊ณค ํฌ์ธํฐ์ ๋ํด 10 * 4๋ฐ์ดํธ, ์ฆ 14,400,000๋ฐ์ดํธ(์ฝ 14Mb)๋ฅผ ๊ฐ์ต๋๋ค. ์ฃผ์ ์ฐจ์ด์ ์ BVH ์ฟผ๋ฆฌ๊ฐ GPU์ ๊ฒฝ์ฐ์ ๋นํด RAM ๋์ญํญ์ ๋ํ ์๊ตฌ๊ฐ ๋งค์ฐ ์ ๊ณ ์ ์ฒด 1m ํด๋ฆฌ ์ง์ค๋ฉํธ๋ฆฌ๋ฅผ ๋ ๋๋งํ๋ ๊ฒ๊ณผ ๋น๊ตํ์ฌ ์ฟผ๋ฆฌ๋น ๋ช ๊ฐ์ง ์์
๋ง ํฌํจ๋๋ค๋ ์ฌ์ค์ ๊ณ ๋ คํ ๋ ๋ํ๋ฉ๋๋ค.
2560x1440๊ณผ ๊ฐ์ด ๋ฐ์คํฌํฑ์ ๋ ์ผ๋ฐ์ ์ธ ํด์๋๋ฅผ ์ ํํ๋ฉด 11059200byte ๋ ๋ ํ๊ฒ(11Mb)์ด ๋ฉ๋๋ค.
๊ทธ๋ํฝ ๋จ ๋์ญํญ์ ์์ฐ์ด ๋ง๊ณ ์ ฐ์ด๋ ์ฝ์ด ์๊ฐ ์๋นํ ๋ง๋ค๋ฉด - ๋ฌผ๋ก ๊ฐ๋จํ๊ณ ์ง๊ด์ ์ธ ์ ํ ๋ฐฉ๋ฒ์ ๋๋ค.
@Usnul ์ ์ ๋์ ์ด์ง๋ง ๊ตฌํํ๊ธฐ์ ๊ฐ์ฅ ๊ฐ๋จํ ์๋ฃจ์ ์ผ ๊ฒ์ ๋๋ค. ๊ณต๊ฐ ์ธ๋ฑ์ค ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ๊ตฌํํ๊ณ ์ ์งํ๋ ๊ฒ์ ์๋ง๋ threejs ์ ์ง ๊ด๋ฆฌ์์๊ฒ ์ค์ํ์ง ์์ ๋ถ๋ด์ด ๋ ๊ฒ์ ๋๋ค.
์ฆ, ์ธ ๊ฐ์ ์ผ๋ถ ๋๋ ๋ณ๋์ npm ํจํค์ง๋ก ํ๋ฅญํ๊ณ ์ ํ ์คํธ๋๊ณ ์ ์ง ๊ด๋ฆฌ๋๋ ๊ณต๊ฐ ์ธ๋ฑ์ค ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ๊ฐ๊ณ ์ถ์ต๋๋ค.
์ฌ์ฉํ๋ ์ง์ค๋ฉํธ๋ฆฌ์ ๋ํด ์ด๋ฌํ ๊ณต๊ฐ ์ธ๋ฑ์ค๋ฅผ ๊ตฌํํ๋ ๊ฒ์ด ๊ถ๊ธํด์ BufferGeomtry๋ฅผ ๋ถํ ํ๋ ์์ฃผ ๊ฐ๋จํ Octree(์์ฑ ๋ฐ ๊ฒ์ ์ ์ฉ)๋ฅผ ๊ตฌํํ์ต๋๋ค. ์ด ๊ฐ๋จํ ์๋ฃจ์ ์ผ๋ก ์ ๋ ๋งค์ฐ ์ ๋งํ ๊ฒฐ๊ณผ๋ฅผ ์ป์์ต๋๋ค. ์ฝ 500K ์ ์ ์ด ์๋ ๊ธฐํํ์ ์ ์ฉํ์ฌ ๋ ์ด์บ์คํธ ์๊ฐ์ด ~120ms์์ ~2.3ms๋ก ๋จ์ถ๋์์ต๋๋ค. ํ์ฌ ํธ๋ฆฌ์ ๊ตฌ์ฑ์ ~500ms๊ฐ ๊ฑธ๋ฆฌ์ง๋ง ์น ์์ปค ๋ด๋ถ์์ ๊ธฐํํ๊ณผ ํธ๋ฆฌ ์์ฑ์ ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ ํ ๋ฒ๋ง ์ํ๋๊ธฐ ๋๋ฌธ์ ๋ฌธ์ ๊ฐ ๋์ง ์์ต๋๋ค.
์๊ณ ๋ฆฌ์ฆ์ THREE.BufferGeometry
์ ์์ฃผ ์ฝ๊ฒ ํตํฉ๋ ์ ์๊ณ THREE.BufferAttribute
์ dynamic
์ ๊ฐ์ ํ๋๊ทธ๋ฅผ ์ฌ์ฉํ์ฌ ์ผ๊ฑฐ๋ ๋ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด BufferGeometry๊ฐ ๋ณ๊ฒฝ๋์ง ์์์ผ ํ๋ ๊ฒฝ์ฐ์๋ง ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋ถํํ๋ THREE.Mesh
์ raycast
๋ฉ์๋๋ฅผ ๋ฎ์ด์จ์ผ ํ์ง๋ง ๋ ์ค๋ง ๋ณ๊ฒฝํ๋ฉด ๋์์ต๋๋ค(Octree ๊ฒ์ ํธ์ถ ๋ฐ ์์น ๋ฐฐ์ด ๋ฐ๋ณต).
์ด์จ๋ ๋ด VR ์์ฉ ํ๋ก๊ทธ๋จ์์ ๋ง์ฐ์ค ํด๋ฆญ ์ ํ ๋ฒ๋ฟ ์๋๋ผ ๋ ๋๋ง ๋ฃจํ ์ค์ ๊ฐ์ฒด ์ปจํธ๋กค๋ฌ ์ถฉ๋์ ๊ฐ์งํด์ผ ํฉ๋๋ค. ๋ฐ๋ผ์ ํ์ฌ ์๋ฃจ์ ์ ์์กดํด์ผ ํฉ๋๋ค. ๋ ๊ฐ์ ํ ์ ์์ผ๋ฉด ๋ ธ๋ ฅํ๊ฒ ์ต๋๋ค.
์ ๋ฐ์ดํธ ๋ ์ด์บ์คํธ ์๊ฐ ์ธก์ ์ ์ค์๋ฅผ ์ ์ง๋ ์ต๋๋ค. ์ฌ๋ฐ๋ฅธ ๊ฐ์ ~2.3ms์ ๋๋ค(~0.3ms ๋์ ). ๊ทธ์ ๋ฐ๋ผ ์์ ๊ฐ์ ๋ณ๊ฒฝํ์ต๋๋ค.
three.js๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๊ตฌ์ถ๋ ๋๋ถ๋ถ์ ๋ณต์กํ ์ ํ๋ฆฌ์ผ์ด์ ์์๋ ๋น ๋ฅธ ๊ณต๊ฐ ์กฐํ๋ฅผ ์ํํ๋ ์ตํธ์ธ ๋ฐฉ์์ด ํ์ํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ์๋ฅผ ๋ค์ด, 3D ํธ์ง๊ธฐ. ๋๋ ๋ช ๊ฐ์ง ๊ตฌํ์ ๊ฐ์ง๊ณ ๋์์ง๋ง ์ ํตํฉ๋์ง ์๊ฑฐ๋ three.js์ ํน์ ๋ฒ์ ์ผ๋ก ๋๋ฌด ๋นก๋นกํ๊ฒ ๋ํ๋ฉ๋๋ค. ๋ฐ๋ผ์ ๋๊ตฌ๋ ์ง three.js์ ์ต์ ๋ฒ์ ์ผ๋ก์ ์ ๊ทธ๋ ์ด๋ ๊ฒฝ๋ก๋ฅผ ์ค๋จํ์ง ์๊ณ ์ด๋ฅผ ์ํํ ์ ์๋ ์ ํ์ ์ธ ๋ฐฉ๋ฒ์ด ์๋ค๋ฉด ์ข์ ๊ฒ์ ๋๋ค.
@matthias-w obj ๋ชจ๋ธ์ ๋ํด raycaster๋ฅผ ์๋ํ์ง๋ง ์ปจํธ๋กค๋ฌ๊ฐ ์๋ฌด ๊ฒ๋ ๊ฐ์งํ์ง ๋ชปํฉ๋๋ค. ๊ด์ ์ด ๋ชจ๋ธ์ ํต๊ณผํ๊ณ ์์ต๋๋ค. ๊ทธ ๋ฌธ์ ๋ฅผ ์ด๋ป๊ฒ ๊ณ ์ณค๋์ง ์๋ ค์ฃผ์ค ์ ์๋์
์ ํ์ ๊ณต๊ฐ ์ธ๋ฑ์ค๋ฅผ ๊ฐ๋ ์ฃผ์ ์. ๋ ๋๋ฌ ์์ฒด(์: ์ปฌ๋ง์ฉ)๊ฐ ์์ง์ ํ์์ ์ธ ๋ถ๋ถ์ด ๋๊ธฐ์๋ ์ถฉ๋ถํ ์ ์ฉํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋ค์์ ๊ด๋ จ ํ ๋ก ์ ๋๋ค.
์ด๋ด! ๋๋ ์ด๊ฒ์ ์ฝ๊ฐ ๊ด์ฌ์ด ์์์ง๋ง(๊ทธ ์ดํ๋ก ๋ ์ด์บ์คํธ ์๊ตฌ ์ฌํญ์ ๋ํ ๋ค๋ฅธ ์๋ฃจ์ ์ ์ฐพ์์ง๋ง) ๋ด ์คํ์๋ ์ผ๋ถ ๊ธฐ์ฌํ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ์ต๋๋ค. ๋ค์ ๊ฑฐ์น ์ง๋ง ๋ช ๋ฌ ์ ์ ์ด๊ฒ์ ์ ๋ฆฌํ์ต๋๋ค.
https://github.com/gkjohnson/threejs-fast-raycast
3๊ฐ์ ์ง์ค๋ฉํธ๋ฆฌ ๊ฐ์ฒด์ computeBoundsTree
ํจ์๋ฅผ ์ถ๊ฐํ๊ณ ์ด๋ฅผ ์ฌ์ฉํ๋๋ก raycast ํจ์๋ฅผ ์ฌ์ ์ํฉ๋๋ค(์ถ๊ฐ๋ ์ต์ ํ๋ก ์ฒซ ๋ฒ์งธ ํํธ๋ง ๋ฐํ). ์ ์ ์ด๊ณ ๋งค์ฐ ๋ณต์กํ ๋ฉ์์๋ง ์ ๋ง ์ ์ฉํ๋ฉฐ ์ฅ๋ฉด์ ๊ณต๊ฐ์ ์ผ๋ก ๋ถํ ํ๋ ๋ฐ๋ ์๋ฌด ๊ฒ๋ ํ์ง ์์ต๋๋ค. ๋ค์์ 80,000๊ฐ์ ์ผ๊ฐํ ๋ฉ์์์ ๋ ์ด์บ์คํธ ์ฑ๋ฅ์ ์ฐจ์ด๋ฅผ ๋ณผ ์ ์๋ ๋ฐ๋ชจ ์
๋๋ค. ๊ฒฝ๊ณ ํธ๋ฆฌ๋ฅผ ๊ณ์ฐํ๋ ๊ฒ์ ์ฝ๊ฐ ๋๋ฆฌ์ง๋ง ์ฝ๊ฐ์ ์์
์ผ๋ก ๋ ๋ถ๋๋ฝ๊ฒ ํ ์ ์์ต๋๋ค.
์ด์ ๋ํ ์ ์๊ฒฌ์ ๋ํด์๋ ์ฝ๊ฐ์ ๊ฐ๋ฑ์ ๋๋๋๋ค. ์ด๊ฒ์ THREE์ ๋ํ ํ์ฅ์ผ๋ก์ ๊ฝค ์ ๊ตฌ์ถ๋ ์ ์๋ ๊ฒ๊ณผ ๊ฐ์ ๋๋์ ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ถ๊ทน์ ์ผ๋ก ๋ณต์กํ๊ฑฐ๋ ์ ๋๋ฉ์ด์ ๋ ๋ฉ์์ ๋ํด ์ผ๊ฐํ๋ณ ๊ฒ์ฌ/์ถฉ๋/์บ์คํธ๋ฅผ ์ํํ๋ ๊ฒ์ด ์ต์ ์ธ ๊ฒ์ฒ๋ผ ๋ณด์ด์ง ์์ต๋๋ค. ๊ฐ๋จํ ๊ฒฝ์ฐ์๋ ๊ด์ฐฎ์ ์ ์์ง๋ง ๋ณต์กํ ๊ฒฝ์ฐ์ ์ด๊ณ ์ ๋ ์ด์บ์คํ (๋๋ ์คํด๋ฃจ์ ์ปฌ๋ง, ์ถฉ๋ ๋ฑ)์ ๊ฐ๋ฅํ๊ฒ ํ๋ ค๋ฉด ์ผ๋ฐ์ ์ธ ํ๋ฉด/ํ๋ธ/๊ตฌ/์บก์ ํํ์ด๋ ๋จ์ํ๋ ๋ฉ์๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ ์ ํฉํ ๊ฒ ๊ฐ์ต๋๋ค. ๋ฌผ๋ก ์๋ฒฝํ ํฝ์ ์บ์คํธ๋ฅผ ์ฐพ๊ณ ์๋ค๋ฉด ์ด๊ฒ์ ์ ์๋ํ์ง ์์ง๋ง ์ฌ๋ฐ๋ฅธ ์๋ฃจ์ ์ ์ค์ ๋ก ์ฌ์ฉ ์ฌ๋ก์ ๋ฐ๋ผ ๋ค๋ฆ ๋๋ค.
@Usnul @matthias-w ๊ทํ์ octree/BVH ๊ตฌํ์ ์คํ ์์ค์ ๋๊น ์๋๋ฉด ์จ๋ผ์ธ์์ ์ฌ์ฉํ ์ ์์ต๋๊น? ๋๋ ํ์คํ ๊ด์ฌ์ ๊ฐ์ง๊ณ ์ดํด๋ณผ ๊ฒ์ ๋๋ค!
@gkjohnson
octree/BVH ๊ตฌํ ์ค ํ๋๊ฐ ์คํ ์์ค์ด๊ฑฐ๋ ์จ๋ผ์ธ์์ ์ฌ์ฉ ๊ฐ๋ฅํฉ๋๊น? ๋๋ ํ์คํ ๊ด์ฌ์ ๊ฐ์ง๊ณ ์ดํด๋ณผ ๊ฒ์ ๋๋ค!
์ฝ๋๋ ํ์ฌ ์คํ ์์ค๊ฐ ์๋๋๋ค. ์ ์๊ฒ ๊ฐ์ธ์ ์ผ๋ก ์ฐ๋ฝํ์๋ฉด ์ถ์ฒ๋ฅผ ์๋ ค๋๋ฆด ์ ์์ต๋๋ค.
์ธ์คํด์คํ๋ ๋ฉ์์ ๋ํด ์ํํ ์๊ฐ ์์ต๋๋ค.
http://server1.lazy-kitty.com/tests/instance-foliage-1mil/
์์ ์์๋ ๋ค์์ด ํฌํจ๋ฉ๋๋ค.
์์
์ค์ธ ๊ฒ์์์ ์คํ ์ค์ธ ๋ฒ์ ์ด ์์ต๋๋ค.
http://server1.lazy-kitty.com/komrade/
๊ทํ์ ๊ตฌํ๊ณผ ๊ด๋ จํ์ฌ. ๋๋ ๊ทธ๊ฒ์ ์ข์ํ๋ค. ๋์ ๊ฒ์ 2๊ฐ์ง ์ฃผ์ ๋ฉด์์ ๋ค๋ฅด๋ค:
์ข ๋ ๊ตฌ์ฒด์ ์ธ ์ฌํญ:
@Usnul ๊ทํ์ ์ด๋ฉ์ผ ์ฃผ์ ๋ฑ์ ๋ณผ ์ ์์ง๋ง ๊ทํ์ ๊ณต๊ฐ ์ธ๋ฑ์ฑ ์๋ฃจ์ ์ ์ฐ๊ตฌํ๋ ๋ฐ ์๋นํ ๊ด์ฌ์ด ์์ต๋๋ค.
ํ์ฌ ๋๋ ๋ชจ๋ ๊ด๋ จ ์ฅ๋ฉด ๊ฐ์ฒด๋ฅผ ๋ฐ๋ณตํ๊ณ ์นด๋ฉ๋ผ๋ก๋ถํฐ์ ๊ฑฐ๋ฆฌ๋ฅผ ๊ณ์ฐํฉ๋๋ค. ๊ฐ์ฅ ์ต์ ์ ์ ๊ทผ ๋ฐฉ์์ ์๋๋๋ค.
@titansofttime
์ด๊ฒ์
travnick at gmail com
๊ณต๊ฐ์ ์ผ๋ก ์ฌ์ฉํ ์ ์๋ค๋ ๊ฒ์ ๋ชฐ๋์ต๋๋ค. ๋ด ์๋ชป์ด์ผ.
@Usnul ์ ๋ 100๋ง ํ๋ก์ ํธ์ ๊ด์ฌ์ด ์์ต๋๋ค. ๊ฐ๋ฅํ๋ค๋ฉด 1000๋ง~2000๋ง๋ ๊ฐ๋ฅํ๋ค. ์ ์๊ฒ ์ด๋ฉ์ผ์ ๋ณด๋ด์ฃผ์ธ์: kaori.nakamoto. [email protected]
๋งค์ฐ ์น์ ํ๊ฒ ๊ฐ์ฌํฉ๋๋ค!
http://server1.lazy-kitty.com/tests/instance-foliage-10mil/
์ด๊ฒ์ 1000๋ง ๋ฒ์ ์
๋๋ค.
๋ต์ฅ์ ๋ฆ๊ฒ ๋ณด๋ด์ ๋ฏธ์ํด.
@gkjohnson ์ฝ๋๋ ์คํ ์์ค๊ฐ ์๋๋๋ค. ๋ํ ๊ทํ์ ์๋ฃจ์
์ ์ ๊ฒ๋ณด๋ค ํจ์ฌ ๋ ์ ๊ตํ๊ฒ ๋ค๋ฆฝ๋๋ค. ๋ฐ๋ผ์ ๋ด ์๋ฃจ์
์์ ๋ฐฐ์ธ ์ ์ด ๋ง์ง ์์ ๊ฒ ๊ฐ์ต๋๋ค.
@sid3007 ๋ฌธ์ ๋ฅผ ์ดํดํ๊ณ ์๋์ง ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. ๋๋ ๋์ ์ ๊ทผ ๋ฐฉ์์ ์ค๋ช ํ ์ ์๋ค. ์๋ง๋ ๋์์ด ๋ ๊ฒ์ ๋๋ค.
๋ด ์ฌ์ฉ ์ฌ๋ก๋ ๋งค์ฐ ๊ฐ๋จํฉ๋๋ค. ๋ด ์ ํ๋ฆฌ์ผ์ด์
์ด ์์๋๋ฉด ๋ค์ํ ๋ชจ๋ธ์ ๋ํ ์ง์ค๋ฉํธ๋ฆฌ๊ฐ ๋ก๋๋ฉ๋๋ค. ์ด๋ฌํ ๋ชจ๋ธ์ ์ฌ์ฉ์๊ฐ ๋ณํํ ์ ์์ต๋๋ค. ํ์์ ๋ณ๊ฒฝ๋์ง ์์ต๋๋ค. ๊ธฐํํ์ ๋ณํ์ด ์์ต๋๋ค. ๋ฐ๋ผ์ ์ ํ๋ฆฌ์ผ์ด์
์ด ์์๋ ๋ ๋ชจ๋ ์ง์ค๋ฉํธ๋ฆฌ์ ๋ํด ํ ๋ฒ ๋น๋๋๋ ๋งค์ฐ ๊ฐ๋จํ Octree๋ฅผ ๊ตฌํํ์ต๋๋ค. ์ฅํธ๋ฆฌ๋ ๋์ ์ด์ง ์์ต๋๋ค. ์ฃผ์ด์ง ์ง์ค๋ฉํธ๋ฆฌ์ ๊ฒฝ๊ณ ์์์ ์ ์ ๋ฐฐ์ด์ ๊ธฐ๋ฐ์ผ๋ก ๊ตฌ์ถ๋ฉ๋๋ค. ์์ฑํ๋ ๋์ 8์ง์์ ์ ์ ์ด ํฌํจ๋์ด ์๋์ง ๋๋ 8์ง์์ Box3
๊ฒฝ๊ณ ์์๊ฐ ์ผ๊ฐํ(์ธ๋ฑ์ฑ๋์ง ์์ ์ง์ค๋ฉํธ๋ฆฌ์ ์ฐ์ 3๊ฐ ์ ์ )๊ณผ ๊ต์ฐจํ๋์ง ํ์ธํ๊ณ ์ ์ ๋ฐฐ์ด ์ฐธ์กฐ๋ฅผ ์ฅํธ๋ฆฌ ๋
ธ๋์ ์ ์ฅํฉ๋๋ค.
๋ฉ์ฌ๋ณ ์ฅํธ๋ฆฌ๋ ๋ฉ์ฌ์ ํจ๊ป ์ ์ฅ๋ฉ๋๋ค. ๋ํ ์ค์ ๋ก octree ๊ต์ฐจ ํ
์คํธ ๋ฉ์๋๋ฅผ ํธ์ถํ๊ธฐ ์ํด ๋ฉ์ฌ ์ธ์คํด์ค์ THREE.Mesh
์ raycast
๋ฉ์๋(ํ ์ค๋ง)๋ฅผ ๋ฎ์ด์๋๋ค. ์ด๊ฒ์ ๋ฉ์ฌ์ ๊ธฐ๋ณธ ๊ต์ฐจ ๋
ผ๋ฆฌ์์ ์ฌ์ฉํ ์ ์๋ ๊ธฐํํ์ ๋ฉด ์ ์ ์ธ๋ฑ์ค๋ฅผ ๋ฐํํฉ๋๋ค.
ํ ๊ฐ์ง ์ต์ ํ๋ฅผ ์ํํ์ต๋๋ค. octree ์์ฑ์ WebWorker(์ค์ ๋ก๋ ์์
์ ํ) ๋ด์์ ์ฑ ์์ ์ ํ ๋ฒ ์ํ๋ฉ๋๋ค. ๊ทธ ์ด์ ๋ ํฐ ์ง์ค๋ฉํธ๋ฆฌ๋ฅผ ์ํ ํธ๋ฆฌ ์์ฑ์ ์๋นํ ์๊ฐ(๋ช ์ด)์ด ๊ฑธ๋ฆฌ๊ธฐ ๋๋ฌธ์
๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ๋ธ๋ผ์ฐ์ UI๊ฐ ์ฐจ๋จ๋๋ฏ๋ก ๋ค๋ฅธ ์ค๋ ๋๋ก ์ฎ๊ฒผ์ต๋๋ค.
๋ด ์ ๊ทผ ๋ฐฉ์์ด ๋ช
ํํด์ง๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
@matthias-w ์ ๋ง ์ํ ๊ฒ ๊ฐ์ต๋๋ค! ๋๋ ๋ ๋ฆฝ์ ์ผ๋ก ๊ฑฐ์ ๋์ผํ ์์ ์ ์ํํ์ง๋ง ์ฑ๋ฅ ํฅ์์ ๊ฑฐ์ ๋ฌ์ฑํ๋ค๊ณ ์๊ฐํ์ง ์์ต๋๋ค. https://discourse.threejs.org/t/octree-injection-for-faster-raytracing/8291/2 (๊ฐ์ฒด ์งํฅ ์ฅํธ๋ฆฌ ๊ตฌํ ๋ฐ Mesh.raycast์ ๋ํ ๋ ๊นจ๋ํ ์์ )
๋ค๋ฅธ ์ฌ๋๋ค์ด ๋ ๋ง์ ์คํ์ ํ ์ ์๋๋ก Octree ๊ตฌํ์ ์คํ ์์ค/๊ธฐ์ฌํ ์ ์์ต๋๊น?
@EliasHasle ๊ฐ์ฌํฉ๋๋ค. ์ฌ์ค ์ฒซ ๋ฒ์งธ ์ธก์ ์์ ์ค์๋ฅผ ์ ์ง๋ ๊ธฐ ๋๋ฌธ์ ์ฑ๋ฅ ํฅ์์ ๊ทธ๋ค์ง ์ข์ง ์์ต๋๋ค. ๊ฐ์ ์์ ํ์ต๋๋ค(์์ ๋ด ๊ฒ์๋ฌผ ์ฐธ์กฐ). Octree์ ๋์ ๊ฒ์ ๋ณต์ก์ฑ๊ณผ ๊ด๋ จํ์ฌ ํ์ด๋ฐ์ด ๋ ํฉ๋ฆฌ์ ์ ๋๋ค. ๋ถํํ๋ ์ง๊ธ์ ์ฝ๋๋ฅผ ์ ๊ณตํ ์ ์์ง๋ง ์ฌํด ๋ง์ผ ์ ์์ต๋๋ค. ์ด์จ๋ , ๋ด ๊ตฌํ์ ๋งค์ฐ ๊ฐ๋จํฉ๋๋ค(๊ทธ๋ฆฌ๊ณ ๊นจ๋ํ BTW ;). ๊ทธ๋์ ํน๋ณํ ์ธ์ฌ์ดํธ๋ ์์์ ๊ฒ ๊ฐ์์.
@matthias-w 500k ๋ฒํ ์ค ๋ฉ์์ ๋ ์ด์บ์คํธ์ ๋ํด 2.3ms ๋ 120ms๋ ์ฌ์ ํ ์๋นํ ๊ฐ์ ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ์๋ฅผ ๋ค์ด ๊ฒ์์์ ๋ฐ์ฌ๋ ์ด์์ ์ค์๊ฐ ํด์๋๋ฅผ ๊ฐ๋ฅํ๊ฒ ํ๋ ๊ฒ์ ๋๋ค(๊ณ์ฐ์ ์๋นํ ํฐ ๋ถ๋ถ ํ๋ ์๋น ์์ฐ).
๋ ์ดํธ๋ ์ด์ฑ๋ ํด๋ณด์ จ๋์?
๊ตฌํ์ด JS ๊ฐ์ฒด ํธ๋ฆฌ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํฉ๋๊น? ๋ฆฌํฐ๋ด ๊ฐ์ฒด ๋๋ ํ๋กํ ํ์ ์ ์ธ์คํด์ค? ๊ด์ฐ์ ์์ ํ ์๊ธฐ ์ ์ฌํ๋ฏ๋ก ๋ชจ๋ ๋ ธ๋๋ ๋ฉ์๋์ ๋ชจ๋๊ฐ ํฌํจ๋ ์ฅํธ๋ฆฌ์ ๋๋ค.
@EliasHasle
์ ์ ๊ธฐํํ์ ๋ํ ๋ ์ด์บ์คํ ์ ๊ด์ฌ์ด ์๋ค๋ฉด ์ ์ ๋ค๋ฅธ ์ฌ๋๋ค์ BVH๋ฅผ ์ฌ์ฉํ์ฌ ์ผ๊ฐํ์ ์ธ๋ฑ์ฑํ๊ณ ๊ณ ์ฑ๋ฅ ๋ ์ด์บ์คํ ๊ณผ ์ ์ ๋ณตํฉ ๊ธฐํํ์ ๋ํ ๊ต์ฐจ ๊ฐ์ง๋ฅผ ํ์ฉํ๋ three-mesh-bvh ์ ์๋นํ ๋ ธ๋ ฅ์ ๊ธฐ์ธ์์ต๋๋ค. ํธ๋ฆฌ ๊ตฌ์ถ ํ๋ก์ธ์ค๋ ๋ ๋ณต์กํ๋ฏ๋ก ์๊ฐ์ด ์กฐ๊ธ ๋ ๊ฑธ๋ฆฌ์ง๋ง ์์ญ๋ง ๊ฐ์ ์ผ๊ฐํ์ด ์๋ ์ง์ค๋ฉํธ๋ฆฌ์ ๋ํด ๋ ์ด์บ์คํ ํ ๋ ๋ ์ด์บ์คํ ์ ๋ฐ๋ฆฌ์ด ๋ฏธ๋ง, ์ข ์ข 0.1ms ๋ฏธ๋ง๊น์ง ๊ฑธ๋ฆฝ๋๋ค.
๋น๋ ์๊ฐ์ ๋ช ๊ฐ์ง ๋ค๋ฅธ ๋ฐฉ๋ฒ์ผ๋ก ํฅ์๋ ์ ์์ง๋ง ๋ด๊ฐ ์ํ๋ ์์ ์๋ ์ถฉ๋ถํ์ต๋๋ค. ํ์ง๋ง ๊ฐ์ ํ๋ ๊ฒ์ ๋ชฉ๋ก์ ์์ต๋๋ค.
๋ฉ์๊ฐ ๋ง์ ์ฅ๋ฉด์ ๋ํด ๋ ๋์ ๋ ์ด์บ์คํ ๋ฐ ์ถฉ๋ ๊ฐ์ง๋ฅผ ๊ฐ๋ฅํ๊ฒ ํ๊ธฐ ์ํด ๋์ ์ฅ๋ฉด ๊ธฐ๋ฐ ์ฅํธ๋ฆฌ๋ฅผ ๋ง๋ค๊ณ ์ถ์ง๋ง ์ข์ ์ฌ์ฉ ์ฌ๋ก๊ฐ ์์์ต๋๋ค. ์ธ์ ๊ฐ๋!
@EliasHasle ๋ด ๊ตฌํ์ JS ํด๋์ค ๊ฐ์ฒด์ ํธ๋ฆฌ์ ๋๋ค(ES6 ํด๋์ค, ์ฆ ํ๋กํ ํ์ ์ธ์คํด์ค ์ฌ์ฉ). ๊ธฐ๋ณธ์ ์ผ๋ก ๋ ธ๋๋ ๋ด ๊ตฌํ์์ ํธ๋ฆฌ์ ๋๋ค. ๊ทธ๋ฌ๋ ๋ฃจํธ ๋ ธ๋๋ฅผ ๋ณด์ ํ๊ณ ํธ๋ฆฌ๋ฅผ ๊ตฌ์ถ ๋ฐ ๊ฒ์(๋ํ ์ผ๋ถ ๋๋ฒ๊น ๋ฐ ์๊ฐํ)ํ๊ธฐ ์ํ ๋ฉ์๋๋ฅผ ์ ๊ณตํ๋ ์ถ๊ฐ Octree ํด๋์ค๊ฐ ์์ต๋๋ค.
์ต๋ ํธ๋ฆฌ ๋
ธ๋ ์์ค ๋ฐ ๋ฆฌํ ๋
ธ๋๋น ์ต๋ ์ ์ ์์ ๋ํ ๊ฐ์ ๋ง์ด ์คํํ์ง ์์์ต๋๋ค. ์ด์ฉ๋ฉด ๋ ๋์ ์กฐํฉ์ด ์์์ง๋ ๋ชจ๋ฆ
๋๋ค.
๋ํ ๊ฒฝ๊ณ ๋ณผ๋ฅจ ๊ณ์ธต์ ์ฌ์ฉํ์ฌ ๊ต์ฐจ ํ
์คํธ๋ฅผ ๊ฐ์ํํฉ๋๋ค. ๊ทธ๋์ ๋ฉ์ฌ ์ง์ค๋ฉํธ๋ฆฌ์ ์ฅํธ๋ฆฌ๋ฅผ ์ค์ ๋ก ํ์ธํ๊ธฐ ์ ์ ๋ฉ์ฌ์ ๊ฒฝ๊ณ ๊ตฌ์ ๊ฒฝ๊ณ ์์๋ฅผ ํ
์คํธํฉ๋๋ค.
์ถฉ๋ ๊ฐ์ง ์ ๊ทผ ๋ฐฉ์์ ํ๋ฅญํ ๋ชจ์์ง์ธ ์ฑ ์ ์ถ์ฒํ ์ ์์ต๋๋ค. C. Ericson, Real-Time Collision Detection, CRC Press, 2004
@gkjohnson ๋ฉ์ง๋ค์ ! ์ฑ๋ฅ์ด ์ธ์์ ์ ๋๋ค. ์ด๋ค ์ข ๋ฅ์ BVH๋ฅผ ์ฌ์ฉํ๊ณ ์์ต๋๊น?
@matthias-w ๊ฐ์ฌํฉ๋๋ค!
๋ช ๊ฐ์ง ๋ถํ ์ ๋ต ์ต์ ์ด ์์ง๋ง ๊ฐ์ฅ ๊ธด ์ธก๋ฉด์ ์ค์ฌ์์ BVH ๋ ธ๋๋ฅผ ๋ถํ ํ๋ฉด ํธ๋ฆฌ๊ฐ ๊ฐ์ฅ ๋น ๋ฅด๊ฒ ๊ตฌ์ถ๋ฉ๋๋ค. ์ผ๊ฐํ์ ๊ฒฝ๊ณ์ ์ค์ฌ์ ๊ธฐ์ค์ผ๋ก ์ธก๋ฉด์ผ๋ก ๋ถํ ๋๊ณ ํธ๋ฆฌ ๋ ธ๋๋ ์์ ์ผ๊ฐํ์ ์์ ํ ํฌํจํ๋๋ก ํ์ฅ๋ฉ๋๋ค(๋ฐ๋ผ์ ํธ๋ฆฌ ๋ ธ๋๊ฐ ์ฝ๊ฐ ๊ฒน์น๊ฒ ๋จ).
@gkjohnson ๊ทธ๋ฌ๋ฉด BVH ๊ตฌํ์ ์์ ๋ชจ์์ ๋ฐ๋ผ ์ถ ์ ํ์ด ๊ฐ๋ฅํ ์ผ์ข ์ ๋ถ๊ท ํ Kd-ํธ๋ฆฌ์ ๋๋ค. ๋ง์ฃ ? ๊ทธ๋ ๋ค๋ฉด ๋ฃจํธ BB๊ฐ ํ๋ธ์์ ๋๋ฌด ๋ฉ๋ฆฌ ๋จ์ด์ ธ ์๋ ๊ฒฝ์ฐ์ ๋ํด ์ด์ ๊ฐ์ ์์ ์ ์ํํ ๋ค์ ์กฐ๊ฑด๋ถ ๋ถํ ํ์ ์ฅํธ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์๊ฐํ๊ณ ์์์ต๋๋ค. ์ด๊ฒ์ ์ด๊ธฐ ๋ถํ ์ด 2๊ฐ์ "์ง๋" ์ฐจ์์์ ์ด๋ฃจ์ด์ง๊ณ ํ์ ๋ถํ ์ด 3D๋ก ์งํ๋๋ @Usnul ์ ์ง๋ ์ธ๊ณ์ ๊ฐ์ ๊ฒฝ์ฐ์ ์๋ง๋ ์ ์ ์ฉ๋ ๊ฒ์ ๋๋ค. ๋ฃจํธ BB๋ฅผ ๊ฐ์ ์ค์ฌ์ ๊ฐ์ง ๊ฒฝ๊ณ ํ๋ธ๋ก ํ์ฅํ ๋ค์ octree ๋ถํ ์ ๋๊น์ง ์ฌ์ฉํ๋ ๊ฒ์ด ๋ด ๊ฒ๋ณด๋ค ํจ์ฌ ๋ ๋์ ์๋ฃจ์ ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
๋ฐฉ๊ธ PlaneBufferGeometry์์ ๋ ์ด์บ์คํ ์ ์ํ ๋ ๋์ ๋ฐฉ๋ฒ์ ๊ตฌํํ์ต๋๋ค.
@kpetrow PlaneBufferGeometry
์ ๋ํ ๋ ์ด์บ์คํธ ์ต์ ํ , ๊ผญ์ง์ ์์น๊ฐ ๋ณ๊ฒฝ๋์ง ์๋๋ค๋ ๊ฐ์ ์ ์ ํ ๊ฒ์์ด ๋ถ์ถฉ๋ถํ ๊ณ ํด์๋ ์ง์ค๋ฉํธ๋ฆฌ์ ์ ํจํ์ง ์์ ๊ฐ๋ฅ์ฑ์ด ๋งค์ฐ ๋์ต๋๋ค. ๋ด๊ฐ ๋งํ ์ ์๋ ํ, ๊ณ ํด์๋ PlaneBufferGeometry
์ ์ฃผ์ ์ฉ๋๋ ํ ํด๋ก์ง๋ฅผ ์ ์งํ๋ฉด์ ์ ์ ์ ์ด๋ํ์ฌ ๋ชจ์์ ๋ณ๊ฒฝํ๋ ๊ฒ์
๋๋ค(์: ์งํ ๊ตฌ์ถ).
#13909์ ์ฐฌ์ฑํ์ฌ ๋ง๊ฐํฉ๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
๊ณผ๊ฑฐ์ threejs์ ํฌํจ๋ ๊ณต๊ฐ ์ธ๋ฑ์ค๋ฅผ ์ ์ํ ์ ์ด ์์ต๋๋ค. ์ด ๋ฐฉํฅ์ผ๋ก ์์ ์ด ์์๊ณ ๊ธฐ์กด oct-tree ์์ ๊ฐ ๊ทธ ์ค ํ๋์ ๋๋ค. ๊ถ๊ทน์ ์ผ๋ก ์ด ๊ธฐ๋ฅ์ ์ผ๋ฅ ์๋ฏผ์ผ๋ก ์ผ๋ ๊ฒ๊ณผ ๊ด๋ จํ์ฌ ํต์ฌ ์ปค๋ฎค๋ํฐ์ ๊ด์ฌ์ด ๋ถ์กฑํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
๊ธฐ๋ณธ ๋ฐฐํฌํ(์์ ์๋)์ ํฌํจํ ์ถฉ๋ถํ ๊ด์ฌ๊ณผ ์๋๊ฐ ์๋ ๊ฒฝ์ฐ ๋ด BVH ์ฝ๋๋ฅผ ํ๋ก์ ํธ์ ๊ธฐ๋ถํ ์ ์์ด ๊ธฐ์ฉ๋๋ค.
๋ด ์ฝ๋๋ ๋ ๊ฐ์ง ์ธก๋ฉด์ ์ค์ ์ ๋ก๋๋ค.
2๊ฐ์ง ๊ตฌํ์ด ์์ต๋๋ค.
๊ฐ์ธ์ ์ผ๋ก, ๋๋ ๊ณต๊ฐ ์ธ๋ฑ์ค ์์ด๋ ์ด ์ ์์ต๋๋ค. ๊ทธ๊ฒ์ n^2์ log(n) ์ฑ๋ฅ์ ์ฐจ์ด์ ๋๋ค. ์๋ฅผ ๋ค์ด, ํ์ฌ ํ๋ก์ ํธ์์ ๋ค์ ๋ถ๋ถ์ ๊ณต๊ฐ ์ธ๋ฑ์ค์ ์์กดํฉ๋๋ค.
http://server1.lazy-kitty.com/komrade
์งํ์๋ ์ฝ 1m ํด๋ฆฌ๊ณค์ด ์์ผ๋ฉฐ ์์ฒ ๊ทธ๋ฃจ์ ๋๋ฌด๋ฅผ ๋ฐฐ์นํ๊ณ ์ฌ๊ธฐ์ ์ค์๊ฐ ๋ ์ด์บ์คํธ๋ฅผ ์คํํ๋ ๊ฒ์ ํนํ ์ ์ฌ์ ์ฅ์น์ ๊ฒฝ์ฐ ์ ๋ ํด์๋ ์ ๋ฉ๋๋ค.