Unity風(fēng)格化場景之:The Illustrated Nature (二)
上文說到咳短,這個(gè)風(fēng)格化場景的Color Grading可以媲美喬碧蘿殿下的美顏,其實(shí)光說Color Grading并不確切嘹悼,應(yīng)該說整個(gè)后處理限匣。本文就來學(xué)習(xí)一下他的后處理是怎么做的哲身。
打開和關(guān)閉后處理捉邢,效果對比如下:
關(guān)閉后處理的場景明顯平了很多,霧沒了,另外整個(gè)色調(diào)變化都很大。下面我們就一步一步的上妝,把美顏重新打開府蛇。
上妝前
仔細(xì)檢查場景發(fā)現(xiàn)扰法,作者并沒有做烘培吸耿,只有一盞直線光,沒有布置任何探頭,植物部分的光照就是最簡單的Lambert。全局光照喇肋?不存在的慧脱。
作者主要設(shè)置了環(huán)境光氮采,如下:
場景設(shè)置平淡無奇,下面,開始上妝呻此。
打開AO
開了AO之后郑兴,環(huán)境光不再是無差別的疊加挽拔,場景立體了很多。
不過像我們這種做移動(dòng)設(shè)備開發(fā)的倘是,后處理的AO過于昂貴轰传,還是貼圖留AO通道比較實(shí)惠码俩。另外如果做烘培袖迎,AO也可以烘到lightmap里暇榴。
打開輝光
當(dāng)前場景并沒有強(qiáng)烈的光照菩貌,更沒有高光表現(xiàn),即便輝光的門檻設(shè)置的比較低,但是場景依然幾乎沒有受到影響。主要的改變是遠(yuǎn)處的太陽產(chǎn)生了明顯的光暈肠鲫。這應(yīng)該也是作者想要的效果导饲。
在移動(dòng)設(shè)備上命浴,如果RenderTexture的分辨率適當(dāng),采樣次數(shù)適當(dāng)禾乘,輝光是可以開的。配合hdr的話倍踪,基本可以讓游戲的表現(xiàn)上一個(gè)檔次系宫。
打開Vignette
Vignette是一個(gè)比較省的后處理效果,挺多游戲用它來做睜眼效果的建车,他的代碼也很簡單:Classic模式下扩借,越遠(yuǎn)離Vignette Center(默認(rèn)屏幕中心)的屏幕顏色,其Vignette Color(默認(rèn)黑色)的比重就越大缤至。
#if VIGNETTE
{
UNITY_BRANCH
if (_Vignette_Mode < 0.5)
{
half2 d = abs(uvDistorted - _Vignette_Center) * _Vignette_Settings.x;
d.x *= lerp(1.0, _ScreenParams.x / _ScreenParams.y, _Vignette_Settings.w);
d = pow(saturate(d), _Vignette_Settings.z); // Roundness
half vfactor = pow(saturate(1.0 - dot(d, d)), _Vignette_Settings.y);
color.rgb *= lerp(_Vignette_Color, (1.0).xxx, vfactor);
color.a = lerp(1.0, color.a, vfactor);
}
else
{
half vfactor = SAMPLE_TEXTURE2D(_Vignette_Mask, sampler_Vignette_Mask, uvDistorted).a;
#if !UNITY_COLORSPACE_GAMMA
{
vfactor = SRGBToLinear(vfactor);
}
#endif
half3 new_color = color.rgb * lerp(_Vignette_Color, (1.0).xxx, vfactor);
color.rgb = lerp(color.rgb, new_color, _Vignette_Opacity);
color.a = lerp(1.0, color.a, vfactor);
}
}
#endif
我們可以把Vignette的強(qiáng)度調(diào)高潮罪,效果如下:
霧
作者用到的霧是自己定制的,添加了霧效之后领斥,場景的遠(yuǎn)近層次就出來了嫉到。
其實(shí)我應(yīng)該先介紹霧,因?yàn)殪F的計(jì)算是放在輝光之前的月洛。
[Serializable]
[PostProcess(typeof(IL3DNFogPPPPSRenderer), PostProcessEvent.BeforeStack, "IL3DN/Fog", true)]
public sealed class IL3DN_Fog_PP : PostProcessEffectSettings
{
...
}
作者霧的實(shí)現(xiàn)類似線性霧何恶,額外提供了近/中/遠(yuǎn)三種霧色以供選擇。
此外嚼黔,你還可以控制霧是否影響天空盒细层,做法也很簡單惜辑,判斷一下屏幕像素的深度(線性)是否超過0.999998,超過則認(rèn)為是天空盒疫赎。
float4 lerpResult128 = lerp( screenCol90 , combinedColors130 , step( clampDepth139 , 0.999998 ));
#ifdef _EXCLUDESKYBOX_ON
float4 staticSwitch114 = lerpResult128;
#else
float4 staticSwitch114 = combinedColors130;
#endif
讓我隨意調(diào)整一下近/中/遠(yuǎn)的霧色盛撑,來看一下效果。我把近處的霧調(diào)整為黃色捧搞,遠(yuǎn)處的霧綠色抵卫,中間過渡的霧為藍(lán)色,霧的濃度保持不變实牡,效果如下:
好了陌僵,終于到Color Grading了
讓我們看一下在打開Color Grading之前,我們的美顏效果如何创坞。
妝畫了一半受葛,肯定差點(diǎn)意思题涨。
不過,我餓了总滩。Color Grading留待下文介紹纲堵。