Normal-Tangent Test ๋ชจ๋ธ ์ ํ์ํด ๋ณด์์ต๋๋ค.
๊ทธ๋ฌ๋ ํ์๋ ๊ฒฐ๊ณผ๋ ํฌ๋ก๋
ธ์ค์ ์ํ๊ณผ ๋ค๋ฅธ ๊ฒ ๊ฐ์ต๋๋ค.
Three.js + Normal-Tangent ํ
์คํธ ๋ชจ๋ธ ๊ฒฐ๊ณผ :
Khronos ์ํ ๋ก๋ + Normal-Tangent ํ
์คํธ ๋ชจ๋ธ ๊ฒฐ๊ณผ :
์ด ์ํ ๋ชจ๋ธ์ ์ผ์ชฝ๊ณผ ์ค๋ฅธ์ชฝ ๊ฒฐ๊ณผ๊ฐ ๊ฐ์์ผํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
๊ด๋ จ : https://emackey.github.io/testing-pbr/normal-tangent-readme.html
/ cc @emackey
ThinkPad X260 + Windows 10 + Intel HD ๊ทธ๋ํฝ 520
@ cx20์ ์์ฑํด ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค.
๋ ๋ง์ ๋งฅ๋ฝ์ ์ํด ๋ค์์ ๊ด๋ จ ์ ๋ณด ๋ฐ ๋ฌธ์ ์ ๋๋ค.
@donmccurdy ์ ThreeJS glTF ๋ทฐ์ด ์ธ donmccurdy / three-gltf-viewer # 10์์ ์ ์ฌํ ๋ฌธ์ ๋ฅผ๋ณด๊ณ ํ์ต๋๋ค. ๊ทธ๋ฌ๋ ๋๋ ์ด๊ฒ์ด ๋ทฐ์ด๊ฐ ์๋ ThreeJS์ glTF ๋ก๋์ ๋ฒ๊ทธ๋ผ๊ณ ์๊ฐํฉ๋๋ค. ๋ฐ๋ผ์์ด ์๋ก์ด ๋ฌธ์ ๋ ์ด์ ๋ฌธ์ ๋ณด๋ค ๋ ์ ๋ฐฐ์น๋ฉ๋๋ค.
์์ ์ด์ ํธ์์๋ ๋ชจ๋ธ์ด ํ๋์ ํฅํ๋ ๋ฐ ์ฌ์ฉ๋์์ง๋ง ๋์ค์ ์ํ์ ์ ํฅํ๋๋ก ํ์ ํ์ต๋๋ค. ์ด๋ ๊ฒํ๋ฉด ์์ ๊ฐ์ด ์ํ์ ์ด ๋ฏธ์น ๋ฏ์ด ํ์ ํ๊ธฐ ๋๋ฌธ์ ๋ฐ์ฌ๊ฐ ๋ง์ง ์์ ๋ ์ฝ๊ฒ ๋ณผ ์ ์์ต๋๋ค.
๋ชจ๋ธ ์์ฒด์ ๋ ธ๋ฉ ๋งต ์ฌ์ฉ์ KhronosGroup / glTF # 952์์ ๋ ผ์ํ ๊ฒฐ๊ณผ ์ฌ๋ฐ๋ฅธ ๊ฒ์ผ๋ก ํ์ธ๋์์ต๋๋ค.
ThreeJS์ ๋ ธ๋ฉ ๋งต ์ฒ๋ฆฌ๋ # 11315์์ ์ง๋ฌธ๋์์ต๋๋ค.
BabylonJS๋ ์ต๊ทผ์ ์ ์ฌํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ฌ ์ฌ๊ธฐ ์ ์์ ๋์์ต๋๋ค . ๋ค์ ์ ์์ ์ฌํญ์ด ์ ์ฉ๋ BabylonJS์ glTF 2.0 ๋ก๋์ ๋ผ์ด๋ธ ๋ฐ๋ชจ์ ๋๋ค .
๊ฐ์ฌํฉ๋๋ค!
๋ค์ ์ค์ ์ถ๊ฐํ๋ฉด ๋ชจ๋ธ์ด ์ฌ๋ฐ๋ฅด๊ฒ ๋ ๋๋ง๋๋ ๊ฒ์ฒ๋ผ ๋ณด์ ๋๋ค.
materialParams.normalScale = new THREE.Vector2(-1, 1);
ํ์ง๋ง ๋ฌธ์ ๋ฅผ ์ ์ดํดํ๊ณ ์๋์ง ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. # 11315๋ฅผ ์ดํดํ๋ฉด ๋์์ด ๋ ์ ์์ต๋๋ค.
@donmccurdy ๊ทํ์ ์กฐ์ธ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค.
normalScale์ ์กฐ์ ํ์ฌ ๊ฐ์ ํ๋ ๊ฒ์ ์์์ต๋๋ค.
๊ทธ๋ฌ๋ glTF ๋ชจ๋ธ์ด ๋ง๋ค๋ฉด glTF Loader๊ฐ ์ฒ๋ฆฌํ๋ ๊ฒ์ด ๋ ์ข๋ค๊ณ ์๊ฐํฉ๋๋ค.
@ cx20 ๋์,์ด ์์ ์ ์ด์ THREE.GLTF2Loader์ ๋ณํฉ๋ฉ๋๋ค.
์์ ์ค์์ ํ์ธํ์ต๋๋ค.
์ด๊ฒ์ r101๊ณผ r104 ์ฌ์ด์์ ํด๋ณดํ์ต๋๋ค.
https://github.com/mrdoob/three.js/pull/15749 ์ฐธ์กฐ โ ํ๊ท๋ ์๋์ ์ธ ๊ฒ์ด๋ฉฐ ๋ชจ๋ธ์ ์ ์ ์ ํฌํจํ์ฌ ํผํ ์ ์์ต๋๋ค.
์ด์์ ์ผ๋ก ์ฐ๋ฆฌ๋ ์ด๊ฒ์ ์์ ํ ํด๊ฒฐํ๊ธฐ ์ํด mikktspace ํ์ ํธ๋ฅผ ์์ฑํ๊ธฐ์ํ JS ๊ตฌํ์ ๊ฐ์ง๊ณ ์์ ๊ฒ์ด์ง๋ง ๊ทธ๊ฒ์ ์๋นํ ๋ณต์กํฉ๋๋ค.
๋๋ ์ง๊ธ๊น์ง # 15749๋ฅผ ๋ชฐ๋์ต๋๋ค. ๋๋ ์ด๊ฒ์ ์ํด ๊ฒฝ๊ณ๋ฅผ ์์๋ค. ๋๋ ์ฐ๋ฆฌ๊ฐ ์ ์ด๋ ๋ฐํ์์ ๊ทผ์ฌ ํ ์์๋ glTF์ ํ์ ํธ๋ฅผ ์ ์ํ๋ ๋ฐ ์ถฉ๋ถํ ์ผ์ํ๋ค๊ณ ์๊ฐํ๋ค.
๋ธ๋ ๋ ๋ด๋ณด๋ด๊ธฐ๋ ๊ธฐ๋ณธ์ ์ผ๋ก glTF ํ์ ํธ๋ฅผ ๋ด ๋ณด๋ด์ง ์์ต๋๋ค. ํ์ผ ํฌ๊ธฐ๋ฅผ ์ค์ด๋ ๋ฐ ๋์์ด๋๋ฉฐ glTF์ ์ฃผ์ ๊ตฌํ์ ๋ชจ๋ ํ์ ํธ์์ด์ด ํ ์คํธ๋ฅผ ํต๊ณผํ์ต๋๋ค. ์ด ๋ณ๊ฒฝ์ผ๋ก ThreeJS์ glTF ๋ชจ๋ธ ๋๋ถ๋ถ์ ๋ํ ๋ ธ๋ฉ ๋งคํ์ด ์์๋์์ ์ ์์ต๋๋ค.
๋ฌด์จ ์ผ์ด ์ผ์ด ๋ฌ๊ณ ์ ์ผ์ด ๋ฌ๋์ง ๋ ๊น์ด ์ดํดํ๊ธฐ ์ํด ๋ชจ๋ ์ฐ๊ฒฐ๋ ๋ฌธ์ ๋ฅผ ์ฝ์ด ๋ณผ ์๊ฐ์ด ํ์ํฉ๋๋ค. ํ์ง๋ง ๋๋ถ๋ถ์ ๋ชจ๋ธ์ด ๊ธฐ๋ณธ์ ์ผ๋ก ํด๋น ๋ฒ์ฃผ์ ์๋ค๊ณ ๋ฏฟ๊ธฐ ๋๋ฌธ์ glTF ์ปค๋ฎค๋ํฐ๋ ์ ์ ์๋ ๋ชจ๋ธ์ ๋ค์ ์ฌ๋ฐ๋ฅด๊ฒ ๋ ๋๋งํ๊ธฐ ์ํด์ด ๋์ ์ฐ์ ์์๋ฅผ ๊ณ ๋ คํด์ผํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
๋ค์ ์ฌ๋ ์ค ๐
์ด ๋ณ๊ฒฝ์ผ๋ก ThreeJS์ glTF ๋ชจ๋ธ ๋๋ถ๋ถ์ ๋ํ ๋ ธ๋ฉ ๋งคํ์ด ์์๋์์ ์ ์์ต๋๋ค.
๋๋ ๊ทธ๊ฒ์ด ๊ทธ๋ค์ง ์ฌ๊ฐํ๋ค๊ณ ์๊ฐํ์ง ์์ต๋๋ค. ์ฐ๋ฆฌ๋ ํญ์ ํ์๋ฌผ์ ์ฌ์ฉํ์ฌ ์
ฐ์ด๋์์ ์ค์๊ฐ์ผ๋ก ํ์ ํธ๋ฅผ ์์ฑ ํด ์์ผ๋ฉฐ ์ฌ์ ํ ๊ทธ๋ ๊ฒํ๊ณ ์์ต๋๋ค. ์ฐ๋ฆฌ๋ ์ด์ ์์ด ํน์ ํ
์คํธ ๋ชจ๋ธ์ ์์ ํ๊ธฐ ์ํด ๋ฐ์ํ ํดํน ( normalScale.y *= -1
)์ ํฌํจํ์ง๋ง ๋ค๋ฅธ ์์ ๋ ๊นจ๋จ ๋ ธ์ต๋๋ค. ๊ทธ๊ฒ์ด ์ธ์ ๋์์ด๋์๋์ง, ๊ทธ๋ ์ง ์์๋ ์ง์ ๋ํ ์ค๋ช
์ด ์๊ธฐ ๋๋ฌธ์ ์ ์ฅ๋ ํ์ ํธ๋ฅผ ์ง์ํ๋ฉด ํดํน์ ์ ๊ฑฐํ์ต๋๋ค.์ด ๊ฒฝ์ฐ ํ์คํ ์๋ชป๋์์ ๊ฒ์
๋๋ค. ์ด์ ํดํน์ ์์กดํ๊ณ ํ์ ํธ๋ฅผ ํฌํจํ์ง ์๋ ๋ชจ๋ธ์ด ์์๋๊ณ ํดํน์ ์ํด ํ์ ๋ ๋ชจ๋ธ (ํ์ ํธ๋ฅผ ํฌํจํ์ง ์์)์ด ์์ ๋ฉ๋๋ค.
ํ์ง๋ง ๋๋ถ๋ถ์ ๋ชจ๋ธ์ด ๊ธฐ๋ณธ์ ์ผ๋ก ํด๋น ๋ฒ์ฃผ์ ์๋ค๊ณ ๋ฏฟ๊ธฐ ๋๋ฌธ์ glTF ์ปค๋ฎค๋ํฐ๋ ์ ์ ์๋ ๋ชจ๋ธ์ ๋ค์ ์ฌ๋ฐ๋ฅด๊ฒ ๋ ๋๋งํ๊ธฐ ์ํด์ด ๋์ ์ฐ์ ์์๋ฅผ ๊ณ ๋ คํด์ผํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
์ ์ฐธ์กฐ. ์ผ๋ฐ์ ์ผ๋ก ์ ์ ์์ด ๋ชจ๋ธ์ ์ ์ ํ๊ฒ ๋ ๋๋งํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ๊ทธ๋ฌ๋ glTF ์ฌ์์ ๋ฐ๋ผ mikktspace ํ์ ํธ๋ฅผ ์์ฑํ์ง ์์ต๋๋ค. ๋ด๊ฐ ์๋ ํ JS ๊ตฌํ์ ์กด์ฌํ์ง ์์ผ๋ฉฐ, ํ์ ๊ธฐ๋ฐ ์ ฐ์ด๋ ๊ตฌํ์ ๋จ์ํ "๊ฑฐ์ ์ถฉ๋ถํ ์ข์"๊ทผ์ฌ์น์ ๋๋ค. ์ด ์ํ ๋ชจ๋ธ์ ๊ทผ์ฌ์น์ ํ๊ณ๋ฅผ ๋ณด์ฌ์ฃผ๋ ์๋์ ์ผ๋ก ๊ทน๋จ์ ์ธ ๊ฒฝ์ฐ์ ๋๋ค.
JS mikktspace ํ์ ํธ ์์ฑ ๊ตฌํ์ ๊ฐ๊ฒ๋์ด ๊ธฐ์ฉ๋๋ค. ๊ทธ๊ฒ์ THREE.BufferGeometryUtils์ ์ข์ ์ถ๊ฐ๊ฐ ๋ ๊ฒ์ ๋๋ค. ๊ทธ๋ฌ๋ ๊ณต์ (๋ค์ดํฐ๋ธ) mikktspace ์ฝ๋๋ ์๋นํ ๊ธธ๊ณ , ํ์ ํธ๋ฅผ ์์ฑํ๋ ๋ฐ ์ผ๋ง๋ ๋ง์ ๊ฒ์ด ํ์ํ์ง ์์ง ์ถฉ๋ถํ ํ์ ํ์ง ๋ชปํ์ต๋๋ค.
์ฐ๋ฆฌ๋ ์ด์ ์์ด ํน์ ํ ์คํธ ๋ชจ๋ธ์ ์์ ํ๊ธฐ ์ํด ๋ฐ์ํ ํดํน (
normalScale.y *= -1
)์ ํฌํจํ์ง๋ง ๋ค๋ฅธ ์์ ๋ ๊นจ๋จ ๋ ธ์ต๋๋ค.
๋ค๋ฅธ glTF ๋ชจ๋ธ์ ๊ตฌ์ฒด์ ์ผ๋ก ๊นจ๋จ ๋ ธ๋์, ์๋๋ฉด ์ผ๋ฐ์ ์ธ ์์ผ๊น์?
์ผ์์๋ ๋ ๊ฐ์ง ์ ํ์ ์ ์ ๊ณต๊ฐ ๋
ธ๋ฉ ๋งต์ด ์์ต๋๋ค. Substance Painter๋ ์ด๊ฒ์ "DirectX Normals"์ "OpenGL Normals"๋ผ๊ณ ๋ถ๋ฅด๋๋ฐ, ์ด๊ฒ์ ๊ฐ์ฅ ํฐ ์ด๋ฆ์ ์๋๋๋ค. ์ฐจ์ด์ ์ ํนํ y
์ฑ๋์ด ๋ฐ์ ๋์ด ํ
์ค์ฒ์ ๋ชจ๋ ๋
น์ ์ฑ๋ ๊ฐ์ด ๋ฐ์ ๋๋ค๋ ๊ฒ์
๋๋ค. y *= -1
๊ณฑํ๋ ๊ฒ์ด ํ๋๋ฅผ ๋ค๋ฅธ ๊ฒ์ผ๋ก ๋ณํํ๋ ์ฌ๋ฐ๋ฅธ ๋ฐฉ๋ฒ์
๋๋ค. ์์ "DirectX Normals"๋ ์ผ์ ์ขํ๊ณ๋ฅผ ์ฌ์ฉํ๊ณ glTF๋ ๋
ธ๋ฉ / ์ ์ / ๋นํ ์ ํธ์ ๋ํ ์ค๋ฅธ์ ์ขํ๊ณ๋ฅผ ์ ์ํฉ๋๋ค.
๋ด๊ฐ ์๊ฐํ๋ ๊ฒ์ ThreeJS๊ฐ ์ ์ ์ ์๋ ๊ณ์ฐํ ๋ ๋ ธ๋ฉ ๋งต์ด ๋ฐ์ ๋ Y (DirectX) ์คํ์ผ๋ก ์์ฑ ๋ ๊ฒ์ผ๋ก ์์ํ๊ณ glTF์ ๋ํด ํด๋น ์ฑ๋์ ๋ค๋ก ๊ฐ์ ธ ์ค๋ฏ๋ก ๋ฐ์ ์ด ํ์ํ๋ค๋ ๊ฒ์ ๋๋ค. ๊ทธ๋ฌ๋ ์ ์ ์ด ์ ๊ณต๋๋ฉด ์ด๋ฌํ ๋ฐ์ ์ด ํ์ํ์ง ์์ต๋๋ค.
mikktspace์ ๋ํ ์ง๋ฌธ์ ์ด๊ฒ๊ณผ ๋ณ๊ฐ๋ผ๊ณ ์๊ฐํฉ๋๋ค. ์ฌ์์ด mikktspace๋ฅผ ์๊ตฌํ๊ณ ๋๋ถ๋ถ์ ๊ตฌํ์ด ํ๋ฉด ๊ณต๊ฐ ํ์๋ฌผ์ ์ฌ์ฉํ์ฌ ๋๋ต์ ์ผ๋ก ์ ์ฉํ๋ ๊ฒ์ ์ ๊ฐ์ ๋๋ค. ๋ ๊ฐ์ง๊ฐ ์ผ๋ง๋ ๋น์ทํ ์ง ๋ชจ๋ฅด๊ฒ ์ง๋ง mikktspace์์ ์์ฑ ๋ ๋ ธ๋ฉ ๋งต์ ๋งต์ ์ผ์ / ์ค๋ฅธ์์ด ์ฌ๋ฐ๋ฅด๊ฒ ์ํ๋๋ ํ ๊ทผ์ฌ๊ฐ์ผ๋ก ํ์ํ์ ๋ ํฉ๋ฆฌ์ ์ผ๋ก ์ ์๋ํ๋ ๊ฒ์ฒ๋ผ ๋ณด์ ๋๋ค.
(์๋ KhronosGroup / glTF-Sample-Models # 174์์๋ ์ด์ ๋ํ ๋ ผ์๊ฐ ์์ต๋๋ค)
ํนํ ๋ ธ๋ฉ ๋งต ์
๋ ธ๋ฉ ๋ฒกํฐ๋ + X๊ฐ ๋ง๊ณ + Y๊ฐ ์์ธ OpenGL ๊ท์น์ ์ฌ์ฉํฉ๋๋ค. + Z๋ ๋ทฐ์ด๋ฅผ ๊ฐ๋ฆฌ ํต๋๋ค.
์ด ๋ฌธ์ฅ์ ๋ชจ๋ธ์ ์ ์ ๋ฒกํฐ์์ด ๋ฐฐ์กํ์ฌ ๊ณต๊ฐ์ ์ ์ฝ ํ ์ ์๋๋กํฉ๋๋ค.
ํ ์คํธ ํด ๋ด ์๋ค. ์ฌ๊ธฐ์์๋ ํ์ธํธ ํ๋ก๊ทธ๋จ์ ์ผ๋ฃฉ์์ ๋น์ ์์ ์ธ ๋์ด ๋งต (๋ฒํ ๋งต)์ ๋ง๋ค์์ต๋๋ค.
์ด ๋์ด ํ๋๋ฅผ ๋ฐ๊นฅ ์ชฝ ๋ฒํ๋ก ์ ์ ํด ๋ณด๊ฒ ์ต๋๋ค. ์ฌ๊ธฐ์ ํฐ์ ํฝ์ ์ ๋ทฐ์ด์ ๋ ๊ฐ๊น๊ณ ๊ฒ์ ์ ํฝ์ ์ ๋ ๋ฉ๋ฆฌ ๋จ์ด์ ธ ์์ต๋๋ค.
์จ๋ผ์ธ ๋ณํ๊ธฐ (ํ์ง์ด ์์ฌ ์ค๋ฝ์ง๋ง ์ ์ ํ์ ๊ฒฐ๊ณผ๋ฅผ ์ดํด ๋ณด๊ฒ ์ต๋๋ค)๋ฅผ ์ฌ์ฉํ์ฌ ๋์ด ๋งต์์ ๋ ธ๋ฉ ๋งต์ผ๋ก ๋ณํํ์ต๋๋ค. ์ฌ๊ธฐ์๋ 3D ๋ชจ๋ธ, UV ์ขํ, mikktspace ๊ณ์ฐ ๋๋ ์ง์ค๋ฉํธ๋ฆฌ๊ฐ ์์ต๋๋ค. ๋ ธ๋ฉ ๋งต์ผ๋ก ๋ณํ ๋ ๋์ด ๋งต์ ๋๋ค. ๋๋ glTF์ ์ง์์ ๋ฐ๋ผ ์จ๋ผ์ธ ๋ณํ๊ธฐ๋ฅผ ์๋์ผ๋ก ๊ตฌ์ฑํด์ผํ๋ค. X๋ ๋ง๊ณ Y๋ ์๋ก, Z๋ ๋ทฐ์ด๋ฅผ ํฅํ๋๋กํ๋ค. ๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
๋ค์ ํ์ธํธ ํ๋ก๊ทธ๋จ์ผ๋ก ๊ฐ์ ธ ์์ ์์ ์ฑ๋์ ์ ๊ฑฐํ์ฌ์ด ๋ฒกํฐ๊ฐ ๊ฐ๋ฆฌํค๋ ์์น๋ฅผ ํ์ธํฉ๋๋ค. ์๋์์ ๊ฐ ์์ ์ฑ๋์ ๊ณ ์ ํ ํ์์กฐ ์ด๋ฏธ์ง๋ก ๋ถ๋ฆฌ๋์์ต๋๋ค. ๊ฒ์ ์์ -1.0
, ์ค๊ฐ ํ์์ 0.0
, ํฐ์์ +1.0
์๋ฏธํ๋ ๊ฒ์ผ๋ก ํด์๋ฉ๋๋ค.
๊ทธ๋์ ์ ์ด๋ ์ฌ๋ฐ๋ฅด๊ฒ ๊ตฌ์ฑํ ํ์๋ ์จ๋ผ์ธ ๋ณํ๊ธฐ๊ฐ glTF๊ฐ ์์ฒญํ ๊ฒ์ ์ํํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋นจ๊ฐ์ (X) ์ด๋ฏธ์ง์์ ์ค๋ฅธ์ชฝ์ ๊ธฐ์ธ๊ธฐ์ ํฐ์ ํฝ์ (+1.0)์ด ์์ผ๋ฉฐ ์ด๋ฏธ์ง์ ์ค๋ฅธ์ชฝ ๊ฐ์ฅ์๋ฆฌ์์๋ X ๋ฒกํฐ๋ฅผ ๊ฐ๋ฆฌ ํต๋๋ค. ๋นจ๊ฐ์ ์ด๋ฏธ์ง์ ์ผ์ชฝ์์ ๊ฒ์ ์ ํฝ์ (-1.0)์ ์ด๋ฏธ์ง ์ผ์ชฝ์์๋ X ๋ฒกํฐ๋ฅผ ๊ฐ๋ฆฌ ํต๋๋ค. ๋ น์ (Y) ์ด๋ฏธ์ง์์ ๋ฒํ์ ์๋จ ๊ฒฝ์ฌ๋ฅผ ๋ฐ๋ผ์๋ ํฐ์ ํฝ์ ์ ์ด๋ฏธ์ง ์๋จ์ Y ๋ฒกํฐ๋ฅผ ๊ฐ๋ฆฌ ํต๋๋ค. Z ๊ฐ์ ๊ฐ์ฅ ์ง๊ด์ ์ด์ง ์์ง๋ง ๋ฒํ์ ๋๊ณผ ๋ทํ ์์ฒด๋ ๋ชจ๋ ๋ทฐ์ด๋ฅผ ๊ฐ๋ฆฌํค๊ณ ๋ชจ๋ ์ธก๋ฉด์ ๊ฒฝ์ฌ๊ฐ ๋จผ ์ชฝ์ ๊ฐ๋ฆฌ ํค๋ฏ๋ก ๋ชจ๋ ๊ณ ๋ฅด๊ฒ ์ด๋ก์ต๋๋ค.
OpenGL ์คํ์ผ ๋ ธ๋ฉ ๋งต์ ๋ฐ์๋ค์ด๋ (glTF์ ๋ง์ฐฌ๊ฐ์ง๋ก) Blender Eevee์ ์ด๊ฒ์๋ก๋ํ๋ฉด ์ด๋จ๊น์? UV ๋งต์ด ํ์ ๋๊ฑฐ๋ ๋ฐ์ ๋๋๋ก ๋ฐฐ์จ์ด ์กฐ์ ๋๋ฉด ์ด๋ป๊ฒ๋ฉ๋๊น?
์ด๊ฒ์ ์ ์๋ํฉ๋๋ค. ์ฌ์ค, ์ด๋ฐ ๋ฐฉ์์ผ๋ก ์ ์ ๊ณต๊ฐ์ ์ ์ํ๋ ์์ ์ ์ํํธ์จ์ด๊ฐ ๋ฒกํฐ์ ๋ฏธ์ณ ๊ฐ๋๋กํ๋ ๊ฒ์ด ์๋๋ผ, ์ง์ค๋ฉํธ๋ฆฌ์ ๊ด๊ณ์์ด ๋ ธ๋ฉ ๋งต์ด ์ฌ๋ฐ๋ฅธ ๋ฐฉํฅ์ผ๋ก ๋ฐฐ์น๋๋๋กํ์ฌ ํ ์ค์ฒ ์ํฐ์คํธ์๊ฒ ์ฝ๊ฐ์ ์จ์ ํจ์ ํ์ฉํ๋ ๊ฒ์ ๋๋ค.
๊ทธ๋ฌ๋ ๋ชจ๋ ์ํํธ์จ์ด๊ฐ OpenGL ๊ท์น์ ์ฌ์ฉํ๋ ๊ฒ์ ์๋๋๋ค. ์ผ๋ถ๋ ๋ค๋ฅธ ๊ท์น (๋๋๋ก DirectX ๊ท์น์ด๋ผ๊ณ ํจ)์ ์ฌ์ฉํฉ๋๋ค. ์ฌ๊ธฐ์ Y ๋ฒกํฐ๋ ์๋จ์ด ์๋ ์ด๋ฏธ์ง ํ๋จ์ ๊ฐ๋ฆฌ ํต๋๋ค. ๋ค์์์ด ํ์์ ๋ด ์ด๋ฏธ์ง์ ๋ถํด ๋ Y ์ฑ๋์ ๋๋ค. ๋ ๋ฐ์ ํฝ์ ์ ์ด๋ฏธ์ง ํ๋จ์ ํฅํ๋ ํฝ์ ์ ๋๋ค.
์ด๋ฌํ DirectX ์คํ์ผ ๋ ธ๋ฉ ๋งต ์ค ํ๋๋ฅผ Blender Eevee์๋ก๋ํด๋ ์ฌ์ ํ ์๋ ํ ๊ฒ์ผ๋ก ์์ ํ ์ ์์ต๋๊น?
์๋์. ๋ธ๋ ๋๋ + Y๋ฅผ ์์ํ์ต๋๋ค. ์ํ์ ํ๋ ธ๊ณ ๋ฐ์ฌ ๋ ์ํ์ ์ด ์ฌ๋ฐฉ์ ๋๊ณ ์์ต๋๋ค.
OpenGL ์คํ์ผ์ ๋
ธ๋ฉ ๋งต์ + Y ๋ค์ด์ ์์ํ๋ ์์ง์๋ก๋ํ๋ ๊ฒฝ์ฐ์๋ ๋ง์ฐฌ๊ฐ์ง์
๋๋ค.
์ด๊ฒ์ด NormalTangentTest ๋ชจ๋ธ์ด ํ ์คํธํ๋ ค๋ ๊ฒ์ ๋๋ค. ๊ฐ ํ์ UV ์ขํ๋ฅผ ๋ค๋ฅธ ๋ฐฉํฅ์ผ๋ก ํ์ ํ์ฌ ๋ฐ์ฌ๊ฐ ์ด๋ฌํ ๋ค๋ฅธ ๋ฐฉํฅ์์ ์ค๋ฅธ์ชฝ ์๋ฅผ ํฅํ๋๋กํฉ๋๋ค.
ํ๋ฆฌ๋ฏธํฐ๋ธ์ UV ์ขํ๊ฐ ์ฃผ์ด ์ก์ ๋ ๊ณ ๋ ํ ํ๋ฆฌ๋ฏธํฐ๋ธ์ ๋ํ ํ์ ํธ๋ฅผ ๊ณ์ฐํ๋ ๋ฐฉ๋ฒ๊ณผ ๋ฐ์ด ์ต ์ ํธ์ ์ฌ์ฉํ W ๊ธฐํธ์ ๋ํ ๊ตฌ์ฒด์ ์ธ ๊ณต์์ด ์คํ์ ์ฌ์ ํ ํ์ํฉ๋๋ค. "OpenGL ๋ฒ์ "๋ฐ "DX ๋ฒ์ "์ ๊ณต์์ ๋์ถ ํ ๋งํผ ์ ํํ์ง ์์ต๋๋ค. ๊ทธ๋ค์ ๊ด์ต์ ์ธ๊ธ ํ ์ ์์ง๋ง, ๊ตฌํ ์๋ก์ ๊ทธ๊ฒ์ ์ด๋ป๊ฒํด์ผํ ์ง ๋ชจ๋ฅด๊ฒ ์ต๋๋ค.
๋ด๊ฐ ํ์ฌํ๋ ์ผ์์ด ํน์ ์ํ๊ณผ ์ผ์น์ํค๊ธฐ ์ํด MikkTSpace์์ ๋ค์งํ TangentW๋ฅผ ๋ฐฉ์ถํ๋ ๊ฒ์ ๋๋ค.
๋ค๋ฅธ glTF ๋ชจ๋ธ์ ๊ตฌ์ฒด์ ์ผ๋ก ๊นจ๋จ ๋ ธ๋์, ์๋๋ฉด ์ผ๋ฐ์ ์ธ ์์ผ๊น์?
๋ณด๊ณ ๋ ๋ฒ๊ทธ๋ ํนํ glTF ๋ชจ๋ธ๊ณผ ๊ด๋ จ์ด ์์ต๋๋ค. ์ฆ, FBX ๋๋ COLLADA๋ฅผ ํตํ ๋จธํฐ๋ฆฌ์ผ ๋ด๋ณด๋ด๊ธฐ์ ๋ํ ํ์ ์ด ์ถฉ๋ถํ์ง ์์ ์ด๋ฌํ ๋ ธ๋ฉ ๋งต ๊ท์น์ด ์์ ํ ์ดํด๋๊ณ ํ ์คํธ๋์๋ค๊ณ ๋งํ ์์์ ๊ฒ์ ๋๋ค.
์ฐจ์ด์ ์ ํนํ y ์ฑ๋์ด ๋ฐ์ ๋์ด ํ ์ค์ฒ์ ๋ชจ๋ ๋ น์ ์ฑ๋ ๊ฐ์ด ๋ฐ์ ๋๋ค๋ ๊ฒ์ ๋๋ค. y * = -1์ ๊ณฑํ๋ ๊ฒ์ ํ๋๋ฅผ ๋ค๋ฅธ ๊ฒ์ผ๋ก ๋ณํํ๋ ์ฌ๋ฐ๋ฅธ ๋ฐฉ๋ฒ์ ๋๋ค.
๊ฐ์ฌํฉ๋๋ค. ์ด๊ฒ์ ์ฐ๋ฆฌ๊ฐ ๊ทธ๊ฒ์ ๊ตฌํํ์ ๋๋ณด ๋ค ์ฐ๋ฆฌ์ "ํดํน"์ ๋ํ ํจ์ฌ ๋ ๋์ ์ ๋นํ์ ๋๋ค. ๐
์ฌ์์ด mikktspace๋ฅผ ์๊ตฌํ๊ณ ๋๋ถ๋ถ์ ๊ตฌํ์ด ํ๋ฉด ๊ณต๊ฐ ํ์๋ฌผ์ ์ฌ์ฉํ์ฌ ๋๋ต์ ์ผ๋ก ์ ์ฉํ๋ ๊ฒ์ ์ ๊ฐ์ ๋๋ค.
MikkTSpace๊ฐ ํ์ ํธ๋ฅผ ์์ฑํ๋ ๊ฐ์ฅ ๊ฐ๋ ฅํ ๋ฐฉ๋ฒ์ด๋ผ๋ ์ฌ์์ ๋ง์ต๋๋ค. ๋ฐํ์์์ด๋ฅผ ์๋์ผ๋ก ์ํํ๋ ๊ฒ์ด ๋ณดํธ์ ์ผ๋ก ์ฌ๋ฐ๋ฅธ ์ ํ์ด ์๋๋ผ๊ณ ์๊ฐํฉ๋๋ค. ๋ ์ ๋ ดํ ๋์์ด ํน์ ๋ชจ๋ธ์ ๋ง์ ๋ณด์ธ๋ค๋ฉด, ๋ ์ข์ ๋ณด์ด์ง ์๋ ๋ ๋น์ผ ๊ฒ์ ํ ์ด์ ๊ฐ ์์ต๋๋ค. ๊ทผ์ฌ์น๋ฅผ ํ์ฉํ๊ธฐ ์ํด ์ฌ์ ์ธ์ด๋ฅผ ๋์จํ๊ฒ ํ ์ ์์ง๋ง ์ด๊ฒ์ ๋ํด ๊ฐํ๊ฒ ๋๋ผ์ง ์์ต๋๋ค.
ํ๋ฆฌ๋ฏธํฐ๋ธ์ UV ์ขํ๊ฐ ์ฃผ์ด ์ก์ ๋ ๊ณ ๋ ํ ํ๋ฆฌ๋ฏธํฐ๋ธ์ ๋ํ ํ์ ํธ๋ฅผ ๊ณ์ฐํ๋ ๋ฐฉ๋ฒ๊ณผ ๋ฐ์ด ์ต ์ ํธ์ ์ฌ์ฉํ W ๊ธฐํธ์ ๋ํ ๊ตฌ์ฒด์ ์ธ ๊ณต์์ด ์คํ์ ์ฌ์ ํ ํ์ํฉ๋๋ค.
MikkTSpace ์๊ณ ๋ฆฌ์ฆ์ด ์ด์ฐ ์์ผ๋ก ํํํ๊ธฐ๊ฐ ๊ทธ๋ ๊ฒ ์ฌ์ด ์ง ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค ... ํ์ค MikkTSpace ์ฝ๋์ ๋ํ ๋์์ ์๊ตฌํ๊ณ ์์ต๋๊น? ์๋๋ฉด MikkTSpace ์ฌ์ฉ ์ง์นจ ์ธ์ ์ถ๊ฐ ์ ๋ณด๊ฐ ์์ต๋๊น? ํํ
์๋ ๋ฌธ์ ์ ๊ฒฝ์ฐ normal.y *= -1
๋ฐฐ์จ์ ์ด๋๊ฐ์ ๋ณต์ํด์ผํ๋ ๊ฒ ๊ฐ์ต๋๋ค. ์ด๋ฅผ ์ํ ํ ์์๋ ์ธ ๊ฐ์ง ์์น๊ฐ ์์ต๋๋ค.
threejs๊ฐ ์ค์ ๋ก DirectX ๊ท์น์ ์ฌ์ฉํ๊ณ ์๊ณ ์๋ฅผ ๋ค์ด Blender๊ฐ ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ (c)์ ๊ฒฝ์ฐ๋ฅผ ๋ณผ ์ ์์ต๋๋ค. ํ์ง๋ง ๋น ๋ฅด๊ณ ์์ ํ ์๋ฃจ์ ์ ์ํด (a)๋ฅผ ์ฌ์ฉํ๊ณ ์ถ์ต๋๋ค.
๋ด๊ฐ ์๊ฐํ๋ ๊ฒ์ ThreeJS๊ฐ ์ ์ ์ ์๋ ๊ณ์ฐํ ๋ ๋ ธ๋ฉ ๋งต์ด ๋ค์งํ Y (DirectX) ์คํ์ผ๋ก ์์ฑ ๋ ๊ฒ์ผ๋ก ์์ํ๋ค๋ ๊ฒ์ ๋๋ค.
์๋, three.js๋ ...
three.js๋ + Y๊ฐ ์ ์ ๊ณต๊ฐ์ ๋ํด "์์ชฝ"์ด๊ณ ์ฆ๊ฐํ๋ V๋ uv ๊ณต๊ฐ์ "์์ชฝ"์ด๋ผ๊ณ ๊ฐ์ ํฉ๋๋ค.
์ฆ, three.js๋ uv (0, 0)๊ฐ ํ
์ค์ฒ์ ์ผ์ชฝ ํ๋จ ๋ชจ์๋ฆฌ์ ์๋ค๊ณ ๊ฐ์ ํ๊ณ glTF ์ฌ์์ ์ผ์ชฝ ์๋จ์ ๊ฐ์ ํฉ๋๋ค. ์ด๊ฒ์ด GLTFLoader
๊ฐ texture.flipY
์ false
์ค์ ํ๋ ์ด์ ์
๋๋ค. (three.js๋ ๊ธฐ๋ณธ์ ์ผ๋ก texture.flipY
๋ฅผ true
๋ก ์ค์ ํฉ๋๋ค.)
ํ์ ํธ๊ฐ ์์ผ๋ฉด three.js๋ ํ๋ฉด ๊ณต๊ฐ ํ์๋ฌผ์ ์ฌ์ฉํ์ฌ ํ์ ํธ๋ฅผ ์ถ์ ํฉ๋๋ค. ์ฒด์ธ ๊ท์น์ ์ฌ์ฉํ์ฌ ๊ทธ๋ ๊ฒํฉ๋๋ค. ์ด ๊ณ์ฐ์ ๊ฐ์ ์ ์ ์ ๊ณต๊ฐ๊ณผ uv ๊ณต๊ฐ์ด ๋์ผํ ๋ฐฉํฅ์ ๊ฐ๋๋ค๋ ๊ฒ์ ๋๋ค.
์ ์ ํ๊ฒ ์์ฑ๋ glTF ๋ชจ๋ธ์ ๊ฒฝ์ฐ์ด ๊ฐ์ ์ ์ฌ๋ฐ๋ฅด์ง ์์ต๋๋ค. ๊ทธ๋ฌ๋ glTF spec_์ _ ์ ์ ํ๊ฒ ์ค์ํ๋ ๋ชจ๋ธ์ ๋ํด normalScale.y = - 1
๋ฅผ ์ค์ ํ์ฌ ๋ณด์ ํ ์ ์์ด์ผํฉ๋๋ค.
๋ํ ์
ฐ์ด๋์์ flipY
ํ๋๊ทธ๋ฅผ ์ฌ์ฉํ์ฌ์ด ๋ฌธ์ ๋ฅผ ์๋์ผ๋ก ์์ ํ ์์๋ ๊ฒ ๊ฐ์ต๋๋ค.
normalScale.y
์ด ์๋ํ์ง ์์ผ๋ฉด ๋ค๋ฅธ ์์
์ด ์งํ ์ค์
๋๋ค.
์ด ์ค๋ช ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค. ๋๋ ์ฐ๋ฆฌ๊ฐ ์์ผ๋ก ๋์๊ฐ ๊ธธ์ด ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
๋ํ ์ ฐ์ด๋์์
flipY
ํ๋๊ทธ๋ฅผ ์ ์ฉํ์ฌ์ด ๋ฌธ์ ๋ฅผ ์๋์ผ๋ก ์์ ํ ์์๋ ๊ฒ ๊ฐ์ต๋๋ค.
์, glTF๊ฐ ์์ฒด ํ์ ํธ ๋ฒกํฐ๋ฅผ ์ ๊ณตํ๋ ๊ฒฝ์ฐ๋ฅผ ์ ์ธํ๊ณ ๋ ๊ทธ๋ ์ง ์์ต๋๊น? ์๋ ๊ณ์ฐ ํ์ ํธ์๋ง flipY
ํ
์คํธ์ y
์ ํด๋น ๋ถ์ ์ด ํ์ํฉ๋๋ค.
๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ ... ๋ด NormalTangentMirrorTest
๋ชจ๋ธ์ ์๋ชป๋ ์ ์ ์ด ์ธ์ฝ๋ฉ๋์ด ์์์ ์๋ฏธํฉ๋๋ค. ์ฆ, Blender glTF ๋ด๋ณด๋ด๊ธฐ ์์ฒด๊ฐ glTF ๋ชจ๋ธ์ ์๋ชป๋ ์ ์ ์ ๋ฃ๋ ๊ฒ์
๋๋ค.
ํธ์ง : ๋ด ๋ณด๋ธ ์ ์ ๋ฒกํฐ์ ์ ํ์ฑ์ ํ์ธํ์ผ๋ฉฐ Y ๋ฐ์ ์ด ํ์ํ์ง ์์ต๋๋ค. ํ์ํ ๊ฒฝ์ฐ ์์ธํ ๋ด์ฉ์ ๊ฒ์ ํ ์ ์์ต๋๋ค.
๊ทธ๋ฌ๋ ์ฌ๋ฐ๋ฅธ ์กฐ์น๋ ์๋ ์์ฑ ๋ ์ ์ (์ ๊ณต๋ ์ ์ ์ด ์๋)์ด flipY
ํ๋๊ทธ์ ํจ๊ป ์ฌ์ฉ๋ ๋๋ง normalScale.y
์ ๋ค์ง๋ ๊ฒ ๊ฐ์ต๋๋ค. ์๊ฐ?
์ด์ ๊ฒ์๋ฌผ์์ ์์ฑ ํ์ ํธ๊ฐ ์์ ๋ ๋ฐ์ ๋ ๋ฒ์ ์ ์๋์ผ๋ก ๋ณด์ ํ๋ ๋ฐฉ๋ฒ์ ์ค๋ช ํ์ต๋๋ค. ํ๋ฉด ๊ณต๊ฐ ํ์๋ฌผ์ด ์ฌ์ฉ๋์ง ์๊ธฐ ๋๋ฌธ์ ์ ์ ์ด ์กด์ฌํ ๋ ๋ณด์ ํ ๊ฒ์ด ์์ด์ผํฉ๋๋ค.
๋ํ ์
ฐ์ด๋์์ flipY
ํ๋๊ทธ๋ฅผ ์ฌ์ฉํ์ฌ์ด ๋ฌธ์ ๋ฅผ ์๋์ผ๋ก ์์ ํ ์ ์๋ค๊ณ ์ ์ํ์ต๋๋ค. ๊ทธ๋ฌ๋ normalScale.y
๋ค์ง์ด์ ์๋์ผ๋ก ๊ณ ์น ๊ฒ์ด๋ผ๊ณ ๋งํ์ง๋ ์์์ต๋๋ค. ์ฌ์ฉ์ ์ค์ ์ ๋ณ๊ฒฝํด์๋ ์๋๋ค๊ณ ์๊ฐํฉ๋๋ค.
์ด์จ๋ ์ฐ๋ฆฌ๊ฐ ๊ทธ ๊ธธ์ ๊ฐ๊ธฐ ์ ์์ด ๊ฐ์ค์ ๊ฒ์ฆํ๋ ๊ฒ์ด ํ์์ ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
glTF ์ฌ์์ ์ ๋๋ก ์ค์ํ๋ ๋ชจ๋ธ์ ๋ํด normalScale.y =-1์ ์ค์ ํ์ฌ ๋ณด์ ํ ์ ์์ด์ผํฉ๋๋ค.
์ฌ๋ฐ๋ฅด๊ฒ ๋ ๋๋ง๋์ง ์๋ ๋ชจ๋ ๋ชจ๋ธ์ ๋ํ ์ค๋ช ์ด ์์ด์ผํฉ๋๋ค.
์ฌ์ฉ์ ์ค์ ์ ๋ณ๊ฒฝํด์๋ ์๋๋ค๊ณ ์๊ฐํฉ๋๋ค.
๋ค, ์ฃ์กํฉ๋๋ค. ๊ทธ๋ฐ ์ข
๋ฅ์ ๊ตฌํ ์ธ๋ถ ์ฌํญ์ ์ง์ ํ ์๋๋ ์์์ต๋๋ค. ํ๋ฉด ๊ณต๊ฐ ํ์ ํธ ์์ฑ์ ์ํด _ flipY
ํ๋๊ทธ๋ฅผ ์กด์คํ๋ ๊ฒ _์ด ์ํ์ ์ผ๋ก ์๋ฏธํ๋ ๋ฐ์ ๋ํ ์คํด๊ฐ ์๋์ง ํ์ธํ๋ ค๊ณ ํฉ๋๋ค.
์ฌ๋ฐ๋ฅด๊ฒ ๋ ๋๋ง๋์ง ์๋ ๋ชจ๋ ๋ชจ๋ธ์ ๋ํ ์ค๋ช ์ด ์์ด์ผํฉ๋๋ค.
๊ทธ๊ฒ์ ์ ์ฌ์ ์ผ๋ก ํฐ ์ธํธ๊ฐ ๋ ์์๋ ๊ฒ์ฒ๋ผ ๋ค๋ฆฝ๋๋ค. ์ค์ ๋ก ๊ณต์ ํ ์คํธ ๋ชจ๋ธ๊ณผ ๊ทผ๋ณธ์ ์ผ๋ก ๋ค๋ฅธ ์์ ์ ์ํํ๋ ๋ชจ๋ธ์ด ์์ง๋ง ์ฌ์ ํ glTF์์ ๋ ธ๋ฉ ๋งต์ ์ ํจํ ์ฌ์ฉ์ผ๋ก ๊ฐ์ฃผ ๋ ์ ์๋ค๋ฉด ๋ฐ๊ฒฌํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ํ ์คํธ ๋ชจ๋ธ์ ์ ์ (๋ณํ๋์ง ์์) ์ง์ค๋ฉํธ๋ฆฌ์ ๋ํ ๋ ธ๋ฉ ๋งต์ ์ ํจํ ์ฌ์ฉ์ ๋ค๋ฃจ๊ธฐ์ํ ๊ฒ์ ๋๋ค. ํนํ ๋ทฐ์ด ์์ฑ ํ์ ํธ ๋ฒกํฐ์ ์์กดํ์ฌ ๋ค๋ฅธ ์ขํ๊ณ์์ ๋ชจ๋ธ์ ๊ตฌ์ฑํ๋ฉด์๋ ์ ํจํ glTF๋ผ๊ณ ์ฃผ์ฅํ๋ ๋ฐฉ๋ฒ์ ์์ด์ผํฉ๋๋ค.
์ด ๋ฌธ์ ์ ๋ฐ์ ํ ๊ด๋ จ์ด ์๋ค๊ณ ์๊ฐํฉ๋๊น? https://github.com/KhronosGroup/glTF-Sample-Models/issues/174
@WestLangley ์ง๊ธ๊น์ง ์ฐพ์ ๋ด์ฉ์
๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก khronos-NormalTangentTest (ํ์ ํธ ํฌํจ ์ ๋จ)๋ ์๋ชป ๋ณด์
๋๋ค.
normalScale.y = -1๋ก ์ค์ ํด๋ ์ฌ์ ํ ์๋ชป๋์์ต๋๋ค.
๋์ normalScale.x = -1๋ก ์ค์ ํ๋ฉด ์ฌ๋ฐ๋ฅด๊ฒ ๋ณด์
๋๋ค.
๋ ๋๋ง์ด ์ฝ๊ฐ ํฝ์
ํ๋์ด ๋ณด์ด๋ ๊ฒฝ์ฐ๋ฅผ ์ ์ธํ๊ณ , ํนํ ๊ธ์ ๋ฐ์ฌ๊ฒฝ์์๋ ๋์ฑ ๊ทธ๋ ์ต๋๋ค. ์ด๊ฒ์ ํ๋ฉด ๊ณต๊ฐ ๊ทผ์ฌ์น ๋๋ ๋ค๋ฅธ ๋ฒ๊ทธ์ ํ์๋ก ์์๋ฉ๋๊น?
์ ์ ์ด์๋ ๋ค๋ฅธ ์ข์ ํ ์คํธ ๋ชจ๋ธ์ด ์์ผ๋ฉด ๋ด ๋ฐฉ์๋๋ก ๋ณด๋ด์ฃผ์ธ์. ๋ํ ์ํ์ด ์๋์ง ํ์ธํ๊ณ glTF ์ฌ์์ ๋ง์ง ์๋ ์ํ์ด ์๋์ง ํ์ธํ๊ณ ์ถ์ต๋๋ค.
@elalish ๊ทธ ํ ์คํธ ๋ฒ ๋๋ ๋์๊ฒ ๋ง์ด๋์ง ์๊ณ , ๋์๊ฒ ๊ฒฐ์ฝ ๋ง์ด๋์ง ์์๊ณ , ์๋ง ๊ฒฐ์ฝ ๊ทธ๋ ๊ฒ๋์ง ์์ ๊ฒ์ ๋๋ค. ๊ทธ๋์ .. ์ค๋ช ํ๋ ๋ฐ ๋์์ด๋์ง ์์ ๊ฒ์ ๋๋ค.
์ด ์๋ ๋๋ฌด ๋๋ ํ ๋ IMHO์ ๋๋ค. ๋ฌด์จ ์ผ์ด ์ผ์ด๋๊ณ ์๋์ง ์ดํดํ๊ธฐ์ ์ถฉ๋ถํ ์๊ฐ์ ์๋ฃ๋ฅผ ์ ๊ณตํ๋ ์ผ๊ด๋ ํ ์คํธ ์ผ์ด์ค๊ฐ ํ์ํฉ๋๋ค.
BTW, ์ฐ๋ฆฌ๋ ๋ฒํผ ์ง์ค๋ฉํธ๋ฆฌ๋ฅผ ์ง์ํ๊ธฐ ์ํด ๋ถํ ํ ์์๋ VertexTangentHelper
(# 3511)์ ์ฌ์ฉํ์ต๋๋ค.
@WestLangley NormalTangentTest๋ฅผ ๋ ๋ช ํํ๊ฒ ๋ง๋๋ ๋ฐฉ๋ฒ์ ์์ ์ผ๋ฉดํฉ๋๋ค. ๊ทธ๊ฒ์ ์ด์ํ ์ผ์ํ์ง ์๊ณ ๋จ์ํ ๊ฐ ์ํ์ ๋ฐฉํฅ (UV ๊ณต๊ฐ์์)์ ํ์ ์ํต๋๋ค. ์ธ ๊ฐ์ ์ด์ ๋ค๋ฅธ ์ฌ๋ฃ๋ฅผ ํ ์คํธํ๊ธฐ์ํ ๊ฒ์ด๋ฉฐ ๊ธ์ ์ด๋ง์ผ๋ก๋ ์ถฉ๋ถํ ์ ์์ต๋๋ค. ๊ทธ ์ธ์๋ ํ ์คํธ ๋ชจ๋ธ์ด ํจ์ฌ ๋ ๊ฐ๋จ ํด์ง๊ณ ์ด๋ฌํ ๋ค์ํ UV ๋ฐฉํฅ์ ํ ์คํธ ํ ์ ์๋ค๊ณ ์๊ฐํ์ง ์์ต๋๋ค.
UV ํ์ ์๋ ๋ถ๊ตฌํ๊ณ 2D ์ด๋ฏธ์ง๋ก ๋ณผ ๋ ๋ ธ๋ฉ ๋งต์ ์ด๋ฏธ์ง๋ ๋ฒกํฐ๊ฐ ๊ฐ๋ฆฌํค๋ ๋ฐฉํฅ์ ๋ํด ์๋นํ ์ผ๊ด๋ฉ๋๋ค. ์ด๋ฏธ์ง์ 2D๋ณด๊ธฐ์์ ๋ชจ๋ ๋ฐ๊ตฌ์ ์ค๋ฅธ์ชฝ์๋ ๋์ ๋นจ๊ฐ์ ์ฑ๋ ๊ฐ์ด ์๊ณ ๋ชจ๋ ๋ฐ๊ตฌ์ ์์ชฝ ๊ฐ์ฅ์๋ฆฌ์๋ UV ์ขํ์ ๊ด๊ณ์์ด ๋์ ๋ น์ ์ฑ๋ ๊ฐ์ด ์์ต๋๋ค. ์ด๋ UV ๊ณต๊ฐ์์ ๋นจ๊ฐ์ (+ X)์ด ํ ์ค์ฒ์ ์ค๋ฅธ์ชฝ์ ๊ฐ๋ฆฌํค๊ณ ๋ น์ (+ Y)์ด UV ๊ณต๊ฐ์์ ํ ์ค์ฒ์ ์๋จ ๊ฐ์ฅ์๋ฆฌ๋ฅผ ๊ฐ๋ฆฌํค๋ glTF ์ฌ์์ ๋ฐ๋ฆ ๋๋ค. ์ด ์์ ์ ์ํํ๊ธฐ ์ํด ์ ๊ณต๋ ํ์ ํธ ๋ฒกํฐ๊ฐ ํ์ํ์ง ์์ต๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ์ฃผ์ด์ง ์ผ๊ฐํ์ ๋ํด + U ์ถ์ด ์ด๋ ๋ฐฉํฅ์ธ์ง์ ๋ํ ๊ฐ๋จํ ํ๋ฉด ๊ณต๊ฐ ์ถ์ ์ BabylonJS ๋ฐ CesiumJS๊ฐ ์ํํ๋ ๊ฒ์ฒ๋ผ ํ์ ํธ ๋ฐ ์ด์ค ํ์ ํธ ๋ฒกํฐ๋ฅผ ๊ณ์ฐํ๊ธฐ์ ์ถฉ๋ถํฉ๋๋ค. ๋ฌผ๋ก ThreeJS๋ ๋ง์ฐฌ๊ฐ์ง์ง๋ง ์์ง ์ค๋ช ๋์ง ์์ normalScale ์ถ ๋ฐ์ ์ด ์์ต๋๋ค.
glTF๊ฐ flipY
ํ๋๊ทธ๋ฅผ ์ฌ์ฉํ์ฌ UV ๊ณต๊ฐ์์ V
์ขํ๋ฅผ ๋ฐ์ ์ํค๋ ํผ๋์ ์ง์ ์ด ์์ต๋๋ค. ์ด๋ฏธ ์ ์๊ณ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋๋ ์ด๊ฒ์ด ์ค๋ช
๋์ง ์์ normalScale ํ๋ฆฝ์์ ์ญํ ์ํ๋ค๊ณ ์ค๋ซ๋์ ์์ฌํด ์์ต๋๋ค.
์ด๋ฏธ์ง์ ์์ ๋ฒ ์ดํน ์ค๋ฅ๋ ์์ต๋๋ค (์ ์๋ชป์ ๋๋ค. ์ ๋ ๋ช ๋ ์ Substance Painter๋ฅผ ์ฒ์ ์ฌ์ฉํ์ต๋๋ค). ํนํ ๊ธ ๋ฐ๊ตฌ์ ํํํ ๋ถ๋ถ์์ ์ฝ๊ฐ์ ๋๊ฐ์ ์ด์์๊ฐ ๋ณด์ ๋๋ค. ๊ทธ๋ฌ๋ ์ด๊ฒ์ด ์ ์ฒด์ ์ธ ํจ๊ณผ๋ฅผ ์์์ํค์ง ์์์ผํฉ๋๋ค. ๋ฒ ์ดํฌ์ ์ฃผ์ ์ํ ๋ถ๋ถ์ ์ ๋ ์์ผ๋ฉฐ 3D ๋๋ UV ์ขํ๊ฐ ๋ชจ๋ ๋ฐฉํฅ๊ณผ ์ ์ ์ผ๋ก ํ์ ํ๋ ๊ฒ๊ณผ ๊ด๊ณ์์ด ์ผ๋ฐ ํ ์ค์ฒ์ ์ ์ฒด 2D ์ด๋ฏธ์ง์์ "์์ชฝ"๊ณผ "์ค๋ฅธ์ชฝ"์ด ์ผ์ ํ ํจ๊ณผ๋ฅผ ์ ๋ณด์ฌ์ค๋๋ค. ์๋ต๋ฉ๋๋ค.
์ด๋ ์ํฐ์คํธ๊ฐ ํ ์ค์ฒ ์ด๋ฏธ์ง๋ฅผ ๋ง๋ค๊ธฐ ์ ์ UV ๋๋ ์ ์ ์ขํ์ ์ก์ธ์ค ํ ํ์๊ฐ ์๊ธฐ ๋๋ฌธ์ 3D ์ง์ค๋ฉํธ๋ฆฌ๊ฐ ์์ฑ๋๊ธฐ ์ ์ ๋ฐ๋ณต๋๋ ๋ ธ๋ฉ ๋งต ํ ์ค์ฒ๋ฅผ ์ ์ํ๋ ์ํฐ์คํธ์๊ฒ ์ค์ํ ํจ๊ณผ์ ๋๋ค.
@WestLangley ๋ด๊ฐ ๋ณธ ๊ฒ ์ค ์ต๊ณ ์ด๊ธฐ ๋๋ฌธ์์ด ํ ์คํธ๋ฅผ ์ข์ํฉ๋๋ค. ์ ๊ฐ ์ง์ ํ ๋ค๋ฅธ ํ ์คํธ ๋ชจ๋ธ์ ์ฌ์ฉํ๊ฒ๋์ด ๊ธฐ์ฉ๋๋ค.
๋ํ ํ๋กฏ์ด ๋๊บผ์์ง๋๋ค. ์๋ ํ
์คํธ๋ ์๋ฉด ์ฌ๋ฃ์
๋๋ค. # 17804 ๋๋ฌธ์ ๋จ๋ฉด์ผ๋ก ์๋ํ๊ธฐ๋ก ๊ฒฐ์ ํ์ต๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ์ฌ์ ํ ์๋ชป๋์์ง๋ง ์ด์ normalScale.y = -1๋ก ์ค์ ํ๋ฉด ์ ๋ต์ ์ป์ต๋๋ค.
์ ์ด๋ ์๋ฉด์ ๋ณ๊ฒฝํ๋ ๊ฒ์ด ์ ๋ฉด์ ๋ ๋์ ์ํฅ์ ๋ฏธ์น์ง ์๋๋ค๋ ๋ฐ ๋์ ํ ์ ์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
@emackey ๋์์ด ๋ ์์๋ ๋ ๋ค๋ฅธ ํ ์คํธ ๋ชจ๋ธ์ ์ฉ์ ๋ ๋ฒ์ ์ด์๋ ๋ฐ์ง์ด๋ ์ ๋ฐฉ์ฒด์ ๋ฅ๊ทผ ๋์ ์ ๋ฐฉ์ฒด ๋ชจ์์ผ๋ก ๋ง๋ค๋๋ก ์ค๊ณ๋ ํด๋น ๋ฒ์
@emackey ์ด๊ฒ์ ๋ํ ๋ชจ๋ ์์ ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค. ๋๋จํ ๊ฐ์ฌํฉ๋๋ค. ์ํฐ์คํธ์ ํจ๊ป ๋ฐ์ํ ์์๋ ๋ค์ํ ๋ฌธ์ ์ ๊ทน๋ณตํด์ผ ํ ๋ฌธ์ ๋ฅผ ๋ชจ๋ ์ดํดํฉ๋๋ค.
์๋ง๋ ๋น์ ์ @elalish ์ ํจ๊ป
@elalish ์ด์ ์ ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ต๋๋ค. ํ๋ ๋๋ ๋ชจ๋ ๊ฒ์ด ์๋๊ณ ์๋ค๋ ์ธ์์ ๋ฐ์๋ค. ๊ฐ๋จํ ํ
์คํธ ์ผ์ด์ค๊ฐ ์์ผ๋ฉด bisect
๋ฅผ ์ฌ์ฉํ์ฌ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์์น๋ฅผ ์๋ณ ํ ์ ์์ต๋๋ค.
์ฉ์ ๋ ๋ ธ๋ฉ์ด์๋ ๋ฐ์ง์ด๋ ํ๋ธ์ ๋ฅ๊ธ ์ง ์๊ณ ํ๋ธ ๋ชจ์์ด๋๋๋ก ์ค๊ณ๋ ํด๋น ๋ ธ๋ฉ ๋งต.
์๋ฃ : normal_map_flat.zip . Draco ํ์ด ์์ฑํ ํ์ ํธ ์์ ๋ฅผ ์ฌ์ฉํ์ฌ ํ์ ํธ ์์ฑ์ด์๋ ์ถ๊ฐ ๋ฒ์ ์ ๋ง๋ค์์ต๋๋ค.
ํ๋ ๋๋ ๋ชจ๋ ๊ฒ์ด ์๋๊ณ ์๋ค๋ ์ธ์์ ๋ฐ์๋ค.
๋ชจ๋ธ์ ์ ์ ์ด ํฌํจ ๋ ๊ฒฝ์ฐ ๋ชจ๋ ๊ฒ์ด ์๋ํ๋ ์ํ์ ๋๋ฌํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ ์ผ๋ฐ์ ์ผ๋ก ๋ฌธ์ ๊ฐ ์์ง๋ง ํนํ UV ์ด์์ ์ฃผ๋ณ์ ๊ฐ๋ฅํ ๊ฐ์ฅ์๋ฆฌ ์ผ์ด์ค๊ฐ ์์ต๋๋ค. ์ด ๊ฒฝ์ฐ ์ฌ์ฉ์์๊ฒ ์ ์ ์ ์ถ๊ฐํ๋๋ก ๊ถ์ฅํฉ๋๋ค. ๋๋ @emackey ๊ฐ https://github.com/mrdoob/three.js/issues/11438#issuecomment -507027586์์ ์ธ๊ธํ๋ฏ์ด GLTFLoader์์ normalScale.y *= -1
ํ๋ฆฝ์ ๋ณต์ํด์ผํฉ๋๋ค. ์ ์ ์ ์ ์ ์๋ตํฉ๋๋ค.
@donmccurdy ๊ฐ์ฌํฉ๋๋ค. ๋๋ ์ค๋์ด ๋ฌธ์ ์ ๋ํด ์๊ฐ์ด ์์ง๋ง ์ฌ์ ํ ํํํ ํ๋ธ ์ธก๋ฉด์ผ๋ก ์ด๋ ค์์ ๊ฒช๊ณ ์์ต๋๋ค. ๋น๋๋ ํ๋ฉด ( metallicFactor: 1, roughnessFactor: 0.1
)์ ๊ฐ๋๋ก ๋ชจ๋ธ์ ํธ์งํ๋ฉด ํ๋ธ ์ธก๋ฉด์ ๋ฐ์ฌ๊ฐ ๊ฝค ๋ง์ด ํค์ ์น๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค.
๋ด ํ ์คํธ ๋ชจ๋ธ์์ ๋์ผํ ํจ๊ณผ๋ฅผ๋ณด๊ณ ์์ต๋๋ค. ๋ ๋์ ๊ฒ์ Substance Painter์์ ์ผ๋ฐ ๋ฒ ์ดํน์ ์ํํ๋ ๊ฒ๊ณผ Blender Cycles์์ ๋ฒ ์ดํนํ๋ ๊ฒฝ์ฐ ๋ค๋ฅธ ํจ๊ณผ์ ๋๋ค. ๊ฐ ํ๋ก๊ทธ๋จ์ ์์ฒด ๋ทฐํฌํธ์ ๋ง๊ฒ ๋ฒ ์ดํฌํ์ง๋ง ๋ค๋ฅธ ํ๋ก๊ทธ๋จ์๋ก๋ ํ ๋ ํผํฉ์ glTF๊ฐ ์์ด๋ ์๋ฒฝํ๊ฒ ํํํ์ง ์์ต๋๋ค. ๋งค์ฐ ๊ฐ๊น์ง๋ง ํํํ ํ๋ฉด์์ ๊ฐ์ฅ ์์ ์ฐจ์ด๋ก ์ธํด ์ข์ ๋ฐฉ์์ด ์๋ ํ ํ์ฐ์ค ๊ฑฐ์ธ์ด๋ฉ๋๋ค.
SP ๋ Blender ๋ ๋ค์ํ WebGL ์์ง์์ ์ผ๊ฐํ์๋ฉด์ ๊ฐ๋ก ์ง๋ฅด๋ ์ ์ ์ฌ์ด์ ์ผ๋ฐ ๋ฒกํฐ (๋๋ TBN ๊ณต๊ฐ)๊ฐ ๋ณด๊ฐ๋๋ ๋ฐฉ์์ ๋ฏธ๋ฌํ ์ฐจ์ด๊ฐ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋๋ Gimp๋ฅผ ์ฌ์ฉํ์ฌ SP ๋ฒ ์ดํฌ์ ๋ธ๋ ๋ ๋ฒ ์ดํฌ์ "์ฐจ์ด"๋ฅผ ์คํํ๊ณ ๊ฐ ๋ฒํ ์ค์์ ๊ฒ์ ์ (๋์ผํ RGB ๊ฐ)์ด ๋์์ง๋ง ๋ฒํ ์ค ์ฌ์ด์ ๊ณต๊ฐ์ ๋งค์ฐ ํฌ๋ฏธํ ๊ฐ๋์ ์์ฉ๋์ด ์ฐจ์ด๋ฅผ ๋ณด์ฌ์ค๋๋ค.
๋๋ ๋ฏธ๋ฌํ ํ ํ์ฐ์ค ํจ๊ณผ๋ฅผ ๊ธฐ๋ํ ๊ฒ์ด์ง๋ง ํ์ฌ ์ป๊ณ ์๋ ๊ฒ์ ์๋๋ค (์ ์ ์์ ๋ฒ์ ).
with tangents ๋ฒ์ ์ ์ค์ ๋ก ๋ ์ข์ง ์์ ์ด๊ฒ์ด ์ค์ ๋ก ์ ํจํ glTF์ธ์ง ๊ถ๊ธํดํฉ๋๋ค.
@emackey @donmccurdy๊ฐ ์ ๊ณต ํ ์ด๋ฌํ ๋ชจ๋ธ ์ค ํ๋ ๋๋ ๋ ๋ชจ๋๊ฐ ์ค์ ๋ก ์ ํจํ glTF์ธ์ง ์ฌ๋ถ๋ฅผ ๋งํ ์๊ฒฉ์ด ์๋ค๊ณ ์๊ฐํ์ญ๋๊น? ๊ทธ๋ ๋ค๋ฉด ํฐ ๋ฌธ์ ๊ฐ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
์ด ํน์ ํ๋ธ๋ ๋ด๊ฐ ๋ฌด์์ ๋งํด์ผํ ์ง ๋๋ ๋ฌผ๋ฆฌ์ ์ผ๋ก ์ฌ์ค์ ์ธ ๋ฐ์ฌ๊ฐ ๊ณต์ ํ ๊ธฐ๋์ธ์ง ์ ์์๋ ๊ทน๋จ์ ์ธ ์์
๋๋ค. ๋
ธ๋ฉ ๋งต์ ๋ฉ์์ ์ ์ฒด ํ๋ฉด์ ๋ณํ์ํค๋ ๊ฒ์ด ์๋๋ผ ๋ฒํ ๋ฐ ์ํน ๋ค์ด๊ฐ ๋ถ๋ถ๊ณผ ๊ฐ์ ์ธ๋ถ ์ฌํญ์ ์ถ๊ฐํ๊ธฐ์ํ ๊ฒ์
๋๋ค. ์ ์ ์ด ์ฌ๋ฐ๋ฅด๊ฒ ์ฝํ๊ฑฐ๋ ์์ฑ๋๋์ง ํ
์คํธํ๋ ๋งค์ฐ ํจ๊ณผ์ ์ธ ๋ฐฉ๋ฒ์ด์์ต๋๋ค. ๋๋ normalScale.y *= -1
๋ณ๊ฒฝ์ด ๊ทธ๊ฒ์ ๊ณ ์น๊ธฐ์ ์ถฉ๋ถํ์ง ์๋ค๋ ๊ฒ์ ์๋๋ค. ์ด๊ฒ์ ์ฐ๋ฆฌ๊ฐ ์ฒ์์ ์ ์ฅ๋ ์ ์ ์ ์ง์ํ๋๋ก ์ ๋ ํ ์ ์ค ํ๋์์ต๋๋ค.
๋ฐ์ฌ๋ BabylonJS์์๋ ๊ฑฐ์น ์ด ๋ณด์
๋๋ค.
ํ์ธ ๋ ์ ์ผํ ๋ฌธ์ ๊ฐ NormalTangentTest์ ์๊ณ ์ค์ ๋ก ์๋ชป ๋ ๋๋ง๋๋ ๋ชจ๋ธ์ ์ฌ์ฉ์๊ฐ ์ ์ํ์ง ์์ ๊ฒฝ์ฐ ์ฌ๊ธฐ์ ๋ณ๊ฒฝ์ ๋ณด๋ฅํด์ผํ ๊น์?
๋๋ ์ฌ์ ํ normalScale.y *= -1
์น์๋ฅผ ๋ณต์ํ๋ ๊ฒ์ ๊ด์ฐฎ์ง ๋ง, ๋ฌธ์ ์ ์๊ฐ ๋ถ์กฑํ๋ค๋ ๊ฒ์ ๊ทธ๋ฌํ ๊ทน๋จ์ ์ธ ์๋ฅผ ๋ง๋ค์ด์ผํ๋ค๋ ํ์ ๋ผ๊ธฐ๋ณด๋ค๋ ๋ฌธ์ ๊ฐ ์ฌ์ํ๋ค๋ ํ์์ฒ๋ผ ๋ณด์
๋๋ค.
ํ์ธ ๋ ์ ์ผํ ๋ฌธ์ ๊ฐ NormalTangentTest์ ์๊ณ ์ค์ ๋ก ์๋ชป ๋ ๋๋ง๋๋ ๋ชจ๋ธ์ ์ฌ์ฉ์๊ฐ ์ ์ํ์ง ์์ ๊ฒฝ์ฐ ์ฌ๊ธฐ์ ๋ณ๊ฒฝ์ ๋ณด๋ฅํด์ผํ ๊น์?
์์ : https://github.com/mrdoob/three.js/issues/17804 ๋ ์๋ฉด ์ฌ์ง๋ก ์ธํด ์ค์ ๋ก ๋ฌด์ธ๊ฐ๊ฐ ํด๋ณดํ์ ์ ์์์ ์์ฌํฉ๋๋ค. ๋ ์์ธํ ์กฐ์ฌ ํ ๊ฐ์น๊ฐ์๋ ๊ฒ ๊ฐ์ง๋ง, ๋จ์ํจ๊ณผ ์จ์ ํจ์ ์ํด ์ง๊ธ์ ์ ์ฃผ๋ฐ์ ํ๋ธ๋ฅผ ๊ทธ๋๋ก ๋์ด์ผํฉ๋๋ค. ๐
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
ํนํ ๋ ธ๋ฉ ๋งต ์
์ด ๋ฌธ์ฅ์ ๋ชจ๋ธ์ ์ ์ ๋ฒกํฐ์์ด ๋ฐฐ์กํ์ฌ ๊ณต๊ฐ์ ์ ์ฝ ํ ์ ์๋๋กํฉ๋๋ค.
ํ ์คํธ ํด ๋ด ์๋ค. ์ฌ๊ธฐ์์๋ ํ์ธํธ ํ๋ก๊ทธ๋จ์ ์ผ๋ฃฉ์์ ๋น์ ์์ ์ธ ๋์ด ๋งต (๋ฒํ ๋งต)์ ๋ง๋ค์์ต๋๋ค.
์ด ๋์ด ํ๋๋ฅผ ๋ฐ๊นฅ ์ชฝ ๋ฒํ๋ก ์ ์ ํด ๋ณด๊ฒ ์ต๋๋ค. ์ฌ๊ธฐ์ ํฐ์ ํฝ์ ์ ๋ทฐ์ด์ ๋ ๊ฐ๊น๊ณ ๊ฒ์ ์ ํฝ์ ์ ๋ ๋ฉ๋ฆฌ ๋จ์ด์ ธ ์์ต๋๋ค.
์จ๋ผ์ธ ๋ณํ๊ธฐ (ํ์ง์ด ์์ฌ ์ค๋ฝ์ง๋ง ์ ์ ํ์ ๊ฒฐ๊ณผ๋ฅผ ์ดํด ๋ณด๊ฒ ์ต๋๋ค)๋ฅผ ์ฌ์ฉํ์ฌ ๋์ด ๋งต์์ ๋ ธ๋ฉ ๋งต์ผ๋ก ๋ณํํ์ต๋๋ค. ์ฌ๊ธฐ์๋ 3D ๋ชจ๋ธ, UV ์ขํ, mikktspace ๊ณ์ฐ ๋๋ ์ง์ค๋ฉํธ๋ฆฌ๊ฐ ์์ต๋๋ค. ๋ ธ๋ฉ ๋งต์ผ๋ก ๋ณํ ๋ ๋์ด ๋งต์ ๋๋ค. ๋๋ glTF์ ์ง์์ ๋ฐ๋ผ ์จ๋ผ์ธ ๋ณํ๊ธฐ๋ฅผ ์๋์ผ๋ก ๊ตฌ์ฑํด์ผํ๋ค. X๋ ๋ง๊ณ Y๋ ์๋ก, Z๋ ๋ทฐ์ด๋ฅผ ํฅํ๋๋กํ๋ค. ๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
๋ค์ ํ์ธํธ ํ๋ก๊ทธ๋จ์ผ๋ก ๊ฐ์ ธ ์์ ์์ ์ฑ๋์ ์ ๊ฑฐํ์ฌ์ด ๋ฒกํฐ๊ฐ ๊ฐ๋ฆฌํค๋ ์์น๋ฅผ ํ์ธํฉ๋๋ค. ์๋์์ ๊ฐ ์์ ์ฑ๋์ ๊ณ ์ ํ ํ์์กฐ ์ด๋ฏธ์ง๋ก ๋ถ๋ฆฌ๋์์ต๋๋ค. ๊ฒ์ ์์
-1.0
, ์ค๊ฐ ํ์์0.0
, ํฐ์์+1.0
์๋ฏธํ๋ ๊ฒ์ผ๋ก ํด์๋ฉ๋๋ค.๊ทธ๋์ ์ ์ด๋ ์ฌ๋ฐ๋ฅด๊ฒ ๊ตฌ์ฑํ ํ์๋ ์จ๋ผ์ธ ๋ณํ๊ธฐ๊ฐ glTF๊ฐ ์์ฒญํ ๊ฒ์ ์ํํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋นจ๊ฐ์ (X) ์ด๋ฏธ์ง์์ ์ค๋ฅธ์ชฝ์ ๊ธฐ์ธ๊ธฐ์ ํฐ์ ํฝ์ (+1.0)์ด ์์ผ๋ฉฐ ์ด๋ฏธ์ง์ ์ค๋ฅธ์ชฝ ๊ฐ์ฅ์๋ฆฌ์์๋ X ๋ฒกํฐ๋ฅผ ๊ฐ๋ฆฌ ํต๋๋ค. ๋นจ๊ฐ์ ์ด๋ฏธ์ง์ ์ผ์ชฝ์์ ๊ฒ์ ์ ํฝ์ (-1.0)์ ์ด๋ฏธ์ง ์ผ์ชฝ์์๋ X ๋ฒกํฐ๋ฅผ ๊ฐ๋ฆฌ ํต๋๋ค. ๋ น์ (Y) ์ด๋ฏธ์ง์์ ๋ฒํ์ ์๋จ ๊ฒฝ์ฌ๋ฅผ ๋ฐ๋ผ์๋ ํฐ์ ํฝ์ ์ ์ด๋ฏธ์ง ์๋จ์ Y ๋ฒกํฐ๋ฅผ ๊ฐ๋ฆฌ ํต๋๋ค. Z ๊ฐ์ ๊ฐ์ฅ ์ง๊ด์ ์ด์ง ์์ง๋ง ๋ฒํ์ ๋๊ณผ ๋ทํ ์์ฒด๋ ๋ชจ๋ ๋ทฐ์ด๋ฅผ ๊ฐ๋ฆฌํค๊ณ ๋ชจ๋ ์ธก๋ฉด์ ๊ฒฝ์ฌ๊ฐ ๋จผ ์ชฝ์ ๊ฐ๋ฆฌ ํค๋ฏ๋ก ๋ชจ๋ ๊ณ ๋ฅด๊ฒ ์ด๋ก์ต๋๋ค.
OpenGL ์คํ์ผ ๋ ธ๋ฉ ๋งต์ ๋ฐ์๋ค์ด๋ (glTF์ ๋ง์ฐฌ๊ฐ์ง๋ก) Blender Eevee์ ์ด๊ฒ์๋ก๋ํ๋ฉด ์ด๋จ๊น์? UV ๋งต์ด ํ์ ๋๊ฑฐ๋ ๋ฐ์ ๋๋๋ก ๋ฐฐ์จ์ด ์กฐ์ ๋๋ฉด ์ด๋ป๊ฒ๋ฉ๋๊น?
์ด๊ฒ์ ์ ์๋ํฉ๋๋ค. ์ฌ์ค, ์ด๋ฐ ๋ฐฉ์์ผ๋ก ์ ์ ๊ณต๊ฐ์ ์ ์ํ๋ ์์ ์ ์ํํธ์จ์ด๊ฐ ๋ฒกํฐ์ ๋ฏธ์ณ ๊ฐ๋๋กํ๋ ๊ฒ์ด ์๋๋ผ, ์ง์ค๋ฉํธ๋ฆฌ์ ๊ด๊ณ์์ด ๋ ธ๋ฉ ๋งต์ด ์ฌ๋ฐ๋ฅธ ๋ฐฉํฅ์ผ๋ก ๋ฐฐ์น๋๋๋กํ์ฌ ํ ์ค์ฒ ์ํฐ์คํธ์๊ฒ ์ฝ๊ฐ์ ์จ์ ํจ์ ํ์ฉํ๋ ๊ฒ์ ๋๋ค.
๊ทธ๋ฌ๋ ๋ชจ๋ ์ํํธ์จ์ด๊ฐ OpenGL ๊ท์น์ ์ฌ์ฉํ๋ ๊ฒ์ ์๋๋๋ค. ์ผ๋ถ๋ ๋ค๋ฅธ ๊ท์น (๋๋๋ก DirectX ๊ท์น์ด๋ผ๊ณ ํจ)์ ์ฌ์ฉํฉ๋๋ค. ์ฌ๊ธฐ์ Y ๋ฒกํฐ๋ ์๋จ์ด ์๋ ์ด๋ฏธ์ง ํ๋จ์ ๊ฐ๋ฆฌ ํต๋๋ค. ๋ค์์์ด ํ์์ ๋ด ์ด๋ฏธ์ง์ ๋ถํด ๋ Y ์ฑ๋์ ๋๋ค. ๋ ๋ฐ์ ํฝ์ ์ ์ด๋ฏธ์ง ํ๋จ์ ํฅํ๋ ํฝ์ ์ ๋๋ค.
์ด๋ฌํ DirectX ์คํ์ผ ๋ ธ๋ฉ ๋งต ์ค ํ๋๋ฅผ Blender Eevee์๋ก๋ํด๋ ์ฌ์ ํ ์๋ ํ ๊ฒ์ผ๋ก ์์ ํ ์ ์์ต๋๊น?
์๋์. ๋ธ๋ ๋๋ + Y๋ฅผ ์์ํ์ต๋๋ค. ์ํ์ ํ๋ ธ๊ณ ๋ฐ์ฌ ๋ ์ํ์ ์ด ์ฌ๋ฐฉ์ ๋๊ณ ์์ต๋๋ค.
OpenGL ์คํ์ผ์ ๋ ธ๋ฉ ๋งต์ + Y ๋ค์ด์ ์์ํ๋ ์์ง์๋ก๋ํ๋ ๊ฒฝ์ฐ์๋ ๋ง์ฐฌ๊ฐ์ง์ ๋๋ค.
์ด๊ฒ์ด NormalTangentTest ๋ชจ๋ธ์ด ํ ์คํธํ๋ ค๋ ๊ฒ์ ๋๋ค. ๊ฐ ํ์ UV ์ขํ๋ฅผ ๋ค๋ฅธ ๋ฐฉํฅ์ผ๋ก ํ์ ํ์ฌ ๋ฐ์ฌ๊ฐ ์ด๋ฌํ ๋ค๋ฅธ ๋ฐฉํฅ์์ ์ค๋ฅธ์ชฝ ์๋ฅผ ํฅํ๋๋กํฉ๋๋ค.