Unreal Engine4的光和影
UE4中的所有光源通過lightmass和直接兩種方式作用于物體。同時燈光分直接光和間接光。各種燈光的Movable和Stationary類型都會對物體產(chǎn)生直接光照明。所有Static類型燈光,自發(fā)光材質(zhì)物體以及Stationary經(jīng)過lightmass后會對物體產(chǎn)生間接光照明。反射也是一種間接光照明(動態(tài)天光產(chǎn)生的天光反射屬于直接光)
直接光都是動態(tài)光,可以實時變化顏色,亮度等等。所有的間接光都是靜態(tài)光,但我們?nèi)匀豢梢酝ㄟ^后期以及材質(zhì)來模擬的實時調(diào)整間接光的顏色和亮度
陰影分直接光陰影和間接光陰影;還有各種屏幕空間以及基于材質(zhì)自身空間的陰影作為補充
直接光陰影必須有直接光存在。它們通常都是動態(tài)陰影
間接光陰影必須有間接光存在。它們可以是烘培后的靜態(tài)陰影貼圖;也可以是由ILC/VLM動態(tài)的陰影
光線的一個分支是走lightmass;先看下lightmass后產(chǎn)生的一些概念
關(guān)于lightmap
Lightmap為HDR,存有燈光方向信息
Stationary light build完燈光后還有Shadowmap;如果有Stationary天光會有sky occlusion map(Bent normal信息)
展UV的時候注意Min Lightmap resolution, 定義了UV塊之間的距離。這個值要小于等于lightmap resolution,否則會出現(xiàn)lightmap像素無法匹配而溢出的問題
Lightmass設(shè)置對于品質(zhì)和計算時間的影響
Lightmass portal提高lightmap的品質(zhì)
Light Scenarios提供靜態(tài)光變化的可能性
關(guān)于Mesh Distance Field:一種3D貼圖,保存了到mesh最近表面的距離信息。mesh內(nèi)部的是負距離
使用這些信息可以通過忽略掉空的區(qū)域加快陰影計算trace的速度,由于知道到到mesh表面距離,可以產(chǎn)生半影
關(guān)于ILC(indirect light cache間接光緩存)
球形諧波是一種非直射光cache的編碼方式,也可以理解為如何把一張圖片IBL編碼到一個球體上的方式來表現(xiàn)這個位置光線的方向,強度,遮擋等信息??梢岳斫獬梢粋€非常低分辨率的cubemap(2*2像素每個面);編碼的頻率多少決定精度的高低, band的數(shù)量高低可以理解成LOD的概念,低級別的band可以表達大致的信息,但缺少細節(jié),高級別的band里包含了更細膩的信息。 band的數(shù)量越多精度越高。一般游戲里出于實時渲染和內(nèi)存的考量會使用2 band, 3band 一般使用于high end的渲染,比如Wetadigital在他們的電影渲染流程里應(yīng)用的那樣。 Cache的點的密度在電影渲染里會非常高,當然UE4里也是可以調(diào)節(jié)cache密度來符合不同性能和品質(zhì)的要求
關(guān)于VLM(Volumetric ligthmap)
也是一種3階球諧
ILC VS VLM
最主要的差別是VLM為逐像素插值(GPU),而ILC為逐物體(CPU)。像素級別插值帶來的是更加細膩的光影過度,減少動態(tài)物體運動時間接光的突然變化;另外也為照亮Volumetric fog帶來可能性
對比
打光前的準備:
PP 里AO關(guān)掉,EYE adaption關(guān)掉; SSR關(guān)掉
Directional light的特性:CSM,F(xiàn)ar CSM, Modulated shadow(Mobile), Far distance Field Ray trace shadow; Capsule direct shadow只能由Directional light投射
-
Far CSM可per object開啟,可以選擇性的來開啟一些CSM距離外的大物體投影。
-
Far Distance Field Ray Trace Shadow提供速度較快的ray trace shadow, 但精度較低,適合于中遠距離CSM距離外的解決方案。前提需要開啟mesh distance field
Sky light的特性:
-
動態(tài)Sky對物體產(chǎn)生直接的照明和直接的反射
-
動態(tài)Sky對物體產(chǎn)生Distance Field AO,這也是產(chǎn)生Distance Field AO的唯一類型的燈
-
動態(tài)物體的Distance Indirect Shadow
-
Capsule Indirect shadow
-
靜態(tài)天光會把直接光部分也cache到ILC里,結(jié)果可以通過ILC投射帶有方向線性的Indirect shadow;否則只有反彈光被cache到ILC,Indirect shadow缺少天空明度的方向性
-
靜態(tài)天光不產(chǎn)生sky的反射
-
靜態(tài)天光產(chǎn)生的所有光(lightmap)以及反射都可以被材質(zhì)AO和PP GI參數(shù)控制
-
Stationary 天光,材質(zhì)中的AO可以控制天光的反射和照明; 但無法控制Movable sky產(chǎn)生的反射和照明
-
Sky cubemap下半部的顏色是地面的顏色,否則使用 lower hemisphere is solid color 來控制地面的顏色
-
PP中的GI只能控制ILC和Lightmap中間接光的部分
-
移動僅支持靜態(tài)skylight
反射
-
受ILC或者天光或則Lightmap影響,如果ILC和天光都是黑的(比如沒有天光的全動態(tài)光環(huán)境),動態(tài)物體的反射也是黑的;
-
無論是天光還是ILC還是lightmap照亮的,PP GI以及Material AO對其都有影響
-
因為PBR下所有材質(zhì)都有一定的反射,所以即使是roughness 1的材質(zhì)也會被reflection 影響其明暗
-
手機上采樣最近的那個Reflection capture,除非開precise reflection(材質(zhì)中)
-
Reflection Capture的cubemap如果具有明顯的方向性光源對于體現(xiàn)normalmap的效果以及反射高光的效果有利;尤其手機上,可以考慮使用自定義cubemap
移動平臺燈光
-
首先調(diào)整好PP,在后期減少PC/Mobile差距:r.mobile.TonemapperFilm 打開;如果關(guān)掉TonemapperFilm需要調(diào)整Mobile Tonemapper(Contrast 0.15; Crush Hightlights 0)可以接近PC打開TonemapperFilm的效果
-
不支持所有distance field 相關(guān)的陰影。需要DX11以上
-
沒有per-object投影,所以動態(tài)point light不投影
-
燈光類型:除所有靜態(tài)燈外,動態(tài)Directional light, point light
-
ICL和VLM都支持
-
角色陰影: single sample shadow from stationary lights
-
Combined Static and CSM Shadowing 不需要CSM可以關(guān)掉,節(jié)省shader開銷
-
Lightmap direction可開關(guān)
-
Reflection 采樣方式為最近單個capture,無blend。除非high precise reflection 打開,最多混合3個,會占用貼圖采樣
-
SSR, Contact shadow不起作用
陰影的種類
UE4為了平衡品質(zhì)和效率使用了各種不同的陰影技術(shù)/方式;不同于離線渲染器;
所以由于效率的考量,UE4的陰影必須分開來討論,分動態(tài)和靜態(tài),假陰影
另外為了更好區(qū)分應(yīng)用,需要把直接光陰影和間接光陰影分開來看
-
靜態(tài)的影子:
烘培到lightmap的陰影部分;
stationary燈光烘培到shadowmap的影子,包括SDFS(Signed Distance Field Shadowmap); 以及Shadow Factor Shadowmap(打開燈光的Use Area Shadow For Stationary Light)
-
動態(tài)的影子:
CSM; Per-object shadow; Capsule shadow; Distance field shadow(DF shadow and DF soft shadow); Modulate shadow; DFAO
-
假陰影:
SSAO, Contact Shadow
-
直接光遮蔽:由直接光產(chǎn)生的陰影
Modulate shadow; capsule shadow; DF lightmap; Shadow factor shadowmap; Preshadows; Baked shadow on lightmap; DF shadow; DF soft shadow; CSM shadow; Per-object shadow; Contact Shadow
-
間接光遮蔽:
Baked shadow on lightmap; SSAO; DFAO; Capsule shadow;
-
靜態(tài)物體能使用的陰影:
靜態(tài)的影子;CSM; DF shadow(DF shadow & DF soft shadow); DFAO; SSAO; Contact Shadow
-
靜態(tài)不能使用的影子:Capsule shadow; Per-object shadow
-
動態(tài)物體能使用的陰影: CSM; Capsule shadow(only for skeletalmesh); Per-object shadow; DF shadow(DF shadow & DF soft shadow); DFAO; SSAO; Contact Shadow
-
Skeletal mesh不能使用的陰影:DF Shadows; DFAO
-
一些燈光特有的陰影:
CSM只能由Directional light投射
Capsule direct shadow只能由Directional light投射
-
材質(zhì)中的光線屏蔽:
Material Ambient Occlusion Input:可以屏蔽所有ILC以及Lightmap,非動態(tài)天光(Static&Stationary?)以及靜態(tài)反射產(chǎn)生的照明
關(guān)于Bent Normal
結(jié)合Material AO起作用;只能屏蔽間接光;外部預(yù)烘培,比如Substance Designer;作用于動態(tài)物體;Stationary天光build后為Staticmesh會生成Sky occlusion bent normal
Bent Normal效果
后期光線遮蔽:
Postprocess Indirect lighting intensity 影響Lightmap, 靜態(tài)反射,ILC產(chǎn)生的照明
陰影的品質(zhì):
-
靜態(tài)影子主要取決于lightmass的參數(shù)以及l(fā)ightmap的分辨率,還有就是UV展的品質(zhì) 具體見上
-
幾個比較關(guān)鍵的參數(shù)是Static Lighting Level Scale越小精度越高; Indirect Lighting Quality越高質(zhì)量越高,主要用來解決只有間接光照明區(qū)域產(chǎn)生的黑斑問題;Indirect Lighting Smoothness可以平滑一些lightmap的黑斑,色階; Compress lightmaps對于高要求不壓縮
-
對于Stationary lights使用Area light for shadowmaps可以產(chǎn)生虛影/半影
-
Lightingmap的分辨率不需要太高,高了非常大的影響計算時間和磁盤內(nèi)存空間
-
Light portal的引用來提高天光的陰影
-
貼子Let’s Make Lightmass EPIC
-
-
動態(tài)的影子各種影子影響品質(zhì)因素不同:
-
關(guān)于PCF filter。 動態(tài)影子的一種過濾處理方式,來提高影子的品質(zhì),開銷高。動態(tài)影子filter的品質(zhì)可以由r.ShadowQuality來控制PCF的fitler作用大小。 Shadow Filter Sharpen(Detail Panel中)可以來強化這個濾鏡效果
-
-
動態(tài)陰影的精度顯示是如何工作的
無論是CSM后者per-object shadow,都會有一個最大分辨率和最小分辨率。當前看到的陰影的精度取決于賦予的最大和最小分辨率的值,以及當前調(diào)用到了最大到最小之前的哪級。調(diào)用的機制取決于投射物屏幕空間的大??;越小,調(diào)用越低精度的陰影,直到達到其最小分辨率為止;越大調(diào)用越高精度的陰影,直到達到最大分辨率為止。我們可以通過一些設(shè)置和參數(shù)來提高最大最小陰影精度,以及提高或減小當前調(diào)用精度。比如提高最小精度可以強制提高屏幕空間占比并不是很大的物體的陰影精度;其他具體見下列參數(shù)解釋
– 默認值 0.03
– 減小這個值使得更遠距離的燈光還能照亮物體
-
各種參數(shù)(主要影響CMS和Per-object shadow);
-
r.Shadow.FadeResolution – 投射物在屏幕上的的分辨率多大的時候開始fade out(淡出)的行為。 Only for Per-Object Shadows
– 默認值: 64
– 減小這個值可以讓陰影在更小的時候開始淡出,從另外角度講也可以用作更遠的距離開始淡出 -
r.Shadow.MinResolution – 控制fade out結(jié)束的時候投射物在屏幕上的分辨率達到多大。這個值一般比 FadeResolution 設(shè)置的小一些,以便有一個fade的過程。如果這個值比大于等于 FadeResolution 大,那投射物在達到 FadeResolution 的值之前就已經(jīng)達到 MinResolution,此時陰影突然消失,無fade過程。陰影消失后無開銷。Only for Per-Object Shadows
– 默認值: 32
– 增加這個值可以提高遠距離的陰影精度 -
r.Shadow.TexelsPerPixel – 在一定距離調(diào)用比默認級別更高級(更高分辨率)的陰影,使得陰影更加清晰。 同樣可以使用 Shadow Resolution Scale(Detail Panel中)來提高或者減小陰影的調(diào)用級別
– 默認值: 1.27324
– 增加這個值來提高陰影的清晰度,精度;Only for Per-Object Shadows -
r.Shadow.RadiusThreshold 對于既使在CSM距離內(nèi)屏幕空間太小的物體,也不會繪制陰影。這個值定義多小的物體需要繪制陰影
– 默認值: 0.03
– 減小這個值增加小物體CSM陰影的顯示距離。Only for CSM Shadows -
r.MinScreenRadiusForLights 燈光的可視距離。這個也可以由參數(shù)面板里Performance欄里的Max Draw Distance來控制(可配合Max Distance Fade range)
-
Scalebility: sg.shadowquality
[ShadowQuality@0]
r.LightFunctionQuality=0
r.ShadowQuality=0 PCF filter的品質(zhì),0不做PCF過濾,影子邊緣鋸齒(圖見上面)
r.Shadow.CSM.MaxCascades=1
r.Shadow.MaxResolution=512 僅控制per-object shadow的精度
r.Shadow.MaxCSMResolution=512 僅控制CSM shadow的精度
r.Shadow.RadiusThreshold=0.06 見上
r.Shadow.DistanceScale=0.6 Scale CSM的顯示距離,默認1
r.Shadow.CSM.TransitionScale=0
r.Shadow.PreShadowResolutionFactor=0.5 控制staticmesh在stationary light下投射到動態(tài)物體上的PreShadow的分辨率,越小越低
r.DistanceFieldShadowing=0
r.DistanceFieldAO=0
r.VolumetricFog=0
r.LightMaxDrawDistanceScale=0
-
-
CSM的精度主要和參數(shù)有關(guān)。 距離越大越糊; 級數(shù)越少越糊;分布指數(shù)越大越把分布越靠向攝像機,否則越遠離攝像機。增加這個值對于最近的陰影精度會增加,減小這個值增加中遠距離的陰影精度
-
Per-Object shadow品質(zhì)受Actor的bounce大小影響,越大品質(zhì)越差。 Point light的話還和距離物體的大小有關(guān),越遠越糊; Spot light和張角的大小有關(guān),越大越湖。
-
DF shadow受mesh DF的精度影響,物體不要太大,不要有太多的非等比放縮;
-
Ray Trace Distance Field Shadow半影受到燈光面積大小影響。Point Light或者 Spot Light的面積以及Directional Light的 Light Source Angle
-
Capsule shadow受capsule本身setup是否合理,精度如何,light cache精度等影響。 受Directional light, Light Source Angle 影響其半影大小
-
Contact Shadow用來投射一些細小的影子,也可以彌補一些漏光問題
-
SSAO受后期精度影響;
r.AmbientOcclusionLevels=2
r.AmbientOcclusionRadiusScale=1.5
陰影的效率:
-
動態(tài)影子比靜態(tài)費,動態(tài)影子還增加Draw call數(shù)量
-
CSM很費,和面數(shù)有關(guān),和屏幕覆蓋率有關(guān),和參數(shù)高低有關(guān)
-
Per-object shadow也很費,和面數(shù)有關(guān),和Actor數(shù)量有關(guān),和屏幕空間覆蓋率有關(guān),和參數(shù)高低有關(guān)
-
DF shadows 不受面數(shù)影響,效率比較高
-
Capsule shadow 效率也很高,不受角色面熟影響
-
SSAO和Contact shadow為后期效果,比較費
-
Shadow map caching for movable lights:目前是自動開啟, 可以大大降低Movale類型燈光對于靜態(tài)環(huán)境的陰影開銷(如果不移動)
-
Single Sample Shadow from Stationary Lights開關(guān)單個component是否接受stationary light 從staticmesh cast的Preshadow
-
使用r.Shadow.PreShadowResolutionFactor來減小PreShadow的開銷
-
r.Shadow.ForceSingleSampleShadowingFromStationary 1 關(guān)閉所有靜態(tài)物體到動態(tài)物體的shadow,使用light cache存儲的遮蔽信息來shadowing動態(tài)物體。這個解決手機上角色無法被靜態(tài)物體遮蔽的問題;PC上也可以減少Preshadowing 的開銷
-
Light Attachments as Group可以簡化shadow frustum以及shadow的開銷
實例開銷
Paragon – console 60fps
-
Static shadowmaps
Fortnite – console 30fps, fully dynamic
-
3 Cascades up to 4500 uu
-
RTDF shadows up to 30,000
Kite – high end PC, huge open world
-
2 Cascades up to 10k
-
RTDF shadows to 120k
-
3 Far Cascades up to 900k
陰影的控制:
通道;Cinematic; 燈光端/物件端
如何選擇陰影:就是上面講到的結(jié)合實際情況的一個平衡
-
靜態(tài)物體盡量選擇使用靜態(tài)影子,無論從品質(zhì)和效率方面都是如此
-
動態(tài)物體必須動態(tài)影子,根據(jù)品質(zhì)和效率取舍:
-
CSM品質(zhì)可以很高,但沒有半影,效率比較費,效率取決于被投射物體的面數(shù),影子屏幕像素的覆蓋率,還有陰影參數(shù)的精度高低;
-
Per-Object shadow 品質(zhì)也可以很高,也沒有半影,效率也比較費,效率取決于被投射物體的面數(shù)以及屏幕覆蓋率,還有就是被投射物體的數(shù)量,及參數(shù)精度高低;這些都非常類似CSM,但因為CSM只能是直射光
-
DF shadows(DF shadow & DF soft shadow)品質(zhì)一般,受DF精度影響,不受面數(shù)影響,效率比較高,可以有半影
-
DF AO:同上
-
Capsule shadow: 品質(zhì)一般,受capsule的數(shù)量精度設(shè)置是否合理等有關(guān);跟light cache的精度有關(guān);有半影,效率也很高;非常好的動態(tài)間接光遮蔽,尤其對于角色
-
效率上考慮不同距離使用不同類型的陰影,比如室外開闊場景動態(tài)陰影,地形不支持DF shadow, 遠距離使用Far CSM,其他物體遠距離使用DF shadow,因為DF shadow比CSM便宜,因此兼顧品質(zhì)和效率
-
具體應(yīng)用環(huán)境實例
-
室外開闊晝夜/變化燈光環(huán)境:燈光以直射光為主
CSM并調(diào)節(jié)品質(zhì)距離等; 地形打開Far CSM; Per-object給遠距離動態(tài)物體;Shadowmap Caching for movable light確保打開;角色可以Capsule shadow; 遠距離靜態(tài)物體DF shadow; DFAO打開; SSAO; Contact shadow;
-
室內(nèi)或者多反彈環(huán)境:各種Spot/Point light
靜態(tài)lightmap,靜態(tài)物體走DF shadowmap;動態(tài)物體走per-object shadow并為間接光打開Capsule shadow;如果有室外天光照明,使用light portal來提高天光遮蔽的品質(zhì);不要開DFAO;SSAO可以開;如果有動態(tài)光靜態(tài)物件可以關(guān)閉靜態(tài)陰影,打開DF shadow;對于靜態(tài)陰影注意燈光的形狀對陰影的影響,包括燈光的形狀,反彈板,自發(fā)光物體;Reflection是可以被lightmap遮蔽的,尤其對于特別光滑的表面;這個可以控制遮蔽的多少,在project setting里 Reduce lightmap mixing on smooth surfaces
-
分享到:
全部評論:0條