👆の記事の続編です。
分身の術。 pic.twitter.com/ATedQVtJXn
— 君塚史高 (@ki_230) 2020年10月27日
前回は、実寸代のARで分身の術を作ってみた次第ですが、分身(3Dモデル)はピクリとも動いていませんでした。なので、今回は3Dモデルにアニメーションを付けてみようかと思います。
3Dモデルにアニメーションを付ける
3Dモデルにアニメーションをつける場合、まずリギングといって3Dモデルに骨を入れたり、関連付けを行ったりしなければなりません。
割と面倒な作業なのですが、なんとこちらのウェブサイトを使うと、すんなりと自動でリギングが完了します。
Adobeが作っているサイトなのですが、3Dモデルをアップロードして、ぽちぽちクリックするだけでリギングが完了するとてもお手軽なサイトです。
3DモデルとテクスチャをZIPにまとめてアップロードすると、しっかり設定してくれます。至れり尽くせり。
しかも、リギングだけではなく、アニメーションの設定までできるので、このサイトを使ってさくっとアニメーションを設定してしまいましょう。
全身を3Dスキャンして、3Dモデルをつくってもらいました。これで踊り放題だ。https://t.co/C6d61WEJ9E pic.twitter.com/eLscWStKUw
— 君塚史高 (@ki_230) 2019年10月29日
設定が完了したらfbx形式でダウンロードします。
Blenderでfbxを読み込み、glbで書き出す
アニメーションを設定したfbxをBlenderで読み込んで、glbで書き出します。
書き出し設定は特に変更しなくて大丈夫です。
が。
僕の場合は、Mixamoからダウンロードしたfbxをglbで書き出すと、テクスチャが半透明になってしまいました。
スタンド風AR。 pic.twitter.com/87OodD30Eu
— 君塚史高 (@ki_230) 2020年11月2日
Blender上で、テクスチャを設定し直したところ解決したので、そもそもMixamoにアップする際にテクスチャを一緒に上げる必要はなかったのかもしれません。
animation-mixerを設定する
あとは前回同様、A-Frameを使って読み込めばOKなのですが、アニメーションを設定するためには aframe-extras.min.js も読み込む必要があります。
https://cdn.jsdelivr.net/gh/donmccurdy/aframe-extras@v6.1.1/dist/aframe-extras.min.js
こちらを読み込んで、animation-mixerを設定すればそれだけで3Dモデルがアニメーションするようになります。お手軽ですね。
己との戦いAR。 pic.twitter.com/1bHUuSggc0
— 君塚史高 (@ki_230) 2020年11月2日
ソースコード
<!DOCTYPE html> <html> <head> <meta charset="UTF-8" /> <title>AR DEMO</title> <meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1, maximum-scale=1, user-scalable=no, viewport-fit=cover, shrink-to-fit=no" /> <script src="https://aframe.io/releases/1.0.4/aframe.min.js"></script> <script src="https://raw.githack.com/AR-js-org/AR.js/3.3.1/aframe/build/aframe-ar-nft.js"></script> <script src="https://cdn.jsdelivr.net/gh/donmccurdy/aframe-extras@v6.1.1/dist/aframe-extras.min.js"></script> <style> * { margin: 0; padding: 0; } body { overflow: hidden; cursor: none; } </style> </head> <body> <a-scene embedded arjs="debugUIEnabled: false" vr-mode-ui="enabled: false"> <a-assets> <a-asset-item id="boxing" src="boxing.glb"></a-asset-item> </a-assets> <a-marker type='pattern' url='./pattern.patt'> <a-entity gltf-model="#boxing" animation-mixer></a-entity> </a-marker> <a-entity camera></a-entity> </a-scene> </body> </html>