MRが楽しい

MRやVRについて学習したことを書き残す

Unityで3Dモデルのメッシュトポロジーを変更する

本日はUnityの小ネタ枠です。
Unityで3Dモデルのメッシュトポロジーを変更する方法についてです。

MeshTopologyを変更する

MeshFilterからモデルのMeshTopologyを変更することで3Dモデルを面やワイヤーフレーム、点群で表示にすることができます。
MeshTopologyは表示方法ではなく頂点バッファをどう解釈するかの定義なのでMeshデータによってはMeshTopologyを変更すると正しく描写されない場合があることに注意が必要です。
docs.unity3d.com
docs.unity3d.com

定義 説明
Triangles メッシュは三角形から構成されます
Quads メッシュは四角形から構成されます
Lines メッシュは線から構成されます
LineStrip メッシュは線分で構成されます
Points メッシュは点から構成されます

Capsuleオブジェクトに以下のMeshTopologyを変更するスクリプトを設定して試してみます。
・MeshTopologyChanger.cs

using UnityEngine;

public class MeshTopologyChanger : MonoBehaviour
{
    [SerializeField, Tooltip("メッシュのトポロジを変更する")]
    private MeshTopology meshTopology;

    // SerializeFieldが変更されるたびに実行される
    void OnValidate()
    {
        MeshFilter meshFilter = GetComponent<MeshFilter>();
        
        // サブメッシュ事にトポロジを設定する
        for(int index = 0; index < meshFilter.mesh.subMeshCount; index++)
        {
            meshFilter.mesh.SetIndices(meshFilter.mesh.GetIndices(index), meshTopology, index);
        }
    }
}

それぞれMeshTopologyを変更した場合のCapsuleオブジェクトの見え方は以下の通りです。

Triangles


Quads


Lines


LineStrip


Points