2012年07月27日

[Unity] DrawCallメモ(transform.renderer.material.color)

DrawCallが増えた事例を発見したのでメモ。

transform.renderer.material.color = Color.grey;

「マテリアルを多く使うとDrawCallが増えるだろう」と思って
1つのマテリアルの色を変えることでバリエーションを出そうとしました。

だけど、このようにマテリアルの色を変えるだけでもDrawCallが増えました。
これは意外だったー。

どう対処しようかな・・・。
タグ:UNITY DrawCall
posted by be-style at 17:31| Comment(2) | Unity
この記事へのコメント
もう既に解決されているかもしれませんが、
rendererのmaterialを触ってしまうとマテリアルの複製がされてしまいます。
そのため、マテリアルを複製しないでマテリアルのパラメータを変更するには、
renderer.sharedMaterialを使用する必要があります。
しかし、これだと共通のマテリアルのパラメータ全てが変わってしまうため、個々のGameObjectのメッシュの色を変更するというような事は出来ません。

これを解決する方法として、Unity3.5から追加されたrenderer.SetPropertyBlockを使用する方法があります。
しかし、SetPropertyBlockのリファレンスには下記URL先のように何も記載がありません。
http://docs.unity3d.com/Documentation/ScriptReference/Renderer.SetPropertyBlock.html

ですが、実際に使ってブログの記事にされている方もいらっしゃるので、下記URLなどを参考にして頂けると素早く実装が出来ると思います。
http://d.hatena.ne.jp/nakamura001/20120418/1334767263

ちなみに私個人で確認した不具合ですが、Unity3.5から追加されたParticleSystemではSetPropertyBlockを使用してもシェーダのパラメータを設定することが出来ませんでした。

少し長くなってしまい申し訳ありませんが、何かの手助けになればと思い、コメントさせて頂きました。
それでは。

Posted by KTA at 2012年08月25日 02:59
コメントありがとうございます!
早速、SetPropertyBlock() を使って検証してみました。

http://blog.be-style.jpn.com/article/57911924.html?1346395285

ですが、肝である「マテリアルが複製されたかどうか」を調べる方法がわからず検証が途中で止まってしまいました(汗

宜しければ、マテリアルが複製されたかどうかを調べる方法を
ご教授いただけないでしょうか。
Posted by be-style at 2012年08月31日 15:43
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント: [必須入力]