本日は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