์ด ๋ฌธ์ ๋ฅผ ์ฌ์ฉํ์ฌ GLTF2 ๋ด๋ณด๋ด๊ธฐ ๊ธฐ๋ฅ์ ์ถ์ ํ๊ณ ์ถ์ต๋๋ค. PR https://github.com/mrdoob/three.js/pull/11917 ์์ ๋ ผ์๋ ๊ธฐ๋ฅ์ ์ด๊ธฐ ๋ชฉ๋ก์ ๋ณต์ฌํ์ผ๋ฉฐ ๊ตฌํ์ด ์งํ๋จ์ ๋ฐ๋ผ ๋ชฉ๋ก์ ๊ณ์ ์ ๋ฐ์ดํธํ ๊ฒ์ ๋๋ค.
trs
ํ๋ ฌ ๋์ TRS ๋ด๋ณด๋ด๊ธฐinput
:truncateDrawRange
: drawRange
์ ์๋ ์์ฑ ๊ฐ๋ง ๊ฐ์ ๋ก ๋ด๋ณด๋
๋๋ค.userData
์ extras
?material.wireframe === true
๊ฒฝ์ฐ ํ์ผ๋ก ๋ด๋ณด๋ด๊ธฐpbrMetallicRoughness
๋ํ MeshStandardMaterial
baseColorFactor
metallicFactor
roughnessFactor
baseColorTexture
: ์ง์๋์ง๋ง( material.map
) texCoord
๋ ํญ์ 0์ผ๋ก ์ค์ ๋ฉ๋๋ค.doubleSided
uri
map.image.src
์ฌ์ฉํ๋ uri
base64bufferView
flipY
์ด๋ฏธ์ง ์ฒ๋ฆฌ[] ์ก์ธ์
bufferView
์ฌ์ฉ(WIP @takahirox)sparse
?bufferView
byteOffset
: ํ์ฌ ๊ฐ ์ ๊ทผ์์ ๋ํด ์ bufferView๋ฅผ ์์ฑํ ๋ ํญ์ 0์ ์ฌ์ฉํ๊ณ ์์ต๋๋ค.componentType
count
max
min
type
:SCALAR
VEC2
VEC3
VEC4
[ ] BufferViews : ํ์ฌ ๊ฐ Accessor
bufferView
์ ๋ํด ์๋ก์ด componentType
๋ฅผ ๊ณต์ ํ๋ ์ด๋ฌํ ์์ฑ์ ๋ํด ํ๋๋ง ์ฌ์ฉํ๋๋ก ์์ ํด์ผ ํฉ๋๋ค.
buffer
byteOffset
byteLength
byteStride
target
stats
์ต์
์ ํฌํจํ์๊ฒ ์ต๋๊น?ํ์ฌ ๋ฐ๋ชจ:
์์ถ gltf๋ @donmccurdy์ gltf ๋ทฐ์ด์๋ก๋
GLTF: https://gist.github.com/fernandojsg/0e86638d81839708bcbb78ab67142640
์ด๊ฒ์ ์ ๋ง ์ข์ ๋ณด์ธ๋ค!
๊ทธ๊ฑด ๊ทธ๋ ๊ณ , ์ฐ๋ฆฌ๋ ๊ณง THREE.GLTFLoader
๋ฅผ ์ ๊ฑฐํ๊ณ GLTF2Loader
โ GLTFLoader
์ด๋ฆ์ ๋ฐ๊ฟ ์์ ์
๋๋ค*. ํผ๋์ ํผํ๊ธฐ ์ํด r87์ด ์ถ์๋๊ธฐ ์ ์ ๋ด๋ณด๋ด๊ธฐ์ ์ด๋ฆ์ GLTFExporter๋ก ๋ฐ๊พธ๋ ๊ฒ์ด ์ข์ต๋๋ค. ๋ฐ๋ผ์ ๋ฆด๋ฆฌ์ค ๊ฐ์ ์ด๋ฆ์ ๋ณ๊ฒฝํ ํ์๊ฐ ์์ต๋๋ค. ์, ์ด๋ฏธ ์ด๋ฆ์ ๊ทธ๋ ๊ฒ ์ง์ผ์
จ๊ตฐ์.. ๊ณ์ํ์ธ์! ๐
* @mrdoob , ์ธ์ ๋ฐ์ํด์ผ ํ๋์ง์ ๋ํ ์ ํธ ์ฌํญ์ด ์์ต๋๊น? IMO์์ GLTFLoader
๋ฅผ ์ฌ์ฉ ์ค๋จ ๊ฒฝ๊ณ ์ ํจ๊ป r87์ ์ ์งํ๊ณ r88์์ ์ ๊ฑฐํ์ง ์์ผ๋ ค๋ฉด ์ง๊ธ ์ด ์์
์ ์ํํ ์ ์์ต๋๊น?
๋น ๋ฅผ์๋ก ์ข๋ค๊ณ ์๊ฐํฉ๋๋ค. ์๋ก์ด GLTFLoader
๊ฐ 1.0์ ๊ฐ์งํ๊ณ ์ฌ์ฉ์์๊ฒ 2.0 ์ด์๋ง ์ง์ํ๋ค๊ณ ๊ฒฝ๊ณ ํ ์ ์๋ ํ.
IIRC๋ ์์์ ์ธ๊ธํ๋ฏ์ด asset
๋ฅผ ๋ณด๊ณ ๊ฐ์งํ ์ ์์ต๋๋ค.
IIRC๋ ์์์ ์ธ๊ธํ ์์ฐ์ ๋ณด๊ณ ๊ฐ์งํ ์ ์์ต๋๋ค.
๋ฉ์๋! ํ์ง๋ง ์ฌ์ํ ๋ฒ๊ทธ๋ฅผ ๋ฐ๊ฒฌํ์ต๋๋ค. ์ง๊ธ PR์ ํ๊ณ ์์ต๋๋ค. ์ด๋ฆ์ ๋ฐ๊พธ๊ธฐ ์ ์ ๋ณํฉํฉ์๋ค.
๋๊ตฐ๊ฐ๊ฐ ์ฒดํฌ๋ฆฌ์คํธ์์ ์์ ํ๊ณ ์๋ ํญ๋ชฉ์ ์ง์ ํ ์ ์์ต๋๊น?
@takahirox ํ์คํ! ์ฌ๋๋ค์ ์ฌ๊ธฐ์ ๋๊ธ์ ์์ฑํ ์ ์๊ณ ์ด๋ฏธ ์งํ ์ค์ธ ์ผ์ด ์์ผ๋ฉด ๋ชฉ๋ก์ ์ ๋ฐ์ดํธํ๊ณ PR์ ๊ฐ๋ฆฌํฌ ์ ์์ต๋๋ค.
๋ค์์ผ๋ก ์์ ํ ์์ ์ url์ ์ฌ์ฉํ๋ ๋์ ํ ์ค์ฒ๋ฅผ base64๋ก ๋ณํํ๋ ๊ฒ์ ๋๋ค.
๊ฐ์ฌ ํด์! ๋๋ glTF ์์ถ์ ์๋ฅผ ๋ง๋๋ ๊ฒ์ ๋๊ณ ์ถ์ต๋๋ค. ์ฒดํฌ๋ฆฌ์คํธ์์ ๋ฌด์์ ๋์ธ ์ ์๋์ง ์ฐพ๊ณ ์์ต๋๋ค ...
BTW ์๋์ ์ผ๋ก ๋ ๊ฐ์ ๋ณ์ WEBGL_CONSTANTS
๋ฐ THREE_TO_WEBGL
์ ์ญ์ ํ์ฉํ์ต๋๊น?
@takahirox ๋ฉ์ง๋ค!
๋ ๋ณ์์ ๊ด๋ จํ์ฌ ์ด๊ฒ์ WebGLUtils
์ผ๋ถ๋ก ๋ง๋ค๊ณ ๊ฐ์ ธ์ค๊ธฐ ์ํด ๋ค์ PR์์ ๋ค๋ฃฐ ๊ฒ์
๋๋ค. ์ด๋ฌํ ์์๋ฅผ ํ์๋ก ํ๋ ๊ฐ ์์๊ฐ ๋งค๋ฒ ๋ค์ ์ฌ์ ์ํด์ผ ํ๋ค๋ ๊ฒ์ ๋ง์ด ๋์ง ์์ต๋๋ค.
@takahirox btw ๋ฌผ๋ก ๋ชฉ๋ก์ ์ ํญ๋ชฉ์ ์์ ๋กญ๊ฒ ์ ์ํ์ญ์์ค! ;)
@fernandojsg ๋ฌผ๋ก ์ด์ฃ ! ๋ณ์์ ๋ํด ์๋์ ์ผ๋ก ์ ์ญ์ผ๋ก ์ ์ธ๋ ๊ฒฝ์ฐ ๋ณ์๋ฅผ ์ด๋๊ฐ๋ก ์ด๋ํ๋๋ก ์ ์ํ๊ณ ์ถ์์ต๋๋ค.
๊ณต์ ๋ฒํผ ๋ณด๊ธฐ์์ ์์ ํ๊ณ ์ถ์ต๋๋ค.
BufferViews: ํ์ฌ ๊ฐ ์ ๊ทผ์์ ๋ํด ์ bufferView๋ฅผ ๋ง๋ค๊ณ ์์ต๋๋ค. ๋์ผํ componentType์ ๊ณต์ ํ๋ ์ด๋ฌํ ์์ฑ์ ๋ํด ํ๋๋ง ์ฌ์ฉํ๋๋ก ์์ ํด์ผ ํฉ๋๋ค.
๋ชจ๋ ์์ฑ์ ๋ํ ๊ฒ์ด ์๋๋ผ ๋์ผํ componentType์ ๊ณต์ ํ๋ ์์ฑ์ ๋ํ ๊ฒ์ด ๋ฐ์ดํฐ ์ ๋ ฌ์ ์ํ ์ด์ ๊ฐ ๋ง์ต๋๊น?
https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#data -alignment
๋ฉ์ง๋ค์, ๋ฐฉ๊ธ ๋ชฉ๋ก์ ์ถ๊ฐํ์ต๋๋ค ๐ ์, ๊ธฐ๋ณธ์ ์ผ๋ก ๋์ผํ ์ ํ์ ๊ตฌ์ฑ ์์์ ๋ํด ๋์ผํ ๋ฒํผ ๋ณด๊ธฐ๋ฅผ ๊ณต์ ํ๋ ค๊ณ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด position ๋ฐ normal์ด ์๋ ๊ฒฝ์ฐ ๋ ๊ฐ์ VEC3 ์ ๊ทผ์๊ฐ ์์ง๋ง ๊ฐ๋ฆฌํฌ ๊ฒ์ ๋๋ค. ๊ฐ์ ๋ฒํผ๋ทฐ๋ก ๊ทธ๊ฒ์ ์ข์ ์ถ๋ฐ์ ์ด ๋ ์ ์์ต๋๋ค ;)
๋ค๋ฅธ componentType(์: float ๋ฐ short) ๊ฐ์ ๋ฒํผ ๋ณด๊ธฐ๋ฅผ ๊ณต์ ํ์ง ์๋ ์ด์ ๋ ์ข์ ๋ฐ์ดํฐ ์ ๋ ฌ์ ์ ์งํ๊ธฐ ์ํจ์ ๋๋ค. ๋ง์ต๋๊น?
target
๊ฐ์ normal (Vec3)
, position (Vec3)
๋ฐ uv (Vec2)
๊ฐ์ ๋ฒํผ ๋ทฐ์ ๋ค๋ฅธ ๊ตฌ์ฑ ์์ ์ ํ์ ์ ์ฅํ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค target
๋์ผํ ๋ฒํผ ๋ณด๊ธฐ์ ์์ ์ ์์ง๋ง indices
์๋๋๋ค. @donmccurdy ํ์ธํด ์ฃผ์๊ฒ ์ต๋๊น?
์, ๋์ํ์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด glTF ์ฌ์์ด ์ธ๊ธํ๋ฏ์ด
https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#data -alignment
bufferView์ ๋ํ ์ ๊ทผ์์ ์คํ์ (์ฆ, accessor.byteOffset)๊ณผ ๋ฒํผ์ ๋ํ ์ ๊ทผ์์ ์คํ์ (์ฆ, accessor.byteOffset + bufferView.byteOffset)์ ์ ๊ทผ์์ ๊ตฌ์ฑ ์์ ์ ํ ํฌ๊ธฐ์ ๋ฐฐ์์ฌ์ผ ํฉ๋๋ค.
๋จ์ํจ์ ์ํด ์๋ก ๋ค๋ฅธ componentType(= vec2 ๋๋ vec3์ด ์๋ float ๋ฐ short์ ๊ฐ์ ๋ฐ์ดํฐ ์ ํ) ๊ฐ์ ๋ฒํผ ๋ณด๊ธฐ๋ฅผ ๋ถ๋ฆฌํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ์๋ก ๋ค๋ฅธ ๋ฐ์ดํฐ ๊ธธ์ด componentType์ผ๋ก ๋ถ๋ฆฌํ๋ฉด ๋ ์ต์ ํ๋ฉ๋๋ค.
BTW ํ์ฌ ๋ด๋ณด๋ด๊ธฐ๊ฐ accessor.componentType
float, uint ๋ฐ ushort๋ง ์ง์ํ๋ ํน๋ณํ ์ด์ ๊ฐ ์์ต๋๊น? glTF 2.0์ char, uchar ๋ฐ short๋ฅผ ์ถ๊ฐ๋ก ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#accessorcomponenttype -white_check_mark
@takahirox๋ ๊ทธ๋ ์ง ์์ต๋๋ค. ์ฐ๋ฆฌ๊ฐ ์ง๊ธ ์ง์ํ๋ ์์ฑ ์ ํ(์์น, ๋ฒ์ , ์์, UV, ์ธ๋ฑ์ค ๋ฑ)์ ์ฌ์ฉ๋๋ ์์ฑ์ด๊ธฐ ๋๋ฌธ์ ์ง๊ธ๊น์ง ์ ์ํ์ต๋๋ค.
๋ด๊ฐ ์์
ํ๊ณ ์๋ ๋ค์ ๋จ๊ณ๋ ํ
์ค์ฒ์ด๋ฏ๋ก uchar
์ ๊ฐ์ ๋ค๋ฅธ ์์๊ฐ ํ์ํฉ๋๋ค.
์ข์, ๊ทธ๋์ ๋๋ ๋น์ ์ด ์ด๋ฏธ impl์ ์์ํ์ง ์๋ ํ ๋จผ์ accessor.componentType
์ ๋ํด ์์
ํ ๊ฒ์
๋๋ค.
๊ฑฐ์ ์ค๋น๋์์ง๋ง ๋ด PR์ด #11978๊ณผ ์ถฉ๋ํด์ผ ํฉ๋๋ค.
๊ทธ๋์ #11978์ด ๋ณํฉ๋๋ฉด ๋ด ๊ฒ์ ๋ณด๋ด๊ณ ์ถฉ๋์ ์์ ํฉ๋๋ค.
๋ชฉ๋ก์ ์ ๋๋ฉ์ด์ ์ ์ถ๊ฐํ์๊ฒ ์ต๋๊น?
@takahirox ํ์คํ, ์ ๋๋ฉ์ด์ ์ ์ถ๊ฐํ๋ ๊ฒ์ด ์ข์ ์ ์์ต๋๋ค. ๊ทธ๋ฅ three.js์ ์ ๋๋ฉ์ด์ ๊ธฐ๋ฅ์ ํ์ฌ ์ํ์ ๋ํด ์ถฉ๋ถํ ์ต์ํ์ง ์์์ ์ถ๊ฐํ์ง ์์์ง๋ง, ๋น์ ์ด ๊ทธ๊ฒ์ ์ธ๊ณ ๋ฐ๊ณ ์ถ๋ค๋ฉด ์ข์ ๊ฒ์ ๋๋ค ;)
BufferGeometry ๊ทธ๋ฃน์ ์ง์ํ ๊ณํ์
๋๊น?
GLTF ์ฌ์์ด ์ด๋ฅผ ํฌํจํฉ๋๊น ์๋๋ฉด ๋ชจ๋ ๊ทธ๋ฃน์ ๋ํด ์๋ก์ด ๋ฉ์๋ฅผ ์์ฑํ๊ฒ ๋ฉ๋๊น?
์ด๊ฒ์ ๋ํ ๋ฉ์์ ๋จธํฐ๋ฆฌ์ผ ์์ฑ์ด ๋จธํฐ๋ฆฌ์ผ ๋ฐฐ์ด์ด๋ผ๋ ์ ์ ์ผ๋์ ๋์ด์ผ ํฉ๋๋ค.
@marcatec glTF ์ฌ์์๋ ๊ฐ๊ฐ ๋ค๋ฅธ ์ฌ๋ฃ๋ฅผ ์ฐธ์กฐํ ์ ์๋ BufferGeometry ๊ทธ๋ฃน์ ์์ฑํ ์ ์๋ "๋ฉ์" ๋ "๊ธฐ๋ณธ" ๊ตฌ๋ถ์ด ์์ต๋๋ค. ํ์ฌ THREE.GLTFLoader๋ ๋ก๋ฉ ํ๋ฆฌ๋ฏธํฐ๋ธ๋ฅผ ์ต์ ํํ์ง ์๊ณ ๋ณ๋์ ๋ฉ์๋ฅผ ์์ฑํ์ง๋ง ๊ตฌํํ ์ ์์ต๋๋ค.
ํ๋ฅญํ ์์ , ํ๋ฅญํ ๋ชฉ๋ก ๋ฐ ํ์์ ๋ํด ์ด๋ฏธ ๋ง์ ์ง์์ด ์๋ค๋ ๊ฒ์ ์๊ฒ ๋์ด ๊ธฐ์ฉ๋๋ค! ๋ํ gltf ๋ธ๋ ๋ ๋ด๋ณด๋ด๊ธฐ์๋ ๋งค์ฐ ์ ์๋ํฉ๋๋ค. ์กฐ๋ช ์ง์์ ๊ธฐ๋ค๋ฆด ์ ์์ต๋๋ค! ์์ผ๋ก๋ ํ์จ์ฃผ์ธ์.
๋์ํฉ๋๋ค, ํ๋ฅญํ ์ผ์ ๋๋ค!
StandardMaterial ์ด์ธ์ ๋ค๋ฅธ ์ฌ๋ฃ์ ๋ํ ์ง์์ ์ถ๊ฐํ ๊ณํ์ด ์์ต๋๊น?
๊ฐ์ฌ ํด์!
@homerjam MeshStandardMaterial ๊ณผ ๊ณต์ ๋๋ ๋ชจ๋ ์ฌ์ง ์์ฑ์ ์ ์ง๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด map
๋ฐ normalMap
์ฌ์ฉํ๋ MeshPhongMaterial์ ํด๋น ํ
์ค์ฒ๋ฅผ ๊ทธ๋๋ก ์ ์งํ ์ฑ๋ก ๋ด๋ณด๋ด์ง๋ง three.js๋ก ๋ค์ ๊ฐ์ ธ์ฌ ๋ MeshStandardMaterial์ด ๋ฉ๋๋ค. ์์ถ์
์ฒด๋ ํ์ฌ ์ด๋ฅผ ์ํด PBR๋ก ์์งํ ๋ณํ์ ์ํํฉ๋๋ค.
์๋ณต ์ง์(GLTFExporter์์ Phong ๋ด๋ณด๋ด๊ธฐ, GLTFLoader์์ Phong ๋ก๋)์๋ glTF ํ์์์ ์งํ ์ค์ธ ์์ ์ด ํ์ํฉ๋๋ค: https://github.com/KhronosGroup/glTF/pull/1150
baseColorTexture
: ์ง์๋์ง๋ง(material.map) texCoord๋ ํญ์ 0์ผ๋ก ์ค์ ๋ฉ๋๋ค.
@fernandojsg ์ฌ๊ธฐ์ ๋๋ฝ๋ ๊ฒ์ด ๋ฌด์์ธ์ง ๋ช
ํํ .map
๋ ํญ์ three.js์ ์ฒซ ๋ฒ์งธ UV ์ธํธ์ด๊ธฐ ๋๋ฌธ์ glTF์์ ์ด๋ฅผ ๋ํ๋ด๋ ์ฌ๋ฐ๋ฅธ ๋ฐฉ๋ฒ์ฒ๋ผ ๋ค๋ฆฝ๋๊น?
๋ํ ์ฃผ์๋ฅผ ๊ธฐ์ธ์ด๋ฉด์ ๋ชฉ๋ก์์ ์ธ ํญ๋ชฉ์ ์ง์ ์ต๋๋ค. ์๋์ ์ถ๋ก :
ํธ์ง๊ธฐ์์ GLB๋ก ๋ด๋ณด๋ด๋ฉด์ alphaMap
, roughnessMap
๋ฐ metalnessMap
๊ฐ ๋ด๋ณด๋ด์ง์ง ์๋๋ค๋ ๊ฒ์ ์์์ต๋๋ค.
#13397์์ ๋๋ normalMap
๋ ๋ค ๋ด๋ณด๋ด์ง์ง ์๋๋ค๊ณ ๋งํ์ง๋ง ๋ด๊ฐ ํ๋ฆฐ ๊ฒ ๊ฐ์ต๋๋ค.
ํธ์ง๊ธฐ์์ GLB๋ก ๋ด๋ณด๋ด๋ฉด์ alphaMap, RoughnessMap ๋ฐ metalnessMap์ด ๋ด๋ณด๋ด์ง์ง ์๋๋ค๋ ๊ฒ์ ์์์ต๋๋ค.
๋๊ตฐ๊ฐ๊ฐ ์ด๋ฏธ ์์ํ์ง ์๋ ํ ์ค๋ ์์ ํ ๊ฒ์ ๋๋ค.
@donmccurdy
ํฌ์ ์ ๊ทผ์
mattdesl์ ์คํฌ๋ฆฝํธ์ ๊ฐ์ด ๋ด๋ณด๋ด๊ธฐ ํ ์ต์ ํ์ ๋งก๊ธฐ๋ ๊ฒ์ด ๊ฐ์ฅ ์ข๋ค๊ณ ์๊ฐํฉ๋๋ค.
๋ด๋ณด๋ด๊ธฐ๊ฐ ๋ชจํ์ ๋ํ ํฌ์ ์ ๊ทผ์๋ฅผ ์ง์ํ๋๋ก ํ๋ ๊ฒ๊ณผ ๊ฐ์ ๋๋์ ๋๋ค. ๋์ค์ ์๋ํ๊ฒ ์ต๋๋ค.
@takahirox ๋ฉ์ง๋ค! ๊ฐ์!
alphaMap
๊ฐ glTF 2.0์์ ์ง์๋์ง ์๋๋ค๊ณ ์๊ฐํฉ๋๋ค.
https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#material
๋ค, ๊ทธ๊ฒ ๋๋ ค์ ์ด์.... metalnessMap
์ roughnessMap
์์?
์ง๊ธ ์์ ์ค์ ๋๋ค!
์ด๋ฏธ์ง ํ์์ ๋ํด. glTF 2.0์ ์ธ๋ถ ์ด๋ฏธ์ง ํ์ผ๋ก .png ๋ฐ .jpg๋ง ์ง์ํฉ๋๋ค. embedImages
์๋ ๋ชจ๋์์ ์ง์๋์ง ์๋ ์ด๋ฏธ์ง ํ์ ํ์ผ(์: .bmp)์ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ๊ณ ๋ ค ์ค์
๋๋ค.
๋๋ 1์ ์ ํธํฉ๋๋ค. ์ด๋ค ์๊ฐ์ด ์์ต๋๊น?
์์ฐ, ์ ๋ง ๋น์ ์ ์ํ์ ๊ฐ์ํฉ๋๋ค.
๋๋ถ๋ถ์ 3D ๋ชจ๋ธ์ด ๋ค์ค ์ฌ๋ฃ๋ฅผ ์ฌ์ฉํ๊ณ ์๊ธฐ ๋๋ฌธ์ Multi-material meshes
์ด ๋นจ๋ฆฌ ๊ตฌํ๋๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
- .png ๋๋ .jpg๋ก ๋ณํํ๊ณ ํฌํจ
- ์ ๊ฒฝ์ฐ์ง๋ง ์๋ณธ ์ด๋ฏธ์ง ํ์ผ๋ก ๋ด๋ณด๋ด๊ธฐ
- ์์ถํ์ง๋ง
๋๋ 3์ ํฌํํ๊ณ ์ฝ์์ ๊ฒฝ๊ณ ๋ฅผ ๊ธฐ๋กํฉ๋๋ค.
๋๋ถ๋ถ์ 3D ๋ชจ๋ธ์ด ๋ค์ค ์ฌ๋ฃ๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ๋ค์ค ์ฌ๋ฃ ๋ฉ์ฌ๊ฐ ์ต๋ํ ๋นจ๋ฆฌ ๊ตฌํ๋๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
๋์ํฉ๋๋ค. ์ด๊ฒ์ ์์ถ์ ์ฒด์ ์ฌ์ฉ์ ๋ฐฉํดํ๋ ๊ฐ์ฅ ํฐ ๋ฌธ์ ์ ๋๋ค.
๋๋ถ๋ถ์ 3D ๋ชจ๋ธ์ด ๋ค์ค ์ฌ๋ฃ๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ๋ค์ค ์ฌ๋ฃ ๋ฉ์ฌ๊ฐ ์ต๋ํ ๋นจ๋ฆฌ ๊ตฌํ๋๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
๋ค๋ฅธ ์ค๋ ๋์์ ๋งํ๋ฏ์ด, ๋๋ ์์ ์ค์ ๋๋ค.
- .png ๋๋ .jpg๋ก ๋ณํํ๊ณ ํฌํจ
- ์ ๊ฒฝ์ฐ์ง๋ง ์๋ณธ ์ด๋ฏธ์ง ํ์ผ๋ก ๋ด๋ณด๋ด๊ธฐ
- ์์ถํ์ง๋ง
๋๋ 3์ ํฌํํ๊ณ ์ฝ์์ ๊ฒฝ๊ณ ๋ฅผ ๊ธฐ๋กํฉ๋๋ค.
์, 3.์ด ๋ ๊ฐ๋จํ๊ณ ์ฌ์ฉ์์๊ฒ ํผ๋์ ์ฃผ์ง ์์ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ๊ฒ ๋์์ต๋๋ค. emedImages
์๋ ๋ชจ๋์์ ํฌํจ๋ ์ด๋ฏธ์ง๋ฅผ ๊ฐ์ ธ์ค๋ ๊ฒ์ ์ฝ๊ฐ ํผ๋์ค๋ฌ์ธ ์ ์์ต๋๋ค.
๋ด๊ฐ 1์ ์ ํธํ๋ ์ด์ ๋ ๋ค๋ฅธ ํ์์์ glTF๋ก ๋ณํํ๊ธฐ ์ํด์์์ต๋๋ค. ์ผ๋ถ(๋๋ ๋ง์) ๋ค๋ฅธ ํ์์๋ ์ด๋ฏธ์ง ํ์ ์ ํ์ด ์์ต๋๋ค.
๋ด๋ณด๋ด๊ธฐ๋ embedImages
๋ชจ๋๋ก ๋ณํํฉ๋๋ค. ๋ฐ๋ผ์ ์ฝ์ ๊ฒฝ๊ณ ์ "๋ณํํ๋ ค๋ฉด embedImages ์ต์
์ฌ์ฉ"์ ์ถ๊ฐํ๋ ๊ฒ์ด ์ข์ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
์ ๋ 3๋ฒ์ผ๋ก ๊ฐ๋๋ค. ๋ค๋ฅธ ํ์์์ ๋ณํํ๋ ๊ฒ์ ์ง๋ฃจํ ์ ์์ผ๋ฏ๋ก ์ด์จ๋ ๋ค๋ฅธ ํ์์ ๋นํด ์ผ๋ถ ํ์์ ์ฐ์ ์์๋ฅผ ์ง์ ํด์ผ ํฉ๋๋ค. ์๋ง๋ ์ง๊ธ ๋น์ฅ 3๋ฒ์ ํ๊ณ gltf๊ฐ ktx์ ๊ฐ์ ์๋ก์ด ํ ์ค์ฒ ํ์์ ๋ํ ์ง์์ ์ถ๊ฐํ๊ณ ๊ตฌํ์ ๋ค์ ๋ฐฉ๋ฌธํ ์ ์๋์ง ํ์ธํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
https://github.com/mrdoob/three.js/pull/13415#issuecomment -369022383์์ ๋
ผ์ํ ๊ฒ์ฒ๋ผ exporter๊ฐ ์ฌ์ฉ์๋ฅผ ์ํด ambientRoughnessMetalness
ํ
์ค์ฒ๋ฅผ ๊ตฌ์ฑํ ์ ์๋ค๋ฉด ์ข์ ๊ฒ์
๋๋ค. ํ์ง๋ง ๊ทธ ์ฝ๋๋ฅผ ImageUtils
์ ๋ฐฐ์นํ๋ ๊ฒ์ด ๋ ๋์ ๊ฒ์
๋๋ค.
์ต์ ๋ณ๊ฒฝ ์ฌํญ์ผ๋ก ์ฒดํฌ๋ฆฌ์คํธ๋ฅผ ์
๋ฐ์ดํธํ์ต๋๋ค. multimaterial
ํญ๋ชฉ์ @takahirox ๋ฅผ ์ถ๊ฐ
๋๋ ๋ํ material_unlit ํ์ฅ์๋ฅผ ์ถ๊ฐํ์ต๋๋ค. ๋น๋ก ์์ง ์ด์์ด์ง๋ง ์ถ์๊ฐ ์๋ฐํ์ผ๋ฉฐ ํฌ๊ฒ ๋ณ๊ฒฝ๋์ง ์์ ๊ฒ์ด๋ผ๊ณ ๋ฏฟ์ต๋๋ค(/cc @donmccurdy).
๋๋ถ๋ถ์ 3D ๋ชจ๋ธ์ด ๋ค์ค ์ฌ๋ฃ๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ๋ค์ค ์ฌ๋ฃ ๋ฉ์ฌ๊ฐ ์ต๋ํ ๋นจ๋ฆฌ ๊ตฌํ๋๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
๋ค๋ฅธ ์ค๋ ๋์์ ๋งํ๋ฏ์ด, ๋๋ ์์ ์ค์ ๋๋ค.
WIP... (Miku์๋ ๋ค์ค ์ฌ๋ฃ๊ฐ ์์ต๋๋ค)
์ง์๋์ง ์๋ ์ด๋ฏธ์ง ํ์์ ๋ํด์๋ 3์ผ๋ก ๊ฐ์.
@takahirox ์ ๋ณด๊ณ ์์ต๋๋ค! ๐
BTW, zip ์์นด์ด๋ธ ์ง์์ ๊ด์ฌ์ด ์์ต๋๊น? .glTF + ์ธ๋ถ .bin ๋ฐ ํ ์ค์ฒ๋ ๋ค๋ฅธ ์ ์ ๋๊ตฌ(์๋ง๋)์ ์ ํฉํ์ง๋ง ์์นด์ด๋ธ๊ฐ ์๋ ๊ฒฝ์ฐ์๋ ์ด๋ ต์ต๋๋ค. ๋ฐ๋ผ์ zip ์์นด์ด๋ธ๊ฐ ํ์ํฉ๋๋ค. ๋ด๋ณด๋ธ ํ์ผ ํฌ๊ธฐ๋ฅผ ์ค์ผ ์ ์์ต๋๋ค.
๋๋ ๊ทธ๊ฒ์ ์ํ๊ณ ์ ์ ๋ด ์ง์ญ ์ง์ ์์ ์๋ํ์ต๋๋ค. ๊ด์ฌ์ด ์์ผ๋ฉด ๋์ค์ ๊ณต์ ํ ์ ์์ต๋๋ค.
glb๋ฅผ ์์ถํ๋ ๊ฒ๊ณผ ๊ฑฐ์ ๋์ผํ์ง ์์ต๋๊น?
.glTF + ์ธ๋ถ .bin ๋ฐ ํ ์ค์ฒ๋ ๋ค๋ฅธ ์ ์ ๋๊ตฌ์ ์ ํฉํฉ๋๋ค(์๋ง๋).
์ ์ ๋๊ตฌ์ ๋ณ๋์ ํ์ผ์ด ํ์ํ์ง ์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค. ์ฐ๋ฆฌ๋ ๋ชจ๋ ์ฌ๋์ด ๊ธฐ๋ณธ์ ์ผ๋ก GLB๋ฅผ ์ฌ์ฉํ๋๋ก ๊ถ์ฅํฉ๋๋ค. ๊ทธ๋ฌ๋ ์ด๋ฏธ์ง๊ฐ ํฌํจ๋์ง ์์ ๊ฒฝ์ฐ ์ด๋ฏธ์ง๋ฅผ ์์ผ๋ก ํธ์งํ๋ ๊ฒ์ด ๋ ์ฝ์ต๋๋ค.
ํด๋น ๊ธฐ๋ฅ์ THREE.GLTFExporter
์ง์ ๋ฃ์ ๊ฒ์ธ์ง ์ฌ๋ถ์ ๋ํ ๊ฐ๋ ฅํ ์๊ฒฌ์ ์์ง๋ง glTF์์ ์ฌํ ์ต์ ํ๊ฐ ๋ ์ ์๋ ์ต์
์ด ๋๋ฌด ๋ง์์๋ ์ ๋๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋ ๋ค๋ฅธ ์๋ก, Draco๋ ์ผ์ข
์ ๋ณต์กํ๊ณ ์ฌ๋ฌ ์ธ๋ถ ํ์ผ์ด ํ์ํ๋ฏ๋ก ํน์ glTF-to-glTF ๋๊ตฌ๊ฐ ์ต์ ํ๋ฅผ ์ํํ๋๋ก ํ๋ ๊ฒ์ด ๋ ๋์๊น์? ๊ทธ๋ฆฌ๊ณ ๋ง์ฐฌ๊ฐ์ง๋ก ์ฐ๋ฆฌ๋ glb-unpacker(http://glb-packer.glitch.me/ ๋ฐ๋)๋ฅผ ๋ง๋ค์ด ์ฌ๋๋ค์ด ํ์๋ก ํ๋ ํ์ผ์ GLB์์ ZIP์ผ๋ก ์์ถ ํด์ ํ๋ ๋ฐ ๋์์ ์ค ์ ์์ต๋๋ค.
https://github.com/KhronosGroup/glTF/issues/1256์์ โ
... gltf-pipeline์ ์๋ ์๋์ ์ผ๋ฐ์ ์ผ๋ก glTF๋ ๋ด๋ณด๋ด๊ธฐ๋ฅผ ๊ฐ๋ฅํ ํ ๋จ์ํ๊ฒ ๋ง๋ค๊ณ ์ต์ ํ๋ฅผ ๊ณตํต ๋๊ตฌ๋ก ํธ์ํฉ๋๋ค. ๋ฌผ๋ก ๋จํธํ์๋ ๋์์ด ๋ฉ๋๋ค.
์ฆ, ๋ด๊ฐ ์๋ glb-unpacker๋ ์์ง ์กด์ฌํ์ง ์์ต๋๋ค ...
@mrdoob
๋๋ ํ ์ค์ฒ ์ด๋ฏธ์ง๊ฐ .glTF ๋ .glb๊ฐ ์๋ ์ธ๋ถ์ ์๊ธฐ๋ฅผ ์ํ์ต๋๋ค.
@donmccurdy
๋๋ https://github.com/KhronosGroup/glTF/issues/1117 ํ ๋ก ์ ๋ฐ๋๊ณ ์ง๊ธ .glb + ์๋ฒ ๋๋ ํ์ผ ๋ฐ ํ์ดํ๋ผ์ธ ์ ๊ทผ ๋ฐฉ์์ ์ฅ๋ คํ๋ ๋ฐ ๋์ํฉ๋๋ค. ํ๋์ .glb๋ ํนํ ์น์ฉ ๋ฐ์ดํฐ ์ ์ก์ ์ ํฉํ๋ฉฐ ํ์ดํ๋ผ์ธ ์ ๊ทผ ๋ฐฉ์์ ๋ด๋ณด๋ด๊ธฐ ๋ฐ ๋๊ตฌ๋ฅผ ๊ฐ๋จํ๊ณ ์ฌ์ฌ์ฉํ ์ ์๋๋ก ํฉ๋๋ค. (์ ๋ UNIX/Linux ๋ช ๋ น ํ์ดํ๋ผ์ธ ์ ๊ทผ ๋ฐฉ์๋ ์ข์ํฉ๋๋ค!)
๊ทธ๋์ ์์ถ์ ์๊ฐ ์ง๊ธ zip ์์นด์ด๋ธ ์ง์์ ํ์๋ก ํ์ง ์๋๋ค๊ณ ์๊ฐํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ฐ์ ์ด์ ๋ก ํฌ์ ์ ๊ทผ์์ draco ์ง์์ด ํ์ํ์ง ์์ ์๋ ์์ต๋๋ค.
glb-unpacker์ ๊ดํด์๋ ์ฌ๊ฐ ์๊ฐ์ ๋ง๋ค ์ ์์ ๊ฒ์ ๋๋ค. ์ผ๋ถ ์ํฐ์คํธ๋ glTF ํน์ ๋๊ตฌ ์์ด ์ฝ์ ์ ์๊ธฐ ๋๋ฌธ์ .glTF + ์ธ๋ถ ํ์ผ์ ์ข์ํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ฐ๋ ์ธ๋ถ ํ์ผ์ ๋ณ๋ ฌ ๋ก๋ฉ์ผ๋ก ์ธํด ๋ก๋ฉ ์๊ฐ์ ์ค์ฌ ์ต์ ํ ๋ชฉ์ ์ผ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค.
ํ์ดํ๋ผ์ธ/์ต์ ํ ๋๊ตฌ์ ๊ด๋ จํ์ฌ ์ ๋ ๋คํธ์ํฌ๋ฅผ ํตํด ๊ฑฐ๋ํ ๋ฐ์ดํฐ๋ฅผ ์ ์กํ๊ณ ์ถ์ง ์๋ค๋ ์ ์ ์ฃผ๋ชฉํ๊ณ ์ถ์ต๋๋ค. ์ฌ์ฉ์๋ ๋ฐ์ดํฐ๋ฅผ ~๋ณํ~ ์ ์กํ๊ธฐ ์ ์ ์ต์ ํ/์์ถํ๊ธฐ๋ฅผ ์ํฉ๋๋ค. ๋ฐ๋ผ์ glTF ์ต์ ํ ์น ์๋น์ค๋ ์ฌ์ฉ์๊ฐ ์๋ฒ์ ๋์ฉ๋ ํ์ผ์ ๋ณด๋ด์ผ ํ๊ธฐ ๋๋ฌธ์ ๋์ฉ๋ ๋ฐ์ดํฐ์ ๋ํด ์ ์๋ํ์ง ์๋ ๊ฒฝ์ฐ๊ฐ ์์ต๋๋ค.
๋ํ Three.js ๋ฐ ๊ธฐํ JavaScript ๋ธ๋ผ์ฐ์ ๊ธฐ๋ฐ ์์ง์ ๊ฒฝ์ฐ ๋ธ๋ผ์ฐ์ ์์ ์คํ๋๋ glTF ์ต์ ํ ๋๊ตฌ๊ฐ ์์ผ๋ฉด ๊ธฐ์ฉ๋๋ค. ๋ฐ์ดํฐ๊ฐ ์ฌ์ฉ์์๊ฒ ์ ๋ฌ๋๊ธฐ ์ ์ ์ต์ ํ/์์ถํ ์ ์์ต๋๋ค. ์ด ๋๊ตฌ๊ฐ ์์ผ๋ฉด ์ฌ์ฉ์๋ ๋ด๋ณด๋ธ ๋ฐ์ดํฐ๋ฅผ ์๋์ผ๋ก ๋ค์ด๋ก๋ํ ๋ค์ ๋ธ๋ผ์ฐ์ ์ ํ์ผ๋ก ์ธํด ํ์ดํ๋ผ์ธ ๋๊ตฌ์ ์ ๋ฌํด์ผ ํฉ๋๋ค.
์ด๋ฌํ ๊ด์ ์์ ์ ๋ ๋๊ตฌ๊ฐ ๋ธ๋ผ์ฐ์ , ์๋ฒ, CUI ๋ฑ ์ด๋์์๋ ์คํ๋ ์ ์๋๋ก ํ์ฌ ๋ณด๋ค ์ผ๋ฐ์ ์ด๊ณ ์ฌ์ฌ์ฉํ ์ ์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค. ์ฐ๋ฆฌ๋ ๋ค๋ฅธ ํ๋ซํผ์ ๋ํด ๊ฐ์ ๋ชฉ์ ์ ๋๊ตฌ๋ฅผ ๋ ๋ฒ ์ด์ ๋ง๋ค๊ณ ์ถ์ง ์์ต๋๋ค. ๊ทธ๋ ๋ค๋ฉด node.js ๊ธฐ๋ฐ ๋๊ตฌ๊ฐ ์ข์๊น์? glTF(ํ์ดํ๋ผ์ธ) ํ์ ์ ์ ์ฌํญ์ด ์์ต๋๊น? (์ด ๋ ผ์๋ ์ฌ๊ธฐ๊ฐ ์๋ glTF์์ ์ํ๋์ด์ผ ํฉ๋๋ค.)
GLTFLoader
๋ฐ์ด๋๋ฆฌ ์ง์์ ํ์ฅ์ผ๋ก ๊ตฌํ๋์ง๋ง .glb๋ glTF 2.0์ ํต์ฌ ์ฌ์์ ์๋ ๊ฒฝ์ฐ๋ฅผ ๋๋นํ์ฌ ๋ง์ต๋๊น?
GLTFLoader์์ ๋ฐ์ด๋๋ฆฌ ์ง์์ ํ์ฅ์ผ๋ก ๊ตฌํ๋์ง๋ง .glb๋ glTF 2.0์ ํต์ฌ ์ฌ์์ ์๋ ๊ฒฝ์ฐ๋ฅผ ๋๋นํ์ฌ ๋ง์ต๋๊น?
์, ๊ทธ๊ฒ์ glTF 1.0์ ํ์ฅ์ด์๊ณ ํต์ฌ glTF 2.0 ์ฌ์์ ์ผ๋ถ๊ฐ ๋ ํ ํด๋น ์ฝ๋๋ฅผ ์ฌ๋ฐฐ์นํ๊ฑฐ๋ ์ด๋ฆ์ ๋ฐ๊พธ์ง ์์์ต๋๋ค.
์ด๋ฌํ ๊ด์ ์์ [์ต์ ํ ๋๊ตฌ]๊ฐ ๋ธ๋ผ์ฐ์ , ์๋ฒ, CUI ๋ฑ ์ด๋์์๋ ์คํ๋์ด ๋ณด๋ค ์ผ๋ฐ์ ์ด๊ณ ์ฌ์ฌ์ฉํ ์ ์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค. ๊ทธ๋ ๋ค๋ฉด node.js ๊ธฐ๋ฐ ๋๊ตฌ๊ฐ ์ข์๊น์? glTF(ํ์ดํ๋ผ์ธ) ํ์ ์ ์ ์ฌํญ์ด ์์ต๋๊น? (์ด ๋ ผ์๋ ์ฌ๊ธฐ๊ฐ ์๋ glTF์์ ์ํ๋์ด์ผ ํฉ๋๋ค.)
glTF-Pipeline ๋ก๋๋งต ์ glTF-Pipeline์ด ์ผ๋ง๋ ์ผ๋ฐ์ ์ด๊ธฐ๋ฅผ ์ํ๋์ง, ์ฃผ๋ก Cesium ์ฉ๋์ธ์ง ๋๋ ์ ํ๋ ๊ฐ๋ฐ์ ์๊ฐ์ ๋ฌธ์ ์ธ์ง ํ์คํ์ง ์์ต๋๋ค. ๋ํ glTF-Toolkit ์ ๊ด๋ จ์ฑ์ด ์์ด ๋ณด์ด์ง๋ง (ํ์ฌ) Windows์์๋ง ์คํ๋ฉ๋๋ค. ๊ฐ์ธ์ ์ผ๋ก Node.js๋ฅผ ์ข์ํ์ง๋ง WASM์ผ๋ก ์ปดํ์ผํ๋ฉด C++ ๋๋ Rust๊ฐ ํฉ๋ฆฌ์ ์ธ ์ ํ์ด ๋ ์ ์์ต๋๋ค.
์, WASM์ ๋ํ ํธ์ง์ด ๋๋ฝ๋์์ต๋๋ค. ๋ช ๊ฐ์ง ๊ถ์ฅ ๊ฐ๋ฐ ํ๋ซํผ์ ์ง์ ํ๋ ๊ฒ์ ์ต์ ํ ๊ฐ๋ฐ์์๊ฒ ์ข์ ๊ฒ์ ๋๋ค. ๊ทธ๋์ ์ ์ ํ ์ค๋ ๋์ ์ ์ํ ๊ฒ์ ๋๋ค.
ํ์ดํ๋ผ์ธ์ ์ด๋ฌํ ์ต์ ํ๊ฐ three.js์ ๋ค๋ฅธ ์ ์ฅ์์ ์์ ์ ์์ผ๋ฏ๋ก ๋ชจ๋ ์ฌ๋์ด ํํ์ ๋ฐ์ ์ ์๋ค๊ณ ์๊ฐํ๊ธฐ ๋๋ฌธ์ @donmccurdy์ ๋์ํฉ๋๋ค. ๋๋ ์ฌ์ ํ gltf ํ์ดํ๋ผ์ธ๊ณผ ํดํท ๋๊ตฌ ๊ฐ์ ์ฐจ์ด์ ์ ํ์ธํด์ผ ํ์ง๋ง ์ด๋ฌํ ์ข
๋ฅ์ ๊ธฐ๋ฅ์ด ํฌํจ๋๊ธฐ๋ฅผ ๊ธฐ๋ํฉ๋๋ค.
๋๋ ๋ํ ์ฐ๋ฆฌ๊ฐ WASM์ ๊ฐ์ง๊ณ ์๋ ํ ์์ค ์ธ์ด๋ ๋ณ๋ก ์ค์ํ์ง ์์ ๊ฒ์ด๋ผ๋ ๋ฐ ๋์ํ์ง๋ง, ๊ทธ๊ฒ์ด node.js๋ก ์์ฑ๋๋ค๋ฉด ์๋ง๋ 3d ์น ์์ง ์ฃผ๋ณ์ ๋ง์ ์ปค๋ฎค๋ํฐ๊ฐ ๋ค์๊ณผ ๊ฐ์ด ๊ฐ์ ํ๋ ๋ฐ ๋์์ด ๋ ์ ์๋ค๋ ๊ฒ ๋ํ ์ฌ์ค์
๋๋ค. ์ด์จ๋ ์ง๊ธ์ ์ด ํ์ผ ํ์์ ์ฃผ์ ๋์์
๋๋ค.
"๋ณํ ์ ์ต์ ํ"์ ๋ํด ์ดํดํ๊ณ ์๋์ง ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค... ํ์ดํ๋ผ์ธ์ด ๋ชจ๋ธ์์ ์ํํ ์ ์๋ ์ฌ๋ฌ ์ ํ์ ๋ณํ์ด ์์ผ๋ฉฐ ์ต์ ํ๊ฐ ์๋ง๋ ๊ฐ์ฅ ์ผ๋ฐ์ ์ธ ๋ณํ ์ ํ์ผ ๊ฒ์ ๋๋ค.
๊ทธ ์ด์์ผ๋ก ๋์ํ์ต๋๋ค. ๋ค๋ฅธ ๋๊ตฌ๋ฅผ ๋น๋ํ๋ ๋ฐ ์ฌ์ฉํ๊ฑฐ๋ ๋ณด๋ค ์ฌ์ฉ์ ์นํ์ ์ธ GUI์ ์ฐ๊ฒฐํ ์ ์๋ ๋ฎ์ ์์ค์ ์ง์ค ๋๊ตฌ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
์คํ์ ๋๋ค. ๋ณ์ ์ด ์๋๋ผ ์ ์ด. ๋ด ๋ง์, ๋๋ถ๋ถ์ ์ฌ์ฉ์๋ ๋คํธ์ํฌ๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ด๊ธฐ ์ ์ ์ต์ ํ/์์ถ์ ์ํฉ๋๋ค. ๋๋ ๊ทธ๋ค์ ๋ ๋ช ํํ๊ฒํ๊ธฐ ์ํด ๊ฒ์๋ฌผ์ ์ ๋ฐ์ดํธํ์ต๋๋ค.
์๋ ์๋ค์
THREE.js GLTF ๋ด๋ณด๋ด๊ธฐ๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ฒด aframe ์ฅ๋ฉด์ gltf ๊ฐ์ฒด๋ก ๋ด๋ณด๋ด๊ณ ์์ต๋๋ค.
ํ๋ ์์ ์ ์๋ a-animation ํ๊ทธ๋ฅผ gltf ๊ฐ์ฒด์ ์ ๋๋ฉ์ด์
์ผ๋ถ๋ก ๊ฐ์ ธ์ค๋ ค๋ฉด ์ด๋ป๊ฒ ํด์ผ ํฉ๋๊น?
@sunsun_sss @ssssssssss ใ ใ ใ
์๋
ํ์ธ์ @siddhartpai โ THREE.GLTFExporter
๋ THREE.AnimationClip
๊ฐ์ฒด๋ง glTF ์ ๋๋ฉ์ด์
์ผ๋ก ๋ณํํ๋ ๋ฐ๋ฉด A-Frame์ ์ ๋๋ฉ์ด์
์์คํ
์ TweenJS๋ฅผ ์ฌ์ฉํฉ๋๋ค. ๊ทธ๋์ ํ์ฌ๋ ๋ถ๊ฐ๋ฅํฉ๋๋ค. GLTFExporter
๋ ์ฌ์ฉํ๋ A-Frame ๋๋ A-Frame Inspector์์ ๋ฌธ์ ๋ฅผ ์ด์ด ํฅํ ๊ธฐ๋ฅ์ผ๋ก ์์ฒญํ ์ ์์ต๋๋ค.
๋ค์ค ์ฌ๋ฃ ์ง์ #13536
์ ํจ์ฑ ๊ฒ์ฌ๊ธฐ๊ฐ ์ ๊ทํ๋์ง ์์ ๋ฒํผ ๋ทฐ์ ๋ชจ๋ ์ผ๋ฐ ์์์ ๋ํด ์ค๋ฅ๋ฅผ ๋์ง๋ค๋ ๊ฒ์ ๋ฐฉ๊ธ ์์์ฐจ๋ ธ์ต๋๋ค. ์๋ฅผ ๋ค์ด [0,0,0]๊ณผ ๊ฐ์ ์ด๊ธฐํ๋์ง ์์ ๊ฐ์ ์ ์ฅํ๋ฉด ํด๋น ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค.
๊ฒฝ๊ณ /ํต์ง๊ฐ ์๋ ์ค๋ฅ์ด๋ฏ๋ก ์์ ์ ๋ฏผ๊ฐํฉ๋๋ค. ์ ์์ ์ธ bufferview ์์๊ฐ ์ ๊ทํ๋์๋์ง ํ์ธํ๋ ๊ฒ์ ๋ํด ์ด๋ป๊ฒ ์๊ฐํ์ญ๋๊น? ๊ทธ๋ผ์๋ ๋ถ๊ตฌํ๊ณ [0,0,0]๊ณผ ๊ฐ์ด ์ ๊ทํํ ์ ์๋ ๊ฐ์ ๊ฒฝ์ฐ ์ ํจํ ๋จ์ ๋ฒกํฐ๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๊น? /cc @donmccurdy
NORMAL
์ ์ ๊ทํํด์ผ ํ๋ ๊ฒ ๊ฐ์ต๋๋ค.
https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#meshes
๋ ธ๋ฉ | "VEC3" | 5126(ํ๋กํธ) | ์ ๊ทํ๋ XYZ ์ ์ ๋ฒ์
Three.js normal์๋ ์ด๋ฌํ ์ ํ์ด ์๊ธฐ ๋๋ฌธ์ ๋ณด์ฅ์ ๋์ํฉ๋๋ค.
๋ค, ํ์ง๋ง [0,0,0]์ ์ฌ์ฉ๋์ง ์์ ๊ฐ๊ณผ ๊ฐ์ด ์ค์ ๋ ธ๋ฉ์ด ์์ ๋ ์ด๋ป๊ฒ ํด์ผ ํ ๊น์? ๊ทธ๋ฅ ์ ํจํ ๊ฐ์ ์์ฑํ๋ฉด ๋ฉ๋๋ค. [1,0,0]์ด๋ผ๊ณ ํฉ์๋ค. ๋ฐ๋ผ์ normal ์์ฑ์ ๊ตฌ๋ฌธ ๋ถ์ํ๊ณ ๋ฐ์ดํฐ ๋ณด๊ธฐ์ ์ ์ฅํ๊ธฐ ์ ์ ๊ฐ ์์ฑ์ ์ ๊ทํํ๊ณ ์์์ ๊ฐ์งํ๋๋ก bufferview ์ฝ๋๋ฅผ ์์ ํด์ผ ํฉ๋๋ค.
[0,0,0]์ ์ฌ์ฉ๋์ง ์์ ๊ฐ๊ณผ ๊ฐ์ด ์ค์ ๋ฒ์ ์ด ์์ ๋ ์ํํ ์์
ํ .... ์ ํจํ ๊ฒ์ผ๋ก ๊ต์ฒดํ๊ณ ๊ฒฝ๊ณ ๋ฅผ ํ์ํฉ๋๊น?
๋ฐ๋ผ์ normal ์์ฑ์ ๊ตฌ๋ฌธ ๋ถ์ํ๊ณ ๋ฐ์ดํฐ ๋ณด๊ธฐ์ ์ ์ฅํ๊ธฐ ์ ์ ๊ฐ ์์ฑ์ ์ ๊ทํํ๊ณ ์์์ ๊ฐ์งํ๋๋ก bufferview ์ฝ๋๋ฅผ ์์ ํด์ผ ํฉ๋๋ค.
๋ค์๊ณผ ๊ฐ์ด ๋ ๊ฐ๋จํ๊ธฐ ๋๋ฌธ์ processMesh()
์์ ํ๋ ๊ฒ์ ์ ํธํฉ๋๋ค.
var originalNormal = geometry.attributes.normal;
if ( hasNonNormalizedValues( originalNormal ) ) {
geometry.attributes.normal = createNormalizedAttribute( originalNormal );
}
processAccessorHere();
geometry.attributes.normal = originalNormal;
processBufferView()
์์ ์ด ์์
์ ์ํํ๋ฉด ๋ฐ์ดํฐ๊ฐ ์์น ๋ฐ ์ผ๋ฐ๊ณผ ๊ฐ์ ๋ค๋ฅธ ์์ฑ ๊ฐ์ ๊ณต์ ๋๋์ง ์ฌ๋ถ์ ์ฃผ์ํด์ผ ํ๊ธฐ ๋๋ฌธ์ ์ฝ๋๊ฐ ์ฝ๊ฐ ๋ณต์กํด์ง๋๋ค. (๋งค์ฐ ๋๋ฌธ ์ฌ์ฉ ์ฌ๋ก๋ผ๋ ๊ฒ์ ์๊ณ ์์ง๋ง Three.js๋ ์ ํํ์ง ์์ต๋๋ค.)
์, ๋๋ ๊ทธ ์ ๊ทผ ๋ฐฉ์์ ์ข์ํฉ๋๋ค. ๋ด๋ณด๋ด๊ธฐ ํ์ ๋ฒ์ ์ ์์ ํ๋ ๊ฒ์ด ๋๋ ค์ ์ง๋ง ์ฐธ์กฐ๋ฅผ ์ ์ฅํ ํ ์๋ฃํ ํ ๋ค์ ์ ์ฅํ๋ฉด ๊ด์ฐฎ์ ๊ฒ์ ๋๋ค. :+1: ์ด๋ฌํ ๋ณ๊ฒฝ ์ฌํญ์ผ๋ก PR์ ์ถ์งํ์๊ฒ ์ต๋๊น? ์๋๋ฉด ๋ด๊ฐ ํ๊ธฐ๋ฅผ ์ํ์ญ๋๊น?
์๊ฒ ์ต๋๋ค. (๊ทธ๊ฑธ ๊ณ ์น๋๋ผ ๊ธํ์ ๊ฐ์?)
@takahirox ๋ฉ์ง๋ค์ , ๊ฐ์ฌํฉ๋๋ค! ์๋๋ฅด์ง ์๊ณ ๊ทธ๋ฅ ์์ถ์ ์ฒด ํํฉ์ ๋ณด๊ณ ์์์ด์ ^_^
์ข์์, ๊ทธ๋ผ ~๋ด์ผ~ ์ด๋ฒ์ฃผ์ ํ๊ฒ ์ต๋๋ค.
๋ง์ต๋๋ค, glTF๋ ํน์ ์ ์ ์ ๋ํ ๋ฒ์ ์๋ต์ ํ์ฉํ์ง ์์ง๋ง ๋จ์ผ ํ๋ฆฌ๋ฏธํฐ๋ธ์์ ๋ค๋ฅธ ์ ์ ์ ์๋ตํ ์ ์์ต๋๋ค. ์ด๋ค ์ข ๋ฅ์ ๊ฐ์ ์ ๊ณตํ๊ฑฐ๋ ์ด๋ฌํ ์ ์ ์ ์ ๊ฑฐํ๊ฑฐ๋ ์ค๋ฅ๋ฅผ ๋ฐ์์์ผ์ผ ํฉ๋๋ค.
๋๋ ์ฌ์ฉ์๋ฅผ ์ํด ์ผ์ ๋ ์ฝ๊ฒ ํ๋ ๊ฒ์ ์ ํธํ๋ฏ๋ก ๋ด ํฌํ๋ ์ ๊ทํํ๋ ์ ๋ฒ์ ๋ฐฐ์ด์ ๋ง๋ค๊ณ ๋น ๋ฐฐ์ด์ (0,1,0) ๊ฐ์ ์ถ๊ฐํ๋ ๊ฒ์ ๋๋ค.
์ข์ ๋ณด์ฌ. ๋ํ ๋ชจ๋ธ์ ๊ฒฝ์ฐ ์๋๊ฐ ๋๋ฆฐ ๊ฒฝ์ฐ checkNormals
์ต์
๋๋ ์ด์ ์ ์ฌํ ๊ฒ์ ์ํ ์ ์์ผ๋ฏ๋ก ์ด๊ฒ์ด ํ์ํ์ง ์์ ์ฌ์ฉ์๋ ๋ชจ๋ ์ ์ ์ ์ค์บํ๋ ๋์ ์ตํธ์์ํ ์ ์์ต๋๋ค.
๋ค ์ ๋ ๊ทธ๋ฅ ์ฐ๋ ค๊ณ ํ์ด์! :NS
๋ํ ๋ชจ๋ธ์ ๊ฒฝ์ฐ ์๋๊ฐ ๋๋ฆฐ ๊ฒฝ์ฐ checkNormals ์ต์ ์ด๋ ์ด์ ์ ์ฌํ ๊ฒ์ ์ํ ์ ์์ผ๋ฏ๋ก ์ด๊ฒ์ด ํ์ํ์ง ์์ ์ฌ์ฉ์๋ ๋ชจ๋ ์ ์ ์ ์ค์บํ๋ ๋์ ์ ํ ํด์ ํ ์ ์์ต๋๋ค.
๋จผ์ ๊ทธ ์ต์ ์์ด PR์ ํ ๊ฒ์ ๋๋ค. ํ์ํ ๋/ํ์ํ๋ค๋ฉด ์ถ๊ฐํฉ์๋ค. ๊ฐ์ธ์ ์ผ๋ก ์ด ๊ฒ์ฌ๋ ๊ทธ๋ค์ง ๋๋ฆฌ์ง ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
๋จผ์ ๊ทธ ์ต์ ์์ด PR์ ํ ๊ฒ์ ๋๋ค. ํ์ํ ๋/ํ์ํ๋ค๋ฉด ์ถ๊ฐํฉ์๋ค. ๊ฐ์ธ์ ์ผ๋ก ์ด ๊ฒ์ฌ๋ ๊ทธ๋ค์ง ๋๋ฆฌ์ง ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
ํ์ธํฐ์์ ๊ฐ ์คํธ๋กํฌ๋ฅผ ๋ก๋ํ ๋ ์ ์ฒด ๋ฒํผ๋ฅผ ์ ๊ทํํ๋๋ฐ ์๋นํ ๋๋ฆฝ๋๋ค.
์ ์ํ ๋์๋์ง ํ์ธ๋ง ํด๋?
@takahirox ์ด์จ๋ ๊ธธ์ด๋ฅผ ๊ณ์ฐํด์ผํ๋ฏ๋ก ๊ทธ๋ ๊ฒ ๋ง์ด ๋ณํ์ง ์์ ๊ฒ์ ๋๋ค.
ํ , ์์์ด. PR๋ก ํ๊ฐํ๊ฒ ์ต๋๋ค.
์ด๊ฒ์ ์ฐ๋ฆฌ๊ฐ ๋์ ํ ์ฒซ ๋ฒ์งธ GLTFExporter ๊ธฐ๋ฅ์ผ๋ก ๊ฐ ์ ์ ์ผ๋ก ๋ชจ๋ ๊ณ์ฐ์ ์ํํฉ๋๋ค(์๋/์ ๋ ๋ชจํ ๋์ ๋ณํ ์ ์ธ). ๊ทธ๋์ ์ ์ฌ์ ์ผ๋ก ๋ ๋๋ฆฝ๋๋ค. ์ด๋ ์ชฝ์ด๋ .
ํ๋ฅญํ ์ผ! IMHO๋ "์์ "๊ฐ ์๋ ํต์ฌ three.js์ ๋ณํฉ๋์ด์ผ ํฉ๋๋ค.
KHR_lights_punctual
์ง์์ ๋ณด๊ณ ์ถ์ต๋๋ค!
PR https://github.com/mrdoob/three.js/pull/15519๋ KHR_lights_punctual์ ์ถ๊ฐํฉ๋๋ค. :)
์ด ๋ฌธ์ ๋ ๋ซ์ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋๋จธ์ง ํญ๋ชฉ์ ๋ ์ค์ํ ํธ์์ฑ์ด๋ ์ต์ ํ์ด๋ฉฐ ๋ค๋ฅธ ๊ณณ์์ ์ถ์ ํ ์ ์์ต๋๋ค.
์๋
ํ์ธ์, ๋ชจํ ๋ณ๊ฒฝ ์ฌํญ์ ์ ์ฉํ๊ณ ์ต์ข
๊ฐ์ฒด์์ ์ ๊ฑฐํ์ฌ ์ฌ์ฉ์ ์ ์ ๋ชจ์์ ๋ฉ์ฌ๋ฅผ ๋ด๋ณด๋ด๋ ๋ฐฉ๋ฒ์ ์๋ ์ฌ๋์ด ์์ต๋๊น?
์ด ์ง๋ฌธ์ฒ๋ผ https://stackoverflow.com/questions/57423471/how-to-export-morph-changed-meshes-from-threejs-application
๋ฏธ๋ฆฌ ๊ฐ์ฌ๋๋ฆฝ๋๋ค!
@vini-guerrero GitHub ๋ฌธ์ ๋ณด๋ค๋ ํฌ๋ผ(https://discourse.threejs.org/)์ด๋ Stack Overflow๋ฅผ ์ด์ฉํด ๋์์ ์ฃผ์ธ์.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
๋ค๋ฅธ ์ค๋ ๋์์ ๋งํ๋ฏ์ด, ๋๋ ์์ ์ค์ ๋๋ค.