リアルなレンダリングを可能にするGlobal Illumination(GI)だが、Directional Lightや普通のLightオブジェクトに適用するのは簡単でも、発光オブジェクトに適用する際は少しコツがいる。

まず発光させたいオブジェクトには、マテリアルでEmissionを設定する。
テクスチャと倍率を設定し、GIを設定すれば発光する。
普通ならこれでいいが、光をリアルタイムに変化させたい場合は数値を変化させるだけでは反映されない。

そこで必要になるのが次の関数。

DynamicGI.SetEmissive( Renderer r, Color c);

これを使うと、光量や光色を動的に変化させることが出来る。

光量を上げたい場合は、色を再計算しなければいけない。
方法は簡単、{ Color.white * 4 } のように色に掛け算をすればいい。

サンプルも用意したので確認してみて下さい。

使ったスクリプトはこれ一つ。
他はUnityのGUIで設定したり、インスペクタから設定。

using UnityEngine;
using System.Collections;

public class GI_Test : MonoBehaviour {

	// インスペクターから設定.
	[SerializeField] Renderer cube;
	[SerializeField] Renderer sphere;
	[SerializeField] Renderer cylinder;

	// 初期化.
	void Awake(){
		SetCube(0);
		SetSphere(0);
		SetCylinder(0);
	}

	public void SetCube(float f){
		cube.material.SetColor("_EmissionColor",Color.blue*f);
		DynamicGI.SetEmissive(cube,Color.blue*f*3);
	}
	public void SetSphere(float f){
		sphere.material.SetColor("_EmissionColor",Color.yellow*f);
		DynamicGI.SetEmissive(sphere,Color.yellow*f*3);
	}
	public void SetCylinder(float f){
		cylinder.material.SetColor("_EmissionColor",Color.red*f);
		DynamicGI.SetEmissive(cylinder,Color.red*f*3);
	}
}