夜風のMixedReality

xRと出会って変わった人生と出会った技術を書き残すためのGeekなHoloRangerの居場所

Unityでメッシュに頂点カラーを設定する

本日はUnity枠です。

〇環境

・Windows11PC

・Unity2022.3.21f1

・Mixed

〇頂点カラーとは?

 頂点カラーは3DCGを構成する頂点が持つ色情報のことです。

 これは頂点情報内に格納されており、法線や頂点座標同様に扱われます。

 MayaやBlenderなどDCCツールではエフェクトのエミッターやシミュレーションの用途として使用するなど様々な用途として使用されています。

 テクスチャを使用せずに一つのマテリアルで複数の色情報を再現できるためうまく使いこなすことでパフォーマンスとクオリティーを両立する手段として使えます。

〇頂点カラーを設定する

頂点カラーをUnityで設定し、それを可視化するためには描画に対応するシェーダーが必要です。

筆者も開発にかかわっているMixedRealityGraphicsTools/StandardShaderにはVertexColorの機能があるため今回はこちらを使用していきます。

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

namespace SODA3DART.HoloMoto.test
{
    public class VertexColorPloto : MonoBehaviour
    {
        public Mesh mesh;
        private Vector3[] vertices;
        private Color[] colors;

        private void Start()
        {
            mesh = GetComponent<MeshFilter>().mesh;
            vertices = mesh.vertices;
            colors = new Color[vertices.Length];
            for (int i = 0; i < vertices.Length; i++)
            {
                colors[i] = new Color(vertices[i].x, vertices[i].y, vertices[i].z);
            }
            mesh.colors = colors;
        }
    }
}

 これを実行することでアタッチしたオブジェクトのMeshFilterからmeshを取得して頂点カラーを書き換えています。

 以上がUnityでの頂点カラーの設定方法になります。

 ペイントなどで使用できそうですね!

本日は以上です。