-
-
Notifications
You must be signed in to change notification settings - Fork 24
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Feat material unused property remove #1041
Feat material unused property remove #1041
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
提案ありがとうございます。雑(?)に消すか、シェーダの中身も理解して消すかを考えてて未実装でした。
抽象的な点で2点指摘させてください。
- この機能自体はremove unused objectsの1機能でいいと思うのでその中にし、skipRemoveMaterialUnusedPropertiesをadvanced settings内に追加してください
- SkinnedMeshRendererについてはMeshInfo2の方で置き換える必要があります。
アニメーションの方は別途 別PR で対応を検討します
前者をとりあえずやってみましたが...後者の
というのはいったいどうすればいいでしょうか...? |
マテリアルはMeshInfo2のSubMeshの中に配列になって入っています |
if (state.SkipRemoveMaterialUnusedProperties) { return; } | ||
|
||
var renderers = context.GetComponents<Renderer>(); | ||
var swapDict = renderers.SelectMany(i => i.sharedMaterials) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
こっちでもMeshInfo2
使わないといけないですね。
アニメーションの対応を今後追加することを考えたらSwapMaterialArray
(に相当する関数)内で必要に応じてMaterialCleaning
を呼び出したいです。
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
前者は修正、MaterialCleaning
は呼べるようにアクセス装飾氏を調整しました。
少し気になるのですが...MaterialCleaning
をアニメーション関連で呼ぶ場合に、ここのswapDict
を何かしらの手段で渡さないと、MaterialCleaning
された別の同一マテリアルが発生し、マテリアルが増加する可能性があると思うので、その時に適宜調整する必要があると思います。
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
アニメーションに関する処理もこのPassないでやるつもりです。
そして意図が伝わってなかったのですが先にすべてのマテリアルをDictionaryに追加するのではなく、適宜Dictionaryにあればそれを、なければ作成して追加の形にしてほしいという意味です
少し忘れていたけど...今の状態だとアニメーションがあると普通に壊れる状態ですが、CHANGLOGを書いておいた方がいいですか? |
アニメーションがあると壊れます?単に無駄に生成されるだけではない感じですか |
たしかに壊れるというより、ビルドに含まれるマテリアルが増えるだけで済むから問題ないのか、少し勘違いしてた。 |
//https://github.com/lilxyzw/lilToon/blob/b96470d3dd9092b840052578048b2307fe6d8786/Assets/lilToon/Editor/lilMaterialUtils.cs#L658-L686 | ||
// | ||
//https://light11.hatenadiary.com/entry/2018/12/04/224253 | ||
public static void RemoveUnusedProperties(Material material) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
そういえばfallback shaderの対応を考え忘れてる気がする
よっぽどのことがないともとシェーダにないプロパティが関係あることないと思うけど
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
カスタム指定ができるliltoonなんかでもOverrideTagでどうにかしてるので、VRCFallback
が指定されてる場合にそれに対応するシェーダのプロパティをどっかで持っておいて、それを下に消さないプロパティを決めると良さそう
Optimize Textureのためにマテリアルの複製処理が入ったので、inplaceでやるように書き換えたほうが良さそうですね。私が引き継ぐつもりはありますが Reina さんは更新を行う意思がありますか |
そんなないけど、時間が足りてないならやるよ |
時間は足りていないので、やっていただけるとありがたいです。 |
🆗 |
そういえば、書くの忘れてたけど In Place でクリーニングするように書き換えてみたよ! |
ありがとうございます。アニメーションの対応入れて少し修正したらマージします |
マテリアルにシェーダーの差し替えなどを行った時などに、テクスチャが全く使用されないけれどビルドに含まれる状態が発生し、場合によっては多くのVRAMが浪費されてしまいます。
この問題は、lilToonであればインスペクターから「未使用のテクスチャを外す」を使用すれば解決できますが、これは挙動が変わらない軽量化なので、T&O で自動で行えると非常に良いと思います!
このプルリクエストではlilToonの物を T&O に 組み込む形で実装し、マテリアルから未使用のテクスチャが削除されます。
ですが...マテリアルの置き換えアニメーションによって処理前の物に置き換えられる問題や、マテリアルの置き換えアニメーションにしか参照が存在しないマテリアルが処理できていません。
処理できていない...とはいっても、私にできると思われる範囲を大幅に超えているので、この機能があったほうが良いと思うのであれば、そのあたりの実装をお願いしたいです。