ã¡ãã£ãšimriggingãšmixamoã§ç§ã®ãã£ã©ã¯ã¿ãŒãã¢ãã¡ãŒãããŠããŸã...ããããç§ã¯ããããFBXçµç±ã§blenderã«ã€ã³ããŒãããŸã...ããããããªãã®ãšã¯ã¹ããŒã¿ãŒã§ããããjsã«ãšã¯ã¹ããŒãããŸãïŒãã¹ãŠã®ãšã¯ã¹ããŒã¿ãŒãè©ŠããŸãã...ãã¹ãŠïŒã
çµæã¯ããã«ãããŸãïŒ
http://instagram.com/p/y8NQjQkk9-/?modal=true
ãã€ããããªã«æªãã§ããŠç解ã§ããªãããã§ãâŠãã€ãæâŠéªšã®æ°ã ããã§ãã mixamoã¯16ãŸãã¯sthãæã£ãŠããŸãã ãããŠã50以äžã®äŸããã®marine_animã
å åŒãå©ããŠãã ãã...ç§ã®ç¥æµã®çµããã«3æ¥åŸ|ããããåã
ãã®PRhttps ïŒ//github.com/mrdoob/three.js/pull/6052ãããŒãžãããåŸãdevãã©ã³ããããšã¯ã¹ããŒã¿ãŒãè©Šãããšããå§ãããŸãã POSE
ãšREST
2ã€ã®ç°ãªãããŒãºäœçœ®ãªãã·ã§ã³ããããŸãã ã¢ãŒããã¥ã¢ãã©ã¡ããã«èšå®ãããšã¯ã¹ããŒãäžã«Skeletal animation
ããããã£ãäžèŽããããšã確èªããŸãã äž¡æ¹ãè©ŠããŠãã©ã¡ããã圹ç«ã€ãã©ããã確èªããŠãã ããã POSE
æ©èœãã人ãããã°ã REST
ãŸãã
ããŒããã¹ã±ã«ã¿ã«ã¢ãã¡ãŒã·ã§ã³ã®éæ¢ãšããŒãºã¢ãŒãã䜿çšããŠãšã¯ã¹ããŒããããŸãã...
ããã¯ç§ã®ãã¡ã€ã«ã§ãhttp://we.tl/CNM5qEmBMs
å
ã®ãã£ããŒã¬ãšäž¡æ¹ã®ãšã¯ã¹ããŒããå«ã...
ã¬ã¹ãã¢ãŒã=ãŸã£ããåããªã
ããŒãºã¢ãŒã=å¥åŠãªæªã¿
uã¯ãPOSEãšRESTã«ã¯2ã€ã®ç°ãªãããŒãºäœçœ®ãªãã·ã§ã³ããããŸããã¢ãŒããã¥ã¢ãã©ã¡ããã«èšå®ããŠãã ããã...ããŒãºãŸãã¯äŒæ©ã«ã¢ããã¥ã¢ãèšå®ããæ¹æ³ãããããŸãã...ãã¬ã³ããŒããšããŠã®ã¿äœ¿çšãããmixamoããthreejsãžã®ç¿»èš³è ...ç§ã®è³ªåãnoobã§ããå Žåã¯ç³ãèš³ãããŸãã
ãªããžã§ã¯ãã®ç·šéã¢ãŒãã®ããŒãºãšç·šéã¢ãŒããæå³ããŸãããïŒ
OKããŒãºã¢ãŒã---åãæªã¿
次ã®ãšã©ãŒãã°ãç·šéã¢ãŒãã«ããŸãã
ãã®ãšã©ãŒãåçŸããããšã¯ã§ããŸãããããã¬ãŒã¹ããã¯ã®è¡çªå·ãèŠããšã dev
ã«ããåãïŒææ°ã®ïŒããŒãžã§ã³ã§ã¯ãªãå¯èœæ§ãããããšã«æ°ä»ããŸããã ãŸãããã®ã¢ã»ããã§Scene
ãšã¯ã¹ããŒããè¡ã£ãŠããªãããšã確èªããŠãã ããã ä»ã®ãšãããåäžã®ãžãªã¡ããªã®ãšã¯ã¹ããŒããå®è¡ããã ãã§ãïŒObjectLoaderã¯ã¹ãã³ã¡ãã·ã¥ã§ã¯ãŸã æ©èœããªãããïŒã
å£ããã¢ãã¡ãŒã·ã§ã³ã«é¢ããéãã å£ããã¢ãã¡ãŒã·ã§ã³ãšæ¬ èœããŠããã¢ãã¡ãŒã·ã§ã³ã®åé¡ã®äž¡æ¹ãåçŸã§ããŸãã åäœããã¢ãã¡ãŒã·ã§ã³ãšã¯ã¹ããŒã¿ãŒïŒäŸhttps://github.com/mrdoob/three.js/issues/5582#issuecomment-73444737ïŒãå ¥æããŠãã人ãããã®ã§ãFBXã€ã³ããŒãããã»ã¹ã«ããã€ãã®åé¡ãããã®ã§ã¯ãªãããšçã£ãŠããŸãã ããããšã¯ã¹ããŒã¿ãŒã§ãããFBXã€ã³ããŒãã§ããããå€æããã®ã¯éåžžã«å°é£ã§ãã 骚ã«é©çšããå¿ èŠã®ããå€æããããã©ããçåã«æããŸãããããŸã ããããŸããã
ãããããªãã®æéãšæŽå¯åã«æè¬ããŸãïŒ
devã«ããã®ãšåãïŒææ°ã®ïŒããŒãžã§ã³ã䜿çšããŠããªãå¯èœæ§ããããŸãã
ããŒãºãšäŒæ©ãéžæã§ããã®ã§ãææ°ããŒãžã§ã³ã§äœæ¥ããŠãããšæããŸãã
ãã¢ãã¡ãŒã·ã§ã³ãªãã·ã§ã³ã¯ããŠãŒã¶ãŒãPOSEãšRESTã®ã©ã¡ãããéžæããå¿
èŠãããåæåã«ãªããŸããã
ObjectLoaderã¯ã¹ãã³ã¡ãã·ã¥ã§ã¯ãŸã æ©èœããªããã
ç§ã®çµéšãããããã¯çã£ãŠããŸãã...ç§ã¯ãªããžã§ã¯ãããŒããŒã§ãžãªã¡ããªãšã·ãŒã³ãthreejsã«ããŒãããŸããã 次ã®ãšã©ãŒã¯Objectloaderã§äœæããã以åã®Geometrieãšã¯ã¹ããŒããšåãçµæã«ãªããŸãã
å£ããã¢ãã¡ãŒã·ã§ã³ãšæ¬ èœããŠããã¢ãã¡ãŒã·ã§ã³ã®åé¡ã®äž¡æ¹ãåçŸã§ããŸãã
åé¡ãåçŸã§ããªãå Žåã¯ãæ¬åœã«èå³æ·±ãã§ããã...
ãããã£ãŠãã¢ãã«ãthreejsã«ãšã¯ã¹ããŒãããå¯èœæ§ã¯ãããŸãã...
mixamoã«ããã¢ãã«ã®èŒžåºæ¥è ãšããŠäžè¬çã«èå³æ·±ãã ãã®ã¢ãã«ãæ©èœããå Žå-ãã¹ãŠã®mixamoã¢ãã«ãæ©èœããŸãã ïŒçè«çã«ã¯ ;ïŒïŒ
ãšã«ããããã調ã¹ãŠãããŠããããšãã
Blenderã®çŸåšã®ããŒãžã§ã³ã§ããžãªã¡ããªã®ã¿ã§ã·ãŒã³ã®ãšã¯ã¹ããŒãããªãå ŽåãããŒãºã¢ãŒãã«ãªããŸãã
ãšäŒæ¯ã¢ãŒãã§
ç©Žã®ã·ãŒã³ããšã¯ã¹ããŒãããå Žåã«ã®ã¿ããžãªã¡ããªããšã¯ã¹ããŒãã§ããŸã
ããããŸãããèŠã€ãããšæããŸã...ãžãªã¡ããªã®é ç¹ãšã¢ãã¡ãŒã·ã§ã³åãããããŒã³ã®éã®åç §ã®ãã°ã§ã...ã¡ãã·ã¥ãšã¹ã±ã«ãã³ããªãã«ãªã£ãŠããŸã
ãã®ããã«ã¡ãã·ã¥ãã¹ã±ã«ãã³ã«åãã£ãŠæåã§ã¹ã±ãŒãªã³ã°ããã³å転ããåŸ
for (var i = 0; i < geometry.children[0].geometry.vertices.length; i++) {
vector = geometry.children[0].geometry.vertices[i];
var axis = new THREE.Vector3(0, 1, 0);
var angle = Math.PI / 2;
geometry.children[0].geometry.vertices[i].applyAxisAngle(axis, angle);
geometry.children[0].geometry.vertices[i].multiplyScalar(0.01);
}
ããªãè¯ãçµæãåŸãããŸããã
ã ãããŸã第äžã«-ãªãã¡ãã·ã¥ãå転ãããå¿
èŠãããã®ã§ãã... mixamoã«ã€ã³ããŒããããšãã«ã¢ãã«ãæ£ç¢ºã«90床å転ãããªããã°ãªããªãã£ãããšãèŠããŠããŸã...ããã¯-zæ¹åã®ããã§ã
ãªãã¹ã±ãŒãªã³ã°ããã®ã§ããïŒ å
šãåãããªã...
ä»åºŠã¯ç§ã®ã¢ãã«ãå®ç§ãªTPosãæã£ãŠããªãã£ããã°ã®ãããã®ãæ¥ãŸã...è
ãäœããªããŸãã...ç§ã¯ãããmixamoã§ãªã®ã³ã°ããŸããããããŠããã¯ãã®åŸãå®ç§ã§ãã...ç§ã¯ããããã¬ã³ããŒã§èŠãŸãã...ãããŠããã¯å®ç§ã§ãã...ãããæ倧ã§èŠãã®ãå®ç§ã§ããã
次ã«ãThreejsãžã®ãšã¯ã¹ããŒããšãããŒã³ãšããã£éã®ãããã³ã°ã¯ãæåã«äœæãããããã£ãæ倧ã§åç
§ããŠããŸããã
ãããã£ãŠãå€æè¡åã§é ç¹ãšããŒã³ãåç §ããéã«æ°åŠã®ãã°ããããŸãã
ããã¯å®éã«ã¯ãã°ãªã®ãããããšããªãã·ã§ã³æ©èœãªã®ãããã ããã«ãããçºçããŠããåé¡ãååã«ä¿®æ£ã§ããŸãããFBXã¢ã»ãããã€ã³ããŒãããå¿ èŠããªãä»ã®èª°ãã®ãšã¯ã¹ããŒããäžæã§ããŸãïŒPOSEããã³RESTã¢ãã¡ãŒã·ã§ã³ã§ä»¥åã«èŠããã®ïŒã 䜿çšãããŠããããžãã¯ïŒããŒã³ãšé ç¹ïŒã¯ãã°ããã®éïŒå€ããšã¯ã¹ããŒã¿ãŒããã³ããŒãããŠïŒé 眮ãããŠãããå®ç§ã§ãããšãæ¬ é¥ããªããšèšã£ãŠããããã§ã¯ãããŸãããããããæ°åŠã®ãã°ã ã£ããšããããç§ãã¡ã¯èŠããšæããŸãããå€ãã®åé¡ã ã³ãŒãäŸããšã¯ã¹ããŒã¿ãŒã«é©çšããŠãããå€ãã®ãã¹ãã±ãŒã¹ã§å€ãã®ãã¹ããå®è¡ããå¿ èŠããããŸãïŒããã¯ç§ããããã€ããŠãããã®ã§ã¯ãããŸããïŒã
ã¢ã»ãããè€æ°ã®ããã°ã©ã ããšã¯ã¹ããŒã¿ãŒãäœåºŠãçµç±ããçç£ã§ããåæ§ã®åé¡ãçºçããŸãã ãã®æ¹çšåŒã®è»žã®æ¹åãå€æŽãããšãèªèšŒå¯èœãªã·ã§ããã¬ã³ã®ã¬ã·ããåŸãããŸãã ããããšã¯ã¹ããŒã¿ãŒã«å®è£ ããæ¹æ³ãç解ã§ããã°ããããå®éã«ãã¹ãŠã®ãŠãŒã¶ãŒã«é©çšãããã³ãŒããŒã±ãŒã¹ã«ã¯é©çšãããªãããšãã¯ããã«ç¢ºå®ã«ãªããŸã§ããªãã·ã§ã³ã«ãªããŸãã
Blenderã®çŸåšã®ããŒãžã§ã³ã§ããžãªã¡ããªã®ã¿ã§ã·ãŒã³ã®ãšã¯ã¹ããŒãããªãå ŽåãããŒãºã¢ãŒãã«ãªããŸãã
ãšã©ãŒã¯ç¹ã«ãæå¹ãªã¡ãã·ã¥ãªããžã§ã¯ãã§ã¯ãããŸããããšèšã£ãŠããŸãã ãžãªã¡ããªã®ãšã¯ã¹ããŒãã¯éžæããŒã¹ã§ãããã¡ãã·ã¥ã§ã¯ãªãã¢ãŒããã¥ã¢ãéžæãããŠããå¯èœæ§ããããŸãã
ã¡ãã£ãšç·ã¯ããã調ã¹ãŠãããŠããããšãã
ç§ã®ã³ãŒãã¯ãšã¯ã¹ããŒã¿ãŒã«å
¥ãã¹ãã ãšã¯èšããããããŸããã§ããã ç§ãææãããã£ãã®ã¯ãmaxããmixamoãblenderãŸã§ã®ãã§ãŒã³å
ã§ããã¹ãŠãæ¬æ¥ããã¹ãæ¹æ³ã§å²ãåœãŠããããšããããšã§ãã threeJsã«éãããšããšã©ãŒã®åå ãšãªãåçŽãªå€æãªãã»ãããçºçããŸãïŒç§ã®å Žåã¯è
æãšã¹ã±ãŒã«ã§ããïŒããã®å€æã¯ããã€ãŠäœæãããå
ã®ã¡ãã·ã¥ãåç
§ããŠãããblenderã§ã¯ç¡èŠãããŸãããšmixamo ...ãããããšã¯ã¹ããŒãäžã«åŸ©æŽ»ããŸããã
æ®å¿µãªãããç§ã¯ãããªãã¯ã¹ããžã·ã£ã³ã§ã¯ãªãããšãèªããªããã°ãªããŸãããããã§ãªããã°ãçãããäžçæžåœåããŠããã®ã§ãå©ããŠãããããšæããŸãã ããªãã®æŽå¯åãããããšãã
ç§ã¯mixamoã䜿ã£ãããšããããŸããã Y-upã䜿çšããŠããŸããïŒ maximoãY-upã®å ŽåãFBXã€ã³ããŒãã¯ã¢ã»ããã®åããZ-upã«å€æŽããå¿
èŠãããããšã¯ã¹ããŒã¿ãŒã¯Y-upã®åããåã³three
ã«å€æŽããå¿
èŠãããã®ã§ã¯ãªãããšæããŸãã ã¢ã»ããã®å€æãã€ã³ããŒãæã«Blenderã«é©çšããå¿
èŠããããã©ããããããthree
æ£ãããšã¯ã¹ããŒãããããã©ããçåã«æããŸãã
ãªã°ããããã©ãããã©ãŒã /ãã©ãŒãããããå¥ã®ãã©ãããã©ãŒã /ãã©ãŒãããã«å€æããããšã¯ã2ã3å以äžç¹°ãè¿ããšèŠèŠãããªããŸãã ç§ããããŸã§ã«äœ¿çšããäžã§æãé«åºŠãªãã€ãã©ã€ã³ãããŒã«ã®ããã€ãã§ãããäžæ£ãªè³ç£ãééã§ãããã®ã«ã¯åžžã«å¶éããããŸããã ããªããšãã¹ãŠã®äººã«åœ¹ç«ã€è§£æ±ºçããããããããŸãããããããäœã§ãããã¯ããã«ã¯ããããŸããã
ç§ã®ã³ãŒãã¯ãšã¯ã¹ããŒã¿ãŒã«å ¥ãã¹ãã ãšã¯èšããããããŸããã§ããã
ãããŠãç§ã¯ããäžè¬çã«ãé ç¹ã®äœçœ®ã«è»žè§åºŠãé©çšããããšããäœãã«ã€ããŠèšåããŠããŸããã
vector = geometry.children[0].geometry.vertices[i];
var axis = new THREE.Vector3(0, 1, 0);
var angle = Math.PI / 2;
geometry.children[0].geometry.vertices[i].applyAxisAngle(axis, angle); <-- would need something like this as well
ããããç§ãå°ãææ¡ããŠããŸãããããŠå€åããã¯ãšã¯ã¹ããŒã¿ãŒã«ããŸãã«ãå€ãã®å€æ°ãåŠçãããããšããŠããŸã
FBXã«é¢ããèå³æ·±ãã³ã¡ã³ãã¯ãã¡ã
https://github.com/mrdoob/three.js/issues/2803#issuecomment -11458920
ããããè¡ã£ãå転ãã¢ãã«ãšãã¬ã³ããŒãã¡ã€ã«å ã®ã¢ãŒããã¥ã¢ã«é©çšããŸãããïŒ ãªããžã§ã¯ãã¢ãŒãã§ã¯ãctrl + A> Rotation andScaleã䜿çšããŸãã ç§ã¯ãããããªãã£ãããã«éåžžã«äŒŒããããªããšãèµ·ãã£ãŠããã®ãèŠãŠããŸããã @princemio
ã¡ãã·ã¥ãåžžã«æªãã§è¡šç€ºããããããšã©ãŒãçºçããè€æ°ã®ã¢ãã¡ãŒã·ã§ã³ããšã¯ã¹ããŒãã§ããŸããã Blender2.73aã§ãããŸãæ©èœããŠããããã«èŠããr69ãšã¯ã¹ããŒã¿ãŒã«åãæ¿ããŸãã
@ please-åŸ
ã£ãŠãã ãã...å®éã«ã¯ç§ã¯ããŸããã§ãã...ãããå€åmixamoããblenderãŸã§...
@kimasendorfã¯ãthreejsã§ã¡ãã·ã¥ãæåã§åäœæããããšããŸãããïŒ
ã¡ãã·ã¥ã¯Blenderã§ã¢ãã«åãããŸããã äœããªãŽã³ã®ãã£ã©ã¯ã¿ãŒã§ãããthreejsã§ã¡ãã·ã¥ãæåã§åäœæããã®ã¯ç¢ºãã«è€éã§ãã ãããŠãããã¯ã©ã®ããã«åœ¹ç«ã€ã§ããããïŒ
ç§ã®å Žåãã¡ãã·ã¥ãšããŒã³ãäºãã«æŽåããŠããŸãã...ãããã£ãŠãã¢ãã«ã¯ããŒã³ã«ãã£ããããããšããŠæ²ãããŸã...ããŒã³ããªãå Žåãããã¯ãããšã¯äœã®é¢ä¿ããããŸãã...
ãšããã§...ç§ã¯ãåäœæããæå³ããã®ã§ã¯ãããŸããç¬...ç³ãèš³ãããŸããããã¢ãã«ããå調æŽãããããšããŸãã...
ãããŸã§ã«è©Šãããã¹ãŠã®ããè€éãªã¹ã±ã«ãã³ã§åæ§ã®åé¡ãçºçããŸããã three.jsãªããžããªã«å«ãŸããäŸã§çŽ¹ä»ãããŠããããªã³ãå«ã¿ãŸãã ããŒãºã¹ã€ããã䜿çšãããšã次ã®ããã«ãªããŸãã
ããŒãºã®æµ·å
µéå¡ïŒ
https://antont.github.io/three.js/examples/webgl_animation_skinning.html
ãã®ãšã¯ã¹ããŒãã¯æ¬¡ã®ãšããã§ãã
https://github.com/antont/three.js/blob/blenderexport_buggy_marineskinning/examples/models/skinned/marine/marine_anims-pose.json
ãšã¯ã¹ããŒã¿ãŒãã¹ãã®æå°éã®äŸãæ©èœããŸãã ããã§ããŒãºã¢ãŒãã䜿çšãããšãã¹ã±ã«ãã³ãã«ããŒãã¢ãã«ãšäžèŽããŸãã
次ã«ããã§ã«éããããŠããä»ã®åé¡ïŒïŒ4660ïŒãããããã®ããªãã¯ïŒã®ããã€ãïŒãè©ŠããŠã¿ãŸãïŒ
- ãšã¯ã¹ããŒããããã¹ãŠã®ããŒã³ã«ããŒãã¬ãŒã ãå¿ èŠã«ãªããŸãã
- ã¡ãã·ã¥ã¯TããŒãºã§ããå¿ èŠããããŸãã ãããè¡ãã«ã¯ã次ã®2ã€ã®æ¹æ³ããããŸãã TããŒãºã¢ã¯ã·ã§ã³ãå®è¡ããŸãã ãã®ã¢ã¯ã·ã§ã³ã«ã¯ããã¹ãŠã®ããŒã³ã®å€æãã¯ãªã¢ããããã¬ãŒã ãå¿ èŠã§ãã ããã¯ããšã¯ã¹ããŒã¿ãéžæãããŠãããšãã®çŸåšã®ãã¬ãŒã ã§ããå¿ èŠããããŸãã bã ãšã¯ã¹ããŒãã®çŽåã«ã¡ãã·ã¥ããã¢ãŒããã¥ã¢ã¢ãã£ãã¡ã€ã€ãåé€ããŸãã ãã¡ã€ã«ããšã¯ã¹ããŒããããããæåŸã®ã¢ã¯ã·ã§ã³ãå ã«æ»ããŠä¿®é£Ÿåãå ã«æ»ããŸãã
ãããŠïŒ
ã¢ãŒããã¥ã¢ã¢ãã£ãã¡ã€ã€ãä¿æããå Žåã«ã®ã¿ãããæ©èœãããããšãã§ããŸããããé ç¹ã°ã«ãŒããšããŒã³ãšã³ãããŒãã®äž¡æ¹ãç¡å¹ã«ããŸããïŒãã®åŸããšã¯ã¹ããŒãåŸã«å床æå¹ã«ããŸããïŒã ç§ã®å Žåã修食åãåé€ããŠãå¹æã¯ãããŸããã§ããã
ãããããŸãïŒ
ããããè¡ã£ãå転ãã¢ãã«ãšãã¬ã³ããŒãã¡ã€ã«å ã®ã¢ãŒããã¥ã¢ã«é©çšããŸãããïŒ ãªããžã§ã¯ãã¢ãŒãã§ã¯ãctrl + A> Rotation andScaleã䜿çšããŸãã
誰ãããã®ãµã³ãã«ãã¬ã³ãããå®çšçãªãšã¯ã¹ããŒããååŸããããšã§ç§ã殎ããäœãå¿ èŠããæããŠãããã..ã©ããããããšãïŒ :)ãã®ãã¬ã³ãã䜿çšããŠããŸãïŒ https ïŒ
ããã§åäœããŸãããhttpsïŒ//antont.github.io/three.js/examples/webgl_animation_skinning.htmlãæŽæ°ããŸããïŒãã°ã®ããããŒãžã§ã³ã以åã«èŠãå Žåã¯ãä»ãããã£ãã·ã¥ããååŸããªãã§ãã ããïŒ
å€ãã®ããšãè¡ã£ããæ¥ããããŠããã¹ãŠã®ããŒã³ãããŒèšå®ãããŠããããšã確èªããŸãããæ®ããšããŒãºã®ãªãã·ã§ã³ãªã©ã§ãããçµå±ã apply modifiers
ãªã³ã«ãããšãã«å¥åŠãªå€åœ¢ãçºçããããã§ãã ã¢ãŒããã¥ã¢ã¢ãã£ãã¡ã€ã€ããšã¯ã¹ããŒãæã«ããŒã¹ãžãªã¡ããªã«é©çšãããthree.jsã®ã¹ã±ã«ã¢ãã ã«ãã£ãŠããã«å€åœ¢ããããããçã«ããªã£ãŠããŸãã
ãããã£ãŠã https ïŒ ãŸãã
ã¢ãã¡ãŒã·ã§ã³ã¯1ã€ãããªããšæããŸããã次ã«ãæ°ãããšã¯ã¹ããŒãã§ãã¹ãŠã®ã¢ãã¡ãŒã·ã§ã³ããšã¯ã¹ããŒãããæ¹æ³ãç解ããå¿ èŠããããŸãã
䜿çšãããªãã·ã§ã³ã®ã¹ã¯ãªãŒã³ã·ã§ããïŒ
@antontãããç 究ããŠãããŠããããšãïŒ
äž»ã«ã¢ãã¡ãŒã·ã§ã³ã®åé¡ã«åãçµãããã«ãthree.jsçšã«SlackããŒã ãã£ãã«ãã»ããã¢ããããŸãããã3ã€ã«é¢é£ãããã®ãªãäœã§ã䜿çšã§ããŸãã ããã¯ãã©ã€ããŒãããŒã ãã£ã³ãã«ãªã®ã§ãæåŸ ã«ãã£ãŠã®ã¿åå ã§ããŸãã ãæ¢ããŠããŸãïŒ
ããã¯ãšãªãŒã䞻矩çãªããšã§ã¯ãããŸããã ç§ã¯æéã«å¶éãããã誰ãã«PythonãBlenderãæããããã®åž¯åå¹ ããªãã®ã§ããããåå¿è ã«åªãããšæãããªãå Žåã¯ãè©«ã³ããŸãïŒãããIRCã®ç®çã§ãïŒã ããã¯ãå®éã«ããããå°»ã«æã¿ãè²¢ç®ããããã®ããã€ãã®æçšãªã¹ãã«ã»ãããæã£ãŠãã人ã®ããã®ãã®ã§ãã IRCã¯ç§ãèç«ãããgithubã¹ã¬ããã§ããç§ã®ãæ°ã«å ¥ãã®ã³ã©ãã¬ãŒã·ã§ã³å Žæã§ã¯ãããŸããã Slackãä»ã®ã°ã«ãŒããšäžç·ã«äœ¿çšããŠããŠãããã¯çŽ æŽãããããšã§ãã
æåŸ
ç¶ãã¡ãŒã«ã§éã£ãŠãã ããïŒGitHubã®ãã³ãã«ã«ã泚æããŠãã ããïŒ
ed [dot] caspersen [at] gmail [dot] com
ææ°ã®BlenderAPIã®å€æŽã«ããããšã¯ã¹ããŒã¿ãŒãã¡ãã·ã¥äžã®ã¢ã¯ã·ã§ã³ãéžæããããã«äœ¿çšããæ¹æ³ãå£ãããšæããŸãã
ç§ãèŠãŠããïŒå®å šã«ã¯ç¢ºèªãããŠããªãïŒåäœã¯ããšã¯ã¹ããŒã¿ãŒããšã¯ã¹ããŒãããŠããããšã§ãã
Blenderã®æè¿ã®å€æŽã§ã¯ãã¢ã¯ã·ã§ã³ã®å€æŽãå®éã«æå¹ã«ããããã«ãã¢ãŒããã¥ã¢ã3Dãã¥ãŒã§å®éã«éžæããããªããžã§ã¯ãã§ããå¿ èŠããããšæããŸãã
ããã¯ãã¡ãã·ã¥ã®ä»£ããã«ã¢ãŒããã¥ã¢ããšã¯ã¹ããŒãçšã«éžæããããã«ãšã¯ã¹ããŒã¿ãŒãå€æŽããããšã§è§£æ±ºã§ããã¹ã¯ãªããå ã§å®è¡ãããã¢ã¯ã·ã§ã³å€æŽãæ©èœããå ŽåããããŸãã
ãã¬ã³ããŒãšã¯ã¹ããŒã¿ãŒã«ã€ããŠããã«ãµããŒããå¿ èŠãªå Žåã¯ãç¥ãããã ããã2.6ããåã®ã¹ã¯ãªããã«ã¯ãŸãšããªããã¯ã°ã©ãŠã³ãããããŸãã
ãã1ã€ã®åé¡ã¯ãã¹ã¯ãªãããã©ã¡ãŒã¿ãšã¢ãŒããã¥ã¢ã®äž¡æ¹ã§ãrestãã®æ£ããçµã¿åãããéžæããå¿ èŠããã£ãããšã§ãã ããã¯ãããããã§ãã
ãã1ã€ã®åé¡ã¯ããã¢ãã£ãã¡ã€ã€ã®é©çšãã§ãã
ç§ã®ç¥ãéããã¹ãã³ã¡ãã·ã¥ããšã¯ã¹ããŒãããéåžžã®ç¶æ³ã§ã¯ãããã¯æ±ºããŠåœãŠã¯ãŸããªãã¯ãã§ãããããã©ã«ãã§ãªãã«ããããã¹ãã³ã¡ãã·ã¥ãé€å€ããããã®åå¥ã®ãã°ã«ãèšå®ããå¿
èŠããããŸãã
ã¢ãã£ãã¡ã€ã€ãé©çšãããšãã¢ãŒããã¥ã¢ã¯ã¡ãã·ã¥ãçŸåšèšå®ãããŠãããã¬ãŒã ã«å€æããŸãã
ããã¯ã¡ãã·ã¥ã®ãã€ã³ãã£ã³ã°ãããŒã¹ã§ã€ãªãããã®ã¹ã¬ããã®ä»ã®å Žæã«ç€ºãããŠããåé¡ã瀺ããŠããŸãã
ãããã®æé ãåçåããæ¹æ³ãèŠã€ãããšããã§ãããã
ããã€ãã®ãã¹ããå®è¡ãããšã¯ã¹ããŒããããã¢ãã¡ãŒã·ã§ã³ããšã«åãã¢ãã¡ãŒã·ã§ã³ã®ãã¬ãŒã ããšã¯ã¹ããŒã¿ãŒããšã¯ã¹ããŒãããŠããããšã確èªããŸãã...
ããŠã©ãŒã¯ãã¢ã¯ã·ã§ã³ãéžæããŠã¡ãã·ã¥ããšã¯ã¹ããŒãããã®ã§...
ãã¡ã€ã«å
ã®ãã¹ãŠã®ã¢ãã¡ãŒã·ã§ã³ã¯ãç°ãªãååãšç°ãªãé·ãã®ãæ©ããã¢ãã¡ãŒã·ã§ã³ã®ã³ããŒã§ãã
ãã¡ã€ã«å ã®ä»ã®ã¢ãã¡ãŒã·ã§ã³ãããå€ãã®ãã¬ãŒã ãå«ãã¢ã¯ã·ã§ã³ãããå Žåã«ããšã¯ã¹ããŒã¿ãŒãå®å šã«ã¯ã©ãã·ã¥ããªãããšã«é©ããŠããŸãã
ãã®ãã°ã®ç°¡æœãªèª¬æïŒ
ãšã¯ã¹ããŒãããããã¹ãŠã®ã¢ãã¡ãŒã·ã§ã³ããŒãã¬ãŒã ã¯ãç¬èªã®ããŒãã¬ãŒã ã§ã¯ãªããéžæããã¢ãã¡ãŒã·ã§ã³ã®ããŒãã¬ãŒã ã§ãã
ç§ã¯ããã«å¯Ÿããå°ãªããšãéšåçãªä¿®æ£ãèŠã€ããŸãã...
ãio_three \ exporter \ api \ animation.pyãå
ãparse_pose_actionãã®å é ïŒ183è¡ç®ãããïŒ
ã€ã³ãµãŒãïŒ
context.scene.objects.active = armature
ãã®å€æŽã«ãããç¬èªã®ã¢ãã¡ãŒã·ã§ã³ããšã¯ã¹ããŒããããããã«ãªããŸãã...
ããã«ã¡ã¯ããã®ãã£ãŒãããã¯ãšä¿®æ£ã«æè¬ããŸãã æšå¥šãããå€æŽãè¡ãããããŒãºããšãã¢ãã£ãã¡ã€ã¢ã®é©çšã=ãªãã§ãšã¯ã¹ããŒãããŸãããããã¯ããŸãæ©èœããŸãã
ããããšã
context.scene.objects.active =ã¢ãŒããã¥ã¢
ãããè©Šãã®ã楜ãã¿ã«ããŠããŸãã
ç§ãæèµ·ããã®ãšåãåé¡ããããŸããïŒ
https://github.com/mrdoob/three.js/issues/7165
åé¿çã¯ç§ã®ããã«åããŸãããç§ãå®éã«è€æ°ã®ã¢ãã¡ãŒã·ã§ã³ãåããããšãã§ããããšãå¬ããæããŸãã ãããããããšãïŒ
ãããïŒ ã圹ã«ç«ãŠãŠå¬ããã§ãïŒ
ããã®å åã§ããå¯èœæ§ã®ããä»ã®ããã€ãã®ãã°ããã®ã¹ã¬ããã«ãªã³ã¯ããŸããã
@manthrax ïŒéšåçã«ä¿®æ£ïŒã¯ããã¹ã±ã«ã¿ã«ã¢ãã¡ãŒã·ã§ã³ïŒããŒãºãããšã¯ã¹ããŒãããã¢ãŒããã¥ã¢ã¢ãã£ãã¡ã€ã€ã䜿çšãã®éžæã解é€ãããšããŸãæ©èœããŸãã
3ã€ã®ã¢ãã¡ãŒã·ã§ã³ãæ©èœãããã£ã©ã¯ã¿ãŒã®ãã¢> http://unboring.net/lab/6326/hero_72/
ãã¬ã¹ãã¢ãŒããã§ã¢ãã¡ãŒã·ã§ã³ãæ£ãããšã¯ã¹ããŒãããŠå®è¡ããããšã¯å¯èœ/ç°¡åã ãšæããŸããïŒ
ãã®å Žåããšã¯ã¹ããŒã¿ãŒã¯ãã¹ãŠã®ãã¬ãŒã ã§ã¯ãªãããŒãã¬ãŒã ã®ã¿ãæžã蟌ããããjsonãã¡ã€ã«ã¯873kbãã174kbã«ãªããŸã
Slackã®æåŸ ç¶ãéä¿¡ããŸããã ææ¥ã¯ã©ããªæéã«ãªããããããŸããããæ¥ææ¥ã¯æ°æéãããã¯ãã§ãã
@arturituç§ã¯ããã調ã¹ãããšãã§ããŸã...ééã£ãŠããrest_modeããŒãºã®çŸåšã®åäœã¯äœã§ããïŒ
åãåé¡ã®ããã«èŠããŸããïŒ
@repsac ïŒ
çŸåšã倧ããªã¢ãã¡ãŒã·ã§ã³ã®å Žåãç§ã®ãã·ã³ã§ã®ãšã¯ã¹ããŒãã«ã¯é·ãæéãããããŸã...
ã»ãšãã©ã®å Žåããã°ã¹ãã ãåå ã§ããããšãå€æããŸãã...
ãããŠãåã«ãã¬ãŒããªãã«ããŠããããããããã¯ä¿®æ£ãããŸããã ç§ã¯éå»ã«Pythonã¹ã¯ãªããã§ãã®åé¡ãæ±ããŠããŸãã...ãã®ã³ã°åºåãç¡å¹ã«ãªã£ãŠããå Žåã§ããæååã®æ§ç¯ã¯ãã®ã³ã°ã¹ããŒãã¡ã³ãã§è¡ãããŸãã
ãifïŒloggingïŒlog.debugïŒ "blah"ïŒ;ãã®ãããªããšãè¡ãã«ã¯ãã¹ã¯ãªãããæžãçŽãå¿
èŠããããŸãã ãã¹ãŠã®ã¡ãã»ãŒãžããã©ãŒããããããªãŒããŒããããçºçãããªãããã«ããã¹ãŠã®ãã®ã³ã°ã¹ããŒãã¡ã³ãã§ã
ã¢ãã¡ãŒã·ã§ã³/ããŒãã¬ãŒã ã®ãšã¯ã¹ããŒãã§èŠããã°ã¡ãã»ãŒãžãã³ã¡ã³ãã¢ãŠãããã ãã§ããšã¯ã¹ããŒãæéã2åããçŽ5ç§ã«ççž®ãããŸããã
@arturitu rest_poseãšã¯ã¹ããŒããè©ŠããŸãã...å°ãããã¡ã€ã«ãååŸããŸããããåçããããšãããšã¹ã±ã«ãã³ãã€ã³ãã£ã³ã°ãå°ç¡ãã«ãªããŸã...äœãã¢ã€ãã¢ã¯ãããŸããïŒ
å¥ã®ã¡ãã·ã¥ã«ãã€ã³ããããããªã³ãã¬ã³ããã¡ã€ã«ã§ãã¹ãããŠããŸã...
ã¹ã±ã«ã¿ã«ã¢ãã¡ãŒã·ã§ã³ïŒäŒæ¯
ã¹ã±ã«ã¿ã«ã¢ãã¡ãŒã·ã§ã³ïŒããŒãº
@manthrax Restã§ã¯JSONã®ããŒã³éšåã«åé¡ããããšæããŸãããªããªãããããã®å€ãã«ã¯å€ãã®ã芪ãïŒnullããããPoseã§ã¯ããŒã³ã«æ£ãã芪å€ãããããã§ãã ãããŠãããŒã³ã®æ°ã¯ç°ãªããŸãïŒç§ã®å ŽåãããŒãºã¯38ãæžã蟌ã¿ãã¬ã¹ãã¯28ã®ã¿ãæžã蟌ã¿ãŸãïŒ
ããããæ£ããã¢ãã¡ãŒã·ã§ã³ã衚瀺ããããã«ä»ã®çš®é¡ã®BlendCharacter.jsãå¿ èŠãã©ããã¯ããããŸãã
ãifïŒloggingïŒlog.debugïŒ "blah"ïŒ;ãã®ãããªããšãè¡ãã«ã¯ãã¹ã¯ãªãããæžãçŽãå¿ èŠããããŸãã ãã¹ãŠã®ã¡ãã»ãŒãžããã©ãŒããããããªãŒããŒããããçºçãããªãããã«ããã¹ãŠã®ãã®ã³ã°ã¹ããŒãã¡ã³ãã§ã
ããããããã§ã¯ãªããããããŸããããããã¯ãã®ã³ã°ã¢ãžã¥ãŒã«èªäœã®äžã§ã¢ãã¬ã¹å¯èœãããããŸããã ä»ãããèŠãŠãã ãã
ãã1ã€ã®åé¡ã¯ãã¹ã¯ãªãããã©ã¡ãŒã¿ãšã¢ãŒããã¥ã¢ã®äž¡æ¹ã§ãrestãã®æ£ããçµã¿åãããéžæããå¿ èŠããã£ãããšã§ãã ããã¯ãããããã§ãã
ããã§ãããããŠç§ã¯éå»ã«ããã解決ããããšããŸããã ã³ã¡ã³ãã¢ãŠããããã»ã¯ã·ã§ã³ããããŸã
armature.data.pose_position =
ããããšããã Blenderã®ã·ã§ã«ã§è©ŠããŠã¿ããšæ©èœããŸãããããšã¯ã¹ããŒãäžã¯æ©èœããŸããã§ããã ç§ã¯æè¿ã®BlenderããŒãžã§ã³ã§è©Šããããšããªãã®ã§ãããããããã¯ä¿®æ£ãããŸããïŒåã³å£ãããŸã§ïŒã
ãã®å€æŽã«ãããç¬èªã®ã¢ãã¡ãŒã·ã§ã³ããšã¯ã¹ããŒããããããã«ãªããŸãã...
è¯ããã£ããã ãããå¿ èŠãšããBlenderã®ã³ã³ããã¹ãã¢ãŠã§ã¢ãã¹ã¯ãæã«ã¯éåžžã«æé»çã§ããã察åŠããã®ãé¢åã«ãªãããšããããŸãã
ãã°ã®ç¡å¹åã¯ç°¡åã§ããã 3ã€ã®ã¬ãã¯éåžžã«å€§ããã®ã§ããšã¯ã¹ããŒã¿ãŒã«ã®ã¿é¢ä¿ããäžæã¬ããäœæããŸãããæçµçã«ã¯ãã¹ãŠãããŒãžãããŸãã
https://github.com/repsac/io_three
ç§ã®ç¥ãéããã¹ãã³ã¡ãã·ã¥ããšã¯ã¹ããŒãããéåžžã®ç¶æ³ã§ã¯ãããã¯æ±ºããŠåœãŠã¯ãŸããªãã¯ãã§ãããããã©ã«ãã§ãªãã«ããããã¹ãã³ã¡ãã·ã¥ãé€å€ããããã®åå¥ã®ãã°ã«ãèšå®ããå¿ èŠããããŸãã
ãªãããããªã³ã®ãŸãŸã«ããã¹ãããšããè¯ãã±ãŒã¹ãäœãããšãã§ããªãå Žåãã¢ãã¡ãŒã·ã§ã³ãæå¹ã«ãªã£ãŠããå Žåã¯ããããFalse
ã«èšå®ããããšãéžæããŸãã å¯äžã®åé¡ã¯ã·ãŒã³ã®ãšã¯ã¹ããŒãã«ããå¯èœæ§ããããŸããã·ãŒã³ã®ãšã¯ã¹ããŒãã§ã¢ãã¡ãŒã·ã§ã³ããµããŒãããå¿
èŠãããå Žåã¯ãç§ã¯ãã§ã³ã¹ã«ããŸãã Blenderãå
éšã§ã¢ã¯ã·ã§ã³ãåŠçããæ¹æ³ã«åé¡ããããéåžžã«å£ããããããã«èŠããŸãã
@repsacèšãããã£ãã ãã§ãããšã¯ã¹ããŒã¿ãŒã¯çŽ æŽãããã§ãã ç§ã®ã³ã¡ã³ããæ¹å€ãšããŠå€ããªãããšãé¡ã£ãŠããŸã...ç§ã¯éå»ã«ã¯ããã«åå§çãªãã¬ã³ããŒãšã¯ã¹ããŒã¿ãŒãæžããããšããããŸã..ããããããã®ç¯å²ã§ã¯äœããªãã®ã§ãããã倧ããªææã§ãããšèšã£ãŠãéèšã§ã¯ãããŸããã
re LoggingïŒãã®ã³ã°ãã¬ãŒã ã¯ãŒã¯ã®åºåãç¡å¹ã«ããã ãã§ããã°ã¡ãã»ãŒãžã®ãã©ãŒãããã®ãªãŒããŒããããã©ã®ããã«è§£æ¶ããããã¯ãŸã ããããŸãããããã¬ãŒã ã¯ãŒã¯ã®ãã¥ã¢ã³ã¹ãããããªãå¯èœæ§ããããŸãã
ç§ã®ç¥ãéãã "someLoggingFunctionïŒ" formated textïŒxyz "ïŒ"ã®åœ¢åŒã®ãã®ã³ã°ã§ã¯ãé¢æ°ãå éšã§ããã¹ããåºåããªãå Žåã§ããåžžã«ã¡ãã»ãŒãžã®ããã¹ãå€æ/ãã©ãŒããããçºçããŸãã
ãªãŒããŒãããããŒãã®ãã®ã³ã°ã®å ŽåããLogger.logïŒfunctionïŒïŒ{return SomeFormattedText;}ïŒãã®åœ¢åŒããšãå¿ èŠããããŸããæž¡ãããé¢æ°ã¯ããã®ã³ã°ãæå¹ã«ãªã£ãŠããå Žåã«ã®ã¿åŒã³åºãããŸãã
ã çã«ã³ã³ãã€ã«ããã³æé©åãããèšèªã§ã¯ãã³ã³ãã€ã©ãŒã¯é¢æ°ãno-opã§ããããšãæ€åºãããã©ãŒãããåŒã³åºããsklpã§ããå ŽåããããŸãããããã§ãããã©ãŒãããåŒã³åºãã¯ããã°ã©ã ã®æ®ãã®éšåã«å¯äœçšãããããå¯èœæ§ããããããéåžžã¯ãŸã å«ãŸããŠããŸãã
reïŒã¢ãã¡ãŒã·ã§ã³ããµããŒãããã·ãŒã³ã®ãšã¯ã¹ããŒã...
çæçã«ã¯ããã®éãé²ãã®ã¯ããããææå°æ©ã§ããããšã«åæããŸããããããæ©èœãããã€ã³ãã«å°éããå Žåãã¢ãã¡ãŒã·ã§ã³ã§ã¬ãã«å
šäœãæ§ç¯ãããšã¯ã¹ããŒãã§ããããšã¯éåžžã«çŽ æŽãããããšã§ãã WYSIWYGããthree.jsãžã®é¢šè»ã¯å転ããŸã...å·ãæ»ã¯UVã¢ãã¡ãŒã·ã§ã³åã§ããŸã..ãã©ãããã©ãŒã ã¯é£ã³åãããšãã§ããŸã..ãã¹ãŠã³ãŒããèšè¿°ããã«ã ãã€ã...ïŒD
ç§ã®ç¥ãéãã "someLoggingFunctionïŒ" formated textïŒxyz "ïŒ"ã®åœ¢åŒã®ãã®ã³ã°ã§ã¯ãé¢æ°ãå éšã§ããã¹ããåºåããªãå Žåã§ããåžžã«ã¡ãã»ãŒãžã®ããã¹ãå€æ/ãã©ãŒããããçºçããŸãã
ãã®ã³ã°åŒã³åºãã¯ã次ã®ããã«ãã©ãŒãããããå¿ èŠããããŸãã
logger.info("foo bar %s", arg)
ãããã£ãŠãæååã¯ããã®ã³ã°APIãå
éšã§*args
æž¡ããŸã§ãã©ãŒããããããŸããã ãã®ã³ã°ããžãã¯ãã«å€æŽããŸãã
https://github.com/repsac/io_three/blob/master/addons/io_three/exporter/__init__.py
level = options.get(constants.LOGGING, constants.DISABLED)
version = options.get('addon_version')
if level != constants.DISABLED:
logger.init('io_three.export.log', level=level)
https://github.com/repsac/io_three/blob/master/addons/io_three/logger.py
def _logger(func):
def inner(*args):
if LOGGER is not None:
func(*args)
return inner
<strong i="18">@_logger</strong>
def info(*args):
LOGGER.info(*args)
<strong i="19">@_logger</strong>
def debug(*args):
LOGGER.debug(*args)
<strong i="20">@_logger</strong>
def warning(*args):
LOGGER.warning(*args)
<strong i="21">@_logger</strong>
def error(*args):
LOGGER.error(*args)
<strong i="22">@_logger</strong>
def critical(*args):
LOGGER.critical(*args)
ã¡ãã»ãŒãžããã©ãŒãããããªãã§ãã ããã ç§ã¯å€§ããªã·ãŒã³ãæã£ãŠããªãã®ã§ãããããã¹ãããããšã¯ã§ããŸããããçè«çã«ã¯ãã¹ãããå¿ èŠããããŸããããã§ãªãå Žåã¯ãããã°ã©ãã³ã°ãå«ããªçç±ïŒ4576ã«ãªããŸãã
ç§ã®ã³ã¡ã³ããæ¹å€ãšããŠå€ããªãããšãé¡ã£ãŠããŸã
ãµã³ãã©ã³ã·ã¹ã³ã®ããã°ã©ããŒã§ãã£ã±ãã®ãã€ãã¯äŒæ¥ïŒã·ãªã³ã³ãã¬ãŒãå«ãïŒãšVFXæ¥çã®éã§ãã€ã³ã¿ãã¥ãŒã§ç§ã«èšãããããšã¯ã»ãšãã©ãããŸããã
çŸåšããã®ã¹ã¬ããå šäœã調ã¹ãŠãå ·äœçã«äœããã¹ããã«ã€ããŠã®ç®æ¡æžããªã¹ãããŸãšããããšããŠããŸãã äœããã£ããæçš¿ããŸãã®ã§ãè¿ãã«ããã確èªããŠãã ããã
çŽ æŽãããïŒ ãã®ã³ã°ãã«ããŒãããŠããããã§ãã ç§ã®Pythonã¯ããœãªã¥ãŒã·ã§ã³ã®åŸ®åŠãªéããç解ããã®ã«å°ã匱ãã£ãã§ãã
å°ããªäžçãç§ããµã³ãã©ã³ã·ã¹ã³ã«ããŸãïŒ
éåžžã«ã¯ãŒã«ã§ã...ãã®ã¹ã¬ããããåéã§ããéããã»ãšãã©ã®å Žå1è¡ã®ä¿®æ£ã§ããããrestãã¢ãŒãã®ãããŸããã解決ããŸã...ã©ã®ãŠãŒã¹ã±ãŒã¹ã®restã¢ãŒãããããã¯ãŸã ããããŸãã..ãåç¥ã®æ¹ã¯ããç解ããã ããã°å¹žãã§ãã
ç§ã¯ããªãã«ç¹å®ã®ãªã³ã¯ãäžããããã«ãã¹ãŠã®å€ãåé¡ãæãäžããå¿ èŠãããã§ãããããããã§ã®è¿ éãªå¯Ÿå¿ã®ããã«å èš³ããããŸãïŒ
ãããŸã§ã®ãšããã察åŠãã¹ã2ã€ã®é ç®ãããããã§ãã
1ïŒã¢ãŒããã¥ã¢ã«ã¢ã¯ãã£ãã³ã³ããã¹ããèšå®ãã
context.scene.objects.active = armature
2ïŒã¹ãã³ã¡ãã·ã¥ã«ã¢ãã£ãã¡ã€ã€ãé©çšããªãã§ãã ãã
èªåããŒãºåãæ¿ããããäžåºŠãã¹ãããŸãã 誰ãããã€ãŠå¥ã®ã¹ã¯ãªãããããããç解ãããšèšã£ããããã®ç§å¯ã®ãœãŒã¹ã¯ããã茞åºæ¥è ã«å ¥ããªãã£ãã
@manthraxç§ã®ãã©ã³ãããã§ãã¯ã¢ãŠãããŠããããæ©èœããŠãããã©ããã確èªã§ããŸããïŒ
https://github.com/repsac/three.js/tree/anim_fix
ããã¯ãæåã®ããŒãã¬ãŒã ã®ã¢ãŒããã¥ã¢ãã¡ãã·ã¥ãšãŸã£ããåãã«æ§æãããŠããéããããŒãºã¢ãŒãã®ã¢ãã¡ãŒã·ã§ã³ã§ããŸãæ©èœããŸãã ããŒãºã¢ãŒãã§loc / rot / scaleå€æãè¿œå ããããããæåã®ããŒãã¬ãŒã ãšããŠå²ãåœãŠãããšãããšãã¢ãã«ã¯æªãã§ã¬ã³ããªã³ã°ãããŸãã
REST / POSEã®åé¡ã«ãééããŸããïŒææ°ã®dev-branchïŒã ã¢ãã«ã«ã¯40以äžã®ããŒã³ãš7ã€ã®ã¢ã¯ã·ã§ã³ããããŸãã POSEã¯æ£åžžã«æ©èœããŸããããšã¯ã¹ããŒãããããã¡ã€ã«ã¯å·šå€§ã§ãã RESTã¯å®å šã«æªãã ã¢ãã¡ãŒã·ã§ã³ãæã£ãŠããŸãã
åé¡ã¯ããšã¯ã¹ããŒãããã_skinIndices_é åã«ããããã§ãã POSEã¢ãŒããšRESTã¢ãŒãã®ã©ã¡ãã§ãã_skinIndices_é åã¯åãã§ããããšã¯ã¹ããŒãããã_bones_é åã®é åºãšã€ã³ããã¯ã¹ã¯å®å šã«ç°ãªããŸãã ããã¯ã__ rest_bonesïŒïŒ_ã_armature.data.bones_ã䜿çšããŠããŒã³ã«ã€ã³ããã¯ã¹ãä»ãã__ pose_bones_ã_armature.pose.bones_ïŒapi / mesh.pyïŒã䜿çšããŠããããã ãšæããŸãã åŸã§__skinning_dataïŒïŒ_ã¯ãREST / POSTèšå®ã«é¢ä¿ãªããåžžã«_armature.pose.bones_ã䜿çšããŸãã ç°¡åãªãã¹ãã§ããã確èªã§ããããã§ãã __skinning_dataïŒïŒ_ã§_armature.data.bones_ã䜿çšãããšãRESTã¢ãŒãã§ã¢ãã«ãšã¢ãã¡ãŒã·ã§ã³ãæ£ãããšã¯ã¹ããŒããããŸãã
ããã«çããŠä¿®æ£ãéä¿¡ããã®ã«ååãªthree.jsãç¥ããŸããããå®éã«_skinIndices_ãŸãã¯_bones_ã®é åºãééã£ãŠããã®ã¯ã©ãã§ããïŒ RESTã§ã®_bones_ã®é åºã¯ãBlenderã®é ç¹ã°ã«ãŒãã®ã€ã³ããã¯ã¹ãšåãããã«èŠããŸããããã¯ããããè¯ãããšã§ãã
ããã«ã¡ã¯ããã®åé¡ã¯è§£æ±ºãããŠããããçŸåšã®ç¶æ³ã«ã€ããŠãçµè«ãåºãŠããŸãããïŒ ã ããç§ã¯ãã®åé¡ã«ã€ããŠå¥ã®æžå¿µããããŸãïŒèª°ãã2ã€ã®ã¢ãã¡ãŒã·ã§ã³ã®åæåçãçµéšããŸãããïŒ ç§ã®ãã©ã€ã¢ã«ã¯æ©èœããŸãããã3Dãªããžã§ã¯ãã®å質ã«ã€ããŠã¯ããããããŸããã äžæ¹ãç§ãäžã§èªãã ãã®ãããããã¯å®éã«å¯èœãã©ããçåã«æããŸããïŒ
æžå¿µãå®äºããããã«ïŒblenderãšã¯ã¹ããŒã¿ãŒã¯NLAãèš±å¯ããŸããïŒ
@Derivedã¯ãææ°ã®three.jsã§è€æ°ã®ã¢ãã¡ãŒã·ã§ã³ã®ãã¬ã³ããšåçãæ©èœããŸã
Nlaã¯ãããäžè¬çã«ã¯ããŒã³AFAIKã§ã®ã¿ãµããŒããããŸã
ããã«ã¡ã¯ããã®ãã£ãŒãããã¯ã«æè¬ããŸãã ã¯ããè€æ°ã®ã¢ãã¡ãŒã·ã§ã³ãå®è¡ã§ããã¢ãã¡ãŒã·ã§ã³ã®ããã¬ã³ããããããŸãã ç§ã¯v71ã䜿çšããŠããŸãããæŽæ°ããããã¬ã³ããŒãšã¯ã¹ããŒã¿ãŒããŒãžã§ã³ã䜿çšããŠããŸãïŒäžèšã§èª¬æããããã«ïŒã ããããç§ã®èŠ³å¯ããããã説æãããŠãã ããïŒ
ç§ã®ã¢ãã«ã«ã¯2ã€ã®è£ åãããã¢ãã¡ãŒã·ã§ã³ããããŸãïŒïŒA1ïŒè ãæã¡äžããïŒA2ïŒé ãå·Šã«åããŸãã
1ïŒïŒA1ïŒãè
ãæã¡äžããããåçããŠãããã¢ãã¡ãŒã·ã§ã³ã®éäžã§åæ¢ããŸãïŒè
ã¯éäžã«ãããŸãïŒ
2ïŒåçïŒA2ïŒãé ãå·Šã«åãã=>é ãå·Šã«åããŸãããè
ã¯å
ã®äœçœ®ã«çãŸãããåæäœçœ®ã«æ»ããŸãã
3ïŒæåŸã«ã2ã€ãäžç·ã«ãã¬ã€ãããšãé ãå·Šã«æ²ãããè
ãäžãããŸãããæ¬æ¥ã®ããã«ã§ã¯ãªããïŒA1ïŒïŒæã¡äžããïŒãšïŒA2ïŒïŒè
ãåãããªãïŒãšåããªã骚ã®åœ±é¿ããã¬ã³ããããã®ã§ãã ïŒA1ïŒã®ç§»åãããã®ãšïŒA2ïŒã®å察åŽã
ãããã£ãŠãjsonãã¡ã€ã«ã調ã¹ããšãã¢ãã¡ãŒã·ã§ã³ãåã¢ãã¡ãŒã·ã§ã³ã®ãã¹ãŠã®ããŒã³ã®ããŒã³äœçœ®ãèšè¿°ããŠããããšãããããŸãã ãããã£ãŠãïŒA2ïŒãé ãå·Šã«åããã®å Žåãã¢ãã¡ãŒã·ã§ã³ã«ã¯ãå€åããªãè
ã®ããŒã³ã®äœçœ®ãå«ãŸããŸãïŒå³ãA2ãA2ã§ã¯ç§»åããŸããïŒã ããããthree.jsã¯ããããã®éªšã®äœçœ®ãéèŠã§ã¯ãªããïŒA1ïŒã®å®è¡ã«åœ±é¿ãäžããã¹ãã§ã¯ãªããšã©ã®ããã«æšæž¬ããŸããïŒ
ãã®äŸãç解ã§ããããšãé¡ã£ãŠããŸãã
ããã§ç§ã®å¿ã倱ã
ãããç§ã®ãã¬ã³ããŒã®ãªã°ã¡ãã·ã¥ã§ãïŒ
ãããthreejsã«ãããŸãïŒ
茞åºã ãã§2æ¥é£ç¶ã§éãããŸããã ææ°ã®ãã¬ã³ããŒãææ°ã®3ã€ã 茞åºæ¥è ã®çŸç¶ã¯ã©ããªã£ãŠããŸããïŒ
@DelvarWorldæ£ããæ©èœããã«ã¯ãDEVãã©ã³ãã§Blenderãšã¯ã¹ããŒã¿ãŒã䜿çšããå¿ èŠããããšæããŸãã
@arturituç§ã¯:(
@DelvarWorld
茞åºæ¥è ã®çŸç¶ã¯ã©ããªã£ãŠããŸããïŒ
ããã ãšæããŸã
repsacã¯ã2015幎12æ30æ¥ã«mrdoobã«ãã£ãŠå²ãåœãŠã解é€ãããŸãã
åé¡ãããããŸããã æããã«æãå¿ èŠã§ãã
æè¿å ±åãããããŸããŸãªãã°ãæ¢ãã«è¡ããããããŸããã ãã®åé¡ãåçŸããããã®ãã¡ã€ã«ãå ±æã§ããŸããïŒã·ã³ãã«ã§ããã»ã©è¯ãïŒïŒ
䟿å®äžããããããã«æçš¿ããŸãã ãã¹ãã¢ãã«ãã©ãŒã @DelvarWorldããšã¯ã¹ããŒãããŠã¿ãŠãã³ã¡ã³ããšã¹ã¯ãªãŒã³ãã£ããã£ãïŒ
@phfatmonkey
https://github.com/mrdoob/three.js/pull/8412#issuecomment -210675561ããïŒ
ããããã¹ãŠã®åé¡ãä¿®æ£ããããã®çŽ æŽãããäœæ¥ïŒ+1ïŒïŒ
ãããé©çšãå®äºããããæ®ãã®ãæ°ããäœæãããããŸãã¯çºèŠããããšã¯ã¹ããŒã¿ãŒã®åé¡ã®èª¬æãŸãã¯ãªã³ã¯ãå«ãæ°ãããã±ãããéããŠããã ããŸãããã
æ¢åã®ãã±ããã®ã©ããã«æçš¿ãããŠãããã®ã远跡ããã®ã¯éåžžã«å°é£ã§ãã
çæ³çã«ã¯ãã±ãŒã¹ããšã«1ã€ïŒãŸã ååšããªãå ŽåïŒãããããã¹ãŠãåç §ãããã¹ã¿ãŒãBlender ExporterIssuesãïŒãŸãã¯ãã®ãããªãã®ïŒã
é ã®ãŠã£ãºããæãåºããã®ã¯
ãã¡ããïŒ ããã¯çŽ æŽãããèãã§ãã ç§ã¯ä»é±æ«ã«ãããéæããããšããŸãã
ããã§ãªããã°ãæææ¥ã«ç§ããªãã£ã¹ã«æ»ã£ããšãã
2016幎4æ15æ¥ååŸ5æ12åããtschwã [email protected]ã¯æ¬¡ã®ããã«æžããŠããŸãã
@phfatmonkey https://github.com/phfatmonkey
8412ïŒã³ã¡ã³ãïŒ
https://github.com/mrdoob/three.js/pull/8412#issuecomment -210675561
ããã§ãïŒããããã¹ãŠã®åé¡ãä¿®æ£ããããã®çŽ æŽãããäœæ¥[ç»å:: + 1ïŒ]ïŒ
ãããé©çšãå®äºããããæ°ãããã±ãããéããŠããã ããŸãããã
æ®ãã®ãæ°ããäœæãããããŸãã¯çºèŠããããã®ã®èª¬æãŸãã¯ãªã³ã¯
茞åºæ¥è ã®åé¡ïŒæçš¿ãããŠãããã®ã远跡ããã®ã¯éåžžã«å°é£ã§ã
æ¢åã®ãã±ããã®ã©ããã«ãçæ³çã«ã¯ãã±ãŒã¹ããšã«1ã€ïŒãŸã ååšããªãå ŽåïŒãšãã¹ã¿ãŒããã¬ã³ããŒãšã¯ã¹ããŒã¿ãŒã
ããããã¹ãŠãåç §ããåé¡ãïŒãŸãã¯ãã®ãããªãã®ïŒãé ã®ãŠã£ãºããæãåºããã®ã¯
- æ³ç·ãå転ããŠããªãã£ãïŒä¿®æ£æžã¿ïŒ
- ã·ãŒã³éå±€ããšã¯ã¹ããŒããããšãã®ã¢ãã¡ãŒã·ã§ã³ã®åé¡ã ä»ã¯åäœããŸããïŒ
- ããããããªãã®æçš¿ã§èšåãããŠããæ®ãã®ããŒãºã®åé¡ããããŸã
- 次ã«ãã¹ããã³ã°/ããŒãã¬ãŒã ã®åé¡ããããŸãïŒãšã©ãŒã¡ãã»ãŒãžïŒïŒ
- ..ã
â
ããªããèšåãããã®ã§ããªãã¯ãããåãåã£ãŠããŸãã
ãã®ã¡ãŒã«ã«çŽæ¥è¿ä¿¡ããããGitHubã§è¡šç€ºããŠãã ãã
https://github.com/mrdoob/three.js/issues/6050#issuecomment -210693332
Blenderã§å®è¡ã§ãããã³ãªãã¢ã¢ãã¡ãŒã·ã§ã³ç·šéã«ã€ããŠã¯ã©ãã§ããïŒ ãã®è³ªåã«èå³ãæã£ãŠãã人ã¯èª°ãããŸãããïŒ ä»¥åã®ã¡ãã»ãŒãžã§ãã€ã³ãã説æããŸããããã³ã¡ã³ãã¯ãããŸãããïŒ
@derivou
ã©ã®ã¡ãã»ãŒãžïŒ
ã«ã¹ã¿ã ã³ãŒããå¿ èŠãªå Žåã誰ãããããæžããªããã°ãªããŸããã è²¢ç®ã¯å€§æè¿ãããããŸãã...
2æ5æ¥ä»ãã®äžèšã®ã¡ãã»ãŒãžã§ã¯ãããã€ãã®ã¢ãã¡ãŒã·ã§ã³ãçµã¿åãããéã®åé¡ã«ã€ããŠèª¬æããŸããã
éçºãæäŒã£ãŠããã ããã°å¹žãã§ãããã¢ã€ãã¢ãå
±æãããããå®è£
ããæ¹æ³ã«ã€ããŠè©±ãåãã«ã¯ãæåã«ããã€ãã®è°è«ãå¿
èŠã ãšæããŸãã ããã§ãææ¡ã¢ã€ãã ããã³ãªãã¢ã¢ãã¡ãŒã·ã§ã³ãïŒ7913ãéããŸããã
ããã¯é·ãåé¡ã§ããããã¹ãŠãèªãã ããã§ã¯ãªãããšãåçœããŸãããåé¡ããŸã OPã§èª¬æãããŠãããšããã§ããå ŽåïŒã€ãŸããMixamoã§ãã£ã©ã¯ã¿ãŒãã¢ãã¡ãŒã·ã§ã³åããthree.jsã§ããŒãããæ¹æ³ãå¿ èŠãªå ŽåïŒãéæã§ããŸãããã¯ãglTFBlenderãšã¯ã¹ããŒã¿ãŒãšTHREE.GLTFLoaderã䜿çšããŸãã ãããç§ã®ã¯ãŒã¯ãããŒã§ãïŒ https ïŒ//medium.com/@donmccurdy/creating -animated-gltf-characters-with-mixamo-and-blender-728dc120e678
ãŸãã¯ãMixamoããFBXãšããŠãšã¯ã¹ããŒãããFBXLoaderã䜿çšããŠçŽæ¥ããŒãããããšãã§ããŸãã
ååã®ãªãªãŒã¹ïŒR89ïŒã®æç¹ã§ã¯ãéåžžã«ã¹ã ãŒãºã«åäœããã¯ãã§ãã
æãåèã«ãªãã³ã¡ã³ã
ãŸãã¯ãMixamoããFBXãšããŠãšã¯ã¹ããŒãããFBXLoaderã䜿çšããŠçŽæ¥ããŒãããããšãã§ããŸãã
ååã®ãªãªãŒã¹ïŒR89ïŒã®æç¹ã§ã¯ãéåžžã«ã¹ã ãŒãºã«åäœããã¯ãã§ãã