SkinnedMesh (iPhone 6 ๋ฐ 8์์ ํ ์คํธ)์ ๋ํ ๋ฒ๊ทธ๋ฅผ ๋ฐ๊ฒฌ ํ ๊ฒ ๊ฐ์ต๋๋ค.
์ด๋ฏธ๋ณด๊ณ ๋ ๊ฒฝ์ฐ ์ฃ์กํฉ๋๋ค. ๋ฌธ์ ๋ชฉ๋ก์์ ์ฐพ์ง ๋ชปํ์ต๋๋ค. (
GPU ์คํค๋์ด ์ ๋๋ก ์๋ํ์ง ์๊ณ ๋ชจ๋ฐ์ผ์์ ๋ฏธ์ณ๊ฐ๋ ๊ฒ ๊ฐ์ต๋๋ค.
SkinnedMesh๊ฐ ๋์ ๊ฐ ์์น (์ : x : 0, y : 0, z : 1000)์์ ์์ง์ด๊ฑฐ๋ ์ด๋ํ๋ฉด ์คํค๋์ด ๋ ์ด์ ์ ํํ์ง ์๊ณ ๊ฑฐ๋ฏธ ์ถค์ ์์ํฉ๋๋ค.
๋ฉ์์ ํฌ๊ธฐ๊ฐ ๋ฒ๊ทธ์ ์ํฅ์์ค๋๋ค.
์ค์ผ๋ ํค ๋ณธ ๊ฐ์ด ๊ฐ ํ๋ ์์์ ์ฌ๋ฐ๋ฅด๊ฒ ๊ณ์ฐ๋์ง ์๊ณ ์คํค๋ ์
ฐ์ด๋์ bonesTexture / bonesMatrix๊ฐ ์ ์ ์ ์๋ชป๋ ์์น๋ก ๋ฐ๊ณ ์๋ ๊ฒ ๊ฐ์ต๋๋ค.
์ด๊ฒ์ ๋น์ฐํ ์ ๋๋์
๋๋ค.
๋๋ ์ด๊ฒ์ ๊ฒ์ํ๊ธฐ ์ ์ ๋ง์ ํ ์คํธ๋ฅผ ์คํํ์ต๋๋ค ... ๋ด ์ ๋๋ฉ์ด์ ๋ด๋ณด๋ด๊ธฐ์์ ๋จ์๋ฅผ ์ฐพ๊ณ ์์์ง๋ง ๋ชจ๋ ์ข ๋ฅ์ ํ์ (GLTF, FBX, Collada, JSON, ...) ๋ฐ ThreeJS repo์ ๋ชจ๋ธ์์ ๋ฒ๊ทธ๊ฐ ๋ฐ์ํ๋ ๊ฒ์ ๋ฐ๊ฒฌํ์ต๋๋ค.
์ด๊ฒ์ ์ฐ๋ฆฌ๊ฐ์ด ๋ฌธ์ ์์ด ์๋ฐํ๊ฐ ์คํ๋๋ (avatar.position.z๊ฐ ์ฆ๊ฐํ๋) ๊ฐ๋จํ ๋ฌ๋ ๊ฒ์์ ๊ฐ๋ฐํ ์ ์๋ค๋ ๊ฒ์ ์๋ฏธํ๊ธฐ ๋๋ฌธ์ ๋งค์ฐ ์ฑ๊ฐ์ ์ผ์
๋๋ค.
morphTargets๊ฐ ์ต์
์ด ์๋๊ธฐ ๋๋ฌธ์ ์ด๋ป๊ฒ ๊ด๋ฆฌํ ์ง ๋ชจ๋ฅด๊ฒ ์ต๋๋ค.
์ฌ๋ฌ๋ถ์ด ์ฌ๊ธฐ์์ ๋์ธ ์ ์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
๋๋ ๋ฌธ์ ๋ฅผ ๋๋ฌ๋ด ๊ธฐ ์ํด ๊นจ๋ํ ์์ค๋ก ๋ช ํํ ์๋ฅผ ๋ง๋ค์์ต๋๋ค. ์ค๋งํธ ํฐ์์ ํ์ธํ๋ ๊ฒ์ ๋งค์ฐ ์ฝ์ต๋๋ค.
๋ชจ๋ฐ์ผ์๋ง ํ์ (z = 10000) :
http://cornflex.org/webgl/skinning-bug.html
floatVertexTextures๊ฐ false๋ก ์ค์ ๋ ๊ฒฝ์ฐ (z = 10000) :
http://cornflex.org/webgl/skinning-bug2.html
๊ฑฐ๋ฆฌ์ ๋ฐ๋ผ ์
ํ๋จ (z ์ฆ๊ฐ) :
http://cornflex.org/webgl/skinning-bug3.html
์ค์ฌ์์ ๋งค์ฐ ๋ฉ๋ฆฌ ๋จ์ด์ ธ ์์ (z = 70000000)> ๋ฒ๊ทธ๋ ๋ฐ์คํฌํ์ ๋ํ๋์ง๋ง ๋ถ๋ ์ ๋ฐ๋ ๋ฌธ์ ๋ก ์ธํด ๋ฐ์ํฉ๋๋ค.
http://cornflex.org/webgl/skinning-bug4.html
๋ด ๊ฒ์ ํ๊ฒฝ์์ ๋น๋์ค ๋ฏธ๋ฆฌ๋ณด๊ธฐ :
์ด๊ฒ์ ํ์ค์ ์ธ ๊ท๋ชจ์ ์ธ๊ณ์
๋๋ค (1.0m = 1.0 threejs ๋จ์).
๋ฒ๊ทธ๋ ์ฌ ๋ฃจํธ์์ 50-60m ํ์ ๋ํ๋๊ณ ๊ฑฐ๋ฆฌ๊ฐ ๊ฐ์๋ก ์
ํ๋ฉ๋๋ค.
http://cornflex.org/webgl/skin-bug.mp4
๋งค์ฐ ์ค์
ThreeJS ์ ์ฅ์์์ ์ฌ์ฉ ๋ ๋ฉ์๊ฐ ๋๋ฌด ํฝ๋๋ค. ํค๊ฐ 20m ๊ฐ์์.
์ด๊ฒ์ด ๋ฒ๊ทธ๋ฅผ๋ณด๊ธฐ ์ํด z ๊ฐ์ด ๋ ์ปค์ผํ๋ ์ด์ ์
๋๋ค.
์ด ๋ฉ์ฌ๊ฐ ์ค์ ํฌ๊ธฐ๋ก ์ถ์๋๋ฉด 100m์์๋ ๋ฒ๊ทธ๊ฐ ๋ํ๋๊ธฐ ์์ํฉ๋๋ค.
์์ดํฐ 6, 8
์, ๋ด Pixel์์ ๋ฐ๋ชจ๊ฐ ์ข์ ๋ณด์ ๋๋ค.
๋ด iPhone SE์์ ํ์ธ ๋ ๋ฌธ์ โ
์๋ง๋ iOS์ WebGL ์ ๋ฐ๋ ๋ฌธ์
๊ทธ๋ฌ๋ iOS ์ฅ์น๋ ์ค์ ๋ก ์คํค๋ ๊ตฌํ์ ์ฝ๋ ๊ฒฝ๋ก ๊ธฐ๋ฐ์ ๋ถ๋ ํ ์ค์ฒ๋ฅผ ์ฌ์ฉํฉ๋๋ค. ๋ค์ ์ ํฉ์ฑ ํ ์คํธ๋ฅผ ํตํด์ด๋ฅผ ํ์ธํ ์ ์์ต๋๊น?
iPhone SE์๋ ํด๋น ํ์ด์ง์ ๋ค์ฏ ๊ฐ์ง ์ค๋ฅ๊ฐ ์์ต๋๋ค. ๐
๋ด ํ๋ก์ ํธ์์ ๋ณด์ฌ ๋๋ฆฌ๊ธฐ ์ํด ์์ ์คํฌ๋ฆฐ ์บ์คํธ๋ฅผ ๋ง๋ค์์ต๋๋ค.
http://cornflex.org/webgl/skin-bug.mp4
์๋ฐํ๊ฐ 0,0,0์์ ๋๋ฌด ๋ฉ์ด์ง๋ฉด ๋ณด์๋ค์ํผ ํผ๋ถ์ ๋ฒ๊ทธ๊ฐ ์๊ธฐ๊ธฐ ์์ํฉ๋๋ค.
๋๋ ๊ณจ๊ฒฉ๊ณผ ๋ผ์ ๊น์ ํ๋กํ์ผ ๋ง์ ๋ง๋ค์์ต๋๋ค. ์ง์ค๋ฉํธ๋ฆฌ๊ฐ ์ด๋ค ์ ์ผ๋ก๋ "ํ๋ง"๋ ๊ฒ์ ์ ์ธํ๊ณ ๋ ๋ชจ๋ ๊ฒ์ด ๊ด์ฐฎ์ ๋ณด์
๋๋ค. ์ ๋๋ฉ์ด์
๋ฃจํธ๊ฐ ์ข์ง ์์ง๋ง ๋ค์ ๋งํ์ง๋ง Threejs์์๋ ๋ชจ๋ ๊ด์ฐฎ์ ๋ณด์
๋๋ค.
Prob๋ Skinning ์
ฐ์ด๋์ Skeleton ๋ฐ bonesTexture์ ๋ช
ํํ๊ฒ ์ฐ๊ฒฐ๋์ด ์์ต๋๋ค.
๋๋ ๋ํ ์ ๋ฐ๋์ ๊ดํด์๋ ์์ง๋ง Mugen์ด ๋งํ๋ฏ์ด iOS ์ฅ์น๋ ์ฝ๊ฒ ์ง์ํด์ผํฉ๋๋ค.
... ์ ์์ดํฐ์์๋ง : /
๋๋ ๊ฝค ๋ถ์ด ์์ต๋๋ค ... ๋ฐฑ์ ๊ณํ์ผ๋ก png ์ํ์ค๋ก ๋ฐฉํฅ์ ๋ฐ๊พธ๊ณ ์์ต๋๋ค ... :(
์ด๊ฒ์ ์์ดํฐ 6์ด ์ถฉ๋ถํ ๋ผ๋ฅผ ์ง์ํ์ง ์๊ธฐ ๋๋ฌธ์ผ ๊ฐ๋ฅ์ฑ์ด ํฝ๋๋ค.
๋๋ ๋๊ฐ์ ๋ฌธ์ ๊ฐ ์์๋ค.
์ฌ๊ธฐ์์ ๋ผ ์ ํ์ ํ์ธํ์ญ์์ค : https://virtulo.us/2/vr/test
๋๋ ๊ทธ๋ ๊ฒ ์๊ฐํ์ง ์๋๋ค.
skinnedmesh๊ฐ 0,0,0์ ์์ผ๋ฉด ์ ํ ๋ฌธ์ ๊ฐ ์์ต๋๋ค.
์๋ฐํ ๋์ ๋ชจ๋ ์ ์
์ ์ด๋ํ๋ ๊ฒ๋ ๊ณ ๋ ค ์ค์
๋๋ค ... (์ด๊ฒ์ ์ ํด๊ฒฐ ๋ฐฉ๋ฒ # 2์
๋๋ค) ๋ฌผ๋ก ์ค์ผ๋ ํค์ด ๋ฐ์คํฌํ๋งํผ ์ ์๋ํ๋ ๊ฒ์ ์ ํธํฉ๋๋ค.
์น๊ตฌ๊ฐ iPhone 8์์ ๋์ผํ ๋ฒ๊ทธ๋ฅผ๋ณด๊ณ ํ์ต๋๋ค.
๋ค์ ์ ํฉ์ฑ ํ ์คํธ์์ ์ด๋ค ๊ฒฐ๊ณผ๋ฅผ ์ป์ต๋๊น?
ThreeJS ์์ค๋ฅผ 2 ์ผ ๋์ ์ดํด๋ณธ ํ ... bonesTexture๊ฐ ์
๋ฐ์ดํธ๋๋ฉด ๋ฌธ์ ๊ฐ์๋ ๊ฒ ๊ฐ์ต๋๋ค.
์ด ํ
์ค์ฒ๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ์
๋ฐ์ดํธ๋์ง ์์ ๊ฒ ๊ฐ๊ณ ์ ์ ์ ์๋ ์์น๋ก ๋ฐ์ด ๋ฃ์ต๋๋ค ... ๋ฌผ๋ก ํ๋ฆด โโ์ ์์ต๋๋ค.
ํ ... ์ฌ๊ธฐ์ ๋ช ๊ฐ์ง ์คํจ๊ฐ ์์ต๋๋ค.
์๋ง๋ ๋ฌธ์ ๋ ์ด๋ฌํ ์คํจ์ ๊ด๋ จ์ด ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ๋ด Pixel์ ๋ชจ๋ ํ ์คํธ๋ฅผ ํต๊ณผํฉ๋๋ค.
๋ก ์ด๋ : ๋ฐ์ผ๋ก์ ์๋ ๋ญ๊ฐํ์ WebGLCapabilities
์์ ๊ฐ์ผ๋ก ์ค์ floatVertexTextures
์ false
(์ด ํ๋กํธ ์ง๊ฐ์ ์ฌ์ฉ์ ๋ฐฉ์ง ํ ์ ์์ต๋๋ค). ๋น๋๋ฅผ ๋ง๋ค๊ณ ์ฑ์์์ด three.js
๋ฒ์ ์ ์ฌ์ฉํฉ๋๋ค. ๋ฌด์จ ์ผ์ด ์ผ์ด๋๋์ง ๊ถ๊ธํฉ๋๋ค ๐.
๋ ๋๋ฌ์์ ์ด๋ฏธ floatVertexTextures = false๋ฅผ ์๋ํ์ต๋๋ค.
ํผ๋ถ๊ฐ ๋ฏธ์ณ๊ฐ๋ ๊ฒ์ ๋ฉ์ท์ง๋ง ๋ ์ด์ ์ ๋๋ฉ์ด์
์ด ์์ต๋๋ค : /
์ํ์ ํธ์ํ๊ฒ ์ต๋๋ค.
์ฌ๊ธฐ ์์ด์:
http://cornflex.org/webgl/skinning-bug2.html
renderer.capabilities.floatVertexTextures = false;
=> ๋ ์ด์ ์คํ์ค์ธ ์ ๋๋ฉ์ด์ ์์
์, ๋ด Pixel์์๋ ๋์ผํฉ๋๋ค (๋ฐ์คํฌํฑ ์๋). ํ์ผ์ ์ธ ํ๊ณ์ ๋๋ฌํ๊ณ ์๋ ๊ฒ ๊ฐ์ต๋๋ค.
๋ฒ๊ทธ๊ฐ ์ ์ง์ ์ผ๋ก ๋ํ๋๋ ๋ง์ง๋ง ์ํ์ ๋ง๋ค์์ต๋๋ค.
http://cornflex.org/webgl/skinning-bug3.html
0,0,0์์ ์์ํด์ ์์ผ๋ก ๋์๊ฐ๋๋ค ... ๋ช ์ด๋ง ๊ธฐ๋ค๋ฆฌ์ธ์ ... ํผ๋ถ๊ฐ ๋ฏธ์น๊ธฐ ์์ํฉ๋๋ค.
0,0,0์์ ๋ชจ๋ ๊ด์ฐฎ๋ค๋ ๊ฒ์ ๋งค์ฐ ์ด์ํฉ๋๋ค. ๊ทธ๋ ์ง ์์ต๋๊น?
z : 1255> ์ฌ์ ํ ์ ์
z : 18870> ๋ฏธ์น ํผ๋ถ
๋ด๊ฐ ๋งํ๋ฏ์ด CPU ์ธก์ ๋ชจ๋ ๋ผ๋์ ๋ผ ์์น๋ฅผ ๋ฅ ํ๋กํ์ผ ๋งํ์ต๋๋ค. ๋ชจ๋ ๊ฐ์ด ๊ด์ฐฎ์ ๊ฒ ๊ฐ์ต๋๋ค. ๋ด๊ฐ ๊ฐ์ง ์ ์ผํ ๋จ์๋ ๋ฉ์๊ฐ 0,0,0์์ ๋ฉ์ด ์ง ๋ iOS์์ ์ฌ๋ฐ๋ฅด๊ฒ ์๋ํ์ง ์๋ bonesTextures ๋ฐ bonesMatrix์ ๋๋ค.
๋ผ์ ์์น๋ฅผ โโํ์ธํ ์ด์ ๋ ๋ฃจํธ ๋ ธ๋์ ์์ ๋ ๋ผ์ ์ผ๋ฐ์ ์ธ ๋์์ด๊ธฐ ๋๋ฌธ์ ๋๋ค.
์คํจ ์ ฐ์ด๋์์ GPU ์ธก์ ๋ถ๋ ์ ๋ฐ๋์ ๋ํด ํ์ธํ์ง๋ง ๋ค์ ํ ๋ฒ ... ์ํฅ์ ๋ฏธ์น๋ ๊ฒ์์๋ ๊ฒ ๊ฐ์ต๋๋ค.
์์ฃผ ์ด์ํ๊ฒ๋ ์๋ฌด๋ SkinnedMesh๋ฅผ ์ฌ ๋ด๋ถ๋ก ์ฎ๊ธฐ์ง ์์๊ณ ์ด๊ฒ์๋ณด๊ณ ํ์ง ์์์ต๋๋ค.
ํ ๊ฐ์ง ๋ ์ง๋ฌธ : Chrome์ ๋์ผํ ๋ฌธ์ ๊ฐ ์์ต๋๊น?
๊ฐ์ ๋ฌธ์ ์์.
์ ๋ฐ ๋ฌธ์ ์ธ ๊ฒ ๊ฐ์ต๋๋ค. ์ฅ๋ฉด์ ์ถ์ ํด ๋ณด์ จ์ต๋๊น? (11195๋ 11km์ ๋๋ค).
๋ ๋ค๋ฅธ ์ต์ ์ ์บ๋ฆญํฐ ๋์ ์ฅ๋ฉด์ ์ด๋ํ๋ ๊ฒ์ ๋๋ค. ํฐ ์ฅ๋ฉด์์ ์ผ๋ฐ์ ์ธ ์๋ฃจ์ ์ด๋๋ ๊ฒฝํฅ์ด ์์ต๋๋ค.
๋ํ ์คํค๋ ์ฝ๋๊ฐ ์๋ ๊ณต๊ฐ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ฐ๋ฆฌ๋ ์ด๊ฒ์ ์กฐ์ฌ ํ ์ ์์ต๋๋ค.
๋น์ ์ ๋ผ ์๊ฐ 67 ๊ฐ์ธ ๊ฒ ๊ฐ์ต๋๋ค.
๋ด (wifes) iphone 6์ Max Hardware Bones ์ ํ์ 27์ ๋๋ค.
๋ด๊ฐ ๋ณธ ๋ณํ์ ๋ด ๊ฒ์์์ ๊ทธ๋ ์ ํด๋ํฐ์์ ๋ณธ ๊ฒ๊ณผ ๋์ผํฉ๋๋ค (๊ทธ๋ฆฌ๊ณ ์ ๋๋ฉ์ดํฐ์๊ฒ ๋ฉ์ ์ ๋ฏธ์ฒ๋ฅผ ์์ ํ๊ธฐ ์ ์ ๊ฐ์ก๋ ๋์ผํ ๋ฌธ์ ). ์ด๊ฒ์ด ์ ์ด๋ ๊ทํ์ ๋ฌธ์ ์ ์ผ๋ถ๊ฐ ์๋๋ผ๋ฉด ๋๋ ๊ฒ์ ๋๋ค.
์๊ฐ์ด ์ง๋จ์ ๋ฐ๋ผ ์ ํ๋๋ ์ด์ ๋ ๋ฌด์์ ๋๊น? ๋ชฐ๋ผ. ๋ค๋ฅธ ๋๊ตฐ๊ฐ๊ฐ ๋น์ทํ ๊ฒ์ ์ธ๊ธํ์ง๋ง ๊ด๋ จ ์ฌ๋ถ๋ ํ์คํ์ง ์์ต๋๋ค. https://discourse.threejs.org/t/updated-with-fiddle-as-animations-go-faster-there-is-increasing-error-in-accuracy/ 1707 ๋ 6 ์
์์ดํฐ์์ ๋ฐ๊ฒฌ ํ ๋ ๋ค๋ฅธ ์ฑ๊ฐ์ ๊ฒ (์ ์ด๋ ์์ดํฐ 6) : ๋๋ ๋ฐ๋์ highp ์์ด๋ ์ ๋ฐ๋๋ฅผ ์ฌ์ฉํด์ผํ๊ณ , mediump์ lowp๋ ๋๊ฐ์ ๋ฌด์์ด ๋ชจ์์ผ๋ก ๋ฉ์๋ฅผ ์๊ณกํ์ง ์์ง๋ง (์ ํ์์ ๋ผ ๋ฌธ์ ์ ๊ฐ์ด), ํ ์ค์ฒ๊ฐ ๋ณด์ ๋๋ค. ์ ๋๋ฉ์ด์ ํ๋ ๋์ ์ด์ํ๊ณ ์๊ณก๋๊ฑฐ๋ ํฝ์ ํ๋ฉ๋๋ค.
ํ ์คํธ์ค์ธ ์ฅ์น์ ํ๋์จ์ด ๋ผ ์ ํ์ ๋ฌด์์ ๋๊น?
@mrdoob ์ด๋ฏธ ์ถ์ํ๋ ค๊ณ ์๋ํ์ง๋ง ์ค์ ๋ก ์คํค๋์ด ํจ์ฌ ๋ ๋นจ๋ฆฌ ๋ฏธ์ณ์ง๋๋ค.
0.1๋ก ์ถ์ํ๋ฉด ๋ฒ๊ทธ๊ฐ 10 ๋ฐฐ ๋น ๋ฅด๊ฒ ๋ํ๋ฉ๋๋ค.
์ฌ๊ธฐ์ ์ค๋ช
ํ๊ธฐ ์ํด ์ฌ์ฉํ ๋ฐ๋ชจ๋ threejs ์์ ์์ ๋์์ต๋๋ค.
๋ด ๊ฒ์์์ ๊ท๋ชจ๋ ๊ทธ๋ค์ง ํฌ์ง ์์ง๋ง ๋ฒ๊ทธ๋ ๋์ผํ๋ฉฐ ๋ ๋นจ๋ฆฌ ๋ํ๋ฉ๋๋ค.
์ค์ ๋ก ์คํค๋์ ์ธ๊ณ ๊ณต๊ฐ ๋๋ ๋ก์ปฌ ๊ณต๊ฐ์์ ์ํ๋๋ ๊ฒ์ฒ๋ผ ๋ณด์ด์ง๋ง ์ค์ฌ์์ ๋ฉ๋ฆฌ ์ด๋ํ๋ฉด ๋์ด๋ฉ๋๋ค. ์ด๊ฒ์ด 0,0,0์์ ๊ฝค ์ ์คํ๋๋ ์ด์ ์ ๋๋ค.
์๋ฐํ๊ฐ ์๋ ์จ ์ธ์์ ์์ง์ด๋ ๊ฒ์ ๋ด ์์
# 2.
์ด๋ฏธ ๋ฌผ๋ฆฌํ๊ณผ ๋ชจ๋ ๊ฒ์ ๊ฐ์ถ ์ธ๊ณ ๊ณต๊ฐ์์ ๋ฌ๋ ๊ฒ์์ ๋ชจ๋ ๋ฃจํด์ ๊ฐ๋ฐํ ๋ ๊ทธ๊ฒ์ ๋์ ์ ํ์ด๋ผ๋ ๊ฒ์ ์ธ์ ํด์ผํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ z = 11000์ ๋ฌ๋ ๊ฒ์์์ ๊ทธ๋ฆฌ ๋ฉ์ง ์์ต๋๋ค. : / ... ๊ทธ๋ฆฌ๊ณ ๊ทธ๊ฒ์ ๋ฐฐ๊ฐ ์๋๋ผ ๋จ์ง ๋ฌ๋ฆฌ๋ ์ฌ๋์
๋๋ค.
ThreeJS๋ก ๋ง์ ๊ฒ์์ ๋ง๋ค์์ง ๋ง skinnedmesh๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ์ฒ์์ ๋๋ค. ์ด iOS ๋ฒ๊ทธ๋ ์ ๋ง ์ง์ฆ๋ฉ๋๋ค.
Workaroung # 1 : ์คํ๋ผ์ดํธ ์ํธ ์ ๋๋ฉ์ด์ ์ผ๋ก 6 ๊ฐ์ png ์ํ์ค๋ฅผ ์ํํ๊ฒ ์ต๋๋ค. ๊ทธ๋ฐ ๋ค์ ์ธ๊ณ ๊ณต๊ฐ ๋ ผ๋ฆฌ๋ฅผ ์ ์งํ ์ ์์ต๋๋ค. ๋ง๊ฐ์ผ์ด ๋ฉ์ง ์์ต๋๋ค :(
@titansoftime ์๋ด์ iPhone 8์๋ ๋ฌธ์ ๊ฐ ๋ํ๋ฉ๋๋ค. ์ด๊ฒ์ iPhone 6์๋ง ๊ด๋ จ์ด ์์ต๋๋ค.
๋ํ ์ต๋ ๋ผ๋ ๋ฌธ์ ๊ฐ ์์ผ๋ฉด ์ฒ์๋ถํฐ ๋ฒ๊ทธ๊ฐ ๋ฐ์ํฉ๋๋ค. ์ฌ๊ธฐ์์ 0,0,0์์ ๋ฒ๊ทธ๊ฐ ์๋์ ์ ์ ์์ต๋๋ค. ๊ทธ๋ ๋ค๋ฉด ๋ผ ํ๊ณ๋ ๋ฌธ์ ๊ฐ ์๋๋๋ค. ์คํค๋ ์
ฐ์ด๋์์ ๋ผ์ bonesMatrix์ ์๋ ์คํ์ด์ค ๊ณ์ฐ์ IMO์
๋๋ค.
iPhone 8์ ์ต๋ ํ๋์จ์ด ๋ผ๋๋ ๋ฌด์์ ๋๊น?
๋๋ ๋ชฐ๋ผ. ๊ทธ๋ฆฌ๊ณ ๋๋ ๊ทธ๊ฒ์ด ์ฅ์น์ ์์กดํ๋์ง ํ์ ํ์ง ๋ชปํฉ๋๋ค.
๊ทธ๋ฌ๋ ๋ค์ ... IMO, ๊ทธ๊ฒ์ maxbones ๊ฐ๊ณผ ์ ํ ๊ด๋ จ์ด ์์ต๋๋ค.
์ํ์ iPhone 6,8, X์์ ์ฌ๋ฐ๋ฅด๊ฒ ์๋ํฉ๋๋ค .... 5๋ ... SkinnedMesh๊ฐ 0,0,0์์์ ๋๋ง
https://threejs.org/examples/webgl_loader_fbx.html
maxbones๊ฐ ๋ฌธ์ ์๋ค๋ฉด 0,0,0์์๋ ์คํค๋์ด ์ข์ง ์์ ๊ฒ์ ๋๋ค.
zeoverlord ์ฌ์ฉ์
์ง ํฐ๋ง์ ํ๋กํธ์๋ง ์์ฐ์ค๋ฝ๊ณ , ์ซ์๊ฐ ๋์์๋ก ๋ณ์์ ์ ๋ฐ๋๊ฐ ๋จ์ด ์ง๋ฏ๋ก 1.0์ ๊ฐ๊น์ธ์๋ก ์ ๋ฐ๋๊ฐ ๊ฐ์ฅ ์ข์ต๋๋ค. ์ด์ ์ด๊ฒ์ ์ค์ ๋ก ๋ฌธ์ ๊ฐ๋์ง๋ ์์ง๋ง ์์ฒญ๋ ์์ ํ๋ ฌ ๊ณ์ฐ์ ๋ง์ด ์ํํ๋ฉด ์ ๋ฐ๋ ์ ํ (์ผ๋ช ์ง ํฐ๋ง)๊ฐ ๋ง์ด ๋ฐ์ํ ๊ฒ์์ ์๋ฏธํฉ๋๋ค. ๊ทธ๋์ ๋น์ ์ ํฉ๋ฆฌ์ ์ธ ์ซ์๋ก ์์ ์ ์ค์ฌ์ผ๋ก ๋ชจ๋ ์ํ์ ํ ๋ค์ ๋ฒ์ญํด์ผํฉ๋๋ค.
์, ๋งค์ฐ ํฅ๋ฏธ๋ก์ด @ Mugen87! ๋์ถ์ ๋ฐ๊ฒฌ ํ ๊ฒ ๊ฐ์ต๋๋ค.
z : 1255> ์ฌ์ ํ ์ ์
z : 18870> ๋ฏธ์น ํผ๋ถ
์ค๋ฅ๋ ๊ทํ์ ํธ์ผ ์ ์์ต๋๋ค.
์ผ๋ฐ์ ์ธ ์ค์ : ์คํจ ๋ชจ๋ํ์ด์ด๊ฐ ์ ๋๋ก ์ ์ฉ๋์ง ์์์ต๋๋ค.
์ค๋ฅ 1 : ๋๋ฌด ๋ง์ ๊ณจ๊ฒฉ์ผ๋ก ์ ์ด๋๋ ์ ์
์ค๋ฅ 2 : ๊ฐ์ค์น๊ฐ์๋ (๋๋ ๊ฐ์ค์น๊ฐ ๋งค์ฐ ์์) ์ ์ .
SkinnedMesh๊ฐ ์์ (0,0,0)์ ๊ฐ๊น์์ง๋ฉด ์ด๋ฌํ ์ค๋ฅ๋ฅผ ์ ์ ์์ต๋๋ค.
ํ์ง๋ง ๋ฉ๋ฆฌ ์ด๋ํ๋ฉด ๋ชจ๋ฐ์ผ ์ฅ์น์ ์ ํ์ฑ์ ํํ ๊ฒ์
๋๋ค.
๋ฐ๋ผ์ ๊ฐ์ฅ ๋จผ์ ํด์ผ ํ ์ผ์ ์คํจ ๋ชจ๋ํ์ด์ด๋ฅผ ๋ค์ ๋์์ธํ๋ ๊ฒ์
๋๋ค (์ด๋ฒ์๋ ์ ์ ํ๊ฒ).
@RemusMar ํ์ด์ง์ ์์ค๋ฅผ ๋ณด์
จ์ต๋๊น?
๋ด๊ฐ ๊ณต๊ฐ ํ ์์ ๋ ThreeJS ์์ค์์ ๋ฐ๋ก ๋์์ต๋๋ค.
๋ด ์ค๋ช ์์ ์ ์ธ๊ธ๋์์ต๋๋ค.)
๋๋ ์ด๊ฒ์ ๊ฒ์ํ๊ธฐ ์ ์ ๋ง์ ํ ์คํธ๋ฅผ ์คํํ์ต๋๋ค ... ๋ด ์ ๋๋ฉ์ด์ ๋ด๋ณด๋ด๊ธฐ์์ ๋จ์๋ฅผ ์ฐพ๊ณ ์์์ง๋ง ๋ชจ๋ ์ข ๋ฅ์ ํ์ (GLTF, FBX, Collada, JSON, ...)์์ ๋ฒ๊ทธ๊ฐ ๋ฐ์ํ๋ ๊ฒ์ ๋ฐ๊ฒฌํ์ต๋๋ค.
๋๋ ๋ฌธ์ ๋ฅผ ๋๋ฌ๋ด ๊ธฐ ์ํด ๊นจ๋ํ ์์ค๋ก ๋ช ํํ ์๋ฅผ ๋ง๋ค์์ต๋๋ค. ์ค๋งํธ ํฐ์์ ํ์ธํ๋ ๊ฒ์ ๋งค์ฐ ์ฝ์ต๋๋ค.
๋ด๊ฐ ๊ณต๊ฐ ํ ์์ ๋ ThreeJS ์์ค์์ ๋ฐ๋ก ๋์์ต๋๋ค.
๊ทธ๋์ ๋ญ?
ThreeJS์ ๋ชจ๋ skinnedmesh ์์ ์์ ์ด๋ฐ ์ผ์ด ๋ฐ์ํ ๋ ์ค๋ฅ๊ฐ ์ด๋ป๊ฒ ๋ฐ์ํ ์ ์์ต๋๊น? :)
๋น์ ์ ๋งํ๋ค :
์ค๋ฅ๋ ๊ทํ์ ํธ์ผ ์ ์์ต๋๋ค.
์ผ๋ฐ์ ์ธ ์ค์ : ์คํจ ๋ชจ๋ํ์ด์ด๊ฐ ์ ๋๋ก ์ ์ฉ๋์ง ์์์ต๋๋ค.
์ค๋ฅ 1 : ๋๋ฌด ๋ง์ ๊ณจ๊ฒฉ์ผ๋ก ์ ์ด๋๋ ์ ์
์ค๋ฅ 2 : ๊ฐ์ค์น๊ฐ์๋ (๋๋ ๊ฐ์ค์น๊ฐ ๋งค์ฐ ์์) ์ ์ .
FBX๋ ThreeJS์์ ์์ผ๋ฉฐ GLTF ๋๋ ๋ค๋ฅธ ํ์์ผ๋ก ์๋ ํ ์ ์์ต๋๋ค. ๋ฌธ์ ๋ ๋์ผํฉ๋๋ค.
var loader = new THREE.FBXLoader ();
loader.load ( 'https://threejs.org/examples/models/fbx/xsi_man_skinning.fbx', OnFBXLoaded);
@ Mugen87 ์ด ๋จ์๋ฅผ ์ฐพ์์ต๋๋ค. GPU ์คํจ ๋ฉ์ฌ๋ฅผ ๋ง๋ ์ฌ๋์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
ThreeJS์ ๋ชจ๋ skinnedmesh ์์ ์์ ์ด๋ฐ ์ผ์ด ๋ฐ์ํ ๋ ์ค๋ฅ๊ฐ ์ด๋ป๊ฒ ๋ ์ ์์ต๋๊น?
๋๋ "์ค๋ฅ๋ ๋น์ ํธ์ผ ์ ์์ต๋๋ค."๋ผ๊ณ ๋งํ์ต๋๋ค.
๊ฒฐ๋ก :
์คํจ ์์ ์๊ฐ ์ ๋๋ก ์ ์ฉ๋ ๊ฐ๋จํ SkinnedMesh ์ฌ์ฉ :
๋ฒ๊ทธ๋ฅผ ์ฌํ ํ ์ ์๋์ง ํ์ธํ์ญ์์ค.
๋ฏธ์ณค์ด? :)
์ด ๋ฒ๊ทธ๋ ๋ด ํธ์ด ๋ ์ ์์ต๋๋ค. ๋ชจ๋ธ (fbx, gltf, dae ๋ฑ)๊ณผ ์ฝ๋ ์์ค๋ ThreeJS์์ ๊ฐ์ ธ ์์ต๋๋ค.
@ Mugen87 ๊ฒ์๋ฌผ์ ์ฝ์ผ์ญ์์ค.
์คํจ ์์ ์๊ฐ ์ ๋๋ก ์ ์ฉ๋ ๊ฐ๋จํ SkinnedMesh ์ฌ์ฉ :
๋ฒ๊ทธ๋ฅผ ์ฌํ ํ ์ ์๋์ง ํ์ธํ์ญ์์ค.
์ง๊ธ ๊ฐ์ผ ํด์.
๊ฑด๋ฐฐ
ํ . ์ด๋ค ์ฌ๋์ธ์ง ์์? ์ด๊ฒ์ ๋ฐ์คํฌํ์์๋ ์ผ์ด๋๊ณ ์์ต๋๋ค :(
ThreeJS ์์ ๋ฉ์๋ ๊ฑฐ๋ (๋์ด 100m)์ด๋ฏ๋ก ๋งค์ฐ ๋ฉ๋ฆฌ ๋ฐฐ์นํ์ต๋๋ค. z = 10000000
๊ทธ๋ฆฌ๊ณ ๊ฐ์ ๋ฌธ์ ๋ฅผ๋ณด์ธ์.
http://cornflex.org/webgl/skinning-bug4.html
@ Mugen87์ ์ํด ๋ ธ์ถ ๋ ๊ฒ์ฒ๋ผ ์๋ ์คํ์ด์ค ๋ณธ ์์น ๋ฐ ๋ณธ ๋งคํธ๋ฆญ์ค ๊ณ์ฐ๊ณผ ๊ด๋ จ๋ ๊ฒ์ด
https://www.opengl.org/discussion_boards/archive/index.php/t-159613.html
https://www.opengl.org/discussion_boards/archive/index.php/t-159364.html
์ด์ ์ @mrdoob์ ์ค๋ช ํ๋ฏ์ด ์ด๋ฏธ ๋ฉ์๋ฅผ ์ถ์ํ๋ ค๊ณ ์๋ํ์ง๋ง ๋ฌธ์ ๋ ๋ ๋๋น ์ก์ต๋๋ค ... ์ฌ์ง์ด ๋ฐ์คํฌํฑ์์๋ 0,0,0์์ ๊ทธ๋ฆฌ ๋ฉ์ง ์์ ๋ฒ๊ทธ๊ฐ ๋ฐ์ํฉ๋๋ค.
๋ด ๊ฒ์ (ํ์ค์ ์ธ ์ค์ผ์ผ 1 : 1 ์ฌ์ฉ)์์ ๋ฒ๊ทธ๋ ์ด๋ฏธ z : 100์ ๋ํ๋ฉ๋๋ค.
์๋ชป ์ค๊ณ๋ ์คํจ ๋ฉ์๋ฅผ ๊ณ์ ์ฌ์ฉํฉ๋๋ค.
์ด์จ๋ ,์ด ์ฃผ์ ๋ฅผ ๋๋ด๊ธฐ ์ํด 1์์ 1,000,000 (๋ฐฑ๋ง !!!) ์ฌ๋ก ์ฐ๊ตฌ๊ฐ ์์ต๋๋ค.
http://necromanthus.com/Test/html5/Lara_1000000.html
์คํ
์ด์ง๋ฅผ ํด๋ฆญํ์ฌ Y = 0๊ณผ Y = 1000000 ์ฌ์ด๋ฅผ ์ ํํฉ๋๋ค.
์ค์์น๋ณ๋ก ์ฌ์ํ ์ ์ญ ์กฐ๋ช
๋ณ๊ฒฝ์ด ๊ฐ๋ฅํฉ๋๋ค.
๋ฐ๋ผ์ ์คํค๋ ๋ ๋ฉ์๊ฐ ์ ์ ํ๊ฒ ๋์์ธ ๋์๋ค๋ฉด ๊ทธ ๊ฒฐ๊ณผ๋ ์๋ฒฝ์ ๊ฐ๊น์ต๋๋ค.
๊ฑด๋ฐฐ
์ด๋ฒ ๋ฌ ์ถ์ ์ดํ์ ์ดํด ๋ณด๊ฒ ์ต๋๋ค.
@mrdoob ๊ฐ์ฌํฉ๋๋ค.
@RemusMar ๋น์ ์ ์ฌ๊ธฐ์์ ๋งํ ๊ฒ์ ๊ณ์ ๋ฌด์ํฉ๋๋ค. ์ ์ฒด ์ค๋ ๋๋ฅผ ๋ค์ ์ฝ์ผ์ญ์์ค :)
๋๋ ๋น์ ์๊ฒ ์ค์ ์ ์ธ ์๋ฅผ ๋ค์์ง๋ง ๋น์ ์ ์ฌ์ ํ โโ์ดํดํ์ง ๋ชปํฉ๋๋ค.
http://necromanthus.com/Test/html5/Lara_1000000.html
๊ทธ๋ฆฌ๊ณ ๋น์ ์ ๋์ ๊ดํ ์ ๋ํด ๊ณ์ ์ด์ผ๊ธฐ
๋ค์ ์ฌํญ์ ์ ์ํ์ญ์์ค.
๋จ ์ ๋ฐ๋ ๋ถ๋ ์์์ ์๋ฆฟ์๋ 7์
๋๋ค.
1234,567 ๋ฐ 123456.7์ ํฌํจํฉ๋๋ค.
๋๋ถ๋ถ์ ๊ฐ์ค์น ๋งต์๋ ์์์ 4 ์๋ฆฌ๊ฐ ์์ง๋ง ํ๋๋ผ๋ ๊ด์ฐฎ์ ๊ฒฐ๊ณผ๋ฅผ ์ ๊ณตํฉ๋๋ค.
์ด๋ฌํ ์ด์ ๋ก ๋ชจ๋ 3D ์์ง์ ์ธ๊ณ ํฌ๊ธฐ์ ๋ํด ์ต๋ ๊ฐ 10,000์ ๊ถ์ฅํ์ต๋๋ค.
0000.001์์ 9999.999๊น์ง
์ฐ๋ฆฌ ๋ชจ๋๋ "๋ฌดํ"๋๋ ๊ฑฐ๋ํ 3D ์ธ๊ณ๋ฅผ ์ํ์ง๋ง ๊ทธ๊ฒ์ ๋ถ๊ฐ๋ฅํฉ๋๋ค.
๋น์ ์ดํ๋ ์ผ์ ๋ง์ ๊ด์ ์์ ์์ ํ ์๋ชป๋์์ต๋๋ค.
๊ฒ์ ๋์์ธ, ๊ณต์ฐ, ์ ๋๋ฉ์ด์
๋ฐ ์ถฉ๋.
์ด์ ์ฃผ์ ์ฌ์ง์ ์ป์ผ ์
จ๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
๋ฟก ๋นต๋จ
๋๋ ๋น์ ์ด ๋งํ ๊ฒ์ ์์ฃผ ์ ์ดํดํ์ง๋ง ๋ถํํ๋ ๋น์ ์ ๋ชจ๋ธ์๋ ๊ฐ์ ๋ฌธ์ ๊ฐ ์์ต๋๋ค.
http://cornflex.org/webgl/skin-bug2.mp4
์ถ์ฒ:
http://cornflex.org/webgl/skinning-bug5.html
๊ทธ๋ฆฌ๊ณ z = 60000๋ณด๋ค ๋์ ์์น๋ฅผ ์ฃผ๋ฉด ์ ์ ๋ ๋ ๋น ์ง๊ณ ... 100000๊น์ง ์์ ํ ๋ณด์ด์ง ์์ต๋๋ค.
์ฐ๋ฆฌ ๋ชจ๋๋ "๋ฌดํ"๋๋ ๊ฑฐ๋ํ 3D ์ธ๊ณ๋ฅผ ์ํ์ง๋ง ๊ทธ๊ฒ์ ๋ถ๊ฐ๋ฅํฉ๋๋ค.
LOL, ๋๋ ๋ฌดํํ ๊ฑฐ๋ํ ์ธ๊ณ๋ฅผ ์ํ์ง ์๋๋ค ... ๋๋ ThreeJS๋ก ์ ์ ์ฌ๋ฌ ๋ฒํ๋ ๊ฒ์ฒ๋ผ ๋ฌ๋ ๊ฒ์์ ๋ง๋ค๊ณ ์ถ์ง๋ง ์ด๋ฒ์๋ ์๋ฐํ๋ก skinnedmesh๊ฐ ํ์ํฉ๋๋ค.
๋ด ์ฅ๋ฉด : http://cornflex.org/webgl/skin-bug.mp4
์ ๋ฏธํฐ๋ฅผ ๋์ด๊ฐ๋ ์๋ฐํ๋ฅผ ์ ๋๋ฉ์ด์ ํ ์ ์๋ค๋ฉด, ์์ ์ ๋ฌด์์ ๋๊น ?? (ํ์ค์ ์ธ ๊ท๋ชจ 1m = 1 threejs ๋จ์, ๋ฒ๊ทธ๋ ์ด๋ฏธ 100์์ ๋ํ๋ฉ๋๋ค).
BTW, ๋น์ ์ ๋ชจ๋ธ์ ํค๊ฐ 150m์
๋๋ค. ์ด๊ฒ์ ์ค์ ์ ์ธ ์ค์ผ์ผ์ด ์๋๋๋ค.
ํธ์งํ๋ค:
์ฌ๊ธฐ์ ๋ชจ๋ธ์ ๋ฐฐ์จ (0.01, 0.01, 0.01)์ด์๋ ๋์ผํ ์ฅ๋ฉด์ ์ฌ์ฉํ์ฌ ์ค์ ํฌ๊ธฐ (์ฝ 1.5m)๋ฅผ ์ป์ต๋๋ค. ๋ณด์๋ค์ํผ ๋ชจ๋ฐ์ผ์์ ์ด๋ฏธ z = 300์์ ๋ฒ๊ทธ๊ฐ ๋ฐ์ํ์ต๋๋ค.
http://cornflex.org/webgl/skin-bug3.mp4
๋น์ ์ดํ๋ ์ผ์ ๋ง์ ๊ด์ ์์ ์์ ํ ์๋ชป๋์์ต๋๋ค.
๊ฒ์ ๋์์ธ, ๊ณต์ฐ, ์ ๋๋ฉ์ด์ ๋ฐ ์ถฉ๋.
LOL LOL ... ๊ฒ์ ์ ์์ ๋ํ ์น ์ฌ์ดํธ์ ๋ธ๋ก๊ทธ (http://quentinlengele.com, http://cornflex.org, http://www.ddrsa.com, http://br9732.com)๋ฅผ ๋ฐฉ๋ฌธํ๋ ๊ฒ์ด ์ข์ต๋๋ค. )
ํธ์ง : iOS, ๋น ํ๋ฉด (http://necromanthus.com/Test/html5/Lara_1000000.html)์์ ์ฅ๋ฉด์ด ๋ณด์ด์ง ์์ต๋๋ค.
์คํค๋์ ์ธ๊ณ ๊ณต๊ฐ ๋๋ ๋ก์ปฌ ๊ณต๊ฐ์์ ์ํ๋๋ ๊ฒ์ฒ๋ผ ๋ณด์ด์ง๋ง ์ค์ฌ์์ ๋ฉ๋ฆฌ ์ด๋ํ๋ฉด ๋์ด๋ฉ๋๋ค. ์ด๊ฒ์ด 0,0,0์์ ๊ฝค ์ ์คํ๋๋ ์ด์ ์ ๋๋ค.
๋ณด์ :
vec3 transformed = vec3( position );
...
#ifdef USE_SKINNING
vec4 skinVertex = bindMatrix * vec4( transformed, 1.0 );
vec4 skinned = vec4( 0.0 );
skinned += boneMatX * skinVertex * skinWeight.x;
skinned += boneMatY * skinVertex * skinWeight.y;
skinned += boneMatZ * skinVertex * skinWeight.z;
skinned += boneMatW * skinVertex * skinWeight.w;
transformed = ( bindMatrixInverse * skinned ).xyz;
#endif
๋์๊ฒ ์ธ๊ณ ๊ณต๊ฐ์ฒ๋ผ ๋ณด์ด์ง ์์ต๋๊น? ์ผ๋ฐ ๋ฉ์์์ transformed
๋ position
์์ฑ, ์ฆ ๋ก์ปฌ ์ขํ๋ก ์ค์ ๋ฉ๋๋ค.
๊ทธ๋์ ๋ฌด์จ ์ผ์ด ์ผ์ด๋ ๋ js ์ธก์์ ์ผ์ด๋๊ณ bind์ bone ํ๋ ฌ์ด ๊ณ์ฐ๋ฉ๋๋ค. ๋ฐ์ธ๋ ๋งคํธ๋ฆญ์ค๋ ๋ง์ ์คํธ๋ ์น๋ฅผ ์ํํ๊ณ , ๋ณธ ๋งคํธ๋ฆญ์ค๋ ๋ฐ์ธ๋ ๋งคํธ๋ฆญ์ค์์ ๊ทธ๋ค์ง ๋ง์ ์คํธ๋ ์น๊ฐ ํ์ํ์ง ์์ ๋ค๋ฅธ ์ขํ์์ ์๋ํ๋๋ก ๋ฅํฐ ๋ง ๋ ์ ์์ต๋๋ค.
(ํธ์ง : nvm, ๋๋ ์ด๊ฒ์ด ์๋ชป๋์๋ค๊ณ ์๊ฐํฉ๋๋ค)
@makc ๋ถํํ๋ ์คํค๋ ์ ฐ์ด๋์ ๋ณต์ฌ / ๋ถ์ฌ ๋ฃ๊ธฐ์์ ๊ณ์ฐ์ด ๋ก์ปฌ ๋๋ ์๋ ๊ณต๊ฐ ์ขํ์์ ์ํ๋์๋์ง ์ ์์๋ ์ถฉ๋ถํ ๋ฐ์ดํฐ๊ฐ ์์ต๋๋ค.
๋ด๊ฐ ๋งํ๋ฏ์ด ๋ผ ํ๋ ฌ ๊ณ์ฐ์ ๋ถ๋ช ํ ์๋ชป๋ ๊ฒ์ด ์๊ฑฐ๋ ์ด๋ฌํ ํ๋ ฌ ๊ณ์ฐ์ ์์๊ฐ ์ฌ๋ฐ๋ฅด์ง ์์ ์ ์์ต๋๋ค. OpenGL ํฌ๋ผ์์ ๋ณผ ์ ์๊ณ @ Mugen87์ด ์ธ๊ธํ๋ฏ์ด, ์ด๊ฒ์ ์ ์ด๋ ๋์๊ฒ๋ ๊ฐ์ฅ ๋ฐ์ฆ์ ์ธ ๋จ์์ ๋๋ค.
์ง ํฐ๋ง์ ํ๋กํธ์๋ง ์์ฐ์ค๋ฝ๊ณ , ์ซ์๊ฐ ๋์์๋ก ๋ณ์์ ์ ๋ฐ๋๊ฐ ๋จ์ด ์ง๋ฏ๋ก 1.0์ ๊ฐ๊น์ธ์๋ก ์ ๋ฐ๋๊ฐ ๊ฐ์ฅ ์ข์ต๋๋ค. ์ด์ ์ด๊ฒ์ ์ค์ ๋ก ๋ฌธ์ ๊ฐ๋์ง๋ ์์ง๋ง ์์ฒญ๋ ์์ ํ๋ ฌ ๊ณ์ฐ์ ๋ง์ด ์ํํ๋ฉด ์ ๋ฐ๋ ์ ํ (์ผ๋ช ์ง ํฐ๋ง)๊ฐ ๋ง์ด ๋ฐ์ํ ๊ฒ์์ ์๋ฏธํฉ๋๋ค. ๊ทธ๋์ ๋น์ ์ ํฉ๋ฆฌ์ ์ธ ์ซ์๋ก ์์ ์ ์ค์ฌ์ผ๋ก ๋ชจ๋ ์ํ์ ํ ๋ค์ ๋ฒ์ญํด์ผํฉ๋๋ค.
๋ค์ ์ค๋ช
ํ๋ฏ์ด ๊ฐ์ฒด์ ํฌ๊ธฐ๊ฐ ๋ฒ๊ทธ์ ์ํฅ์์ค๋๋ค.
ThreeJS ์์ค๋ฅผ ์ฌ์ฉํ ์์ ๋ z = 100000์์๋ง ๋ฒ๊ทธ๋ฅผ ๋ํ๋ด์ง ๋ง ๋ฉ์์ ํฌ๊ธฐ (ThreeJS ์์ค์์๋ ์ ๊ณต๋จ)๊ฐ ๊ฑฐ๋ํ๊ธฐ ๋๋ฌธ์
๋๋ค. ๋ฌ๋ฆฌ๋ ์๋
์ ํค๋ 150m์
๋๋ค.
๊ฒ์์ ํ ๋ ๋น์ฐํ ๊ทธ๋ฐ ์ข ๋ฅ์ ์ค์ผ์ผ์ ์ฌ์ฉํ์ง ์์ต๋๋ค. ๋น์ ์ ํญ์ 1m = 1unit์ผ๋ก ๋น์ ์ ์ธ๊ณ๋ฅผ ์งํค๋ ค๊ณ ๋ ธ๋ ฅํฉ๋๋ค. ์ด๊ฒ์ ์ข์ ๋ฌผ๋ฆฌํ๊ณผ ํ๋์ ์ป๊ธฐ ์ํด ํ์์ ์ ๋๋ค.
์ฌ๊ธฐ์ ๋ฌธ์ ๋ ์ค์ ํฌ๊ธฐ์ SkinnedMesh๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ์ ๋๋ค. ๋ฒ๊ทธ๋ ์ด๋ฏธ z = 300์ ๋ํ๋ฉ๋๋ค.
์ด๋ค ์์ง์์๋ SkinnedMesh๋ฅผ x : 30000, y : 60000, z : 140000000์ ๋์ ์ ์์ผ๋ฉฐ ๋ผ๋์ ์คํค๋์ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ์ง ํฐ๋ง์ด ์์ต๋๋ค.
ํ์คํ ์ ๋ ์ฐ๋ฆฌ๊ฐ ์ฌ๊ธฐ์ ์๋ฐ ์คํฌ๋ฆฝํธ ์ฝ์ด๋ฅผ ์์ ํ๊ณ ์๋ค๋ ๊ฒ์ ์ ์ดํดํฉ๋๋ค.
์ฌ๊ธฐ์์ "์ฐ๋ฆฌ ๋ชจ๋๋ ๋ฌดํํ ์ธ๊ณ๋ฅผ ์ํ์ง๋ง ๋ถ๊ฐ๋ฅํ"์ฒํ๋ ํธ๋กค๋ค์ ํ๊ต๋ก ๋์๊ฐ์ ํ๋ ฌ ๋ณํ์ ๋ฐฐ์์ผํฉ๋๋ค. ๋๋ ์คํ ์๋ ๊ฒ์์ ๋ ์๋ณด๊ณ ์์ ์ ์๋ฐํ๊ฐ ์ฌ ๋ฃจํธ 0,0,0์์ ๋ฉ๋ฆฌ ๋จ์ด์ง "skinnedmeshed"๊ฐ ๋ ์์๋ ๋ฐฉ๋ฒ์ ์ค์ค๋ก ๋ฌผ์ด๋ณด์ญ์์ค.
์ด ๋ฒ๊ทธ๋ ์ฌ๋ฐ์ต๋๋ค. ์ฌ๊ธฐ์์ ๋ฐ์คํฌํ์์ ์ฌํ ํ ์ ์์์ง๋ง 60K๋ก๋ ์ ๋ฐ๋๊ฐ ๋ถ์กฑํ์ต๋๋ค.
์ข์, ๊ทธ๋์ z = 1e8์์, ๋ค์์ ํ์ฌ ์ ฐ์ด๋์์๋ ๊ฒ์ ๋๋ค.
์ ฐ์ด๋๋ฅผ ์ด๋ ๊ฒ ๋ณ๊ฒฝํ๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค (์์์ ํธ์ง ํ ๋ด ๋จธ๋ฆฌ ์ ํ ์คํธ์ ์ฝ๊ฐ ๋ณํ).
#ifdef USE_SKINNING
vec4 skinVertex = bindMatrix * vec4( transformed, 1.0 );
vec4 skinned = vec4( 0.0 );
skinned += ( bindMatrixInverse * boneMatX ) * skinVertex * skinWeight.x;
skinned += ( bindMatrixInverse * boneMatY ) * skinVertex * skinWeight.y;
skinned += ( bindMatrixInverse * boneMatZ ) * skinVertex * skinWeight.z;
skinned += ( bindMatrixInverse * boneMatW ) * skinVertex * skinWeight.w;
transformed = skinned.xyz;
#endif
์ฌ์ ํ ํ๋ค๋ฆฌ์ง ๋ง ํจ์ฌ ์ข์ ๋ณด์ ๋๋ค. :) ์ด์ ์ด ๋ฌธ์ ์ ๋งฅ๋ฝ์์ ์ด๊ฒ์ด ๋ฌด์์ ์๋ฏธํฉ๋๊น?
์ฒซ์งธ, ์์ด๋์์ด ํดํน์ ๋ณต์ฌํ์ฌ ๋ถ์ฌ ๋ฃ์ ์๋ ์์ต๋๋ค. ๋ด ๋ง์, ๋น์ ์ ํ ์ ์์ง๋ง ๊ทธ๊ฒ์ 1 ํ๋ ฌ ๊ณฑ์ ์ 4๋ก ๋์ฒดํฉ๋๋ค. ๋์ ๋ด๊ฐ ์ ์ํ๋ ๊ฒ์ a) js ์ธก์์ ๊ฒฐํฉ ํ๋ ฌ์ ์ญ๊ณผ ๋ผ ํ๋ ฌ์ ๋ณํฉํ๊ณ ๋จ์ผ ์ ๋ํผ์ผ๋ก ์ ๋ฌํ๊ฑฐ๋ b) ์ด๊ฒ๋ง์ ์ํด ๋ค๋ฅธ ์ ๋ํผ์ ๋ง๋๋ ๊ฒ์ ๋๋ค. ์ ฐ์ด๋ ์กฐ๊ฐ. ๊ทธ๋ฐ ๋ค์์ด ๋ฌธ์ ๋ฅผ (๋ค์) ํด๊ฒฐํ๊ณ ์ ฐ์ด๋์ ํ๋ ฌ ๊ณฑ์ ์๋ฅผ 1 ์ฉ ์ค์ ๋๋ค.
์, ๊ทธ๋ฆฌ๊ณ
์ฌ๊ธฐ ํธ๋กค๋ค์ "์ฐ๋ฆฌ ๋ชจ๋๋ ๋ฌดํํ ์ธ๊ณ๋ฅผ ์ํ์ง๋ง ๋ถ๊ฐ๋ฅํ"์ฒํฉ๋๋ค.
๊ทธ๋ค์ด ๋งํ๋ ค๋ ๊ฒ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊ณ ์น์ง ์๊ณ ๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ค๋ ๊ฒ์ ๋๋ค. ํ์ํ์ง๋ ์์ง๋ง ํ ์ ์์ต๋๋ค.
@makc ์๊ฐ์ ๋ด ์ฃผ์
์ ๋๋จํ ๊ฐ์ฌํฉ๋๋ค.
๋ถํํ๋ ๋๋ฌด ๋ฆ์์ต๋๋ค. ๊ธ์์ผ ๋ฐฐ๋ฌํด์ผํฉ๋๋ค. ํด๊ฒฐ ๋ฐฉ๋ฒ์ผ๋ก PNG ์ํ์ค๋ฅผ ์ฌ์ฉํ์ต๋๋ค.
์ด๊ฒ์ ์ถฉ๋ถํ ๋๋ฒ๊น
ํ๊ณ ์ถ๋ค๋ฉด. ์ฌ์ค์ ์ธ ๋ฉ์ฌ ํฌ๊ธฐ๋ฅผ ์ฌ์ฉํด ๋ณผ ์ ์์ต๋๊น?
๋ค์ ๋งํ์ง๋ง,์ด ๋ผ๋ผ ๋ชจ๋ธ๋ ์ ๊ฐ ์ ๊ธฐ์ตํ๋ค๋ฉด 60m ์ ๋์ ํค์
๋๋ค.
๋น์ฐํ ๋น์ ์ ํจ์น๊ฐ ํ์ค์ ์ธ ๊ท๋ชจ๋ก๋ ์๋ํ๋์ง ๊ถ๊ธํฉ๋๋ค. :)
์ ๊ทธ๋ฆฌ๊ณ ... iOS์์ ํ
์คํธํ๊ณ ์์ต๋๊น?
์ด ์ค๋ ๋์์ ์ค๋ช
ํ๋ฏ์ด ์ด๋ ์ฃผ๋ก iOS ์ฅ์น (6, 8)์์ ๋ฐ์ํฉ๋๋ค.
๋ฐ์คํฌํฑ์์๋ ๋งค์ฐ ํฐ ๊ฐ๋ง์ด ๋ฌธ์ ๋ฅผ ๊ฐ์ ธ์ต๋๋ค.
๋ค์ ํ ๋ฒ ๊ฐ์ฌํฉ๋๋ค
@OrtOfOn ์ฝ๋ ์๋จ์ ๋ค์์ ์ถ๊ฐํ์ฌ @makc ํจ์น๋ฅผ ์๋ ํ ์ ์์ต๋๋ค.
THREE.ShaderChunk.skinning_vertex = `
#ifdef USE_SKINNING
vec4 skinVertex = bindMatrix * vec4( transformed, 1.0 );
vec4 skinned = vec4( 0.0 );
skinned += ( bindMatrixInverse * boneMatX ) * skinVertex * skinWeight.x;
skinned += ( bindMatrixInverse * boneMatY ) * skinVertex * skinWeight.y;
skinned += ( bindMatrixInverse * boneMatZ ) * skinVertex * skinWeight.z;
skinned += ( bindMatrixInverse * boneMatW ) * skinVertex * skinWeight.w;
transformed = skinned.xyz;
#endif
`;
THREE.WebGLShader : ์ ฐ์ด๋๋ฅผ ์ปดํ์ผ ํ ์ ์์ต๋๋ค. : /
์ค ์ด๋ฐ. ์๋ชป๋ ๋ฐ์ดํ์ ํ ์ค ํ์์ผ๋ก ๋๋ฌ์ต๋๋ค. ์ด๋ป๊ฒ ๋ณต์ฌ-๋ถ์ฌ ๋ฃ๊ธฐ๋ฅผํ๋์?
๋ํ ํธ๊ธฐ์ฌ์ ์ถฉ์กฑ์ํค๋์ด ์๋ฑํ ์ด๋ฏธ์ง๋ฅผ๋ณด๊ธฐ ์ํด ๊ทธ๋ ๊ฒํ์ต๋๋ค. ๋๋ ๋ค๋ฅธ ๋๊ตฐ๊ฐ๊ฐ ์ฌ๊ธฐ์์ ๊ฐ์ ธ๊ฐ ๊ฒ์ด๋ผ๊ณ ๋ฏฟ์ต๋๋ค. :)
@makc CTRL + C / CTRL + V ... ๋ฐ๋ก ์ฌ๊ธฐ์์ ... : /
๋ถํํ๋ ๋ฒ๊ทธ๋ ์ด์ ๋ณด๋ค ๋ ๊ฐํ์ง ๋ง ์ฌ์ ํ ์กด์ฌํฉ๋๋ค.
iOS์์ ํ ์คํธ ๋จ (ํจ์น ์ ์ฉ๋จ) :
์ค์ผ์ผ 1.0์ ๋ฉ์ (์ ํํ 20m ๋์ด์ ์๋ฐํ), ์์น z = 10000
http://cornflex.org/webgl/skin-patch1.mp4
์ค์ผ์ผ 0.1 (2m ๋์ด์ ์๋ฐํ), ์์น z = 3000์ ๋ฉ์
http://cornflex.org/webgl/skin-patch2.mp4
@mrdoob ์ฌํ ํด ๋ณด๊ฒ ์ต๋๋ค. :) ํ ์ค๋ก ๋์์ต๋๋ค. ๋๋ ๋น์ ์ ๋ต์ฅ์ด ํ์ด ๋์ค๋ ๊ฒ์ ๋ณด์์ ๋ ํ์ด์ง์ ๊ธ์ ์ฐ๊ณ ์์๊ณ ์ ์์ ์ผ๋ก ๋ํ๋์ง ์์์ต๋๋ค. ์ฝ์ํฉ๋๋ค : p ...์ด ๋ณด๋์ค ํฌ์ธํธ๋ฅผ ์ป์ ๊ฒ์ ๋๋ค.
ํธ์ง : BTW ๋น์ ์ โโ๋น์ ์ ๊ฒ์๋ฌผ์ ํธ์ง ํ์ต๋๊น? :)
์์ฌ ํจ๊ณผ๋ ์คํค๋๊ณผ ๊ด๋ จ์ด ์์ผ๋ฉฐ ์ค์ ๋ก ๋ชจ๋ ๊ฒ์ ์ํฅ์ ๋ฏธ์น ์ ์๋ค๊ณ ์๊ฐํ์ง๋ง ์ ๋๋ฉ์ด์ ์ด ์๊ธฐ ๋๋ฌธ์ ๋์น ์ฑ์ง ๋ชปํฉ๋๋ค.
@OrtOfOn ๋น์ ์ ์ฅ์์์ ๋๋ ๋น์ ์ ์ ์ฒด ์ฅ๋ฉด (์นด๋ฉ๋ผ๋ก)์ ์ฌ๋ถ์ Object3D๋ก ๊ฐ์ธ๊ณ ์ด ๊ฐ์ฒด ์ขํ๋ฅผ -1 * ์๋ฐํ ์ขํ๋ก ์ค์ ํ๋ ค๊ณ ๋ ธ๋ ฅํ ๊ฒ์ ๋๋ค. ์ด๊ฒ์ 0,0,0 ์ธ๊ณ ์ขํ๋ฅผ ์์ํ ์ ์งํฉ๋๋ค.
@markc ๋๋ ์ ๋ง๋ก ์ด๋ ๊ฒ ์์ด๋ ๊ฒ์ ์ข์ํ์ง ์์ต๋๋ค. ๊ฒ์ ํ๋ ์ด์ ์ฅ๋ฉด์ ๊ทธ๋ ๊ฒ ๊ณ ๋ฌธ์ ๋นํ๋๋ก ์ค๊ณ๋์ง ์์์ผ๋ฉฐ ๋ชจ๋ฐ์ผ ํผ์คํธ ๊ฒ์์ผ๋ก์ perfs๋ ๋ฌผ๋ก ์ต์ ์ด์ด์ผํฉ๋๋ค.
๋ํ ... ๋ด ๊ฒฝ์ฐ๋ ์๋์ง๋ง SkinnedMesh์ ์ฌ๋ฌ ์ ๋ค๊ณผ ํจ๊ป ์ด๊ฒ์ ์์ํด๋ณด์ญ์์ค.
๋ง๊ฐ์ผ์ด ์ง๋ฌ๊ณ SkinnedMesh๋ฅผ ์คํ๋ผ์ดํธ ์ํธ ์ ๋๋ฉ์ด์ ์ผ๋ก ๋์ฒดํ๊ธฐ ๋๋ฌธ์ ์ ํ์ ์ฌ์ง๊ฐ ์์์ต๋๋ค (ํด๋ผ์ด์ธํธ๋ ๊ด์ฐฎ์ต๋๋ค). ๊ทธ๋ ์ง ์์ผ๋ฉด ๋๋ ์ด๋ฐ ์ผ์ ๊ฒช๋ ๊ฒ ์ธ์๋ํ์ง ์์๋ค. ๊ฑฐ์ ๋ชจ๋ ์น ํ๋ก์ ํธ์์ ThreeJS๋ฅผ ์ฌ์ฉํ๊ณ ์์ผ๋ฉฐ ๋งค์ฐ ๋ง์กฑํฉ๋๋ค.
์ฐ๋ฆฌ๋ "๋ฌดํ ์ธ๊ณ"๋ฅผ ์ํ์ง ์์ง๋ง ์ ๋ช ํ ์์ง ์์์ฒ๋ผ ์๋ ๊ณต๊ฐ ์ขํ์์ ์ด๋ฌํ ๋ฉ์ง SkinnedMesh ๋ฐ ์ ๋๋ฉ์ด์ ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค. :)
์ ๋ ์ฝ๊ฐ ์ค๋ง ์ค๋ฝ์ต๋๋ค. ํฌ๋ก์ค ํ์ด๋ ๊ธฐ๋ฅ์ ๊ธฐ๋ฐ์ผ๋ก ๋งค์ฐ ๋ฉ์ง Animator ์คํฌ๋ฆฝํธ๋ฅผ ๋ง๋ค๊ณ mecanim์์ ์๊ฐ์ ์ป์ ๊ธฐ ๋๋ฌธ์ ... ๋ค์ ํ๋ก์ ํธ๋ฅผ ์ํด ํ์คํ : /
@markc ๋๋ ์ ๋ง๋ก ์ด๋ ๊ฒ ์์ด๋ ๊ฒ์ ์ข์ํ์ง ์์ต๋๋ค.
๋๋ ๊ทธ๊ฒ์ด ์ ํ ์์์๋ผ๊ณ ์๊ฐํ์ง ์์ต๋๋ค. ์ด๊ฒ์ด ๋ชจ๋ ๊ณต๊ฐ ์๋ฎฌ๋ ์ด์ ์ด ์๋ํ๋ ๋ฐฉ์์ ๋๋ค. ์ค์ ๋ก ์ค์๊ฐ 3D ๋ ๋๋ง์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ์ฒด ์ฅ๋ฉด์ ์์ํ๋ฏ๋ก ์ค์์ด ์นด๋ฉ๋ผ๊ฐ์๋ ๊ณณ์ ๋๋ค.
@mrdoob ์, ์นด๋ฉ๋ผ๊ฐ ์กด์ฌํ์ง ์๋๋ค๋ ๊ฒ์ ์๊ณ ์์ต๋๋ค. ํ๋ ฌ์ ํ :) (์ ๋ ๋ค์ดํฐ๋ธ WebGL / OpenGL ๊ฐ๋ฐ์ ์ง์ ์ํํฉ๋๋ค).
์ด์จ๋ , ๋ชจ๋ ์ฌ์ ๊ฒ์ ์ค๋ธ์ ํธ์ ๋ฃ๋ ๊ฒ์ ๋์๊ฒ ์ฝ๊ฐ ๋ฐ๋ฐ ์ธ ๊ฒ์ฒ๋ผ ๋ณด์ ๋๋ค. ํนํ ์คํจ ๋ ์ ๋๋ฉ์ด์ ์ด ์๋ํ๋๋กํฉ๋๋ค.
@OrtOfOn ์ค์ ๋ก ์ฅ๋ฉด ์์ฒด๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด lara ์์ ์์ ๋ค์์ ์ํํ์ญ์์ค.
scene.add(camera);
scene.position.z = -60000;
๊ทธ๋ฆฌ๊ณ ๊ด์ฐฎ์ต๋๋ค (ํธ์ง :ํ์ง๋ง์ด ์์ ์ ํ ๋ ์กฐ๋ช ์ ๋ฌธ์ ๊ฐ ์์ต๋๋ค .... @mrdoob ?)
@makc ํจ์น๋ฅผ ์ ์
๋๋ ์ ํ ๋น๊ด์ ์ธ ์ฌ๋์ด๋๊ณ ์ถ์ง ์์ง๋ง ์ด๋ฐ ์ข ๋ฅ์ ์กฐ์์ํจ์ผ๋ก์จ ์กฐ๋ช ์ด ์ ์ผํ ๋ฌธ์ ๊ฐ ์๋๋ผ๋ ์ฌ์ค์ด ์์ต๋๋ค. ์ด๊ฒ์ด ๊ฒฐ๊ณผ์ ๋ถํ์ค์ฑ๊ณผ ํ์ดํ ๋ผ์ธ์ ๋ค๋ฅธ ๋ถ๋ถ์ ๋ํ ๊ฒฐ๊ณผ ๋๋ฌธ์ ์ด๋ฌํ ํธ๋ฆญ๊ณผ ์นํธ๋ผ๊ณ ๋ถ๋ฅด๋ ์ด์ ์ ๋๋ค.
๋ถํํ๋ ๊ฒ์์ ๋ง๋๋ ์ฌ๋๋ค์ ๋ฌผ๋ฆฌํ, ๋ ์ด ์บ์คํฐ, ํํฐํด ๋ฑ์ ๊ฐ์ง๊ณ ์์ต๋๋ค. ์ฌ์ค์ ์ธ ์ค์ผ์ผ๋ก ์ธ๊ณ ๊ณต๊ฐ์ ์๋๋ก ์ค๊ณ๋๊ณ ์ค๊ณ๋์ด์ผํ๋ ๋ง์ ๊ฒ๋ค์ด ์์ต๋๋ค.
๋ํ ์ฌ์ ์ผ๋ถ ์์น์ ์จ์ด ์๊ฑฐ๋ ์คํฐ๋๋ ์ ๊ณผ ๊ฐ์ด ํ๋ ์ด์์ SkinnedMesh์์ ์ด๋ฌํ ํจ์น๊ฐ ์๋ํ๋ ๋ชจ์ต์๋ณด๊ณ ์ถ์ต๋๋ค. ๊ทธ๋ ๋ค๋ฉด 0,0,0์์ ํ๋์ skinnedmesh ์๋ฐํ๋ก ์ ํ๋๋ ์ ์ ๋ฌด์์ ๋๊น?
๊ฐ๋ฅํ ํ ๋นจ๋ฆฌ ์์ค๋ฅผ ๊น์ด ํ๊ณ ๋ค ๊ฒ ์ง๋ง 2 ์ผ ์์ ๋ญ๊ฐ๋ฅผ ์ ๋ฌํด์ผํฉ๋๋ค ... ๊ทธ๋์ ๋ด ์คํ๋ผ์ดํธ ์ํธ ์ ๋๋ฉ์ด์ ์ ๋น๋ถ๊ฐ ๊ฝค ๊ด์ฐฎ์ต๋๋ค.
๊ทธ๋ ๋ค๋ฉด 0,0,0์์ ํ๋์ skinnedmesh ์๋ฐํ๋ก ์ ํ๋๋ ์ ์ ๋ฌด์์ ๋๊น?
์์ ์ ์คํจ์ 0,0,0์ ๋ ๋๋งํ๊ณ ๋ค๋ฅธ ์คํจ์ z = 60000์ ๋์์ ๋ ๋๋ง ํ ๊ฐ๋ฅ์ฑ์ด ๊ฑฐ์ ์๋ค๋ ๊ฒ์ ๋๋ค. 0,0,0 ์ฃผ๋ณ์ ๋ช ๊ฐ์ ์คํจ ๋ง ํ๋ฉด์ ํ์๋๋ฉฐ ๋ฒ๊ทธ๋ฅผ ์ ๋ฐํ ๋งํผ ๋ฉ์ง ์์ต๋๋ค.
@makc ๋ค์ ๋งํ์ง๋ง, ํจ์น๋ ๋ฐ์คํฌํฑ์์ ์ ํจํ์ง๋ง ์ค์ ํฌ๊ธฐ ์กฐ์ ๋ ๋ฉ์๋ก 0,0,0์์ ๋ช ๋ฏธํฐ ๋จ์ด์ง ๊ณณ์ ๋ฒ๊ทธ๊ฐ ์ด๋ฏธ ๋ํ๋๋ iOS ์ฅ์น์์ ์ฌ๋ก๋ฅผ ํ
์คํธํ๊ณ ์์ง ์์ต๋๋ค. ๋๋ ๊ทธ๊ฒ์ ๋ํด ์ถฉ๋ถํ ๋น๋์ค๋ฅผ ๋ณด์ฌ์ฃผ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ์ด๊ฒ์ z = 100์์๋ง ๋ฒ๊ทธ๋ฅผ ๋ํ๋
๋๋ค.
http://cornflex.org/webgl/skin-bug.mp4
๊ฒ์์์ ํญ์ 20m ๋์ด์ ์๋ฐํ๋ฅผ ์ฌ์ฉํ์ญ๋๊น? :)
์ด์ ์ ๋ง์ถ ์ซ์ (60000)๋ ๋ชจ๋ฐ์ผ์ด ์๋ ๋ฐ์คํฌํฑ (๋งค์ฐ ๊ฑฐ๋ํ ๋ผ๋ผ ๋๋ ๊ฑฐ๋ํ threejs fbx ์ํ)์์ ๋ฒ๊ทธ๋ฅผ ๋
ธ์ถํ๋ ๋ฐ๋ง ์ฌ์ฉ๋๊ธฐ ๋๋ฌธ์
๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ด ์๋ฐํ๋ ๋น์ฐํ ๊ทธ๋ ๊ฒ ๋ฉ๋ฆฌ ๊ฐ์ง ์์ต๋๋ค ...
๋๋ ์ด๊ฒ์ด iOS ๋ฌธ์ ์์ ํ์ธํ ๊ฒ์ ๋๋ค. ์ ์ด๋ 6S / 6S + ์ธ๋ ์ดํ๋ก iOS๋ floatVertexTextures์ ๋ฌธ์ ๊ฐ์์์ต๋๋ค. ์ฐ๋ฆฌ๊ฐ ์ฌ์ฉํ๊ณ ์๋ ์์ ์ฌํญ์ iOS์์ ํด๋น ๊ธฐ๋ฅ์ ๋นํ์ฑํํ๋ ๊ฒ์ ๋๋ค. ์ด๊ฒ์ ์ฐ๋ฆฌ๊ฐ ์ฌ์ฉํ ์์๋ ๋ผ๋๋ฅผ ์ ํํ์ง๋ง, ์ด์ฐจํผ ๋์ฐํ ์ ํ๊ธฐ๋ฅผ ์ง์ํ๊ธฐ ์ํด ๋ผ๋๋ฅผ ์ ํํด์ผํฉ๋๋ค.
iOS ๊ธฐ๊ธฐ๊ฐ @ Mugen87 ์์ ๊ฒ์ ํ ์ ํฉ์ฑ ํ ์คํธ์ ์คํจํ๋ฉด iOS์์ ๊ธฐ๋ณธ์ ์ผ๋ก floatVertexTextures ๋๋ ์ฌ์ง์ด floatFragmentTextures๋ฅผ ๋นํ์ฑํํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ์ง์ํ๋๋ก ๊ด๊ณ ํ๋ ๊ธฐ๋ฅ์ ์ฌ๋ฐ๋ฅด๊ฒ ๊ตฌํํ์ง ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
@ daniel-nth ๋ง์ด๋๋ ๊ฒ ๊ฐ์์. ๊ทธ๋ฌ๋ ... @OrtOfOn ์ z = 60K๊ฐ ๋ฐ์คํฌํ์์ ๋ฌธ์ ๋ฅผ ์ฌํํ๋ค๊ณ ๋งํ๊ณ ์์ต๋๋ค. ๋ฐ์คํฌํ์์ 60K์์๋ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. "์ฌํ"ํ๋ ๋ฐ๋ 1e8๋ง์ผ๋ก ์ถฉ๋ถํ์ต๋๋ค. ๋ฐ๋ผ์์ด ๋ฌธ์ ๋ ์ค์ ๋ก ์ต์ํ 3 ๊ฐ์ ๊ฐ๋ณ ๋ฌธ์ ์ผ ์ ์์ต๋๋ค.
์๋
ํ์ธ์ ์ฌ๋ฌ๋ถ,
๋จผ์ ์ด ๋ฒ๊ทธ๋ก ๋์์ ์ฃผ์
์ ๊ฐ์ฌํฉ๋๋ค. ๋๋ ์ฌ์ ํ ๊ทธ๊ฒ์ ํ๋ผ ์๊ฐ์ ์ฐพ์ง ๋ชปํ์ต๋๋ค :(
@ daniel-nth ๊ฐ์ฒด์ ํฌ๊ธฐ๊ฐ ๋ฒ๊ทธ์ ์ํฅ์์ค๋๋ค.
iOS์์์ด ๋งค์ฐ ํฐ "Lara"๊ฐ์ฒด (height = 120, scale = 1)๋ฅผ ์ฌ์ฉํ๋ฉด ์ค์ ๋ก z = 60000์ ๋ฒ๊ทธ๊ฐ ๋ํ๋ฉ๋๋ค. ๊ทธ๋ฌ๋ ์ฌ์ค์ ์ธ ํฌ๊ธฐ์ ๋ฉ์ (๋์ด = 1.8, ๋ฐฐ์จ = 1)๋ฅผ ์ฌ์ฉํ๋ฉด ์ด๋ฏธ z = 100์์๋ง ๋ํ๋ฉ๋๋ค.
skinnedmesh๊ฐ ํด์๋ก ๋ฒ๊ทธ๋ฅผ ๋ณด๋ ค๋ฉด ๋ฒ์ญํด์ผํฉ๋๋ค.
์ด ์ค๋ ๋์์ ์ด๋ฏธ ํ ์คํธํ๊ณ ๋ณด๊ณ ํ๋ฏ์ด iOS์์ floatTextures๋ฅผ ๋นํ์ฑํํ๋ฉด ์คํค๋์ด ์ ํ ๋ฐ์ํ์ง ์์ต๋๋ค.
๋๋ ๋ํ ๋ผ ํ๋ ฌ์ ์๋ชป๋ ํ๋ ฌ ๊ณฑ์ ๋๋ ๋ง๋ ๊ณฑ์ ์์๊ฐ ์์ฌ๋ฉ๋๋ค.
iOS์์์ด ๋งค์ฐ ๊ฑฐ๋ํ "Lara"๊ฐ์ฒด (height = 120, scale = 1)๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฒ๊ทธ๊ฐ z = 60000์ ๋ํ๋ฉ๋๋ค.
@OrtOfOn ๊ธฐ๋ค๋ ค, ๊ทธ๋์ ios? ๊ทธ๋ฌ๋ ๋น์ ์ ๋ํ ๋งํ๋ค :
์ด์ ์ ๋ง์ถ ์ซ์ (60000)๋ ๋ชจ๋ฐ์ผ์ด ์๋ ๋ฐ์คํฌํฑ (๋งค์ฐ ๊ฑฐ๋ํ lara ๋๋ ๊ฑฐ๋ํ threejs fbx ์ํ ํฌํจ)์์ ๋ฒ๊ทธ๋ฅผ ๋ ธ์ถํ๋ ๋ฐ๋ง ์ฌ์ฉ๋ฉ๋๋ค.
iOS์์์ด ๋งค์ฐ ํฐ "Lara"๊ฐ์ฒด (height = 120, scale = 1)๋ฅผ ์ฌ์ฉํ๋ฉด ์ค์ ๋ก z = 60000์ ๋ฒ๊ทธ๊ฐ ๋ํ๋ฉ๋๋ค.
์ ํ ํฌ์ง ์์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ฌ์ ํ ๋ชจ๋ธ ํฌ๊ธฐ์ ์ธ๊ณ ๊ท๋ชจ ์ฌ์ด์ ๊ด๊ณ๋ฅผ ์ดํดํ์ง ๋ชปํฉ๋๋ค.
๋ง์ง๋ง์ผ๋ก:
http://necromanthus.com/Test/html5/Lara_1000000.html
Modeil ๋์ด๋ ๋๋ต 75์ด๊ณ ์ธ๊ณ ๊ท๋ชจ๋ 9,999,999์
๋๋ค.
Z = 0์์ Z = 1,000,000 (๋ฐฑ๋ง !!!)
๋จ ์ ๋ฐ๋ ๋ถ๋ ์์์ ์๋ฆฟ์๋ 7์ด๊ธฐ ๋๋ฌธ์ ์์๊ฐ ์ ํ ๋จ์ง ์์ต๋๋ค !!!
๋ด๊ฐ ๊ฐ์ง๊ณ ์๋ ๋ชจ๋ ๋
ธํธ๋ถ๊ณผ ๋ฐ์คํฌํ์์ ์๋ฒฝํ๊ฒ ์คํ๋ฉ๋๋ค.
๋ ๋์๊ฐ:
Android 6 ๋ฐ 7 ๋ฐ ๋ค์ํ ์ผ์ฑ ํด๋ํฐ์์ ์๋ฒฝํ๊ฒ ์คํ๋ฉ๋๋ค.
๊ทํ์ ์์์ @RemusMar ๋ ๋ค์์ ์ฝ์์ ์ ๋ ฅํ์ญ์์ค.
camera.position.z += 1e8;
scene.children[2].position.z += 1e8;
๋ค์๊ณผ ๊ฐ์ ๋ด์ฉ์ด ํ์๋ฉ๋๋ค.
๊ทธ๊ฒ์ ์ผ์ค์ด๋ค
z = 1e6๋ ๋์์ง ์๋ค๋ ๊ฒ์ ์๋ ค ๋๋ฆฌ๊ฒ ์ต๋๋ค. 1e7 ์ฆ์์๋ ์ด๋ฏธ ๋์ ๋๊ณ 1e8์ ๋ฏธ์ณค์ต๋๋ค.
@OrtOfOn capabilities.floatVertexTextures๋ฅผ false๋ก ์ค์ ํ๋ฉด iOS์์ ์๋ํฉ๋๋ค. ๋๋ ๋น์ ์ ๋ชจ๋ธ์ด ์ ๋ํผ์ ๋ง์ถ๊ธฐ ์ํด ๋ง์ ๋ผ๋ฅผ ์ฌ์ฉํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
z = 1e6๋ ๋์์ง ์๋ค๋ ๊ฒ์ ์๋ ค ๋๋ฆฌ๊ฒ ์ต๋๋ค. 1e7 ์ฆ์์๋ ์ด๋ฏธ ๋์ ๋๊ณ 1e8์ ๋ฏธ์ณค์ต๋๋ค.
์์์,ํ์ง๋ง ๊ทธ ๊ฐ๋ค์ ๋ํด์๋ ์ ํํ์ง ์์ต๋๋ค.
์คํค๋ ๋ ๋ฉ์ ์ ์ ๊ฐ์ค์น ์ ๋ฐ๋์ ๊ฒฝ์ฐ ์ต๋ ํ์ค ํฌ๊ธฐ๋ 9.999.999์
๋๋ค.
์ด๋ ๋ ์ด์ ์๋ฐฑ๋ง์ ์ต๋ ๊ฑฐ๋ฆฌ๋ก ๋ณํ๋ฉ๋๋ค.
๊ฑด๋ฐฐ
@makc ์ฌ์ค, ๋ฐ์คํฌํ์ ๋ํ ์๋ชป๋ ๋ฒํธ๊ฐ ์์ต๋๋ค. ๊ทธ๊ฒ์ ๋งค์ฐ ๊ฑฐ๋ํด์ผํฉ๋๋ค. ๋น์ ๋ง์ด ๋ง์ต๋๋ค. ์ ๋ ์ฌ์ค ์ด์ ์ ์ค๋ ๋์์ ์ธ๊ธํ์ต๋๋ค : / https://github.com/mrdoob/three.js/issues/13288#issuecomment -364650679
@ daniel-nth ์ ์๊ณ ์์ง๋ง ํ์คํฉ๋๊น? ๋ค์์ threejs ์์ค์ 3d ๋ชจ๋ธ์ ์ฌ์ฉํ์ฌ์ด ์ค๋ ๋์์ ์ํ ํ ํ ์คํธ์ ๋๋ค. ์ฌ์ ํ ์ฝ๋๋ฅผ ๋ณผ ์ ์์ต๋๋ค. @ Mugen87 ๋ ๋์ผํ ํผ๋๋ฐฑ์ ๋ง๋ค์ https://github.com/mrdoob/three.js/issues/13288#issuecomment -364572653
์, ๋ชจ๋ธ์ด ๋ ์ด์ ์กด์ฌํ์ง ์๋ ๊ฒ ๊ฐ์ต๋๋ค. https://threejs.org/examples/models/fbx/xsi_man_skinning.fbx์ 404
@ daniel-nth ๋ผ๊ฐ ์ ์ ์ ๋ชจ๋ธ์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ๋๋ ๋น์ ์ ๋ฏฟ์ต๋๋ค;)
@RemusMar ๊ฝค ์ต๊ทผ ๊ฒ์๋ฌผ์์ ์ ๋ฐ ๋ ๊ฑฐ๋ฆฌ์ ๋ํด ๋น์ ๊ณผ ๋์ํ์ต๋๋ค. ์ซ์ (1e6, 1e8, 1e9, ...)๋ ํ์คํ ์ ํ๋๊ฐ ๋จ์ด์ง๋๋ค. ๊ทธ๊ฒ์ ๋ํด ์์ฌ์ ์ฌ์ง๊ฐ ์์ต๋๋ค. ํ์ง๋ง ์ ๋ฐ ๊ทธ๋ง ํธ๋กค๋งํ์ธ์. ๋ด๊ฐ ์๋ฌด๊ฒ๋ ์ดํดํ์ง ๋ชปํ๋ ์ฒํ์ง ๋ง๊ณ ๋์ด๊ฐ 120 ์ธ ์๋ฐํ ๋ฉ์๊ฐ ํฌ์ง ์์์ง ์๋ฌธ ํด๋ณด์ญ์์ค. ์ ์๊ฒ๋ ์ํฐ์คํธ, ๋ ์ด ์บ์คํธ, ๋ฌผ๋ฆฌํ, ์กฐ๋ช ๋ฑ์ด ์ ์ ํ ๋ค๋ฅธ ํ์ค์ ์ค์ผ์ผ ์ค๋ธ์ ํธ์ ํจ๊ป ๊ฒ์ ๊ฐ๋ฐ์์ ๋งค์ฐ ๊ฑฐ๋ํ๊ณ ์ ์ฉํ์ง ์์ผ๋ฉฐ 3 ์ฃผ ๋ด์ ์ ๊ณต๋ฉ๋๋ค.
๋๋ ์ฃผ์ฅํฉ๋๋ค : ๋ฏธํฐ๋ฒ ๋จ์๋ก ์์ฐ์ ํ์ค์ ์ธ ๊ท๋ชจ๋ก ์ ์งํ๋ ๊ฒ์ ๋ฌผ๋ฆฌ์ ๊ธฐ๋ฐ ๊ฒ์์ ์ฌ๋ฐ๋ฅด๊ฒ ๊ตฌ์ถํ๋ ๋ฐ ํ์์ ์ ๋๋ค. :)
์ํ๊น๊ฒ๋ iOS์์๋ ์ด๋ฌํ ํ์ค์ ์ธ ์ค์ผ์ผ ์กฐ๊ฑด์์ 100m ์ด์ ์๋ฐํ๋ฅผ ์คํํ ์ ์์ต๋๋ค.
์ ๋ฐ์ดํธ : ์ด์จ๋ @ daniel-nth๋ ์ด์ floatTextures๋ฅผ ๋๊ณ ๋งค์ฐ ์ ํ๋ ๋ผ ์๋ก ์์ ํ๊ณ ์๋ค๊ณ ๋งํ๋ ๊ฒ ๊ฐ์ต๋๋ค.
ํ์ง๋ง ์ ๋ฐ ๊ทธ๋ง ํธ๋กค๋ง
๋๋ ์ฃผ์ฅํฉ๋๋ค : ๋ฏธํฐ๋ฒ ๋จ์๋ก ์์ฐ์ ํ์ค์ ์ธ ๊ท๋ชจ๋ก ์ ์งํ๋ ๊ฒ์ ๋ฌผ๋ฆฌ์ ๊ธฐ๋ฐ ๊ฒ์์ ์ฌ๋ฐ๋ฅด๊ฒ ๊ตฌ์ถํ๋ ๋ฐ ํ์์ ์ ๋๋ค. :)
๋๋ ๋น์ ์ ํธ๋กค๋งํ์ง ์์ต๋๋ค.
๊ทธ๋ฌ๋ 1.5 ๋จ์๋ 1.5 ๋ฏธํฐ๋ฅผ ์๋ฏธํ์ง ์์ต๋๋ค.
๊ฑด๋ฐฐ
๋ฟก๋ฟก
๋๋ ์ฃผ์ฅํฉ๋๋ค : ๋ฏธํฐ๋ฒ ๋จ์๋ก ์์ฐ์ ํ์ค์ ์ธ ๊ท๋ชจ๋ก ์ ์งํ๋ ๊ฒ์ ๋ฌผ๋ฆฌ์ ๊ธฐ๋ฐ ๊ฒ์์ ์ฌ๋ฐ๋ฅด๊ฒ ๊ตฌ์ถํ๋ ๋ฐ ํ์์ ์ ๋๋ค. :)
๊ทธ๋ฌ๋์ด ์ฒ๋๋ ์์์ ์์ฒด ๋ถ๊ณผ ๊ฐ์ ๋๋ค. ์ผํฐ๋ฏธํฐ๋ฅผ ์ฌ์ฉํ๊ธฐ๋ก ๊ฒฐ์ ํ ์๋ ์์ต๋๋ค. ๊ทธ๋ฌ๋ฉด "๋์ด๊ฐ 120 ์ธ ์๋ฐํ ๋ฉ์"๋ ์ค์ ๋ก ํ๊ท ๋ณด๋ค ์์ต๋๋ค.
@makc ๋ฌผ๋ก ์ ๋๋ค.ํ์ง๋ง ๋ฌผ๋ฆฌ ์์ง / libs์์๋ ๋ฏธํฐ๋ฒ ๊ฐ์ ์ฌ์ฉํ ๊ฒ์ผ๋ก ์์ํฉ๋๋ค. ์ด๋ฏธ ํฌ๊ธฐ๊ฐ ์กฐ์ ๋ ์ค๋ธ์ ํธ ๋๋ ๋น ๋ฉํธ๋ฆญ ๊ฐ์ผ๋ก ์ผ๋ถ ๋ฌผ๋ฆฌ๋ฅผ ์๋ ํ์ต๋๊น? ๊ฐ๋ฐํ๋ ๊ฒ์ ๊ธ๋ฐฉ ๋์ฐ ํด์ง๊ณ ์์์น ๋ชปํ ๋นํ์ค์ ์ธ ๊ฒฐ๊ณผ๋ฅผ ์ป๊ฒ๋ฉ๋๋ค. ๋ชจ๋ ๋ณ๋ ฅ๋ ๊ฒํ ๋๊ณ ํ์ฅ๋์ด์ผํฉ๋๋ค. ์๋ํ์ง๋ง ์ ํํ์ง๋ ์์ต๋๋ค.
๋ฌผ๋ก ๋ฌ์ฑํด์ผํ๋ ์ ๋ฐ๋ ์์ค์ ๋ฐ๋ผ ๋ค๋ฅด๋ฉฐ 1e6, 1e7, ...๊ณผ ๊ฐ์ ๊ฐ์ ๋๋ฌด ์ปค์ ์ ๋ฐ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ skinnedmesh๋ฅผ ๊ทธ๋ ๊ฒ ๋ฉ๋ฆฌ ์ด๋ํ ํ์๊ฐ ์์ต๋๋ค. ์ฐ๋ฆฌ๋ ๊ทธ๊ฒ์ ๋ํด ๋์ํ์ต๋๋ค. ๊ทธ๋ฌ๋ iOS์์๋ ์ ์ด๋ ์๋ฐฑ ๋จ์ ๋ฒ์์์ GPU skinnedmesh (1.5 ๋จ์ ๋์ด)๋ฅผ ์ด๋ํ ์ ์์ด์ผํฉ๋๋ค.
๊ทธ๋ฌ๋ ๋ฌผ๋ฆฌ ์์ง / libs๋ ๋ฉํธ๋ฆญ ๊ฐ์ ์ฌ์ฉํ๊ธฐ๋ฅผ ๊ธฐ๋ํฉ๋๋ค.
๊ทธ๊ฑด ์ฌ์ค์ด ์๋์ผ.
๋ฏธํฐ, ์ผํฐ๋ฏธํฐ, ์ธ์น ๋ฑ์ ๊ด๋ จ์ด ์์ต๋๋ค.
์ ์ ๋งํ๋ฏ์ด (์ฌ๋ฌ ๋ฒ) ์ค์ํ ๊ฒ์ ์ธ๊ณ ํฌ๊ธฐ (๊ท๋ชจ)์ ์ ํ์ฑ์
๋๋ค.
๋ค์ ์ฌํญ์ ์ ์ํ์ญ์์ค.
๋์ด๊ฐ 1.5 ๋จ์ ์ธ ์คํค๋ ๋ ๋ฉ์๊ฐ์๋ ๊ฒฝ์ฐ ์ ์ ๊ฐ์ค์น ๋งต์์ ์ต์ 2-3 ๊ฐ์ ์์๋ฅผ ์ฌ์ฉํ๋๋ก ๊ฐ์ ๋ฉ๋๋ค.
๋ฌผ๋ฆฌ ์์ง (์๋ ๊ฒฝ์ฐ)์ ๊ฒฝ์ฐ ํ์ฉ ๊ฐ๋ฅํ ๊ฒฐ๊ณผ๋ฅผ ์ํด 3-4 ๊ฐ์ ์์๊ฐ ํ์ํ ์ ์์ต๋๋ค.
์ ์ญ ์ ํ๋์ 4 ์๋ฆฌ ์์๊ฐ ํ์ํ ๊ฒฝ์ฐ ์ต๋ ์ธ๊ณ ํฌ๊ธฐ๋ 999์
๋๋ค (๋จ ์ ๋ฐ๋ ๋ถ๋ ์์์ ์๋ฆฟ์๋ 7์ด๊ธฐ ๋๋ฌธ).
์ฆ, ๊ด์ฐฎ์ ์ ๋๋ฉ์ด์
๊ณผ ๊ด์ฐฎ์ ๋ฌผ๋ฆฌํ์ ์ํ๋ค๋ฉด ์๋ฐฑ์ ๊ฑฐ๋ฆฌ๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ด๋ฒ์๋ ์ ์ฒด ์ฌ์ง์ ์ป์ผ ์
จ๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
๊ฑด๋ฐฐ
@RemusMar ์ฌ๊ธฐ์ ๋ฉ์ถ ๊ฒ์. iOS ๊ธฐ๊ธฐ์์ ์ผ์ด์ค๋ฅผ ํ ์คํธํ์ง ์์๊ฑฐ๋ ์ํ์ง ์๋ ๊ฒ ๊ฐ์ต๋๋ค. GPU skinnedmeshes๊ฐ์๋ ์ด๋ฌํ ์ฅ์น์์๋ "์๋ฐฑ ๊ฑฐ๋ฆฌ"๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋ฉ์๊ฐ ๋งค์ฐ ๋นจ๋ฆฌ ๋ฏธ์ณ ๋ฒ๋ฆฝ๋๋ค. ์ด๊ฒ์ด์ด ์ค๋ ๋์ ์์ ์ด๋ฉฐ ์ฒ์์์ด๋ฅผ๋ณด๊ณ ํ๊ณ ์ถ์์ต๋๋ค. ๊ทธ๊ฒ ๋ค์ ๋๋ค.
์ฌ๊ธฐ์์๋ ๋ค๋ฅธ ์ฌ๋๋ค๊ณผ ๋ด ํ๋ฉด ์บก์ฒ์ ์ํด๋ณด๊ณ ๋๋๋ก ๋ชจ๋ ์ ์๊ณผ ์ํ์ด iOS ์ฅ์น์์ ์๋ํ์ง ์๋๋ค๋ ์ฌ์ค์ ์๊ณ ์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
GPU skinnedmeshes๊ฐ์๋ ์ด๋ฌํ ์ฅ์น์์๋ "์๋ฐฑ ๊ฑฐ๋ฆฌ"๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๋ ํ๋ ธ์ด.
์์ ์คํฌ๋ฆฐ ์ท์ ์ฐธ์กฐํ์ญ์์ค (Android 7-Samsung ํด๋ํฐ).
๋ชจ๋ธ ๋์ด = 75 (๊ฒฝ๊ณ ๊ตฌ ๋ฐ๊ฒฝ ์ฝ 38) ๋ฐ ๊ฑฐ๋ฆฌ 1,000,000 (๋ฐฑ๋ง !!!)
๋๋ ๋ชจ๋ธ ๋์ด = 1.5 ๋ฐ ๊ฑฐ๋ฆฌ 20,000.
์ถ์
iOS๊ฐ ํญ์ ๋ฒ๊ทธ ๋ชจ์์ด๋ผ๋ ๊ฒ์ด ๋ด ๋ฌธ์ ๊ฐ ์๋๋๋ค.
@RemusMar ๋ด๊ฐ ํ๋ฆฐ ๊ฒ ์๋์์, ๋น์ ์ ํธ๋กค. ๋๋ iOS์ ๋ํด ์ด์ผ๊ธฐํ๊ณ ์๊ณ ๋น์ ์ ๋ค๋ฅธ ์ฅ์น์ ๋ํด ์ด์ผ๊ธฐํ๊ณ ์์ต๋๋ค. ๋น์ ์ ํ๋ฌ์ต๋๊น ??
๋น์ ์ด ์ ํ์ ๋๋ฌด ์ซ์ดํ๋ค๋ฉด ๋ด ๋ฌธ์ ๊ฐ ์๋๋๋ค. ๋ด ๊ณ ๊ฐ ์ค ํ ๋ช ์ด ThreeJS๋ก ๋ง๋ 3D ์น ๊ธฐ๋ฐ ๊ฒ์์ ์ํ ๋ "iPhone์ผ๋ก ์ข๊น"๋ผ๊ณ ๋งํ์ง ์์ต๋๋ค. ๊ทธ๋ ๊ฒํ๋ค๋ฉด ์ฃ์กํฉ๋๋ค.
์ฌ๊ธฐ์ ์ ์ก์ ๋ ... ๋ ์ด์ ๋ฐ๋ผ๊ฐ ์ ์์ต๋๋ค.
@OrtOfOn ์, ์ ๊ฐ ์ฌ์ฉํ ๋ชจ๋ธ์๋ 19 ๊ฐ์ ๋ผ๊ฐ ์๊ณ 404 fbx์๋ 67 ๊ฐ์ ๋ผ๊ฐ ์์ต๋๋ค.
https://github.com/mrdoob/three.js/issues/13288#issuecomment -364550036์๋ ๊ท ์ผ ํ ๋ผ ์ ํ์ ๋ณด์ฌ์ฃผ๋ ํ์ด์ง์ ๋ํ ๋งํฌ๊ฐ ์์ต๋๋ค. ํ์ด์ง์์ ์ฌ์ฉํ๋ ๊ณต์์ Math.floor((data.webgl.params.MAX_VERTEX_UNIFORM_VECTORS - 20) / 4);
์
๋๋ค. three.js์ ๊ฒฝ์ฐ 100 % ์ ํํ์ง ํ์คํ์ง ์์ง๋ง iPhone X์์๋ 27 ๊ฑด์๋ณด๊ณ ํฉ๋๋ค. ๋ถํํ๋ Galaxy S3์ ์ ๋ฐ๋ ์๋์ง๋ง ์ฌ์ ํ ์ถฉ๋ถํฉ๋๋ค. ๋ชจ๋ฐ์ผ WebGL ๊ฒ์. ๋ด ์์
ํด๋์ 26 ๊ฐ์ WebGL ํ๋ก์ ํธ์์ ๋จ ํ๋๋ง ๋ ๋ง์ ๋ผ๊ฐ์๋ ๋ชจ๋ธ์ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ ํด๋น ๋ชจ๋ธ์ 0,0,0์ ์ ์ง๋ฉ๋๋ค.
@OrtOfOn : ๊ณ ์ ๋ ์ฅ๋ฉด์์ ๋น์ทํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๊ณ ์ฅ๋ฉด์์ ์คํจ์ด ์ ์ฉ๋ ์บ๋ฆญํฐ๊ฐ ์์ง์ ๋๋ค. ์บ๋ฆญํฐ๊ฐ iOS์์ ์ฌํ๊ฒ ํ๋ค๋ฆฝ๋๋ค. ๋ผ์ ์๋ 22์ ๋๋ค. ์ฅ๋ฉด์ ํฌ๊ธฐ๋ ํฉ๋ฆฌ์ ์ ๋๋ค. ๋ฌธ์ ๋ ์ ์ ํ ์ค์ฒ๋ฅผ ์ฌ์ฉํ๋ฉด Threejs๊ฐ ์๋ ๊ณต๊ฐ์์ ์คํค๋์ ๊ณ์ฐํ๋ค๋ ์์ ์ฃผ์ฅ๊ณผ ํจ๊ป 32 ๋นํธ ๋ถ๋ ์์์ ์ผ๋ก ์ ํ๋๋ค๋ ๊ฒ์ ๋๋ค.
๋๋ ์ง๊ธ ์ธ๊ณ ๊ณต๊ฐ ์ฃผ์ฅ์ ์กฐ์ฌํ๊ณ ์์ผ๋ฉฐ, ์ง์ญ ๊ณต๊ฐ์์ ์์ง ์์น๋ฅผ ๊ณ์ฐ ํ ๋ค์ ๊ฐ์ฒด๋ฅผ ๋ฒ์ญํ๋ ์ ์ ํ ๋ฐฉ๋ฒ์ ๊ตฌํํ ๊ฒ์ ๋๋ค. ์คํค๋์ ์ฌ์ฉํ์ฌ ๊ฐ์ฒด๋ฅผ ์๋ ๊ณต๊ฐ์ ๋ฐฐ์นํ๋ ์ฌ๋์ ๋ํด ๋ค์ด ๋ณธ ์ ์ด ์์ด์ ๊ตฌํ์๊ฐ ์ ๊ทธ๋ฐ ์ผ์ํ๋์ง โโ๋ชจ๋ฅด๊ฒ ์ต๋๋ค.
ํด๊ฒฐ์ฑ ์ด ์์ผ๋ฉด ๋ค์ ๊ฒ์ํ๊ฒ ์ต๋๋ค.
์ฐธ๊ณ ๋ก ios์ float ํ ์ค์ฒ๋ ๋ฒํ ์ค ์ ฐ์ด๋๋ก๋ง ๊นจ์ง์ง ์์ต๋๋ค. ๋๋ ์ต๊ทผ์ ios์์ ์์ ๋ฐด๋ฉ์ ์์ ํ๊ธฐ ์ํด float ํ ์ค์ฒ๋ฅผ ์ ์ ํ ์ค์ฒ๋ก ๋ณ๊ฒฝํ๊ณ ์์๊ธฐ ๋๋ฌธ์ ๋ณดํธ์ ์ธ ios ๋ฌธ์ ์ ๋๋ค. ์ ๋ง๋ก ์ํ๋ค๋ฉด ์ ์ ํ ์ค์ฒ๋ฅผ ์ฌ์ฉํ์ฌ ios์ ๋ผ๋ฅผ ์์ ํ ์๋ ์์ต๋๋ค. ์ฌ๊ธฐ์ ๋ค๋ฅธ ์ฌ๋์ ์ ฐ์ด๋์์ ๊ฐ์ ธ์จ ๊ด๋ จ ์ค ๋ํซ์ด ์์ต๋๋ค.
vec2 encodeFloatRG( float v )
{
vec2 kEncodeMul = vec2(1.0, 255.0);
float kEncodeBit = 1.0/255.0;
vec2 enc = kEncodeMul * v;
enc = fract (enc);
enc.x -= enc.y * kEncodeBit;
return enc;
}
float decodeRGFloat( vec2 enc )
{
vec2 kDecodeDot = vec2(1.0, 1.0/255.0);
return dot( enc, kDecodeDot );
}
... ์ฌ์ค, ๋น์ ์ ์๋ง๋ (์ฌ๊ธฐ์๋ ๊ทธ๋ฐ ๊ฒ์ ์๋ํ์ง ์์๋ค๊ณ ๊ฐ์ ํ๊ณ ์์ต๋๋ค), ios ์ ๋ฐ๋๋ฅผ ์ ์ญ ์ ๋ฐ๋ ์ ํ์ผ๋ก ๋ฐ์๋ค์ด๊ณ ํ๋๊ฐ ์๋ 2 ๊ฐ์ float๋ฅผ ํ ์ค์ฒ์ ์ ์ฅํ๋ค๋ฉด ํ๋กํธ ๋ณธ ํ ์ค์ฒ๋ ์๋ํ๊ฒ ๋ง๋ค ์ ์์ต๋๋ค.
๋๋ threejs๊ฐ ์ํ ์ง์ญ ๊ณต๊ฐ์์ ์คํค๋ ๊ณ์ฐ์ ์ํํ๊ณ ์ธ๊ณ ๊ณต๊ฐ ๋งคํธ๋ฆญ์ค๋ฅผ ํตํด ํ์ค ๋ฐฉ์์ผ๋ก ๋ชจ๋ธ์ ์ค์ ์ธ๊ณ ์ขํ๋ก ๋ณํํจ์ผ๋ก์จ ๋ฌธ์ ๋ฅผ ์์ ํ ํด๊ฒฐํ์ต๋๋ค.
์์ ๋ฌธ์ ๋ iOS ์คํค๋์์ ์์ ํ ์์ ๋์์ต๋๋ค. ๋ํ์ด ์๋ฃจ์ ์ ๋ณดํธ์ ์ด๋ผ๋ ์ ์ ์ง์ ํด์ผํฉ๋๋ค. ํ ์คํธ ํ Android ๊ธฐ๊ธฐ๋ ๋ฌผ๋ก ๋ชจ๋ ๋ฐ์คํฌํฑ ๋ธ๋ผ์ฐ์ ์์ ์๋ฒฝํ๊ฒ ์๋ํฉ๋๋ค. IMHO ๋ก์ปฌ ๊ณต๊ฐ ์คํค๋์ ๊ฑฐ์ ๋ชจ๋ ๊ฒฝ์ฐ์ ์ฌ๋ฐ๋ฅธ ๋ฐฉ๋ฒ์ด๋ฉฐ์ด ๋ฐฉ๋ฒ์ ThreeJS์ ๊ธฐ๋ณธ๊ฐ์ด์ด์ผํฉ๋๋ค. @mrdoob : ์ด๊ฒ์ ๋ํ ๋น์ ์ ๊ฒฌํด๋ ๋ฌด์์ ๋๊น?
mesh = new THREE.SkinnedMesh(geo.geometry, mat);
mesh.bindMode = 'detached';
var skel = new THREE.Skeleton(bones, boneInvs);
var bsm = new THREE.Matrix4().fromArray(geoPrims.bsm);
mesh.bind(skel, bsm);
// make bsmInv identity for models that have multiple skins
mesh.bindMatrixInverse = new THREE.Matrix4();
// patch SkinnedMesh's updateMtxWorld:
// we're using local skinning, so don't keep resetting binMatrixInverse (leave identity)
// the reason we're using .bind here is for models that have more than one skin
mesh.updateMatrixWorld = PatchSkinnedMeshUpdateMW.bind(mesh);
// re-normalize since input data has been compressed
mesh.normalizeSkinWeights();
// remove bone roots and add to bone root list
for (var bi = 0, bl = bones.length ; bi < bl ; bi++) {
if (bones[bi].parent && !bones[bi].parent.isBone) {
bones[bi].parent.remove(bones[bi]);
boneRoots.push(bones[bi]);
}
}
๋ฃจํธ ์ฌ ์ค๋ธ์ ํธ์ 'boneRoots'๋ฅผ ์ถ๊ฐํด์ผํ๋ ๊ฒฝ์ฐ (๋ฐ๋ผ์ ๋งคํธ๋ฆญ์ค ์ ๋ฐ์ดํธ๋ฅผ ๋ฐ์ง๋ง ์ค์ skinnedmesh๋ก ์ด์ด์ง๋ ๊ณ์ธต ๊ตฌ์กฐ์ ๋ชจ๋ ๋งคํธ๋ฆญ์ค๋ฅผ ์์ํ์ง๋ ์์ต๋๋ค). ์ด boneRoots๋ฅผ ์ฅ๋ฉด ๋ฃจํธ์ ์ถ๊ฐํฉ๋๋ค (์ฝ๋๋ ํ์๋์ง ์์).
๊ทธ๋ฆฌ๊ณ ๋ค์์ threeJS์ SkinnedMesh ๊ตฌํ์ ๋์ฒดํ๋ ํจ์น์ ๋๋ค (threejs์ updatematrixworld๊ฐ ์ฐ๋ฆฌ๊ฐ ID๋ก ์ ์งํ๋ ค๋ bindMatrixInverse๋ฅผ ๋ฐฉํดํ๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ ํ์ํฉ๋๋ค). ๋๋ ํจ์น ํจ์๋ฅผ ์ฌ์ฉํ๋ ๋์ THREE.Mesh..prototype.UpdateMatrixWorld์ ์ง์ ๋ฐ์ธ๋ฉ ํ ์ ์์ต๋๋ค.
function PatchSkinnedMeshUpdateMW( force ) {
THREE.Mesh.prototype.updateMatrixWorld.call( this, force );
}
@ denbo-ft ๋์๊ฒ ์ข์ ์๋ฆฌ๋ผ๊ณ ์๊ฐํฉ๋๋ค. PR์ ์์ฑ ํ์๊ฒ ์ต๋๊น?
@ denbo-ft ๊ทํ์ ๋ ธ๋ ฅ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค. ๋ต์ฅ์ด ๋ฆ์ด์ ์ฃ์กํฉ๋๋ค. ๋ ์ด์์ด ์ค๋ ๋๋ฅผ ํ๋ก์ฐํ์ง ์์์ต๋๋ค.
์ฐ๋ฆฌ ์ ํ์๋์ด ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ๋ชจ๋ ๋ธ๋ผ์ฐ์ (0,0,0์์ ์ถฉ๋ถํ ๋ฉ๋ฆฌ ๋จ์ด์ ธ์๋ ๊ฒฝ์ฐ)์ด์ง๋ง ์ฝ 2-3 ๋จ์ ๋จ์ด์ ธ ์์ผ๋ฉด iOS์์ ๋ ๋๋๋ฌ์ง๋๋ค. ์ฐ๋ฆฌ์๊ฒ ๋นํ์ ์ด์ง๋ง ์ ์ด๋ ์ฐ๋ฆฌ๊ฐ ์ด๊ฒ์ ๋ณผ ๋ ์ฐ๋ฆฌ๋ ์ข์ ์์์ ๊ฐ์ง๊ณ ์์ต๋๋ค.
์ด๊ฑธ ํ์๋กํ๋ ์ฌ๋๋ค์ด ๋ ๋ง์ ๊ฒ ๊ฐ์ต๋๋ค. ๋๋ github ์คํ ์์ค ํ๋ก์ ํธ์ ๊ธฐ์ฌํ ์ ์ด ์์ง๋ง git์ ์ต์ํ๋ฉฐ PR์ ๋ง๋ค๋ ค๊ณ ๋ ธ๋ ฅํ ๊ฒ์ ๋๋ค. :)
์ฌ๊ธฐ๋ ๋ง์ฐฌ๊ฐ์ง์ ๋๋ค. ๋ด SkinnedMesh๋ iPhone์ ์ ๋ฌธ ์น๋ฃ์ฌ Dr. Katz์ ์ํผ์๋์ ๊ฐ์ต๋๋ค.
์ฐธ๊ณ ๋ก, 5 ์ 21 ์ผ์ ๊ฒ์๋ฌผ์ ์ ์ฒด ์๋ฃจ์ ์ด ์์ต๋๋ค. ThreeJS ์์ค์ ๋ํ ์์ ์ฌํญ์ ๋ง์ง ์์ต๋๋ค. ๋๋ถ๋ถ์ ์์ ์ฌํญ์ ๊ฐ๋ณ ํ๋ก์ ํธ์ ๋ก๋ ๋ฐ / ๋๋ ์ฅ๋ฉด ์ค์ ์ฝ๋์ ์์ต๋๋ค.
๊ธฐ๋ณธ ์์ ์ '๋ถ๋ฆฌ'๋ชจ๋ (๋ฌธ์ํ๋์ง ์์, btw)๋ฅผ ์ฌ์ฉํ๊ณ ๋ผ ๊ณ์ธต ๊ตฌ์กฐ๋ฅผ ์ค์ ๋ ๋๋ง ๊ฐ๋ฅํ ์บ๋ฆญํฐ ๊ณ์ธต์ด ์๋ ๋ฃจํธ ์ฅ๋ฉด ์์ค์์ ์ฅ๋ฉด์ ๋ฐฐ์นํ๋ ๊ฒ์ ๋๋ค. ๊ทธ๋ฐ ๋ค์ ์์ง (SkinnedMesh.update)์์ ๊ฐ๋จํ ํ ๊ฐ์ง๋ฅผ ํจ์นํ๋ฉด ๋ฐ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค.
ํธ์งํ๋ค:
์ฐ๋ฆฌ๋ TJS๋ฅผ์ํ ์์ ํ ์ฌ์ฉ์ ์ ์ ํ์ผ ํ์๊ณผ ๋ก๋๋ฅผ ๊ฐ์ง๊ณ ์์ผ๋ฏ๋ก, ๋ถํํ๋ ์์ ์๋ฃจ์
์ผ๋ก ์์ ํ PR์ ์์ฑํ๋ ค๋ฉด ์ ๊ณต๋ ์บ ๋ก๋ (์ : Collada) ์ค ํ๋๋ฅผ ์์ ํด์ผํฉ๋๋ค. ๋๋ ์ง๊ธ ์ด๊ฒ์ ํ ๊ฒ์
๋๋ค
๊ฐ์ฌํฉ๋๋ค. ์ข ๋ ์ผ๋ฐ์ ์ธ ๋ฐฉ์์ผ๋ก ์๋ฃจ์ ์ ์ดํดํ๊ณ ์ ์ฉํ๋ ๋ฐ ์๊ฐ์ ํ ์ ํ๋ ค๊ณ ํ์ต๋๋ค (๊ทํ์ ์๋ฃจ์ ์ ํ๋ก์ ํธ์ ์ฝ๊ฐ ํน์ ํ ๊ฒ ๊ฐ์์ต๋๋ค). ์ฝ๋์ ๋ํ ๋ ๋ง์ ์ปจํ ์คํธ๋ฅผ ๊ณต์ ํ ์ ์์ต๋๊น?
์ ๋ฌธ ์น๋ฃ์ฌ Dr. Katz
๋๋ ํน ๋น ์ง ๊ฒ๋ ์๋์ง๋ง ์ ์ฅ .
ํธ์งํ๋ค:
ํ ์์ฒญ์ ์ฑ๊ณต์ ์ผ๋ก ์์ฑํ์ต๋๋ค. ์ถ๊ฐ๋ก ํ ์์๋ ์ผ์ด ์์ผ๋ฉด ์๋ ค์ฃผ์ธ์.
์๋ณธ ๊ฒ์๋ฌผ :
๋ณ๊ฒฝ๋ ๋ก์ปฌ ์ง์ ์ด ์์ง๋ง ์๋ณธ์ผ๋ก ํธ์ ํ ์์๋ ๊ฒ ๊ฐ์ต๋๋ค. ๋ด github creds๋ฅผ ์ ๊ณตํ๋๋ผ๋ ๋ค์ ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค.
https://github.com/mrdoob/three.js.git๋ก ํธ์
remote : mrdoob / three.js.git์ ๋ํ ๊ถํ์ด denbo-ft์ ๊ฑฐ๋ถ๋์์ต๋๋ค.
์น๋ช
์ : ' https://github.com/mrdoob/three.js.git/ '์ ์ก์ธ์ค ํ ์ ์์ : ์์ฒญ ๋ URL์์ ์ค๋ฅ๋ฅผ ๋ฐํํ์ต๋๋ค : 403
์ด๊ฒ์ด github์ ๋ํ ์ฒซ ๋ฒ์งธ ๊ธฐ์ฌ์ด๊ธฐ ๋๋ฌธ์ ์กฐ์ธ์ ์ข์ํ ๊ฒ์ ๋๋ค. ๊ฐ์ฌ!
์ฐธ๊ณ ๋ก PR์ด mrdoob์์ ์๋ํ๊ณ ํตํฉ ๋ ๊ฒฝ์ฐ์ด ๋ณ๊ฒฝ์ ์ง์ํ๋ ์๋ก์ด ๋ฐ์ธ๋ ๋ชจ๋ "๋ก์ปฌ"์ด ์์ต๋๋ค. ๋ฌธ์ํ๋์ง ์์ "๋ถ๋ฆฌ ๋"๋ฐ์ธ๋ ๋ชจ๋๋ฅผ ํจ์นํ๊ฑฐ๋ ๋ณ๊ฒฝํ๊ณ ์ถ์ง ์์์ต๋๋ค. ๋๊ฐ ๋๋ ๋ฌด์์ ์ฌ์ฉํ๊ณ ์๋์ง ํ์๋์ง ์์๊ณ ๋ด๊ฐ ์์ง ๋ชปํ๋ ๊ฒ์ ๊นจ๊ณ ์ถ์ง ์์๊ธฐ ๋๋ฌธ์ ๋๋ค. ํ์ง๋ง์ด ๋ชฉ์ ์ ์ํด ์๋ ๋ ๊ฒ ๊ฐ์ต๋๋ค.
๋ชจ๋ binMode = "local"์ ID๋ฅผ ์ ์งํ๋ ๋์ bindMatrix์ ์ญ์ผ๋ก โโ์ฌ์ค์ ํ๋ "๋ถ๋ฆฌ"์ ๋ฌ๋ฆฌ ์ ๋ฐ์ดํธ ์ค์ bindMatrixInverse๋ฅผ ๋ณ๊ฒฝํ์ง ์์ต๋๋ค.
์ด PR์ webgl_loader_collada_skinning.html ์์ ๋ฅผ ์ฐธ์กฐํ์ฌ ์ฅ๋ฉด์ ๋์ ๋ค๋๋ ์บ๋ฆญํฐ์ ๋ํ ์ ์ ํ ๋ก์ปฌ ์คํค๋์ ์ป๊ธฐ ์ํด ์ฅ๋ฉด ์์ค์์ ํ์ํ ๋ช ๊ฐ์ง ๋ณ๊ฒฝ ์ฌํญ์ ํ์ธํ์ญ์์ค.
Stormtrooper DAE ๋ก๋ ๋ฐ๋ชจ๋์ด ์์ ์ฌํญ์ ํ ์คํธํ๋ ๋ฐ ์ฌ์ฉ๋์์ต๋๋ค. ์ด ํ ์คํธ๋ฅผ ์ํด ์บ๋ฆญํฐ๋ ์์ ์์ 2000 ๋จ์ ๋จ์ด์ง ๊ณณ์ผ๋ก ์ด๋ํ์ต๋๋ค. ์๋ ์คํฌ๋ฆฐ ์ท.
์๋ ์ฌ์ง์ iPhone X / Safari 11์์ ๊ฐ์ ธ์จ ๊ฒ์ ๋๋ค.
๋ณ๊ฒฝ ์ (2000,2000,2000) :
์ด ๋ณ๊ฒฝ ํ :
๋ฃจํธ ์ฌ ๋ ๋ฒจ ๋ฐ (0,0,0)์ ๋ผ๋์์ด์ด๋ฅผ ๋ฌ์ฑ ํ ์์๋ ๋ฐฉ๋ฒ์ด ์๋ค๊ณ ์๊ฐํ์ญ๋๊น? ๋๋ ๋ผ๋ฅผ ์ฌ์ฉํ์ฌ ์๋ฐํ์ ๋ฌผ๊ฑด์ ๋ถ์ด๊ณ , ํฌ์ธํธ๋ฅผ ๋ณด๋๋กํ๋ ๋ฑ์ ์์ ์ํ๊ณ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ ๊ฐ ์ ์ผํ ์ฌ๋์ ์๋ ๊ฒ ๊ฐ์ต๋๋ค.
๋ ๊ฐ์ง ์ต์ ์ด ์์ต๋๋ค.
1) threejs์์ ๊ตฌํ ๋ ๊ฒ์ฒ๋ผ ๋ก์ปฌ ์คํค๋์ ์ด์ ์ ์ป์ผ๋ ค๋ฉด ๋ผ๋ฅผ ์๋ ๊ณต๊ฐ์ ๋ฃจํธ๋ก ์ ์งํ์ญ์์ค. ๊ทธ๋ฐ ๋ค์ ๋ฌด๊ธฐ๋ฅผ ๋ผ์ ๊ผญ ๋ถ์ฐฉํด์ผํ๋ ๊ฒฝ์ฐ (์ : ์๋ฐํ ๊ณต๊ฐ์ผ๋ก ๊ฐ์ ธ ์ค๊ธฐ ์ํด) ์ถ๊ฐ ๋ณํ์ ์ํํ์ญ์์ค.
2) Bones๋ฅผ ์๋ฐํ ๊ณต๊ฐ์ ๊ทธ๋๋ก๋๊ณ iOS์์ ๋คํ๋ฆผ์๋ฐ์ต๋๋ค.
๋๋ ํ์คํ # 1์ ํ ๊ฒ์ด๋ค. ์ด๋ฏธ Bone ์์น์ ์บ๋ฆญํฐ์ ์์น๊ฐ์์ ๋ ์ด๋ค ํ๋ ์์์๋ ๋ถ์ฐฉ ๊ฐ๋ฅํ ์ค๋ธ์ ํธ๊ฐ ์์ด์ผํ๋ ์์น๋ฅผ ๊ณ์ฐํ๊ธฐ ์ํด ํญ์ ์ํ์ ์ํ ํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์๊ณก์ด iOS ์ฅ์น์ HAL ์์ค์์ ํจํน๋์ด ๋ฐ์ํ๊ณ ์ด์ ๋ํด ํ ์์๋ ์์ ์ด ์๊ธฐ ๋๋ฌธ์ # 2์ ๋ํ ํด๊ฒฐ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค. ๋ฌผ๋ก ์์ ๋ค์ํ HalfWord ํจํน ๋ฑ์ ์ฌ์ฉํ์ฌ ์ถ๊ฐ ํดํน์ ์ถ๊ฐ ํ ์ ์์ง๋ง ๋ชจ๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๊ฒ์ด ์๋๋ผ ๋ฌธ์ ๋ฅผ ์ค์ด๋ ๊ฒ์ ๋๋ค. iOS์ ์คํค๋ ๋ฌธ์ ๋ ๋ก์ปฌ ๊ณต๊ฐ์์ ์คํค๋์ ์ํํ๋ฉด ์์ ํ ์ฌ๋ผ์ง ๊ฒ์ ๋๋ค (๋ณด๋ค ๊ตฌ์ฒด์ ์ผ๋ก ๋ผ๋ฅผ ์๋ ์์ ์ ์ค์ฌ์ผ๋ก ์ ์งํ์ฌ ์ซ์๋ฅผ ๊ฐ๋ฅํ ํ ์๊ฒ ์ ์ง). ๊ทธ๋ฐ ๋ค์ ์ฒจ๋ถ ํ์ผ์์ํ ๋ฌธ์ ๊ณต๊ฐ์ผ๋ก xformํฉ๋๋ค.
๋ ๋ง์ ์ ๋ณด:
TJS์์ ๊ตฌํ๋๋ ๋ฐฉ์์ ๋ฌธ์ ๋ ํน๋ณํ TJS๊ฐ ์๋์ง๋ง ์ ฐ์ด๋ ํ๋ก๊ทธ๋จ ๋น ์ ํ๋ ๊ฐ์์ ์ ๋ํผ์ผ๋ก ์ธํ ๋ผ ์ ํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด BoneTextures๋ฅผ ์ฌ์ฉํ๊ณ ์์ต๋๋ค. ์ด๊ฒ์ ๊ฝค ํ์ค์ ์ธ ์๋ฃจ์ ์ ๋๋ค. ๊ทธ๋ฌ๋ iOS์์๋ ํ ์ค์ฒ์ ๋ถ๋์ด 32 ๋นํธ๋ณด๋ค ์์ ๊ฒ์ผ๋ก ์์ํ (ํจํน / ์์ถ)๋ฉ๋๋ค. ์ด๊ฒ์ ์ซ์์ ํฌ๊ธฐ / ํฌ๊ธฐ๊ฐ "ํฌ๊ฒ", ์ฆ ์๋ฐฑ์ด ๋์ ๋ "์ฌ๋ง๊ท"๋๋ ๋ฌธ์์ ๋ค๋ฅธ ์ด์ํ ํจ๊ณผ๋ฅผ ์ ๋ฐํฉ๋๋ค.
์ข์ต๋๋ค. ์ด์ ๋ฌด์์ํด์ผํฉ๋๊น? ์, ๊ฒ์์ ๋ชจ๋ ํฐ ๊ธฐ๋ฅ (์ค์ ๋ก ๊ฒ์ ์์ง)์๋ ์ผ๋ฐ์ ์ผ๋ก ํ์ค ์คํ์ด ํ์ํฉ๋๋ค. ์ : ์ํฐ์คํธ์๊ฒ ์บ๋ฆญํฐ์ ์์ ์ ์ค์ฌ์ ๋๋๋ก ์ง์ํ์ญ์์ค. ์บ๋ฆญํฐ์ ๋ฃจํธ ๋ ธ๋๋ฅผ ๋ฐ /์ง๋ฉด์ ๋ฐฐ์นํ๊ณ ํน์ ๋ฐฉ์์ผ๋ก ๋ผ์ ์คํจ์ ์ ์ํฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ ์์ถ์ ์ (๋๋ TJS ์ผ์ด์ค์ ์์ ์ ์)์ ํ๋ก์ธ์ค ๊ท์น์ ์๊ณ ์๋ ์์ ์ ์๋ฅผ ์์ฑํ์ญ์์ค. ๊ทธ๋ฐ ๋ค์์ด ๊ตฌ์ฑ์ด์๋ ์์ฐ์๋ก๋ ํ ๋ ์์ง์ ์ต์ข ๊ธฐ๋ฅ์ ์ง์ํฉ๋๋ค. ์ด๊ฒ์ด ์ฐ๋ฆฌ๊ฐ ๊ฒ์ ์ฐ์ ์์ ์ผํ๋ ๋ฐฉ์์ ๋๋ค.
๋ชจ๋ ์ ์ ๋ฐฉ๋ฒ, ๋ชจ๋ ํ์ผ ํ์ ๋ฐ ๋ชจ๋ ์ผ๋ฐ ๋ก๋๊ฐ ๊ฒ์์ ๋ชจ๋ ๊ธฐ๋ฅ์ ์๋ฒฝํ๊ฒ ์ฒ๋ฆฌ ํ ๊ฒ์ผ๋ก ๊ธฐ๋ํ๋ ๊ฒ์ ๊ด๋ฆฌ ํ ์์๊ณ ๊ฒฐ์ ์ ์ด์ง ์์ต๋๋ค (๊ฒ์ ๊ฐ๋ฐ์์์ด ๋์ฐํ ์ผ). ๊ทธ ๊ณผ์ ์์ ๋ช ๊ฐ์ง ํ์ค๊ณผ ํ๋ก์ธ์ค๊ฐ ์์ด์ผํฉ๋๋ค.
์บ๋ฆญํฐ๊ฐ ์คํค๋์ ์ฌ์ฉํ๊ณ ๋ฌด๊ธฐ ๋ฑ์ ์ง์ค๋ฅผ ์ฒจ๋ถํด์ผํ๋ ๊ฒฝ์ฐ ์์ง์ด ์คํค๋ํ๋ ๋ฐ ํ์ํ ๊ฒ์ด ๋ฌด์์ธ์ง ์๊ฐํ ๋ค์ ์์ ํ์ญ์์ค. ๋๋ ๊ทธ๋ฌํ ์๋ฃจ์ ์ ์๋ก ์ ์ํ์ต๋๋ค. ๋ถํํ๋, ์ด๋ค ์ด์ ๋ก ๋ ๋ก๋๋ฅผ ๋ณ๊ฒฝํ๊ณ ์ถ์ง ์๊ธฐ ๋๋ฌธ์ PR์ด ์๋ฝ๋์ง ์์์ต๋๋ค. ์ด์จ๋ , ๋๋ ๋ด๊ฐ ์ ์ถ ํ PR๋ฟ๋ง ์๋๋ผ ์์ ์ค๋ ๋์ ๋ฌธ์ ์ ํด๊ฒฐ์ฑ ์ ๋ํด ์ค๋ช ํ๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
๋ด๊ฐ ์ด๋ฏธ ๊ฐ์ง๊ณ ์๋ ๊ฒ๋ณด๋ค ๋ ๋ง์ด ๊ธฐ์ฌํ ์๋ ์์ต๋๋ค. ๋ด๊ฐ ์ด๋ค ์ฌ๋๋ค์ ๋์ ์ผ๋ฉด ์ข๊ฒ ๋๋ฐ ...
ํ์ด์ ๋น๋๋ค!
iOS์ ์คํค๋ ๋ฌธ์ ๋ ๋ก์ปฌ ๊ณต๊ฐ์์ ์คํค๋์ ์ํํ๋ฉด ์์ ํ ์ฌ๋ผ์ง๋๋ค.
์ฒ์๋ถํฐ ๋งํ๋ฏ์ด ์ด๋ iOS ์ ํ (๋ฒ๊ทธ)์ ๋ํ ํด๊ฒฐ ๋ฐฉ๋ฒ์ด๋ฉฐ์ด๋ฅผ ์ํด ์ฒ๋ฆฌ ๋ฅ๋ ฅ์ ๋ญ๋นํด์ผํฉ๋๋ค.
๊ทธ๊ฒ์ ํด๊ฒฐ์ฑ
์ด ์๋๋๋ค!
์ค์ ํด๊ฒฐ์ฑ
์ iOS์์ ๋ถ๋ ์์์ ์ ํ๋๋ฅผ ๋์ด๋ ๊ฒ์
๋๋ค (์ผ๋ฐ ๊ฐ์ธ 7 ์๋ฆฌ).
http://davenewson.com/posts/2013/unity-coordinates-and-scales.html
@ denbo-ft ์ ๋ ์ค์ ๋ก ๊ทํ์ PR์ ๊ตฌํํ์ต๋๋ค (์ฐ๋ฆฌ๋ ์์ฒด ๋ก๋๊ฐ ์์ต๋๋ค). ๊ทํ์ ๊ธฐ์ฌ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค. ๊ฐ์ฌํฉ๋๋ค. ์ฌ์ ์ฌ๋ฌ ์๋ฐํ๊ฐ ์๊ณ , ์ด๋ฆฌ์ ๋ฆฌ ์์ง์ด๊ณ , ์์ดํ ์ ์ก๊ณ , ์๋ก ์ํธ ์์ฉํ๋ ๋ฑ ๋ค๋ฅธ ์ ๊ทผ ๋ฐฉ์์ ๋ฐ๋์ต๋๋ค. ์ฝ๋, ์๋ก์ด ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ํ์ด ์์ต๋๋ค.
๋๋ ๋ฌธ์ ์ ๋ํด ์๊ฐํ๋ ๋ฐ ์๊ฐ์ ๋ณด๋์ง ๋ง ๋ ๋์ ํด๊ฒฐ์ฑ ์ ์ฐพ์ง ๋ชปํ์ต๋๋ค. (์์ง ๋ ธ๋ ฅ ์ค)
๋ฟก๋ฟก
์ค์ ํด๊ฒฐ์ฑ ์ iOS์์ ๋ถ๋ ์์์ ์ ํ๋๋ฅผ ๋์ด๋ ๊ฒ์ ๋๋ค.
๋๊ตฐ๊ฐ๋ ๋จผ์ @grorg ์ co์๊ฒ ๋ฌผ์ด ๊ทธ๋ฐ๊ฐ์ ? ๊ทธ๋ฅ ๋ฒ๊ทธ๊ฐ ์๋๋ผ ๋ค๋ฅธ ๋ฌธ์ ์ ๋ํ ์ฌ๊ณผ์ "ํด๊ฒฐ์ฑ "์ด๋ผ๋ ๋๋์ด ๋ค์ด์
๊ทธ๋ฅ ๋ฒ๊ทธ๊ฐ ์๋๋ผ ๋ค๋ฅธ ๋ฌธ์ ์ ๋ํ ์ฌ๊ณผ์ "ํด๊ฒฐ์ฑ "์ด๋ผ๋ ๋๋์ด ๋ญ๋๋ค.
์๋ง๋ ์ฌ์ค ์ผ ๊ฒ์
๋๋ค.
Firefox Android์ ๋ฌธ์ ์ ์ ์ฌํฉ๋๋ค. ๋ฒ๊ทธ๊ฐ๋ณด๊ณ ๋๊ณ ๊ฐ๋ฐ์๊ฐ ํ์ธํ์ง๋ง ์ง๋ 5 ๊ฐ์ ๋์ ์์ ๋์ง ์์์ต๋๋ค (2 ๊ฐ ๋ฆด๋ฆฌ์ค)!?!
์ค๋๋ ์ํํธ์จ์ด ๊ฐ๋ฐ์ด ์๋ํ๋ ๋ฐฉ์์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์ฌ๋ฐ๋ฅธ ์์น์ ์์ ํ๋ ๋์ ํ์ฌ์ ํด๊ฒฐ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค.
์ต์ข
๊ฒฐ๊ณผ : ๋ฒ๊ทธ ๋ชจ์, ๋ญ๋น ๋ ๋ฆฌ์์ค ๋ฐ ๋ธ๋ก ํธ์จ์ด !!!
๋ฟก๋ฟก
๋ผ ๊ณ์ธต ๊ตฌ์กฐ๋ฅผ ๋ฃจํธ์ ์ ์งํ๊ณ ์๋ฐํ์ ์ค์ ์์น ๋งคํธ๋ฆญ์ค์ martixWorld๋ฅผ ๊ณฑํ์ฌ ๋ผ์ ์ต์ข
WS ์์น๋ฅผ ์ก๋ ํจ์๋ฅผ ์ถ๊ฐํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ๋งค์ฐ ๊ฐ๋จํ๋ฉฐ ์์ ํ๊ธฐ ์ ์ ๊ฐ์ง๊ณ ์๋ ๊ฒ์ ๋๋ ค ์ค ๊ฒ์
๋๋ค.
๋๋ ๋ฒ๊ทธ๊ฐ์๋ ๊ฒฝ์ฐ ์๋ ๋ฐฉ๋ฒ์ผ๋ก ๋์๊ฐ์ (๋ฒ๊ทธ๊ฐ์๋) ๋ผ ํ ์ค์ฒ์ ๋ก์ปฌ ํ๋ ฌ์ ํฌํจํ๊ณ ํ ์ค์ฒ ์ฌ์ฉ๋์ ๋ ๋ฐฐ๋ก ๋๋ฆฐ ๋ค์ ์ ฐ์ด๋ ์กฐ๊ฐ์ ์์ ํ์ฌ ์คํค๋ ์ค์ GPU์์ ์ถ๊ฐ ๊ณ์ฐ์ ์ํ ํ ์ ์์ต๋๋ค. . ์ด ์๋ฃจ์ ์ ์ฝ๋ ๊ด์ ์์ "๋ ๊น๋"ํ์ง๋ง ๋งค ํ๋ ์๋ง๋ค GPU์ ์ ๋ก๋๋๋ ํ ์ค์ฒ์ ์์ ๋ ๋ฐฐ (4 ๋ฐฐ๊ฐ ๋ ์ ์์)ํ๋ฏ๋ก ์์ ์ ์๋ณด๋ค ํจ์ฌ ๋ ํจ์จ์ ์ ๋๋ค. ๊ทธ๋ฌ๋ ๋ด๊ฐ ์์ง ๋ชปํ๋ ์ด์ ๊ฐ ๋ฌด์์ด๋ ํ์์ ๋ฐฉ์์ผ๋ก ์ํํ๋ ๊ฒ์ด ๋ ์ ์ต ํ ์ ์์ต๋๋ค.
์ด์ ์๋ ์๋ฃจ์ ์ด ์์๋ ๊ฒ์์ ์ด์ ๋ชจ๋ ์ฅ์น์ ํธํ๋๋ ๋ช ๊ฐ์ง ์ต์ ์ด ์์ผ๋ฉฐ, ์ด๋ ๋๋ถ๋ถ์ ํ๋ก์ ํธ์์ ๋ช ๋ฐฑํ ์๊ตฌ ์ฌํญ์ ๋๋ค.
0,0,0์์ ๋ผ๋ฅผ ์ฌ์ฉํ๊ณ ๋ค๋ฅธ ํญ๋ชฉ์ ๋ํด ๋ช ๊ฐ์ง ์ถ๊ฐ ํ๋ ฌ ๊ณ์ฐ์ ์ํํด์ผ ํ ๊ฒ ๊ฐ์ต๋๋ค. ๊ฐ์ฌ!
@ denbo-ft๊ฐ ์ ํํฉ๋๋ค. ์ด๊ฒ์ ์ธ๊ณ ๊ณต๊ฐ์์ ์คํค๋์ผ๋ก ์ธํด ๋ฐ์ํ๋ three.js ๋ฌธ์ ์ ๋๋ค.
์ฐธ๊ณ ๋ก, ์ฌ๊ธฐ์์ world-space-skinning์ด ๋ณ๊ฒฝ๋์์ต๋๋ค : https://github.com/mrdoob/three.js/pull/4812.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
zeoverlord ์ฌ์ฉ์