夜風のMixedReality

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

DistantLightを理解する

「Microsoft MixedRealityToolkit GraphicsToolsを完全に理解できる」に戻る

redhologerbera.hatenablog.com

〇DistantLightとDistantLightでできること

DistantLightはMRGTで提供されているライトコンポーネントです。

DistantLightを使用することでUnityのDirectionalLightとは別のレイヤーで光源を追加することができます。

手前のSphereにDistantLightを使用、奥のSphereはデフォルト(DirectionalLight)

DistantLightは主にUIなど光源として使用することを想定され実装されました。

〇使い方

DistantLightはMRGTで提供されている機能ということもあり現時点で以下のシェーダーを使用しているマテリアルで使用することができます。

・GraphicsTools Standard Shader

・GraphicsTools StanderdCanvas Shader

 DistantLightが実装されたMRGTv0.4以降では対象のシェーダーを適応しているマテリアルのプロパティでLightModeと呼ばれる項目からLit-Distant Lightを選択することで使用できます。

 シーン内にDistantLightコンポーネントをアタッチしているゲームオブジェクトのZ軸を光源としてライトとして使用することができます。

 Color、Intensityでライトの強さ、色を制御します。

〇制限

 現在Defaultで1つのDistantLightのみが使用されるようになっています。

〇実装

DistantLightクラスは同じくMRGTで提供されるBaseLightクラスを継承するクラスです。

BaseLightによって次のメソッドが実行されており、次のような処理を行っています。

・Initialize()

最初に実行されます。

ここではShaderの持つユニークIDを取得しています。

・AddLight()

最初に一回、またライトが追加されたタイミングに実行されます。

おこなっていることはListにlight情報を追加することです。

これによってシーン内のライトの数を管理しています。

この際に1つライトにつき2つの枠を追加しています。

1つ目のデータ領域にDistantLightの向き(Direction)、2つ目のデータ領域に色情報をそれぞれVector4で代入しています。

・RemoveLight()

ライトが削除される際に実行されている処理です。

おこなっていることはList追加されているlight情報を削除して更新することです。

・UpdateLight()

LateUpdateで実行される処理です。

アタッチされているオブジェクトのTransform.forwerdを取得して、向きを取得、inspectorで任意に設定可能なColorをIntensityの強さでデータとして代入しています。

またこのメソッド内でShaderのグローバル変数としてデータをマテリアルに渡しています。

  Shader.SetGlobalVectorArray(_DistantLightDataID, distantLightData);

redhologerbera.hatenablog.com

redhologerbera.hatenablog.com