sugi-cho / Animation-Texture-Baker

頂点の位置と法線を、Texture2Dに保存しておく。ARGBFloatとか、HDR Textureを使用したバージョン
MIT License
786 stars 110 forks source link

AnimatorTextureBaker.cs/line32について #3

Closed yunoda-3DCG closed 5 years ago

yunoda-3DCG commented 5 years ago

上記のコードでanimator.speed = 0;となっており、フレーム0しかベイクできないようになっています。仕様でしょうか?

yunoda-3DCG commented 5 years ago

↑加えて、上記のスクリプトをアタッチしたオブジェクトがカメラ視野から外れるなど、アニメーション自体がカリングされるとベイクがうまくいかないようです。

sugi-cho commented 5 years ago

Line56において、第3引数に float normalizedTimeを設定しているので、forループ内でアニメーションを特定のフレームに進める処理をしています!

https://github.com/sugi-cho/Animation-Texture-Baker/blob/master/Assets/AnimationBaker/Scripts/AnimatorTextureBaker.cs#L56

https://docs.unity3d.com/ScriptReference/Animator.Play.html

sugi-cho commented 5 years ago

AnimatorTextureBakerは、Meshをカメラでレンダリングすることによって、テクスチャへの書き込みを行っているので、オブジェクトがカメラのレンダリング範囲内にある必要があります。 AnimationClipTextureBakerを使用すると、旧Animationでも、Animatorでも使えるので、おススメです!

※少し昔に作ったバーションと勘違いしてました。。テクスチャへの書き込みはメッシュのレンダリングではなく、SkinnedMeshRenderer.Bake(mesh)とComputerShaderで行ってます。アニメーションを再生するにはRendererがカメラの範囲内にある必要があります。もしくは、SkinnedMeshRenderer.updateWhenOffscreen = trueとすると、カメラの範囲外でもアニメーションが更新されるはずです。

https://docs.unity3d.com/ja/current/ScriptReference/SkinnedMeshRenderer-updateWhenOffscreen.html