Open9

Unity Universal RPで作る、モデルの残像エフェクト

Unity 2020.3.20f1 でサンプルプロジェクト (https://github.com/madoramu/AfterImage) を起動してみると
Packages/UnityChanToonShaderVer2_Project-release-urp-2.2/Runtime/Shaders/UniversalToonBody.hlsl でエラーが発生したので、

Packages/UnityChanToonShaderVer2_Project-release-urp-2.2/Runtime/Shaders/UniversalToonBody.hlsl
            inline void InitializeStandardLitSurfaceDataUTS(float2 uv, out SurfaceData outSurfaceData)
            {
                outSurfaceData = (SurfaceData)0;
//...

を追加して対処

  • やっていることは、 Meshの複製、 ボーンの複製
  • 今回は分身をモーションさせない
  • 分身したモデルに別のマテリアルをくっつけている

BakeMeshやってる人がいた…!

BakeMeshはベイクするメッシュの頂点数等によって処理負荷が変わる可能性があるため使用する際はしっかりと処理負荷を調べたうえで使うことを推奨します。
https://studyworks.hatenablog.com/entry/bakemesh

でしょうね…
やってることはMeshの複製なので、Mesh大量に作る vs ボーンで計算を頑張ってもらう になるのか


ざっくりと、Bakeでつくってみる

左は ModelImport時に、MeshRendererがついているオブジェクト以外を削除するようにOptimizeしたもの
右はそのままのやつ

Boneコピーしたほうがいいのかなぁ

コンピュートシェーダーを使える環境ならGPU Skinningの結果をぶっこ抜いて来て複製出来るけど、スマホの場合はキツイのでボーンコピーで良いと思われ

ボーンバージョン作ってみた
Optimizeされたものはどうしようかな 🤔

あとマテリアルを変えられたりする入り口をつくらないと…

Optimizeされたものは、あきらめてOptimizeを解体することに

if ((m_Animator != null) && m_Animator.isOptimizable)
{
    AnimatorUtility.DeoptimizeTransformHierarchy(m_RootGameObject);
    m_Transforms = m_RootGameObject.GetComponentsInChildren<Transform>();
}
ログインするとコメントできます