Three.js: ์œ ํ‹ธ๋ฆฌํ‹ฐ: ๋‚ด๋ณด๋‚ด๊ธฐ ์ง€์› ์ค‘๋‹จ(Blender, 3DS Max ๋ฐ Maya)

์— ๋งŒ๋“  2017๋…„ 12์›” 18์ผ  ยท  68์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: mrdoob/three.js

๋‚˜๋Š” ๋‘ ๊ฐ€์ง€ ์ด์œ ๋กœ Blender, 3DS Max ๋ฐ Maya JSON ๋‚ด๋ณด๋‚ด๊ธฐ์˜ ์‚ฌ์šฉ ์ค‘๋‹จ(์ œ๊ฑฐ)์„ ์ œ์•ˆํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

  • ์ˆ˜์ถœ์—…์ž๋Š” ์‹ค์ œ๋กœ ์ ๊ทน์ ์œผ๋กœ ์œ ์ง€๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ค‘์š”ํ•˜์ง€ ์•Š์€ ๋ฒ„๊ทธ, ๊ธฐ๋Šฅ ์š”์ฒญ ๋ฐ ์•„๋ฌด๋„ ์‹ ๊ฒฝ ์“ฐ์ง€ ์•Š๋Š” ์ œ์•ˆ ๋ชฉ๋ก ์ด ๋งŽ์ด ์žˆ์Šต๋‹ˆ๋‹ค(
  • ๋” ์ค‘์š”ํ•œ ์ ์€ ํŠน์ • ๋กœ๋”(์˜ˆ: FBXLoader ๋ฐ GLTFLoader )์˜ ํ’ˆ์งˆ๊ณผ ์™„์„ฑ๋„๊ฐ€ ์‹œ๊ฐ„์ด ์ง€๋‚จ์— ๋”ฐ๋ผ ํฌ๊ฒŒ ํ–ฅ์ƒ๋˜์—ˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ฆ‰, ์ ์ ˆํ•œ ๊ฒฐ๊ณผ๋กœ FBX ๋˜๋Š” glTF ํŒŒ์ผ์„ ๋กœ๋“œํ•  ๊ฐ€๋Šฅ์„ฑ์ด ํ›จ์”ฌ ๋” ๋†’์Šต๋‹ˆ๋‹ค. ๊ฒŒ๋‹ค๊ฐ€, ์ด๋Ÿฌํ•œ ๋กœ๋”๋Š” ํ”„๋กœ์ ํŠธ ํ˜‘๋ ฅ์ž๋“ค์— ์˜ํ•ด ์ ๊ทน์ ์œผ๋กœ ์œ ์ง€ ๊ด€๋ฆฌ๋ฉ๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ์‚ฌ์šฉ์ž๋Š” JSON ํ˜•์‹์œผ๋กœ ๋‚ด๋ณด๋‚ด๋Š” ๋Œ€์‹  FBX ๋˜๋Š” glTF ์™€ ๊ฐ™์€ ๋‹ค๋ฅธ ํ˜•์‹์— ์ง‘์ค‘ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ž์‚ฐ ์ „๋‹ฌ์˜ ๋งฅ๋ฝ์—์„œ ํŠนํžˆ glTF ๋Š” (์••์ถ•๋˜์ง€ ์•Š์€) JSON๋ณด๋‹ค ํ›จ์”ฌ ๋” ๋‚˜์€ ํ˜•์‹์ž…๋‹ˆ๋‹ค.

Suggestion

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

๋ฆฌํฌ์ง€ํ† ๋ฆฌ์— ์ œ๋Œ€๋กœ ์œ ์ง€ ๊ด€๋ฆฌ๋˜์ง€ ์•Š๊ณ  ์˜ค๋ž˜๋œ ์ˆ˜์ถœ์—…์ฒด๊ฐ€ ์กด์žฌํ•˜๋Š” ๊ฒƒ์€ ์‹ ๊ทœ ์ด๋ฏผ์ž์—๊ฒŒ ๋ถˆํ•„์š”ํ•œ ํ˜ผ๋ž€ ์ง€์ ์ž…๋‹ˆ๋‹ค.

three.js ๋งค์šฐ ์ค‘์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด ์ง„์ˆ ์„ ๊ฐ•์กฐํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๋Š” ์ด๋Ÿฌํ•œ ๋‚ด๋ณด๋‚ด๊ธฐ๋ฅผ ์ ‘ํ•  ๋•Œ ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜๋Š” ๋„๊ตฌ๋ฅผ ๊ธฐ๋Œ€ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ ํ˜ผ๋ž€์Šค๋Ÿฌ์›Œํ•˜๊ณ  ์ „์ฒด ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•œ ๋‚˜์œ ์ธ์ƒ์„ ์ค„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฑด ์ข‹์ง€ ์•Š์•„. ๐Ÿ˜ข

๋ชจ๋“  68 ๋Œ“๊ธ€

์ด์— ๋Œ€ํ•ด +1 - ์ €์žฅ์†Œ์— ์œ ์ง€ ๊ด€๋ฆฌ๊ฐ€ ์ œ๋Œ€๋กœ ๋˜์ง€ ์•Š๊ณ  ์˜ค๋ž˜๋œ ์ˆ˜์ถœ์—…์ฒด๊ฐ€ ์žˆ๋‹ค๋Š” ์‚ฌ์‹ค์€ ํŠนํžˆ @Mugen87์ด ์ง€์ ํ•œ ๊ฒƒ์ฒ˜๋Ÿผ ์ด์ œ ํ›จ์”ฌ ๋” ๋‚˜์€ ์˜ต์…˜์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์‹ ๊ทœ ์ด๋ฏผ์ž์—๊ฒŒ ๋ถˆํ•„์š”ํ•œ ํ˜ผ๋ž€์„ ์•ผ๊ธฐํ•ฉ๋‹ˆ๋‹ค.

์ฐธ๊ณ : ๊ณต์‹ GLTF Blender ๋‚ด๋ณด๋‚ด๊ธฐ(https://github.com/KhronosGroup/glTF-Blender-Exporter)๋Š” ํ˜„์žฌ ์ ์ ˆํ•œ ์• ๋‹ˆ๋ฉ”์ด์…˜ ๋‚ด๋ณด๋‚ด๊ธฐ๋ฅผ ํ—ˆ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค(ํ˜„์žฌ ๊ฐœ์ฒด๋‹น ํ•˜๋‚˜์˜ ์• ๋‹ˆ๋ฉ”์ด์…˜๋งŒ ์ง€์›๋จ).
https://github.com/KhronosGroup/glTF-Blender-Exporter/issues/112

@Usnul ์ด ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ์˜ Blender JSON ๋‚ด๋ณด๋‚ด๊ธฐ์™€ ๋น„๊ตํ•˜๋ฉด ์–ด๋–ป์Šต๋‹ˆ๊นŒ?

@loeeee
Blender JSON ๋‚ด๋ณด๋‚ด๊ธฐ๋Š” ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ์ž˜ ๋‚ด๋ณด๋ƒ…๋‹ˆ๋‹ค. GLTF ๋‚ด๋ณด๋‚ด๊ธฐ์—๋Š” ์—†๋Š” ํŠน์ • ์กฐ๊ฑด์—์„œ UV ๋˜๋Š” ์ •์  ๋ฒ•์„ ์— ์ด์ƒํ•œ ๊ฒฐํ•จ์ด ์žˆ์ง€๋งŒ ๊ทธ๊ฒƒ์€ ๋˜ ๋‹ค๋ฅธ ์ด์•ผ๊ธฐ์ž…๋‹ˆ๋‹ค.

์•Œ๊ฒ ์Šต๋‹ˆ๋‹ค. ๋ธ”๋ Œ๋”๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์ด์— ๋Œ€ํ•ด ๋” ์ด์ƒ ์–ธ๊ธ‰ํ•˜์ง€ ์•Š๊ฒ ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ๋ช‡ ๋…„ ๋™์•ˆ ์—…๋ฐ์ดํŠธ๋˜์ง€ ์•Š์€ 3DS Max ๋‚ด๋ณด๋‚ด๊ธฐ๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋Š” ์‹œ๋„๋Š” ๋์—†๋Š” ๊ณจ์นซ๊ฑฐ๋ฆฌ์ด๋ฉฐ FBX ํ˜•์‹์„ ์œ„ํ•ด ์ €์žฅ์†Œ์—์„œ ์ œ๊ฑฐํ•˜๋Š” ๊ฒƒ์„ ๊ฐ•๋ ฅํžˆ ์ง€์ง€ํ•ฉ๋‹ˆ๋‹ค.
3DS Max FBX ๋‚ด๋ณด๋‚ด๊ธฐ์—์„œ ๋‚ด๋ณด๋‚ธ ๊ฑฐ์˜ ๋ชจ๋“  ๊ฒƒ์ด ์ด์ œ FBXLoader์—์„œ ์ง€์›๋˜๋ฉฐ ํ•ด๋‹น ๋‚ด๋ณด๋‚ด๊ธฐ๋Š” AutoDesk์—์„œ ์œ ์ง€ ๊ด€๋ฆฌํ•˜๋ฏ€๋กœ ์ตœ์‹  ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Maya FBX ๋‚ด๋ณด๋‚ด๊ธฐ์™€ ์œ ์‚ฌํ•˜์ง€๋งŒ FBXLoader๋Š” ์—ฌ์ „ํžˆ ํ”ผ๋ฒ— ํฌ์ธํŠธ๋ฅผ ์ ์ ˆํ•˜๊ฒŒ ์ง€์›ํ•˜๋„๋ก ์—…๋ฐ์ดํŠธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๊ธฐ์–ตํ•  ๋•Œ BufferGeometry ์„ ์„ ํƒํ•˜๋ฉด Blender์—์„œ ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ๋‚ด๋ณด๋‚ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ชจํ”„ ํƒ€๊ฒŸ์—๋Š” ํ™•์‹คํžˆ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. #10932๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”. ๊ฒŒ๋‹ค๊ฐ€ ๋‚ด๋ณด๋‚ด๊ธฐ๋Š” ํ˜„์žฌ ์• ๋‹ˆ๋ฉ”์ด์…˜ ์‹œ์Šคํ…œ์ด ์•„๋‹Œ "์ด์ „" ์• ๋‹ˆ๋ฉ”์ด์…˜ ๊ณ„์ธต ํ˜•์‹์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

Revit ๋‚ด๋ณด๋‚ด๊ธฐ README๋„ ์ œ๊ฑฐํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์ง€๋‚œ ๋ช‡ ๋…„ ๋™์•ˆ ๊ฑฐ์˜ ๊ฑด๋“œ๋ฆฌ์ง€ ์•Š์€ ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด๋Š” ๋ณ„๋„์˜ ์ €์žฅ์†Œ์— ์—ฐ๊ฒฐ๋  ๋ฟ์ž…๋‹ˆ๋‹ค.

์ด์™€ ๊ฐ™์ด ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” three.js ๋„๊ตฌ๊ฐ€ ์ˆ˜๋ฐฑ ๊ฐœ ์žˆ์„ ์ˆ˜ ์žˆ์ง€๋งŒ ์ ๊ทน์ ์œผ๋กœ ์œ ์ง€ ๊ด€๋ฆฌ๋˜๊ณ  ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€ ํ™•์ธํ•˜์ง€ ์•Š๋Š” ํ•œ ์—ฌ๊ธฐ์— ํ•ด๋‹น ๋„๊ตฌ์— ๋Œ€ํ•œ ๋งํฌ๋ฅผ ํฌํ•จํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

"three.js revit exporter '์— ๋Œ€ํ•œ ์ธํ„ฐ๋„ท ๊ฒ€์ƒ‰์€ ์–ด์จŒ๋“  ์ €์žฅ์†Œ๋ฅผ ์ž˜ ์ฐพ์Šต๋‹ˆ๋‹ค.

Revit ๋‚ด๋ณด๋‚ด๊ธฐ README๋„ ์ œ๊ฑฐํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์ง€๋‚œ ๋ช‡ ๋…„ ๋™์•ˆ ๊ฑฐ์˜ ๊ฑด๋“œ๋ฆฌ์ง€ ์•Š์€ ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด๋Š” ๋ณ„๋„์˜ ์ €์žฅ์†Œ์— ์—ฐ๊ฒฐ๋  ๋ฟ์ž…๋‹ˆ๋‹ค.

๐Ÿ‘

๋ฆฌํฌ์ง€ํ† ๋ฆฌ์— ์ œ๋Œ€๋กœ ์œ ์ง€ ๊ด€๋ฆฌ๋˜์ง€ ์•Š๊ณ  ์˜ค๋ž˜๋œ ์ˆ˜์ถœ์—…์ฒด๊ฐ€ ์กด์žฌํ•˜๋Š” ๊ฒƒ์€ ์‹ ๊ทœ ์ด๋ฏผ์ž์—๊ฒŒ ๋ถˆํ•„์š”ํ•œ ํ˜ผ๋ž€ ์ง€์ ์ž…๋‹ˆ๋‹ค.

three.js ๋งค์šฐ ์ค‘์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด ์ง„์ˆ ์„ ๊ฐ•์กฐํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๋Š” ์ด๋Ÿฌํ•œ ๋‚ด๋ณด๋‚ด๊ธฐ๋ฅผ ์ ‘ํ•  ๋•Œ ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜๋Š” ๋„๊ตฌ๋ฅผ ๊ธฐ๋Œ€ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ ํ˜ผ๋ž€์Šค๋Ÿฌ์›Œํ•˜๊ณ  ์ „์ฒด ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•œ ๋‚˜์œ ์ธ์ƒ์„ ์ค„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฑด ์ข‹์ง€ ์•Š์•„. ๐Ÿ˜ข

๋ฌด๊ณ ํ•œ ์‚ฌ์šฉ์ž๋กœ์„œ ๊ฐํžˆ ๋Œ“๊ธ€์„ ๋‹ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค ...

๋ธ”๋ Œ๋”์— ๊ด€ํ•˜์—ฌ:
three.js์— ๊ธฐ๋ณธ .blend ํ˜•์‹ ๊ฐ€์ ธ์˜ค๊ธฐ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ
๋ถ„๋ช…ํžˆ ์ˆ˜์ถœ์—…์ž๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋ธ”๋ Œ๋” ์ธก์—์„œ ์„ค์น˜ ๋…ธ๋ ฅ์ด ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
๋ธ”๋ Œ๋” API/๊ตฌ์กฐ์ฒด์—์„œ ํŒŒ์ด์ฌ ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ ์ปดํŒŒ์ผ ์—†์Œ ...

JSON ์ต์Šคํฌํ„ฐ๋ฅผ ํŒŒ์ด์ฌ์œผ๋กœ ์ž‘์„ฑํ•˜๊ธฐ ์œ„ํ•œ ์—„์ฒญ๋‚œ ๋…ธ๋ ฅ์ด ์žˆ์—ˆ๊ณ ,
์™œ ํ˜‘๋ ฅ์ž๋“ค์ด ์ด๋Ÿฐ ๋ฐฉ์‹์„ ์„ ํƒํ•˜์ง€ ์•Š์•˜๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค...?

@wolfgangvonludwigsburg
๋Œ€๋‹ตํ•  ์ˆ˜ ์žˆ๋Š” ์ƒ๋‹นํžˆ ๊ฐ„๋‹จํ•œ ์งˆ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋ธ”๋ Œ๋“œ ํ˜•์‹์€ three.js ๋‚ด๋ถ€ ํ‘œํ˜„์— ๊ฐ€๊น์ง€ ์•Š์œผ๋ฏ€๋กœ ์•ฝ๊ฐ„์˜ ๋ณ€ํ™˜์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. three.js์˜ JSON ํ˜•์‹์€ ๋‚ด๋ถ€ ํ‘œํ˜„์— ๋งค์šฐ ๊ฐ€๊น๊ธฐ ๋•Œ๋ฌธ์— ๋ธ”๋ Œ๋” ํ‘œํ˜„์—์„œ three.js๋กœ์˜ ๋ณ€ํ™˜ ์ž‘์—…์€ ๋‚ด๋ณด๋‚ด๊ธฐ ๋˜๋Š” ๋กœ๋” ์ค‘ ๋ฌด์—‡์„ ์„ ํƒํ•˜๋“  ์ƒ๊ด€์—†์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, .blend๋Š” ์ผ๋ฐ˜์ ์ธ ์ „์†ก ํ˜•์‹์ด ์•„๋‹ˆ๋ฉฐ, ๋ธ”๋ Œ๋”๋ฅผ ์ œ์™ธํ•˜๊ณ ๋Š” ์‹ค์ œ๋กœ ์ง€์›ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ๋ธ”๋ Œ๋”๋ฅผ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” ์‚ฌ๋žŒ๋“ค๋„ ๋‹ค๋ฅธ ์†Œํ”„ํŠธ์›จ์–ด๋„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝํ–ฅ์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋กœ๋”๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ƒ๋‹นํžˆ ์ ์€ ์ˆ˜์˜ ์ฒญ์ค‘์„ ๋งŒ์กฑ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ตํ™˜ ํ˜•์‹์œผ๋กœ ์„ ํƒํ•œ ํ˜•์‹์ด ์•„๋‹™๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ obj, fbx ๋˜๋Š” gltf ๋˜๋Š” collada์™€ ๊ฐ™์€ ์ผ๋ถ€ ๊ณต๊ฐœ ํ‘œ์ค€์ž…๋‹ˆ๋‹ค.

@wolfgangvonludwigsburg .blend ํŒŒ์ผ ๋กœ๋”๋ฅผ ๊ตฌ์ถ•ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ _

https://raginggazebo.com/parsing-blender-3d-files-blend-1-of-3/

๊ท€ํ•˜์˜ ์˜๊ฒฌ์— ๋Œ€ํ•œ ๋งŽ์€ THX!

๊ทธ๋Ÿฌ๋‚˜ ์™œ Blender JSON ๋‚ด๋ณด๋‚ด๊ธฐ๋Š” ๊ทธ๋Ÿฌํ•œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ ์‰ฌ์šด๊ฐ€์š”?
=> ์ด๊ฒƒ์€ Blender API์— ์˜์กดํ•˜๊ณ , Python์œผ๋กœ ์ž‘์„ฑ๋˜์—ˆ์œผ๋ฉฐ, Blender ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ์ดํ•ดํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
๊ทธ๋ฆฌ๊ณ  three.js๊ฐ€ ๋‚ด๋ถ€๋กœ ๋‹ค์‹œ ๋ณ€ํ™˜ํ•˜๋Š” JSON ํ˜•์‹์œผ๋กœ ์ปดํŒŒ์ผ๋ฉ๋‹ˆ๋‹ค.

์ฃผ๋กœ ๋ธ”๋ Œ๋” ๋ฒ„์ „ ๋ณ€๊ฒฝ์œผ๋กœ ์ธํ•ด ๋ชจ๋‘ ์‹คํŒจํ•  ์ˆ˜ ์žˆ๋Š”(์‹ค์ œ๋กœ!) ๋งŽ์€ ์ž‘์—…์ด ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค.
๊ธ€์Ž„, ๋‚˜๋Š” "์ง์ ‘ ๋ฐ์ดํ„ฐ ์ปดํŒŒ์ผ"๋ฐฉ์‹์„ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค ...

๊ธ€์Ž„, ๋‚˜๋Š” "์ง์ ‘ ๋ฐ์ดํ„ฐ ์ปดํŒŒ์ผ"๋ฐฉ์‹์„ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค.

์ข‹์€ ์ ‘๊ทผ ๋ฐฉ์‹์ด ์•„๋‹™๋‹ˆ๋‹ค. blend ํŒŒ์ผ์„ ์•ฑ์— ์ง์ ‘ ๋กœ๋“œํ•˜๋Š” ๊ฒƒ์€ ์ผ์ข…์˜ ์˜ค์šฉ์ž…๋‹ˆ๋‹ค. ๋Œ€์‹  ๋ฐ์ดํ„ฐ ์ „์†ก ๋ฐ ์ž์‚ฐ ์ „๋‹ฌ์„ ์œ„ํ•œ ํŒŒ์ผ ํ˜•์‹์„ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. glTF ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ด€์ ์—์„œ ์ด ์ธก๋ฉด์— ์ดˆ์ ์„ ๋งž์ถ˜ ์ตœ์ดˆ์˜ ํ‘œ์ค€ํ™”๋œ ํ˜•์‹์ž…๋‹ˆ๋‹ค. ์ œ๊ฐ€ glTF ๋ฅผ ์—ฌ๋Ÿฌ ๋ฒˆ ํ™๋ณดํ•˜๋Š” ์ด์œ  ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค ๐Ÿ˜‡ . ์ด๋Š” ๊ณง ์ถœ์‹œ๋  ๋ชจ๋“  3D ์•ฑ์˜ ํ‘œ์ค€์ด ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ธ€์Ž„, ๋‚˜๋Š” "์ง์ ‘ ๋ฐ์ดํ„ฐ ์ปดํŒŒ์ผ"๋ฐฉ์‹์„ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค ...

๋ถˆํ–‰ํžˆ๋„ ์ด๋Ÿฐ ์‹์œผ๋กœ .blend ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋” ์‹ฌ๊ฐํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ํŽธ์ง‘ ๊ธฐ๋ก, ๋ธ”๋ Œ๋” UI์˜ ํ˜„์žฌ ์ƒํƒœ, ๋ธ”๋ Œ๋” ์• ๋“œ์˜จ ๋ฐ์ดํ„ฐ์™€ ๊ฐ™์€ ๊ฒƒ์„ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ์ƒˆ๋กœ์šด Blender ๋ฆด๋ฆฌ์Šค๊ฐ€ ๋‚˜์˜ค๋ฉด ํ˜•์‹์ด ๋ณ€๊ฒฝ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํŒŒ์ผ ํฌ๊ธฐ๊ฐ€ ๋งค์šฐ ํด ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๊ณ ํ’ˆ์งˆ 3D ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์— ์ ํ•ฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ธ”๋ Œ๋”์—์„œ ์ง์ ‘ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๊ฐ€์žฅ ์ข‹์€ ๋ฐฉ๋ฒ•์€ ๋ธ”๋ Œ๋”์˜ ๋‚ด๋ถ€ .blend ํ˜•์‹์„ ๋ฆฌ๋ฒ„์Šค ์—”์ง€๋‹ˆ์–ด๋งํ•˜๋Š” ๋Œ€์‹  ๋ธ”๋ Œ๋”์˜ API(FBX ๋ฐ glTF ๋‚ด๋ณด๋‚ด๊ธฐ๊ฐ€ ํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ)๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์›๋ž˜ ์งˆ๋ฌธ์— ๋Œ€ํ•ด ๋‚˜๋Š” 3D ์ €์ž‘ ์›Œํฌํ”Œ๋กœ์— ์ต์ˆ™ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์˜ˆ/์•„๋‹ˆ์˜ค ํˆฌํ‘œ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์„ ๊ฑด๋„ˆ๋›ธ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ๋ฉ”์ธํ…Œ์ด๋„ˆ์ด์ž ์ฃผ๋กœ JS ๊ฐœ๋ฐœ์ž๋กœ์„œ ์ œ3์ž ์ €์ž‘ ๋„๊ตฌ๋ฅผ ์ ๊ทน์ ์œผ๋กœ ์œ ์ง€ ๊ด€๋ฆฌํ•ด ์˜จ FBX ๋ฐ glTF์™€ ๊ฐ™์€ ํ˜•์‹์— ๋Œ€ํ•œ ๋กœ๋“œ ๋ฐ ์ง€์›์— ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์€ ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฐ๊ณผ๋ฅผ ์ œ๊ณตํ•  ๊ฐ€๋Šฅ์„ฑ์ด ๋” ๋†’๋‹ค๊ณ  ๋Š๋‚๋‹ˆ๋‹ค.

์ œ์ณ๋‘๊ณ , ํ˜„์žฌ glTF ์ƒํƒœ๊ณ„์— ์ด๋Ÿฌํ•œ ์œ ํ˜•์˜ ์š”๊ตฌ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ์— ์ถฉ๋ถ„ํ•œ ์›Œํฌํ”Œ๋กœ๊ฐ€ ๋˜์ง€ ๋ชปํ•˜๊ฒŒ ํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ์—๋„ ์œ ์šฉํ•œ ํ”ผ๋“œ๋ฐฑ์ž…๋‹ˆ๋‹ค. ๐Ÿ™‚

๋‚˜๋Š” Blender .blend ํ˜•์‹์„ ์ผ๋ฐ˜์ ์ธ ๊ตํ™˜ ํ˜•์‹ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ๋…ผ์Ÿํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.
๊ทธ๋Ÿฌ๋‚˜ Blender์™€ three.js ๊ฐ„์˜ ํ˜‘์—…์„ ๋‹จ์ˆœํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค ...

๋ธ”๋ Œ๋” ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ Python ๋‚ด๋ณด๋‚ด๊ธฐ + GUI๋ฅผ ์œ ์ง€ ๊ด€๋ฆฌํ•˜๋Š” ๋…ธ๋ ฅ์„ ์˜ˆ์ธกํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
ํ•˜์ง€๋งŒ ์ด๊ฒƒ์€ ์‰ฝ๊ฒŒ ๊ณตํฌ๊ฐ€ ๋  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค ... ;-)

@donmccurdy
BTW, Wavefront .obj, 3D Studio .3ds๋„ ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋Š” ๊ธฐ๋ณธ ํ˜•์‹์ž…๋‹ˆ๋‹ค...

BTW, Wavefront .obj, 3D Studio .3ds๋„ ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋Š” ๊ธฐ๋ณธ ํ˜•์‹์ž…๋‹ˆ๋‹ค...

์˜ˆ, ํ˜•์‹์ด ์• ๋‹ˆ๋ฉ”์ด์…˜๊ณผ ๊ฐ™์€ ์ผ๋ถ€ ์ธ๊ธฐ ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ์ง€์›ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— OBJ๊ฐ€ ์—ฌ๊ธฐ์—์„œ ์–ธ๊ธ‰๋˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ํ™•์‹คํžˆ three.js๋Š” ๋งค์šฐ ์˜ค๋žซ๋™์•ˆ OBJ๋ฅผ ๊ณ„์† ์ง€์›ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋Š” ๊ณ ์ „์ ์ด๊ณ  ์•ˆ์ •์ ์ธ ํ˜•์‹์ž…๋‹ˆ๋‹ค.

3DS Max์˜ .3ds ๋Š” Blender์˜ .blend ๋˜๋Š” Maya์˜ .mlt ๋˜๋Š” Cinema4D์˜ .c4d ์™€ ๊ฐ™์€ ๋ฒ”์ฃผ์— ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ ํŽธ์ง‘๊ธฐ์—๋Š” ๊ณ ์œ ํ•œ ๋‚ด๋ถ€ ํ˜•์‹์ด ์žˆ์œผ๋ฉฐ ์ด๋Ÿฌํ•œ ํ˜•์‹์€ ์†Œํ”„ํŠธ์›จ์–ด์— ๋”ฐ๋ผ ๋ณ€๊ฒฝ๋ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ๋ชจ๋ธ๋ง ๋„๊ตฌ์˜ ๊ฐœ์ธ ๋‚ด๋ถ€ ํ˜•์‹์— ๋Œ€ํ•œ ๋กœ๋”๋ฅผ ์œ ์ง€ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์€ ํŽธ์ง‘๊ธฐ ์ž์ฒด ๊ฐœ๋ฐœ์ž๊ฐ€ ์ œ๊ณตํ•œ ๋‚ด๋ณด๋‚ด๊ธฐ ํ˜•์‹์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ํ›จ์”ฌ ์–ด๋ ต๊ณ  ๋ฒ„๊ทธ๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ ์‰ฝ์Šต๋‹ˆ๋‹ค. 3DS์™€ Blender ๋ชจ๋‘ ์ž‘์„ฑ์ž๊ฐ€ ์œ ์ง€ ๊ด€๋ฆฌํ•˜๋Š” FBX ๋‚ด๋ณด๋‚ด๊ธฐ ๊ธฐ๋Šฅ์ด ๋‚ด์žฅ๋˜์–ด ์žˆ์œผ๋ฉฐ Blender๋Š” ํ–ฅํ›„ ๋ฒ„์ „์—์„œ๋„ ๋‚ด์žฅ glTF ๋‚ด๋ณด๋‚ด๊ธฐ ๊ธฐ๋Šฅ์„ ๊ฐ–๊ฒŒ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋งˆ์ง€๋ง‰ ํˆฌ๊ตฌ...

์šฐ๋ฆฌ๋Š” ์ด๋ฏธ ํ•˜๋‚˜์˜ ๋…๋ฆฝ์ ์ธ ์ „/์ˆ˜์ž…์—…์ฒด์ธ ๋ชจ๋ธ๋ง ๋„๊ตฌ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค: Collada,
๊ทธ๋Ÿฌ๋‚˜ ์–ด๋–ค ์ด์œ ๋กœ ๋“  ์ด๊ฒƒ๋“ค์€ ๊ทธ๋‹ค์ง€ ๋ฐ›์•„ ๋“ค์—ฌ์ง€์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋ฐ”๋žŒ์งํ•˜๊ฒŒ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ตฌํ˜„์„ ์—ผ๋‘์— ๋‘์—ˆ์Šต๋‹ˆ๋‹ค.
Google ํ”„๋กœํ† ์ฝœ ๋ฒ„ํผ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” ๋กœ๋”ฉ ์†”๋ฃจ์…˜

https://developers.google.com/protocol-buffers/

๊ทธ๊ฒƒ์€

... ์–ธ์–ด ์ค‘๋ฆฝ์ , ํ”Œ๋žซํผ ์ค‘๋ฆฝ์ , ๊ตฌ์กฐํ™”๋œ ๋ฐ์ดํ„ฐ ์ง๋ ฌํ™”๋ฅผ ์œ„ํ•œ ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ๋ฉ”์ปค๋‹ˆ์ฆ˜ โ€“ XML์„ ์ƒ๊ฐํ•˜์ง€๋งŒ ๋” ์ž‘๊ณ  ๋น ๋ฅด๊ณ  ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๊ฐ€ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•˜๋Š” 2D/3D ๋ฒกํ„ฐ ๋ฐ์ดํ„ฐ๋Š” ๋ณธ์งˆ์ ์œผ๋กœ ๋„ˆ๋ฌด ๋ณต์žกํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ํ•˜๋‚˜์˜ ๋ธ”๋ Œ๋” ๋ฐ์ดํ„ฐ ํŒŒ์ผ ์Šคํ‚ค๋งˆ๋ฅผ ๊ฐœ๋ฐœํ•˜๋Š” ๊ฒƒ์€ ๊ฐ„๋‹จํ•˜๊ฒŒ ์‹คํ–‰ ๊ฐ€๋Šฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค...

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—๋Š” ์‹ค์ œ๋กœ ํ˜ผํ•ฉ ํŒŒ์ผ ํŒŒ์„œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค ๐Ÿ˜
https://github.com/Galactrax/js.blend

์–ด, ์ง€์›์„ ๋ฐ›์Šต๋‹ˆ๋‹ค... - ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค mrdoob ;-))

๊ฐ€์žฅ ํฐ(Terrabyte ์ธก๋ฉด์—์„œ) 3D ๋ชจ๋ธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜(Google Maps 3D)์€ ์ด ํšจ์œจ์ ์ธ ์ข…๋ฅ˜(protobufs)์˜ ๊ตฌํ˜„์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

.blend๋ฅผ ๋กœ๋“œํ•˜๋Š” ๊ฒฝ๋กœ๋ฅผ ๋”ฐ๋ผ๊ฐ€๋Š” ๊ฒƒ์€ ์ œ์ •์‹ ์ด ์•„๋‹ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์‹ค์ œ๋กœ .dae ๋ฐ .fbx๋ฅผ ๋กœ๋“œํ•˜๋Š” ๊ฒƒ๊ณผ ๋‹ค๋ฅด์ง€ ์•Š์Šต๋‹ˆ๋‹ค...

์–ด์จŒ๋“ , ๋‚˜๋Š” ์ˆ˜์ถœ์—…์ž๋ฅผ ๋น„์ถ”์ฒœํ•œ๋‹ค๋Š” ์ƒ๊ฐ์— ๋™์˜ํ•ฉ๋‹ˆ๋‹ค.
๊ทธ๋Ÿฌ๋‚˜ ๋‚˜๋Š” gltf๊ฐ€ ์กฐ๊ธˆ ๋” ์„ฑ์ˆ™ํ•˜๊ณ  ํ…Œ์ŠคํŠธ๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆด ๊ฒƒ์ž…๋‹ˆ๋‹ค. 2018๋…„ ์—ฌ๋ฆ„?

ํ•ด๋‹น ์ˆ˜์ถœ์—…์ฒด๋„ ์‚ญ์ œํ•˜๋Š” ๋ฐ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. RIPํ•  ์ˆ˜ ์žˆ๋Š” ๋‹ค๋ฅธ ์ €์žฅ์†Œ๋กœ ์ด๋™ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. :)

๊ทธ๋Ÿฌ๋‚˜ ๋‚˜๋Š” gltf๊ฐ€ ์กฐ๊ธˆ ๋” ์„ฑ์ˆ™ํ•˜๊ณ  ํ…Œ์ŠคํŠธ๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆด ๊ฒƒ์ž…๋‹ˆ๋‹ค. 2018๋…„ ์—ฌ๋ฆ„?

๊ธฐ๋‹ค๋ฆฌ๋Š” ๊ฒƒ์ด ํ•ฉ๋ฆฌ์ ์œผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค. ํŠนํžˆ glTF์˜ ๊ฒฝ์šฐ ๋จผ์ € ๋ช‡ ๊ฐ€์ง€ ์‚ฌํ•ญ์„ ์ค€๋น„ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

  • [ ] glTF ๋‚ด๋ณด๋‚ด๊ธฐ๊ฐ€ ๋‚ด์žฅ๋œ ๋ธ”๋ Œ๋” ๋ฐฐ์†ก ๋ฐ ๋‹ค์ค‘ ์• ๋‹ˆ๋ฉ”์ด์…˜ ์ง€์›.
  • [X] ํ–ฅ์ƒ๋œ ๋งˆ์•ผ 3DS ๋งฅ์Šค glTF ์›Œํฌ ํ”Œ๋กœ์šฐ ๋˜๋Š” ๋‹จ์ง€ ๋” ํ…Œ์ŠคํŠธ FBX2GLTF .
  • [x] glTF 2.0์šฉ ๊ณต์‹ COLLADA2GLTF ๋ณ€ํ™˜๊ธฐ ์—…๋ฐ์ดํŠธ.

2018๋…„ ์—ฌ๋ฆ„์— ์งˆ๋ฌธ์„ ๋‹ค์‹œ ๋ฐฉ๋ฌธํ•˜๋Š” ๊ฒƒ์ด ๋งž๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ๋‚˜๋Š” gltf๊ฐ€ ์กฐ๊ธˆ ๋” ์„ฑ์ˆ™ํ•˜๊ณ  ํ…Œ์ŠคํŠธ๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆด ๊ฒƒ์ž…๋‹ˆ๋‹ค. 2018๋…„ ์—ฌ๋ฆ„?

๋ธ”๋ Œ๋” ์ˆ˜์ถœ์—…์ฒด์˜ ๊ฒฝ์šฐ ๋™์˜ํ•˜๋Š” ๊ฒฝํ–ฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ FBX์— ์ด๋ฏธ ์„ฑ์ˆ™ํ•˜๊ณ  ํ›จ์”ฌ ๋” ๋‚˜์€ ๋Œ€์•ˆ์ด ์žˆ์œผ๋ฏ€๋กœ ์ตœ์†Œํ•œ 3DS Max ๋‚ด๋ณด๋‚ด๊ธฐ๋ฅผ ์ฆ‰์‹œ ์ œ๊ฑฐํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ FBX์— ์ด๋ฏธ ์„ฑ์ˆ™ํ•˜๊ณ  ํ›จ์”ฌ ๋” ๋‚˜์€ ๋Œ€์•ˆ์ด ์žˆ์œผ๋ฏ€๋กœ ์ตœ์†Œํ•œ 3DS Max ๋‚ด๋ณด๋‚ด๊ธฐ๋ฅผ ์ฆ‰์‹œ ์ œ๊ฑฐํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

๋‚˜์—๊ฒŒ ์ข‹์€ ์†Œ๋ฆฌ ๐Ÿ‘Œ

์ž, 3DS Max ๋‚ด๋ณด๋‚ด๊ธฐ๊ฐ€ ์‚ฌ๋ผ์กŒ์Šต๋‹ˆ๋‹ค. ๋ช‡ ๋‹ฌ ํ›„์— ๋‹ค๋ฅธ ์ˆ˜์ถœ์—…์ฒด(Blender ๋ฐ Maya)๋ฅผ ๋‹ค์‹œ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ๊ทธ ์‹œ๊ฐ„์— Maya ์ˆ˜์ถœ์—…์ž์— ๊ด€ํ•ด ๋งŽ์€ ๊ฒƒ์ด ๋ฐ”๋€Œ์ง€ ์•Š์„ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” ์ง€๊ธˆ ๊ทธ๊ฒƒ์„ ํ‰๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ํ…Œ์ŠคํŠธํ•˜๊ณ  ์•ž์œผ๋กœ ๋ฉฐ์น  ๋™์•ˆ ๋ณด๊ด€ํ•  ๊ฐ€์น˜๊ฐ€ ์žˆ๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

์ข‹์€ ์ œ์•ˆ ๐Ÿ‘ .

์šฐ๋ฆฌ๊ฐ€ ์—ฌ๊ธฐ ์žˆ๋Š” ํ•œ https://github.com/mrdoob/three.js/tree/dev/utils/converters/fbx ์˜ ์ƒํƒœ๋Š” ์–ด๋–ป์Šต๋‹ˆ๊นŒ? THREE.FBXLoader๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ๋งˆ์ง€๋ง‰์— ์ง๋ ฌํ™”ํ•˜๋ฉด obj2three ๋ณ€ํ™˜๊ธฐ์™€ ๊ฐ™์€ node.js ์Šคํฌ๋ฆฝํŠธ๋กœ ๋Œ€์ฒด๋  ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ ๋ณ€ํ™˜๊ธฐ์—๋Š” ๋งŽ์€ ๋ฏธํ•ด๊ฒฐ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

No animation support
Only Lambert and Phong materials are supported
Some camera properties are not converted correctly
Some light properties are not converted correctly
Some material properties are not converted correctly
Textures must be put in asset's folder, and use relative path in the material

๋˜ํ•œ msgPack, UTF8 ๋ฐ CTM ๋ณ€ํ™˜๊ธฐ - ๋ช‡ ๋…„ ๋™์•ˆ ๊ฑด๋“œ๋ฆฌ์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

๊ทธ๋“ค์€ ์—ฌ์ „ํžˆ โ€‹โ€‹๋ˆ„๊ตฐ๊ฐ€์—๊ฒŒ ์œ ์šฉํ•ฉ๋‹ˆ๊นŒ?

@donmccurdy DOM์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— node.js ์Šคํฌ๋ฆฝํŠธ ๋‚ด์—์„œ FBXLoader ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ด์šฉ ๋ชจ๋“  ๋กœ๋” TextureLoader ์— ๋Œ€ํ•œ ์˜์กด์„ฑ์ด ImageLoader ๋”ฐ๋ผ์„œ์— document . ReferenceError: document is not defined ์™€ ๊ฐ™์€ ๋Ÿฐํƒ€์ž„ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. FileLoader ์—์„œ ์•ก์„ธ์Šคํ•˜๋Š” window ๊ฐœ์ฒด์— ๋Œ€ํ•ด์„œ๋„ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

์ž„์‹œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์œผ๋กœ fbx2three.js ํŒŒ์ผ์—์„œ ImageLoader ๋ฐ FileLoader ๋ฅผ ์žฌ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

fbx2three.js ํŒŒ์ผ์—์„œ ImageLoader์™€ FileLoader๋ฅผ ์žฌ์ •์˜ํ•  ์ˆ˜ ์žˆ์„๊นŒ์š”?

๋‚˜๋Š” ์ด๊ฒƒ์ด ์ถฉ๋ถ„ํžˆ ๊ฐ„๋‹จํ•  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๊ณ  ์—ฌ์ „ํžˆ ํŒŒ์ด์ฌ ๋ณ€ํ™˜๊ธฐ๋ณด๋‹ค ํ›จ์”ฌ ์ ์€ ์ฝ”๋“œ๋ฅผ ํ•„์š”๋กœ ํ•ฉ๋‹ˆ๋‹ค. ์‹œ๋„ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

fbx2three.js ํŒŒ์ผ์—์„œ ImageLoader์™€ FileLoader๋ฅผ ์žฌ์ •์˜ํ•  ์ˆ˜ ์žˆ์„๊นŒ์š”?

์ข‹์€ ์ƒ๊ฐ : ํ™๋‹น๋ฌด:

3DS Max์˜ .3ds๋Š” Blender์˜ .blend ๋˜๋Š” Maya์˜ .mlt ๋˜๋Š” Cinema4D์˜ .c4d์™€ ๊ฐ™์€ ๋ฒ”์ฃผ์— ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ์™„์ „ํžˆ ์‚ฌ์‹ค์ด ์•„๋‹ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. .max๋Š” ๋™์ผํ•œ ๋ฒ”์ฃผ์— ๋” ๊ฐ€๊น๊ณ  .3ds๋Š” ์ƒ๋‹นํžˆ ์ œ๊ฑฐ๋ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋‚ด๋ณด๋‚ด๊ธฐ ์ž‘์„ฑ ๋ฐฉ๋ฒ•์˜ ์˜ˆ๋กœ์„œ 3ds max ๋‚ด๋ณด๋‚ด๊ธฐ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ์ข‹์•„ํ–ˆ๊ณ , maxscript์—์„œ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์˜€์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” fbx๋ฅผ ํ†ตํ•ด 3ds max์—์„œ ์˜ฌ๋ฐ”๋ฅธ ์ ‘์„  ๊ณต๊ฐ„์„ ๋‚ด๋ณด๋‚ผ ์ˆ˜ ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. maxscript๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ•„์š”ํ•œ ๊ฒƒ์„ ์‰ฝ๊ฒŒ ์‹คํ—˜ํ•˜๊ณ  ์žก์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ ์ ˆํ•œ ๋ฉด์ฑ… ์กฐํ•ญ๊ณผ ํ•จ๊ป˜ ์ƒˆ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋ฅผ ๋„ฃ์„ ๊ฐ€์น˜๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ? ๋ชจ๋‘ ๋‚ด๋ณด๋‚ด๊ธฐ ์ž‘์„ฑ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์˜ˆ์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์œ ์ง€ ๊ด€๋ฆฌ๋˜์ง€ ์•Š๊ณ  FBXLoader๊ฐ€ ๋” ์•ˆ์ •์ ์ด๋ผ๋ฉด ์‚ฌ๋žŒ๋“ค์ด ์ด๊ฒƒ์ด 3DS Max์˜ ์ž์‚ฐ์„ three.js๋กœ ๊ฐ€์ ธ์˜ค๋Š” ๋ฐ ๊ถŒ์žฅ๋˜๋Š” ๋ฐฉ๋ฒ•์ด๋ผ๊ณ  ๊ฐ€์ •ํ•˜๋Š” ๊ฒƒ์„ ์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์˜ˆ, ๊ทธ๋ ‡๋‹ค๋ฉด ๋‚˜๋Š” ์ƒˆ๋กœ์šด ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์— ํˆฌํ‘œํ•ฉ๋‹ˆ๋‹ค.

json ํ˜•์‹์„ ์™„์ „ํžˆ ํฌ๊ธฐํ•˜๊ธฐ ์ „์— ์ถ”๊ฐ€ํ•˜๊ณ  ์‹ถ์—ˆ์Šต๋‹ˆ๋‹ค. ์žฅ๋ฉด ๋‚ด๋ณด๋‚ด๊ธฐ์— ๋ธ”๋ Œ๋” ๋‚ด๋ณด๋‚ด๊ธฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์œผ๋กœ). ์ด๊ฒƒ์€ '๊ทธ๋ƒฅ' json์ด๋ฏ€๋กœ js์—์„œ ๋‚ด์„ฑ ๋ฐ ์ˆ˜์ •ํ•˜๊ณ  ์ด๋Ÿฌํ•œ ์ข…๋ฅ˜์˜ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์€ ๋งค์šฐ ์‰ฝ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด glTF(์ ์–ด๋„ ํ˜„์žฌ ํ˜•์‹์—์„œ๋Š”)๊ฐ€ ์žฅ๋ฉด ํ˜•์‹์œผ๋กœ ์ž˜ ๋งž๋Š”์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋ธ”๋ Œ๋” ๋‚ด๋ณด๋‚ด๊ธฐ์™€ json ํ˜•์‹์ด ์กฐ๊ธˆ ๋” ์˜ค๋ž˜ ์œ ์ง€๋˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

@pjoe JSON ํ˜•์‹๊ณผ Blender ๋‚ด๋ณด๋‚ด๊ธฐ๊ฐ€ ์ด ์Šค๋ ˆ๋“œ์—์„œ ์–ธ๊ธ‰๋œ ๋‹ค๋ฅธ ๊ฒƒ๋“ค(์˜ˆ: 3DS Max + Maya ๋‚ด๋ณด๋‚ด๊ธฐ)๋ณด๋‹ค ๊ฐ€๊นŒ์šด ์‹œ์ผ ๋‚ด์— ๊ณ„์† ์œ ์ง€๋  ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ, glTF ๋ฐ Blender ๋‚ด๋ณด๋‚ด๊ธฐ ์— ๋Œ€ํ•œ ํ”ผ๋“œ๋ฐฑ์„ ๋ฐ›๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ์–ธ๊ธ‰ํ•œ ๋ชจ๋“  ๊ฒƒ์ด ์ง€์›๋ฉ๋‹ˆ๋‹ค.

  • ์นด๋ฉ”๋ผ ์„ค์ •
  • ์žฅ๋ฉด ๊ณ„์ธต
  • ์• ๋‹ˆ๋ฉ”์ด์…˜(์—ฌ๋Ÿฌ ๋ธ”๋ Œ๋” ์ž‘์—…์˜ ๊ฒฝ์šฐ ๋‹ค๋ฅธ ๋‚ด๋ณด๋‚ด๊ธฐ ๊ฐ€ ํ•„์š”ํ•จ)
  • ์‚ฌ์šฉ์ž ์ •์˜ ์†์„ฑ(์˜ต์…˜์—์„œ "Export extras" ์„ ํƒ)
  • ์ž๋ฃŒ, ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ๋“ฑ์— ๋Œ€ํ•œ "๋‹จ์ง€ JSON". ๋ฉ”์‹œ ๋ฐ์ดํ„ฐ๋Š” ๋ณ„๋„์˜ ๋ฐ”์ด๋„ˆ๋ฆฌ ํŽ˜์ด๋กœ๋“œ๋กœ ์ตœ์ ํ™”๋ฉ๋‹ˆ๋‹ค.

@donmccurdy ๋Š” (์ ์–ด๋„ ์•„์ง๊นŒ์ง€๋Š”) glTF์— ๋Œ€ํ•œ ๋งŽ์€ ๊ฒฝํ—˜์ด ์—†์Œ์„ ์ธ์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. - ๋น„๋ก ์‚ฌ์–‘์„ ์ฝ์œผ๋ ค๊ณ  ํ–ˆ์ง€๋งŒ :)

๋‚ด ์ƒ๊ฐ์— glTF์˜ ์ฃผ์š” '์‡ ๊ณ ๊ธฐ'(์ด๋Š” ํ›Œ๋ฅญํ•œ ์ „์†ก ํ˜•์‹์ด๋ฉฐ GPU ๋ฒ„ํผ์— ๊ฐ€๋Šฅํ•œ ํ•œ ๋น ๋ฅด๊ณ  ์ง์ ‘์ ์œผ๋กœ '๋ฐ”์ดํŠธ'๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๋ฐ๋„ ์ข‹์Šต๋‹ˆ๋‹ค)๋Š” ๋ชจ๋“  ์ฐธ์กฐ๊ฐ€ ์ธ๋ฑ์Šค ๊ธฐ๋ฐ˜์ด๋ผ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋Š” ์ข‹์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ณ€๊ฒฝ ๊ฐ€๋Šฅํ•œ ์žฅ๋ฉด ํ˜•์‹์— ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์˜ˆ๋ฅผ ๋“ค์–ด ํ•ญ๋ชฉ์„ ์‚ญ์ œํ•˜๊ฑฐ๋‚˜ ์ค‘๊ฐ„์— ํ•ญ๋ชฉ์„ ์ถ”๊ฐ€ํ•˜๋ ค๋Š” ๊ฒฝ์šฐ ํ•ด๋‹น ์œ„์น˜ ๋’ค์˜ ๋ชจ๋“  ์ฐธ์กฐ๋ฅผ ์ธ๋ฑ์Šค๋กœ ์—…๋ฐ์ดํŠธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด '์ธ๋ฑ์Šค ๊ด€๋ฆฌ'๋ฅผ ์ˆ˜ํ–‰ํ•˜๋ฉด ๋งค์šฐ ์ง€์ €๋ถ„ํ•ด์ง‘๋‹ˆ๋‹ค.

๋ธ”๋ Œ๋” glTF ์ˆ˜์ถœ์—…์ฒด์™€ ํ•จ๊ป˜ ๋ณด๋‚ธ ์งง์€ ์‹œ๊ฐ„๋ถ€ํ„ฐ(์•ฝ 2๊ฐœ์›” ์ „) ๋‹น์‹œ์—๋Š” ์ƒ๋‹นํžˆ ๋ฏธ์ˆ™ํ•ด ๋ณด์˜€์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ๊ทธ๊ฒƒ์„ ๊ฐœ์„ ํ•˜๋Š” ๋ฐ ๋„์›€์„ ์ฃผ์–ด ๋ถ„๋ช…ํžˆ ๊ณ ์น  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. :)

... ๋ชจ๋“  ์ฐธ์กฐ๋Š” ์ธ๋ฑ์Šค ๊ธฐ๋ฐ˜์ด๋ฏ€๋กœ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅํ•œ ์žฅ๋ฉด ํ˜•์‹์— ์ ํ•ฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์˜ˆ๋ฅผ ๋“ค์–ด ํ•ญ๋ชฉ์„ ์‚ญ์ œํ•˜๊ฑฐ๋‚˜ ์ค‘๊ฐ„์— ํ•ญ๋ชฉ์„ ์ถ”๊ฐ€ํ•˜๋ ค๋Š” ๊ฒฝ์šฐ ํ•ด๋‹น ์œ„์น˜ ๋’ค์˜ ๋ชจ๋“  ์ฐธ์กฐ๋ฅผ ์ธ๋ฑ์Šค๋กœ ์—…๋ฐ์ดํŠธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ, ๊ทธ๋Ÿฐ ์˜๋ฏธ์—์„œ ์ˆ˜๋™ ํŽธ์ง‘์„ ์œ„ํ•ด ์„ค๊ณ„๋˜์ง€ ์•Š์•˜์œผ๋ฉฐ ๋Ÿฐํƒ€์ž„/์ „์†ก ํ˜•์‹์œผ๋กœ์„œ ์•„๋งˆ๋„ ์ ˆ๋Œ€ ๊ทธ๋ ‡์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋„์›€์ด ๋  ์ˆ˜ ์žˆ๋Š” ์ž‘์—…์„ ์œ„ํ•œ ๋‹ค์–‘ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์ผ๋ฐ˜์ ์œผ๋กœ glTF ๋ธ”๋ Œ๋” ๋‚ด๋ณด๋‚ด๊ธฐ๊ฐ€ ๋‹ค๋ฅธ ๋ธ”๋ Œ๋” ์ถœ๋ ฅ๋ณด๋‹ค ๋” ๋‚˜์€ ๊ฒฐ๊ณผ๋ฅผ ์ œ๊ณตํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์•˜์ง€๋งŒ ํŠน์ • ๋ฌธ์ œ๋ฅผ ๋ฐœ๊ฒฌํ–ˆ๋‹ค๋ฉด ๋ฒ„๊ทธ๋ฅผ ์‹ ๊ณ ํ•˜์‹ญ์‹œ์˜ค. :)

@donmccurdy ๋Š” glTF๊ฐ€ ์ „์†ก/๋Ÿฐํƒ€์ž„์— ์ถฉ์‹ค

์šฐ๋ฆฌ๋Š” ์ž‘๊ณ  ๋นจ๋ผ์•ผ ํ•˜๋Š” ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ˆ˜ํ–‰ํ•  ๋•Œ ์ถ”๊ฐ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋‚˜ ๋ณ€ํ™˜ ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด ๋…ธ๋ ฅํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ง€๊ธˆ๊นŒ์ง€๋Š” three.js JSON ํ˜•์‹์ด ์ด ์‚ฌ์šฉ ์‚ฌ๋ก€์˜ ์žฅ๋ฉด ํ˜•์‹์œผ๋กœ ์ ํ•ฉํ–ˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์นด๋ฉ”๋ผ ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ธ”๋ Œ๋”์—์„œ ์ „์ฒด ์žฅ๋ฉด์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€ ๋‚ด๋ณด๋‚ด๊ธฐ, ๋กœ๋“œ ๋ฐ ๋Ÿฐํƒ€์ž„์— ๋™์ ์œผ๋กœ ๋ชจ๋ธ์„ ๊ต์ฒดํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค(์ด๋Š” ์•„๋งˆ๋„ ์กฐ๋งŒ๊ฐ„ glTF๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค) - ์ด ๋ชจ๋“  ๊ฒƒ์ด ํ•ฉ๋ฆฌ์ ์œผ๋กœ ๋ถ€๋“œ๋Ÿฌ์šด ํŒŒ์ดํ”„๋ผ์ธ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋ฅผ ์œ„ํ•ด :)

์ฐธ๊ณ ๋กœ ์šฐ๋ฆฌ๋Š” ๋˜ํ•œ webpack json ๋กœ๋”๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์žฅ๋ฉด ํŒŒ์ผ์„ ๋ฉ”์ธ ๋ฒˆ๋“ค์— ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ๊ทธ ์‹œ๊ฐ„์— Maya ์ˆ˜์ถœ์—…์ž์— ๊ด€ํ•ด ๋งŽ์€ ๊ฒƒ์ด ๋ฐ”๋€Œ์ง€ ์•Š์„ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ง€๊ธˆ ๊ทธ๊ฒƒ์„ ํ‰๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ํ…Œ์ŠคํŠธํ•˜๊ณ  ์•ž์œผ๋กœ ๋ฉฐ์น  ๋™์•ˆ ๋ณด๊ด€ํ•  ๊ฐ€์น˜๊ฐ€ ์žˆ๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

@looeeee ๊ถ๊ธˆํ•œ๋ฐ ์ด๊ฑฐ ์†Œ์‹์žˆ๋‚˜์š” ๐Ÿ˜Š ? ์ง€๊ธˆ ๋‚ด๋ณด๋‚ด๊ธฐ๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ๋Œ€์‹  FBX ๋ฅผ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

์ด์ œ ๋‚ด๋ณด๋‚ด๊ธฐ๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ๋Œ€์‹  FBX๋ฅผ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์‹ญ๋‹ˆ๊นŒ?

์ ์€ ์–‘์˜ ํ…Œ์ŠคํŠธ๋งŒ ํ•˜๊ณ  ๋” ํ•ด๋ณผ ๊ณ„ํš์ด์ง€๋งŒ ์‹œ๊ฐ„์ด ์—†์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‚˜๋Š” ์˜ˆ๋ผ๊ณ  ๋งํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๊ทธ๊ฒƒ์„ ์ œ๊ฑฐํ•˜๊ณ  FBXLoader๊ฐ€ Maya๋ฅผ ์™„์ „ํžˆ ์ง€์›ํ•˜๋„๋ก ๋…ธ๋ ฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์—์„œ Blender ๋‚ด๋ณด๋‚ด๊ธฐ์˜ ์‚ฌ์šฉ์ž๋กœ ์ฐธ์—ฌํ•˜์‹ญ์‹œ์˜ค. JSON์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์˜ ํ•œ ๊ฐ€์ง€ ์ด์ ์€ ๋‚ด๋ณด๋‚ด๊ธฐ ํ›„ ์ˆ˜์ •์ด ๋งค์šฐ ๊ฐ„๋‹จํ•˜๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. Blender๋Š” ์ž๋™ํ™”๋œ ๋„๊ตฌ ์ฒด์ธ์˜ ์ผ๋ถ€์ผ ๋ฟ์ด๋ฉฐ ์›น ๋ทฐ์–ด๋กœ ์ด๋™ํ•  ์ค€๋น„๊ฐ€ ๋˜๊ธฐ ์ „์— ๋‚ด๋ณด๋‚ธ JSON์— ๋Œ€ํ•ด ๋งŽ์€ ์ฒ˜๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๋‚ด๋ถ€ threejs ํ˜•์‹์— ๋งค์šฐ ๊ฐ€๊นŒ์šด ์ „์†ก ํ˜•์‹์„ ๊ฐ–๋Š” ๊ฒƒ์€ ์šฐ๋ฆฌ์—๊ฒŒ ํฐ ๋ณด๋„ˆ์Šค์ž…๋‹ˆ๋‹ค.

๋˜ํ•œ ๋‹ค๋ฅธ ๋‚ด๋ณด๋‚ด๊ธฐ ํ˜•์‹์œผ๋กœ ๋ช‡ ๊ฐ€์ง€ ํ…Œ์ŠคํŠธ๋ฅผ ์ˆ˜ํ–‰ํ–ˆ์œผ๋ฉฐ JSON ํ˜•์‹์ด ์˜ˆ๋ฅผ ๋“ค์–ด Collada ๋˜๋Š” FBX๋ณด๋‹ค ํ›จ์”ฌ ๋” ์ž˜ ์••์ถ•๋˜๋ฉด ์ „์†ก ํฌ๊ธฐ ๋ฉด์—์„œ ๊ทธ๋ ‡๊ฒŒ ๋‚˜์˜์ง€ ์•Š๋‹ค๋Š” ๊ฒƒ์„ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๋น ๋ฅธ protobuffers ๊ธฐ๋ฐ˜ ์‹œํ—˜์„ ์ˆ˜ํ–‰ํ–ˆ๊ณ  ๊ทธ ๋ฐฉ๋ฒ•์œผ๋กœ ์กฐ๊ธˆ ๋” ์ž‘๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ์—ˆ์ง€๋งŒ ๋ฒˆ๊ฑฐ๋กญ๊ฒŒ ํ•  ๊ฐ€์น˜๋Š” ์—†์—ˆ์Šต๋‹ˆ๋‹ค.

ํฐ ์žฅ๋ฉด๊ณผ ๋Š๋ฆฐ ํด๋ผ์ด์–ธํŠธ์˜ ๊ฒฝ์šฐ ๊ตฌ๋ฌธ ๋ถ„์„ ๋ฐ ๋‚ด๋ถ€ ThreeJS ๋ชจ๋ธ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ์†๋„๋„ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. JSON ๊ตฌ๋ฌธ ๋ถ„์„์€ ๋ธŒ๋ผ์šฐ์ €์—์„œ ํฌ๊ฒŒ ์ตœ์ ํ™”๋˜๊ณ  ๋ชจ๋ธ ๊ตฌ์กฐ๊ฐ€ ๋งค์šฐ ์œ ์‚ฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— JSON ํ˜•์‹์ด ์ด์™€ ๊ด€๋ จํ•˜์—ฌ ๊ฝค ์ž˜ํ•  ๊ฒƒ์ด๋ผ๊ณ  ๊ฐ€์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ ์ด๊ฒƒ์„ ํ…Œ์ŠคํŠธํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

@alexkowel ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์ด ์Šค๋ ˆ๋“œ์— ๋งํฌ๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์œผ๋ฉด ๋‹ค๋ฅธ glTF ๋ฆฌ์†Œ์Šค์™€ ํ•จ๊ป˜ ๋‚˜์—ดํ•ฉ๋‹ˆ๋‹ค. ๐Ÿ™‚

@dherben ์ข‹์€ ์ , ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค โ€”

๊ตฌ๋ฌธ ๋ถ„์„ ์†๋„์— ๋Œ€ํ•ด์„œ๋Š” glTF๊ฐ€ ํ›จ์”ฌ ๋” ๋น ๋ฅผ ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒํ•ฉ๋‹ˆ๋‹ค. ๋ณธ์งˆ์ ์œผ๋กœ ์ฐจ์ด์ ์€ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋Š” ์—ฌ์ „ํžˆ "JSON"์ธ ๋ฐ˜๋ฉด ํŽ˜์ด๋กœ๋“œ์˜ ํฐ ๋ถ€๋ถ„(์ •์  ์œ„์น˜, ์• ๋‹ˆ๋ฉ”์ด์…˜ ๋ฐ์ดํ„ฐ)์€ THREE.BufferAttribute ์ƒ์„ฑ์ž๋ฅผ ์œ„ํ•œ ํ˜•์‹ํ™”๋œ ๋ฐฐ์—ด์„ ๋งŒ๋“œ๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ArrayBuffer ์ฒญํฌ์— ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์™„์ „ํžˆ ์ตœ์ ํ™”๋œ ๋กœ๋”(THREE.GLTFLoader๊ฐ€ ์•„์ง ์žˆ๋Š”์ง€๋Š” ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค)์—์„œ๋Š” JS์—์„œ ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ฑฐ๋‚˜ ๋ณต์‚ฌํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ํŒŒ์ดํ”„๋ผ์ธ์˜ ์ผ๋ถ€๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ๊ฒฝ์šฐ ๋ง์”€ํ•˜์‹  ๋Œ€๋กœ ์ผ๋ฐ˜ JSON์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋” ์‰ฝ๋‹ค๋Š” ๋ฐ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. glTF ์ž‘์—…์„ ์œ„ํ•œ ๋‹ค์–‘ํ•œ ์–ธ์–ด๋กœ ๋œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์žˆ์ง€๋งŒ ๋„๊ตฌ๋Š” ์•„์ง ์„ฑ์ˆ™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ์˜ ํ˜„์žฌ ์ƒํƒœ:

์ˆ˜์ถœ์—…์ฒด:

  • [X] Maya ์ˆ˜์ถœ์—…์ฒด
  • [X] 3DS Max ๋‚ด๋ณด๋‚ด๊ธฐ
  • [X] ๋ธ”๋ Œ๋” ๋‚ด๋ณด๋‚ด๊ธฐ

    • ์ง€๊ธˆ์€ ์•„๋ฌด๋ฐ๋„ ๊ฐ€์ง€ ์•Š๊ณ  ๋‚˜์ค‘์— ๋‹ค์‹œ ๋ฐฉ๋ฌธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    • 2018๋…„ 5์›” ์‚ญ์ œ๋จ.

๋ณ€ํ™˜๊ธฐ:

  • [ ] FBX
  • [ ] CTM(๋…ผ์˜๋˜์ง€ ์•Š์Œ)
  • [ ] utf8(๋…ผ์˜๋˜์ง€ ์•Š์Œ)
  • [ ] obj2three(๋…ผ์˜๋˜์ง€ ์•Š์Œ)

ํŽธ์ง‘: 2018๋…„ 5์›” ์—…๋ฐ์ดํŠธ๋จ.

@donmccurdy glTF Blender ๋‚ด๋ณด๋‚ด๊ธฐ ๋ฐ Three.js ๋กœ๋”๋กœ ๋” ๋งŽ์€ ์‹คํ—˜์„ ํ•œ ํ›„ ๋Œ์•„๊ฐ€๊ณ  ์‹ถ์—ˆ์Šต๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ ์ง€๊ธˆ๊นŒ์ง€ ์šฐ๋ฆฌ์˜ ์‚ฌ์šฉ ์‚ฌ๋ก€์— ๋Œ€ํ•ด ์žฅ๋ฉด ํ˜•์‹์ด ๊ฝค ์ž˜ ์ž‘๋™ํ•˜๊ณ  ์žˆ๋Š” ๊ฒƒ์œผ๋กœ ๋‚˜ํƒ€๋‚ฌ์Šต๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ์ง€๊ธˆ ํ•˜๊ณ  ์žˆ๋Š” ์ผ์€ ๋‚ด๋ณด๋‚ธ glTF ํŒŒ์ผ์„ Three.js ์žฅ๋ฉด์— ๋กœ๋“œํ•œ ๋‹ค์Œ ์ฒซ ๋ฒˆ์งธ ๋ Œ๋”๋ง์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์ „์— Three.js ์žฅ๋ฉด ๊ณ„์ธต ๊ตฌ์กฐ๋ฅผ ์กฐ์ž‘ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค(์ž๋ฆฌ ํ‘œ์‹œ์ž๋ฅผ ๋™์  ๋กœ๋“œ๋œ ํ•ญ๋ชฉ์œผ๋กœ ๊ต์ฒด).

glTF ๋‚ด๋ณด๋‚ด๊ธฐ์—์„œ ๋ณด๊ณ  ์‹ถ์€ ๊ธฐ๋Šฅ์ด ์—ฌ์ „ํžˆ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋Œ“๊ธ€์„ ๋‹ฌ๊ฑฐ๋‚˜ PR์„ ํ•˜๋ ค๊ณ  ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. :)

glTF ๋‚ด๋ณด๋‚ด๊ธฐ์—์„œ ๋ณด๊ณ  ์‹ถ์€ ๊ธฐ๋Šฅ์ด ์—ฌ์ „ํžˆ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋Œ“๊ธ€์„ ๋‹ฌ๊ฑฐ๋‚˜ PR์„ ํ•˜๋ ค๊ณ  ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. :)

๊ต‰์žฅํ•ฉ๋‹ˆ๋‹ค, ํ•ด์ฃผ์„ธ์š”! ๐Ÿ™‚

๋ธ”๋ Œ๋” ์ต์Šคํฌํ„ฐ๋Š” ํ˜„์žฌ ์•„๋ฌด๋ฐ๋„ ๊ฐ€์ง€ ์•Š๊ณ  ํ–ฅํ›„ ๋‹ค์‹œ ๋ฐฉ๋ฌธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ˜„์žฌ ๋ธ”๋ Œ๋” ๋‚ด๋ณด๋‚ด๊ธฐ ๋ฒ„๊ทธ์— ๋Œ€ํ•ด ์ž‘์—…ํ•  ์‚ฌ๋žŒ์ด ์žˆ์Šต๋‹ˆ๊นŒ? ๋‚˜๋Š” ๋Œ€๋‹ต์ด ์•„๋‹ˆ์˜ค๋ผ๊ณ  ์˜ˆ์ƒํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿด ๋•Œ ์šฐ๋ฆฌ๋Š” ๊ทธ๋ ‡๊ฒŒ ๋งํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋ณด๋‹ค ๋จผ์ € ํ•˜๋Š” ์‚ฌ๋žŒ์ด ์—†๋‹ค๋ฉด... ์ ์–ด๋„ ๋กœํ…Œ์ด์…˜ ๋ฌธ์ œ๋Š” ํ•ด๊ฒฐํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. #13130

ํ˜„์žฌ ๋ธ”๋ Œ๋” ๋‚ด๋ณด๋‚ด๊ธฐ ๋ฒ„๊ทธ์— ๋Œ€ํ•ด ์ž‘์—…ํ•  ์‚ฌ๋žŒ์ด ์žˆ์Šต๋‹ˆ๊นŒ? ๋‚˜๋Š” ๋Œ€๋‹ต์ด ์•„๋‹ˆ์˜ค๋ผ๊ณ  ์˜ˆ์ƒํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ „์ฒด ํ† ๋ก ์„ ์ฝ์ง€ ์•Š์•˜์ง€๋งŒ ๋‚ด ๋‘ ์„ผํŠธ๋ฅผ ์ฝ์—ˆ์Šต๋‹ˆ๋‹ค.

์ง€๋‚œ ์ฃผ์— ์ €๋Š” ์ƒ์„ค ์ „์‹œ ๋‚ด์—์„œ ์ปจํ…์ธ  ์ „๋‹ฌ์— Three.js๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์†”๋ฃจ์…˜์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ํšŒ์‚ฌ๋ฅผ ๋„์™€๋‹ฌ๋ผ๋Š” ์š”์ฒญ์„ ๋ฐ›์•˜์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ํƒ์ƒ‰ํ•˜๊ณ  ์ƒํ˜ธ ์ž‘์šฉํ•  ์ˆ˜ ์žˆ๋Š” 3D ๋ชจ๋ธ์ด ์žˆ๋Š” ์‚ฌ์ด๋‹ˆ์ง€. ์˜ค๋ž˜ ์ „์— ์‚ฌ๋ผ์ง„ ์›๋ž˜ ๊ฐœ๋ฐœ์ž๋Š” Three.js JSON ํ˜•์‹์„ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค . ๋Ÿฐํƒ€์ž„ ์ฝ”๋“œ๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๋Š” ์กฐ๊ฑด์—์„œ ์ƒˆ ๋ชจ๋ธ์„ ์ค€๋น„ํ•˜๊ณ  ๊ฐ€์ ธ์˜ค๋Š” ๊ฒƒ์€ ์ •๋ง ์•…๋ชฝ์ž…๋‹ˆ๋‹ค.

IMHO Three.js ๋Š” FBX ๋ฐ glTF ์™€ ๊ฐ™์ด ๋น ๋ฅด๊ฒŒ ์„ฑ์žฅํ•˜๋Š” ํ˜•์‹๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๊ธฐ์กด ํ˜•์‹์„ ์ง€์›ํ•˜๋Š” ๋ฐ ์ค‘์ ์„

๋ธ”๋ Œ๋”์˜ ๋ฌผ๊ฑด์ด ๋‚˜๊ฐ€๋Š” ์›Œํฌ ํ”Œ๋กœ์šฐ๋ฅผ ์ƒ์ƒํ•ด๋ณด์‹ญ์‹œ์˜ค.

1) ์›น์ง€์—˜
ํ™•์‹คํžˆ Three.js ๐Ÿ˜ƒ

2) OpenGL 3.3+
์ƒ/์‹ ๋”

3) RISC์˜ OpenGL ES 2.0
์Šค๋งˆํŠธํฐ์—์„œ ๋ผ์ฆˆ๋ฒ ๋ฆฌํŒŒ์ด๋กœ

4) ๊ฒŒ์ž„ ์—”์ง„

5) ๋ฏธ๋””์–ด ์„œ๋ฒ„์™€ ํ†ตํ•ฉ๋œ ์‹ค์‹œ๊ฐ„ ๊ทธ๋ž˜ํ”ฝ ์•ฑ(Hippo, D3 disguise)
VFX ๋…€์„๋“ค์ด ์‚ฌ์šฉํ•˜๋Š” ๋ฌด๋Œ€.

๋‹ค๋ฅธ ์ถœ๋ ฅ์— ๋Œ€ํ•ด ๋งŽ์€ ๋‹ค๋ฅธ ๋‚ด๋ณด๋‚ด๊ธฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋Œ€์‹  ๋ชฉํ‘œ๋Š” ์ตœ๋Œ€ 1๊ฐœ, ์ตœ๋Œ€ 2๊ฐœ ํ˜•์‹์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ฒ˜์Œ 3๊ฐ€์ง€ ๊ฒฝ์šฐ์— OGL์„ ์ž‘์„ฑํ•  ๋•Œ... ๋™์ผํ•œ ๋ชจ๋ธ ํ˜•์‹์„ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋งˆ์ง€๋ง‰ ๋‘ ์ง€์ ์—์„œ FBX๋Š” ์™•์ด๋ฉฐ(ํŒจํ‚ค์ง€ ๊ฐ„์— COLLADA์— ๋Œ€ํ•œ ๋‹ค๋ฅธ ๊ตฌํ˜„์€ ์ž‘์—…ํ•˜๊ธฐ ์–ด๋ ต๊ฒŒ ํ•จ) ์‹ค์ œ๋กœ ๋ชจ๋ธ์€ "๋…ธ์ถœ"๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
๋‚˜๋Š” Three.js JSON ํ˜•์‹ ์ด๋‚˜ ๋ธ”๋ Œ๋” ์• ๋“œ์˜จ( @mrdoob ๐Ÿ™‡ ๐Ÿ™ )์„
์—…๊ณ„ ๋‚ด์—์„œ ๋‹ค์–‘ํ•œ ์ถœ๋ ฅ์„ ์ง€์†์ ์œผ๋กœ ์ œ๊ณตํ•ด์•ผ ํ•˜๋Š” ๊ด€์ ์—์„œ Three.js JSON ํ˜•์‹ ์ด ํ™˜๊ฒฝ์— ๋งž์ง€ ์•Š๊ณ  ๋ถˆํ•„์š”ํ•˜๋‹ค๋Š” ์ ์„ ๊ณต์œ ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

@kroko๋Š” ํ™•์‹คํžˆ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค ๐Ÿ‘

ํ˜•์‹์˜ ํ’๊ฒฝ์ด ๋” ๋ช…ํ™•ํ•ด์ง€๊ธฐ ์‹œ์ž‘ํ–ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. three.js json ํ˜•์‹์€ ๋‹น์‹œ์— json ํ˜•์‹์ด ์—†์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ฃจ์–ด์กŒ์Šต๋‹ˆ๋‹ค. ํŒŒ์ผ ํ˜•์‹์„ ์ •์˜ํ•˜๋Š” ๊ฒƒ์€ ์ด๋ฏธ ๋ Œ๋”๋ง ์—”์ง„๊ณผ API๋ฅผ ์ˆ˜ํ–‰ํ•  ๋•Œ ํ•˜๊ณ  ์‹ถ์—ˆ๋˜ ๋งˆ์ง€๋ง‰ ์ž‘์—…์ด์—ˆ์Šต๋‹ˆ๋‹ค ๐Ÿ˜ฉ

์ดˆ๋ณด์ž๋กœ์„œ Three.js JSON ๋‚ด๋ณด๋‚ด๊ธฐ๋Š” ์›์‹œ ๋ฐ์ดํ„ฐ์™€ ์ถœ๋ ฅ ์ง€์˜ค๋ฉ”ํŠธ๋ฆฌ์˜ ๊ธฐ๋ณธ ๊ตฌ์กฐ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋งค์šฐ ๊ต์œก์ ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๋‚ด๋ณด๋‚ด๊ธฐ ํ”„๋กœ๊ทธ๋žจ์€ ํšจ์œจ์„ฑ์ด ๋†’์ง€๋งŒ ๋Œ€๋ถ€๋ถ„ ์ด์ง„ ํ˜•์‹์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ์ดํ„ฐ๋ฅผ ๋ณผ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ด ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ์—์„œ ๊ทธ๊ฒƒ์„ ์ œ๊ฑฐํ•˜๋Š” ๊ฒƒ์ด ์˜ค๋Š˜๋‚  ์ตœ์„ ์˜ ์„ ํƒ์ด ๋  ๊ฒƒ์ด๋ผ๋Š” ๋ฐ ๋™์˜ํ•˜์ง€๋งŒ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์— ๋ฐฐ์น˜๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ด ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ์—์„œ ๊ทธ๊ฒƒ์„ ์ œ๊ฑฐํ•˜๋Š” ๊ฒƒ์ด ์˜ค๋Š˜๋‚  ์ตœ์„ ์˜ ์„ ํƒ์ด ๋  ๊ฒƒ์ด๋ผ๋Š” ๋ฐ ๋™์˜ํ•˜์ง€๋งŒ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์— ๋ฐฐ์น˜๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

http://threejs.org/editor/ ์—์„œ JSON์œผ๋กœ ๋‚ด๋ณด๋‚ด๋Š” ์˜ต์…˜์ด ํ•ญ์ƒ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ธ”๋ Œ๋” ๋‚ด๋ณด๋‚ด๊ธฐ์™€ ๊ด€๋ จ๋œ ๋ชจ๋“  ๋ฏธํ•ด๊ฒฐ ๋ฌธ์ œ๋ฅผ ๋‹ซ๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ๋™์˜?

๋ˆ„๊ตฐ๊ฐ€๊ฐ€ 3D ๋ชจ๋ธ ๋‚ด๋ณด๋‚ด๊ธฐ/๊ฐ€์ ธ์˜ค๊ธฐ(๊ธฐ๋ณธ ๋ฐ ํŠน์ˆ˜ ๊ธฐ๋Šฅ์šฉ), ์ผ๋ฐ˜์ ์ธ ๋ฌธ์ œ ํ•ด๊ฒฐ, ๋ชจ๋“  ์˜ค๋ž˜๋œ ๋ฌธ์„œ ๋ฐ ์˜ˆ์ œ๋ฅผ ์ž˜๋ผ๋‚ด๊ฑฐ๋‚˜ ์—…๋ฐ์ดํŠธํ•˜๊ธฐ ์œ„ํ•œ "๊ณต์‹" ๋ฌธ์„œ/ํŒŒ์ดํ”„๋ผ์ธ์„ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. EG Knight ์˜ˆ์ œ๋Š” ๋” ์ด์ƒ ๋ธ”๋ Œ๋” json ๋‚ด๋ณด๋‚ด๊ธฐ๊ฐ€ ์—†๋‹ค๋Š” ์ ์„ ๊ฐ์•ˆํ•  ๋•Œ ๋งค์šฐ ํ˜ผ๋ž€์Šค๋Ÿฝ์Šต๋‹ˆ๋‹ค. 3d ๋ชจ๋ธ์šฉ JSONLoader๋Š” ํ˜ธํ™˜์„ฑ์„ ์œ„ํ•ด ์œ ์ง€ํ•ด์•ผ ํ•˜์ง€๋งŒ ์ฝ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

@stmaccarelli ์—ฌ๊ธฐ์— ๋ช‡ ๊ฐ€์ง€ ์ƒˆ๋กœ์šด ๋ฌธ์„œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค: https://threejs.org/docs/#manual/introduction/Loading -3D-models, ํ•˜์ง€๋งŒ ์˜ˆ, ๋„์›€์ด ๋  ๋‹ค๋ฅธ ๊ฒƒ์ด ๋ฌด์—‡์ธ์ง€ ์•Œ๋ ค์ฃผ์‹ญ์‹œ์˜ค!

@donmccurdy ๊ทธ ์ข…์ด๊ฐ€
๋ฌธ์„œ, ์˜ˆ์ œ ๋ฐ ๋‹ค์–‘ํ•œ ์‹œ๋Œ€์˜ ์ธํ„ฐ๋„ท์—์„œ ์ฐพ์„ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ๋“ค์ด ํ˜ผํ•ฉ๋˜์–ด ์žˆ๋Š” ํ˜„์žฌ ์ „์ฒด 3d ๊ฐ€์ ธ์˜ค๊ธฐ/์• ๋‹ˆ๋ฉ”์ด์…˜ ์‹œ์Šคํ…œ์€ ํ˜ผ๋ž€์Šค๋Ÿฝ์Šต๋‹ˆ๋‹ค.

๋งˆ์Šคํ„ฐ ์• ๋‹ˆ๋ฉ”์ด์…˜ ์‹œ์Šคํ…œ ๋ฌธ์„œ๋Š” ๋‹จ์ผ ๊ฐœ์ฒด์˜ ์ฐธ์กฐ๊ฐ€ ์ •ํ™•ํ•˜๋‹ค๋ฉด ๊ดœ์ฐฎ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
AnimationClip ์ฐธ์กฐ๋ฅผ ๊ฐ€์ ธ ๊ฐ€์ž. morphTargets๋ฅผ ์˜ฌ๋ฐ”๋ฅธ ๋ฐฉ๋ฒ•์œผ๋กœ ๋‚ด๋ณด๋‚ด๊ณ  ์žˆ๋Š”์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์ง€๋งŒ ์—ฌ๊ธฐ์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ฝ์—ˆ์Šต๋‹ˆ๋‹ค.

_.CreateClipsFromMorphTargetSequences ( name : String, morphTargetSequence : Array, fps : Number, noLoop : Boolean ) : Array
"Walk_001, Walk_002, Run_001, Run_002 ..."์™€ ๊ฐ™์€ ์• ๋‹ˆ๋ฉ”์ด์…˜ ๊ทธ๋ฃน ๊ธฐ๋ฐ˜ ํŒจํ„ด์œผ๋กœ ๋ชจํ”„ ๋Œ€์ƒ ์ด๋ฆ„์„ ์ •๋ ฌํ•˜๋ ค๊ณ  ์‹œ๋„ํ•˜๋Š” ์ง€์˜ค๋ฉ”ํŠธ๋ฆฌ์˜ ๋ชจํ”„ ๋Œ€์ƒ ์‹œํ€€์Šค์—์„œ ์ƒ์„ฑ๋œ ์ƒˆ๋กœ์šด AnimationClip ๋ฐฐ์—ด์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

๋ฌธ์ œ๋Š” glTF ํŒŒ์ผ์„ ๊ฐ€์ ธ์˜ค๋ฉด morphTargetSequence ๋ฐฐ์—ด์ด ์—†๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค... ์—ฌ๊ธฐ์ €๊ธฐ์— morphTargetSomething ๊ฐœ์ฒด๊ฐ€ ์ €์žฅ๋˜์–ด ์žˆ์ง€๋งŒ ๋ฌด์—‡์„ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š”์ง€ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.

๋งค์šฐ ๊ฐ„๋‹จํ•œ ์˜ˆ์™€ ํ•จ๊ป˜ 3D ๋ชจ๋ธ ๊ด€๋ฆฌ/์›Œํฌํ”Œ๋กœ๋ฅผ ์„ค๋ช…ํ•˜๋Š” ๋ฌธ์„œ๊ฐ€ ์žˆ์–ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.
๊ทธ๋ฆฌ๊ณ  3D ๋กœ๋” ์ฐธ์กฐ๋Š” ๋ชจ๋‘ ๋™์ผํ•œ ํ…œํ”Œ๋ฆฟ์„ ์ค€์ˆ˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
์˜ ๋ง์„ํ•˜์ž
1- ๊ฐ„๋‹จํ•œ 3D ๋ชจ๋ธ ๊ฐ€์ ธ์˜ค๊ธฐ
2- ์žฌ๋ฃŒ ๊ฐ€์ ธ์˜ค๊ธฐ(๋‹ค๋ฅธ ๋งต, ๋งต ๋งค๊ฐœ๋ณ€์ˆ˜, ๋‹ค์ค‘ ์žฌ๋ฃŒ ๊ด€๋ฆฌ ๋“ฑ๊ณผ ๊ฐ™์€ ๋ชจ๋“  ์ข…์†Œ๋ฆฌ์™€ ํ•จ๊ป˜)
3- ์ „์ฒด ์žฅ๋ฉด ๊ฐ€์ ธ์˜ค๊ธฐ(์˜ˆ: glTF์—์„œ ๊ฐ€์ ธ์˜จ ์žฅ๋ฉด์„ ํŠธ๋ž˜๋ฒ„์Šค/๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•)
4- ๊ณจ๊ฒฉ ์• ๋‹ˆ๋ฉ”์ด์…˜ ๊ฐ€์ ธ์˜ค๊ธฐ ๋ฐ ๊ด€๋ฆฌ
5-๋ชจํ”„ ์• ๋‹ˆ๋ฉ”์ด์…˜ ๊ฐ€์ ธ์˜ค๊ธฐ ๋ฐ ๊ด€๋ฆฌ

๋˜ํ•œ 3D ๋ชจ๋ธ ๋กœ๋”ฉ์„ ํŠน์ง•์œผ๋กœ ํ•˜๋Š” ๋ชจ๋“  ์˜ˆ์ œ๊ฐ€ ๋™์ผํ•œ ํŒจํ„ด์„ ์ค€์ˆ˜ํ•˜๋Š”์ง€ ํ™•์ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” ์˜ˆ์ œ๋ฅผ ์—…๋ฐ์ดํŠธํ•ด์•ผ ํ•˜๊ณ , ๊ฐ€๋Šฅํ•˜์ง€๋Š” ์•Š์ง€๋งŒ ์ผ๋ถ€ ๋ถ€๋ถ„์ด ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š์œผ๋ฉฐ ๋ฌด์—‡์„ (์˜ˆ: ๊ธฐ์‚ฌ ์˜ˆ์ œ์—์„œ... ) ๋ช…ํ™•ํ•˜๊ฒŒ ์ž‘์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

_EG- 3D ๋ชจ๋ธ์šฉ JSON ํŒŒ์ผ ํ˜•์‹์„ ๋” ์ด์ƒ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  glTF๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ•œ ๊ฒฝ์šฐ ๊ณจ๊ฒฉ ์• ๋‹ˆ๋ฉ”์ด์…˜๊ณผ ๋ชจํ”„ ๋Œ€์ƒ์„ ๋ชจ๋‘ ํฌํ•จํ•˜๋Š” ์œ ์ผํ•œ ์• ๋‹ˆ๋ฉ”์ด์…˜ ์˜ˆ์ œ๊ฐ€ ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ์ €์žฅํ•˜๋Š” 10 ๋ฒ„์ „ ์ด์ „์˜ JSON ๋ชจ๋ธ._

@stmaccarelli ๊ถŒ์žฅ๋˜๋Š” ์ข…๋‹จ ๊ฐ„ ์›Œํฌํ”Œ๋กœ๋Š” ์—†์Šต๋‹ˆ๋‹ค. ๋‹ค์–‘ํ•œ ๊ธฐ์ˆ  ์ˆ˜์ค€, ๋ฌด๋ฃŒ ๋Œ€ ์œ ๋ฃŒ ๋ชจ๋ธ๋ง ๋„๊ตฌ์— ๋Œ€ํ•œ ์„ ํ˜ธ๋„ ๋ฐ ํŠน์ • ์š”๊ตฌ ์‚ฌํ•ญ์„ ๊ฐ์•ˆํ•  ๋•Œ ์ด๋ฅผ ์ œ๊ณตํ•˜๊ธฐ๊ฐ€ ์–ด๋ ค์› ์„ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋‹น์‹ ์ด ์ผ๋ฐ˜์ ์œผ๋กœ ๊ทธ CreateClipsFromMorphTargetSequences ๋ฐฉ๋ฒ•์ด ํ•„์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์œ„์˜ ๋ฌธ์„œ๋Š” ํŠน์ • ๋กœ๋”๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์ž์„ธํžˆ ์„ค๋ช…ํ•˜์ง€ ์•Š์•˜์ง€๋งŒ(๋‹น์‹ ์ด ์–ธ๊ธ‰ ํ–ˆ๋“ฏ์ด , ๊ทธ๊ฒƒ๋“ค์€ ์ผ๊ด€์„ฑ์ด ์—†์Šต๋‹ˆ๋‹ค),

loader.load('foo.glb', function(gltf) {
  const clips = gltf.clips;  // Array<THREE.AnimationClip>
  const model = gltf.scene; // THREE.Scene
  ...
});

์ด ๊ฒฝ์šฐ ํด๋ฆฝ์ด TRS, ์Šคํ‚จ ๋˜๋Š” ๋ชจํ”„ ๋Œ€์ƒ์ธ์ง€ ์—ฌ๋ถ€๋Š” ์ค‘์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ๋ชจ๋‘ ๋˜‘๊ฐ™์ด ์žฌ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Mixamo์™€ Blender๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•˜๋‚˜์˜ ๊ฐ€๋Šฅํ•œ ์›Œํฌํ”Œ๋กœ๋ฅผ ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ์€ Maya๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋˜ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ• ์ž…๋‹ˆ๋‹ค.

๋˜ํ•œ 3D ๋ชจ๋ธ ๋กœ๋”ฉ์„ ํŠน์ง•์œผ๋กœ ํ•˜๋Š” ๋ชจ๋“  ์˜ˆ์ œ๊ฐ€ ๋™์ผํ•œ ํŒจํ„ด์„ ์ค€์ˆ˜ํ•˜๋Š”์ง€ ํ™•์ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  3D ๋กœ๋” ์ฐธ์กฐ๋Š” ๋ชจ๋‘ ๋™์ผํ•œ ํ…œํ”Œ๋ฆฟ์„ ์ค€์ˆ˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ๊ณต์ •ํ•œ ์ง€์ ์ด๋ฉฐ ์—ฌ๊ธฐ์—์„œ ๊ฐœ์„ ํ•  ์—ฌ์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์Šค์ผˆ๋ ˆํƒˆ ์• ๋‹ˆ๋ฉ”์ด์…˜๊ณผ ๋ชจํ”„ ํƒ€๊ฒŸ์„ ๋ชจ๋‘ ์ œ๊ณตํ•˜๋Š” ์œ ์ผํ•œ ์• ๋‹ˆ๋ฉ”์ด์…˜ ์˜ˆ์ œ๊ฐ€ ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ์ €์žฅํ•˜๋Š” 10๊ฐœ ๋ฒ„์ „ ์ด์ „์˜ JSON ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•˜๋Š” ์˜ค๋ž˜๋œ ๊ธฐ์‚ฌ ์˜ˆ์ œ๋ผ๋Š” ๊ฒƒ์€ ๋ง์ด ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์—„๋ฐ€ํžˆ ๋งํ•˜๋ฉด JSON ํ˜•์‹๊ณผ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋Š” ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š์œผ๋ฉฐ ์žฅ๋ฉด์„ [์—ญ์ง๋ ฌํ™”]ํ•˜๋Š” ๋ฐ ์—ฌ์ „ํžˆ ์™„์ „ํžˆ ํ•ฉ๋ฆฌ์ ์ธ ๋ฐฉ๋ฒ•์ด์ง€๋งŒ ์š”์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. @mrdoob ์ผ๋ถ€ ์• ๋‹ˆ๋ฉ”์ด์…˜ ์˜ˆ์ œ๋ฅผ ๊ต์ฒดํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ์–ด๋–ป๊ฒŒ ์ƒ๊ฐํ•˜์‹ญ๋‹ˆ๊นŒ? ์™€ ๊ฐ™์€:

animation / keyframes / json
animation / scene
animation / skinning / blending
animation / skinning / morph

์• ๋‹ˆ๋ฉ”์ด์…˜ ์˜ˆ์ œ ์ค‘ ์ผ๋ถ€๋ฅผ ๊ต์ฒดํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ์–ด๋–ป๊ฒŒ ์ƒ๊ฐํ•˜์‹ญ๋‹ˆ๊นŒ?

์ด๊ฒƒ์— ๋Œ€ํ•ด +1. ๋‚˜๋Š” animation / skinning / blending a์˜ ๊ตฐ์ธ์„ ๋‹ค์Œ๊ณผ ๊ฐ™์€ Mixamo์˜ ๋ณด๋‹ค ํ˜„๋Œ€์ ์ธ ๋ชจ๋ธ๋กœ ๊ต์ฒดํ•˜๋Š” ๋ฐ ํˆฌํ‘œํ•ฉ๋‹ˆ๋‹ค.

screenshot-www mixamo com-2018 07 15-10-04-00

์šฐ๋ฆฌ๋Š” ์œ ํœด/๊ฑท๊ธฐ/๋‹ฌ๋ฆฌ๊ธฐ๋ฅผ ํ˜ผํ•ฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์„ ํ˜ธํ•˜๋Š” ๊ฒฝ์šฐ ๋ชจ๋ธ์„ glTF๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋ชจ๋ธ ํฌ๊ธฐ๋Š” ์•ฝ 9mb์ด๊ณ  ๋ชจ๋“  ๊ด€๋ จ ํŒŒ์ผ๊ณผ ํ•จ๊ป˜ ํ˜„์žฌ ๋ชจ๋ธ์€ 71mb์ž…๋‹ˆ๋‹ค!!

animation / skinning / morph ๊ฒฝ์šฐ FBX ๋ชจํ”„ ํƒ€๊ฒŸ์„ ํ…Œ์ŠคํŠธํ•œ ๋ชจ๋ธ์„ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

im

ํ˜„์žฌ ๊ธฐ์‚ฌ ๋ชจ๋ธ๊ณผ ํฌ๊ธฐ๊ฐ€ ๊ฑฐ์˜ ๊ฐ™์ง€๋งŒ ๋ชจํ”„ ๋Œ€์ƒ์ด ์–ผ๊ตด ํ‘œ์ •์— ๋” ์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์ด ๋” ํ•ฉ๋ฆฌ์ ์ด๋ผ๊ณ  ๋งํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์‹œ ๋งํ•˜์ง€๋งŒ, ํ˜„์žฌ FBX ํ˜•์‹์ด์ง€๋งŒ ์›ํ•˜๋Š” ๊ฒฝ์šฐ glTF๋กœ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ์€ ๊ณ ๋ คํ•ด์•ผ ํ•  ๋ช‡ ๊ฐ€์ง€ ์˜ˆ์ž…๋‹ˆ๋‹ค.

| ์Šคํฌ๋ฆฐ์ƒท | ๋งํฌ | ํฌ๊ธฐ |
|---|---|--|
|iondrive | ๋งํฌ | 6MB |
|vacation | ๋งํฌ | 3MB |
|lain | ๋งํฌ | 5MB |
|handpainted | ๋งํฌ | 12MB |

๊ทธ๊ฒƒ๋“ค์€ ๋ชจ๋‘ ์• ๋‹ˆ๋ฉ”์ด์…˜๋˜๊ณ  three.js์—์„œ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ž‘๋™ํ•˜๋ฉฐ Sketchfab ๋‹ค์šด๋กœ๋“œ ๋ฒ„์ „๋ณด๋‹ค ์•ฝ๊ฐ„ ๋” ์••์ถ•๋˜๊ฑฐ๋‚˜ ์ตœ์ ํ™”๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋‹ฌ๋ฆฌ๊ธฐ/๊ฑท๊ธฐ ์‚ฌ์ดํด์ด ์ข‹์€ ์กฐ์ž‘๋œ ์บ๋ฆญํ„ฐ๊ฐ€ ์—†์ง€๋งŒ Mixamo->glTF ์›Œํฌํ”Œ๋กœ ๋Š” ๋‚˜์˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰