UV ์คํ์ ๋ฐ ๋ฐ๋ณต(๊ทธ๋ฆฌ๊ณ ์๋ง๋ ๋ค๋ฅธ ํ ์ค์ฒ ์์ฑ ์ค ์ผ๋ถ)์ ํ ์ค์ฒ์์ ๋จธํฐ๋ฆฌ์ผ๋ก ์ด์ํ๊ฒ ์ ๋ฌ๋๋ ์ ๋ํผ์ด๋ฏ๋ก ์ํ๋ ๊ฒฝ์ฐ ๋จธํฐ๋ฆฌ์ผ๋น ํ ์ค์ฒ๋ฅผ ๋ณต์ ํด์ผ ํ๋ ๋ฌธ์ (๋ง์ ๋ฉ๋ชจ๋ฆฌ ๋ญ๋น)๊ฐ ๋ฐ์ํฉ๋๋ค. -์ฌ๋ฃ ์คํ์ /๋ฐ๋ณต ๋๋ ์ฌ์ฉ์ ์ ์ ์ ฐ์ด๋๋ฅผ ๊ตด๋ฆฝ๋๋ค. ์ฌ๋๋ค์๊ฒ ์ด๋ ๊ฒ ํ๋๋ก ๊ฐ์ ํ๋ ๊ฒ์ ๋งค์ฐ ๋นํจ์จ์ ์ ๋๋ค. ๊ฐ์ฅ ์ข์ ๊ฒฝ์ฐ๋ ์ ์ฉ๋ ๊ฐ์ฒด์ ํฌ๊ธฐ์ ๋ฐ๋ผ ํ๋ฉด ์ ์ฒด์ ํ ์ค์ฒ๋ฅผ ํ์ผ๋งํ๊ฑฐ๋ ์ ๋๋ฉ์ด์ ์ ์ํ ์คํ๋ผ์ดํธ ์ํธ๋ก ํ ์ค์ฒ๋ฅผ ์ฌ์ฉํ๋ ค๋ ๊ฒฝ์ฐ์ ๋๋ค. ํ์ฌ ์์คํ ์ "๊ณต์ " ํ ์ค์ฒ์์ ๊ณต์ UV ์คํ์ /๋ฐ๋ณต์ด ํ์ํ ๊ฐ๋ฅ์ฑ์ด ๋ฎ๊ณ ์ผ๋ฐ์ ์ผ๋ก ์ฌ๋ฃ๋ฅผ ๊ณต์ ํ๋ ๊ฒ์ด ๋ ๋์ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ์ค์ง์ ์ธ ์ด์ ์ด ์๋ ์ฅ์ ๋ก๋ง ๋ณผ ์ ์์ต๋๋ค. ์ด์จ๋ ํ ์ค์ฒ์์ ์ ๋ํผ์ ์ ๋ฐ์ดํธํ๋ ๊ฒ์ ์ด์ํฉ๋๋ค. ์๋ํ๋ฉด ํ ์ค์ฒ์ ์ผ๋ถ๊ฐ ์ค์ ๋ก ๋น์ฆ๋์ค๊ฐ ์๋๊ธฐ ๋๋ฌธ์ ์ต์ข ์ฌ์ฉ์์๊ฒ ํผ๋์ ์ฃผ๊ธฐ ๋๋ฌธ์ ๋๋ค. ์๋ฅผ ๋ค์ด, ๋ ์ด์์ ๋งต์ด ์ฌ์ง์ ์ ์ฉ๋ ๋ ์คํ์ /๋ฐ๋ณต์ ๋ณ๊ฒฝํ๋ฉด(์: ํ์ฐ+๋ ธ๋ฉ๋งต์ ํ์ฐ ๋งต์ ์คํ์ /๋ฐ๋ณต๋ง ์ฌ์ฉํ๋ฏ๋ก) ๋ ธ๋ฉ๋งต ์คํ์ /๋ฐ๋ณต ๊ฐ์ ํด๋น ์ปจํ ์คํธ์์ ์์ ํ ์ธ๋ชจ๊ฐ ์์ต๋๋ค. , ์ค์ ๋ก ๋ ธ๋ฉ ๋งต ์คํ์ /๋ฐ๋ณต์ ์ํฅ์ ์ฃผ์ด์ผ ํ๋ค๊ณ ์ ์ํ๋ ๊ฒฝ์ฐ. ์จํต ํผ๋์ค๋ฝ์ต๋๋ค.
"refreshUniformsCommon" ๊ธฐ๋ฅ์์ ๋ณ๊ฒฝ์ด ํ์ํ๋ค๊ณ ํ์ ํ์ง๋ง ์๋ง๋ ๋ ๋ง์ ๊ฒ์ด ์์ ๊ฒ์ ๋๋ค. ์คํ๋ผ์ดํธ ํ๋ฌ๊ทธ์ธ์๋ ๋ช ๊ฐ์ง ๋ณ๊ฒฝ ์ฌํญ์ด ํ์ํฉ๋๋ค. ์ด๊ฒ์ ์๋ง๋ ๋ง์ ์ฌ๋๋ค์ ํ๋ก์ ํธ๋ฅผ ์ค๋จ์ํฌ ๊ฒ์ด์ง๋ง ํ ์ค์ฒ/์ฌ๋ฃ API์์ ์๋นํ ํฐ ๋ถ์ผ์น์ ๋๋ค. ์ฌ๋ฃ์ ๋ํด ์ผ๋ฐ์ ์ผ๋ก null์ธ ์ฌ์ ์๋ก ๋ง๋๋ ๊ฒ์ด ๋ ๋์ ์ ์์ต๋๋ค. ์ค์ ํ๋ฉด ํ ์ค์ฒ์ ๊ฐ์ ๋ฌด์ํ๋ฏ๋ก ๋ชจ๋ ์ฌ๋์ ๋ฌผ๊ฑด์ ์์์ํค์ง ์์ต๋๋ค.
๊ด๋ จ ๊ฒ์๋ฌผ: https://github.com/mrdoob/three.js/issues/3549
์ฌ๋ฃ๋ณ๋ก ํ ์ค์ฒ๋ฅผ ๋ณต์ ํด์ผ ํฉ๋๋ค(๋ง์ ๋ฉ๋ชจ๋ฆฌ ๋ญ๋น).
์ด๋ค ์๋ฏธ์์ ์๋ง์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ญ๋น๋ฉ๋๊น?
"๊ณต์ " ํ ์ค์ฒ์์ ๊ณต์ UV ์คํ์ /๋ฐ๋ณต์ด ํ์ํ ๊ฐ๋ฅ์ฑ์ ๋ฎ์ต๋๋ค.
๊ทธ๊ฒ ๋ฌด์จ ๋ป ์ด๋?
ํ์ฌ ์ ๊ทผ ๋ฐฉ์์ ์ ์งํ๋ ๊ฒฝ์ฐ ๋ณ๊ฒฝํด์ผ ํ ํ ๊ฐ์ง๋ ํ ์ค์ฒ๊ฐ ๋ณต์ ๋ ๋ ๊ณต์ ์ด๋ฏธ์ง๋ฅผ GPU์ ํ ๋ฒ๋ง ์ ๋ฌํด์ผ ํ๋ค๋ ๊ฒ์ ๋๋ค.
๋ง์ ์์ ํ๋ ์/์ํธ๊ฐ ์๋ ๊ฐ์ฒด๊ฐ ์๋ ๊ฒฝ์ฐ ๋ง์ ์ธ๋ชจ ์๋ ๊ฐ์ฒด๊ฐ ์์ฑ๋๊ณ ๋ง์ํ์ ๋๋ก ์ด๋ฏธ์ง๊ฐ GPU์ ์ฌ๋ฌ ๋ฒ ๋ณต์ฌ๋์ด ๋งค์ฐ ๋ญ๋น๋ฉ๋๋ค. ํจ์ฌ ๋ ๋ญ๋น๊ฐ ๋๋ ๊ฒ์ ๋ค๋ฅธ ์ ๋๋ฉ์ด์ ์์ ์๋ก ๋ค๋ฅธ ์ง์ ์ ์์ด์ผ ํ๋ ์ฌ๋ฌ ๊ฐ์ฒด๊ฐ ์๋ ๊ฒฝ์ฐ ๊ณ ์ ํ ์ฌ์ง/๊ฐ์ฒด๋ณ๋ก ๊ณ ์ ํ ํ ์ค์ฒ ์งํฉ์ ๋ง๋ค์ด์ผ ํ๋ฏ๋ก ์ฌ์ง ์ ๋ํผ์ด ์ด๋ฌํ ์ถ๊ฐ ํ ์ค์ฒ ์คํ์ /๋ฐ๋ณต ๋ฐ์ดํฐ ๊ตฌ์กฐ๊ฐ ์ ๋๋ก ์๋ํ๋๋ก ํ๊ธฐ ์ํด ์๋ชป ์๊ฐํ API๋ฅผ ์ค์ฌ์ผ๋ก ๊ตฌ์ถํ์ง ์๊ณ ๋ ํจ์ฌ ๋ ์ฝ๊ฒ ์กฐ์ํ ์ ์์ต๋๋ค. ๋ชจ๋ ๊ณณ์์ ์ด๋ฌํ ๊ณ ์ ํ ํ ์ค์ฒ ๊ทธ๋ฃน์ ์์ฑํด์ผ ํ๋ ๋ด ์์ฉ ํ๋ก๊ทธ๋จ์ ํน์ ์ฌ์ฉ ์ฌ๋ก์์ ์๋๊ฐ ํฌ๊ฒ ๋๋ ค์ง๊ณ ์ ์ผํ ํด๊ฒฐ์ฑ ์ ์ด ๋จ์ผ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ๋ชจ๋ ์คํก ์ฌ์ง์ ์ ฐ์ด๋ ์ฌ์ง๋ก ๊ต์ฒดํ๋ ๊ฒ์ ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ๋ด THREE.js ๋ฒ์ ์ ํฌํฌํ๊ณ ํ์ํ ์์ ์ ํ์ญ์์ค.
๋ ๋ฒ์งธ ์ง์ ๊ณผ ๊ด๋ จํ์ฌ:
ํ์ฌ ํจ๋ฌ๋ค์์ ๋์ผํ UV ์คํ์ /๋ฐ๋ณต์ผ๋ก ๋์ผํ ํ ์ค์ฒ๋ฅผ ์ ์ฉํ๋ ค๋ ๊ฒฝ์ฐ์๋ง ์์ ์ ์ฉ์ดํ๊ฒ ํ๋ค๋ ๊ฒ์ ์๋ฏธํ์ง๋ง ์ผ๋ฐ์ ์ผ๋ก ๋๋ฌธ ๊ฒฝ์ฐ์ ๋๋ค. ์์ฌ๋ณ๋ก ์ ๋ํผ์ ์ ๊ณ ํ ์ค์ฒ๊ฐ ์๋ ์์ฌ๋ฅผ ๊ณต์ ํฉ๋๋ค.
ํ์ฌ ์์คํ ์ ์ฃผ์ ๊ฒฝ๊ณ . ์คํ์ /๋ฐ๋ณต์ ์ ฐ์ด๋์ ๋ชจ๋ ํ ์ค์ฒ์ ์ํฅ์ ๋ฏธ์น๋ ๋จ์ผ ์ ๋ํผ์ผ๋ก๋ง ์กด์ฌํ์ง๋ง THREE.Texture์ ์ฒจ๋ถ๋์ด ์๋ค๋ ์ฌ์ค์ ์ ๋ํผ์ผ๋ก ์ ๋๋ก ์ฌ์ฉํ ์ ์๊ณ ์ฌ๋๋ค์ด ์คํ์ /๋ฐ๋ณต์ด๋ผ๊ณ ์๊ฐํ๋๋ก ์์ด๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ์คํก ๋จธํฐ๋ฆฌ์ผ์ ์ ์ฉํ ์ ์๋ ๋ค์ํ ํ ์ค์ฒ์ ๋ํด ๋ค๋ฅด๊ฒ ์ ํํ ์ ์์ต๋๋ค(์ฆ, ๋ค๋ฅธ ๋ํจ์ฆ ์คํ์ ๊ณผ ๋ ธ๋ฉ ๋งต ์คํ์ ์ ์ ์ํ ์ ์์ง๋ง, ์๋ก ๋ค๋ฅธ ํ ์ค์ฒ์ ๊ณ ์ ํ๊ฒ ์ค์ ํ ์ ์์์๋ ๋ถ๊ตฌํ๊ณ ์ค์ ๋ก๋ ๋ถ๊ฐ๋ฅํฉ๋๋ค). ๋๋ ๊ทธ๊ฒ์ด ์บ๋ฒ์ค ๋ ๋๋ฌ์์ ๋จ์ ์์ ์ ์๋ค๋ ๊ฒ์ ์ ์ ์์ง๋ง, ๊ทธ๊ฒ์ ํฌ๊ฒ ์ฐฌํํ webGLrender / GLSL ๋จธํฐ๋ฆฌ์ผ ์์คํ ์์๋ ์๋ฏธ๊ฐ ์์ต๋๋ค.
mrdoob์ ์ฌ๋ฃ๋ณ๋ก ๊ฐ์ง๊ณ ์๋ ๊ฒ์ ๋ฐ๋ํ๋ ์ด์ ๋ก ๋ค์๊ณผ ๊ฐ์ ํ์์ด ํ์ํ๋ค๊ณ ๋งํ์ต๋๋ค.
์ฌ๋ฃ.์ง๋
material.map์คํ์
material.map๋ฐ๋ณต
์ฌ๋ฃ.env
material.envOffset
material.env๋ฐ๋ณต
... ๋ฑ.
๊ทธ๋ฌ๋ ๋ค์ ์คํ์ /๋ฐ๋ณต์ ์ง๊ธ๋ ๋งต ์ ํ๋ณ๋ก ์๋ํ์ง ์์ผ๋ฏ๋ก ์ด๊ฒ์ ์ค์ ๋ก ์ ํจํ ์ธ์๊ฐ ์๋๋๋ค. ์ด์จ๋ ๋งต ์ ํ๋ณ๋ก ์ฌ์ฉํ๊ธฐ์๋ ๋๋ฌด ๋ง์ ์ ๋ํผ์ ๋ญ๋นํ๊ฒ ๋ฉ๋๋ค. (์ผ๋ฐ์ ์ผ๋ก UV ์ธํธ๋ฅผ ํ๋๋ง ์ฌ์ฉํ๋ฏ๋ก ๋ ธ๋ฉ๋งต/๋ฒํ๋งต/๋ํจ์ฆ๋งต/์คํํ๋ฌ๋งต์ ๋ํด ์ฌ๋ฌ ์คํ์ ์ ๊ฐ์ง ์์ ๊ฒ์ ๋๋ค). ๋ชจ๋ ์ต์ ์ ํฉ๋ฆฌ์ ์ผ๋ก ํ๊ฐํ๋ค๋ฉด ํ ์ค์ฒ ์์ฑ์ด ์๋๋ผ ๋จธํฐ๋ฆฌ์ผ ์์ฑ์ด์ด์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ํ์ฌ ์์คํ ์ ์ด๋ค ์ด์ ๋ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. UV ์คํ์ ์ ํตํด ๋จธํฐ๋ฆฌ์ผ์ ์ ๋๋ฉ์ด์ ์ ์ ์ฉํ๋ ๊ฒ์ ์์ฑ์ ๊ฐ์ง ์ ์๋ ์ฃผ์ ์ด์ ์ด๊ธฐ๋ ํ๊ณ ์ ๋๋ก ์ฌ์ฉํ์ง๋ ๋ชปํ๋ ๊ฒ ๊ฐ์ต๋๋ค. ๋งํ ๊ฒ๋ ์์ด ์ด๋ฌํ ์ ๋ํผ์ด ํ์ํ์ง ์์ ๊ฒฝ์ฐ ์ ฐ์ด๋ ์ปดํ์ผ์์ ์๋ตํ ์ ์์ง๋ง ์ง๊ธ์ ๋งต์ด ์๋ ํ ๊ฑฐ๊ธฐ์ ์์ต๋๋ค.
@QuaziKb ์ฌ๊ธฐ์์ ์ ์ํ ๊ฒ๊ณผ ๊ฐ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ํ ๊ทผ๋ณธ์ ์ธ ๋ณ๊ฒฝ์ ์ ์ํ๋ ค๋ฉด ํด๋น ๋ณ๊ฒฝ์ ๋ํ ๋ช ํํ๊ณ ์ค๋๋ ฅ ์๋ ์ฃผ์ฅ์ ์ ๊ณตํด์ผ ํฉ๋๋ค. ํน์ ์์ฉ ํ๋ก๊ทธ๋จ์ ์ฐธ์กฐ ํ๋ ์์์ ๋ ผ์ํ๋ ๊ฒ์ ๊ทธ๊ฒ์ ์๋ฅด์ง ์์ ๊ฒ์ ๋๋ค.
์ฆ, ์คํ์
/๋ฐ๋ณต์ด Texture
์์ ์ฌ๋ฃ๋ก ์ด๋๋๋ ๊ฒ์ ๋ณด๊ณ ์ถ์ต๋๋ค.
๋ค์ ๋งต์ด ๋์ผํ ์คํ์ /๋ฐ๋ณต ๊ฐ์ ๊ฐ๋๋ค๊ณ ๊ฐ์ ํ๋ ๊ฒ์ด ํฉ๋ฆฌ์ ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
specularMap
normalMap
bumpMap
alphaMap
aoMap (future)
glossMap (future)
displacementMap (future)
๋จ ํ๋์ ์์ธ๋
์ด๊ฒ์ด ํ์ฌ ๊ตฌํ๋๋ ๋ฐฉ์์ ๋๋ค. ๊ฐ ๋งต์๋ ๊ณ ์ ํ ์คํ์ /๋ฐ๋ณต ๊ฐ์ด ์์ง๋ง ์ ์ฉ๋์ง ์์ต๋๋ค.
๋ฐ๋ผ์ MeshPhongMaterial
, MeshLambertMaterial
, MeshBasicMaterial
๋ฐ SpriteMaterial
์ ์ถ๊ฐํ ์ ์์ต๋๋ค.
mapOffset // or mapTranslate
mapRepeat // or mapScale
repeat
์์ Texture
offset
๋ฐ repeat
์ ๊ฑฐํฉ๋๋ค.
์ด๋ฌํ ๋ฐฉ์์ผ๋ก ์คํ๋ผ์ดํธ ์ํธ๋ฅผ ๊ตฌํํ๋ ๊ฒ์ ๊ฐ๋จํฉ๋๋ค. ๊ฐ ์คํ๋ผ์ดํธ์๋ ์ฌ์ง์ด ์์ผ๋ฉฐ ํด๋น ์ฌ์ง์ ๋จ์ผ ํ ์ค์ฒ๋ฅผ ๊ณต์ ํฉ๋๋ค. ์ง๊ฐ์ ์ด๋ฏธ์ง๊ฐ ์์ต๋๋ค. ํ ์ค์ฒ๋ฅผ ๋ ์ด์ ๋ณต์ ํ ํ์๊ฐ ์์ต๋๋ค. GPU ์ธก์์ ์ฌ๋ฃ๋ ๋จ์ผ ์ ฐ์ด๋ ํ๋ก๊ทธ๋จ์ ๊ณต์ ํฉ๋๋ค.
IMHO, ์ด๊ฒ์ ๋ณด๋ค ์์ฐ์ค๋ฌ์ด API์ ๋๋ค.
API๊ฐ ๊ทธ๋๋ก ๊ตฌํ๋ ์ด์ ๋ฅผ ๊ธฐ์ตํ๋ ค๊ณ ํฉ๋๋ค. ๊ทธ๋ด๋งํ ์ด์ ๊ฐ ์์์ ๊ฑฐ๋ผ ์์ํฉ๋๋ค.
์ฃ์กํฉ๋๋ค. ์ด๊ฒ์ด ์ ์์๋ง ํด๋น๋๋ค๋ ์๋ฏธ๋ ์๋๋๋ค. ๋จ์ํ ํ์ฌ API๊ฐ ์ค์ ์๋ฃจ์ ์์ด ๊ณ ์ ํ ๊ฐ์ฒด/์ฌ๋ฃ๋ณ๋ก ์ ๋๋ฉ์ด์ ์คํ๋ผ์ดํธ ์ํธ/์คํ์ ์ ์ฌ์ฉํ ๋ ์๋นํ ๋ถํ๋ฆฌ๊ธฐ๋ฅผ ์ด๋ํ๋ค๋ ๊ฒ์ ๋๋ค. ๋น์ฐํ ๋ชจ๋ธ์ ์ ์ UV์ ์คํ์ /๋ฐ๋ณต์ ๋จ์ํ ๊ตฝ๋ ๊ฒ๋ณด๋ค ์ด๊ฒ์ ์ ๋ํผ์ผ๋ก ์ฌ์ฉํ๋ ์ฃผ์ ๋ชฉ์ ์ ์คํ์ ์ ์ ๋๋ฉ์ด์ ํํ๋ ๊ฒ์ด๋ฉฐ, API๋ฅผ ๋์๋ค๋์ง ์๊ณ ๋ ์ด๊ฒ์ด ๋ถ๊ฐ๋ฅํ๋ค๊ณ ์ ์ํ์ต๋๋ค. ํ ์ค์ฒ์ ๋ถ๋ ๊ฒ๋ณด๋ค ํจ์ฌ ๋ ์ ์ฉํฉ๋๋ค.
๋ค์ ๋งต์ด ๋์ผํ ์คํ์ /๋ฐ๋ณต ๊ฐ์ ๊ฐ๋๋ค๊ณ ๊ฐ์ ํ๋ ๊ฒ์ด ํฉ๋ฆฌ์ ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
์ง๋
...
์ํ๋งต
FWIW, ์ด ๋์(ํ์ฌ ๊ตฌํ)์ ์ง๊ธ ์ด ์๊ฐ์ ์ ์๊ฒ ์๋นํ ์ข์ ์ ์ผ๊ธฐํ๊ณ ์์ต๋๋ค. ๋ฉ์ฌ ์ฌ์ง์ alphaMap ์คํ์ ์ ๋ถ์ฐ ๋งต(๊ณ ์ โโ์ํ๋ก ์ ์ง๋จ)๊ณผ ๋ ๋ฆฝ์ ์ผ๋ก ํธ์๋ํ์ฌ ๋ฉ์ฌ ํ์๋ฅผ ์ ๋๋ฉ์ด์ ์ผ๋ก ๋ง๋ค๋ ค๊ณ ํฉ๋๋ค. ์ฝ๊ฐ์ ์ข์ ํ์ https://github.com/mrdoob/three.js/pull/4987 ๋ฐ ์ด ๋ฒ๊ทธ๋ฅผ ํตํด ์ด๊ฒ์ด ๋ถ๊ฐ๋ฅํ๋ค๋ ๊ฒ์ ๋ฐ๊ฒฌํ์ต๋๋ค.
@jcarpenter ๋น์ ์ด ๋งํ๋ "๋ฒ๊ทธ"๋ ๋ฌด์์ ๋๊น? ๊ฐ์ ์ ์ํ ์ ์ ์ฌํญ์ ๋ฌด์์ ๋๊น?
์์ : "๋ฒ๊ทธ"๋ ์ด ๋ฌธ์ ๋ฅผ ์๋ฏธํ์ต๋๋ค. Bugzilla ๋ฌธํ์์ ๊ณผ๋ํ ์๊ฐ์ผ๋ก ์ธํ ํผ๋. :p ์ด๊ฒ์ ๋ฒ๊ทธ๊ฐ ์๋๋ผ ์๋๋ ๋์์ด๋ผ๋ ๊ฒ์ ์ดํดํฉ๋๋ค.
Cinema 4D์ ๊ฐ์ ๊ธฐ์กด์ 3D ์ฝํ ์ธ ์ ์ ์ฑ์ ๋ํ ์ ๊ฒฝํ์ ๋ฐํ์ผ๋ก WRT๋ฅผ ๊ฐ์ ํ์ฌ ์ฌ์ฉ์๊ฐ ๋ค์ ๋ ๊ฐ์ง๋ฅผ ๋ชจ๋ ํ ์ ์๋ค๊ณ ์์ํฉ๋๋ค.
๋๋ ๋ด๊ฐ ์์ ํ๊ณ ์๋ ์ฌ์ฉ ์ฌ๋ก("๋ฉ์ฌ ๊ณต๊ฐ ์ ๋๋ฉ์ด์ ์๋")์ ๊ฒฝ์ฐ ์ ํ ๋ํํ์ง ์๋ wrapS ๋ฐ wrapT์ ๋ํ ์ต์ ์ด ์์ผ๋ฉด ํ์์ ์ผ ๊ฒ์ ๋๋ค. UVW ๋งคํ์ ์ํด ํ์ผ๋ง์ ์์ ํ ๋นํ์ฑํํ๋ ์ต์ ์ด ์๋ Cinema4D์ ์ฒจ๋ถ๋ GIF์ ๋ฐ๋ผ. ๊ธฐ์กด wrapS ๋ฐ wrapT ๋ฉ์๋๋ฅผ ์ฌ์ฉํ ์๋นํ ๊ด๋ฒ์ํ ํ ์คํธ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ฉด ์ด์ ๊ฐ์ ๊ฒ์ ๋ถ๊ฐ๋ฅํฉ๋๋ค. three.js์์ ํญ๋ชฉ์ ํ์๋ฅผ ์ ๋๋ฉ์ด์ ํํ๋ ์ต์ ์ ์ ์ฒด ๋ฉ์์ ์์น์ ๋ถํฌ๋ช ๋๋ฅผ ํธ์๋ํ๋ ๊ฒ์ผ๋ก ์ ํ๋์ด ์๋ ๊ฒ ๊ฐ์ต๋๋ค... ๋ด๊ฐ ๋ญ๊ฐ๋ฅผ ๋์น๊ณ ์์ง ์๋ ํ.
๋์. ๊ณํ์ ์ด ๋ชจ๋ ๊ฒ์ ๋จ์ํํ๊ณ (์ ฐ์ด๋์์ ๋จ์ผ ๋งคํธ๋ฆญ์ค3 ์ฌ์ฉ) ํ ์ค์ฒ๋น ์คํ์ /๋ฐ๋ณต(๋๋ ์ด๋/์ค์ผ์ผ)์ ๊ฐ๋ ๊ฒ์ ๋๋ค.
์ด๊ฒ์ ๋์์ ์ฃผ๊ณ ์ถ์ ์ฌ๋์ ๋๊ตฌ๋ผ๋ ๋๋จํ ๊ฐ์ฌํ ๊ฒ์ ๋๋ค!
@jcarpenter
์ฌํ๊ฒ๋ ์ง๊ธ ๋น์ฅ ์ด๊ฒ์ ํ ์ ์๋ ์ ์ผํ ๋ฐฉ๋ฒ์ ์ฌ๋ฌ ๋ฉ์ w/ ๋ค๋ฅธ ์ฌ์ง ๋๋ ์ฌ์ฉ์ ์ ์ ์ ฐ์ด๋ ์ฌ์ง์ ์ฌ์ฉํ๋ ๊ฒ์ ๋๋ค. ๋ ๋ค three.js ์ํฌํ๋ก์ ๋ง ๋ฐ์ด๋๋ ์ฌ์ฉ์๋ฅผ ์ํ ๊ฒ์ ๋๋ค.
์ฌ์ฉ์ฑ, ์ฑ๋ฅ ๋ฐ ํ์ฅ์ฑ ์ฌ์ด์๋ ์ผ์ ํ ๊ท ํ์ด ์์ต๋๋ค. ๋ด ์ ์์ ํ ์ค์ฒ์ ์ฌ๋ฃ๊ฐ ํ์ฌ API์์ ์๋ํ๋ ๋ฐฉ์์ ๋ค์ ์์ฑํ์ฌ ํ ์ค์ฒ๊ฐ ์๊ฒฉํ๊ฒ ํ๋ฌ๊ทธ์ธํ๋ ๋งค๊ฐ๋ณ์์ด๊ณ ์คํ์ /๋ฐ๋ณต/๋ฉ ๋ชจ๋์ ๊ฐ์ ์ ฐ์ด๋์์ ์ค์ ๋ก ๊ท ์ผํ ๊ฐ์ด ํน๋ณํ ๋งํฌ๋๋๋ก ํ๋ ๊ฒ์ ๋๋ค. ์ฌ๋ฃ. ์ด๋ค ๊ฒฝ์ฐ์๋ ๋ณ๊ฒฝํ ํ์๊ฐ ์๋ ํ ์ค์ฒ์ ๋ํ UV ์ ์ด์ ์ ๋ํผ ๋ญ๋น๋ฅผ ์ํ์ง ์์ต๋๋ค(ํ์ฐ์๋ง ํ์ํ ๊ฒฝ์ฐ ํ ์ฌ์ง์ 4*5 ์ถ๊ฐ ์ ๋ํผ์ ๊ฐ๋ ๊ฒ์ ์์ฒญ๋ ๋ญ๋น์ผ ๊ฒ์ ๋๋ค). ํน์ UV๊ฐ ํ์ํ๊ณ ํ ์ค์ฒ๊ฐ ์ด๋ฌํ ์๊ตฌ ์ฌํญ์ ์ถฉ์กฑํ๋๋ก ์ฌ๊ตฌ์ถ๋๋์ง ์ฌ๋ถ๋ฅผ ๊ฐ์งํ๋ ๋ฐฐํ์์ ๋ง์ ์ด ์๊ฑฐ๋ ํ์ํ ์กฐ์ ๊ฐ๋ฅํ UV์ ์๋ฅผ ์ง์ ํ๊ธฐ ์ํด ์ผ๋ถ ๋งค๊ฐ๋ณ์๋ฅผ ์ ํ์ ์ผ๋ก ์ ๋ฌํ ์ ์๋ค๋ฉด ๋ฉ์ง ๊ฒ์ ๋๋ค. ์คํ์ ๋ฐ ๋ฐฉ๋ฒ์ ๋งคํํ์ง๋ง ํด๊ฒฐํ๊ธฐ ์ด๋ ค์ด ๋ฌธ์ ์ ๋๋ค.
๊ณํ์ ์ด ๋ชจ๋ ๊ฒ์ ๋จ์ํํ๊ณ (์ ฐ์ด๋์์ ๋จ์ผ ํ๋ ฌ3 ์ฌ์ฉ) ํ ์ค์ฒ๋น ์คํ์ /๋ฐ๋ณต(๋๋ ์ด๋/์ค์ผ์ผ)์ ๊ฐ๋ ๊ฒ์ ๋๋ค.
@mrdoob
์ด๊ฒ์ ๋งค์ฐ ๊ฐ์ฌํ ๋ณํ์ผ ๊ฒ์ ๋๋ค. ๊ณ ์ ํ ๋ฐ๋ณต ๊ฐ์ ๋ฐฐ์นํ๊ธฐ ์ํด ํ ์ค์ฒ๋ฅผ ๋ณต์ ํด์ผ ํ๋ ๊ฒ์ ๋งค์ฐ ์ฑ๊ฐ์ ์ผ์ ๋๋ค. ๋ค๋ฅธ ๋์๊ด์์๋ ์ด๋ ๊ฒ ํฉ๋๊น?
- ํ ์ค์ฒ ๋ณํ์ด ์ฌ์ง์ ์๋๋ก _per material.map_์ ์๋ฏธํฉ๋๊น? ๋ถํํ๋ ๋ง์ ์ฌ๋ฃ ๋งต์ด ์์ต๋๋ค. ๋ผ์ดํธ๋งต์ ์ ์ธํ๊ณ ๋ชจ๋ ํ ์ค์ฒ ๋ณํ์ด ๋์ผํ๋ค๊ณ ๊ณ์ ๊ฐ์ ํ ์ ์์ต๋๋ค.
๋งต๋น mat3
๊ฐ ์์ด์ผ ํ๊ณ Texture
์์ฑ์ผ๋ก ๊ตฌ์ฑ๋์ด์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
- ๋น์ ๋ ๋กํ ์ด์ ์ ์ง์ํ๊ณ ์ถ์ต๋๊น? ๊ทธ๋ ๋ค๋ฉด ํ์ ์ค์ฌ๋ ์ถ๊ฐํด์ผ ํฉ๋๋ค. ํ์ ์ค์ฌ์ ํ ์ค์ฒ ์ค์ฌ์ ๊ณ ์ ํ๊ณ ์ถ์ง ์๋ค๋ฉด ๋ง์ ๋๋ค.
ํ์ ๋ค. ์ค์์ธ์ง ์๋์ง... ํ์คํ์ง ์์ง๋ง ๋ด๊ฐ ์ดํดํ๋ ํ ์ด ๋ชจ๋ ๊ฒ์ ์
ฐ์ด๋์ ๋ํด ๋จ์ผ mat3
๋ก ์ธ์ฝ๋ฉ๋ ์ ์์ต๋๋ค(๋งต๋น).
๋ค์ ์ Matrix3
๊ฐ ์
ฐ์ด๋์ ์ ๋ฌ๋๊ณ offsetX
, offsetY
, repeatX
, repeatY
์ ์๋ ๋ณํ์ ๋ํ๋ด๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ฃผ๋ ํ๋กํ ํ์
์
๋๋ค offsetX
repeatY
, rotation
, rotationCenterX
๋ฐ rotationCenterY
.
center
๊ฐ ์ต์
์ผ๋ก ํ์ฉ๋์ง ์์ผ๋ฉด ( 0.5, 0.5 )
๊ณ ์ ์ฐ๊ฒฐ๋์ด์ผ ํฉ๋๋ค.
๋๊ธ ํ์ํฉ๋๋ค.
ํธ์ง: ๋ฐ๋ชจ ์ ๋ฐ์ดํธ๋จ
์ด๊ฒ์ ํ๋ฅญํฉ๋๋ค! :+1: :+1:
ํ์ง๋ง translation
๋ฐ scale
( offset
๋ฐ repeat
๋์ )๋ก ๊ฐ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
์๋ก์ด ์ฌ๋ฃ ์์ฑ์ ์ ํํ ๋ฌด์์ด์ด์ผ ํฉ๋๊น? ๋ง์ ์ฌ๋ฃ ๋งต์ด ์์ต๋๋ค.
ํ ์ค์ฒ ์์ฑ์์ ๋ฌด์์ ์ ๊ฑฐํด์ผ ํฉ๋๊น?
wrapS/T
๊ฐ ํ
์ค์ฒ์ ๋จ์ ์์ด์ผ ํ๋ค๊ณ ๊ฐ์ ํฉ๋๋ค.
texture.offset
๋ฐ texture.repeat
๋ฅผ ์ ๊ฑฐํด์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
์ ์์ฑ์ texture.translation
, texture.rotation
, texture.scale
, texture.center
๋ฐ texture.matrix
์ด์ด์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋ ๋๋ง ์ ํธ์ถ๋๋ texture.updateMatrix()
๋ฉ์๋๋ ํ์ํ ๊ฒ์
๋๋ค. ๋ฌผ๋ก ์ด๊ฒ์ ํ
์ค์ฒ๋ฅผ ์ฌ์ฌ์ฉํ๋๋ผ๋ ํ ๋ฒ๋ง ํ๋๋ก ํด์ผ ํ๋ ๋ฌธ์ ๊ฐ ์์ต๋๋ค.
์ด ๊ฒ์๋ฌผ์ ์ ๋ชฉ๊ณผ https://github.com/mrdoob/three.js/issues/5876#issuecomment -69483293์ ์ธ์๋ฅผ ์ฐธ๊ณ ํ์ฌ ์ด๋ฌํ ์์ฑ์ ๋จธํฐ๋ฆฌ์ผ๋ก ์ฎ๊ธฐ๋ ๊ฒ์ด ํฌ์ธํธ๋ผ๊ณ ์๊ฐํ์ต๋๋ค.
/ping @bhouston์ ๋ํ ์๊ฒฌ.
๋ด ์๊ฐ์ ํ ์ค์ฒ ์คํ์ /๋ฐ๋ณต์ด ๊ฐ๋ฅํ ํ ๋ง์ด UV์ ๊ตฌ์์ ธ์ผ ํ๋ค๋ ๊ฒ์ ๋๋ค. ๋ ์ฝ์ต๋๋ค. ์ด๊ฒ์ด UE4/Unity 5๊ฐ ๋๋ถ๋ถ์ ์์ ์ ์ํํ๋ ๋ฐฉ์์ ๋๋ค.
์์ธ๋ Unity 5๊ฐ ๋ชจ๋ ํ ์ค์ฒ์์ ๊ณต์ ๋๋ ์ฌ์ง๋น ํ๋์ ์ ์ญ ์คํ์ /๋ฐ๋ณต์ ์ง์ ํ ์ ์๋ค๋ ์ ์ ๋๋ค. ์กฐ์ ํ๋ ๊ฒ์ ์๋ฏธ๊ฐ ์์ต๋๋ค.)
์ฌ๊ธฐ์ ๋ง์ ์ ์ฐ์ฑ์ ์นํธํ์ง ์๋ ์ด์ ๋ ์ ๋ฌธ์ ์ผ๋ก ์์ฑ๋ ๋ชจ๋ธ์๋ ์ผ๋ฐ์ ์ผ๋ก ํ์ํ์ง ์์ ์ ์ ํ UV๊ฐ ์๊ธฐ ๋๋ฌธ์ ๋๋ค. ์ฝํ ์ธ ์์ฑ ๋๊ตฌ์๋ ์ด๋ฅผ ๊ตฝ๋ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค. ๋ค๋ฅธ ๋ฌธ์ ๋ WebGL์ด Fragment Uniforms -- 16 Vec4์ ๋ํด ํฐ๋ฌด๋์์ด ๋ฎ์ ํํ์ ์ ๊ฐ์ง๊ณ ์๋ค๋ ๊ฒ์ ๋๋ค. ๋งต๋น ๋ฐ๋ณต/์คํ์ ์ด ์์ด์ผ ํ๊ณ ๊ณง ๋ง์ ๋งต์ ์ป๊ฒ ๋๋ค๋ฉด ๋งค์ฐ ์ ์ ๊ฐ์น๋ก Fragment Uniforms๋ฅผ ๋ญ๋นํ๊ฒ ๋ ๊ฒ์ ๋๋ค.
์ค์ ๋ก ์ต๊ทผ Clara.io์์ ๋ฐ๋ณต/์คํ์ ์ ์ถ๊ฐํ ๋ค์ ํ ์ค์ฒ๋น ๋ฐ๊ธฐ/๊ฒ์ธ ์ปจํธ๋กค์ ์ถ๊ฐํ์ผ๋ฉฐ ๋ชจ๋ Apple iOS ์ฅ์น์ ๊ฐ์ ์ ๊ฐํ ์ฅ์น์์ ์กฐ๊ฐ ์ ๋ํผ ์ค๋ฒํ๋ก๋ก ์ด์ด์ง๊ธฐ ๋๋ฌธ์ ์ด๋ฌํ ๋ณ๊ฒฝ ์ฌํญ์ ์ทจ์ํ ๊ฒ์ ๋๋ค. ๋ฐ๋ณต/์คํ์ ๋ฐ ๋ฐ๊ธฐ/๊ฒ์ธ์ด NVIDIA 980์ด ํ์ฌ๋ ๋ฐ์คํฌํ์์ ํ๋ฅญํ๊ฒ ์๋ํ์ง๋ง ์ฐ๋ฆฌ๋ ๊ณ ๊ธ ์ปดํจํฐ๊ฐ ์๋ ๋ชจ๋ ์ฌ๋์ ์ํด ์ค๊ณํด์ผ ํฉ๋๋ค. ;)
์ฐ๋ฆฌ๋ ์กฐ๊ฐ ์ ๋ํผ์ ์กด์คํด์ผ ํ๋ฉฐ ํ์ํ ๋๋ง ์ฌ์ฉํด์ผ ํฉ๋๋ค. ๋๋ ์ด๊ฒ์ด ๊ทธ๋ฌํ ๊ฒฝ์ฐ ์ค ํ๋๊ฐ ์๋๋ผ๊ณ ์๊ฐํฉ๋๋ค.
์์ธ๋ Unity 5๊ฐ ์ฌ๋ฃ๋น ํ๋์ ์ ์ญ ์คํ์ /๋ฐ๋ณต์ ์ง์ ํ ์ ์๋ค๋ ์ ์ ๋๋ค.
์ด๊ฒ์ ๊ธฐ๋ณธ์ ์ผ๋ก three.js๊ฐ ์ง๊ธ ํ๋ ์ผ์ ๋๋ค. ๋น๋ก ๊ทธ๊ฒ์ด ํ์ฐ ๋งต์์ ์คํ์ /๋ฐ๋ณต์ ๊ฐ์ ธ์ค๊ณ ๋ค๋ฅธ ๋ชจ๋ ์ฌ์ง ํ ์ค์ฒ๋ ํด๋น ๋งต์ ์ค์ ์ ์ฌ์ฉํ์ง๋ง.
์ ์์ ํ ์ค์ฒ์์ ์คํ์ /๋ฐ๋ณต์ ์ ๊ฑฐํ๊ณ ๋์ ์ฌ๋ฃ์ ์ถ๊ฐํ๋ ๊ฒ์ ๋๋ค. ์๋ง๋ ์ด๋ฆ์ด ๋ณ๊ฒฝ๋ ๊ฒ์ ๋๋ค. ๋ค์ ๋งํ์ง๋ง, ๋ชจ๋ ๋จธํฐ๋ฆฌ์ผ ํ ์ค์ฒ๋ ๋์ผํ ์ค์ ์ ๊ณต์ ํฉ๋๋ค(์ผ๋ถ ์ฌ์ฉ์๋ ์ด์ ๋ํด ๋ง์กฑํ์ง ์์์ง๋ผ๋). ์ด๋ ๊ฒ ํ๋ฉด ๊ท ์ผํ ์ฌ์ฉ๋์ ๋ฎ๊ฒ ์ ์งํ ์ ์์ต๋๋ค.
๋ถํํ๋, ์ฐ๋ฆฌ๋ ์ด๊ฒ์ ๋ํด ๋ง์ ํฉ์๋ฅผ ์ป์ง ๋ชปํ๊ณ ์์ต๋๋ค.
Unity 5๊ฐ ํ๋ ์ผ์ ํ๋ ๊ฒ์ ์ข์ ์๊ฐ์ ๋๋ค. ์ง๊ฐ์ด ์๋ ์์ฌ์๋ ์ฌ๋ ค๋ด ๋๋ค. ๋น์ ์ ๋ด ์ง์์ด ์์ต๋๋ค.
๋งต๋ณ์ ์ค์ ๋ก ์ด์์ ์ด์ง๋ ์์ง๋ง ํ์ํ ๊ฒฝ์ฐ์ ๋๋นํ์ฌ ์ฌ๋ฃ๋ฅผ ๋น๋ํ ๋ ํ๋๊ทธ/ํค๋ก ์ง์ ํ์ฌ ํด๊ฒฐํ ์ ์์ต๋๋ค.
์ผ๋ฐ์ ์ผ๋ก ์ ฐ์ด๋์์ UV๋ฅผ ์์ ํ๋ ์ ์ผํ ์ด์ ๋ UV๊ฐ ์ ๋๋ฉ์ด์ ๋๊ธฐ๋ฅผ ์ํ๊ธฐ ๋๋ฌธ์ ๋๋ค. UV๋ฅผ ์ ์ ์ผ๋ก ๋ณํํ๋ ค๋ ๊ฒฝ์ฐ ์ด ๊ธฐ๋ฅ์ ์ถ๊ฐํ๊ธฐ ์ํด ์ ฐ์ด๋๋ฅผ ์์ ํด์๋ ์ ๋ฉ๋๋ค.
์ ฐ์ด๋์ ๋ํด ์ ์๋ ์ ์ผํ ๋ณ๊ฒฝ ์ฌํญ์
vUv = uv * offsetRepeat.zw + offsetRepeat.xy;
~์ ํจ๊ป
vUv = ( uvTransform * vec3( uv, 1 ) ).xy;
ํ์ธ. ์ด๊ฒ์ ์ด๋ป์ต๋๊น... texture.dynamic
(๊ธฐ๋ณธ์ ์ผ๋ก false
)๋ฅผ ์ถ๊ฐํ์ฌ ๋ค์์ ์์ฑํฉ๋๋ค.
vUV = uv;
์ฌ์ฉ์๊ฐ ์ค์ ํ๋ ๊ฒฝ์ฐ texture.dynamic
๋ก true
์ฐ๋ฆฌ๊ฐ ๊ณ์ฐ texture.matrix
์์ texture.translation
, texture.rotation
, texture.scale
๋ฐ texture.center
, ์ฐ๋ฆฌ๋ ๊ทธ๊ฒ์ programa์ ์ ๋ฌํ๊ณ ์ฐ๋ฆฌ๋ ๋ค์์ ์์ฑํฉ๋๋ค:
vUv = ( uvTransform * vec3( uv, 1 ) ).xy;
๋ฌผ๋ก texture.dynamic
๋ณ๊ฒฝ๋๋ฉด ํ๋ก๊ทธ๋จ์ ๋ค์ ์ปดํ์ผํด์ผ ํฉ๋๋ค.
๊ทธ๋ ๊ฒ ํ๋ฉด ๋ ์ธ๊ณ์ ์ฅ์ ์ ๋ชจ๋ ์ป์ ์ ์์ต๋๊น?
@mrdoob
scale
๋ ํ
์ค์ฒ์ ์์ฑ์
๋๊น ์๋๋ฉด texture.scale
๋ ์ฌ์ง์ ์์ฑ์
๋๊น? ๊ทธ๊ฒ์ด ์ด ์ค๋ ๋์ ์ ๋ถ์ด๊ธฐ ๋๋ฌธ์ ํ์์ด๊ธฐ๋ฅผ ๋ฐ๋๋๋ค..matrix
์์ฑ์ ํ์ํ์ง ์์ต๋๋ค. ์๋ก์ด Matrix3
๋ ์ฌ๋ฃ ์ ๋ํผ offsetRepeat
์ ๋์ฒดํ๋ ์ ๋ํผ์
๋๋ค. ๋ ๋๋ฌ์ ๋ค๋ฅธ ๋งค๊ฐ๋ณ์์์ ๊ณ์ฐ๋์ด ๋ค๋ฅธ ์ ๋ํผ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก GPU์ ์ ๋ฌ๋ฉ๋๋ค.
- ๊ทํ๊ฐ ๋ณด๊ธฐ์
scale
๋ ํ ์ค์ฒ์ ์์ฑ์ ๋๊น ์๋๋ฉดtexture.scale
๋ ์ฌ์ง์ ์์ฑ์ ๋๊น? ๊ทธ๊ฒ์ด ์ด ์ค๋ ๋์ ์ ๋ถ์ด๊ธฐ ๋๋ฌธ์ ํ์์ด๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
์ด ์ค๋ ๋์ ๋์ํ์ง ์์ต๋๋ค. mapMatrix
, envMapMatrix
, ... ๋ํ mapTranslation
, mapRotation
, mapScale
์ฌ๋ฃ๋ฅผ ์ค์ผ์์ผ์ผ ํ๋ค๊ณ ์๊ฐํ์ง ์์ต๋๋ค. THREE.Texture
์ translation
, rotation
, scale
๊ทธ๋ฆฌ๊ณ ์๋ง๋ center
๊ฐ ์์ผ๋ฉด ๋ ๊นจ๋ํ๋ค๊ณ โโ์๊ฐํฉ๋๋ค.
.matrix
์์ฑ์ด ํ์ํ์ง ์์ต๋๋ค. ์๋ก์ดMatrix3
๋ ์ฌ๋ฃ ์ ๋ํผoffsetRepeat
์ ๋์ฒดํ๋ ์ ๋ํผ์ ๋๋ค. ๋ ๋๋ฌ์ ๋ค๋ฅธ ๋งค๊ฐ๋ณ์์์ ๊ณ์ฐ๋์ด ๋ค๋ฅธ ์ ๋ํผ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก GPU์ ์ ๋ฌ๋ฉ๋๋ค.
์ฐ๋ฆฌ๋ ๊ทธ๋ฐ ๊ฒ์ด ํ์ํฉ๋๋ค. ๋ค๋ฅธ ๋งต์์ ๋์ผํ ํ
์ค์ฒ๋ฅผ ์ฌ์ฌ์ฉํ๋ค๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค. ์ฐ๋ฆฌ๋ ๋ชจ๋ ์ธ์คํด์ค์ ๋ํด Matrix3
๋ฅผ ๊ณ์ฐํ๊ณ ์ถ์ง ์์ต๋๋ค.
์ด ์ค๋ ๋์ ๋์ํ์ง ์์ต๋๋ค. mapMatrix, envMapMatrix, ...๋ mapTranslation, mapRotation, mapScale์ ์ฌ์ฉํ์ฌ ์ฌ๋ฃ๋ฅผ ์ค์ผ์์ผ์ผ ํ๋ค๊ณ ์๊ฐํ์ง ์์ต๋๋ค. THREE.Texture์ ๋ณํ, ํ์ , ํฌ๊ธฐ ๋ฐ ์ค์์ด ์์ผ๋ฉด ๋ ๊นจ๋ํ๋ค๊ณ โโ์๊ฐํฉ๋๋ค.
๋ค๋ฅธ ๋ฐ๋ณต ์์ฑ์ ๊ฐ์ง๋ ค๋ฉด ํ ์ค์ฒ๋ฅผ ๋ณต์ ํด์ผ ํฉ๋๊น? ์์ ์ฅ๋ฉด์์๋ ๋ณ ๋ฌธ์ ๊ฐ ์๋์ง๋ง ์ด๋ฏธ 40๊ฐ ์ด์์ ํ ์ค์ฒ๊ฐ ์๋ ํฐ ์ฅ๋ฉด์์๋ ๋ฉ๋ชจ๋ฆฌ ์ ๋ชฝ์ ๋๋ค.
@titansoftime image
๋ THREE.Texture
์์ ๋ถ๋ฆฌ๋์ด์ผ ํฉ๋๋ค. ์ด์์ ์ผ๋ก๋ translation
, rotation
, ... ๊ตฌ์ฑ์ด ๋ค๋ฅธ THREE.Texture
ํ๋์ ๋จ์ผ THREE.Image
์ฌ์ฉํ ์ ์์ต๋๋ค.
@titansoftime ์ด๋ฏธ์ง๋
๊ทธ๊ฒ์ ์๋ฏธ๊ฐ ์์ต๋๋ค. texture.clone()์ด ์ด๋ฏธ ์ด๋ฐ ์์ผ๋ก ์๋ํฉ๋๊น, ์๋๋ฉด ์๋์ผ๋ก ์ค์ ํด์ผ ํฉ๋๊น?
texture.clone()
๋ ๊ทธ๋ฐ ์์ผ๋ก ์๋ํ์ง๋ง WebGLRenderer
๋ ์ด๋ฏธ์ง๊ฐ ๋์ผํ์ง ์ ์ ์์ผ๋ฏ๋ก ํ
์ค์ฒ ์
๋ก๋๊ฐ ํ์ํ์ง ์์ต๋๋ค...
์ด ์ค๋ ๋์ ๋์ํ์ง ์์ต๋๋ค. mapMatrix, envMapMatrix, ...๋ mapTranslation, mapRotation, mapScale์ ์ฌ์ฉํ์ฌ ์ฌ๋ฃ๋ฅผ ์ค์ผ์์ผ์ผ ํ๋ค๊ณ ์๊ฐํ์ง ์์ต๋๋ค. THREE.Texture์ ๋ณํ, ํ์ , ํฌ๊ธฐ ๋ฐ ์ค์์ด ์์ผ๋ฉด ๋ ๊นจ๋ํ๋ค๊ณ โโ์๊ฐํฉ๋๋ค.
์ด๊ฒ์ด ๊ธฐ๋ณธ์ ์ผ๋ก ์ฐ๋ฆฌ๊ฐ ์ง๊ธ ํ๋ ์ผ์
๋๋ค. ๊ฐ ํ
์ค์ฒ์๋ ๊ณ ์ ํ offset
์์ฑ์ด ์์ผ๋ฉฐ ๊ฐ๋ณ ์คํ์
์ ์ ์ฉ๋์ง ์์ต๋๋ค. ๋ ๋๋ฌ๋ ์ฌ์ง์ ๊ฐ ๋งต์ ๋ํด ๋์ผํ ์คํ์
์ ์ฌ์ฉํฉ๋๋ค.
FWIW, https://github.com/mrdoob/three.js/issues/5876#issuecomment -69483293 ์์ ๋งํ ๋๋ก ํด์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
API๊ฐ @jcarpenter ๊ฐ ์ํ๋ ์์
์ ํ์ฉํ์ง ์๋ ์ด์ ๋ฅผ ์ ์ ์์ต๋๋ค( alphaMap
์ ์คํ์
์ ์ ๋๋ฉ์ด์
ํจ๊ณผ๋ฅผ ์ฃผ๋ ๋ฐ๋ฉด map
๋ ๋์ผํ๊ฒ ์ ์ง๋จ ). ์บ๋ฒ์ค์์ ๊ทธ๋ ๊ฒ ํ ์๋ ์์ง๋ง ๋์ GPU์ ์์
์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
์ฌ๋์ด ํ ์์๋ ์ผ์ ํค์ด ์์ ... ๋ค๋ฅธ ๋งต์ ์คํ์
(offset)๋ก ์ฌ์ํ์ฌ์ด alphaMap
์ค์ผ์ผ๋ง ๋ง normalMap
, ๋ฑ
์ฌ๋ฃ๋น uvTransform
ํ๋๋ง ๊ฐ๋ ๊ฒ์ ๋งค์ฐ ์ ํ์ ์ธ ๊ฒ ๊ฐ์ต๋๋ค.
์ค, ์ ๊น. ์ฌ๋ฃ๋ณ๋ก ์ ํธํ์๋ ์ด์ ๋ฅผ ์ ๊ฒ ๊ฐ์์. ์ด๋ ๊ฒ ํ๋ฉด ์กฐ๊ฐ ์ ฐ์ด๋์์ ํฝ์ ๋น uv๋ฅผ ๊ณ์ฐํ๋ ๋์ ์ ์ ์ ฐ์ด๋์์ ๋จ์ผ vUv๊ฐ ๊ณ์ฐ๋ฉ๋๋ค. ์ค๋ฅธ์ชฝ?
์คํ์ ์ ์ค์ ๋ก ์ฌ๋ฃ์ ์ ๋ํผ์ ์ฌ์ฉํ์ฌ ๊ตฌํ๋๊ณ ํ ์ค์ฒ์ ์๋ฌด ๊ด๋ จ์ด ์๊ธฐ ๋๋ฌธ์ ์ฌ๋ฃ๋ณ์ด ์ด์์ ์ ๋๋ค. ์๋ง์ ์๋ก์ด ๊ฐ์ฒด/ํ ์ค์ฒ(JS์์๋ ์๋นํ ๋์๊ณ WebGL์์๋ ๋์ฐํจ)๋ ์ฌ์ฉ์์๊ฒ ์จ๊ฒจ์ ธ ์๋ ์ฌ๋ฃ ์ ๋ํผ์ ๊ธฐ๋ฅ์ผ ๋ฟ์ธ ๊ฒ์ ์ ์ดํ๊ธฐ ์ํ ๊ฒ์ ๋๋ค. ๊ฒฐ์ฝ ํ ์ค์ฒ์ ์ผ๋ถ๊ฐ ์ ๋ฆฌํ๊ฑฐ๋ ๋ ํจ์จ์ ์ด๊ฑฐ๋ ๋ ๋ช ํํ์ง ์์ผ๋ฉฐ ๋ฐํ์์ ๋ณ๊ฒฝ๋๋ UV, ์ ๋๋ฉ์ด์ ์ ์ง์ ํ๋ ์ค์ ์์ฉ ํ๋ก๊ทธ๋จ์ด API๋ก ์ธํด ๋๋ฆฌ๊ณ ๋นํจ์จ์ ์ผ๋ก ๋ ๋๋ง๋จ์ ์๋ฏธํฉ๋๋ค.
ํ ์ค์ฒ๋ ์ด๋ฏธ์ง์ ๊ทธ ์ด๋ฏธ์ง์ ๊ด๋ จ๋ ๋ชจ๋ ๊ฒ์ ์ง์ ํด์ผ ํฉ๋๋ค. UV ์คํ์ ์ ์ด๋ฏธ์ง/์ด๋ฏธ์ง ์์ฑ๊ณผ ์๋ฌด ๊ด๋ จ์ด ์์ผ๋ฉฐ ํ ์ค์ฒ๋ฅผ ํ์ํ๋ ๋จธํฐ๋ฆฌ์ผ๊ณผ ๊ด๋ จ๋ ๋ชจ๋ ๊ฒ์ ๋๋ค. ์ด ๊ธฐ๋ฅ์ด ๋จธํฐ๋ฆฌ์ผ์ ์ผ๋ถ๊ฐ ์๋ ๊ฒฝ์ฐ์๋ ์ด ๊ธฐ๋ฅ์ ๊ฐ๋ ๊ฒ์ ๋ง๋ ์ ๋ฉ๋๋ค. ๋ง์ ๊ฒฝ์ฐ์ ์ค์ ๋ก ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ ค๋ ๊ฒฝ์ฐ ๋ง์ ํ ์ค์ฒ๋ฅผ ๋์์ ์ ๋ฐ์ดํธํฉ๋๋ค.
์ ๋๋ฉ์ด์ ํ์ผ์ ๋ชจ๋ ํ๋ ์์ ๋ํด ๋ค๋ฅธ ์ด๋ฏธ์ง๊ฐ ์๊ณ ํด๋น ํ์ผ์ ์คํ์ /๋ฐ๋ณต๋ ์ ์ดํ๊ณ ์ถ์ดํ๋ค๊ณ ์์ํด ๋ณด์ญ์์ค. ๋ค์ด์ค๋ ๋ชจ๋ ํ๋ ์์ ์คํ์ ์ผ๋ก ์ ๋ฐ์ดํธํด์ผ ํ๊ณ ํด๋น ํ์ผ์ ์ฌ์ฉํ๋ ๋ชจ๋ ๊ณ ์ ํ ์ฌ๋ฃ ์ธ์คํด์ค์ ๋ํ ๋ชจ๋ ํ๋ ์์ ๋ณต์ฌ๋ณธ์ด ์์ด์ผ ํฉ๋๋ค. ์ค์ ๋ก ์ ์ดํ๋ โโ๊ฒ์ ๋ํด ์๋ฐฑ ๊ฐ์ ์๋ก์ด ๊ฐ์ฒด์ ์ถ๊ฐ ํ ๋น์ผ๋ก ๋น ๋ฅด๊ฒ ๋๋ฉ์ด์ฒ๋ผ ์์ ๋๋ค. ์ ๋นํ ์ด์ ์์ด ์ด๋ฌํ ๋ชจ๋ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ๋ ์ฅ๋ฉด ๋ค์์ ์ฌ๋ฃ๋น ๋ช ๊ฐ์ ์๋ ๊ฐ ๋ฐ์ํฉ๋๋ค.
๋งต๋น ๋ณํ์ ๊ดํด์๋, ์ข๊ฒ ์ง๋ง ๋๋ถ๋ถ์ ๊ฒฝ์ฐ ๊ท ์ผ ๋น์ฉ์ด ์ด์ ์์ด ๋๋ฌด ๋์ต๋๋ค. ๋ณํ์ด ๊ณ ์ ํ๊ฑฐ๋ ๊ณต์ ๋๋ ๋์ ์ด์ด์ผ ํ๋ ์๊ธฐ์ ๋ฐฉ๋ฒ์ ์ ์ดํ๋ โโ๋ณต์กํ API๊ฐ ์๋ ๊ฒฝ์ฐ๋ฅผ ์ ์ธํ๊ณ IMO ๊ทธ ํต์ ๋ฅผ ๊ฐ๋ ๊ฒ์ ์ข์ ์ผ์ด์ง๋ง ์ ์คํ๊ฒ ์๊ฐํด์ผ ํ ๊ฒ์ ๋๋ค.
์ค, ์ ๊น. ์ฌ๋ฃ๋ณ๋ก ์ ํธํ์๋ ์ด์ ๋ฅผ ์ ๊ฒ ๊ฐ์์. ์ด๋ ๊ฒ ํ๋ฉด ์กฐ๊ฐ ์ ฐ์ด๋์์ ํฝ์ ๋น uv๋ฅผ ๊ณ์ฐํ๋ ๋์ ์ ์ ์ ฐ์ด๋์์ ๋จ์ผ vUv๊ฐ ๊ณ์ฐ๋ฉ๋๋ค. ์ค๋ฅธ์ชฝ?
์๋์ค. uv๋ ์ธ์ ๋์ฒ๋ผ ์ ์ ์ ฐ์ด๋์์ ๊ณ์ฐ๋ฉ๋๋ค.
์คํ๋ผ์ดํธ ์ํธ์ 20๊ฐ์ ์คํ๋ผ์ดํธ๋ฅผ ์์ํด ๋ณด์ญ์์ค. ํ์ฌ http://threejs.org/examples/misc_ubiquity_test2.html ์์์ ๊ฐ์ด 20๊ฐ์ ๋ณต์ ๋ ์ฌ๋ฃ์ 20๊ฐ์ ๋ณต์ ๋ ํ
์ค์ฒ๊ฐ ํ์ํฉ๋๋ค SpriteMaterial.rotation
์์ต๋๋ค.)
์ฌ๋ฃ๋ก ์คํ์ ์ ์ด๋ํ๋ ค๋ฉด ๋ณต์ ๋ ์ฌ๋ฃ 20๊ฐ์ โโํ ์ค์ฒ 1๊ฐ๊ฐ ํ์ํฉ๋๋ค.
์ค์ ๋ก ์คํ์ ์ ์คํ๋ผ์ดํธ๋ก ์ด๋ํ๋ ค๋ฉด 1๊ฐ์ ์ฌ์ง๊ณผ 1๊ฐ์ ํ ์ค์ฒ๊ฐ ํ์ํฉ๋๋ค.
์คํ๋ผ์ดํธ ์ํธ์ 20๊ฐ์ ์คํ๋ผ์ดํธ๋ฅผ ์์ํด ๋ณด์ญ์์ค. ํ์ฌ 20๊ฐ์ ๋ณต์ ๋ ์ฌ๋ฃ์ 20๊ฐ์ ๋ณต์ ๋ ํ ์ค์ฒ๊ฐ ํ์ํฉ๋๋ค.
์ด, ๋๋์ด ์ฌ์ฉ ์ฌ๋ก๋ฅผ ๊ณ ๋ คํ์ง ์์์ต๋๋ค. ๊ฐ์ฌ ํด์!
์ด๊ฒ์ ๊ฒ ์๊ฐํด๋ณผ๊ฒ...
๋๋ ํ ์ค์ฒ์์ UV ๋ณํ์ด ์๋ ๊ฒ์ ์นํธํฉ๋๋ค.
๋ ๊ฐ์ง ์ด์ ๊ฐ ์์ต๋๋ค. (1) ํผ๋์ค๋ฝ๊ณ , (2) ์ ํํ ์ด๋ฒคํธ๊ฐ ๋ ๋ง๊ณ , (2) ๋ญ๋น์ ๋๋ค.
ํผ๋: ๊ทธ ์ด์ ๋ ๋ฉ์ธ ๋งต์ ๋ํด ํ๋์ UV ๋ณ์๋ง ์๊ธฐ ๋๋ฌธ์ ๋๋ค. ๊ทธ๋ฌ๋ ํ ์ค์ฒ ์ค ํ๋์ UV ๋ณํ์ด ์๋ ๊ฒฝ์ฐ ์ด UV ๋ณํ์ด ์ฒซ ๋ฒ์งธ UV๋ฅผ ์ฌ์ฉํ๋ ๋ชจ๋ ๋งต์ ์ ์ฉ๋ ์ ์๋ค๋ ๊ฒ์ด ํผ๋์ค๋ฝ์ต๋๋ค. ๋ค๋ฅธ ํ ์ค์ฒ์ ๋ณํ์ด ์๋์ง ์ฌ๋ถ์ ๊ด๊ณ์์ด ์ฑ๋. ๊ฐ ๋งต์ด ๋จธํฐ๋ฆฌ์ผ์ ๊ณ ์ ํ UV ๋ณํ์ ๊ฐ์ง ์ ์๋๋ก ํ์ฉํ๋ค๋ฉด ํ ์ค์ฒ์ ๊ด๋ จ๋ UV ๋ณํ์ด ๋ ๊ด์ฐฎ์ ๊ฒ์ ๋๋ค. ํ์ง๋ง ๋จํธ์ ๊ท ์ผํ ์ฌ์ฉ์ผ๋ก ์ธํด ๊ทธ๋ ๊ฒ ํ๊ธฐ ์ด๋ ต์ต๋๋ค.
๋ ๋ง์ ์ด๋ฒคํธ ์ ํ: Clara.io์์ ๋ง๋ ๋ ๋ค๋ฅธ ๋ฌธ์ ๋ ํ ์ค์ฒ ๋งค๊ฐ๋ณ์์ ์ ๋๋ฉ์ด์ ์ ์ ์ฉํ๋ ค๊ณ ํ ๋ ๋ฐ์ํ๋ ์ด๋ฒคํธ ์ ํ์ ๋๋ค. ๊ฐ ํ ์ค์ฒ๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ์ฉ ์ค์ธ ๊ฐ ๋จธํฐ๋ฆฌ์ผ์ ์ถ์ ํ ๋ค์ ํด๋น ๋จธํฐ๋ฆฌ์ผ์ ๋๋ฝ๊ณ ๋ค์ ๊ณ์ฐํด์ผ ํ๋ค๊ณ ์๋ ค์ผ ํฉ๋๋ค. ์ด ์์ ์ ์ํํ๋ ๊ฒ์ด ๋ถ๊ฐ๋ฅํ ๊ฒ์ ์๋๋๋ค. ๋ ๋ง์ ์์ ์ด ํ์ํ ๋ฟ์ ๋๋ค.
๋ญ๋น: ๋ค๋ฅธ ๋ฌธ์ ๋ 3D ๋ชจ๋ธ ๋๋ ์ ์์ ์ธ์คํด์ค๊ฐ ์ฌ๋ฌ ๊ฐ ์๊ณ ๋ชจ๋ ๋์ผํ ์ ๋๋ฉ์ด์ ํ ์ค์ฒ๊ฐ ์๋ ๊ฒฝ์ฐ์ ๋๋ค. ์ด ๊ฒฝ์ฐ ํ ์ค์ฒ ๋ฐ์ดํฐ ์์ฒด๊ฐ ๋์ผํ๋๋ผ๋ ๋ค๋ฅด๊ฒ ์ ๋๋ฉ์ด์ ๋๋๋ก ํ๊ธฐ ์ํด ๋ฉ๋ชจ๋ฆฌ์ ํ ์ค์ฒ์ ๊ณ ์ ํ ๋ณต์ฌ๋ณธ์ด ์์ด์ผ ํฉ๋๋ค. ๊ทธ๋ฐ ๋ฉด์์ ๋จธํฐ๋ฆฌ์ผ์ UV ํธ๋์คํผ ๋ฐ์ดํฐ๋ฅผ ๋ฃ๋ ๊ฒ๊ณผ ๋น๊ตํ๋ฉด ์กฐ๊ธ ๋ญ๋น์ ๋๋ค.
๋ฐ๋ผ์ ๋จธํฐ๋ฆฌ์ผ๋น UV ๋ณํ์ด ํ๋๋ง ํ์ฉ๋๋ค๋ฉด ๋จธํฐ๋ฆฌ์ผ ์์ฒด์ ์ ์ฉํ๊ฒ ์ต๋๋ค. UV ์คํ์ , ์ฌ๋ฃ ํ์ ์ด ์๋ Unity 5 ๋ชจ๋ธ์ ๋ฐ๋ฆ ๋๋ค. ๊ฒ์ ๊ฐ๋ฐ์๋ ์ด๋ฏธ ์ด ์ ๊ทผ ๋ฐฉ์์ ์ต์ํฉ๋๋ค.
์คํ๋ผ์ดํธ๋ ๋จธํฐ๋ฆฌ์ผ์์๋ UV Transform์ผ๋ก ์ ์ฒ๋ฆฌ๋๋ค๊ณ ์๊ฐํฉ๋๋ค. ์์ 3D ๋ชจ๋ธ ์ฌ๋ก์ ๋งค์ฐ ์ ์ฌํฉ๋๋ค.
Having only one uvTransform per material seems very very limiting.
์ฌ๊ธฐ์ ์ ์ ์ผ๋ก ๋์ํฉ๋๋ค. ์ด ๊ธฐ๋ฅ์ด ์์ผ๋ฉด ๋งค์ฐ ์ ํ์ ์ ๋๋ค. ๋ชจ๋ ์คํ์ ์ด ํจ๊ป ์ ๊ฒจ ์๊ธฐ ๋๋ฌธ์ ์ ๊ณต๋์ง ์๋ ํ์์ ์ธ ํจ๊ณผ๊ฐ ์ฌ๊ธฐ์์ ์ ๊ณต๋ ์ ์์ต๋๋ค.
๊ทธ๋ฌ๋ ํด๋ก ์ ์ง์์ํค์ง ์๊ณ ์ด๋ป๊ฒ ์ด ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์์ต๋๊น?
ํ ์ค์ฒ๊ฐ ์๋ ๋จธํฐ๋ฆฌ์ผ์ ๊ฐ์ ์ง์ ํ๋ ๊ฒ์ด ๋ชจ๋ ํ ์ค์ฒ๊ฐ ์ผ์นํ๋ ์ผ๋ฐ์ ์ธ ์ฌ์ฉ ์ฌ๋ก์ ์ ํฉํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
์ฌ๊ธฐ์ ์ ์ ์ผ๋ก ๋์ํฉ๋๋ค. ์ด ๊ธฐ๋ฅ์ด ์์ผ๋ฉด ๋งค์ฐ ์ ํ์ ์ ๋๋ค. ๋ชจ๋ ์คํ์ ์ด ํจ๊ป ์ ๊ฒจ ์๊ธฐ ๋๋ฌธ์ ์ ๊ณต๋์ง ์๋ ํ์์ ์ธ ํจ๊ณผ๊ฐ ์ฌ๊ธฐ์์ ์ ๊ณต๋ ์ ์์ต๋๋ค.
๊ทธ๋ฌ๋ ํด๋ก ์ ์ง์์ํค์ง ์๊ณ ์ด๋ป๊ฒ ์ด ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์์ต๋๊น?
THREE.ShaderMaterial
๋๋ THREE.RawShaderMaterial
๋ ์ด ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ฉฐ ํ์ฌ ์ผ๋ฐ ์ฌ๋ฃ์ ํจ๊ป ์๋ํ์ง ์๋ ๊ฒฝ์ฐ ์ด ๊ฒฝ๋ก๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
๋ ํํคํ ์์ ์ ์ํํ๋ ๊ฒฝ์ฐ ๋งต ๋ฐ๋ณต ๋ฐ ์คํ์ ์ ๋ ๋ฆฝ์ ์ผ๋ก ์กฐ์ ํ๋ ๊ฒ๋ณด๋ค ๋ ํํคํ ์ ์์ผ๋ฏ๋ก ์ด์จ๋ ์ด ๋ฐฉ๋ฒ์ผ๋ก ๊ธฐ์ธ์ผ ๊ฒ์ ๋๋ค.
์ด๊ฒ์ ๋ํด +1์ ๋๋ค.
๊ฑฐ๋ํ ์คํ๋ผ์ดํธ ์ํธ(์ํ๋ผ์ค๋ผ๊ณ ๋ ํจ)๊ฐ ์๊ณ ์ฌ๋ฌ THREE.Sprite
์ธ์คํด์ค์์ ํ
์ค์ฒ๋ฅผ ์ฌ์ฌ์ฉํ๋ ค๋ ๊ฒฝ์ฐ ๋งค์ฐ ์ ์ฉํฉ๋๋ค.
์ด๊ฒ์ ๋ํ ์์์ด ์์ต๋๊น? ์ด ๋ฌธ์ ๋ ์ฌ์ ํ API์ ๋์ ๋๋ ๊ฒฐํจ์ ๋๋ค. ๋๋ถ๋ถ์ ์ง๋ ์ ํ์๋ ์ฌ์ฉ๋์ง ์๋ ์คํ์ /๋ฐ๋ณต์ด ์์ผ๋ฉฐ, ์ด๋ฒคํธ ์ ํ๋ ํ๋ฉด์ ์ ๋๋ฉ์ด์ ์คํ๋ผ์ดํธ์ ๊ฐ์ ๊ฒ์ ํ์ํ ๊ฒ๋ณด๋ค ๋๋ฆฌ๊ฑฐ๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ฌด๊ฒ๊ฒ ๋ง๋ญ๋๋ค.
์ ๋๋ฉ์ด์ ์ง๋์ ์ ์ฐ์ฑ์ ํ์ฌ ์์คํ ์ ์์ต๋๋ค. ์ค์ ์ ๋จธํฐ๋ฆฌ์ผ์ ๋ฌถ์ผ๋ฉด ์ ์ฐ์ฑ์ด ์ค์ด๋ค ๊ฒ์ด๋ผ๋ ์ฃผ์ฅ์ด ๊ณ์ ์ ๊ธฐ๋๊ณ ์์ต๋๋ค. ์ด๋ฌํ ์ ์ฐ์ฑ์ ํ์ฌ ์์คํ ์ ์กด์ฌํ์ง ์๊ธฐ ๋๋ฌธ์ ์ด ์ฃผ์ฅ์ ๋ฌด์๋ฏธํฉ๋๋ค. ์ฌ๋ฃ์ ๋ํด ์ ์ญ์ ์ผ๋ก ์คํ์ /๋ฐ๋ณต๋ง ์ค์ ํ ์ ์์ผ๋ฉฐ ํ์ฐ ๋งต(?)์์ ๊ฐ์ ธ์ต๋๋ค. ์ด๊ฒ์ ์ฌ์ฉ ์ค์ธ ๋๋ถ๋ถ์ ๋งต์ ์ค๋ณต๋ "์คํ์ "/"๋ฐ๋ณต" ์ค์ ์ด ์๋ ํจ์ฌ ๋ ๋์ ๋ฌธ์ ๋ก ์ด์ด์ง๋ฉฐ ์ ๋๋ฉ์ด์ ์ ์ํด ํ ์ค์ฒ๋ฅผ ๊ณต์ ํ ์ ์์ ๋๋ง๋ค ๋ณต์ ๋ฅผ ๋ง๋ค์ด์ผ ํ๋ฏ๋ก ์ ์ฐ์ฑ์ด ํฌ๊ฒ ํฅ์๋ฉ๋๋ค. ์ค์ธ. ๊ฐ ํ ์ค์ฒ/๋งต์ ๊ณ ์ ํ ์คํ์ ์ด ์์ ๊ฒ์ผ๋ก ์์ํ์ง๋ง ์ด๋ ์ํฉ์ ๋ฐ๋ผ ๋ถ๊ฐ๋ฅํ๋ฉฐ ๋๋ถ๋ถ์ ๊ฒฝ์ฐ ์ผ๋ฐ/์ฌ์์ ๋ํด ์คํ์ ์ ๋์ผํ ๊ฒ์ผ๋ก ์ค์ ํ๋ ๊ฒ์ด ์ง์ฆ๋๊ธฐ ๋๋ฌธ์ ์ค์ ๋ก ํ ์ธํธ์ UV ์คํ์ ์ ์ํฉ๋๋ค. /diffuse(๊ณ ์ ํ์ฐ ๋งต ์์ ์คํฌ๋กค๋ง ๋ ธ๋ฉ ๋งต์ ์ ฐ์ด๋ ์ฌ์ง์ ์ฌ์ฉํ ์ ์๋ ํ์ ์ฉ๋์ ๋๋ค).
๋น๋ ์ค์ธ ์ค์ ์ ฐ์ด๋๋ฅผ ๋ณด๋ฉด ํ ์ค์ฒ ์คํ์ /๋ฐ๋ณต์ด ์ฌ๋ฃ์ ๋ฌถ์ฌ ์์ง๋ง ์ด์ํ๊ฒ๋ ์ ์ดํ ์ ์๋ ํ ๋งต์์ ๋ณต์ฌ๋์์ต๋๋ค. ์ค๋ณต ์์ด ๋น ๋ฅด๊ณ ์ฐ์ํ๊ฒ ํ๋ ค๋ฉด ์ฌ๋ฃ๋ฅผ ์ ์ดํด์ผ ํฉ๋๋ค.
๋ ์ธ๊ณ์ ์ฅ์ ์ ์๋ง์ ์ถ๊ฐ ํ๋๊ทธ๋ก ๊ฐ๋ฅํ์ง๋ง ์ด๋ฌํ ์ข ๋ฅ์ ํน์ ์ํฉ์ ๋ํด ๋์ ์ ฐ์ด๋ ์ฌ๋ฃ๋ฅผ ์ฌ์ฉํ๋๋ก ์ฌ์ฉ์์๊ฒ ์ง์ํ๋ ๊ฒ๋ณด๋ค ์ด๊ฒ์ด ๋ ๋์ ์๋ฃจ์ ์ด๋ผ๊ณ ์๊ฐํ์ง ์์ต๋๋ค.
์ด์ ๋ํ ํด๊ฒฐ์ฑ ์ @sunag ์ NodeMaterial btw์ ๋๋ค.
๋ํ ์ด๊ฒ์ ์ํด ๋ด +1์ ์ถ๊ฐํ์ญ์์ค! ์คํ๋ผ์ดํธ ์ํธ ์์ ์ ํจ์ฌ ๋ ๋ฉ์ง๊ฒ ๋ง๋ค ๊ฒ์ ๋๋ค.
:+1: ๋๋ผ์ด ์ฌ์ค์ ๋ฐ๊ฒฌํ์ต๋๋ค. ๋ฐ๋ณต๋๋ ๋ชจ๋ ์คํ๋ผ์ดํธ๊ฐ ์๋ก ์ ๋๋ฉ์ด์ ์ ์์ฑํ๊ธฐ ๋๋ฌธ์ ๊ฒ์์์ ๊ฐ ์คํ๋ผ์ดํธ์ ๋ํ ํ ์ค์ฒ๋ฅผ ๋ณต์ ํ๊ธฐ ์์ํด์ผ ํ์ต๋๋ค. ์ค๋ณต ์คํ๋ผ์ดํธ ๋ฐ์ดํฐ๋ฅผ GPU์ ๋ก๋ํ๋ค๋ ์๋ฏธ์ธ๊ฐ์?
๋๊ตฌ๋ ์ง ์ด ๋ฌธ์ ์ ๋ํ ํด๊ฒฐ ๋ฐฉ๋ฒ์ด ์์ต๋๊น? ํ ์ค์ฒ ์ธํฐํ์ด์ค๋ฅผ ๋ฌด์ํ๊ณ ์ ฐ์ด๋์์ ์ ๋ํผ์ ์ง์ ์ค์ ํ์ฌ UV ์คํ์ ์ ์กฐ์ํ ์ ์์ต๋๊น?
์ด์ ๋ํ ํด๊ฒฐ์ฑ ์ @sunag ์ NodeMaterial btw์ ๋๋ค.
@bhouston , ๋งํฌ๋ฅผ ์ ๊ณตํ ์ ์์ต๋๊น? ํด๋น ์ด๋ฆ์ ๊ฐ์ง @sunag ์ ๊ณ์ ์๋์๋ ๊ณต๊ฐ ์ ์ฅ์๊ฐ ์์ต๋๋ค.
@rhys-vdw dev ๋ธ๋์น์๋ง ์์ต๋๋ค.
https://github.com/mrdoob/three.js/tree/dev/examples/js/nodes
์๋กญ๊ธฐ ๋๋ฌธ์ ์คํ๋ผ์ดํธ์์ ์ฌ์ฉํ ์ค๋น๊ฐ ๋์๋์ง ํ์คํ์ง ์์ง๋ง ์์ ํ ๊ทธ๋ํ ๊ธฐ๋ฐ ์ ฐ์ด๋ ์์คํ ์ด๋ฏ๋ก ํ ์ค์ฒ ์ก์ธ์ค๋ฅผ ์์๋ก ์์ ํ ์ ์๋ ์ ์ฐ์ฑ์ ์ ๊ณตํฉ๋๋ค.
์๋กญ๊ธฐ ๋๋ฌธ์ ์คํ๋ผ์ดํธ์์ ์ฌ์ฉํ ์ค๋น๊ฐ ๋์๋์ง ํ์คํ์ง ์์ง๋ง ์์ ํ ๊ทธ๋ํ ๊ธฐ๋ฐ ์ ฐ์ด๋ ์์คํ ์ด๋ฏ๋ก ํ ์ค์ฒ ์ก์ธ์ค๋ฅผ ์์๋ก ์์ ํ ์ ์๋ ์ ์ฐ์ฑ์ ์ ๊ณตํฉ๋๋ค.
@bhouston Node๋ก ์์ ๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค. ๋ณด๊ธฐ ์ข์ต๋๋ค.
THREE.SpriteMaterial
๋ํด ๋ค์๊ณผ ๊ฐ์ด spritesheet
๋ฅผ ์์ฑํ๊ธฐ ์ํ ์คํ์
/์ค์ผ์ผ์ ์ก์ธ์คํ ์ ์์ต๋๋ค.
var offsetX = frameX / mapWidth;
var scaleX = mapWidth / frameWidth;
sprite.material.map.offset.x = offsetX;
sprite.material.map.repeat.x = scaleX;
https://github.com/mrdoob/three.js/blob/master/src/renderers/webgl/plugins/SpritePlugin.js#L53
๋ ธ๋ ๊ธฐ๋ฐ ์์คํ ์ ์์ ์ฌํญ์ด ์๋๋๋ค... ์ฌ์ ํ API ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ง ์์ต๋๋ค. ๋จธํฐ๋ฆฌ์ผ ํ๋กํ ํ์ ์ ์คํ์ /๋ฐ๋ณต์ ์ถ๊ฐํ๊ณ ๋ ๋๋ฌ๊ฐ ํ ์ค์ฒ ๋์ ์ด๋ฅผ ์ฝ๋๋ก ํ๋ ๋ฐ 2์ด๊ฐ ๊ฑธ๋ฆฝ๋๋ค. ๋ด ํ๋ก์ ํธ๋ฅผ ์ํด ์ด๋ฏธ ์ํํ์ง๋ง ์ฌ์ค์ ์ผ๋ฐ์ ์ธ ์์ ์ ์ํํ๋ ค๊ณ ํ ๋ ์ด ๋ฌธ์ ์ ์ง๋ฉดํ๊ฒ ๋ ์ ๊ท ์ฌ์ฉ์์ ๊ณจ์นซ๊ฑฐ๋ฆฌ๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด ๊ณต์์ ์ผ๋ก ๋ณ๊ฒฝ๋์ด์ผ ํ๋ API์ ๋ช ๋ฐฑํ ๊ฒฐํจ์ผ๋ก ๋จ์ ์์ต๋๋ค.
...๊ทธ๋์ ํ ์ค์ฒ ์ก์ธ์ค๋ฅผ ์์๋ก ์์ ํ ์ ์๋ ์ ์ฐ์ฑ์ ์ ๊ณตํฉ๋๋ค.
tbh ๊ทธ๊ฒ ๋ฌด์จ ๋ป์ธ์ง ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. ์ฌ๋ฃ๋ณ๋ก "์คํ์ " ๋ฐ "๋ฐ๋ณต"์ ๋ํ ๊ฐ๋ณ ์ธํธ ์ ฐ์ด๋ ์ ๋ํผ์ ์ ๋๋ฉ์ด์ ํฉ๋๋ค.
THREE.SpriteMaterial์ ๋ํด ์๋ฅผ ๋ค์ด ๋ค์์ ์ฌ์ฉํ์ฌ ์คํ๋ผ์ดํธ ์ํธ๋ฅผ ๋ง๋ค๊ธฐ ์ํด ์คํ์ /์ค์ผ์ผ์ ์ก์ธ์คํ ์ ์์ต๋๋ค.
@sunag , ์๋ง๋ ๋ฌธ์ ๊ฐ ๋ช ํํ์ง ์์ ์ ์์ต๋๋ค. ๊ณต์ ํ ์ฝ๋๋ ํด๋น ์ฌ์ง์ ๋ชจ๋ ์ธ์คํด์ค์์ ๊ณต์ ํ๋ ํ ์ค์ฒ๋ฅผ ๋ณ๊ฒฝํฉ๋๋ค. ์ด๊ฒ์ ํ ์ค์ฒ๋ฅผ ๊ณต์ ํ๋ ๋ ๊ฐ์ ๋จธํฐ๋ฆฌ์ผ์ ๊ฐ์ง ์๋ ์์ง๋ง ๊ณ ์ ํ ์คํ์ ์ด ์์์ ์๋ฏธํฉ๋๋ค. ์๋ฅผ ๋ค์ด ๋ ๊ฐ์ ์ ์คํ๋ผ์ดํธ๊ฐ ๋ค๋ฅธ ์ ๋๋ฉ์ด์ ํ๋ ์์ ํ์ํฉ๋๋ค.
๋ด ํ๋ก์ ํธ๋ฅผ ์ํด ์ด๋ฏธ ์ํํ์ง๋ง ์ฌ์ค์ ์ผ๋ฐ์ ์ธ ์์ ์ ์ํํ๋ ค๊ณ ํ ๋ ์ด ๋ฌธ์ ์ ์ง๋ฉดํ๊ฒ ๋ ์ ๊ท ์ฌ์ฉ์์ ๊ณจ์นซ๊ฑฐ๋ฆฌ๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด ๊ณต์์ ์ผ๋ก ๋ณ๊ฒฝ๋์ด์ผ ํ๋ API์ ๋ช ๋ฐฑํ ๊ฒฐํจ์ผ๋ก ๋จ์ ์์ต๋๋ค.
@QuaziKb ๋ด ํ๋ก์ ํธ์์ ํ๊ฒํ ํ ์ ์๋ PR์ด ์์ต๋๊น?
@WestLangley๊ฐ ๋งํ๋ฏ์ด ๋ค์์ด ์ฌ์ค์ด๋ผ๋ฉด ์ด ๋ชจ๋ ๊ฒ์ด ๋ฌธ์ ๊ฐ ๋์ง ์์ ๊ฒ์ ๋๋ค.
ํ์ฌ ์ ๊ทผ ๋ฐฉ์์ ์ ์งํ๋ ๊ฒฝ์ฐ ๋ณ๊ฒฝํด์ผ ํ ํ ๊ฐ์ง๋ ํ ์ค์ฒ๊ฐ ๋ณต์ ๋ ๋ ๊ณต์ ์ด๋ฏธ์ง๋ฅผ GPU์ ํ ๋ฒ๋ง ์ ๋ฌํด์ผ ํ๋ค๋ ๊ฒ์ ๋๋ค.
๊ทธ ๋ง์ต๋๊น?
@sunag , ์๋ง๋ ๋ฌธ์ ๊ฐ ๋ช ํํ์ง ์์ ์ ์์ต๋๋ค. ๊ณต์ ํ ์ฝ๋๋ ํด๋น ์ฌ์ง์ ๋ชจ๋ ์ธ์คํด์ค์์ ๊ณต์ ํ๋ ํ ์ค์ฒ๋ฅผ ๋ณ๊ฒฝํฉ๋๋ค. ์ด๊ฒ์ ํ ์ค์ฒ๋ฅผ ๊ณต์ ํ๋ ๋ ๊ฐ์ ๋จธํฐ๋ฆฌ์ผ์ ๊ฐ์ง ์๋ ์์ง๋ง ๊ณ ์ ํ ์คํ์ ์ด ์์์ ์๋ฏธํฉ๋๋ค. ์๋ฅผ ๋ค์ด ๋ ๊ฐ์ ์ ์คํ๋ผ์ดํธ๊ฐ ๋ค๋ฅธ ์ ๋๋ฉ์ด์ ํ๋ ์์ ํ์ํฉ๋๋ค.
ํ , ์ด NodeMaterial
ํ์คํ ํด๊ฒฐ๋ ๊ฒ์ด๋ฏ๋ก, ๋์ผํ ํ
์ค์ฒ๋ฅผ ๋ค๋ฅธ ๋จธํฐ๋ฆฌ์ผ๊ณผ ๋
๋ฆฝ์ ์ธ uv ์คํ์
๊ณผ ๊ณต์ ํ ์ ์์ ๊ฒ์ด๋ฉฐ, ๋
ธ๋ ๊ธฐ๋ฐ ๋จธํฐ๋ฆฌ์ผ์ด ์ ๊ณตํ ์ ์๋ ๋ง์ถคํ ํํฐ ๋ฐ ๊ธฐํ ๊ธฐ๋ฅ๊ณผ ๊ฐ์ ์ด์ ์ ์ป์ ์ ์์ ๊ฒ์
๋๋ค.
https://github.com/mrdoob/three.js/issues/7522
๊ทธ๋ฌ๋ ํ์ฌ ๋๊ตฐ๊ฐ๊ฐ ๋ค์๊ณผ ๊ฐ์ด uuid๋ฅผ ์ธ์คํด์คํํ๋ ค๊ณ ์๋ํ์ต๋๋ค.
THREE.Texture.prototype.createInstance = function() {
var inst = this.clone();
inst.uuid = this.uuid;
inst.version = this.version;
return inst;
}
needsUpdate
์ฌ์ฉํ๋ ๊ฒฝ์ฐ ๋ชจ๋ ์ธ์คํด์ค version
๋ ์
๋ฐ์ดํธํฉ๋๋ค.
์์:
var uniqueTextureOffset = map.createInstance();
var material = new THREE.SpriteMaterial( { map: uniqueTextureOffset } );
๋์ผํ uuid
ํ๊ณ version
๋ GPU์์ texture
๋ฅผ ๊ณต์ ํฉ๋๋ค.
https://github.com/mrdoob/three.js/blob/master/src/renderers/WebGLRenderer.js#L2832
https://github.com/mrdoob/three.js/blob/master/src/renderers/webgl/WebGLProperties.js#L11
๋๋ฅผ ์ํด ๊ทธ๊ฒ์ ์ ์ ์ ์ธ ํด๊ฒฐ์ฑ
์ด์ง๋ง. ๋๋ ๋ฏธ๋๋ฅผ ์ํด NodeMaterial
๋ฅผ ๋ฏฟ์ต๋๋ค.
uv ๋ณํ์ ์ฌ๋ฃ๋ก ์ฎ๊ธธ ์ ์์ต๋๊น?
๋ ์ธ๊ณ์ ์ต๊ณ ๋ ์ด๋ป์ต๋๊น? ์ฌ๋ฃ์ ์๋ก์ด uvOffset
๋ฐ uvRepeat
๊ฐ ์๋ ์ฌ๋ฃ์ ํ๋๊ทธ overrideOffsetRepeat
๋ฅผ ์ถ๊ฐํฉ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ํ๋๊ทธ๊ฐ false์ด๋ฉด ์ด์ ๋ฒ์ ๊ณผ ํธํ๋๋ฉฐ ์ด๊ฒ์ด ๊ธฐ๋ณธ๊ฐ์
๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ๊ฒ์ด ์ฌ์ค์ด๋ผ๋ฉด ๋จธํฐ๋ฆฌ์ผ ์คํ์
/๋ฐ๋ณต์ ์ฌ์ฉํฉ๋๋ค. ๋๋ ๊ทธ ํ์์ฑ์ด ๊ฐ๋ ฌํ๊ณ ๋๋ฆฌ ํผ์ ธ ์๋ ๊ฒ์ฒ๋ผ ๋ณด์ด๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ ์ง์งํ ๊ฒ์
๋๋ค. @WestLangley? @mrdoob?
(๋๋ ์์ผ๋ก ๋ชจ๋ ์ผ์ NodeMaterial์ ์ฌ์ฉํ๋ ๊ฒ์ ์ ๋ง๋ก ์ง์ํ์ง๋ง, ๊ทธ๊ฒ์ผ๋ก ์ ํํ๋ ๊ฒ์ ๊ณ ํต์ค๋ฝ์ต๋๋ค.)
๋๋ ์ฌ์ ํ ์ด์ ๋ํ ํด๊ฒฐ์ฑ
์ด THREE.Image
๋ฅผ ๋ง๋๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. https://github.com/mrdoob/three.js/issues/5876#issuecomment -81189892
THREE.Image
@mrdoob , ํ ๋น๋ ๊ฐ Texture
๊ฐ Material
์ ํจ๊ป ๋ณต์ ๋๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๊น?
@mrdoob ์ ๋ค์
๋๋ ์ฌ์ ํ ์ด๊ฒ์ ๋ํ ํด๊ฒฐ์ฑ ์ด THREE.Image๋ฅผ ๋ง๋๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
์, ์๋ํ ๊ฒ์ ๋๋ค. ํ์ง๋ง ์ด์ ๋ฒ์ ๊ณผ์ ํธํ์ฑ์ ์ฝ๊ฐ ๋จ์ด์ง์ง๋ง(์ด์ ๋ชจ๋ ์ฌ๋์ด ํ ์ค์ฒ๋ฅผ ๋ง๋ค๊ธฐ ์ ์ ์ด๋ฏธ์ง๋ฅผ ๋ง๋ค๋๋ก ์๊ตฌํ๋ ๊ฒฝ์ฐ) ์ ์ฒด์ ์ธ ๋์์ธ์ด ๋ ๊น๋ํด์ง๋๋ค. ๋ณ๋๋ก ์ง์ ํ์ง ์์ ๊ฒฝ์ฐ ํ ์ค์ฒ๋ณ๋ก ์ด๋ฏธ์ง๊ฐ ์๋์ผ๋ก ์์ฑ๋๋๋ก ํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ฉด ์ด์ ๋ฒ์ ๊ณผ์ ํธํ์ฑ์ ์ป์ ์ ์์ต๋๊น? ๊ทธ๋ฆฌ๊ณ ๊น๋ค๋ก์ด ์์ ์ ์ํํ๋ ค๋ ๊ฒฝ์ฐ์๋ง Image๋ฅผ ์ง์ ์กฐ์ํ๋ฉด ๋ฉ๋๋ค.
์ด ์๋ฃจ์ ์๋ ์คํ๋ผ์ดํธ ์ธํธ์ ๋ํด ๋ ๊ฐ์ ์ ๊ฐ์ฒด๊ฐ ํ์ํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ๊ฐ ์คํ๋ผ์ดํธ์ ๋ํด ํ๋์ ํ ์ค์ฒ์ ํ๋์ ๋จธํฐ๋ฆฌ์ผ์ด ํ์ํฉ๋๊น? ๊ฐ ์คํ๋ผ์ดํธ๋ง๋ค ์๋ก์ด ๋จธํฐ๋ฆฌ์ผ์ด ํ์ํ ๋ค๋ฅธ ์ ๊ทผ ๋ฐฉ์์ ์ด๋์ ์์ต๋๊น?
Unity๋ ์ฌ์ง๋น ๋ฐ๋ณต/์คํ์ ์ ์ง์ํ์ง๋ง 3DS Max, Maya, Softimage์ ๊ฐ์ ๊ณ ๊ธ VFX ๋๊ตฌ๋ ์ง์ํ์ง ์์ต๋๋ค. ์ด ๋๊ตฌ์๋ Bitmap ๋ ธ๋์ Texture ๋ ธ๋(๋นํธ๋งต ๋ ธ๋์ UV ๋งคํ ๋ชจ๋ ํฌํจ)๋ง ์์ต๋๋ค. nod), @mrdoob ์ ๋์์ธ๊ณผ ์ ์ฌํฉ๋๋ค.
UE4๋ @mrdoob ์ด ์ ์ํ ๊ฒ๊ณผ ์ ์ฌํ๋ฉฐ ๋นํธ๋งต ๋ก๋์ธ "ํ ์ค์ฒ" ๋ ธ๋๊ฐ ์๊ณ ๋ค์ํ ์ ํ์ UV ๋งคํ์ ์ํํ๊ธฐ ์ํ ์ผ๋ จ์ UV ๋งคํ ๋ ธ๋๊ฐ ์์ต๋๋ค.
๊ณ ๊ธ ๋๊ตฌ๋ ํ ์ค์ฒ์์ ์ด๋ฏธ์ง/๋นํธ๋งต์ ๋ถํ ํ๊ณ ๋ค์ ํ์์ผ๋ก ๋ณ๋์ UV ๋งคํ ๋ ธ๋๋ ๋ถํ ํฉ๋๋ค.
-> Bitmap
-> UVMapping
ํ์ฌ ๊ธฐ๋ณธ StandardMaterial์์ ๋ง์ UVMapping ์ต์ ์ ํ์ฉํ์ง ์์ต๋๋ค. ๊ทธ๋ฌ๋ UE4, Maya, Softimage, 3DS Max์์ ์ฌ์ฉ๋๋ ๋ค์ํ ์ ํ์ UVMappings๋ ์ฌ์ฉํ ์ฑ๋, ์ ์ฉํ ๋ณํ, ์์ค๋ก World Coordinates ์ฌ์ฉ ๋๋ Spherical, Cube, Planar ํฌ์์ ์ํํด์ผ ํ๋์ง ์ฌ๋ถ์ ๋๋ค. ์ด๋ฌํ ์์ธก์ ํ์ํ ๋งค๊ฐ๋ณ์๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํฉ๋๋ค.
UE4์๋ ๋จธํฐ๋ฆฌ์ผ ๋ด์์ ๋ฐ๋ณต/์คํ์ ์ ํ์ฉํ๋ ์คํ๋ผ์ดํธ ํ ์ค์ฒ๊ฐ ์์ต๋๋ค.
https://docs.unrealengine.com/latest/INT/Engine/Paper2D/Sprites/index.html
Maya, Softimage, 3DS Max ๋ฐ UE4๋ @mrdoob ์ด ์ ์ํ๋ ๊ฒ์ฒ๋ผ ํ ์ค์ฒ(๋ฐ UV ์์ฑ)์์ ๋นํธ๋งต/์ด๋ฏธ์ง๋ฅผ ๋ถ๋ฆฌํ์ง๋ง ๋ชจ๋ ์ด๋ฅผ ๋ฌ์ฑํ๊ธฐ ์ํด ์ ฐ์ด๋ ๊ทธ๋ํ๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์ ฐ์ด๋ ๊ทธ๋ํ๊ฐ ์๋ Unity3D๋ ์คํ์ /๋ฐ๋ณต์ ๋จธํฐ๋ฆฌ์ผ ์์ฒด์ ํตํฉํ๋ ๋๊ตฌ์ ๋๋ค. ์๋ง๋ ์ ฐ์ด๋ ๊ทธ๋ํ ๋ ธ๋๋ก ์ ๋๋ก ๋ถ๋ฆฌํ์ง ๋ชปํ๊ธฐ ๋๋ฌธ์ผ ๊ฒ์ ๋๋ค.
๋ณ๋๋ก ์ง์ ํ์ง ์์ ๊ฒฝ์ฐ ํ ์ค์ฒ๋ณ๋ก ์ด๋ฏธ์ง๊ฐ ์๋์ผ๋ก ์์ฑ๋๋๋ก ํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ฉด ์ด์ ๋ฒ์ ๊ณผ์ ํธํ์ฑ์ ์ป์ ์ ์์ต๋๊น? ๊ทธ๋ฆฌ๊ณ ๊น๋ค๋ก์ด ์์ ์ ์ํํ๋ ค๋ ๊ฒฝ์ฐ์๋ง Image๋ฅผ ์ง์ ์กฐ์ํ๋ฉด ๋ฉ๋๋ค.
๋ฐ๋ก ๐
์ธ๊ธํ๊ธฐ์๋ ๋ค์ ์ ๋งคํ ์ ์์ง๋ง ๊ฐ๋ฅํ ํ ๋นจ๋ฆฌ PTEX๋ฅผ ํตํฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
http://ptex.us/PtexFile.html
์ผ๋ฐ์ ์ธ ํ๋ก์ ์
๋ฑ์ NodeTexture(?)๋ก ๋ณํ/๋ณํํ๋ ๋ฐฉ๋ฒ์ด ์๋ค๋ฉด ๋ ๊ฐ๋ ฅํ๊ณ ํฌ๊ด์ ์ธ ๊ธฐ๋ณธ ์์ค ํ
์ค์ฒ ๋งคํ ์์คํ
์ธ ์๋ก์ด ์ต์
์ด ์์ต๋๊น? ...๊ทธ๋ ๋ค๋ฉด ๋ฏธ๋ฆฌ ์๊ฐํด ๋ณด์์ผ ํ ์ฌํญ์ผ ๊ฒ์
๋๋ค.
[๊ฐ์ ์์ ์ผ๋ก ๋ ๋์๊ฐ:]
ptex์ ๊ฐ๋
์ ์ค์ ๋ก 2d ์ด๋ฏธ์ง๊ฐ ์๋๋ผ uv ๊ด๊ณ์ด๋ฏ๋ก 2d๋ฅผ 3d๋ก ๋ณํํ๋ ๋ฐฉ๋ฒ์ ๋ํ ๊ฐ๋
/๋์ ์์ด ๋ณต์กํ ํ๋ฉด ์ฃผ์์ ํ์ธํธ/์คํฌํ/ํฌ์ํ ์ ์์ต๋๋ค. ์ด๋ ์ํ์ ์ผ๋ก ๋น๊ตํ๋ฉด ๊ธฐ๊ปํด์ผ ํดํน์
๋๋ค( ํญ์ ๊ธฐ์ ์ ์ผ๋ก ํ๊ดด์ ์ธ์ฐ๊ณ ์์ต๋๋ค).
๋๋ ๋จ์ง ptex๊ฐ 20๋
์ด์ ์ ์ ๋ ํฉ๋ฆฌ์ ์ด๊ณ ์ฐ์ ์์๊ฐ ๋์ด์ผ ํ์ผ๋ฉฐ ํ์ฅ ๋๋ 2๊ธ ์ฑ๋ฅ์ผ๋ก ๊ฐ์ฃผ๋์ด์๋ ์ ๋๋ค๋ ์ ์ ์ง์ ํ์ง๋ง ์ค์ ๋ก ๋์๊ฒ๋ ๊ทธ ๋ฐ๋์
๋๋ค. 2d ์ด๋ฏธ์ง๊ฐ ptex์ ํญ์ ์๋ํ๋ ํ๋์ ์ง์ ํ ๊ธฐ๋ณธ ๋ ๋ฒจ ์์คํ
์ผ๋ก ํฌ์/์คํฌํ๋๋ ๋ฐฉ๋ฒ์ ์ ์ธ์ ์ผ๋ก ๋งํ๋ ์ค๋๋ ์๋ ๋ฐฉ๋ฒ์ด์ด์ผ ํฉ๋๋ค. ์ด์จ๋ ๋ ์ค์ ๋กค์ ์ทจํ๋ ๊ฒ์ด ์ต์ ์ด ์๋๋ผ๋ฉด ํตํฉ๋์ด์ผํ๋ค๋ ์์ด๋์ด๋ฅผ ์ํํ๋ ๊ฒ์
๋๋ค.
๊ณ ์ํ ์ ์์ ํ ์ ์๋ ๊ธฐํ๋ฅผ ์ฃผ์
์ ๊ฐ์ฌํฉ๋๋ค. ptex๊ฐ ์ฌ์์ ๋ง๊ฒ ๋ง๋ค์ด์ ธ์ ๋๋ฌด ๊ธฐ๋ปค์ต๋๋ค. ๋๋ 10๋
์ด์ ์ ์ ๊ทธ๊ฒ์ ๋ํด ์ค์ค๋ก ์๊ฐํ์ง๋ง ์ด๋ฆฐ ์์ ์๋ ์๋ก์ด ์ฌ์ ๋ฑ์ ์ ์ํ ๊ถํ์ด ์์์ต๋๋ค. ๋์ด์ผ ๋ณด๋ฉด ๋ด๊ฐ ์ฌ์ ํ ์ ์งํ๋ ๊ด์ฐฐ์์ ์ญํ ๋์ ๋ณํ๋ฅผ ์๋ํ ์ ์์๋ค๋ ๊ฒ์ ๋ณด์์ด์ผ ํ์ต๋๋ค. ๊ทธ๋์ ์ฌ๊ธฐ์ ์ค๋ ์๋ชป์ ๋๋๋ฆฌ๋ ค๋ ์๋๊ฐ ์์ต๋๋ค.
Flux์ ์ ์ฌ์ ์ธ ํ์ฌ ๋ฐฉ๋ฒ์ ๋ํ ๋ ๊น์ ์ดํด๋ฅผ ๊ฐ์ง ์ฌ๋์ด THREEjs์์ ์๋ํ๋ ๋ฐฉ์์ ๋ํด ์ ์ฉ ๊ฐ๋ฅํ ์ ์์ ํ ์ ์๋ค๋ฉด ๋๊ตฐ๊ฐ๊ฐ ์ ์ค๋ ๋๋ฅผ ์์ํ ์ ์์ต๋๋ค.
๋ค์ ํ ๋ฒ ๋ค์ ์ ์๋ ๊ธฐํ๋ฅผ ์ฃผ์
์ ๊ฐ์ฌํฉ๋๋ค.
@MasterJames ์ข ๋ฅ์ ์ฃผ์ ์์ ๋ฒ์ด๋ ... ์ ์ค๋ ๋๋ฅผ ๋ง๋์๊ฒ ์ต๋๊น?
"ํ ์ค์ฒ"๋ฅผ ๊ณ์ ์ฌ์ฉํ ์ ์๋๋ก ์ด๋ฏธ์ง๊ฐ ์๋๋ผ๋ ์ค์ ๋ก๋ ๋ ์ด์์ uv ์คํ์ /๋ฐ๋ณต์ ์ง์ํ์ง ์๊ธฐ ๋๋ฌธ์ ๋ชจ๋ ์ฌ๋ฃ๋ฅผ ๋ค์ ์์ฑํด์ผ ํฉ๋๋ค. ๋ถ๋ช ํ ์ด๊ฒ์ ๋ณ๊ฒฝ๋ ์ ์์ง๋ง ์๋ง๋ ์ค๋ณต ์ ๋ํผ์ด ํ์ํ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ๋ณต์ก์ฑ์ด ์ถ๊ฐ๋ ๊ฒ์ ๋๋ค(์๋ฅผ ๋ค์ด ๋ ธ๋ฉ ๋งต์ด ํ์ฐ์์ ์คํ์ ๋๋๋ก ์คํ์ /๋ฐ๋ณต ์ธํธ๋ฅผ ๋ ๊ฐ ์ด์ ์ํ๋ ๋น๋). ์ฑ๋ฅ์ด ํ๋ฆฌ๋ฏธ์์ธ ์น์ ๊ฒฝ์ฐ ๊ฐ์ฅ ์ผ๋ฐ์ ์ธ ์ฌ์ฉ ์ฌ๋ก๋ ๋ชจ๋ ๋งต์ ์ํฅ์ ๋ฏธ์น๋ ํ๋์ ์ ์ญ ์คํ์ /๋ฐ๋ณต์ด ์๋ ๊ฒฝ์ฐ์ด๋ฉฐ, ์ด๋ ๊ฒฐ๊ตญ ๋จธํฐ๋ฆฌ์ผ ์ํคํ ์ฒ์ ์ผ๋ถ๊ฐ ๋๊ธฐ ๋๋ฌธ์ ๋จธํฐ๋ฆฌ์ผ์ ์๋ ๊ฒ์ด ํฉ๋ฆฌ์ ์ ๋๋ค. ์ปค์คํ ์ ฐ์ด๋ ๋จธํฐ๋ฆฌ์ผ์ ์ฃ์ง ์ผ์ด์ค๋ฅผ ์ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
@QuaziKb ๋ค. ๋ฐ๋ก NodeMaterial
ํํดํ๋ ๊ฒ์
๋๋ค.
Texture
๊ฐ ๊ฐ .clone()
์ ๋ํด ๋์ผํ OpenGL ํ
์ค์ฒ ์ธ์คํด์ค๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๊ฐ ์๋๋๊น, ์๋๋ฉด ์ ๊ฐ ๋ญ๊ฐ๋ฅผ ๋์น๊ณ ์๋ ๊ฑด๊ฐ์? ์ค์ ๋ก ๊ฐ ํด๋ก ์ ๋ํด ๋ค์ ์
๋ก๋ํฉ๋๊น? ๊ทธ๋ ๋ค๋ฉด ์ด๊ฒ์ _๋งค์ฐ_ ์ฌ๊ฐํ ๋ฌธ์ ์
๋๋ค.
@evrimoztamur , ๋งค๋ฒ ํ ์ค์ฒ๋ฅผ ๋ณต์ฌํ๋ค๊ณ ์๊ฐํฉ๋๋ค. WebGL Inspector ๋ฅผ ์ฌ์ฉํ์ฌ ์งํ ์ํฉ์ ํ์ธํ ์ ์์ต๋๋ค.
@sunag ์ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ํฌํจํ์ฌ ์๊ฐํ ์ ์๋ ๋ชจ๋ ์ ๊ทผ ๋ฐฉ์์ ์๋ํ์ง๋ง ์๋ฌด ๊ฒ๋ ์๋ํ์ง ์์์ต๋๋ค. ๊ฒฐ๊ณผ๊ฐ ๋์ค์ง ์๋ ์คํ๊ณผ ์์ ๋ ผ์๋ฅผ ๋ฐํ์ผ๋ก ๋ค๋ฅธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ์คํ๋ผ์ดํธ ์ ๋๋ฉ์ด์ ์ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ์ดํด๋ณด์์ต๋๋ค. ์ ๋ Babylon.js์ Sprite ๋ฐ SpriteManager API๊ฐ ์ ํน์ ์๊ตฌ ์ฌํญ์ ์ถฉ์กฑํ๋ ์๋ฃจ์ ์ด๋ผ๋ ๊ฒ์ ์์์ต๋๋ค. ์คํ๋ผ์ดํธ ์ํธ, ์คํ์ ๋ฐ ๋ฐ๋ณต, ์ ๋๋ฉ์ด์ ์ ์ฒ๋ฆฌํฉ๋๋ค. ์๋ง๋ ์ด๊ฒ์ THREE.js๊ฐ ์ ๊ณตํ๋ ๊ฒ๋ณด๋ค ๋ ๋์ ์์ค์ ์ถ์ํ์ผ ์ ์์ง๋ง ์ฐธ์กฐ๋ก ๋ณผ ๊ฐ์น๊ฐ ์์ต๋๋ค.
@rhys-vdw: ํ์ฌ ํ๋ก์ ํธ์ ๊ฒฝ์ฐ MeshBasicMaterial์ ๋์ ๋ฒ์ ์ผ๋ก ๋๋ฌ์ต๋๋ค.
https://gist.github.com/karimbeyrouti/790d2e1a8c0137b16bae
๋งต์ ์ค์ ํ๋ฉด ์คํ์ /๋ฐ๋ณต ์ ๋ํผ์ด ์๋์ผ๋ก ํ ๋น๋ฉ๋๋ค. ๋ณ๋๋ก ์ฝ๊ฒ ์ค์ ํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ฉด ๋น์ฅ์ ํ ์ค์ฒ๋ฅผ ๋ณต์ ํ ํ์๊ฐ ์์ต๋๋ค. (r73์ผ๋ก ์์ )
์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํด์ผ ํ๋ PR์ ๋ฐฉ๊ธ ์ ์ถํ์ต๋๋ค. PR #8278
@WestLangley ๋ ๋ค์
๋ค์ ๋งต์ด ๋์ผํ ์คํ์ /๋ฐ๋ณต ๊ฐ์ ๊ฐ๋๋ค๊ณ ๊ฐ์ ํ๋ ๊ฒ์ด ํฉ๋ฆฌ์ ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
์ง๋
์คํํ๋ฌ ๋งต
๋ ธ๋ฉ๋งต
๋ฒํ๋งต
์ํ๋งต
aoMap(๋ฏธ๋)
๊ธ๋ก์ค๋งต(๋ฏธ๋)
๋ณ์ ๋งต(๋ฏธ๋)
ํญ์์ ์๋๋๋ค. ์ ๋ ํ์ฌ ๋์ผํ ์ฌ๋ฃ(์์คํํธ)์ ๋งต๊ณผ ๋ฒํ ๋งต์ ๋ํด ์๋ก ๋ค๋ฅธ ๋ฐ๋ณต ๊ฐ์ ์ฌ์ฉํ์ฌ ๋ ๋ค ๋ค์ ์์ ํ์ผ๋ก ํ์ผ๋ง๋๋ค๋ ์ฌ์ค์ ์จ๊ธฐ๊ณ ์์ต๋๋ค. ๊ทธ๋ ๊ฒํ๋ฉด ํฐ ํ ์ค์ฒ๋ฅผ ์์ฑํ๊ฑฐ๋ ๊ฐ์ง ํ์๊ฐ ์์ต๋๋ค. ๊ทธ๊ฒ์ ๋งค์ฐ ํธ๋ฆฌํฉ๋๋ค. :-)
ํธ์ง: ๊ธ์, ๊ทธ๊ฒ์ด ๋ด๊ฐ ํ ์ผ์ด๋ผ๊ณ ์๊ฐํ๋ ๊ฒ์ ๋๋ค. ํธ๋ฆญ์ ์๋ง๋ ๋ฌด์๋์์ ๊ฒ์ ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ ฐ์ด๋์ ๋ ธ์ด์ฆ๋ฅผ ์ถ๊ฐํ์ฌ ๋น์ทํ ๊ฒฐ๊ณผ๋ฅผ ์ป์ ์ ์์ต๋๋ค. WestLangley์ Matrix3 ๋ฐ๋ชจ๋ ํ๋ฅญํฉ๋๋ค.
์ด๊ฒ์ด Sprite์์ UV๊ฐ ๋ค๋ฅธ ์ธ์คํด์ค์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋์ผํ ํ
์ค์ฒ๋ฅผ ์ ์งํ๋ฉด์ vertex
๋ฐ pixel shader
์์ ํ ์ ์์ต๋๋ค.
https://threejs.org/examples/#webgl_sprites_nodes
SpriteNodeMaterial
๋ฐ Mesh
๋ฅผ ๊ณต์ PlaneBufferGeometry
์ ํจ๊ป ์ฌ์ฉํฉ๋๋ค. ์ธํฐํ์ด์ค๋ Sprite
ํ์ง ์์ง๋ง ์๋ํฉ๋๋ค. ์ธํฐํ์ด์ค๋ฅผ ๋ ์น์ํ๊ฒ ๋ง๋ค๊ธฐ ์ํด SpriteMesh
๋ก ์งํํ ์ ์์ต๋๋ค.
์ด ์ค๋ ๋๋ TL;DR์ ๋๋ค. ํ์ง๋ง ๋ฐฉ๊ธ r68(์ด์ ํ๋ก์ ํธ, ์)์์ ์ด ์ฝ๋๋ฅผ ๋ฐ๊ฒฌํ์ต๋๋ค.
// uv repeat and offset setting priorities
// 1. color map
// 2. specular map
// 3. normal map
// 4. bump map
// 5. alpha map
var uvScaleMap;
if ( material.map ) {
uvScaleMap = material.map;
} else if ( material.specularMap ) {
uvScaleMap = material.specularMap;
} else if ( material.normalMap ) {
uvScaleMap = material.normalMap;
} else if ( material.bumpMap ) {
uvScaleMap = material.bumpMap;
} else if ( material.alphaMap ) {
uvScaleMap = material.alphaMap;
}
if ( uvScaleMap !== undefined ) {
var offset = uvScaleMap.offset;
var repeat = uvScaleMap.repeat;
uniforms.offsetRepeat.value.set( offset.x, offset.y, repeat.x, repeat.y );
}
๊ทธ๋์, ์...
์ฌ๊ธฐ์์ ์ ์ํ ๊ฒ๊ณผ ๊ฐ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ํ ๊ทผ๋ณธ์ ์ธ ๋ณ๊ฒฝ์ ์ ์ํ๋ ค๋ฉด ํด๋น ๋ณ๊ฒฝ์ ๋ํ ๋ช ํํ๊ณ ์ค๋๋ ฅ ์๋ ์ฃผ์ฅ์ ์ ๊ณตํด์ผ ํฉ๋๋ค.
๋๋ ๋ํจ์ฆ ๋งต๊ณผ ๋ ธ๋ฉ ๋งต์์ ๋ค๋ฅธ ๋ฐ๋ณต์ ์ค์ ํ๋ ค๊ณ ํ๊ณ ์๋ํ์ง ์์๊ธฐ ๋๋ฌธ์ ๋จธ๋ฆฌ์นด๋ฝ์ ๋ฝ์์ต๋๋ค. API๋ ์ด ์ค์ ์ ํ ์ค์ฒ์ ๋ฐฐ์นํ๊ธฐ ๋๋ฌธ์ ๊ทธ๋ ๊ฒ ํ ์ ์๋ค๊ณ ์๊ฐํ์ต๋๋ค. ๋ค, ์ค๋๋ ฅ ์๋ ๋ ผ์์ ์ํด ์ ๋จธ๋ฆฌ์นด๋ฝ์ ์๊ปด๋๋ ๊ฒ์ ์ด๋ป์ต๋๊น? ์ด ํฐ์ผ์ ์ฌ์ ํ โโ์ด๋ ค ์๊ณ 3js๋ ์ฌ์ ํ ํ ์ค์ฒ์ ๋ํด ์ด ์ค์ ์ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ ํ ์ค์ฒ ์ค ํ๋์ ๋ํด์๋ง ์กด์ค๋ฉ๋๋ค = ์ด๊ฒ์ ์ฌ์ค์ ์ด๋ฏธ ์ฌ๋ฃ๋ณ ์ค์ ์ ๋๋ค.
์ด๊ฒ์ ์ํ ๊ณณ์ผ๋ก ์ฎ๊ธฐ์ง ์์ผ๋ ค๋ฉด ์ ์ด๋ ๋ฌธ์์๋ ์ํฅ์ด ์๋ค๊ณ ๋งํฉ๋๊น?
@sunag ํ๋ณด์ฉ:
https://github.com/mrdoob/three.js/pull/11531
๋ด๊ฐ ๋ง๋ ํ ๊ฐ์ง ๋ฌธ์ :
https://jsfiddle.net/f0j2v3s8/
SpriteNodeMaterial
ํฌ๋ช
๋๊ฐ ์์ค๋ ๊ฒ ๊ฐ์ต๋๋ค. ์ด ์์ ๋ฅผ ์๋์ํค๋ ๋ฐ ์ฌ์ฉํ ์ ์๋ ํผํฉ ์กฐํฉ์ด ์์ต๋๋ค.
์ด๋ค ์์ด๋์ด?
@karimbeyrouti ๋ ๋ค์
๋งต์ ์ค์ ํ๋ฉด ์คํ์ /๋ฐ๋ณต ์ ๋ํผ์ด ์๋์ผ๋ก ํ ๋น๋ฉ๋๋ค. ๋ณ๋๋ก ์ฝ๊ฒ ์ค์ ํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ฉด ๋น์ฅ์ ํ ์ค์ฒ๋ฅผ ๋ณต์ ํ ํ์๊ฐ ์์ต๋๋ค. (r73์ผ๋ก ์์ )
uniforms.offsetRepeat
๊ฐ uniforms.uvTransform
(r88)๋ก ๋ณ๊ฒฝ๋์๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ด ๋ ์ด์ ์ฌ์ฉ๋์ง ์๋๋ค๊ณ ์๊ฐํฉ๋๋ค.
'์ฌ๋ฌ Object3D ์ธ์คํด์ค๊ฐ ์๋ ํ ์ค์ฒ ์ํ๋ผ์ค ์ฌ์ฌ์ฉ' ์ฌ์ฉ ์ฌ๋ก์ ๊ด๋ จํ์ฌ ๊ฐ๋จํ ๋๋ฌ๋ณด๊ธฐ๋ฅผ ์ ์ํฉ๋๋ค.
onBeforeRender\onAfterRender
ํจ์ ์์ ์ฐ๊ฒฐํฉ๋๋ค.๊ฒฐ๊ณผ:
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
์ด ์ค๋ ๋๋ TL;DR์ ๋๋ค. ํ์ง๋ง ๋ฐฉ๊ธ r68(์ด์ ํ๋ก์ ํธ, ์)์์ ์ด ์ฝ๋๋ฅผ ๋ฐ๊ฒฌํ์ต๋๋ค.
๊ทธ๋์, ์...
๋๋ ๋ํจ์ฆ ๋งต๊ณผ ๋ ธ๋ฉ ๋งต์์ ๋ค๋ฅธ ๋ฐ๋ณต์ ์ค์ ํ๋ ค๊ณ ํ๊ณ ์๋ํ์ง ์์๊ธฐ ๋๋ฌธ์ ๋จธ๋ฆฌ์นด๋ฝ์ ๋ฝ์์ต๋๋ค. API๋ ์ด ์ค์ ์ ํ ์ค์ฒ์ ๋ฐฐ์นํ๊ธฐ ๋๋ฌธ์ ๊ทธ๋ ๊ฒ ํ ์ ์๋ค๊ณ ์๊ฐํ์ต๋๋ค. ๋ค, ์ค๋๋ ฅ ์๋ ๋ ผ์์ ์ํด ์ ๋จธ๋ฆฌ์นด๋ฝ์ ์๊ปด๋๋ ๊ฒ์ ์ด๋ป์ต๋๊น? ์ด ํฐ์ผ์ ์ฌ์ ํ โโ์ด๋ ค ์๊ณ 3js๋ ์ฌ์ ํ ํ ์ค์ฒ์ ๋ํด ์ด ์ค์ ์ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ ํ ์ค์ฒ ์ค ํ๋์ ๋ํด์๋ง ์กด์ค๋ฉ๋๋ค = ์ด๊ฒ์ ์ฌ์ค์ ์ด๋ฏธ ์ฌ๋ฃ๋ณ ์ค์ ์ ๋๋ค.
์ด๊ฒ์ ์ํ ๊ณณ์ผ๋ก ์ฎ๊ธฐ์ง ์์ผ๋ ค๋ฉด ์ ์ด๋ ๋ฌธ์์๋ ์ํฅ์ด ์๋ค๊ณ ๋งํฉ๋๊น?