ドローコール削減のため、マテリアルを1つにしてテクスチャのUVを変更

今作っているAndroidアプリが、実機で動かすとあまりにもカクカクだったので
処理速度を向上させるために、ドローコール削減について調べました。

やりたいことは「複数オブジェクトにそれぞれのテクスチャを表示する」なんですが、

それぞれのテクスチャごとのマテリアルを作成すると
マテリアルの数だけドローコールも増えます。

ドローコールを増やさないためには
それぞれのテクスチャを1つにまとめ1マテリアルにし、
オブジェクトごとに表示部分を変更(UVを変更)するようです。
参考URL
Unity3D:メッシュの頂点とUVとポリゴン(2)

今回、4色のテクスチャを1つにまとめ、4つのキューブに表示してみました。

<今回使用させて頂いたテクスチャのダウンロード先>
シンプルパターン研究所


<テクスチャ>
1マテリアルドローコール削減1

<マテリアル>
1マテリアルドローコール削減2

<スクリプト>

using UnityEngine;
using System.Collections;

public class ChangeUV : MonoBehaviour {

void Start()
{
Mesh mesh = GetComponent<MeshFilter>().mesh;
Vector2[] uvs = mesh.uv;

for (int i = 0; i < uvs.Length; i++) {
if (gameObject.name == "Cube1") {
// テクスチャの左下を表示
}
else if (gameObject.name == "Cube2") {
// テクスチャの左上を表示
uvs[i].y += 1f;
}
else if (gameObject.name == "Cube3") {
// テクスチャの右上を表示
uvs[i].x += 1f;
uvs[i].y += 1f;
}
else if (gameObject.name == "Cube4") {
// テクスチャの右下を表示
uvs[i].x += 1f;
}
uvs[i] = new Vector2(uvs[i].x / 2f, uvs[i].y / 2f);
}
mesh.uv = uvs;
}

}


<実行例>4色表示してもドローコール(SetPass Calls)の増加は1です。
1マテリアルドローコール削減3

関連記事

コメント

非公開コメント

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。