Unity3D-Rendering Paths(渲染路徑)及LightMode(光照模式)(轉(zhuǎn))

Unity3D-Rendering Paths(渲染路徑)及LightMode(光照模式)

簡述

U3D支持不同的Rendering Path(渲染路徑),開發(fā)者應(yīng)該根據(jù)游戲內(nèi)容和目標平臺,硬件等來選擇使用哪個Rendering Path。不同的Rendering Path具有不同的表現(xiàn)效果,這些不同之處多體現(xiàn)在光照和陰影方面忍饰。查閱Render Pipeline獲取更多的細節(jié)。

可以在Editor-->Project Setting-->Graphics中設(shè)置默認的Rendering Path,也可以針對單獨的Camera進行設(shè)置钠右。

如果目標平臺的顯卡不能處理所選擇的硬件,那么Unity會自動過渡至低保真檔次Rendering Path去忘蟹。比如有的GPU不能處理Deferred Shading飒房,那就會自動采用Forward Rendering。


下面按從高效果至低效果的順序開始講解不同的Rendering Path媚值。

Deferred Shading Rendering Path

概述

由于在移動開發(fā)中并不常用Deferred Shading狠毯,故本節(jié)不細述。

Shader中使用的LightMode Pass Tag: Deferred

Deferred Shading擁有最佳的光照和陰影效果褥芒。當(dāng)場景中存在許多的實時光照時嚼松,使用Deferred Shading也是最佳的方案。當(dāng)然Deferred Shading對硬件的要求稍高锰扶。

Deferred Shading是一種屏幕空間著色技術(shù)献酗,之所以叫做Deferred(延遲的,延期的)坷牛,是因為Shading的時機不是發(fā)生在第一個Pass的Vertex和Pixel/Fragment函數(shù)內(nèi)凌摄,而是存在延遲,直到第二Pass的時候才執(zhí)行漓帅。

Deferred Shading對影響物體的光源數(shù)量沒有限制锨亏,所有的光源都是Per-Pixel(逐像素)光照痴怨,即所有光源都可以正確的和法線貼圖得到正確的計算結(jié)果。另外器予,所有的光源都可以有Light Cookie和陰影浪藻。其性能開銷與光源數(shù)量成正比,這意味著可以通過控制光照面積乾翔,減少單個物體受到光照影響的數(shù)量來獲得性能方面的提升爱葵。Deferred Shading的另一個優(yōu)點是結(jié)果能夠很方便的預(yù)測,被個光源都是逐像素光照反浓,具有一致的光照計算過程萌丈。

缺點在于,其不能真正的支持抗鋸齒以及半透明物體(半透明物體是用 Forward Rendering 渲染路徑)雷则。同時也不支持Unity3D中的Mesh Renderer組件的Receive Shadows功能辆雾,對Culling Masks的支持也不完善,最多能使用四個Culling Mask月劈。

Q: 什么是Light Cookie度迂?
A: Light Cookie又被稱作Cucoloris。是一種應(yīng)用在電影攝制時的小技巧猜揪,如下兩張圖惭墓,具體的解釋可以查看Wiki,Unity3D中的應(yīng)用可以查看Unity3D Cookies手冊Unity3d Spot Light Cookie而姐,Unity3D中的實現(xiàn)視頻過程可以點擊這里

要求

顯卡應(yīng)支持Multiple Render Targets(MRT)腊凶,Shader Model 3.0(及更高),Depth Render Textures拴念。大多數(shù)產(chǎn)于2006年以后的PC顯卡都支持本功能吭狡。
因為對MRT功能支持的缺失,本功能在移動端不受支持丈莺。(有的GPU支持划煮,但是支持的程度也非常有限。)
注意:當(dāng)使用Orthographic projection(正交投影)時Deferred rendering不適用缔俄。當(dāng)使用正交投影時會降至 Forward Rendering弛秋。

性能方面

性能方面的影響取決于物體受光源影響的數(shù)量,而不是場景的復(fù)雜度俐载。小面積的點光源或聚光燈蟹略,或光源被部分或完全摭擋,可以在很好的降低性能開銷遏佣。

有陰影的光源開銷更大挖炬,在Deferred rendering中,受到投影光源影響的状婶,且可投影的物體依然是要對影響其的每個投影光源都進行計算意敛。具有陰影的光照Shader也肯定比沒有陰影的開銷更大馅巷。


Forward Rendering Rendering Path

概述

Shader中使用的LightMode Pass Tag: ForwardBase和ForwardAdd
當(dāng)Forward不可以用時會以Legacy Vertex Lit Rendering Path的效果進行渲染

Forward是傳統(tǒng)渲染路徑。支持所有的Unity圖形特性草姻。在默認情況下钓猬,只有少數(shù)最亮的光源得以成為Per-Pixel光源。其他的光源則視為Per-Vertex撩独。

取決于影響物體的光源數(shù)量敞曹,F(xiàn)orward 在單個或多個Pass內(nèi)渲染物體。需要注意的是综膀,光源根據(jù)設(shè)置或強度的不同澳迫,本身也會具有不同的特性。

使用指南

Forward下剧劝,一些(視Quality Setting里面的設(shè)置而定)最亮的光源渲染物體時以Per-Pixel的方式進行橄登。緊接著可有四個光源為Per-Vetex光源。其余的光源都以球諧函數(shù)(SH:Spherical Harmonics)進行計算担平,可以高效但是粗略的得到計算結(jié)果。無論光源是不是Per-Pixel的都依賴以下規(guī)則:

  • 光源的Render Mode設(shè)為Not Important的锭部,則不是Per-Pixel光源
  • 最亮的平行光是Per-Pixel光源
  • 光源的Render Mode設(shè)為Important的暂论,則為Per-Pixel光源
  • 如果場景中的per-pixel光源數(shù)量少于Quality Setting中的Pixel Light Count設(shè)置的數(shù)量,則會按光照強度從強至弱的順序拌禾,將更多的光源設(shè)置為per-pixel取胎。

渲染每個物體時會依以下規(guī)則:

  • Base Pass只會用到一個per-pixel光源,以及所有其它Per-Vertex光源或SH光源
  • 其它的per-pixel光源則在Additional Pass中渲染湃窍,并且每個Pass對應(yīng)一個per-pixel光源

例如有物體受到如下A-H光源的影響:

假設(shè)所有光源都有相同的強度和顏色闻蛀,并且Render Mode都設(shè)為Auto。最亮的4個光源A-D則為per-pixel光源您市,接著是四個per-vertex光源觉痛,D-G,最后余下的光源則是SH球諧光源茵休,G-H薪棒。

注意上圖中光源分組的重疊部份。例如最后一個既可以成為per-pixel光源也可以成為per-vertex光源榕莺,因此當(dāng)物體或光源移動時俐芯,產(chǎn)生Light Popping(因光照導(dǎo)致的畫面不正常)的可能性更小。

關(guān)于Light Popping問題的實例钉鸯,點擊這里 吧史,提問者最后通過調(diào)整光照亮度得以解決。

Base Pass

Base Pass只用一個per-pixel光源和所有的SH/Vertex 光源來渲染物體唠雕。在這個pass內(nèi)也能通過shader加入光照貼圖(Lightmaps)贸营,環(huán)境光(ambient)吨述,自發(fā)光(Emissive)等。平行光在這個Pass內(nèi)產(chǎn)生陰影莽使。

注意

  • 使用LightMaps的物體(烘培過的物體)不會受到SH光源的光照锐极。
  • 當(dāng)在Shader中使用Passflag tag “OnlyDirectional”時,forward base pass只會渲染主平行光芳肌,環(huán)境光照探頭(Ambient/Light Probe)和光照貼圖灵再,SH和vertex光源沒有被包含在此pass的數(shù)據(jù)內(nèi)。

Additional Passes

Additional Passes用于渲染每個額外的per-pixel光源亿笤。在這些pass中的光源默認是不會產(chǎn)生陰影的(也就是說翎迁,F(xiàn)orward Rendering默認只支持一個光源可以產(chǎn)生陰影)。除非使用multi_compile_fwdadd_fullshadows宏净薛。

性能相關(guān)

Spherical Harmonics lights(球諧光照)非常高效汪榔。對CPU的消耗極其微小,對于GPU來說不會有額外的負擔(dān)(因為base pass原本就會一直計算SH Lighting肃拜;和球諧光照的機制有光痴腌,無論有多少球諧光的存在,消耗都是一樣的)燃领。

擴展閱讀士聪,Enlighten的簡化球諧光照文檔《球諧照明:細節(jié)》猛蔽,《球諧照明:細節(jié)》講義剥悟,球諧照明原理

SH光照的缺點:

  • 利用物體的vertices(Vertex單詞的復(fù)數(shù)形式,Vertex的復(fù)數(shù)有三種寫法: vertexes曼库,vertices 区岗,vertexs)進行計算,而不是pixels毁枯。因此不支持法線貼圖和Light Cookies慈缔。
  • SH光照函數(shù)是種非常低頻的照明函數(shù),不會有非常銳利的照明過渡种玛,另外也只會響應(yīng)Diffuse Lighting(漫反射)胀糜,對于Specular Highlight(鏡面高光)而言其頻率太低了。
  • SH lighting is not local; point or spot SH lights close to some surface will “l(fā)ook wrong”. 球諧照明不是局部的(蒂誉?局部坐標系教藻?),點光源或聚光燈形式的SH Light在靠近一些表面時看上去會不正常右锨。

總結(jié)括堤,SH Light適用于小型動態(tài)物體。


Legacy Deferred Lighting Rendering Path

概述

Shader中使用的LightMode Pass Tag: PrepassBase和PrepassFinal

Legacy Deferred (light prepass) 類似于Deferred Shading,但是和其運用了不同的技術(shù)悄窃,有不同的側(cè)重讥电。不支持Unity5的Physically Based Standard Shader。關(guān)于Legacy Deferred的原理可以查看RTR(Real-Time Rendering)網(wǎng)站的文章《Deferred lighting approaches》

Deferred Lighting從Unity 5.0起被視為傳統(tǒng)特性轧抗,因為其無法支持諸如Stander Shader恩敌,Reflection Probes等特性。新工程可以考慮直接使用 Deferred Shading(不適用于移動平臺)横媚。

注意:當(dāng)使用Orthographic projection時Deferred Rendering Path 不適用纠炮。當(dāng)使用正交投影時會降至 Forward Rendering Path。
注意:Legacy Deferred Lighting Rendering Path 和 Deferred Shading Rendering Path 都是Deferred rendering灯蝴。

Deferred Lighting對影響物體的光源數(shù)量沒有限制恢口,所有的光源都是Per-Pixel光照,即所有光源都可以正確的和法線貼圖得到正確的計算結(jié)果穷躁。另外耕肩,所有的光源都可以有Light Cookie和Shadow。其性能開銷與光源數(shù)量成正比问潭,這意味著可以通過控制光照面積猿诸,減少單個物體受到光照影響的數(shù)量來獲得性能方面的提升。Deferred Lighting的另一個優(yōu)點是結(jié)果能夠很方便的預(yù)測狡忙,被個光源都是逐像素光照梳虽,具有一致的光照計算過程。

其缺點在于不能真正的支持抗鋸齒以及半透明物體(半透明物體采用 Forward Rendering 渲染路徑)去枷。同時也不支持Unity3D中的Mesh Renderer組件的Receive Shadows功能怖辆,對Culling Masks的支持也不完善是复,最多能使用四個Culling Mask删顶。

要求

顯卡應(yīng)支持Shader Model 3.0(或更新的版本),Depth Render Textures淑廊,Two-sided Stencil Buffers逗余。大多數(shù)產(chǎn)于2004年以后的PC顯卡都支持本功能。
在手機端季惩,所有支持OpenGL ES 3.0r GPU都支持Deferred Lighting. 部份OpenGL ES 2.0的GPU也能支持(因為支持Depth Textures)录粱。
注意:當(dāng)使用Orthographic projection(正交投影)時Deferred rendering不適用。當(dāng)使用正交投影時會降至 Forward Rendering画拾。

性能方面

性能方面的影響取決于物體受光源影響的數(shù)量啥繁,而不是場景的復(fù)雜度。小面積的點光源或聚光燈青抛,或光源被部分或完全摭擋旗闽,可以在很好的降低性能開銷。

有陰影的光源開銷更大,在Deferred Rendering中适室,受到投影光源影響的嫡意,且可投影的物體依然是要對影響其的每個投影光源都進行計算。具有陰影的光照Shader也肯定比沒有陰影的開銷更大捣辆。

使用指南

使用Deferred Lighting蔬螟, 渲染過程發(fā)生在三種Pass內(nèi)。

  1. Base Pass:物體產(chǎn)生screen-space buffers, 包含depth, normals, specular power等信息汽畴。
  2. Lighting Pass:前一階段生成的Scree-space buffers用來計算光照旧巾,并放入另一個screen-space buffers。
  3. Final Pass:物體再次被處理整袁,取得前一階段計算的光照信息菠齿,結(jié)合色彩紋理,并添加ambient/emissive Lighting坐昙。

如果物體使用了不適用于Deferred Lighting Rendering Path的Shader绳匀,會使用Forward rendering path

Base Pass

Base pass會對物體進行一次處理。View sapce normals(視野空間法線)和Specular Power(高光強度)被處理為一張ARGB32格式的[Render Texture](RGB值為normals炸客, A為Specular Power)疾棵。如果目標平臺和硬件允許Z buffer以紋理的形式讀取,則不用再進行額外的渲染流程痹仙。反之是尔,則要在另一個Pass使用Shader Replacement的Shader中進行處理。

Lighting Pass

lighting passs根據(jù)Depth开仰,Normal和Specular power來計算光照拟枚。光照計算發(fā)生在Screen Space(屏幕空間)中,因此時間消耗取決與場景的復(fù)雜程度众弓。Lighting Buffer是一張ARGB32的Render Texture恩溅,Diffuse Lighting使用其RGB通道,Specular Lighting使用其A通道谓娃。

Final Pass

處理紋理脚乡,自發(fā)光等其它內(nèi)容,另外滨达,光照貼圖也在這里完成奶稠。


Legacy Vertex Lit Rendering Path

Shader中使用的 使用的LightMode Pass Tag: Vertex,VertexLMRGBM和VertexLM

效果最差,不支持實時陰影捡遍。屬于Forward Rendering Path的子集锌订。是性能最高,受支持度最多的Rendering Path(但是主機上不適用)画株。
所有的光照計算在Vertex層面完成辆飘,因此無法支持大多數(shù)的per-pixel效果涩搓,比如,陰影劈猪,法線貼圖昧甘,Light Cookies,精細的高光效果战得。


LightMode Tags

光照模型 Tags

光照模型 tag定義了pass通道在光照計算管道的角色充边,看一下下列渲染管道的細節(jié),這些tags很少手動調(diào)用常侦,大多數(shù)情況下只需要把光照交互的著色器改為Surface Shaders浇冰,然后所有這些細節(jié)都會被自動處理掉。

LightMode tags:

Always: Always rendered; no lighting is applied.
ForwardBase: Used in Forward rendering, ambient, main directional light, vertex/SH lights and lightmaps are applied.
ForwardAdd: Used in Forward rendering; additive per-pixel lights are applied, one pass per light.
Deferred: Used in Deferred Shading; renders g-buffer.
ShadowCaster: Renders object depth into the shadowmap or a depth texture.
PrepassBase: Used in legacy Deferred Lighting, renders normals and specular exponent.
PrepassFinal: Used in legacy Deferred Lighting, renders final color by combining textures, lighting and emission.
Vertex: Used in legacy Vertex Lit rendering when object is not lightmapped; all vertex lights are applied.
VertexLMRGBM: Used in legacy Vertex Lit rendering when object is lightmapped; on platforms where lightmap is RGBM encoded (PC & console).
VertexLM: Used in legacy Vertex Lit rendering when object is lightmapped; on platforms where lightmap is double-LDR encoded (mobile platforms).


Rendering Paths Comparison

- Deferred Forward Legacy Deferred Vertex Lit
Features
Per-pixel lighting (normal maps, light cookies) Yes Yes Yes -
Realtime shadows Yes With caveats Yes -
Reflection Probes Yes Yes - -
Depth&Normals Buffers Yes Additional render passes Yes -
Soft Particles Yes - Yes -
Semitransparent objects - Yes - Yes
Anti-Aliasing - Yes - Yes
Light Culling Masks Limited Yes Limited Yes
Lighting Fidelity All per-pixel Some per-pixel All per-pixel All per-vertex
Performance
Cost of a per-pixel Light Number of pixels it illuminates Number of pixels * Number of objects it illuminates Number of pixels it illuminates -
Number of times objects are normally rendered 1 Number of per-pixel lights 2 1
Overhead for simple scenes High None Medium None
Platform Support
PC (Windows/Mac) Shader Model 3.0+ & MRT All Shader Model 3.0+ All
Mobile (iOS/Android) OpenGL ES 3.0 & MRT All OpenGL ES 2.0 All
Consoles XB1, PS4 All XB1, PS4, 360 -
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末聋亡,一起剝皮案震驚了整個濱河市肘习,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌坡倔,老刑警劉巖漂佩,帶你破解...
    沈念sama閱讀 211,743評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異罪塔,居然都是意外死亡投蝉,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,296評論 3 385
  • 文/潘曉璐 我一進店門征堪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來瘩缆,“玉大人,你說我怎么就攤上這事佃蚜∮褂椋” “怎么了?”我有些...
    開封第一講書人閱讀 157,285評論 0 348
  • 文/不壞的土叔 我叫張陵谐算,是天一觀的道長熟尉。 經(jīng)常有香客問我,道長氯夷,這世上最難降的妖魔是什么臣樱? 我笑而不...
    開封第一講書人閱讀 56,485評論 1 283
  • 正文 為了忘掉前任靶擦,我火速辦了婚禮腮考,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘玄捕。我一直安慰自己踩蔚,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,581評論 6 386
  • 文/花漫 我一把揭開白布枚粘。 她就那樣靜靜地躺著馅闽,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上福也,一...
    開封第一講書人閱讀 49,821評論 1 290
  • 那天局骤,我揣著相機與錄音,去河邊找鬼暴凑。 笑死峦甩,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的现喳。 我是一名探鬼主播凯傲,決...
    沈念sama閱讀 38,960評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼嗦篱!你這毒婦竟也來了冰单?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,719評論 0 266
  • 序言:老撾萬榮一對情侶失蹤灸促,失蹤者是張志新(化名)和其女友劉穎诫欠,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體浴栽,經(jīng)...
    沈念sama閱讀 44,186評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡呕诉,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,516評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了吃度。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片甩挫。...
    茶點故事閱讀 38,650評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖椿每,靈堂內(nèi)的尸體忽然破棺而出伊者,到底是詐尸還是另有隱情馆铁,我是刑警寧澤箕慧,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站智末,受9級特大地震影響汁尺,放射性物質(zhì)發(fā)生泄漏法精。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,936評論 3 313
  • 文/蒙蒙 一痴突、第九天 我趴在偏房一處隱蔽的房頂上張望搂蜓。 院中可真熱鬧,春花似錦辽装、人聲如沸帮碰。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,757評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽殉挽。三九已至丰涉,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間斯碌,已是汗流浹背一死。 一陣腳步聲響...
    開封第一講書人閱讀 31,991評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留傻唾,地道東北人摘符。 一個月前我還...
    沈念sama閱讀 46,370評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像策吠,于是被迫代替她去往敵國和親逛裤。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,527評論 2 349