unity中混合光照與陰影的探索

閱讀本文前最好先看一下Unity custom shader中調(diào)用內(nèi)置Lightmap和Light Probes

我們知道自阱,unity中的Lighting Mode分為三種茅姜,baked indirect晰奖,subtractive和shadowmask三種。

baked indirect模式混合了實(shí)時(shí)直接光和烘焙間接光爽室,并提供了實(shí)時(shí)陰影。由于光照比較真實(shí),陰影精確度比較可信拒秘,所以非常適合中端硬件。
subtractive模式提供直接和間接光的烘焙臭猜,直接實(shí)時(shí)陰影只受一盞方向光的影響躺酒。由于它并不能提供非常真實(shí)的光照結(jié)果,所以風(fēng)格化的渲染或者低端硬件比較適合這種模式蔑歌。
shadowmask模式混合了實(shí)時(shí)直接光和烘焙間接光羹应,它能烘焙物體的陰影并能自動(dòng)混合實(shí)時(shí)陰影。這種模式看起來最為真實(shí)但也最消耗資源次屠,不過可以在Quality Settings進(jìn)行調(diào)整园匹。高中端設(shè)備適合這種模式。

有了初步的印象劫灶,我們來看看具體使用時(shí)的不同之處

subtractive
shadowmask

從生成的文件來看裸违,shadowmask模式比subtractive模式多了一張貼圖,這張貼圖保存了靜態(tài)物體的陰影烘焙信息本昏。那么subtractive模式?jīng)]有這張貼圖是不是意味著沒有陰影信息呢供汛?其實(shí)不是的,subtractive模式中靜態(tài)物體的陰影也烘焙了涌穆,并且保存在了光照貼圖中紊馏,也就是說陰影信息其實(shí)是shadowmask模式額外多用了一張貼圖來保存,并不是說subtractive模式陰影信息沒了蒲犬。

subtractive
shadowmask

那么在shadowmask模式下有了這張陰影貼圖后我們?cè)撊绾稳ナ褂媚刂旒啵靠聪旅娴拇a

float directAtten = SHADOW_ATTENUATION(i);

float viewZ = dot(_WorldSpaceCameraPos - i.worldPos, UNITY_MATRIX_V[2].xyz);
float shadowFadeDistance = UnityComputeShadowFadeDistance(i.worldPos, viewZ);
float shadowFade = UnityComputeShadowFade(shadowFadeDistance);

float bakedAtten = UnitySampleBakedOcclusion(i.uvLM,i.worldPos);
float atten = UnityMixRealtimeAndBakedShadows(directAtten, bakedAtten, shadowFade);
col.rgb *= atten;
col.rgb += lm;

首先我們需要UnitySampleBakedOcclusion這個(gè)方法來獲取烘焙陰影,它需要光照貼圖的uv和世界坐標(biāo)來進(jìn)行采樣原叮,采樣完畢所得到的陰影需要再扔進(jìn)UnityMixRealtimeAndBakedShadows這個(gè)方法赫编,同時(shí)扔進(jìn)實(shí)時(shí)陰影和一個(gè)距離來進(jìn)行混合,使得烘焙和實(shí)時(shí)的陰影不至于涇渭分明奋隶。
現(xiàn)在我們來詳細(xì)看看這兩個(gè)方法在干什么擂送,UnitySampleBakedOcclusion的源碼如下

fixed UnitySampleBakedOcclusion (float2 lightmapUV, float3 worldPos)
{
    #if defined (SHADOWS_SHADOWMASK)
        #if defined(LIGHTMAP_ON)
            fixed4 rawOcclusionMask = UNITY_SAMPLE_TEX2D(unity_ShadowMask, lightmapUV.xy);
        #else
            fixed4 rawOcclusionMask = fixed4(1.0, 1.0, 1.0, 1.0);
            #if UNITY_LIGHT_PROBE_PROXY_VOLUME
                if (unity_ProbeVolumeParams.x == 1.0)
                    rawOcclusionMask = LPPV_SampleProbeOcclusion(worldPos);
                else
                    rawOcclusionMask = UNITY_SAMPLE_TEX2D(unity_ShadowMask, lightmapUV.xy);
            #else
                rawOcclusionMask = UNITY_SAMPLE_TEX2D(unity_ShadowMask, lightmapUV.xy);
            #endif
        #endif
        return saturate(dot(rawOcclusionMask, unity_OcclusionMaskSelector));

    #else

        //In forward dynamic objects can only get baked occlusion from LPPV, light probe occlusion is done on the CPU by attenuating the light color.
        fixed atten = 1.0f;
        #if defined(UNITY_INSTANCING_ENABLED) && defined(UNITY_USE_SHCOEFFS_ARRAYS)
            // ...unless we are doing instancing, and the attenuation is packed into SHC array's .w component.
            atten = unity_SHC.w;
        #endif

        #if UNITY_LIGHT_PROBE_PROXY_VOLUME && !defined(LIGHTMAP_ON) && !UNITY_STANDARD_SIMPLE
            fixed4 rawOcclusionMask = atten.xxxx;
            if (unity_ProbeVolumeParams.x == 1.0)
                rawOcclusionMask = LPPV_SampleProbeOcclusion(worldPos);
            return saturate(dot(rawOcclusionMask, unity_OcclusionMaskSelector));
        #endif

        return atten;
    #endif
}

首先可以知道,我們要用UnitySampleBakedOcclusion不得不聲明一下SHADOWS_SHADOWMASK唯欣,否則進(jìn)入else邏輯就不讀取陰影貼圖了(這時(shí)的陰影就要去讀取光照探針中的數(shù)據(jù)了嘹吨,傳入的世界坐標(biāo)worldPos這時(shí)就有用了)。境氢。蟀拷。 然后主要的代碼就涉及到如果有光照貼圖的話碰纬,去采樣unity_ShadowMask貼圖。采樣出來的rawOcclusionMask記錄的是該像素问芬,被燈光影響的情況悦析,比如采樣的是(1,1,0,1)那么表示這個(gè)像素,被0號(hào)和1此衅、3號(hào)燈照射到了强戴,但是2號(hào)燈,不能照射到挡鞍,這是原始的遮擋信息骑歹。 unity_OcclusionMaskSelector就是說,unity會(huì)自動(dòng)的進(jìn)行篩選最強(qiáng)的燈(像是(0,1,0,0)墨微,不可能出現(xiàn)(1,1,0,0)這種有最強(qiáng)的兩盞燈)道媚,這個(gè)unity_OcclusionMaskSelector就記錄對(duì)應(yīng)的燈的編號(hào)而已。dot就是過濾出來真正需要的信息欢嘿,比如說現(xiàn)在rawOcclusionMask是(0.5,0.1,0,0.8)瞧预,unity_OcclusionMaskSelector是(0,1,0,0)相味,那么過濾出來就是0.1色查,rawOcclusionMask的g通道的值被保留下來了冀宴。

UnityMixRealtimeAndBakedShadows的源碼如下

half UnityMixRealtimeAndBakedShadows(half realtimeShadowAttenuation, half bakedShadowAttenuation, half fade)
{
    // -- Static objects --
    // FWD BASE PASS
    // ShadowMask mode          = LIGHTMAP_ON + SHADOWS_SHADOWMASK + LIGHTMAP_SHADOW_MIXING
    // Distance shadowmask mode = LIGHTMAP_ON + SHADOWS_SHADOWMASK
    // Subtractive mode         = LIGHTMAP_ON + LIGHTMAP_SHADOW_MIXING
    // Pure realtime direct lit = LIGHTMAP_ON

    // FWD ADD PASS
    // ShadowMask mode          = SHADOWS_SHADOWMASK + LIGHTMAP_SHADOW_MIXING
    // Distance shadowmask mode = SHADOWS_SHADOWMASK
    // Pure realtime direct lit = LIGHTMAP_ON

    // DEFERRED LIGHTING PASS
    // ShadowMask mode          = LIGHTMAP_ON + SHADOWS_SHADOWMASK + LIGHTMAP_SHADOW_MIXING
    // Distance shadowmask mode = LIGHTMAP_ON + SHADOWS_SHADOWMASK
    // Pure realtime direct lit = LIGHTMAP_ON

    // -- Dynamic objects --
    // FWD BASE PASS + FWD ADD ASS
    // ShadowMask mode          = LIGHTMAP_SHADOW_MIXING
    // Distance shadowmask mode = N/A
    // Subtractive mode         = LIGHTMAP_SHADOW_MIXING (only matter for LPPV. Light probes occlusion being done on CPU)
    // Pure realtime direct lit = N/A

    // DEFERRED LIGHTING PASS
    // ShadowMask mode          = SHADOWS_SHADOWMASK + LIGHTMAP_SHADOW_MIXING
    // Distance shadowmask mode = SHADOWS_SHADOWMASK
    // Pure realtime direct lit = N/A

    #if !defined(SHADOWS_DEPTH) && !defined(SHADOWS_SCREEN) && !defined(SHADOWS_CUBE)
        #if defined(LIGHTMAP_ON) && defined (LIGHTMAP_SHADOW_MIXING) && !defined (SHADOWS_SHADOWMASK)
            //In subtractive mode when there is no shadow we kill the light contribution as direct as been baked in the lightmap.
            return 0.0;
        #else
            return bakedShadowAttenuation;
        #endif
    #endif

    #if (SHADER_TARGET <= 20) || UNITY_STANDARD_SIMPLE
        //no fading nor blending on SM 2.0 because of instruction count limit.
        #if defined(SHADOWS_SHADOWMASK) || defined(LIGHTMAP_SHADOW_MIXING)
            return min(realtimeShadowAttenuation, bakedShadowAttenuation);
        #else
            return realtimeShadowAttenuation;
        #endif
    #endif

    #if defined(LIGHTMAP_SHADOW_MIXING)
        //Subtractive or shadowmask mode
        realtimeShadowAttenuation = saturate(realtimeShadowAttenuation + fade);
        return min(realtimeShadowAttenuation, bakedShadowAttenuation);
    #endif

    //In distance shadowmask or realtime shadow fadeout we lerp toward the baked shadows (bakedShadowAttenuation will be 1 if no baked shadows)
    return lerp(realtimeShadowAttenuation, bakedShadowAttenuation, fade);
}

相對(duì)于上一個(gè)方法簇抵,這個(gè)理解起來比較簡(jiǎn)單怯屉,根據(jù)不同情況返回實(shí)時(shí)陰影或者烘焙陰影窥淆,或者通過距離(點(diǎn)到攝像頭的距離)來進(jìn)行烘焙陰影與實(shí)時(shí)陰影的混合驰怎。

現(xiàn)在來看這個(gè)方法里的fade參數(shù)钞馁,通過代碼可以看出我們需要調(diào)用UnityComputeShadowFadeDistanceUnityComputeShadowFade來計(jì)算得到最終的fade虑省,那么就來看看這兩個(gè)方法在干什么吧。

UnityComputeShadowFadeDistance源碼如下

float UnityComputeShadowFadeDistance(float3 wpos, float z)
{
    float sphereDist = distance(wpos, unity_ShadowFadeCenterAndType.xyz);
    return lerp(z, sphereDist, unity_ShadowFadeCenterAndType.w);
}

這里unity_ShadowFadeCenterAndType包含了陰影中心位置(xyz分量保存)和陰影的類型(w分量保存)僧凰,由世界坐標(biāo)wpos計(jì)算得到與陰影中心位置的距離sphereDist探颈,按照陰影類型在視線距離zsphereDist之間做lerp操作來得到陰影fade的距離。不過我谷歌了一下训措,這個(gè)陰影類型w分量不是0就是1伪节,也就是說最終結(jié)果返回的不是z就是sphereDist

UnityComputeShadowFade源碼如下

half UnityComputeShadowFade(float fadeDist)
{
    return saturate(fadeDist * _LightShadowData.z + _LightShadowData.w);
}

上面計(jì)算得到的陰影fade的距離還需要進(jìn)一步的被矯正绩鸣,所以需要把計(jì)算得到的距離扔進(jìn)UnityComputeShadowFade方法怀大,而_LightShadowDataz分量包含著scale信息,w分量包含著offset信息呀闻,計(jì)算一下后將結(jié)果限制在0-1之間化借,就是最終陰影fade的距離了。

最后捡多,我們把UnityMixRealtimeAndBakedShadows計(jì)算得出的陰影乘上輸出的顏色蓖康,再加上(shadowmask模式下烘焙出來的光照貼圖比較暗铐炫,加比較能還原真實(shí)結(jié)果。而subtractive模式下是乘上去比較能還原結(jié)果钓瞭,個(gè)人覺得這里是加還是乘以美術(shù)導(dǎo)向?yàn)闇?zhǔn))光照貼圖就好了驳遵。

這里要注意,shadowmask有兩種模式山涡,distance shadowmask和shadowmask堤结。Distance shadowmask模式使用時(shí)第一眼看上去和baked indirect模式一樣,陰影都是實(shí)時(shí)計(jì)算的鸭丛。然而竞穷,還是會(huì)有一張陰影貼圖生成,這張貼圖中的陰影是當(dāng)超出場(chǎng)景設(shè)置中的陰影距離時(shí)使用的鳞溉,而在這個(gè)距離內(nèi)都會(huì)使用實(shí)時(shí)陰影瘾带,所以這個(gè)模式會(huì)是最為昂貴的模式。我們之前代碼里已經(jīng)用上了UnityMixRealtimeAndBakedShadows這個(gè)方法熟菲,所以可以提供實(shí)時(shí)和烘焙陰影的過渡看政。

PS. 只有直接光的情況下UNITY_LIGHT_ATTENUATION就是UNITY_SHADOW_ATTENUATION,而UNITY_SHADOW_ATTENUATION就是SHADOW_ATTENUATION抄罕。

#   define UNITY_SHADOW_ATTENUATION(a, worldPos) SHADOW_ATTENUATION(a)
#ifdef DIRECTIONAL
#    define UNITY_LIGHT_ATTENUATION(destName, input, worldPos) fixed destName = UNITY_SHADOW_ATTENUATION(input, worldPos);
#endif

最后允蚣,我們來明確下各個(gè)模式下對(duì)動(dòng)靜態(tài)物體的影響。

shadowmask

distance shadowmask模式

  • 動(dòng)態(tài)物體被混合光照到會(huì)接受到:
    • 實(shí)時(shí)直接光
    • 烘焙間接光呆贿,通過光照探針
    • 在陰影距離內(nèi)動(dòng)態(tài)物體投出的實(shí)時(shí)陰影嚷兔,陰影源自shadowmap技術(shù)
    • 在陰影距離內(nèi)靜態(tài)物體投出的實(shí)時(shí)陰影,陰影源自shadowmap技術(shù)
    • 超出陰影距離后使用了光照探針的靜態(tài)物體所產(chǎn)生的烘焙陰影
  • 靜態(tài)物體被混合光照到會(huì)接受到:
    • 實(shí)時(shí)直接光
    • 烘焙間接光做入,通過光照貼圖
    • 在陰影距離內(nèi)動(dòng)態(tài)物體投出的實(shí)時(shí)陰影冒晰,陰影源自shadowmap技術(shù)
    • 在陰影距離內(nèi)靜態(tài)物體投出的實(shí)時(shí)陰影,陰影源自shadowmap技術(shù)
    • 超出陰影距離后靜態(tài)物體所產(chǎn)生的烘焙陰影竟块,通過shadowmask貼圖實(shí)現(xiàn)

shadowmask模式

  • 動(dòng)態(tài)物體被混合光照到會(huì)接受到:
    • 實(shí)時(shí)直接光
    • 烘焙間接光壶运,通過光照探針
    • 在陰影距離內(nèi)動(dòng)態(tài)物體投出的實(shí)時(shí)陰影,陰影源自shadowmap技術(shù)
    • 超出陰影距離后使用了光照探針的靜態(tài)物體所產(chǎn)生的烘焙陰影
  • 靜態(tài)物體被混合光照到會(huì)接受到:
    • 實(shí)時(shí)直接光
    • 烘焙間接光浪秘,通過光照貼圖
    • 在陰影距離內(nèi)動(dòng)態(tài)物體投出的實(shí)時(shí)陰影蒋情,陰影源自shadowmap技術(shù)
    • 超出陰影距離后使用了陰影貼圖的靜態(tài)物體所產(chǎn)生的烘焙陰影
subtractive

subtractive模式

  • 動(dòng)態(tài)物體被混合光照到會(huì)接受到:
    • 實(shí)時(shí)直接光
    • 烘焙間接光,通過光照探針
    • 在陰影距離內(nèi)動(dòng)態(tài)物體由主光源投出的實(shí)時(shí)陰影秫逝,陰影源自shadowmap技術(shù)
    • 使用了光照探針的靜態(tài)物體所產(chǎn)生的陰影
  • 靜態(tài)物體被混合光照到會(huì)接受到:
    • 烘焙直接光恕出,通過光照貼圖
    • 烘焙間接光,通過光照貼圖
    • 靜態(tài)物體產(chǎn)生的烘焙陰影违帆,通過光照貼圖
    • 在陰影距離內(nèi)動(dòng)態(tài)物體由主光源投出的實(shí)時(shí)陰影浙巫,陰影源自shadowmap技術(shù)
baked indirect

baked indirect模式

  • 動(dòng)態(tài)物體被混合光照到會(huì)接受到:
    • 實(shí)時(shí)直接光
    • 烘焙間接光,通過光照探針
    • 在陰影距離內(nèi)動(dòng)態(tài)物體投出的陰影,陰影源自shadowmap技術(shù)
    • 在陰影距離內(nèi)靜態(tài)物體投出的實(shí)時(shí)陰影的畴,陰影源自shadowmap技術(shù)
  • 靜態(tài)物體被混合光照到會(huì)接受到:
    • 實(shí)時(shí)直接光
    • 烘焙間接光渊抄,通過光照貼圖
    • 靜態(tài)物體產(chǎn)生的實(shí)時(shí)陰影,陰影源自shadowmap技術(shù)
    • 在陰影距離內(nèi)動(dòng)態(tài)物體產(chǎn)生的實(shí)時(shí)陰影丧裁,陰影源自shadowmap技術(shù)

項(xiàng)目地址

參考
unity中UnityGlobalIllumination.cginc的分析

Mixed Lighting Lightmap & Shader In Unity | Unity中混合光照Lightmap研究

Rendering 17 Mixed Lighting

Unity 陰影淡入淡出效果中Shader常量 unity_ShadowFadeCenterAndType和_LightShadowData的問題

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末护桦,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子煎娇,更是在濱河造成了極大的恐慌二庵,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,755評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件缓呛,死亡現(xiàn)場(chǎng)離奇詭異催享,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)哟绊,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門因妙,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人票髓,你說我怎么就攤上這事攀涵。” “怎么了洽沟?”我有些...
    開封第一講書人閱讀 165,138評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵以故,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我玲躯,道長(zhǎng)据德,這世上最難降的妖魔是什么鳄乏? 我笑而不...
    開封第一講書人閱讀 58,791評(píng)論 1 295
  • 正文 為了忘掉前任跷车,我火速辦了婚禮,結(jié)果婚禮上橱野,老公的妹妹穿的比我還像新娘朽缴。我一直安慰自己,他們只是感情好水援,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評(píng)論 6 392
  • 文/花漫 我一把揭開白布密强。 她就那樣靜靜地躺著,像睡著了一般蜗元。 火紅的嫁衣襯著肌膚如雪或渤。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,631評(píng)論 1 305
  • 那天奕扣,我揣著相機(jī)與錄音薪鹦,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛池磁,可吹牛的內(nèi)容都是我干的奔害。 我是一名探鬼主播,決...
    沈念sama閱讀 40,362評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼地熄,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼华临!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起端考,我...
    開封第一講書人閱讀 39,264評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤雅潭,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后却特,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體寻馏,經(jīng)...
    沈念sama閱讀 45,724評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年核偿,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了诚欠。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,040評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡漾岳,死狀恐怖轰绵,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情尼荆,我是刑警寧澤左腔,帶...
    沈念sama閱讀 35,742評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站捅儒,受9級(jí)特大地震影響液样,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜巧还,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評(píng)論 3 330
  • 文/蒙蒙 一鞭莽、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧麸祷,春花似錦澎怒、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至走孽,卻和暖如春惧辈,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背磕瓷。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評(píng)論 1 270
  • 我被黑心中介騙來泰國(guó)打工盒齿, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,247評(píng)論 3 371
  • 正文 我出身青樓县昂,卻偏偏與公主長(zhǎng)得像肮柜,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子倒彰,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 0x00 前言 在Unity的5.6版本之前的5.x中审洞,主要使用了Geomerics公司的Enlighten【1】...
    陳嘉棟閱讀 1,408評(píng)論 0 3
  • 此文分享在unity5中烘焙光照時(shí)關(guān)于軟陰影的一些見解。光照烘焙是計(jì)算機(jī)圖形學(xué)領(lǐng)域的一種技術(shù)待讳,用于為計(jì)算量巨...
    JumboWu閱讀 7,885評(píng)論 0 2
  • 游戲中人物的陰影等級(jí)分類 1.無陰影 對(duì)于一些重要性很低或者很難被注意到的芒澜,當(dāng)然大多數(shù)情況下是硬件設(shè)備配置達(dá)不到要...
    想變的很強(qiáng)的日向徹閱讀 9,947評(píng)論 0 0
  • 說好的放棄呢,還是搞了幾天搞了一個(gè)大概创淡。為啥會(huì)繼續(xù)這部分呢痴晦?思考哈:燈光-->燈光渲染-->燈光優(yōu)化-->Draw...
    夜行水寒閱讀 3,620評(píng)論 0 1
  • 文檔原文 菜鳥翻譯 Lighting Mode:指定場(chǎng)景中所有混合燈光應(yīng)使用哪種照明模式統(tǒng)一。選項(xiàng)包括: Bake...
    pawn_c閱讀 855評(píng)論 0 2