私は方法を見つけるようになった、私は更新し、私が行くようにこの答えをクリーンアップします。
CombineInstance
は、結合したいメッシュ上にトランスフォームを設定するための変換マトリックスを取ることができます。残念ながらnew Transform
は不可能ですが、幸運にも最初から変換行列を作成するのは簡単です。
Matrix4x4 transformMatrix = new Matrix4x4();
//transformMatrix.SetTRS(position, quaternion, scale)
transformMatrix.SetTRS(new Vector3(0, 10, 0), Quaternion.Euler(-90, 0, 0), new Vector3(1, 1, 1));
材料を得るために右我々は、異なる材料で各subMesh
の配列内の次のCombineInstance
インデックスに同じメッシュを追加する必要があります。
for (int i = 0; i < customMesh.subMeshCount; i++)
{
combine[currentIndex + i].mesh = Instantiate(customMesh);
combine[currentIndex + i].transform = transformMatrix;
combine[currentIndex + i].subMeshIndex = i;
}
しかし、これはサブメッシュは、同じ材料を使用している場合でも、我々は材料のリストを成長させる必要がある各サブメッシュするための手段。私の場合は、すべてのメッシュがマテリアルを共有しています。この方法では、各チャンクの要素が何千もある配列になります。
道路のさまざまな部分を定義するためにテクスチャを使用するだけで、テクスチャとテクスチャが1つしかありません。すべての道路の木のため、各chunck負荷に対して同じ、そしてその他すべての木のは、これはいくつかの問題を提起ん:私は、それぞれ異なる道路ピースにそれ自身の質感を与える場合
- は、私が最初の場所に[0]、すべての道路を必要としますすべての道路[1]などを各チャンクごとに表示します。
- 私はそれぞれの顔にユニークなテクスチャ空間を与え、後で追加のピースを追加したい場合は、自分のUV空間を押し広げたり、そのピースに追加のマテリアルを追加する必要があります。
どちらのオプションも理想的ではありません。
私が考えることのできるもう1つの方法は、共有された素材要素を先に行うことです。道路のように、歩道にはコンクリート材料を使用し、センターにはアスファルト材料を使用します。まず最初にすべての最初の(コンクリート)サブメッシュ道路を走り、もう1つは2番目のサブメスを走ります。しかし、これは非常に醜い/ハッキーです、だけでなく、すべてのサブメッシュインデックスが同じ材料を共有することを確認する必要があります。コンクリート材料を建物に使用したい場合は、重複した材料を再度入力するか、道路(コンクリート)サブメッシュの直後にその建物(コンクリート)サブメッシュを実行する必要があります。
大型のタイル加工可能な素材やテクスチャなしの平らな陰影を付けた色でも作業し、必要に応じてこれらのテクスチャ/素材を再利用するのはとても良いことです。
以下はうまくいくかもしれませんが、いくつかのメッシュのカスタムツイッキングが必要です。
material[0] = asphalt;
material[1] = concrete;
material[2] = wood;
//Roads
int matIndex = 0;
for (int i = 0; i < customMesh.subMeshCount; i++)
{
combine[currentIndex + i].mesh = Instantiate(customMesh);
combine[currentIndex + i].transform = transformMatrix;
//combine[currentIndex + i].subMeshIndex = i;
//Instead assign a material index.
combine[currentIndex + i].materialIndex = matIndex + i;
}
//building
int matIndex = 1;
for (int i = 0; i < customMesh.subMeshCount; i++)
{
combine[currentIndex + i].mesh = Instantiate(customMesh);
combine[currentIndex + i].transform = transformMatrix;
combine[currentIndex + i].materialIndex = matIndex + i;
}