1. 程式人生 > >unity動態改變自發光

unity動態改變自發光

unity5.0很早以前可以動態改自發光

也就是自發光對GI有影響

不過很少有人注意到這點

主要是在動態和靜態上也存在不同的情況

有時候用處還是很明顯的

下面是在unity5.5上做的測試

首先 作為自發光的物體必須是靜態的,

其次材質的emission必須放上圖片或者有顏色

然後烘焙和實時分為三種情況

而且emission下有三個選項,none就是自發光不管在哪個模式下都不對全域性光產生影響

realtime就是在實時的情況下可以通過程式碼DynamicGI.UpdateMaterials來調整自發光的亮度或者顏色等等

baked當然也能通過程式碼調整,但必須是隻開了pre的情況下才行,如果既開了pre又開了baked,那麼只有設定成realtime才能的才能改變

如果場景只設置了baked,只有烘焙效果,並不能有實時效果

當然兩個都沒有的話,就沒有烘焙效果和實時效果了

下面是控制程式碼

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

public class UpdataGI : MonoBehaviour {
    float tempTime = 0.001f;
	void Update () {
        if (tempTime < 1) tempTime += 0.001f;
        else
            tempTime = 0;
        this.gameObject.GetComponent<Renderer>().material.SetColor("_EmissionColor", Color.HSVToRGB(tempTime, 1,2));
        DynamicGI.UpdateMaterials(this.gameObject.GetComponent<Renderer>());
    }
}


圖片效果比較像面光源

下面可以用setTexture方式賦值來控制自發光

注意使用的是_EmissionMap

     _Color
     _MainTex
     _Cutoff
     _Glossiness
     _Metallic
     _MetallicGlossMap
     _BumpScale
     _BumpMap
     _Parallax
     _ParallaxMap
     _OcclusionStrength
     _OcclusionMap
     _EmissionColor
     _EmissionMap
     _DetailMask
     _DetailAlbedoMap
     _DetailNormalMapScale
     _DetailNormalMap
     _UVSec
     _EmissionScaleUI
     _EmissionColorUI
     _Mode
     _SrcBlend
     _DstBlend
     _ZWrite