Three.js: ์žฅ๋ฉด ๋ฃจํŠธ์—์„œ ๋ฉ€๋ฆฌ ๋–จ์–ด์ ธ์žˆ์„ ๋•Œ SkinnedMesh ๋ฒ„๊ทธ (0,0,0)

์— ๋งŒ๋“  2018๋…„ 02์›” 09์ผ  ยท  113์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: mrdoob/three.js

SkinnedMesh (iPhone 6 ๋ฐ 8์—์„œ ํ…Œ์ŠคํŠธ)์— ๋Œ€ํ•œ ๋ฒ„๊ทธ๋ฅผ ๋ฐœ๊ฒฌ ํ•œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ด๋ฏธ๋ณด๊ณ  ๋œ ๊ฒฝ์šฐ ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ๋ฌธ์ œ ๋ชฉ๋ก์—์„œ ์ฐพ์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. (

GPU ์Šคํ‚ค๋‹์ด ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š๊ณ  ๋ชจ๋ฐ”์ผ์—์„œ ๋ฏธ์ณ๊ฐ€๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
SkinnedMesh๊ฐ€ ๋†’์€ ๊ฐ’ ์œ„์น˜ (์˜ˆ : x : 0, y : 0, z : 1000)์—์„œ ์›€์ง์ด๊ฑฐ๋‚˜ ์ด๋™ํ•˜๋ฉด ์Šคํ‚ค๋‹์ด ๋” ์ด์ƒ ์ •ํ™•ํ•˜์ง€ ์•Š๊ณ  ๊ฑฐ๋ฏธ ์ถค์„ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

๋ฉ”์‹œ์˜ ํฌ๊ธฐ๊ฐ€ ๋ฒ„๊ทธ์— ์˜ํ–ฅ์„์ค๋‹ˆ๋‹ค.

์Šค์ผˆ๋ ˆํ†ค ๋ณธ ๊ฐ’์ด ๊ฐ ํ”„๋ ˆ์ž„์—์„œ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๊ณ„์‚ฐ๋˜์ง€ ์•Š๊ณ  ์Šคํ‚ค๋‹ ์…ฐ์ด๋”์˜ bonesTexture / bonesMatrix๊ฐ€ ์ •์ ์„ ์ž˜๋ชป๋œ ์œ„์น˜๋กœ ๋ฐ€๊ณ ์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
์ด๊ฒƒ์€ ๋‹น์—ฐํžˆ ์ œ ๋Š๋‚Œ์ž…๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ด๊ฒƒ์„ ๊ฒŒ์‹œํ•˜๊ธฐ ์ „์— ๋งŽ์€ ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค ... ๋‚ด ์• ๋‹ˆ๋ฉ”์ด์…˜ ๋‚ด๋ณด๋‚ด๊ธฐ์—์„œ ๋‹จ์„œ๋ฅผ ์ฐพ๊ณ  ์žˆ์—ˆ์ง€๋งŒ ๋ชจ๋“  ์ข…๋ฅ˜์˜ ํ˜•์‹ (GLTF, FBX, Collada, JSON, ...) ๋ฐ ThreeJS repo์˜ ๋ชจ๋ธ์—์„œ ๋ฒ„๊ทธ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ์„ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ์šฐ๋ฆฌ๊ฐ€์ด ๋ฌธ์ œ์—†์ด ์•„๋ฐ”ํƒ€๊ฐ€ ์‹คํ–‰๋˜๋Š” (avatar.position.z๊ฐ€ ์ฆ๊ฐ€ํ•˜๋Š”) ๊ฐ„๋‹จํ•œ ๋Ÿฌ๋„ˆ ๊ฒŒ์ž„์„ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋งค์šฐ ์„ฑ๊ฐ€์‹  ์ผ์ž…๋‹ˆ๋‹ค.
morphTargets๊ฐ€ ์˜ต์…˜์ด ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— ์–ด๋–ป๊ฒŒ ๊ด€๋ฆฌํ• ์ง€ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.

์—ฌ๋Ÿฌ๋ถ„์ด ์—ฌ๊ธฐ์—์„œ ๋„์šธ ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋ฌธ์ œ๋ฅผ ๋“œ๋Ÿฌ๋‚ด ๊ธฐ ์œ„ํ•ด ๊นจ๋—ํ•œ ์†Œ์Šค๋กœ ๋ช…ํ™•ํ•œ ์˜ˆ๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ์Šค๋งˆํŠธ ํฐ์—์„œ ํ™•์ธํ•˜๋Š” ๊ฒƒ์€ ๋งค์šฐ ์‰ฝ์Šต๋‹ˆ๋‹ค.

๋ชจ๋ฐ”์ผ์—๋งŒ ํ‘œ์‹œ (z = 10000) :
http://cornflex.org/webgl/skinning-bug.html

floatVertexTextures๊ฐ€ false๋กœ ์„ค์ •๋œ ๊ฒฝ์šฐ (z = 10000) :
http://cornflex.org/webgl/skinning-bug2.html

๊ฑฐ๋ฆฌ์— ๋”ฐ๋ผ ์•…ํ™”๋จ (z ์ฆ๊ฐ€) :
http://cornflex.org/webgl/skinning-bug3.html

์ค‘์‹ฌ์—์„œ ๋งค์šฐ ๋ฉ€๋ฆฌ ๋–จ์–ด์ ธ ์žˆ์Œ (z = 70000000)> ๋ฒ„๊ทธ๋„ ๋ฐ์Šคํฌํƒ‘์— ๋‚˜ํƒ€๋‚˜์ง€๋งŒ ๋ถ€๋™ ์ •๋ฐ€๋„ ๋ฌธ์ œ๋กœ ์ธํ•ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
http://cornflex.org/webgl/skinning-bug4.html

๋‚ด ๊ฒŒ์ž„ ํ™˜๊ฒฝ์—์„œ ๋น„๋””์˜ค ๋ฏธ๋ฆฌ๋ณด๊ธฐ :
์ด๊ฒƒ์€ ํ˜„์‹ค์ ์ธ ๊ทœ๋ชจ์˜ ์„ธ๊ณ„์ž…๋‹ˆ๋‹ค (1.0m = 1.0 threejs ๋‹จ์œ„).
๋ฒ„๊ทธ๋Š” ์”ฌ ๋ฃจํŠธ์—์„œ 50-60m ํ›„์— ๋‚˜ํƒ€๋‚˜๊ณ  ๊ฑฐ๋ฆฌ๊ฐ€ ๊ฐˆ์ˆ˜๋ก ์•…ํ™”๋ฉ๋‹ˆ๋‹ค.
http://cornflex.org/webgl/skin-bug.mp4

๋งค์šฐ ์ค‘์š”
ThreeJS ์ €์žฅ์†Œ์—์„œ ์‚ฌ์šฉ ๋œ ๋ฉ”์‹œ๊ฐ€ ๋„ˆ๋ฌด ํฝ๋‹ˆ๋‹ค. ํ‚ค๊ฐ€ 20m ๊ฐ™์•„์š”.
์ด๊ฒƒ์ด ๋ฒ„๊ทธ๋ฅผ๋ณด๊ธฐ ์œ„ํ•ด z ๊ฐ’์ด ๋” ์ปค์•ผํ•˜๋Š” ์ด์œ ์ž…๋‹ˆ๋‹ค.
์ด ๋ฉ”์‰ฌ๊ฐ€ ์‹ค์ œ ํฌ๊ธฐ๋กœ ์ถ•์†Œ๋˜๋ฉด 100m์—์„œ๋„ ๋ฒ„๊ทธ๊ฐ€ ๋‚˜ํƒ€๋‚˜๊ธฐ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

Three.js ๋ฒ„์ „
  • [x] ๊ฐœ๋ฐœ์ž
  • [x] r89
  • [x] ...
๋ธŒ๋ผ์šฐ์ €
  • [] ๋ชจ๋‘
  • [] ํฌ๋กฌ
  • [] Firefox
  • [ ] ์ธํ„ฐ๋„ท ์ต์Šคํ”Œ๋กœ๋Ÿฌ
  • [x] ์‚ฌํŒŒ๋ฆฌ
OS
  • [] ๋ชจ๋‘
  • [] Windows
  • [ ] ๋งฅ OS
  • [] Linux
  • [] Android
  • [x] iOS
ํ•˜๋“œ์›จ์–ด ์š”๊ตฌ ์‚ฌํ•ญ (๊ทธ๋ž˜ํ”ฝ ์นด๋“œ, VR ์žฅ์น˜ ๋“ฑ)

์•„์ดํฐ 6, 8

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

zeoverlord ์‚ฌ์šฉ์ž

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

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

์Œ, ๋‚ด Pixel์—์„œ ๋ฐ๋ชจ๊ฐ€ ์ข‹์•„ ๋ณด์ž…๋‹ˆ๋‹ค.

๋‚ด iPhone SE์—์„œ ํ™•์ธ ๋œ ๋ฌธ์ œ โ€”

img_6324

์•„๋งˆ๋„ iOS์˜ WebGL ์ •๋ฐ€๋„ ๋ฌธ์ œ

๊ทธ๋Ÿฌ๋‚˜ iOS ์žฅ์น˜๋Š” ์‹ค์ œ๋กœ ์Šคํ‚ค๋‹ ๊ตฌํ˜„์˜ ์ฝ”๋“œ ๊ฒฝ๋กœ ๊ธฐ๋ฐ˜์˜ ๋ถ€๋™ ํ…์Šค์ฒ˜๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ ์ ํ•ฉ์„ฑ ํ…Œ์ŠคํŠธ๋ฅผ ํ†ตํ•ด์ด๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

https://www.khronos.org/registry/webgl/conformance-suites/1.0.3/conformance/extensions/oes-texture-float.html

iPhone SE์—๋Š” ํ•ด๋‹น ํŽ˜์ด์ง€์— ๋‹ค์„ฏ ๊ฐ€์ง€ ์˜ค๋ฅ˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๐Ÿ˜•

๋‚ด ํ”„๋กœ์ ํŠธ์—์„œ ๋ณด์—ฌ ๋“œ๋ฆฌ๊ธฐ ์œ„ํ•ด ์ž‘์€ ์Šคํฌ๋ฆฐ ์บ์ŠคํŠธ๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.
http://cornflex.org/webgl/skin-bug.mp4

์•„๋ฐ”ํƒ€๊ฐ€ 0,0,0์—์„œ ๋„ˆ๋ฌด ๋ฉ€์–ด์ง€๋ฉด ๋ณด์‹œ๋‹ค์‹œํ”ผ ํ”ผ๋ถ€์— ๋ฒ„๊ทธ๊ฐ€ ์ƒ๊ธฐ๊ธฐ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.
๋‚˜๋Š” ๊ณจ๊ฒฉ๊ณผ ๋ผˆ์˜ ๊นŠ์€ ํ”„๋กœํŒŒ์ผ ๋ง์„ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ์ง€์˜ค๋ฉ”ํŠธ๋ฆฌ๊ฐ€ ์–ด๋–ค ์‹ ์œผ๋กœ๋“  "ํ’€๋ง"๋œ ๊ฒƒ์„ ์ œ์™ธํ•˜๊ณ ๋Š” ๋ชจ๋“  ๊ฒƒ์ด ๊ดœ์ฐฎ์•„ ๋ณด์ž…๋‹ˆ๋‹ค. ์• ๋‹ˆ๋ฉ”์ด์…˜ ๋ฃจํŠธ๊ฐ€ ์ข‹์ง€ ์•Š์ง€๋งŒ ๋‹ค์‹œ ๋งํ•˜์ง€๋งŒ Threejs์—์„œ๋Š” ๋ชจ๋‘ ๊ดœ์ฐฎ์•„ ๋ณด์ž…๋‹ˆ๋‹ค.

Prob๋Š” Skinning ์…ฐ์ด๋”์˜ Skeleton ๋ฐ bonesTexture์™€ ๋ช…ํ™•ํ•˜๊ฒŒ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
๋‚˜๋Š” ๋˜ํ•œ ์ •๋ฐ€๋„์— ๊ด€ํ•ด์„œ๋„ ์žˆ์ง€๋งŒ Mugen์ด ๋งํ–ˆ๋“ฏ์ด iOS ์žฅ์น˜๋Š” ์‰ฝ๊ฒŒ ์ง€์›ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

... ์™œ ์•„์ดํฐ์—์„œ๋งŒ : /

๋‚˜๋Š” ๊ฝค ๋ถ™์–ด ์žˆ์Šต๋‹ˆ๋‹ค ... ๋ฐฑ์—… ๊ณ„ํš์œผ๋กœ png ์‹œํ€€์Šค๋กœ ๋ฐฉํ–ฅ์„ ๋ฐ”๊พธ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค ... :(

์ด๊ฒƒ์€ ์•„์ดํฐ 6์ด ์ถฉ๋ถ„ํ•œ ๋ผˆ๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ผ ๊ฐ€๋Šฅ์„ฑ์ด ํฝ๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋˜‘๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ๋‹ค.

์—ฌ๊ธฐ์—์„œ ๋ผˆ ์ œํ•œ์„ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค : https://virtulo.us/2/vr/test

๋‚˜๋Š” ๊ทธ๋ ‡๊ฒŒ ์ƒ๊ฐํ•˜์ง€ ์•Š๋Š”๋‹ค.
skinnedmesh๊ฐ€ 0,0,0์— ์žˆ์œผ๋ฉด ์ „ํ˜€ ๋ฌธ์ œ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.
์•„๋ฐ”ํƒ€ ๋Œ€์‹  ๋ชจ๋“  ์• ์…‹์„ ์ด๋™ํ•˜๋Š” ๊ฒƒ๋„ ๊ณ ๋ ค ์ค‘์ž…๋‹ˆ๋‹ค ... (์ด๊ฒƒ์€ ์ œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• # 2์ž…๋‹ˆ๋‹ค) ๋ฌผ๋ก  ์Šค์ผˆ๋ ˆํ†ค์ด ๋ฐ์Šคํฌํƒ‘๋งŒํผ ์ž˜ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ์„ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค.

์นœ๊ตฌ๊ฐ€ iPhone 8์—์„œ ๋™์ผํ•œ ๋ฒ„๊ทธ๋ฅผ๋ณด๊ณ ํ–ˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ ์ ํ•ฉ์„ฑ ํ…Œ์ŠคํŠธ์—์„œ ์–ด๋–ค ๊ฒฐ๊ณผ๋ฅผ ์–ป์Šต๋‹ˆ๊นŒ?

https://www.khronos.org/registry/webgl/conformance-suites/1.0.1/conformance/misc/shader-precision-format.html

ThreeJS ์†Œ์Šค๋ฅผ 2 ์ผ ๋™์•ˆ ์‚ดํŽด๋ณธ ํ›„ ... bonesTexture๊ฐ€ ์—…๋ฐ์ดํŠธ๋˜๋ฉด ๋ฌธ์ œ๊ฐ€์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
์ด ํ…์Šค์ฒ˜๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์—…๋ฐ์ดํŠธ๋˜์ง€ ์•Š์€ ๊ฒƒ ๊ฐ™๊ณ  ์ •์ ์„ ์›๋ž˜ ์œ„์น˜๋กœ ๋ฐ€์–ด ๋„ฃ์Šต๋‹ˆ๋‹ค ... ๋ฌผ๋ก  ํ‹€๋ฆด โ€‹โ€‹์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

img_1411

ํ  ... ์—ฌ๊ธฐ์— ๋ช‡ ๊ฐ€์ง€ ์‹คํŒจ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

img_1412

์•„๋งˆ๋„ ๋ฌธ์ œ๋Š” ์ด๋Ÿฌํ•œ ์‹คํŒจ์™€ ๊ด€๋ จ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋‚ด Pixel์€ ๋ชจ๋“  ํ…Œ์ŠคํŠธ๋ฅผ ํ†ต๊ณผํ•ฉ๋‹ˆ๋‹ค.

๋กœ ์ด๋™ : ๋ฐ–์œผ๋กœ์˜ ์‹œ๋„ ๋ญ”๊ฐ€ํ•˜์ž WebGLCapabilities ์™€์˜ ๊ฐ’์œผ๋กœ ์„ค์ • floatVertexTextures ์— false (์ด ํ”Œ๋กœํŠธ ์งˆ๊ฐ์˜ ์‚ฌ์šฉ์„ ๋ฐฉ์ง€ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค). ๋นŒ๋“œ๋ฅผ ๋งŒ๋“ค๊ณ  ์•ฑ์—์„œ์ด three.js ๋ฒ„์ „์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋ฌด์Šจ ์ผ์ด ์ผ์–ด๋‚˜๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค ๐Ÿ˜Š.

https://github.com/mrdoob/three.js/blob/099e4364541502fdf22fc7b1c0f54239d2ba1708/src/renderers/webgl/WebGLCapabilities.js#L105

๋ Œ๋”๋Ÿฌ์—์„œ ์ด๋ฏธ floatVertexTextures = false๋ฅผ ์‹œ๋„ํ–ˆ์Šต๋‹ˆ๋‹ค.
ํ”ผ๋ถ€๊ฐ€ ๋ฏธ์ณ๊ฐ€๋Š” ๊ฒƒ์„ ๋ฉˆ์ท„์ง€๋งŒ ๋” ์ด์ƒ ์• ๋‹ˆ๋ฉ”์ด์…˜์ด ์—†์Šต๋‹ˆ๋‹ค : /
์ƒ˜ํ”Œ์„ ํ‘ธ์‹œํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

์—ฌ๊ธฐ ์žˆ์–ด์š”:
http://cornflex.org/webgl/skinning-bug2.html

renderer.capabilities.floatVertexTextures = false;

=> ๋” ์ด์ƒ ์‹คํ–‰์ค‘์ธ ์• ๋‹ˆ๋ฉ”์ด์…˜ ์—†์Œ

img_1413

์˜ˆ, ๋‚ด Pixel์—์„œ๋„ ๋™์ผํ•ฉ๋‹ˆ๋‹ค (๋ฐ์Šคํฌํ†ฑ ์ž‘๋™). ํš์ผ์  ์ธ ํ•œ๊ณ„์— ๋„๋‹ฌํ•˜๊ณ ์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋ฒ„๊ทธ๊ฐ€ ์ ์ง„์ ์œผ๋กœ ๋‚˜ํƒ€๋‚˜๋Š” ๋งˆ์ง€๋ง‰ ์ƒ˜ํ”Œ์„ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.
http://cornflex.org/webgl/skinning-bug3.html

0,0,0์—์„œ ์‹œ์ž‘ํ•ด์„œ ์•ž์œผ๋กœ ๋‚˜์•„๊ฐ‘๋‹ˆ๋‹ค ... ๋ช‡ ์ดˆ๋งŒ ๊ธฐ๋‹ค๋ฆฌ์„ธ์š” ... ํ”ผ๋ถ€๊ฐ€ ๋ฏธ์น˜๊ธฐ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

0,0,0์—์„œ ๋ชจ๋‘ ๊ดœ์ฐฎ๋‹ค๋Š” ๊ฒƒ์€ ๋งค์šฐ ์ด์ƒํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๊นŒ?

z : 1255> ์—ฌ์ „ํžˆ ์ •์ƒ
z : 18870> ๋ฏธ์นœ ํ”ผ๋ถ€

img_1415

img_1414

๋‚ด๊ฐ€ ๋งํ–ˆ๋“ฏ์ด CPU ์ธก์˜ ๋ชจ๋“  ๋ผˆ๋Œ€์™€ ๋ผˆ ์œ„์น˜๋ฅผ ๋”ฅ ํ”„๋กœํŒŒ์ผ ๋งํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ๊ฐ’์ด ๊ดœ์ฐฎ์€ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ๊ฐ€์ง„ ์œ ์ผํ•œ ๋‹จ์„œ๋Š” ๋ฉ”์‹œ๊ฐ€ 0,0,0์—์„œ ๋ฉ€์–ด ์งˆ ๋•Œ iOS์—์„œ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” bonesTextures ๋ฐ bonesMatrix์ž…๋‹ˆ๋‹ค.

๋ผˆ์˜ ์œ„์น˜๋ฅผ โ€‹โ€‹ํ™•์ธํ•œ ์ด์œ ๋Š” ๋ฃจํŠธ ๋…ธ๋“œ์˜ ์•ˆ์ •๋œ ๋ผˆ์˜ ์ผ๋ฐ˜์ ์ธ ๋™์ž‘์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

์Šคํ‚จ ์…ฐ์ด๋”์—์„œ GPU ์ธก์˜ ๋ถ€๋™ ์ •๋ฐ€๋„์— ๋Œ€ํ•ด ํ™•์ธํ–ˆ์ง€๋งŒ ๋‹ค์‹œ ํ•œ ๋ฒˆ ... ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š” ๊ฒƒ์€์—†๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์•„์ฃผ ์ด์ƒํ•˜๊ฒŒ๋„ ์•„๋ฌด๋„ SkinnedMesh๋ฅผ ์”ฌ ๋‚ด๋ถ€๋กœ ์˜ฎ๊ธฐ์ง€ ์•Š์•˜๊ณ  ์ด๊ฒƒ์„๋ณด๊ณ ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

ํ•œ ๊ฐ€์ง€ ๋” ์งˆ๋ฌธ : Chrome์— ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

๊ฐ™์€ ๋ฌธ์ œ์˜ˆ์š”.

img_1416

์ •๋ฐ€ ๋ฌธ์ œ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์žฅ๋ฉด์„ ์ถ•์†Œ ํ•ด ๋ณด์…จ์Šต๋‹ˆ๊นŒ? (11195๋Š” 11km์ž…๋‹ˆ๋‹ค).

๋˜ ๋‹ค๋ฅธ ์˜ต์…˜์€ ์บ๋ฆญํ„ฐ ๋Œ€์‹  ์žฅ๋ฉด์„ ์ด๋™ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํฐ ์žฅ๋ฉด์—์„œ ์ผ๋ฐ˜์ ์ธ ์†”๋ฃจ์…˜์ด๋˜๋Š” ๊ฒฝํ–ฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ ์Šคํ‚ค๋‹ ์ฝ”๋“œ๊ฐ€ ์›”๋“œ ๊ณต๊ฐ„์— ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ด๊ฒƒ์„ ์กฐ์‚ฌ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹น์‹ ์˜ ๋ผˆ ์ˆ˜๊ฐ€ 67 ๊ฐœ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋‚ด (wifes) iphone 6์˜ Max Hardware Bones ์ œํ•œ์€ 27์ž…๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ๋ณธ ๋ณ€ํ˜•์€ ๋‚ด ๊ฒŒ์ž„์—์„œ ๊ทธ๋…€์˜ ํœด๋Œ€ํฐ์—์„œ ๋ณธ ๊ฒƒ๊ณผ ๋™์ผํ•ฉ๋‹ˆ๋‹ค (๊ทธ๋ฆฌ๊ณ  ์• ๋‹ˆ๋ฉ”์ดํ„ฐ์—๊ฒŒ ๋ฉ”์‹œ ์•„ ๋ฏธ์ฒ˜๋ฅผ ์ˆ˜์ •ํ•˜๊ธฐ ์ „์— ๊ฐ€์กŒ๋˜ ๋™์ผํ•œ ๋ฌธ์ œ). ์ด๊ฒƒ์ด ์ ์–ด๋„ ๊ท€ํ•˜์˜ ๋ฌธ์ œ์˜ ์ผ๋ถ€๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด ๋†€๋ž„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์‹œ๊ฐ„์ด ์ง€๋‚จ์— ๋”ฐ๋ผ ์•…ํ™”๋˜๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ๋ชฐ๋ผ. ๋‹ค๋ฅธ ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ๋น„์Šทํ•œ ๊ฒƒ์„ ์–ธ๊ธ‰ํ–ˆ์ง€๋งŒ ๊ด€๋ จ ์—ฌ๋ถ€๋Š” ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. https://discourse.threejs.org/t/updated-with-fiddle-as-animations-go-faster-there-is-increasing-error-in-accuracy/ 1707 ๋…„ 6 ์›”

์•„์ดํฐ์—์„œ ๋ฐœ๊ฒฌ ํ•œ ๋˜ ๋‹ค๋ฅธ ์„ฑ๊ฐ€์‹  ๊ฒƒ (์ ์–ด๋„ ์•„์ดํฐ 6) : ๋‚˜๋Š” ๋ฐ˜๋“œ์‹œ highp ์‰์ด๋” ์ •๋ฐ€๋„๋ฅผ ์‚ฌ์šฉํ•ด์•ผํ•˜๊ณ , mediump์™€ lowp๋Š” ๋˜‘๊ฐ™์€ ๋ฌด์„œ์šด ๋ชจ์–‘์œผ๋กœ ๋ฉ”์‹œ๋ฅผ ์™œ๊ณกํ•˜์ง€ ์•Š์ง€๋งŒ (์ „ํ™”์ƒ์˜ ๋ผˆ ๋ฌธ์ œ์™€ ๊ฐ™์ด), ํ…์Šค์ฒ˜๊ฐ€ ๋ณด์ž…๋‹ˆ๋‹ค. ์• ๋‹ˆ๋ฉ”์ด์…˜ํ•˜๋Š” ๋™์•ˆ ์ด์ƒํ•˜๊ณ  ์™œ๊ณก๋˜๊ฑฐ๋‚˜ ํ”ฝ์…€ ํ™”๋ฉ๋‹ˆ๋‹ค.

ํ…Œ์ŠคํŠธ์ค‘์ธ ์žฅ์น˜์˜ ํ•˜๋“œ์›จ์–ด ๋ผˆ ์ œํ•œ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

@mrdoob ์ด๋ฏธ ์ถ•์†Œํ•˜๋ ค๊ณ  ์‹œ๋„ํ–ˆ์ง€๋งŒ ์‹ค์ œ๋กœ ์Šคํ‚ค๋‹์ด ํ›จ์”ฌ ๋” ๋นจ๋ฆฌ ๋ฏธ์ณ์ง‘๋‹ˆ๋‹ค.
0.1๋กœ ์ถ•์†Œํ•˜๋ฉด ๋ฒ„๊ทธ๊ฐ€ 10 ๋ฐฐ ๋น ๋ฅด๊ฒŒ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.

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

์‹ค์ œ๋กœ ์Šคํ‚ค๋‹์€ ์„ธ๊ณ„ ๊ณต๊ฐ„ ๋˜๋Š” ๋กœ์ปฌ ๊ณต๊ฐ„์—์„œ ์ˆ˜ํ–‰๋˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด์ง€๋งŒ ์ค‘์‹ฌ์—์„œ ๋ฉ€๋ฆฌ ์ด๋™ํ•˜๋ฉด ๋Š˜์–ด๋‚ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด 0,0,0์—์„œ ๊ฝค ์ž˜ ์‹คํ–‰๋˜๋Š” ์ด์œ ์ž…๋‹ˆ๋‹ค.

์•„๋ฐ”ํƒ€๊ฐ€ ์•„๋‹Œ ์˜จ ์„ธ์ƒ์„ ์›€์ง์ด๋Š” ๊ฒƒ์€ ๋‚ด ์ž‘์—… # 2.
์ด๋ฏธ ๋ฌผ๋ฆฌํ•™๊ณผ ๋ชจ๋“  ๊ฒƒ์„ ๊ฐ–์ถ˜ ์„ธ๊ณ„ ๊ณต๊ฐ„์—์„œ ๋Ÿฌ๋„ˆ ๊ฒŒ์ž„์˜ ๋ชจ๋“  ๋ฃจํ‹ด์„ ๊ฐœ๋ฐœํ•  ๋•Œ ๊ทธ๊ฒƒ์€ ๋‚˜์œ ์„ ํƒ์ด๋ผ๋Š” ๊ฒƒ์„ ์ธ์ •ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  z = 11000์€ ๋Ÿฌ๋„ˆ ๊ฒŒ์ž„์—์„œ ๊ทธ๋ฆฌ ๋ฉ€์ง€ ์•Š์Šต๋‹ˆ๋‹ค. : / ... ๊ทธ๋ฆฌ๊ณ  ๊ทธ๊ฒƒ์€ ๋ฐฐ๊ฐ€ ์•„๋‹ˆ๋ผ ๋‹จ์ง€ ๋‹ฌ๋ฆฌ๋Š” ์‚ฌ๋žŒ์ž…๋‹ˆ๋‹ค.

ThreeJS๋กœ ๋งŽ์€ ๊ฒŒ์ž„์„ ๋งŒ๋“ค์—ˆ์ง€ ๋งŒ skinnedmesh๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ์ฒ˜์Œ์ž…๋‹ˆ๋‹ค. ์ด iOS ๋ฒ„๊ทธ๋Š” ์ •๋ง ์งœ์ฆ๋‚ฉ๋‹ˆ๋‹ค.

Workaroung # 1 : ์Šคํ”„๋ผ์ดํŠธ ์‹œํŠธ ์• ๋‹ˆ๋ฉ”์ด์…˜์œผ๋กœ 6 ๊ฐœ์˜ png ์‹œํ€€์Šค๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ์„ธ๊ณ„ ๊ณต๊ฐ„ ๋…ผ๋ฆฌ๋ฅผ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋งˆ๊ฐ์ผ์ด ๋ฉ€์ง€ ์•Š์Šต๋‹ˆ๋‹ค :(

@titansoftime ์•„๋‚ด์˜ iPhone 8์—๋„ ๋ฌธ์ œ๊ฐ€ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ iPhone 6์—๋งŒ ๊ด€๋ จ์ด ์—†์Šต๋‹ˆ๋‹ค.
๋˜ํ•œ ์ตœ๋Œ€ ๋ผˆ๋Œ€ ๋ฌธ์ œ๊ฐ€ ์žˆ์œผ๋ฉด ์ฒ˜์Œ๋ถ€ํ„ฐ ๋ฒ„๊ทธ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—์„œ 0,0,0์—์„œ ๋ฒ„๊ทธ๊ฐ€ ์•„๋‹˜์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ๋ผˆ ํ•œ๊ณ„๋Š” ๋ฌธ์ œ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ์Šคํ‚ค๋‹ ์…ฐ์ด๋”์—์„œ ๋ผˆ์™€ bonesMatrix์˜ ์›”๋“œ ์ŠคํŽ˜์ด์Šค ๊ณ„์‚ฐ์€ IMO์ž…๋‹ˆ๋‹ค.

iPhone 8์˜ ์ตœ๋Œ€ ํ•˜๋“œ์›จ์–ด ๋ผˆ๋Œ€๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

๋‚˜๋„ ๋ชฐ๋ผ. ๊ทธ๋ฆฌ๊ณ  ๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ์žฅ์น˜์— ์˜์กดํ•˜๋Š”์ง€ ํ™•์‹ ํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ๋‹ค์‹œ ... IMO, ๊ทธ๊ฒƒ์€ maxbones ๊ฐ’๊ณผ ์ „ํ˜€ ๊ด€๋ จ์ด ์—†์Šต๋‹ˆ๋‹ค.

์ƒ˜ํ”Œ์€ iPhone 6,8, X์—์„œ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค .... 5๋„ ... SkinnedMesh๊ฐ€ 0,0,0์—์žˆ์„ ๋•Œ๋งŒ
https://threejs.org/examples/webgl_loader_fbx.html

maxbones๊ฐ€ ๋ฌธ์ œ ์˜€๋‹ค๋ฉด 0,0,0์—์„œ๋„ ์Šคํ‚ค๋‹์ด ์ข‹์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

zeoverlord ์‚ฌ์šฉ์ž

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

์Œ, ๋งค์šฐ ํฅ๋ฏธ๋กœ์šด @ Mugen87! ๋ˆ„์ถœ์„ ๋ฐœ๊ฒฌ ํ•œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

z : 1255> ์—ฌ์ „ํžˆ ์ •์ƒ
z : 18870> ๋ฏธ์นœ ํ”ผ๋ถ€

์˜ค๋ฅ˜๋Š” ๊ท€ํ•˜์˜ ํŽธ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์ผ๋ฐ˜์ ์ธ ์‹ค์ˆ˜ : ์Šคํ‚จ ๋ชจ๋””ํŒŒ์ด์–ด๊ฐ€ ์ œ๋Œ€๋กœ ์ ์šฉ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.
์˜ค๋ฅ˜ 1 : ๋„ˆ๋ฌด ๋งŽ์€ ๊ณจ๊ฒฉ์œผ๋กœ ์ œ์–ด๋˜๋Š” ์ •์ 
์˜ค๋ฅ˜ 2 : ๊ฐ€์ค‘์น˜๊ฐ€์—†๋Š” (๋˜๋Š” ๊ฐ€์ค‘์น˜๊ฐ€ ๋งค์šฐ ์ž‘์€) ์ •์ .

SkinnedMesh๊ฐ€ ์›์  (0,0,0)์— ๊ฐ€๊นŒ์›Œ์ง€๋ฉด ์ด๋Ÿฌํ•œ ์˜ค๋ฅ˜๋ฅผ ์•Œ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
ํ•˜์ง€๋งŒ ๋ฉ€๋ฆฌ ์ด๋™ํ•˜๋ฉด ๋ชจ๋ฐ”์ผ ์žฅ์น˜์˜ ์ •ํ™•์„ฑ์„ ํƒ“ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.
๋”ฐ๋ผ์„œ ๊ฐ€์žฅ ๋จผ์ €ํ•ด์•ผ ํ•  ์ผ์€ ์Šคํ‚จ ๋ชจ๋””ํŒŒ์ด์–ด๋ฅผ ๋‹ค์‹œ ๋””์ž์ธํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค (์ด๋ฒˆ์—๋Š” ์ ์ ˆํ•˜๊ฒŒ).

@RemusMar ํŽ˜์ด์ง€์˜ ์†Œ์Šค๋ฅผ ๋ณด์…จ์Šต๋‹ˆ๊นŒ?
๋‚ด๊ฐ€ ๊ณต๊ฐœ ํ•œ ์˜ˆ์ œ๋Š” ThreeJS ์†Œ์Šค์—์„œ ๋ฐ”๋กœ ๋‚˜์™”์Šต๋‹ˆ๋‹ค.

๋‚ด ์„ค๋ช…์—์„œ ์ž˜ ์–ธ๊ธ‰๋˜์—ˆ์Šต๋‹ˆ๋‹ค.)

๋‚˜๋Š” ์ด๊ฒƒ์„ ๊ฒŒ์‹œํ•˜๊ธฐ ์ „์— ๋งŽ์€ ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค ... ๋‚ด ์• ๋‹ˆ๋ฉ”์ด์…˜ ๋‚ด๋ณด๋‚ด๊ธฐ์—์„œ ๋‹จ์„œ๋ฅผ ์ฐพ๊ณ  ์žˆ์—ˆ์ง€๋งŒ ๋ชจ๋“  ์ข…๋ฅ˜์˜ ํ˜•์‹ (GLTF, FBX, Collada, JSON, ...)์—์„œ ๋ฒ„๊ทธ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ์„ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋ฌธ์ œ๋ฅผ ๋“œ๋Ÿฌ๋‚ด ๊ธฐ ์œ„ํ•ด ๊นจ๋—ํ•œ ์†Œ์Šค๋กœ ๋ช…ํ™•ํ•œ ์˜ˆ๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ์Šค๋งˆํŠธ ํฐ์—์„œ ํ™•์ธํ•˜๋Š” ๊ฒƒ์€ ๋งค์šฐ ์‰ฝ์Šต๋‹ˆ๋‹ค.

http://cornflex.org/webgl/skinning-bug.html

๋‚ด๊ฐ€ ๊ณต๊ฐœ ํ•œ ์˜ˆ์ œ๋Š” ThreeJS ์†Œ์Šค์—์„œ ๋ฐ”๋กœ ๋‚˜์™”์Šต๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ๋ญ?

ThreeJS์˜ ๋ชจ๋“  skinnedmesh ์˜ˆ์ œ์—์„œ ์ด๋Ÿฐ ์ผ์ด ๋ฐœ์ƒํ•  ๋•Œ ์˜ค๋ฅ˜๊ฐ€ ์–ด๋–ป๊ฒŒ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? :)

๋‹น์‹ ์€ ๋งํ–ˆ๋‹ค :

์˜ค๋ฅ˜๋Š” ๊ท€ํ•˜์˜ ํŽธ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์ผ๋ฐ˜์ ์ธ ์‹ค์ˆ˜ : ์Šคํ‚จ ๋ชจ๋””ํŒŒ์ด์–ด๊ฐ€ ์ œ๋Œ€๋กœ ์ ์šฉ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.
์˜ค๋ฅ˜ 1 : ๋„ˆ๋ฌด ๋งŽ์€ ๊ณจ๊ฒฉ์œผ๋กœ ์ œ์–ด๋˜๋Š” ์ •์ 
์˜ค๋ฅ˜ 2 : ๊ฐ€์ค‘์น˜๊ฐ€์—†๋Š” (๋˜๋Š” ๊ฐ€์ค‘์น˜๊ฐ€ ๋งค์šฐ ์ž‘์€) ์ •์ .

FBX๋Š” ThreeJS์—์„œ ์™”์œผ๋ฉฐ GLTF ๋˜๋Š” ๋‹ค๋ฅธ ํ˜•์‹์œผ๋กœ ์‹œ๋„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฌธ์ œ๋Š” ๋™์ผํ•ฉ๋‹ˆ๋‹ค.

var loader = new THREE.FBXLoader ();
loader.load ( 'https://threejs.org/examples/models/fbx/xsi_man_skinning.fbx', OnFBXLoaded);

@ Mugen87 ์ด ๋‹จ์„œ๋ฅผ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค. GPU ์Šคํ‚จ ๋ฉ”์‰ฌ๋ฅผ ๋งŒ๋“  ์‚ฌ๋žŒ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

ThreeJS์˜ ๋ชจ๋“  skinnedmesh ์˜ˆ์ œ์—์„œ ์ด๋Ÿฐ ์ผ์ด ๋ฐœ์ƒํ•  ๋•Œ ์˜ค๋ฅ˜๊ฐ€ ์–ด๋–ป๊ฒŒ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

๋‚˜๋Š” "์˜ค๋ฅ˜๋Š” ๋‹น์‹  ํŽธ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค."๋ผ๊ณ  ๋งํ–ˆ์Šต๋‹ˆ๋‹ค.
๊ฒฐ๋ก :
์Šคํ‚จ ์ˆ˜์ •์ž๊ฐ€ ์ œ๋Œ€๋กœ ์ ์šฉ๋œ ๊ฐ„๋‹จํ•œ SkinnedMesh ์‚ฌ์šฉ :

  • ์ •์  ๋‹น ์ตœ๋Œ€ 4 ๊ฐœ์˜ ๋ผˆ
  • ๋ชจ๋“  ๊ฐ€์ค‘์น˜ = 1.0000

๋ฒ„๊ทธ๋ฅผ ์žฌํ˜„ ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค.

๋ฏธ์ณค์–ด? :)
์ด ๋ฒ„๊ทธ๋Š” ๋‚ด ํŽธ์ด ๋  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋ชจ๋ธ (fbx, gltf, dae ๋“ฑ)๊ณผ ์ฝ”๋“œ ์†Œ์Šค๋Š” ThreeJS์—์„œ ๊ฐ€์ ธ ์™”์Šต๋‹ˆ๋‹ค.

@ Mugen87 ๊ฒŒ์‹œ๋ฌผ์„ ์ฝ์œผ์‹ญ์‹œ์˜ค.

์Šคํ‚จ ์ˆ˜์ •์ž๊ฐ€ ์ œ๋Œ€๋กœ ์ ์šฉ๋œ ๊ฐ„๋‹จํ•œ SkinnedMesh ์‚ฌ์šฉ :

  • ์ •์  ๋‹น ์ตœ๋Œ€ 4 ๊ฐœ์˜ ๋ผˆ
  • ๋ชจ๋“  ๊ฐ€์ค‘์น˜ = 1.0000

๋ฒ„๊ทธ๋ฅผ ์žฌํ˜„ ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค.

์ง€๊ธˆ ๊ฐ€์•ผ ํ•ด์š”.
๊ฑด๋ฐฐ

ํ . ์–ด๋–ค ์‚ฌ๋žŒ์ธ์ง€ ์•Œ์•„? ์ด๊ฒƒ์€ ๋ฐ์Šคํฌํƒ‘์—์„œ๋„ ์ผ์–ด๋‚˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค :(

ThreeJS ์˜ˆ์ œ ๋ฉ”์‹œ๋Š” ๊ฑฐ๋Œ€ (๋†’์ด 100m)์ด๋ฏ€๋กœ ๋งค์šฐ ๋ฉ€๋ฆฌ ๋ฐฐ์น˜ํ–ˆ์Šต๋‹ˆ๋‹ค. z = 10000000
๊ทธ๋ฆฌ๊ณ  ๊ฐ™์€ ๋ฌธ์ œ๋ฅผ๋ณด์„ธ์š”.
http://cornflex.org/webgl/skinning-bug4.html

@ Mugen87์— ์˜ํ•ด ๋…ธ์ถœ ๋œ ๊ฒƒ์ฒ˜๋Ÿผ ์›”๋“œ ์ŠคํŽ˜์ด์Šค ๋ณธ ์œ„์น˜ ๋ฐ ๋ณธ ๋งคํŠธ๋ฆญ์Šค ๊ณ„์‚ฐ๊ณผ ๊ด€๋ จ๋œ ๊ฒƒ์ด

https://www.opengl.org/discussion_boards/archive/index.php/t-159613.html
https://www.opengl.org/discussion_boards/archive/index.php/t-159364.html

์ด์ „์— @mrdoob์— ์„ค๋ช…ํ–ˆ๋“ฏ์ด ์ด๋ฏธ ๋ฉ”์‹œ๋ฅผ ์ถ•์†Œํ•˜๋ ค๊ณ  ์‹œ๋„ํ–ˆ์ง€๋งŒ ๋ฌธ์ œ๋Š” ๋” ๋‚˜๋น ์กŒ์Šต๋‹ˆ๋‹ค ... ์‹ฌ์ง€์–ด ๋ฐ์Šคํฌํ†ฑ์—์„œ๋„ 0,0,0์—์„œ ๊ทธ๋ฆฌ ๋ฉ€์ง€ ์•Š์€ ๋ฒ„๊ทธ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

๋‚ด ๊ฒŒ์ž„ (ํ˜„์‹ค์ ์ธ ์Šค์ผ€์ผ 1 : 1 ์‚ฌ์šฉ)์—์„œ ๋ฒ„๊ทธ๋Š” ์ด๋ฏธ z : 100์— ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.

์ž˜๋ชป ์„ค๊ณ„๋œ ์Šคํ‚จ ๋ฉ”์‹œ๋ฅผ ๊ณ„์† ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
์–ด์จŒ๋“ ,์ด ์ฃผ์ œ๋ฅผ ๋๋‚ด๊ธฐ ์œ„ํ•ด 1์—์„œ 1,000,000 (๋ฐฑ๋งŒ !!!) ์‚ฌ๋ก€ ์—ฐ๊ตฌ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
http://necromanthus.com/Test/html5/Lara_1000000.html
์Šคํ…Œ์ด์ง€๋ฅผ ํด๋ฆญํ•˜์—ฌ Y = 0๊ณผ Y = 1000000 ์‚ฌ์ด๋ฅผ ์ „ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
์Šค์œ„์น˜๋ณ„๋กœ ์‚ฌ์†Œํ•œ ์ „์—ญ ์กฐ๋ช… ๋ณ€๊ฒฝ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
๋”ฐ๋ผ์„œ ์Šคํ‚ค๋‹ ๋œ ๋ฉ”์‹œ๊ฐ€ ์ ์ ˆํ•˜๊ฒŒ ๋””์ž์ธ ๋˜์—ˆ๋‹ค๋ฉด ๊ทธ ๊ฒฐ๊ณผ๋Š” ์™„๋ฒฝ์— ๊ฐ€๊น์Šต๋‹ˆ๋‹ค.
๊ฑด๋ฐฐ

์ด๋ฒˆ ๋‹ฌ ์ถœ์‹œ ์ดํ›„์— ์‚ดํŽด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

@mrdoob ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

@RemusMar ๋‹น์‹ ์€ ์—ฌ๊ธฐ์—์„œ ๋งํ•œ ๊ฒƒ์„ ๊ณ„์† ๋ฌด์‹œํ•ฉ๋‹ˆ๋‹ค. ์ „์ฒด ์Šค๋ ˆ๋“œ๋ฅผ ๋‹ค์‹œ ์ฝ์œผ์‹ญ์‹œ์˜ค :)

๋‚˜๋Š” ๋‹น์‹ ์—๊ฒŒ ์‹ค์ œ์ ์ธ ์˜ˆ๋ฅผ ๋“ค์—ˆ์ง€๋งŒ ๋‹น์‹ ์€ ์—ฌ์ „ํžˆ โ€‹โ€‹์ดํ•ดํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค.
http://necromanthus.com/Test/html5/Lara_1000000.html

๊ทธ๋ฆฌ๊ณ  ๋‹น์‹ ์€ ๋‚˜์œ ๊ด€ํ–‰ ์— ๋Œ€ํ•ด ๊ณ„์† ์ด์•ผ๊ธฐ
๋‹ค์Œ ์‚ฌํ•ญ์— ์œ ์˜ํ•˜์‹ญ์‹œ์˜ค.
๋‹จ ์ •๋ฐ€๋„ ๋ถ€๋™ ์†Œ์ˆ˜์  ์ž๋ฆฟ์ˆ˜๋Š” 7์ž…๋‹ˆ๋‹ค.
1234,567 ๋ฐ 123456.7์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.
๋Œ€๋ถ€๋ถ„์˜ ๊ฐ€์ค‘์น˜ ๋งต์—๋Š” ์†Œ์ˆ˜์  4 ์ž๋ฆฌ๊ฐ€ ์žˆ์ง€๋งŒ ํ•˜๋‚˜๋ผ๋„ ๊ดœ์ฐฎ์€ ๊ฒฐ๊ณผ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
์ด๋Ÿฌํ•œ ์ด์œ ๋กœ ๋ชจ๋“  3D ์—”์ง„์€ ์„ธ๊ณ„ ํฌ๊ธฐ์— ๋Œ€ํ•ด ์ตœ๋Œ€ ๊ฐ’ 10,000์„ ๊ถŒ์žฅํ–ˆ์Šต๋‹ˆ๋‹ค.
0000.001์—์„œ 9999.999๊นŒ์ง€
์šฐ๋ฆฌ ๋ชจ๋‘๋Š” "๋ฌดํ•œ"๋˜๋Š” ๊ฑฐ๋Œ€ํ•œ 3D ์„ธ๊ณ„๋ฅผ ์›ํ•˜์ง€๋งŒ ๊ทธ๊ฒƒ์€ ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
๋‹น์‹ ์ดํ•˜๋Š” ์ผ์€ ๋งŽ์€ ๊ด€์ ์—์„œ ์™„์ „ํžˆ ์ž˜๋ชป๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
๊ฒŒ์ž„ ๋””์ž์ธ, ๊ณต์—ฐ, ์• ๋‹ˆ๋ฉ”์ด์…˜ ๋ฐ ์ถฉ๋Œ.
์ด์ œ ์ฃผ์š” ์‚ฌ์ง„์„ ์–ป์œผ ์…จ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

๋ฟก ๋นต๋€จ
๋‚˜๋Š” ๋‹น์‹ ์ด ๋งํ•œ ๊ฒƒ์„ ์•„์ฃผ ์ž˜ ์ดํ•ดํ–ˆ์ง€๋งŒ ๋ถˆํ–‰ํžˆ๋„ ๋‹น์‹ ์˜ ๋ชจ๋ธ์—๋Š” ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
http://cornflex.org/webgl/skin-bug2.mp4

์ถœ์ฒ˜:
http://cornflex.org/webgl/skinning-bug5.html

๊ทธ๋ฆฌ๊ณ  z = 60000๋ณด๋‹ค ๋†’์€ ์œ„์น˜๋ฅผ ์ฃผ๋ฉด ์ ์  ๋” ๋‚˜ ๋น ์ง€๊ณ  ... 100000๊นŒ์ง€ ์™„์ „ํžˆ ๋ณด์ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์šฐ๋ฆฌ ๋ชจ๋‘๋Š” "๋ฌดํ•œ"๋˜๋Š” ๊ฑฐ๋Œ€ํ•œ 3D ์„ธ๊ณ„๋ฅผ ์›ํ•˜์ง€๋งŒ ๊ทธ๊ฒƒ์€ ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

LOL, ๋‚˜๋Š” ๋ฌดํ•œํ•œ ๊ฑฐ๋Œ€ํ•œ ์„ธ๊ณ„๋ฅผ ์›ํ•˜์ง€ ์•Š๋Š”๋‹ค ... ๋‚˜๋Š” ThreeJS๋กœ ์ „์— ์—ฌ๋Ÿฌ ๋ฒˆํ–ˆ๋˜ ๊ฒƒ์ฒ˜๋Ÿผ ๋Ÿฌ๋„ˆ ๊ฒŒ์ž„์„ ๋งŒ๋“ค๊ณ  ์‹ถ์ง€๋งŒ ์ด๋ฒˆ์—๋Š” ์•„๋ฐ”ํƒ€๋กœ skinnedmesh๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

๋‚ด ์žฅ๋ฉด : http://cornflex.org/webgl/skin-bug.mp4

์ˆ˜ ๋ฏธํ„ฐ๋ฅผ ๋„˜์–ด๊ฐ€๋Š” ์•„๋ฐ”ํƒ€๋ฅผ ์• ๋‹ˆ๋ฉ”์ด์…˜ ํ•  ์ˆ˜ ์—†๋‹ค๋ฉด, ์š”์ ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ ?? (ํ˜„์‹ค์ ์ธ ๊ทœ๋ชจ 1m = 1 threejs ๋‹จ์œ„, ๋ฒ„๊ทธ๋Š” ์ด๋ฏธ 100์—์„œ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค).

BTW, ๋‹น์‹ ์˜ ๋ชจ๋ธ์€ ํ‚ค๊ฐ€ 150m์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์‹ค์ œ์ ์ธ ์Šค์ผ€์ผ์ด ์•„๋‹™๋‹ˆ๋‹ค.
ํŽธ์ง‘ํ•˜๋‹ค:
์—ฌ๊ธฐ์— ๋ชจ๋ธ์— ๋ฐฐ์œจ (0.01, 0.01, 0.01)์ด์žˆ๋Š” ๋™์ผํ•œ ์žฅ๋ฉด์„ ์‚ฌ์šฉํ•˜์—ฌ ์‹ค์ œ ํฌ๊ธฐ (์•ฝ 1.5m)๋ฅผ ์–ป์Šต๋‹ˆ๋‹ค. ๋ณด์‹œ๋‹ค์‹œํ”ผ ๋ชจ๋ฐ”์ผ์—์„œ ์ด๋ฏธ z = 300์—์„œ ๋ฒ„๊ทธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.
http://cornflex.org/webgl/skin-bug3.mp4

๋‹น์‹ ์ดํ•˜๋Š” ์ผ์€ ๋งŽ์€ ๊ด€์ ์—์„œ ์™„์ „ํžˆ ์ž˜๋ชป๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
๊ฒŒ์ž„ ๋””์ž์ธ, ๊ณต์—ฐ, ์• ๋‹ˆ๋ฉ”์ด์…˜ ๋ฐ ์ถฉ๋Œ.

LOL LOL ... ๊ฒŒ์ž„ ์ œ์ž‘์— ๋Œ€ํ•œ ์›น ์‚ฌ์ดํŠธ์™€ ๋ธ”๋กœ๊ทธ (http://quentinlengele.com, http://cornflex.org, http://www.ddrsa.com, http://br9732.com)๋ฅผ ๋ฐฉ๋ฌธํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. )

ํŽธ์ง‘ : iOS, ๋นˆ ํ™”๋ฉด (http://necromanthus.com/Test/html5/Lara_1000000.html)์—์„œ ์žฅ๋ฉด์ด ๋ณด์ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
img_1418

์Šคํ‚ค๋‹์€ ์„ธ๊ณ„ ๊ณต๊ฐ„ ๋˜๋Š” ๋กœ์ปฌ ๊ณต๊ฐ„์—์„œ ์ˆ˜ํ–‰๋˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด์ง€๋งŒ ์ค‘์‹ฌ์—์„œ ๋ฉ€๋ฆฌ ์ด๋™ํ•˜๋ฉด ๋Š˜์–ด๋‚ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด 0,0,0์—์„œ ๊ฝค ์ž˜ ์‹คํ–‰๋˜๋Š” ์ด์œ ์ž…๋‹ˆ๋‹ค.

๋ณด์ž :

vec3 transformed = vec3( position );
...
#ifdef USE_SKINNING
    vec4 skinVertex = bindMatrix * vec4( transformed, 1.0 );
    vec4 skinned = vec4( 0.0 );
    skinned += boneMatX * skinVertex * skinWeight.x;
    skinned += boneMatY * skinVertex * skinWeight.y;
    skinned += boneMatZ * skinVertex * skinWeight.z;
    skinned += boneMatW * skinVertex * skinWeight.w;
    transformed = ( bindMatrixInverse * skinned ).xyz;
#endif

๋‚˜์—๊ฒŒ ์„ธ๊ณ„ ๊ณต๊ฐ„์ฒ˜๋Ÿผ ๋ณด์ด์ง€ ์•Š์Šต๋‹ˆ๊นŒ? ์ผ๋ฐ˜ ๋ฉ”์‹œ์—์„œ transformed ๋Š” position ์†์„ฑ, ์ฆ‰ ๋กœ์ปฌ ์ขŒํ‘œ๋กœ ์„ค์ •๋ฉ๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ๋ฌด์Šจ ์ผ์ด ์ผ์–ด๋‚˜ ๋“  js ์ธก์—์„œ ์ผ์–ด๋‚˜๊ณ  bind์™€ bone ํ–‰๋ ฌ์ด ๊ณ„์‚ฐ๋ฉ๋‹ˆ๋‹ค. ๋ฐ”์ธ๋“œ ๋งคํŠธ๋ฆญ์Šค๋Š” ๋งŽ์€ ์ŠคํŠธ๋ ˆ์น˜๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ณ , ๋ณธ ๋งคํŠธ๋ฆญ์Šค๋Š” ๋ฐ”์ธ๋“œ ๋งคํŠธ๋ฆญ์Šค์—์„œ ๊ทธ๋‹ค์ง€ ๋งŽ์€ ์ŠคํŠธ๋ ˆ์น˜๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š์€ ๋‹ค๋ฅธ ์ขŒํ‘œ์—์„œ ์ž‘๋™ํ•˜๋„๋ก ๋‹ฅํ„ฐ ๋ง ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

(ํŽธ์ง‘ : nvm, ๋‚˜๋Š” ์ด๊ฒƒ์ด ์ž˜๋ชป๋˜์—ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค)

me

@makc ๋ถˆํ–‰ํžˆ๋„ ์Šคํ‚ค๋‹ ์…ฐ์ด๋”์˜ ๋ณต์‚ฌ / ๋ถ™์—ฌ ๋„ฃ๊ธฐ์—์„œ ๊ณ„์‚ฐ์ด ๋กœ์ปฌ ๋˜๋Š” ์›”๋“œ ๊ณต๊ฐ„ ์ขŒํ‘œ์—์„œ ์ˆ˜ํ–‰๋˜์—ˆ๋Š”์ง€ ์•Œ ์ˆ˜์žˆ๋Š” ์ถฉ๋ถ„ํ•œ ๋ฐ์ดํ„ฐ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ๋งํ–ˆ๋“ฏ์ด ๋ผˆ ํ–‰๋ ฌ ๊ณ„์‚ฐ์— ๋ถ„๋ช…ํžˆ ์ž˜๋ชป๋œ ๊ฒƒ์ด ์žˆ๊ฑฐ๋‚˜ ์ด๋Ÿฌํ•œ ํ–‰๋ ฌ ๊ณ„์‚ฐ์˜ ์ˆœ์„œ๊ฐ€ ์˜ฌ๋ฐ”๋ฅด์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. OpenGL ํฌ๋Ÿผ์—์„œ ๋ณผ ์ˆ˜ ์žˆ๊ณ  @ Mugen87์ด ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด, ์ด๊ฒƒ์€ ์ ์–ด๋„ ๋‚˜์—๊ฒŒ๋Š” ๊ฐ€์žฅ ๋ฐ˜์ฆ์ ์ธ ๋‹จ์„œ์ž…๋‹ˆ๋‹ค.

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

๋‹ค์‹œ ์„ค๋ช…ํ–ˆ๋“ฏ์ด ๊ฐœ์ฒด์˜ ํฌ๊ธฐ๊ฐ€ ๋ฒ„๊ทธ์— ์˜ํ–ฅ์„์ค๋‹ˆ๋‹ค.
ThreeJS ์†Œ์Šค๋ฅผ ์‚ฌ์šฉํ•œ ์˜ˆ์ œ๋Š” z = 100000์—์„œ๋งŒ ๋ฒ„๊ทธ๋ฅผ ๋‚˜ํƒ€๋‚ด์ง€ ๋งŒ ๋ฉ”์‹œ์˜ ํฌ๊ธฐ (ThreeJS ์†Œ์Šค์—์„œ๋„ ์ œ๊ณต๋จ)๊ฐ€ ๊ฑฐ๋Œ€ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋‹ฌ๋ฆฌ๋Š” ์†Œ๋…„์˜ ํ‚ค๋Š” 150m์ž…๋‹ˆ๋‹ค.

๊ฒŒ์ž„์„ ํ•  ๋•Œ ๋‹น์—ฐํžˆ ๊ทธ๋Ÿฐ ์ข…๋ฅ˜์˜ ์Šค์ผ€์ผ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‹น์‹ ์€ ํ•ญ์ƒ 1m = 1unit์œผ๋กœ ๋‹น์‹ ์˜ ์„ธ๊ณ„๋ฅผ ์ง€ํ‚ค๋ ค๊ณ  ๋…ธ๋ ฅํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์ข‹์€ ๋ฌผ๋ฆฌํ•™๊ณผ ํ–‰๋™์„ ์–ป๊ธฐ ์œ„ํ•ด ํ•„์ˆ˜์ ์ž…๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์„œ ๋ฌธ์ œ๋Š” ์‹ค์ œ ํฌ๊ธฐ์˜ SkinnedMesh๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค. ๋ฒ„๊ทธ๋Š” ์ด๋ฏธ z = 300์— ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.

์–ด๋–ค ์—”์ง„์—์„œ๋“  SkinnedMesh๋ฅผ x : 30000, y : 60000, z : 140000000์— ๋†“์„ ์ˆ˜ ์žˆ์œผ๋ฉฐ ๋ผˆ๋Œ€์™€ ์Šคํ‚ค๋‹์— ๋ฌธ์ œ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์ง€ ํ„ฐ๋ง์ด ์—†์Šต๋‹ˆ๋‹ค.

ํ™•์‹คํžˆ ์ €๋Š” ์šฐ๋ฆฌ๊ฐ€ ์—ฌ๊ธฐ์„œ ์ž๋ฐ” ์Šคํฌ๋ฆฝํŠธ ์ฝ”์–ด๋ฅผ ์ž‘์—…ํ•˜๊ณ  ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์ž˜ ์ดํ•ดํ•ฉ๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์—์„œ "์šฐ๋ฆฌ ๋ชจ๋‘๋Š” ๋ฌดํ•œํ•œ ์„ธ๊ณ„๋ฅผ ์›ํ•˜์ง€๋งŒ ๋ถˆ๊ฐ€๋Šฅํ•œ"์ฒ™ํ•˜๋Š” ํŠธ๋กค๋“ค์€ ํ•™๊ต๋กœ ๋Œ์•„๊ฐ€์„œ ํ–‰๋ ฌ ๋ณ€ํ™˜์„ ๋ฐฐ์›Œ์•ผํ•ฉ๋‹ˆ๋‹ค. ๋˜๋Š” ์˜คํ”ˆ ์›”๋“œ ๊ฒŒ์ž„์„ ๋” ์ž˜๋ณด๊ณ  ์ž์‹ ์˜ ์•„๋ฐ”ํƒ€๊ฐ€ ์”ฌ ๋ฃจํŠธ 0,0,0์—์„œ ๋ฉ€๋ฆฌ ๋–จ์–ด์ง„ "skinnedmeshed"๊ฐ€ ๋  ์ˆ˜์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ์Šค์Šค๋กœ ๋ฌผ์–ด๋ณด์‹ญ์‹œ์˜ค.

์ด ๋ฒ„๊ทธ๋Š” ์žฌ๋ฐŒ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—์„œ ๋ฐ์Šคํฌํƒ‘์—์„œ ์žฌํ˜„ ํ•  ์ˆ˜ ์žˆ์—ˆ์ง€๋งŒ 60K๋กœ๋Š” ์ •๋ฐ€๋„๊ฐ€ ๋ถ€์กฑํ–ˆ์Šต๋‹ˆ๋‹ค.
needs more zeroes

์ข‹์•„, ๊ทธ๋ž˜์„œ z = 1e8์—์„œ, ๋‹ค์Œ์€ ํ˜„์žฌ ์…ฐ์ด๋”์—์žˆ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

screen shot 2018-02-14 at 1 15 56

์…ฐ์ด๋”๋ฅผ ์ด๋ ‡๊ฒŒ ๋ณ€๊ฒฝํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค (์œ„์—์„œ ํŽธ์ง‘ ํ•œ ๋‚ด ๋จธ๋ฆฌ ์œ„ ํ…Œ์ŠคํŠธ์˜ ์•ฝ๊ฐ„ ๋ณ€ํ˜•).

#ifdef USE_SKINNING
    vec4 skinVertex = bindMatrix * vec4( transformed, 1.0 );
    vec4 skinned = vec4( 0.0 );
    skinned += ( bindMatrixInverse * boneMatX ) * skinVertex * skinWeight.x;
    skinned += ( bindMatrixInverse * boneMatY ) * skinVertex * skinWeight.y;
    skinned += ( bindMatrixInverse * boneMatZ ) * skinVertex * skinWeight.z;
    skinned += ( bindMatrixInverse * boneMatW ) * skinVertex * skinWeight.w;
    transformed = skinned.xyz;
#endif

screen shot 2018-02-14 at 1 16 54

์—ฌ์ „ํžˆ ํ”๋“ค๋ฆฌ์ง€ ๋งŒ ํ›จ์”ฌ ์ข‹์•„ ๋ณด์ž…๋‹ˆ๋‹ค. :) ์ด์ œ์ด ๋ฌธ์ œ์˜ ๋งฅ๋ฝ์—์„œ ์ด๊ฒƒ์ด ๋ฌด์—‡์„ ์˜๋ฏธํ•ฉ๋‹ˆ๊นŒ?

์ฒซ์งธ, ์‰์ด๋”์—์ด ํ•ดํ‚น์„ ๋ณต์‚ฌํ•˜์—ฌ ๋ถ™์—ฌ ๋„ฃ์„ ์ˆ˜๋Š” ์—†์Šต๋‹ˆ๋‹ค. ๋‚ด ๋ง์€, ๋‹น์‹ ์€ ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๊ทธ๊ฒƒ์€ 1 ํ–‰๋ ฌ ๊ณฑ์…ˆ์„ 4๋กœ ๋Œ€์ฒดํ•ฉ๋‹ˆ๋‹ค. ๋Œ€์‹  ๋‚ด๊ฐ€ ์ œ์•ˆํ•˜๋Š” ๊ฒƒ์€ a) js ์ธก์—์„œ ๊ฒฐํ•ฉ ํ–‰๋ ฌ์˜ ์—ญ๊ณผ ๋ผˆ ํ–‰๋ ฌ์„ ๋ณ‘ํ•ฉํ•˜๊ณ  ๋‹จ์ผ ์œ ๋‹ˆํผ์œผ๋กœ ์ „๋‹ฌํ•˜๊ฑฐ๋‚˜ b) ์ด๊ฒƒ๋งŒ์„ ์œ„ํ•ด ๋‹ค๋ฅธ ์œ ๋‹ˆํผ์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์…ฐ์ด๋” ์กฐ๊ฐ. ๊ทธ๋Ÿฐ ๋‹ค์Œ์ด ๋ฌธ์ œ๋ฅผ (๋‹ค์†Œ) ํ•ด๊ฒฐํ•˜๊ณ  ์…ฐ์ด๋”์˜ ํ–‰๋ ฌ ๊ณฑ์…ˆ ์ˆ˜๋ฅผ 1 ์”ฉ ์ค„์ž…๋‹ˆ๋‹ค.

์•„, ๊ทธ๋ฆฌ๊ณ 

์—ฌ๊ธฐ ํŠธ๋กค๋“ค์€ "์šฐ๋ฆฌ ๋ชจ๋‘๋Š” ๋ฌดํ•œํ•œ ์„ธ๊ณ„๋ฅผ ์›ํ•˜์ง€๋งŒ ๋ถˆ๊ฐ€๋Šฅํ•œ"์ฒ™ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋“ค์ด ๋งํ•˜๋ ค๋Š” ๊ฒƒ์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๊ณ ์น˜์ง€ ์•Š๊ณ ๋„ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ•„์š”ํ•˜์ง€๋Š” ์•Š์ง€๋งŒ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@makc ์‹œ๊ฐ„์„ ๋‚ด ์ฃผ์…”์„œ ๋Œ€๋‹จํžˆ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.
๋ถˆํ–‰ํžˆ๋„ ๋„ˆ๋ฌด ๋Šฆ์—ˆ์Šต๋‹ˆ๋‹ค. ๊ธˆ์š”์ผ ๋ฐฐ๋‹ฌํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์œผ๋กœ PNG ์‹œํ€€์Šค๋ฅผ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์„ ์ถฉ๋ถ„ํžˆ ๋””๋ฒ„๊น…ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด. ์‚ฌ์‹ค์ ์ธ ๋ฉ”์‰ฌ ํฌ๊ธฐ๋ฅผ ์‚ฌ์šฉํ•ด ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?
๋‹ค์‹œ ๋งํ•˜์ง€๋งŒ,์ด ๋ผ๋ผ ๋ชจ๋ธ๋„ ์ œ๊ฐ€ ์ž˜ ๊ธฐ์–ตํ•œ๋‹ค๋ฉด 60m ์ •๋„์˜ ํ‚ค์ž…๋‹ˆ๋‹ค.

๋‹น์—ฐํžˆ ๋‹น์‹ ์˜ ํŒจ์น˜๊ฐ€ ํ˜„์‹ค์ ์ธ ๊ทœ๋ชจ๋กœ๋„ ์ž‘๋™ํ•˜๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค. :)

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

๋‹ค์‹œ ํ•œ ๋ฒˆ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค

@OrtOfOn ์ฝ”๋“œ ์ƒ๋‹จ์— ๋‹ค์Œ์„ ์ถ”๊ฐ€ํ•˜์—ฌ @makc ํŒจ์น˜๋ฅผ ์‹œ๋„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

THREE.ShaderChunk.skinning_vertex = `
#ifdef USE_SKINNING
    vec4 skinVertex = bindMatrix * vec4( transformed, 1.0 );
    vec4 skinned = vec4( 0.0 );
    skinned += ( bindMatrixInverse * boneMatX ) * skinVertex * skinWeight.x;
    skinned += ( bindMatrixInverse * boneMatY ) * skinVertex * skinWeight.y;
    skinned += ( bindMatrixInverse * boneMatZ ) * skinVertex * skinWeight.z;
    skinned += ( bindMatrixInverse * boneMatW ) * skinVertex * skinWeight.w;
    transformed = skinned.xyz;
#endif
`;

THREE.WebGLShader : ์…ฐ์ด๋”๋ฅผ ์ปดํŒŒ์ผ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. : /

patch

์˜ค ์ด๋Ÿฐ. ์ž˜๋ชป๋œ ๋”ฐ์˜ดํ‘œ์™€ ํ•œ ์ค„ ํ˜•์‹์œผ๋กœ ๋๋‚ฌ์Šต๋‹ˆ๋‹ค. ์–ด๋–ป๊ฒŒ ๋ณต์‚ฌ-๋ถ™์—ฌ ๋„ฃ๊ธฐ๋ฅผํ•˜๋‚˜์š”?

๋˜ํ•œ ํ˜ธ๊ธฐ์‹ฌ์„ ์ถฉ์กฑ์‹œํ‚ค๋Š”์ด ์—‰๋šฑํ•œ ์ด๋ฏธ์ง€๋ฅผ๋ณด๊ธฐ ์œ„ํ•ด ๊ทธ๋ ‡๊ฒŒํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋‹ค๋ฅธ ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ์—ฌ๊ธฐ์—์„œ ๊ฐ€์ ธ๊ฐˆ ๊ฒƒ์ด๋ผ๊ณ  ๋ฏฟ์Šต๋‹ˆ๋‹ค. :)

@makc CTRL + C / CTRL + V ... ๋ฐ”๋กœ ์—ฌ๊ธฐ์—์„œ ... : /

๋ถˆํ–‰ํžˆ๋„ ๋ฒ„๊ทธ๋Š” ์ด์ „๋ณด๋‹ค ๋œ ๊ฐ•ํ•˜์ง€ ๋งŒ ์—ฌ์ „ํžˆ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.

iOS์—์„œ ํ…Œ์ŠคํŠธ ๋จ (ํŒจ์น˜ ์ ์šฉ๋จ) :

์Šค์ผ€์ผ 1.0์˜ ๋ฉ”์‹œ (์ •ํ™•ํžˆ 20m ๋†’์ด์˜ ์•„๋ฐ”ํƒ€), ์œ„์น˜ z = 10000
http://cornflex.org/webgl/skin-patch1.mp4

์Šค์ผ€์ผ 0.1 (2m ๋†’์ด์˜ ์•„๋ฐ”ํƒ€), ์œ„์น˜ z = 3000์˜ ๋ฉ”์‹œ
http://cornflex.org/webgl/skin-patch2.mp4

@mrdoob ์žฌํ˜„ ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. :) ํ•œ ์ค„๋กœ ๋‚˜์™”์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋‹น์‹ ์˜ ๋‹ต์žฅ์ด ํŠ€์–ด ๋‚˜์˜ค๋Š” ๊ฒƒ์„ ๋ณด์•˜์„ ๋•Œ ํŽ˜์ด์ง€์— ๊ธ€์„ ์“ฐ๊ณ  ์žˆ์—ˆ๊ณ  ์ •์ƒ์ ์œผ๋กœ ๋‚˜ํƒ€๋‚˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ์•ฝ์†ํ•ฉ๋‹ˆ๋‹ค : p ...์ด ๋ณด๋„ˆ์Šค ํฌ์ธํŠธ๋ฅผ ์–ป์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํŽธ์ง‘ : BTW ๋‹น์‹ ์€ โ€‹โ€‹๋‹น์‹ ์˜ ๊ฒŒ์‹œ๋ฌผ์„ ํŽธ์ง‘ ํ–ˆ์Šต๋‹ˆ๊นŒ? :)

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

@OrtOfOn ๋‹น์‹ ์˜ ์žฅ์†Œ์—์„œ ๋‚˜๋Š” ๋‹น์‹ ์˜ ์ „์ฒด ์žฅ๋ฉด (์นด๋ฉ”๋ผ๋กœ)์„ ์—ฌ๋ถ„์˜ Object3D๋กœ ๊ฐ์‹ธ๊ณ ์ด ๊ฐ์ฒด ์ขŒํ‘œ๋ฅผ -1 * ์•„๋ฐ”ํƒ€ ์ขŒํ‘œ๋กœ ์„ค์ •ํ•˜๋ ค๊ณ  ๋…ธ๋ ฅํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ 0,0,0 ์„ธ๊ณ„ ์ขŒํ‘œ๋ฅผ ์˜์›ํžˆ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.

@markc ๋‚˜๋Š” ์ •๋ง๋กœ ์ด๋ ‡๊ฒŒ ์†์ด๋Š” ๊ฒƒ์„ ์ข‹์•„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ฒŒ์ž„ ํ”Œ๋ ˆ์ด์™€ ์žฅ๋ฉด์€ ๊ทธ๋ ‡๊ฒŒ ๊ณ ๋ฌธ์„ ๋‹นํ•˜๋„๋ก ์„ค๊ณ„๋˜์ง€ ์•Š์•˜์œผ๋ฉฐ ๋ชจ๋ฐ”์ผ ํผ์ŠคํŠธ ๊ฒŒ์ž„์œผ๋กœ์„œ perfs๋Š” ๋ฌผ๋ก  ์ตœ์ ์ด์–ด์•ผํ•ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ ... ๋‚ด ๊ฒฝ์šฐ๋Š” ์•„๋‹ˆ์ง€๋งŒ SkinnedMesh์˜ ์—ฌ๋Ÿฌ ์ ๋“ค๊ณผ ํ•จ๊ป˜ ์ด๊ฒƒ์„ ์ƒ์ƒํ•ด๋ณด์‹ญ์‹œ์˜ค.

๋งˆ๊ฐ์ผ์ด ์ง€๋‚ฌ๊ณ  SkinnedMesh๋ฅผ ์Šคํ”„๋ผ์ดํŠธ ์‹œํŠธ ์• ๋‹ˆ๋ฉ”์ด์…˜์œผ๋กœ ๋Œ€์ฒดํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์„ ํƒ์˜ ์—ฌ์ง€๊ฐ€ ์—†์—ˆ์Šต๋‹ˆ๋‹ค (ํด๋ผ์ด์–ธํŠธ๋Š” ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค). ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ๋‚˜๋Š” ์ด๋Ÿฐ ์ผ์„ ๊ฒช๋Š” ๊ฒƒ ์™ธ์—๋Š”ํ•˜์ง€ ์•Š์•˜๋‹ค. ๊ฑฐ์˜ ๋ชจ๋“  ์›น ํ”„๋กœ์ ํŠธ์—์„œ ThreeJS๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ๋งค์šฐ ๋งŒ์กฑํ•ฉ๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” "๋ฌดํ•œ ์„ธ๊ณ„"๋ฅผ ์›ํ•˜์ง€ ์•Š์ง€๋งŒ ์œ ๋ช…ํ•œ ์—”์ง„ ์—์„œ์ฒ˜๋Ÿผ ์›”๋“œ ๊ณต๊ฐ„ ์ขŒํ‘œ์—์„œ ์ด๋Ÿฌํ•œ ๋ฉ‹์ง„ SkinnedMesh ๋ฐ ์• ๋‹ˆ๋ฉ”์ด์…˜ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค. :)

์ €๋Š” ์•ฝ๊ฐ„ ์‹ค๋ง ์Šค๋Ÿฝ์Šต๋‹ˆ๋‹ค. ํฌ๋กœ์Šค ํŽ˜์ด๋“œ ๊ธฐ๋Šฅ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋งค์šฐ ๋ฉ‹์ง„ Animator ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋งŒ๋“ค๊ณ  mecanim์—์„œ ์˜๊ฐ์„ ์–ป์—ˆ ๊ธฐ ๋•Œ๋ฌธ์— ... ๋‹ค์Œ ํ”„๋กœ์ ํŠธ๋ฅผ ์œ„ํ•ด ํ™•์‹คํžˆ : /

@markc ๋‚˜๋Š” ์ •๋ง๋กœ ์ด๋ ‡๊ฒŒ ์†์ด๋Š” ๊ฒƒ์„ ์ข‹์•„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ์ „ํ˜€ ์†์ž„์ˆ˜๋ผ๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ๋ชจ๋“  ๊ณต๊ฐ„ ์‹œ๋ฎฌ๋ ˆ์ด์…˜์ด ์ž‘๋™ํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ ์‹ค์‹œ๊ฐ„ 3D ๋ Œ๋”๋ง์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ „์ฒด ์žฅ๋ฉด์„ ์ƒ์‡„ํ•˜๋ฏ€๋กœ ์ค‘์•™์ด ์นด๋ฉ”๋ผ๊ฐ€์žˆ๋Š” ๊ณณ์ž…๋‹ˆ๋‹ค.

@mrdoob ์˜ˆ, ์นด๋ฉ”๋ผ๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ํ–‰๋ ฌ์˜ ํž˜ :) (์ €๋Š” ๋„ค์ดํ‹ฐ๋ธŒ WebGL / OpenGL ๊ฐœ๋ฐœ์„ ์ง์ ‘ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค).

์–ด์จŒ๋“ , ๋ชจ๋“  ์”ฌ์„ ๊ฒŒ์ž„ ์˜ค๋ธŒ์ ํŠธ์— ๋„ฃ๋Š” ๊ฒƒ์€ ๋‚˜์—๊ฒŒ ์•ฝ๊ฐ„ ๋ฐ”๋ฐ” ์ธ ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค. ํŠนํžˆ ์Šคํ‚จ ๋œ ์• ๋‹ˆ๋ฉ”์ด์…˜์ด ์ž‘๋™ํ•˜๋„๋กํ•ฉ๋‹ˆ๋‹ค.

@OrtOfOn ์‹ค์ œ๋กœ ์žฅ๋ฉด ์ž์ฒด๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด lara ์˜ˆ์ œ์—์„œ ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•˜์‹ญ์‹œ์˜ค.

scene.add(camera);
scene.position.z = -60000;

๊ทธ๋ฆฌ๊ณ  ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค (ํŽธ์ง‘ :ํ•˜์ง€๋งŒ์ด ์ž‘์—…์„ ํ•  ๋•Œ ์กฐ๋ช…์— ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค .... @mrdoob ?)

@makc ํŒจ์น˜๋ฅผ ์ œ์•ˆ

๋‚˜๋Š” ์ „ํ˜€ ๋น„๊ด€์  ์ธ ์‚ฌ๋žŒ์ด๋˜๊ณ  ์‹ถ์ง€ ์•Š์ง€๋งŒ ์ด๋Ÿฐ ์ข…๋ฅ˜์˜ ์กฐ์ž‘์„ํ•จ์œผ๋กœ์จ ์กฐ๋ช…์ด ์œ ์ผํ•œ ๋ฌธ์ œ๊ฐ€ ์•„๋‹ˆ๋ผ๋Š” ์‚ฌ์‹ค์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ๊ฒฐ๊ณผ์˜ ๋ถˆํ™•์‹ค์„ฑ๊ณผ ํŒŒ์ดํ”„ ๋ผ์ธ์˜ ๋‹ค๋ฅธ ๋ถ€๋ถ„์— ๋Œ€ํ•œ ๊ฒฐ๊ณผ ๋•Œ๋ฌธ์— ์ด๋Ÿฌํ•œ ํŠธ๋ฆญ๊ณผ ์น˜ํŠธ๋ผ๊ณ  ๋ถ€๋ฅด๋Š” ์ด์œ ์ž…๋‹ˆ๋‹ค.

๋ถˆํ–‰ํžˆ๋„ ๊ฒŒ์ž„์„ ๋งŒ๋“œ๋Š” ์‚ฌ๋žŒ๋“ค์€ ๋ฌผ๋ฆฌํ•™, ๋ ˆ์ด ์บ์Šคํ„ฐ, ํŒŒํ‹ฐํด ๋“ฑ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์‹ค์ ์ธ ์Šค์ผ€์ผ๋กœ ์„ธ๊ณ„ ๊ณต๊ฐ„์— ์žˆ๋„๋ก ์„ค๊ณ„๋˜๊ณ  ์„ค๊ณ„๋˜์–ด์•ผํ•˜๋Š” ๋งŽ์€ ๊ฒƒ๋“ค์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ ์”ฌ์˜ ์ผ๋ถ€ ์œ„์น˜์— ์ˆจ์–ด ์žˆ๊ฑฐ๋‚˜ ์Šคํฐ๋˜๋Š” ์ ๊ณผ ๊ฐ™์ด ํ•˜๋‚˜ ์ด์ƒ์˜ SkinnedMesh์—์„œ ์ด๋Ÿฌํ•œ ํŒจ์น˜๊ฐ€ ์ž‘๋™ํ•˜๋Š” ๋ชจ์Šต์„๋ณด๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด 0,0,0์—์„œ ํ•˜๋‚˜์˜ skinnedmesh ์•„๋ฐ”ํƒ€๋กœ ์ œํ•œ๋˜๋Š” ์ ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

๊ฐ€๋Šฅํ•œ ํ•œ ๋นจ๋ฆฌ ์†Œ์Šค๋ฅผ ๊นŠ์ด ํŒŒ๊ณ ๋“ค ๊ฒ ์ง€๋งŒ 2 ์ผ ์•ˆ์— ๋ญ”๊ฐ€๋ฅผ ์ „๋‹ฌํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค ... ๊ทธ๋ž˜์„œ ๋‚ด ์Šคํ”„๋ผ์ดํŠธ ์‹œํŠธ ์• ๋‹ˆ๋ฉ”์ด์…˜์€ ๋‹น๋ถ„๊ฐ„ ๊ฝค ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด 0,0,0์—์„œ ํ•˜๋‚˜์˜ skinnedmesh ์•„๋ฐ”ํƒ€๋กœ ์ œํ•œ๋˜๋Š” ์ ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

์š”์ ์€ ์Šคํ‚จ์„ 0,0,0์— ๋ Œ๋”๋งํ•˜๊ณ  ๋‹ค๋ฅธ ์Šคํ‚จ์„ z = 60000์— ๋™์‹œ์— ๋ Œ๋”๋ง ํ•  ๊ฐ€๋Šฅ์„ฑ์ด ๊ฑฐ์˜ ์—†๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. 0,0,0 ์ฃผ๋ณ€์˜ ๋ช‡ ๊ฐœ์˜ ์Šคํ‚จ ๋งŒ ํ™”๋ฉด์— ํ‘œ์‹œ๋˜๋ฉฐ ๋ฒ„๊ทธ๋ฅผ ์œ ๋ฐœํ• ๋งŒํผ ๋ฉ€์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

@makc ๋‹ค์‹œ ๋งํ•˜์ง€๋งŒ, ํŒจ์น˜๋Š” ๋ฐ์Šคํฌํ†ฑ์—์„œ ์œ ํšจํ•˜์ง€๋งŒ ์‹ค์ œ ํฌ๊ธฐ ์กฐ์ • ๋œ ๋ฉ”์‹œ๋กœ 0,0,0์—์„œ ๋ช‡ ๋ฏธํ„ฐ ๋–จ์–ด์ง„ ๊ณณ์— ๋ฒ„๊ทธ๊ฐ€ ์ด๋ฏธ ๋‚˜ํƒ€๋‚˜๋Š” iOS ์žฅ์น˜์—์„œ ์‚ฌ๋ก€๋ฅผ ํ…Œ์ŠคํŠธํ•˜๊ณ  ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ๊ฒƒ์— ๋Œ€ํ•ด ์ถฉ๋ถ„ํ•œ ๋น„๋””์˜ค๋ฅผ ๋ณด์—ฌ์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์ด๊ฒƒ์€ z = 100์—์„œ๋งŒ ๋ฒ„๊ทธ๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
http://cornflex.org/webgl/skin-bug.mp4

๊ฒŒ์ž„์—์„œ ํ•ญ์ƒ 20m ๋†’์ด์˜ ์•„๋ฐ”ํƒ€๋ฅผ ์‚ฌ์šฉํ•˜์‹ญ๋‹ˆ๊นŒ? :)
์ดˆ์ ์„ ๋งž์ถ˜ ์ˆซ์ž (60000)๋Š” ๋ชจ๋ฐ”์ผ์ด ์•„๋‹Œ ๋ฐ์Šคํฌํ†ฑ (๋งค์šฐ ๊ฑฐ๋Œ€ํ•œ ๋ผ๋ผ ๋˜๋Š” ๊ฑฐ๋Œ€ํ•œ threejs fbx ์ƒ˜ํ”Œ)์—์„œ ๋ฒ„๊ทธ๋ฅผ ๋…ธ์ถœํ•˜๋Š” ๋ฐ๋งŒ ์‚ฌ์šฉ๋˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋‚ด ์•„๋ฐ”ํƒ€๋Š” ๋‹น์—ฐํžˆ ๊ทธ๋ ‡๊ฒŒ ๋ฉ€๋ฆฌ ๊ฐ€์ง€ ์•Š์Šต๋‹ˆ๋‹ค ...

๋‚˜๋Š” ์ด๊ฒƒ์ด iOS ๋ฌธ์ œ์ž„์„ ํ™•์ธํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ ์–ด๋„ 6S / 6S + ์„ธ๋Œ€ ์ดํ›„๋กœ iOS๋Š” floatVertexTextures์— ๋ฌธ์ œ๊ฐ€์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ์‚ฌ์šฉํ•˜๊ณ ์žˆ๋Š” ์ˆ˜์ • ์‚ฌํ•ญ์€ iOS์—์„œ ํ•ด๋‹น ๊ธฐ๋Šฅ์„ ๋น„ํ™œ์„ฑํ™”ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์šฐ๋ฆฌ๊ฐ€ ์‚ฌ์šฉํ•  ์ˆ˜์žˆ๋Š” ๋ผˆ๋Œ€๋ฅผ ์ œํ•œํ•˜์ง€๋งŒ, ์–ด์ฐจํ”ผ ๋”์ฐํ•œ ์ „ํ™”๊ธฐ๋ฅผ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•ด ๋ผˆ๋Œ€๋ฅผ ์ œํ•œํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

iOS ๊ธฐ๊ธฐ๊ฐ€ @ Mugen87 ์—์„œ ๊ฒŒ์‹œ ํ•œ ์ ํ•ฉ์„ฑ ํ…Œ์ŠคํŠธ์— ์‹คํŒจํ•˜๋ฉด iOS์—์„œ ๊ธฐ๋ณธ์ ์œผ๋กœ floatVertexTextures ๋˜๋Š” ์‹ฌ์ง€์–ด floatFragmentTextures๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ์ง€์›ํ•˜๋„๋ก ๊ด‘๊ณ ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๊ตฌํ˜„ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

@ daniel-nth ๋ง์ด๋˜๋Š” ๊ฒƒ ๊ฐ™์•„์š”. ๊ทธ๋Ÿฌ๋‚˜ ... @OrtOfOn ์€ z = 60K๊ฐ€ ๋ฐ์Šคํฌํƒ‘์—์„œ ๋ฌธ์ œ๋ฅผ ์žฌํ˜„ํ•œ๋‹ค๊ณ  ๋งํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐ์Šคํฌํƒ‘์—์„œ 60K์—์„œ๋Š” ๋ฌธ์ œ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. "์žฌํ˜„"ํ•˜๋Š” ๋ฐ๋Š” 1e8๋งŒ์œผ๋กœ ์ถฉ๋ถ„ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ์ด ๋ฌธ์ œ๋Š” ์‹ค์ œ๋กœ ์ตœ์†Œํ•œ 3 ๊ฐœ์˜ ๊ฐœ๋ณ„ ๋ฌธ์ œ ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • iOS์—์„œ ํ”Œ๋กœํŒ… ํ…์Šค์ฒ˜,
  • @OrtOfOn ์˜ ๋ฐ์Šคํฌํƒ‘์—์„œ 60K๋กœ
  • ๋ผˆ ์…ฐ์ด๋” ๋น„ํŠธ์˜ ์ž˜๋ชป๋œ ํ–‰๋ ฌ ๊ณฑ์…ˆ ์ˆœ์„œ๋กœ ์ธํ•ด 1e8์—์„œ ์ •๋ฐ€๋„๊ฐ€ ๋ถ€์กฑํ•ฉ๋‹ˆ๋‹ค (์œ„์—์„œ ์—‰๋ง์œผ๋กœ ๋งŒ๋“  ๊ฒƒ).
  • ํŒจ์น˜ ํ›„์—๋„ ์†Œ๋…€๊ฐ€ ์—ฌ์ „ํžˆ ์•ฝ๊ฐ„ ํ”๋“ค ๋ ธ๊ธฐ ๋•Œ๋ฌธ์— ์ •์  ์…ฐ์ด๋”์— ๋‹ค๋ฅธ ๊ฒƒ์ด์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์•ˆ๋…•ํ•˜์„ธ์š” ์—ฌ๋Ÿฌ๋ถ„,
๋จผ์ €์ด ๋ฒ„๊ทธ๋กœ ๋Œ์•„์™€ ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ์—ฌ์ „ํžˆ ๊ทธ๊ฒƒ์„ ํŒŒ๋‚ผ ์‹œ๊ฐ„์„ ์ฐพ์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค :(

@ daniel-nth ๊ฐœ์ฒด์˜ ํฌ๊ธฐ๊ฐ€ ๋ฒ„๊ทธ์— ์˜ํ–ฅ์„์ค๋‹ˆ๋‹ค.

iOS์—์„œ์ด ๋งค์šฐ ํฐ "Lara"๊ฐœ์ฒด (height = 120, scale = 1)๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์‹ค์ œ๋กœ z = 60000์— ๋ฒ„๊ทธ๊ฐ€ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์‚ฌ์‹ค์ ์ธ ํฌ๊ธฐ์˜ ๋ฉ”์‹œ (๋†’์ด = 1.8, ๋ฐฐ์œจ = 1)๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ด๋ฏธ z = 100์—์„œ๋งŒ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.

skinnedmesh๊ฐ€ ํด์ˆ˜๋ก ๋ฒ„๊ทธ๋ฅผ ๋ณด๋ ค๋ฉด ๋ฒˆ์—ญํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

์ด ์Šค๋ ˆ๋“œ์—์„œ ์ด๋ฏธ ํ…Œ์ŠคํŠธํ•˜๊ณ ๋ณด๊ณ ํ–ˆ๋“ฏ์ด iOS์—์„œ floatTextures๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•˜๋ฉด ์Šคํ‚ค๋‹์ด ์ „ํ˜€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋˜ํ•œ ๋ผˆ ํ–‰๋ ฌ์˜ ์ž˜๋ชป๋œ ํ–‰๋ ฌ ๊ณฑ์…ˆ ๋˜๋Š” ๋ง‰๋Œ€ ๊ณฑ์…ˆ ์ˆœ์„œ๊ฐ€ ์˜์‹ฌ๋ฉ๋‹ˆ๋‹ค.

iOS์—์„œ์ด ๋งค์šฐ ๊ฑฐ๋Œ€ํ•œ "Lara"๊ฐœ์ฒด (height = 120, scale = 1)๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฒ„๊ทธ๊ฐ€ z = 60000์— ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.

@OrtOfOn ๊ธฐ๋‹ค๋ ค, ๊ทธ๋ž˜์„œ ios? ๊ทธ๋Ÿฌ๋‚˜ ๋‹น์‹ ์€ ๋˜ํ•œ ๋งํ–ˆ๋‹ค :

์ดˆ์ ์„ ๋งž์ถ˜ ์ˆซ์ž (60000)๋Š” ๋ชจ๋ฐ”์ผ์ด ์•„๋‹Œ ๋ฐ์Šคํฌํ†ฑ (๋งค์šฐ ๊ฑฐ๋Œ€ํ•œ lara ๋˜๋Š” ๊ฑฐ๋Œ€ํ•œ threejs fbx ์ƒ˜ํ”Œ ํฌํ•จ)์—์„œ ๋ฒ„๊ทธ๋ฅผ ๋…ธ์ถœํ•˜๋Š” ๋ฐ๋งŒ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

iOS์—์„œ์ด ๋งค์šฐ ํฐ "Lara"๊ฐœ์ฒด (height = 120, scale = 1)๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์‹ค์ œ๋กœ z = 60000์— ๋ฒ„๊ทธ๊ฐ€ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.

์ „ํ˜€ ํฌ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
๊ทธ๋ฆฌ๊ณ  ์—ฌ์ „ํžˆ ๋ชจ๋ธ ํฌ๊ธฐ์™€ ์„ธ๊ณ„ ๊ทœ๋ชจ ์‚ฌ์ด์˜ ๊ด€๊ณ„๋ฅผ ์ดํ•ดํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค.
๋งˆ์ง€๋ง‰์œผ๋กœ:
http://necromanthus.com/Test/html5/Lara_1000000.html
Modeil ๋†’์ด๋Š” ๋Œ€๋žต 75์ด๊ณ  ์„ธ๊ณ„ ๊ทœ๋ชจ๋Š” 9,999,999์ž…๋‹ˆ๋‹ค.
Z = 0์—์„œ Z = 1,000,000 (๋ฐฑ๋งŒ !!!)
๋‹จ ์ •๋ฐ€๋„ ๋ถ€๋™ ์†Œ์ˆ˜์  ์ž๋ฆฟ์ˆ˜๋Š” 7์ด๊ธฐ ๋•Œ๋ฌธ์— ์†Œ์ˆ˜๊ฐ€ ์ „ํ˜€ ๋‚จ์ง€ ์•Š์Šต๋‹ˆ๋‹ค !!!
๋‚ด๊ฐ€ ๊ฐ€์ง€๊ณ ์žˆ๋Š” ๋ชจ๋“  ๋…ธํŠธ๋ถ๊ณผ ๋ฐ์Šคํฌํƒ‘์—์„œ ์™„๋ฒฝํ•˜๊ฒŒ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.
๋” ๋‚˜์•„๊ฐ€:
Android 6 ๋ฐ 7 ๋ฐ ๋‹ค์–‘ํ•œ ์‚ผ์„ฑ ํœด๋Œ€ํฐ์—์„œ ์™„๋ฒฝํ•˜๊ฒŒ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

lara_1000000

๊ท€ํ•˜์˜ ์˜ˆ์—์„œ @RemusMar ๋Š” ๋‹ค์Œ์„ ์ฝ˜์†”์— ์ž…๋ ฅํ•˜์‹ญ์‹œ์˜ค.

camera.position.z += 1e8;
scene.children[2].position.z += 1e8;

๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋‚ด์šฉ์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.
screen shot 2018-03-03 at 15 48 53

screen shot 2018-03-03 at 15 51 41
๊ทธ๊ฒƒ์€ ์‚ผ์ค‘์ด๋‹ค

z = 1e6๋„ ๋‚˜์˜์ง€ ์•Š๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๋ ค ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค. 1e7 ์ฆˆ์Œ์—๋Š” ์ด๋ฏธ ๋ˆˆ์— ๋„๊ณ  1e8์€ ๋ฏธ์ณค์Šต๋‹ˆ๋‹ค.

@OrtOfOn capabilities.floatVertexTextures๋ฅผ false๋กœ ์„ค์ •ํ•˜๋ฉด iOS์—์„œ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋‹น์‹ ์˜ ๋ชจ๋ธ์ด ์œ ๋‹ˆํผ์— ๋งž์ถ”๊ธฐ ์œ„ํ•ด ๋งŽ์€ ๋ผˆ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

z = 1e6๋„ ๋‚˜์˜์ง€ ์•Š๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๋ ค ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค. 1e7 ์ฆˆ์Œ์—๋Š” ์ด๋ฏธ ๋ˆˆ์— ๋„๊ณ  1e8์€ ๋ฏธ์ณค์Šต๋‹ˆ๋‹ค.

์•Œ์•„์š”,ํ•˜์ง€๋งŒ ๊ทธ ๊ฐ’๋“ค์— ๋Œ€ํ•ด์„œ๋Š” ์ •ํ™•ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
์Šคํ‚ค๋‹ ๋œ ๋ฉ”์‹œ ์ •์  ๊ฐ€์ค‘์น˜ ์ •๋ฐ€๋„์˜ ๊ฒฝ์šฐ ์ตœ๋Œ€ ํ‘œ์ค€ ํฌ๊ธฐ๋Š” 9.999.999์ž…๋‹ˆ๋‹ค.
์ด๋Š” ๋” ์ด์ƒ ์ˆ˜๋ฐฑ๋งŒ์˜ ์ตœ๋Œ€ ๊ฑฐ๋ฆฌ๋กœ ๋ณ€ํ™˜๋ฉ๋‹ˆ๋‹ค.
๊ฑด๋ฐฐ

@makc ์‚ฌ์‹ค, ๋ฐ์Šคํฌํƒ‘์— ๋Œ€ํ•œ ์ž˜๋ชป๋œ ๋ฒˆํ˜ธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ๋งค์šฐ ๊ฑฐ๋Œ€ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ๋‹น์‹  ๋ง์ด ๋งž์Šต๋‹ˆ๋‹ค. ์ €๋Š” ์‚ฌ์‹ค ์ด์ „์— ์Šค๋ ˆ๋“œ์—์„œ ์–ธ๊ธ‰ํ–ˆ์Šต๋‹ˆ๋‹ค : / https://github.com/mrdoob/three.js/issues/13288#issuecomment -364650679

@ daniel-nth ์ž˜ ์•Œ๊ณ  ์žˆ์ง€๋งŒ ํ™•์‹คํ•ฉ๋‹ˆ๊นŒ? ๋‹ค์Œ์€ threejs ์†Œ์Šค์˜ 3d ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•˜์—ฌ์ด ์Šค๋ ˆ๋“œ์—์„œ ์ˆ˜ํ–‰ ํ•œ ํ…Œ์ŠคํŠธ์ž…๋‹ˆ๋‹ค. ์—ฌ์ „ํžˆ ์ฝ”๋“œ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. @ Mugen87 ๋„ ๋™์ผํ•œ ํ”ผ๋“œ๋ฐฑ์„ ๋งŒ๋“ค์—ˆ https://github.com/mrdoob/three.js/issues/13288#issuecomment -364572653

์•„, ๋ชจ๋ธ์ด ๋” ์ด์ƒ ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. https://threejs.org/examples/models/fbx/xsi_man_skinning.fbx์˜ 404

@ daniel-nth ๋ผˆ๊ฐ€ ์ ์€ ์ƒˆ ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ๋‚˜๋Š” ๋‹น์‹ ์„ ๋ฏฟ์Šต๋‹ˆ๋‹ค;)

@RemusMar ๊ฝค ์ตœ๊ทผ ๊ฒŒ์‹œ๋ฌผ์—์„œ ์œ ๋ฐœ ๋œ ๊ฑฐ๋ฆฌ์— ๋Œ€ํ•ด ๋‹น์‹ ๊ณผ ๋™์˜ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ˆซ์ž (1e6, 1e8, 1e9, ...)๋Š” ํ™•์‹คํžˆ ์ •ํ™•๋„๊ฐ€ ๋–จ์–ด์ง‘๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์— ๋Œ€ํ•ด ์˜์‹ฌ์˜ ์—ฌ์ง€๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ œ๋ฐœ ๊ทธ๋งŒ ํŠธ๋กค๋งํ•˜์„ธ์š”. ๋‚ด๊ฐ€ ์•„๋ฌด๊ฒƒ๋„ ์ดํ•ดํ•˜์ง€ ๋ชปํ•˜๋Š” ์ฒ™ํ•˜์ง€ ๋ง๊ณ  ๋†’์ด๊ฐ€ 120 ์ธ ์•„๋ฐ”ํƒ€ ๋ฉ”์‹œ๊ฐ€ ํฌ์ง€ ์•Š์€์ง€ ์ž๋ฌธ ํ•ด๋ณด์‹ญ์‹œ์˜ค. ์ €์—๊ฒŒ๋Š” ์•„ํ‹ฐ์ŠคํŠธ, ๋ ˆ์ด ์บ์ŠคํŠธ, ๋ฌผ๋ฆฌํ•™, ์กฐ๋ช… ๋“ฑ์ด ์ œ์ž‘ ํ•œ ๋‹ค๋ฅธ ํ˜„์‹ค์  ์Šค์ผ€์ผ ์˜ค๋ธŒ์ ํŠธ์™€ ํ•จ๊ป˜ ๊ฒŒ์ž„ ๊ฐœ๋ฐœ์—์„œ ๋งค์šฐ ๊ฑฐ๋Œ€ํ•˜๊ณ  ์œ ์šฉํ•˜์ง€ ์•Š์œผ๋ฉฐ 3 ์ฃผ ๋‚ด์— ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ฃผ์žฅํ•ฉ๋‹ˆ๋‹ค : ๋ฏธํ„ฐ๋ฒ• ๋‹จ์œ„๋กœ ์ž์‚ฐ์„ ํ˜„์‹ค์ ์ธ ๊ทœ๋ชจ๋กœ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์€ ๋ฌผ๋ฆฌ์  ๊ธฐ๋ฐ˜ ๊ฒŒ์ž„์„ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๊ตฌ์ถ•ํ•˜๋Š” ๋ฐ ํ•„์ˆ˜์ ์ž…๋‹ˆ๋‹ค. :)

์•ˆํƒ€๊น๊ฒŒ๋„ iOS์—์„œ๋Š” ์ด๋Ÿฌํ•œ ํ˜„์‹ค์ ์ธ ์Šค์ผ€์ผ ์กฐ๊ฑด์—์„œ 100m ์ด์ƒ ์•„๋ฐ”ํƒ€๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์—…๋ฐ์ดํŠธ : ์–ด์จŒ๋“  @ daniel-nth๋Š” ์ด์ œ floatTextures๋ฅผ ๋„๊ณ  ๋งค์šฐ ์ œํ•œ๋œ ๋ผˆ ์ˆ˜๋กœ ์ž‘์—…ํ•˜๊ณ  ์žˆ๋‹ค๊ณ  ๋งํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ์ œ๋ฐœ ๊ทธ๋งŒ ํŠธ๋กค๋ง
๋‚˜๋Š” ์ฃผ์žฅํ•ฉ๋‹ˆ๋‹ค : ๋ฏธํ„ฐ๋ฒ• ๋‹จ์œ„๋กœ ์ž์‚ฐ์„ ํ˜„์‹ค์ ์ธ ๊ทœ๋ชจ๋กœ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์€ ๋ฌผ๋ฆฌ์  ๊ธฐ๋ฐ˜ ๊ฒŒ์ž„์„ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๊ตฌ์ถ•ํ•˜๋Š” ๋ฐ ํ•„์ˆ˜์ ์ž…๋‹ˆ๋‹ค. :)

๋‚˜๋Š” ๋‹น์‹ ์„ ํŠธ๋กค๋งํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
๊ทธ๋Ÿฌ๋‚˜ 1.5 ๋‹จ์œ„๋Š” 1.5 ๋ฏธํ„ฐ๋ฅผ ์˜๋ฏธํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
๊ฑด๋ฐฐ

๋ฟก๋ฟก

๋‚˜๋Š” ์ฃผ์žฅํ•ฉ๋‹ˆ๋‹ค : ๋ฏธํ„ฐ๋ฒ• ๋‹จ์œ„๋กœ ์ž์‚ฐ์„ ํ˜„์‹ค์ ์ธ ๊ทœ๋ชจ๋กœ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์€ ๋ฌผ๋ฆฌ์  ๊ธฐ๋ฐ˜ ๊ฒŒ์ž„์„ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๊ตฌ์ถ•ํ•˜๋Š” ๋ฐ ํ•„์ˆ˜์ ์ž…๋‹ˆ๋‹ค. :)

๊ทธ๋Ÿฌ๋‚˜์ด ์ฒ™๋„๋Š” ์ž„์˜์˜ ์ž์ฒด ๋ถ€๊ณผ ๊ฐ’์ž…๋‹ˆ๋‹ค. ์„ผํ‹ฐ๋ฏธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด "๋†’์ด๊ฐ€ 120 ์ธ ์•„๋ฐ”ํƒ€ ๋ฉ”์‹œ"๋Š” ์‹ค์ œ๋กœ ํ‰๊ท ๋ณด๋‹ค ์ž‘์Šต๋‹ˆ๋‹ค.

@makc ๋ฌผ๋ก ์ž…๋‹ˆ๋‹ค.ํ•˜์ง€๋งŒ ๋ฌผ๋ฆฌ ์—”์ง„ / libs์—์„œ๋Š” ๋ฏธํ„ฐ๋ฒ• ๊ฐ’์„ ์‚ฌ์šฉํ•  ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฏธ ํฌ๊ธฐ๊ฐ€ ์กฐ์ • ๋œ ์˜ค๋ธŒ์ ํŠธ ๋˜๋Š” ๋น„ ๋ฉ”ํŠธ๋ฆญ ๊ฐ’์œผ๋กœ ์ผ๋ถ€ ๋ฌผ๋ฆฌ๋ฅผ ์‹œ๋„ ํ–ˆ์Šต๋‹ˆ๊นŒ? ๊ฐœ๋ฐœํ•˜๋Š” ๊ฒƒ์€ ๊ธˆ๋ฐฉ ๋”์ฐ ํ•ด์ง€๊ณ  ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ๋น„ํ˜„์‹ค์ ์ธ ๊ฒฐ๊ณผ๋ฅผ ์–ป๊ฒŒ๋ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ๋ณ‘๋ ฅ๋„ ๊ฒ€ํ† ๋˜๊ณ  ํ™•์žฅ๋˜์–ด์•ผํ•ฉ๋‹ˆ๋‹ค. ์ž‘๋™ํ•˜์ง€๋งŒ ์ •ํ™•ํ•˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค.

๋ฌผ๋ก  ๋‹ฌ์„ฑํ•ด์•ผํ•˜๋Š” ์ •๋ฐ€๋„ ์ˆ˜์ค€์— ๋”ฐ๋ผ ๋‹ค๋ฅด๋ฉฐ 1e6, 1e7, ...๊ณผ ๊ฐ™์€ ๊ฐ’์€ ๋„ˆ๋ฌด ์ปค์„œ ์ •๋ฐ€๋„ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  skinnedmesh๋ฅผ ๊ทธ๋ ‡๊ฒŒ ๋ฉ€๋ฆฌ ์ด๋™ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๊ทธ๊ฒƒ์— ๋Œ€ํ•ด ๋™์˜ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ iOS์—์„œ๋Š” ์ ์–ด๋„ ์ˆ˜๋ฐฑ ๋‹จ์œ„ ๋ฒ”์œ„์—์„œ GPU skinnedmesh (1.5 ๋‹จ์œ„ ๋†’์ด)๋ฅผ ์ด๋™ํ•  ์ˆ˜ ์žˆ์–ด์•ผํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ๋ฌผ๋ฆฌ ์—”์ง„ / libs๋Š” ๋ฉ”ํŠธ๋ฆญ ๊ฐ’์„ ์‚ฌ์šฉํ•˜๊ธฐ๋ฅผ ๊ธฐ๋Œ€ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๊ฑด ์‚ฌ์‹ค์ด ์•„๋‹ˆ์•ผ.
๋ฏธํ„ฐ, ์„ผํ‹ฐ๋ฏธํ„ฐ, ์ธ์น˜ ๋“ฑ์€ ๊ด€๋ จ์ด ์—†์Šต๋‹ˆ๋‹ค.
์ „์— ๋งํ–ˆ๋“ฏ์ด (์—ฌ๋Ÿฌ ๋ฒˆ) ์ค‘์š”ํ•œ ๊ฒƒ์€ ์„ธ๊ณ„ ํฌ๊ธฐ (๊ทœ๋ชจ)์™€ ์ •ํ™•์„ฑ์ž…๋‹ˆ๋‹ค.
๋‹ค์Œ ์‚ฌํ•ญ์— ์œ ์˜ํ•˜์‹ญ์‹œ์˜ค.
๋†’์ด๊ฐ€ 1.5 ๋‹จ์œ„ ์ธ ์Šคํ‚ค๋‹ ๋œ ๋ฉ”์‹œ๊ฐ€์žˆ๋Š” ๊ฒฝ์šฐ ์ •์  ๊ฐ€์ค‘์น˜ ๋งต์—์„œ ์ตœ์†Œ 2-3 ๊ฐœ์˜ ์†Œ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ๊ฐ•์ œ๋ฉ๋‹ˆ๋‹ค.
๋ฌผ๋ฆฌ ์—”์ง„ (์žˆ๋Š” ๊ฒฝ์šฐ)์˜ ๊ฒฝ์šฐ ํ—ˆ์šฉ ๊ฐ€๋Šฅํ•œ ๊ฒฐ๊ณผ๋ฅผ ์œ„ํ•ด 3-4 ๊ฐœ์˜ ์†Œ์ˆ˜๊ฐ€ ํ•„์š”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์ „์—ญ ์ •ํ™•๋„์— 4 ์ž๋ฆฌ ์†Œ์ˆ˜๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์ตœ๋Œ€ ์„ธ๊ณ„ ํฌ๊ธฐ๋Š” 999์ž…๋‹ˆ๋‹ค (๋‹จ ์ •๋ฐ€๋„ ๋ถ€๋™ ์†Œ์ˆ˜์  ์ž๋ฆฟ์ˆ˜๋Š” 7์ด๊ธฐ ๋•Œ๋ฌธ).
์ฆ‰, ๊ดœ์ฐฎ์€ ์• ๋‹ˆ๋ฉ”์ด์…˜๊ณผ ๊ดœ์ฐฎ์€ ๋ฌผ๋ฆฌํ•™์„ ์›ํ•œ๋‹ค๋ฉด ์ˆ˜๋ฐฑ์˜ ๊ฑฐ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์ด๋ฒˆ์—๋Š” ์ „์ฒด ์‚ฌ์ง„์„ ์–ป์œผ ์…จ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.
๊ฑด๋ฐฐ

@RemusMar ์—ฌ๊ธฐ์„œ ๋ฉˆ์ถœ ๊ฒŒ์š”. iOS ๊ธฐ๊ธฐ์—์„œ ์ผ€์ด์Šค๋ฅผ ํ…Œ์ŠคํŠธํ•˜์ง€ ์•Š์•˜๊ฑฐ๋‚˜ ์›ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. GPU skinnedmeshes๊ฐ€์žˆ๋Š” ์ด๋Ÿฌํ•œ ์žฅ์น˜์—์„œ๋Š” "์ˆ˜๋ฐฑ ๊ฑฐ๋ฆฌ"๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋ฉ”์‹œ๊ฐ€ ๋งค์šฐ ๋นจ๋ฆฌ ๋ฏธ์ณ ๋ฒ„๋ฆฝ๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด์ด ์Šค๋ ˆ๋“œ์˜ ์š”์ ์ด๋ฉฐ ์ฒ˜์Œ์—์ด๋ฅผ๋ณด๊ณ ํ•˜๊ณ  ์‹ถ์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒŒ ๋‹ค์ž…๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์—์žˆ๋Š” ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค๊ณผ ๋‚ด ํ™”๋ฉด ์บก์ฒ˜์— ์˜ํ•ด๋ณด๊ณ  ๋œ๋Œ€๋กœ ๋ชจ๋“  ์ œ์•ˆ๊ณผ ์ƒ˜ํ”Œ์ด iOS ์žฅ์น˜์—์„œ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ์‚ฌ์‹ค์„ ์•Œ๊ณ  ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

GPU skinnedmeshes๊ฐ€์žˆ๋Š” ์ด๋Ÿฌํ•œ ์žฅ์น˜์—์„œ๋Š” "์ˆ˜๋ฐฑ ๊ฑฐ๋ฆฌ"๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๋˜ ํ‹€๋ ธ์–ด.
์œ„์˜ ์Šคํฌ๋ฆฐ ์ƒท์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค (Android 7-Samsung ํœด๋Œ€ํฐ).
๋ชจ๋ธ ๋†’์ด = 75 (๊ฒฝ๊ณ„ ๊ตฌ ๋ฐ˜๊ฒฝ ์•ฝ 38) ๋ฐ ๊ฑฐ๋ฆฌ 1,000,000 (๋ฐฑ๋งŒ !!!)
๋˜๋Š” ๋ชจ๋ธ ๋†’์ด = 1.5 ๋ฐ ๊ฑฐ๋ฆฌ 20,000.

์ถ”์‹ 
iOS๊ฐ€ ํ•ญ์ƒ ๋ฒ„๊ทธ ๋ชจ์Œ์ด๋ผ๋Š” ๊ฒƒ์ด ๋‚ด ๋ฌธ์ œ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.

@RemusMar ๋‚ด๊ฐ€ ํ‹€๋ฆฐ ๊ฒŒ ์•„๋‹ˆ์—์š”, ๋‹น์‹ ์€ ํŠธ๋กค. ๋‚˜๋Š” iOS์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๊ณ  ์žˆ๊ณ  ๋‹น์‹ ์€ ๋‹ค๋ฅธ ์žฅ์น˜์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹น์‹ ์€ ํ™”๋‚ฌ์Šต๋‹ˆ๊นŒ ??

๋‹น์‹ ์ด ์• ํ”Œ์„ ๋„ˆ๋ฌด ์‹ซ์–ดํ•œ๋‹ค๋ฉด ๋‚ด ๋ฌธ์ œ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ๋‚ด ๊ณ ๊ฐ ์ค‘ ํ•œ ๋ช…์ด ThreeJS๋กœ ๋งŒ๋“  3D ์›น ๊ธฐ๋ฐ˜ ๊ฒŒ์ž„์„ ์›ํ•  ๋•Œ "iPhone์œผ๋กœ ์ข†๊นŒ"๋ผ๊ณ  ๋งํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ฒŒํ•œ๋‹ค๋ฉด ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์„œ ์ „์†ก์˜ ๋ ... ๋” ์ด์ƒ ๋”ฐ๋ผ๊ฐˆ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

@OrtOfOn ์˜ˆ, ์ œ๊ฐ€ ์‚ฌ์šฉํ•œ ๋ชจ๋ธ์—๋Š” 19 ๊ฐœ์˜ ๋ผˆ๊ฐ€ ์žˆ๊ณ  404 fbx์—๋Š” 67 ๊ฐœ์˜ ๋ผˆ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

https://github.com/mrdoob/three.js/issues/13288#issuecomment -364550036์—๋Š” ๊ท ์ผ ํ•œ ๋ผˆ ์ œํ•œ์„ ๋ณด์—ฌ์ฃผ๋Š” ํŽ˜์ด์ง€์— ๋Œ€ํ•œ ๋งํฌ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ํŽ˜์ด์ง€์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ณต์‹์€ Math.floor((data.webgl.params.MAX_VERTEX_UNIFORM_VECTORS - 20) / 4); ์ž…๋‹ˆ๋‹ค. three.js์˜ ๊ฒฝ์šฐ 100 % ์ •ํ™•ํ•œ์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์ง€๋งŒ iPhone X์—์„œ๋„ 27 ๊ฑด์„๋ณด๊ณ ํ•ฉ๋‹ˆ๋‹ค. ๋ถˆํ–‰ํžˆ๋„ Galaxy S3์˜ ์ ˆ๋ฐ˜๋„ ์•ˆ๋˜์ง€๋งŒ ์—ฌ์ „ํžˆ ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋ฐ”์ผ WebGL ๊ฒŒ์ž„. ๋‚ด ์ž‘์—… ํด๋”์™€ 26 ๊ฐœ์˜ WebGL ํ”„๋กœ์ ํŠธ์—์„œ ๋‹จ ํ•˜๋‚˜๋งŒ ๋” ๋งŽ์€ ๋ผˆ๊ฐ€์žˆ๋Š” ๋ชจ๋ธ์„ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉฐ ํ•ด๋‹น ๋ชจ๋ธ์€ 0,0,0์— ์œ ์ง€๋ฉ๋‹ˆ๋‹ค.

@OrtOfOn : ๊ณ ์ • ๋œ ์žฅ๋ฉด์—์„œ ๋น„์Šทํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๊ณ  ์žฅ๋ฉด์—์„œ ์Šคํ‚จ์ด ์ ์šฉ๋œ ์บ๋ฆญํ„ฐ๊ฐ€ ์›€์ง์ž…๋‹ˆ๋‹ค. ์บ๋ฆญํ„ฐ๊ฐ€ iOS์—์„œ ์‹ฌํ•˜๊ฒŒ ํ”๋“ค๋ฆฝ๋‹ˆ๋‹ค. ๋ผˆ์˜ ์ˆ˜๋Š” 22์ž…๋‹ˆ๋‹ค. ์žฅ๋ฉด์˜ ํฌ๊ธฐ๋Š” ํ•ฉ๋ฆฌ์ ์ž…๋‹ˆ๋‹ค. ๋ฌธ์ œ๋Š” ์ •์  ํ…์Šค์ฒ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด Threejs๊ฐ€ ์›”๋“œ ๊ณต๊ฐ„์—์„œ ์Šคํ‚ค๋‹์„ ๊ณ„์‚ฐํ•œ๋‹ค๋Š” ์œ„์˜ ์ฃผ์žฅ๊ณผ ํ•จ๊ป˜ 32 ๋น„ํŠธ ๋ถ€๋™ ์†Œ์ˆ˜์ ์œผ๋กœ ์ œํ•œ๋œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ง€๊ธˆ ์„ธ๊ณ„ ๊ณต๊ฐ„ ์ฃผ์žฅ์„ ์กฐ์‚ฌํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, ์ง€์—ญ ๊ณต๊ฐ„์—์„œ ์ˆ˜์ง ์œ„์น˜๋ฅผ ๊ณ„์‚ฐ ํ•œ ๋‹ค์Œ ๊ฐ์ฒด๋ฅผ ๋ฒˆ์—ญํ•˜๋Š” ์ ์ ˆํ•œ ๋ฐฉ๋ฒ•์„ ๊ตฌํ˜„ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์Šคํ‚ค๋‹์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ์ฒด๋ฅผ ์›”๋“œ ๊ณต๊ฐ„์— ๋ฐฐ์น˜ํ•˜๋Š” ์‚ฌ๋žŒ์— ๋Œ€ํ•ด ๋“ค์–ด ๋ณธ ์ ์ด ์—†์–ด์„œ ๊ตฌํ˜„์ž๊ฐ€ ์™œ ๊ทธ๋Ÿฐ ์ผ์„ํ–ˆ๋Š”์ง€ โ€‹โ€‹๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.

ํ•ด๊ฒฐ์ฑ…์ด ์žˆ์œผ๋ฉด ๋‹ค์‹œ ๊ฒŒ์‹œํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

์ฐธ๊ณ ๋กœ ios์˜ float ํ…์Šค์ฒ˜๋Š” ๋ฒ„ํ…์Šค ์…ฐ์ด๋”๋กœ๋งŒ ๊นจ์ง€์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ตœ๊ทผ์— ios์—์„œ ์ƒ‰์ƒ ๋ฐด๋”ฉ์„ ์ˆ˜์ •ํ•˜๊ธฐ ์œ„ํ•ด float ํ…์Šค์ฒ˜๋ฅผ ์ •์ˆ˜ ํ…์Šค์ฒ˜๋กœ ๋ณ€๊ฒฝํ•˜๊ณ  ์žˆ์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ณดํŽธ์  ์ธ ios ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ์ •๋ง๋กœ ์›ํ•œ๋‹ค๋ฉด ์ •์ˆ˜ ํ…์Šค์ฒ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ios์˜ ๋ผˆ๋ฅผ ์ˆ˜์ •ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์— ๋‹ค๋ฅธ ์‚ฌ๋žŒ์˜ ์…ฐ์ด๋”์—์„œ ๊ฐ€์ ธ์˜จ ๊ด€๋ จ ์Šค ๋‹ˆํŽซ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

vec2 encodeFloatRG( float v )
{
    vec2 kEncodeMul = vec2(1.0, 255.0);
    float kEncodeBit = 1.0/255.0;
    vec2 enc = kEncodeMul * v;
    enc = fract (enc);
    enc.x -= enc.y * kEncodeBit;
    return enc;
}

float decodeRGFloat( vec2 enc )
{
    vec2 kDecodeDot = vec2(1.0, 1.0/255.0);
    return dot( enc, kDecodeDot );
}

... ์‚ฌ์‹ค, ๋‹น์‹ ์€ ์•„๋งˆ๋„ (์—ฌ๊ธฐ์„œ๋Š” ๊ทธ๋Ÿฐ ๊ฒƒ์„ ์‹œ๋„ํ•˜์ง€ ์•Š์•˜๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค), ios ์ •๋ฐ€๋„๋ฅผ ์ „์—ญ ์ •๋ฐ€๋„ ์ œํ•œ์œผ๋กœ ๋ฐ›์•„๋“ค์ด๊ณ  ํ•˜๋‚˜๊ฐ€ ์•„๋‹Œ 2 ๊ฐœ์˜ float๋ฅผ ํ…์Šค์ฒ˜์— ์ €์žฅํ•œ๋‹ค๋ฉด ํ”Œ๋กœํŠธ ๋ณธ ํ…์Šค์ฒ˜๋„ ์ž‘๋™ํ•˜๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” threejs๊ฐ€ ์†ํ•œ ์ง€์—ญ ๊ณต๊ฐ„์—์„œ ์Šคํ‚ค๋‹ ๊ณ„์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ์„ธ๊ณ„ ๊ณต๊ฐ„ ๋งคํŠธ๋ฆญ์Šค๋ฅผ ํ†ตํ•ด ํ‘œ์ค€ ๋ฐฉ์‹์œผ๋กœ ๋ชจ๋ธ์„ ์‹ค์ œ ์„ธ๊ณ„ ์ขŒํ‘œ๋กœ ๋ณ€ํ™˜ํ•จ์œผ๋กœ์จ ๋ฌธ์ œ๋ฅผ ์™„์ „ํžˆ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค.

์œ„์˜ ๋ฌธ์ œ๋Š” iOS ์Šคํ‚ค๋‹์—์„œ ์™„์ „ํžˆ ์ˆ˜์ •๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ์ด ์†”๋ฃจ์…˜์€ ๋ณดํŽธ์ ์ด๋ผ๋Š” ์ ์„ ์ง€์ ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ํ…Œ์ŠคํŠธ ํ•œ Android ๊ธฐ๊ธฐ๋Š” ๋ฌผ๋ก  ๋ชจ๋“  ๋ฐ์Šคํฌํ†ฑ ๋ธŒ๋ผ์šฐ์ €์—์„œ ์™„๋ฒฝํ•˜๊ฒŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. IMHO ๋กœ์ปฌ ๊ณต๊ฐ„ ์Šคํ‚ค๋‹์€ ๊ฑฐ์˜ ๋ชจ๋“  ๊ฒฝ์šฐ์— ์˜ฌ๋ฐ”๋ฅธ ๋ฐฉ๋ฒ•์ด๋ฉฐ์ด ๋ฐฉ๋ฒ•์€ ThreeJS์˜ ๊ธฐ๋ณธ๊ฐ’์ด์–ด์•ผํ•ฉ๋‹ˆ๋‹ค. @mrdoob : ์ด๊ฒƒ์— ๋Œ€ํ•œ ๋‹น์‹ ์˜ ๊ฒฌํ•ด๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

mesh = new THREE.SkinnedMesh(geo.geometry, mat);
mesh.bindMode = 'detached';
var skel = new THREE.Skeleton(bones, boneInvs);
var bsm = new THREE.Matrix4().fromArray(geoPrims.bsm);
mesh.bind(skel, bsm);

// make bsmInv identity for models that have multiple skins
mesh.bindMatrixInverse = new THREE.Matrix4();

// patch SkinnedMesh's updateMtxWorld:
// we're using local skinning, so don't keep resetting binMatrixInverse (leave identity)
// the reason we're using .bind here is for models that have more than one skin
mesh.updateMatrixWorld = PatchSkinnedMeshUpdateMW.bind(mesh);

// re-normalize since input data has been compressed
mesh.normalizeSkinWeights();

// remove bone roots and add to bone root list
for (var bi = 0, bl = bones.length ; bi < bl ; bi++) {
    if (bones[bi].parent && !bones[bi].parent.isBone) {
        bones[bi].parent.remove(bones[bi]);
        boneRoots.push(bones[bi]);
    }
}

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

๊ทธ๋ฆฌ๊ณ  ๋‹ค์Œ์€ threeJS์˜ SkinnedMesh ๊ตฌํ˜„์„ ๋Œ€์ฒดํ•˜๋Š” ํŒจ์น˜์ž…๋‹ˆ๋‹ค (threejs์˜ updatematrixworld๊ฐ€ ์šฐ๋ฆฌ๊ฐ€ ID๋กœ ์œ ์ง€ํ•˜๋ ค๋Š” bindMatrixInverse๋ฅผ ๋ฐฉํ•ดํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค). ๋˜๋Š” ํŒจ์น˜ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋Œ€์‹  THREE.Mesh..prototype.UpdateMatrixWorld์— ์ง์ ‘ ๋ฐ”์ธ๋”ฉ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

function PatchSkinnedMeshUpdateMW( force ) {
    THREE.Mesh.prototype.updateMatrixWorld.call( this, force );
}

@ denbo-ft ๋‚˜์—๊ฒŒ ์ข‹์€ ์†Œ๋ฆฌ๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. PR์„ ์ž‘์„ฑ ํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

@ denbo-ft ๊ท€ํ•˜์˜ ๋…ธ๋ ฅ์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ๋‹ต์žฅ์ด ๋Šฆ์–ด์„œ ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ๋” ์ด์ƒ์ด ์Šค๋ ˆ๋“œ๋ฅผ ํŒ”๋กœ์šฐํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

์šฐ๋ฆฌ ์ œํ’ˆ์—๋„์ด ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ๋ธŒ๋ผ์šฐ์ € (0,0,0์—์„œ ์ถฉ๋ถ„ํžˆ ๋ฉ€๋ฆฌ ๋–จ์–ด์ ธ์žˆ๋Š” ๊ฒฝ์šฐ)์ด์ง€๋งŒ ์•ฝ 2-3 ๋‹จ์œ„ ๋–จ์–ด์ ธ ์žˆ์œผ๋ฉด iOS์—์„œ ๋” ๋‘๋“œ๋Ÿฌ์ง‘๋‹ˆ๋‹ค. ์šฐ๋ฆฌ์—๊ฒŒ ๋น„ํŒ์ ์ด์ง€๋งŒ ์ ์–ด๋„ ์šฐ๋ฆฌ๊ฐ€ ์ด๊ฒƒ์„ ๋ณผ ๋•Œ ์šฐ๋ฆฌ๋Š” ์ข‹์€ ์›ƒ์Œ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
image

์ด๊ฑธ ํ•„์š”๋กœํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์ด ๋” ๋งŽ์€ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” github ์˜คํ”ˆ ์†Œ์Šค ํ”„๋กœ์ ํŠธ์— ๊ธฐ์—ฌํ•œ ์ ์ด ์—†์ง€๋งŒ git์— ์ต์ˆ™ํ•˜๋ฉฐ PR์„ ๋งŒ๋“ค๋ ค๊ณ  ๋…ธ๋ ฅํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. :)

์—ฌ๊ธฐ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค. ๋‚ด SkinnedMesh๋Š” iPhone์˜ ์ „๋ฌธ ์น˜๋ฃŒ์‚ฌ Dr. Katz์˜ ์—ํ”ผ์†Œ๋“œ์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ฐธ๊ณ ๋กœ, 5 ์›” 21 ์ผ์˜ ๊ฒŒ์‹œ๋ฌผ์— ์ „์ฒด ์†”๋ฃจ์…˜์ด ์žˆ์Šต๋‹ˆ๋‹ค. ThreeJS ์†Œ์Šค์— ๋Œ€ํ•œ ์ˆ˜์ • ์‚ฌํ•ญ์€ ๋งŽ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ์ˆ˜์ • ์‚ฌํ•ญ์€ ๊ฐœ๋ณ„ ํ”„๋กœ์ ํŠธ์˜ ๋กœ๋” ๋ฐ / ๋˜๋Š” ์žฅ๋ฉด ์„ค์ • ์ฝ”๋“œ์— ์žˆ์Šต๋‹ˆ๋‹ค.

๊ธฐ๋ณธ ์ˆ˜์ •์€ '๋ถ„๋ฆฌ'๋ชจ๋“œ (๋ฌธ์„œํ™”๋˜์ง€ ์•Š์Œ, btw)๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ๋ผˆ ๊ณ„์ธต ๊ตฌ์กฐ๋ฅผ ์‹ค์ œ ๋ Œ๋”๋ง ๊ฐ€๋Šฅํ•œ ์บ๋ฆญํ„ฐ ๊ณ„์ธต์ด ์•„๋‹Œ ๋ฃจํŠธ ์žฅ๋ฉด ์ˆ˜์ค€์—์„œ ์žฅ๋ฉด์— ๋ฐฐ์น˜ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ์—”์ง„ (SkinnedMesh.update)์—์„œ ๊ฐ„๋‹จํ•œ ํ•œ ๊ฐ€์ง€๋ฅผ ํŒจ์น˜ํ•˜๋ฉด ๋ฐ”๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํŽธ์ง‘ํ•˜๋‹ค:
์šฐ๋ฆฌ๋Š” TJS๋ฅผ์œ„ํ•œ ์™„์ „ํ•œ ์‚ฌ์šฉ์ž ์ •์˜ ํŒŒ์ผ ํ˜•์‹๊ณผ ๋กœ๋”๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฏ€๋กœ, ๋ถˆํ–‰ํžˆ๋„ ์˜ˆ์ œ ์†”๋ฃจ์…˜์œผ๋กœ ์™„์ „ํ•œ PR์„ ์ƒ์„ฑํ•˜๋ ค๋ฉด ์ œ๊ณต๋œ ์บ” ๋กœ๋” (์˜ˆ : Collada) ์ค‘ ํ•˜๋‚˜๋ฅผ ์ˆ˜์ •ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ง€๊ธˆ ์ด๊ฒƒ์„ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์ข€ ๋” ์ผ๋ฐ˜์ ์ธ ๋ฐฉ์‹์œผ๋กœ ์†”๋ฃจ์…˜์„ ์ดํ•ดํ•˜๊ณ  ์ ์šฉํ•˜๋Š” ๋ฐ ์‹œ๊ฐ„์„ ํ• ์• ํ•˜๋ ค๊ณ ํ–ˆ์Šต๋‹ˆ๋‹ค (๊ท€ํ•˜์˜ ์†”๋ฃจ์…˜์€ ํ”„๋กœ์ ํŠธ์— ์•ฝ๊ฐ„ ํŠน์ •ํ•œ ๊ฒƒ ๊ฐ™์•˜์Šต๋‹ˆ๋‹ค). ์ฝ”๋“œ์— ๋Œ€ํ•œ ๋” ๋งŽ์€ ์ปจํ…์ŠคํŠธ๋ฅผ ๊ณต์œ  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

์ „๋ฌธ ์น˜๋ฃŒ์‚ฌ Dr. Katz

๋‚˜๋Š” ํ‘น ๋น ์ง„ ๊ฒƒ๋„ ์•„๋‹ˆ์ง€๋งŒ ์  ์žฅ .

ํŽธ์ง‘ํ•˜๋‹ค:

ํ’€ ์š”์ฒญ์„ ์„ฑ๊ณต์ ์œผ๋กœ ์ƒ์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค. ์ถ”๊ฐ€๋กœ ํ•  ์ˆ˜์žˆ๋Š” ์ผ์ด ์žˆ์œผ๋ฉด ์•Œ๋ ค์ฃผ์„ธ์š”.

์›๋ณธ ๊ฒŒ์‹œ๋ฌผ :

๋ณ€๊ฒฝ๋œ ๋กœ์ปฌ ์ง€์ ์ด ์žˆ์ง€๋งŒ ์›๋ณธ์œผ๋กœ ํ‘ธ์‹œ ํ•  ์ˆ˜์—†๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋‚ด github creds๋ฅผ ์ œ๊ณตํ•˜๋”๋ผ๋„ ๋‹ค์Œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

https://github.com/mrdoob/three.js.git๋กœ ํ‘ธ์‹œ
remote : mrdoob / three.js.git์— ๋Œ€ํ•œ ๊ถŒํ•œ์ด denbo-ft์— ๊ฑฐ๋ถ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
์น˜๋ช…์  : ' https://github.com/mrdoob/three.js.git/ '์— ์•ก์„ธ์Šค ํ•  ์ˆ˜ ์—†์Œ : ์š”์ฒญ ๋œ URL์—์„œ ์˜ค๋ฅ˜๋ฅผ ๋ฐ˜ํ™˜ํ–ˆ์Šต๋‹ˆ๋‹ค : 403

์ด๊ฒƒ์ด github์— ๋Œ€ํ•œ ์ฒซ ๋ฒˆ์งธ ๊ธฐ์—ฌ์ด๊ธฐ ๋•Œ๋ฌธ์— ์กฐ์–ธ์„ ์ข‹์•„ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ฐ์‚ฌ!

์ฐธ๊ณ ๋กœ PR์ด mrdoob์—์„œ ์ž‘๋™ํ•˜๊ณ  ํ†ตํ•ฉ ๋œ ๊ฒฝ์šฐ์ด ๋ณ€๊ฒฝ์„ ์ง€์›ํ•˜๋Š” ์ƒˆ๋กœ์šด ๋ฐ”์ธ๋“œ ๋ชจ๋“œ "๋กœ์ปฌ"์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฌธ์„œํ™”๋˜์ง€ ์•Š์€ "๋ถ„๋ฆฌ ๋œ"๋ฐ”์ธ๋“œ ๋ชจ๋“œ๋ฅผ ํŒจ์น˜ํ•˜๊ฑฐ๋‚˜ ๋ณ€๊ฒฝํ•˜๊ณ  ์‹ถ์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๋ˆ„๊ฐ€ ๋˜๋Š” ๋ฌด์—‡์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š”์ง€ ํ‘œ์‹œ๋˜์ง€ ์•Š์•˜๊ณ  ๋‚ด๊ฐ€ ์•Œ์ง€ ๋ชปํ•˜๋Š” ๊ฒƒ์„ ๊นจ๊ณ  ์‹ถ์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ์ด ๋ชฉ์ ์„ ์œ„ํ•ด ์˜๋„ ๋œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋ชจ๋“  binMode = "local"์€ ID๋ฅผ ์œ ์ง€ํ•˜๋Š” ๋Œ€์‹  bindMatrix์˜ ์—ญ์œผ๋กœ โ€‹โ€‹์žฌ์„ค์ •ํ•˜๋Š” "๋ถ„๋ฆฌ"์™€ ๋‹ฌ๋ฆฌ ์—…๋ฐ์ดํŠธ ์ค‘์— bindMatrixInverse๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ด PR์˜ webgl_loader_collada_skinning.html ์˜ˆ์ œ๋ฅผ ์ฐธ์กฐํ•˜์—ฌ ์žฅ๋ฉด์„ ๋Œ์•„ ๋‹ค๋‹ˆ๋Š” ์บ๋ฆญํ„ฐ์— ๋Œ€ํ•œ ์ ์ ˆํ•œ ๋กœ์ปฌ ์Šคํ‚ค๋‹์„ ์–ป๊ธฐ ์œ„ํ•ด ์žฅ๋ฉด ์ˆ˜์ค€์—์„œ ํ•„์š”ํ•œ ๋ช‡ ๊ฐ€์ง€ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค.

Stormtrooper DAE ๋กœ๋” ๋ฐ๋ชจ๋Š”์ด ์ˆ˜์ • ์‚ฌํ•ญ์„ ํ…Œ์ŠคํŠธํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด ์บ๋ฆญํ„ฐ๋Š” ์›์ ์—์„œ 2000 ๋‹จ์œ„ ๋–จ์–ด์ง„ ๊ณณ์œผ๋กœ ์ด๋™ํ–ˆ์Šต๋‹ˆ๋‹ค. ์•„๋ž˜ ์Šคํฌ๋ฆฐ ์ƒท.

์•„๋ž˜ ์‚ฌ์ง„์€ iPhone X / Safari 11์—์„œ ๊ฐ€์ ธ์˜จ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋ณ€๊ฒฝ ์ „ (2000,2000,2000) :
img_0658

์ด ๋ณ€๊ฒฝ ํ›„ :
img_0659

๋ฃจํŠธ ์”ฌ ๋ ˆ๋ฒจ ๋ฐ (0,0,0)์— ๋ผˆ๋Œ€์—†์ด์ด๋ฅผ ๋‹ฌ์„ฑ ํ•  ์ˆ˜์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์‹ญ๋‹ˆ๊นŒ? ๋‚˜๋Š” ๋ผˆ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์•„๋ฐ”ํƒ€์— ๋ฌผ๊ฑด์„ ๋ถ™์ด๊ณ , ํฌ์ธํŠธ๋ฅผ ๋ณด๋„๋กํ•˜๋Š” ๋“ฑ์˜ ์ž‘์—…์„ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ œ๊ฐ€ ์œ ์ผํ•œ ์‚ฌ๋žŒ์€ ์•„๋‹Œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋‘ ๊ฐ€์ง€ ์˜ต์…˜์ด ์žˆ์Šต๋‹ˆ๋‹ค.

1) threejs์—์„œ ๊ตฌํ˜„ ๋œ ๊ฒƒ์ฒ˜๋Ÿผ ๋กœ์ปฌ ์Šคํ‚ค๋‹์˜ ์ด์ ์„ ์–ป์œผ๋ ค๋ฉด ๋ผˆ๋ฅผ ์›”๋“œ ๊ณต๊ฐ„์— ๋ฃจํŠธ๋กœ ์œ ์ง€ํ•˜์‹ญ์‹œ์˜ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ๋ฌด๊ธฐ๋ฅผ ๋ผˆ์— ๊ผญ ๋ถ€์ฐฉํ•ด์•ผํ•˜๋Š” ๊ฒฝ์šฐ (์˜ˆ : ์•„๋ฐ”ํƒ€ ๊ณต๊ฐ„์œผ๋กœ ๊ฐ€์ ธ ์˜ค๊ธฐ ์œ„ํ•ด) ์ถ”๊ฐ€ ๋ณ€ํ˜•์„ ์ˆ˜ํ–‰ํ•˜์‹ญ์‹œ์˜ค.

2) Bones๋ฅผ ์•„๋ฐ”ํƒ€ ๊ณต๊ฐ„์— ๊ทธ๋Œ€๋กœ๋‘๊ณ  iOS์—์„œ ๋’คํ‹€๋ฆผ์„๋ฐ›์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ํ™•์‹คํžˆ # 1์„ ํ•  ๊ฒƒ์ด๋‹ค. ์ด๋ฏธ Bone ์œ„์น˜์™€ ์บ๋ฆญํ„ฐ์˜ ์œ„์น˜๊ฐ€์žˆ์„ ๋•Œ ์–ด๋–ค ํ”„๋ ˆ์ž„์—์„œ๋“  ๋ถ€์ฐฉ ๊ฐ€๋Šฅํ•œ ์˜ค๋ธŒ์ ํŠธ๊ฐ€ ์žˆ์–ด์•ผํ•˜๋Š” ์œ„์น˜๋ฅผ ๊ณ„์‚ฐํ•˜๊ธฐ ์œ„ํ•ด ํ•ญ์ƒ ์ˆ˜ํ•™์„ ์ˆ˜ํ–‰ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์™œ๊ณก์ด iOS ์žฅ์น˜์˜ HAL ์ˆ˜์ค€์—์„œ ํŒจํ‚น๋˜์–ด ๋ฐœ์ƒํ•˜๊ณ  ์ด์— ๋Œ€ํ•ด ํ•  ์ˆ˜์žˆ๋Š” ์ž‘์—…์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— # 2์— ๋Œ€ํ•œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ์—†์Šต๋‹ˆ๋‹ค. ๋ฌผ๋ก  ์œ„์˜ ๋‹ค์–‘ํ•œ HalfWord ํŒจํ‚น ๋“ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ถ”๊ฐ€ ํ•ดํ‚น์„ ์ถ”๊ฐ€ ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๋ชจ๋‘ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๋ฌธ์ œ๋ฅผ ์ค„์ด๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. iOS์˜ ์Šคํ‚ค๋‹ ๋ฌธ์ œ๋Š” ๋กœ์ปฌ ๊ณต๊ฐ„์—์„œ ์Šคํ‚ค๋‹์„ ์ˆ˜ํ–‰ํ•˜๋ฉด ์™„์ „ํžˆ ์‚ฌ๋ผ์งˆ ๊ฒƒ์ž…๋‹ˆ๋‹ค (๋ณด๋‹ค ๊ตฌ์ฒด์ ์œผ๋กœ ๋ผˆ๋ฅผ ์›”๋“œ ์›์ ์„ ์ค‘์‹ฌ์œผ๋กœ ์œ ์ง€ํ•˜์—ฌ ์ˆซ์ž๋ฅผ ๊ฐ€๋Šฅํ•œ ํ•œ ์ž‘๊ฒŒ ์œ ์ง€). ๊ทธ๋Ÿฐ ๋‹ค์Œ ์ฒจ๋ถ€ ํŒŒ์ผ์„์œ„ํ•œ ๋ฌธ์ž ๊ณต๊ฐ„์œผ๋กœ xformํ•ฉ๋‹ˆ๋‹ค.

๋” ๋งŽ์€ ์ •๋ณด:

TJS์—์„œ ๊ตฌํ˜„๋˜๋Š” ๋ฐฉ์‹์˜ ๋ฌธ์ œ๋Š” ํŠน๋ณ„ํžˆ TJS๊ฐ€ ์•„๋‹ˆ์ง€๋งŒ ์…ฐ์ด๋” ํ”„๋กœ๊ทธ๋žจ ๋‹น ์ œํ•œ๋œ ๊ฐœ์ˆ˜์˜ ์œ ๋‹ˆํผ์œผ๋กœ ์ธํ•œ ๋ผˆ ์ œํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด BoneTextures๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๊ฝค ํ‘œ์ค€์ ์ธ ์†”๋ฃจ์…˜์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ iOS์—์„œ๋Š” ํ…์Šค์ฒ˜์˜ ๋ถ€๋™์ด 32 ๋น„ํŠธ๋ณด๋‹ค ์ž‘์€ ๊ฒƒ์œผ๋กœ ์–‘์žํ™” (ํŒจํ‚น / ์••์ถ•)๋ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์ˆซ์ž์˜ ํฌ๊ธฐ / ํฌ๊ธฐ๊ฐ€ "ํฌ๊ฒŒ", ์ฆ‰ ์ˆ˜๋ฐฑ์ด ๋„˜์„ ๋•Œ "์‚ฌ๋งˆ๊ท€"๋˜๋Š” ๋ฌธ์ž์˜ ๋‹ค๋ฅธ ์ด์ƒํ•œ ํšจ๊ณผ๋ฅผ ์œ ๋ฐœํ•ฉ๋‹ˆ๋‹ค.

์ข‹์Šต๋‹ˆ๋‹ค. ์ด์ œ ๋ฌด์—‡์„ํ•ด์•ผํ•ฉ๋‹ˆ๊นŒ? ์Œ, ๊ฒŒ์ž„์˜ ๋ชจ๋“  ํฐ ๊ธฐ๋Šฅ (์‹ค์ œ๋กœ ๊ฒŒ์ž„ ์—”์ง„)์—๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ํ‘œ์ค€ ์‹คํ–‰์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ : ์•„ํ‹ฐ์ŠคํŠธ์—๊ฒŒ ์บ๋ฆญํ„ฐ์˜ ์›์ ์„ ์ค‘์‹ฌ์— ๋‘๋„๋ก ์ง€์‹œํ•˜์‹ญ์‹œ์˜ค. ์บ๋ฆญํ„ฐ์˜ ๋ฃจํŠธ ๋…ธ๋“œ๋ฅผ ๋ฐœ /์ง€๋ฉด์— ๋ฐฐ์น˜ํ•˜๊ณ  ํŠน์ • ๋ฐฉ์‹์œผ๋กœ ๋ผˆ์™€ ์Šคํ‚จ์„ ์ œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ์ˆ˜์ถœ์—…์ž (๋˜๋Š” TJS ์ผ€์ด์Šค์˜ ์ˆ˜์ž…์—…์ž)์™€ ํ”„๋กœ์„ธ์Šค ๊ทœ์น™์„ ์•Œ๊ณ ์žˆ๋Š” ์ˆ˜์ž…์—…์ž๋ฅผ ์ž‘์„ฑํ•˜์‹ญ์‹œ์˜ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ์ด ๊ตฌ์„ฑ์ด์žˆ๋Š” ์ž์‚ฐ์„๋กœ๋“œ ํ•  ๋•Œ ์—”์ง„์˜ ์ตœ์ข… ๊ธฐ๋Šฅ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ์šฐ๋ฆฌ๊ฐ€ ๊ฒŒ์ž„ ์‚ฐ์—…์—์„œ ์ผํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.

๋ชจ๋“  ์ €์ž‘ ๋ฐฉ๋ฒ•, ๋ชจ๋“  ํŒŒ์ผ ํ˜•์‹ ๋ฐ ๋ชจ๋“  ์ผ๋ฐ˜ ๋กœ๋”๊ฐ€ ๊ฒŒ์ž„์˜ ๋ชจ๋“  ๊ธฐ๋Šฅ์„ ์™„๋ฒฝํ•˜๊ฒŒ ์ฒ˜๋ฆฌ ํ•  ๊ฒƒ์œผ๋กœ ๊ธฐ๋Œ€ํ•˜๋Š” ๊ฒƒ์€ ๊ด€๋ฆฌ ํ•  ์ˆ˜์—†๊ณ  ๊ฒฐ์ •์ ์ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค (๊ฒŒ์ž„ ๊ฐœ๋ฐœ์—์žˆ์–ด ๋”์ฐํ•œ ์ผ). ๊ทธ ๊ณผ์ •์—์„œ ๋ช‡ ๊ฐ€์ง€ ํ‘œ์ค€๊ณผ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์žˆ์–ด์•ผํ•ฉ๋‹ˆ๋‹ค.

์บ๋ฆญํ„ฐ๊ฐ€ ์Šคํ‚ค๋‹์„ ์‚ฌ์šฉํ•˜๊ณ  ๋ฌด๊ธฐ ๋“ฑ์— ์ง€์˜ค๋ฅผ ์ฒจ๋ถ€ํ•ด์•ผํ•˜๋Š” ๊ฒฝ์šฐ ์—”์ง„์ด ์Šคํ‚ค๋‹ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๊ฒƒ์ด ๋ฌด์—‡์ธ์ง€ ์ƒ๊ฐํ•œ ๋‹ค์Œ ์ž‘์—…ํ•˜์‹ญ์‹œ์˜ค. ๋‚˜๋Š” ๊ทธ๋Ÿฌํ•œ ์†”๋ฃจ์…˜์„ ์˜ˆ๋กœ ์ œ์‹œํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ถˆํ–‰ํžˆ๋„, ์–ด๋–ค ์ด์œ ๋กœ ๋“  ๋กœ๋”๋ฅผ ๋ณ€๊ฒฝํ•˜๊ณ  ์‹ถ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— PR์ด ์ˆ˜๋ฝ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ์–ด์จŒ๋“ , ๋‚˜๋Š” ๋‚ด๊ฐ€ ์ œ์ถœ ํ•œ PR๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์œ„์˜ ์Šค๋ ˆ๋“œ์˜ ๋ฌธ์ œ์™€ ํ•ด๊ฒฐ์ฑ…์— ๋Œ€ํ•ด ์„ค๋ช…ํ–ˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ์ด๋ฏธ ๊ฐ€์ง€๊ณ ์žˆ๋Š” ๊ฒƒ๋ณด๋‹ค ๋” ๋งŽ์ด ๊ธฐ์—ฌํ•  ์ˆ˜๋Š” ์—†์Šต๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ์–ด๋–ค ์‚ฌ๋žŒ๋“ค์„ ๋„์™” ์œผ๋ฉด ์ข‹๊ฒ ๋Š”๋ฐ ...

ํ–‰์šด์„ ๋น•๋‹ˆ๋‹ค!

iOS์˜ ์Šคํ‚ค๋‹ ๋ฌธ์ œ๋Š” ๋กœ์ปฌ ๊ณต๊ฐ„์—์„œ ์Šคํ‚ค๋‹์„ ์ˆ˜ํ–‰ํ•˜๋ฉด ์™„์ „ํžˆ ์‚ฌ๋ผ์ง‘๋‹ˆ๋‹ค.

์ฒ˜์Œ๋ถ€ํ„ฐ ๋งํ–ˆ๋“ฏ์ด ์ด๋Š” iOS ์ œํ•œ (๋ฒ„๊ทธ)์— ๋Œ€ํ•œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด๋ฉฐ์ด๋ฅผ ์œ„ํ•ด ์ฒ˜๋ฆฌ ๋Šฅ๋ ฅ์„ ๋‚ญ๋น„ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.
๊ทธ๊ฒƒ์€ ํ•ด๊ฒฐ์ฑ…์ด ์•„๋‹™๋‹ˆ๋‹ค!
์‹ค์ œ ํ•ด๊ฒฐ์ฑ…์€ iOS์—์„œ ๋ถ€๋™ ์†Œ์ˆ˜์  ์ •ํ™•๋„๋ฅผ ๋†’์ด๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค (์ผ๋ฐ˜ ๊ฐ’์ธ 7 ์ž๋ฆฌ).
http://davenewson.com/posts/2013/unity-coordinates-and-scales.html

@ denbo-ft ์ €๋Š” ์‹ค์ œ๋กœ ๊ท€ํ•˜์˜ PR์„ ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค (์šฐ๋ฆฌ๋Š” ์ž์ฒด ๋กœ๋”๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค). ๊ท€ํ•˜์˜ ๊ธฐ์—ฌ์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์”ฌ์— ์—ฌ๋Ÿฌ ์•„๋ฐ”ํƒ€๊ฐ€ ์žˆ๊ณ , ์ด๋ฆฌ์ €๋ฆฌ ์›€์ง์ด๊ณ , ์•„์ดํ…œ์„ ์žก๊ณ , ์„œ๋กœ ์ƒํ˜ธ ์ž‘์šฉํ•˜๋Š” ๋“ฑ ๋‹ค๋ฅธ ์ ‘๊ทผ ๋ฐฉ์‹์„ ๋ฐ”๋ž์Šต๋‹ˆ๋‹ค. ์ฝ”๋“œ, ์ƒˆ๋กœ์šด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์œ„ํ—˜์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋ฌธ์ œ์— ๋Œ€ํ•ด ์ƒ๊ฐํ•˜๋Š” ๋ฐ ์‹œ๊ฐ„์„ ๋ณด๋ƒˆ์ง€ ๋งŒ ๋” ๋‚˜์€ ํ•ด๊ฒฐ์ฑ…์„ ์ฐพ์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. (์•„์ง ๋…ธ๋ ฅ ์ค‘)

๋ฟก๋ฟก

์‹ค์ œ ํ•ด๊ฒฐ์ฑ…์€ iOS์—์„œ ๋ถ€๋™ ์†Œ์ˆ˜์  ์ •ํ™•๋„๋ฅผ ๋†’์ด๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋ˆ„๊ตฐ๊ฐ€๋Š” ๋จผ์ € @grorg ์™€ co์—๊ฒŒ ๋ฌผ์–ด ๊ทธ๋Ÿฐ๊ฐ€์š” ? ๊ทธ๋ƒฅ ๋ฒ„๊ทธ๊ฐ€ ์•„๋‹ˆ๋ผ ๋‹ค๋ฅธ ๋ฌธ์ œ์— ๋Œ€ํ•œ ์‚ฌ๊ณผ์˜ "ํ•ด๊ฒฐ์ฑ…"์ด๋ผ๋Š” ๋Š๋‚Œ์ด ๋“ค์–ด์„œ

๊ทธ๋ƒฅ ๋ฒ„๊ทธ๊ฐ€ ์•„๋‹ˆ๋ผ ๋‹ค๋ฅธ ๋ฌธ์ œ์— ๋Œ€ํ•œ ์‚ฌ๊ณผ์˜ "ํ•ด๊ฒฐ์ฑ…"์ด๋ผ๋Š” ๋Š๋‚Œ์ด ๋“ญ๋‹ˆ๋‹ค.

์•„๋งˆ๋„ ์‚ฌ์‹ค ์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
Firefox Android์˜ ๋ฌธ์ œ์™€ ์œ ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๋ฒ„๊ทธ๊ฐ€๋ณด๊ณ ๋˜๊ณ  ๊ฐœ๋ฐœ์ž๊ฐ€ ํ™•์ธํ–ˆ์ง€๋งŒ ์ง€๋‚œ 5 ๊ฐœ์›” ๋™์•ˆ ์ˆ˜์ •๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค (2 ๊ฐœ ๋ฆด๋ฆฌ์Šค)!?!

์˜ค๋Š˜๋‚  ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ์ด ์ž‘๋™ํ•˜๋Š” ๋ฐฉ์‹์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
์˜ฌ๋ฐ”๋ฅธ ์œ„์น˜์— ์ˆ˜์ •ํ•˜๋Š” ๋Œ€์‹  ํƒ€์‚ฌ์— ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค.
์ตœ์ข… ๊ฒฐ๊ณผ : ๋ฒ„๊ทธ ๋ชจ์Œ, ๋‚ญ๋น„ ๋œ ๋ฆฌ์†Œ์Šค ๋ฐ ๋ธ”๋กœ ํŠธ์›จ์–ด !!!

๋ฟก๋ฟก
๋ผˆ ๊ณ„์ธต ๊ตฌ์กฐ๋ฅผ ๋ฃจํŠธ์— ์œ ์ง€ํ•˜๊ณ  ์•„๋ฐ”ํƒ€์˜ ์‹ค์ œ ์œ„์น˜ ๋งคํŠธ๋ฆญ์Šค์˜ martixWorld๋ฅผ ๊ณฑํ•˜์—ฌ ๋ผˆ์˜ ์ตœ์ข… WS ์œ„์น˜๋ฅผ ์žก๋Š” ํ•จ์ˆ˜๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ๋งค์šฐ ๊ฐ„๋‹จํ•˜๋ฉฐ ์ˆ˜์ •ํ•˜๊ธฐ ์ „์— ๊ฐ€์ง€๊ณ  ์žˆ๋˜ ๊ฒƒ์„ ๋Œ๋ ค ์ค„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

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

์ด์ „์—๋Š” ์†”๋ฃจ์…˜์ด ์—†์—ˆ๋˜ ๊ฒƒ์—์„œ ์ด์ œ ๋ชจ๋“  ์žฅ์น˜์™€ ํ˜ธํ™˜๋˜๋Š” ๋ช‡ ๊ฐ€์ง€ ์˜ต์…˜์ด ์žˆ์œผ๋ฉฐ, ์ด๋Š” ๋Œ€๋ถ€๋ถ„์˜ ํ”„๋กœ์ ํŠธ์—์„œ ๋ช…๋ฐฑํ•œ ์š”๊ตฌ ์‚ฌํ•ญ์ž…๋‹ˆ๋‹ค.

0,0,0์—์„œ ๋ผˆ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ๋‹ค๋ฅธ ํ•ญ๋ชฉ์— ๋Œ€ํ•ด ๋ช‡ ๊ฐ€์ง€ ์ถ”๊ฐ€ ํ–‰๋ ฌ ๊ณ„์‚ฐ์„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๊ฐ์‚ฌ!

@ denbo-ft๊ฐ€ ์ •ํ™•ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์„ธ๊ณ„ ๊ณต๊ฐ„์—์„œ ์Šคํ‚ค๋‹์œผ๋กœ ์ธํ•ด ๋ฐœ์ƒํ•˜๋Š” three.js ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

์ฐธ๊ณ ๋กœ, ์—ฌ๊ธฐ์—์„œ world-space-skinning์ด ๋ณ€๊ฒฝ๋˜์—ˆ์Šต๋‹ˆ๋‹ค : https://github.com/mrdoob/three.js/pull/4812.

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

๊ด€๋ จ ๋ฌธ์ œ

yqrashawn picture yqrashawn  ยท  3์ฝ”๋ฉ˜ํŠธ

donmccurdy picture donmccurdy  ยท  3์ฝ”๋ฉ˜ํŠธ

konijn picture konijn  ยท  3์ฝ”๋ฉ˜ํŠธ

scrubs picture scrubs  ยท  3์ฝ”๋ฉ˜ํŠธ

Horray picture Horray  ยท  3์ฝ”๋ฉ˜ํŠธ