Unity-TA 成长之路(二)内置渲染管线-官方篇
本篇為Unity官方文檔的摘抄集合,為方便后續(xù)翻看。
1、渲染路徑
????????Unity 的內(nèi)置渲染管線支持不同渲染路徑。渲染路徑是與光照和陰影相關(guān)的一系列操作。不同的渲染路徑具有不同功能和性能特征。應(yīng)根據(jù)項目類型以及目標(biāo)硬件,選擇渲染路徑。
????????可在 Graphics 窗口中選擇項目使用的渲染路徑,并可為每個攝像機(jī)覆蓋該路徑。
????????如果運行項目的設(shè)備上的 GPU 不支持所選的渲染路徑,則 Unity 將自動使用較低保真度的渲染路徑。例如,在無法處理延遲著色的 GPU 上,Unity 使用前向渲染。
1.1 前向渲染
????????前向渲染是內(nèi)置渲染管線中的默認(rèn)渲染路徑。這是通用的渲染路徑。
1.1.1 簡介
????????采用前向渲染方式渲染實時光源會非常消耗資源。為了抵消此成本,可以選擇 Unity 在任何一個時間應(yīng)該為每個像素渲染的光源數(shù)量。Unity 會以較低保真度渲染場景中的其余光源:每個頂點或每個對象。
????????如果項目沒有使用大量實時光源,或者光照保真度對項目而言不重要,則此渲染路徑可能是這個項目的不錯選擇。
????????前向渲染根據(jù)影響對象的光源在一個或多個通道中渲染每個對象。光源本身也可以通過前向渲染進(jìn)行不同的處理,具體取決于它們的設(shè)置和強(qiáng)度。
1.1.2 實現(xiàn)詳細(xì)信息
????????在前向渲染中,影響每個對象的一些最亮的光源以完全逐像素光照模式渲染。然后,最多 4 個點光源采用每頂點計算方式。其他光源以球諧函數(shù) (SH) 計算,這種計算方式會快得多,但僅得到近似值。
光源是否為每像素光源根據(jù)以下原則而定:
- Render Mode 設(shè)置為 Not Important 的光源始終為每頂點或 SH 光源。
- 最亮的方向光始終為每像素光源。
- Render Mode 設(shè)置為 Important 的光源始終為每像素光源。
- 如果上述情況導(dǎo)致光源數(shù)少于當(dāng)前的 Pixel Light Count 質(zhì)量設(shè)置,則按照亮度降低的順序,更多光源采用每像素渲染方式。
每個對象的渲染按如下方式進(jìn)行:
- 基礎(chǔ)通道應(yīng)用一個每像素方向光和所有每頂點/SH 光源。
- 其他每像素光源在額外的通道中渲染(每個光源對應(yīng)一個通道)。
例如,如果某個對象受到許多光源的影響(下圖中的圓形受光源 A 到 H 的影響):
????????讓我們假設(shè)光源 A 到 H 具有相同的顏色和強(qiáng)度,并且所有光源都具有自動渲染模式,因此它們將嚴(yán)格按照此對象的以下順序排序。最亮的光源將以每像素光照模式渲染(A 到 D),然后最多 4 個光源以每頂點光照模式渲染(D 到 G),最后其余光源以 SH 進(jìn)行渲染(G 到 H):
????????光源組會重疊,例如,最后一個每像素光源混合到每頂點光照模式,因此當(dāng)對象和光源移動時,“光射量”(light popping) 較少。
1.1.3 基礎(chǔ)通道
????????基礎(chǔ)通道使用一個每像素方向光和所有 SH/每頂點光源來渲染對象。此通道還會添加著色器中的所有光照貼圖、環(huán)境光照和發(fā)射光照。在此通道中渲染的方向光可以具有陰影。請注意,光照貼圖的對象不會從 SH 光源獲得光照。
?????????在著色器中使用“OnlyDirectional”通道標(biāo)志時,前向基礎(chǔ)通道僅渲染主方向光、環(huán)境光/光照探針和光照貼圖(SH 和頂點光源不包括在通道數(shù)據(jù)中)。
1.1.4 其他通道
????????對于影響此對象的每個額外的每像素光源,需要額外的渲染通道。默認(rèn)情況下,這些通道中的光源沒有陰影(因此在結(jié)果中,前向渲染支持一個帶陰影的方向光),除非使用 multi_compile_fwdadd_fullshadows 變體快捷方式。
1.1.5 性能注意事項
????????球諧函數(shù)光源的渲染速度_很_快。這些光源的 CPU 成本很低,并且使用 GPU 的_成本基本為零_(也就是說,基礎(chǔ)通道始終會計算 SH 光照;但由于 SH 光源工作方式的原因,無論 SH 光源有多少,成本都完全相同)。
SH 光源的缺點:
- 按對象的頂點而不是按像素計算。這意味著它們不支持光照剪影和法線貼圖。
- SH 光照的頻率很低。SH 光源無法實現(xiàn)快速的光照過渡。它們也只影響漫射光照(頻率對鏡面高光而言太低)。
- SH 光照不是局部光照;SH 點光源或聚光燈在靠近某種表面時“看起是錯誤的”。
總的來說,SH 光源通常足以達(dá)到小型動態(tài)對象的光照要求。
1.2 延遲著色
1.2.1 簡介
????????延遲著色是內(nèi)置渲染管線中具有最大光照和陰影保真度的渲染路徑。??
????????延遲著色需要 GPU 支持,并且有一些局限性。這種著色方式不支持半透明對象(Unity 使用前向渲染來渲染這些對象)、正交投影(Unity 對這些攝像機(jī)使用前向渲染)或硬件抗鋸齒(但可以使用后期處理效果來獲得類似結(jié)果)。延遲著色對剔除遮罩的支持有限,并會將 Renderer.receiveShadows 標(biāo)志始終視為 true。
????????如果項目具有大量的實時光源并需要高級別的光照保真度,而目標(biāo)硬件支持延遲著色,那么此渲染路徑對于該項目而言可能是一個不錯的選擇。
1.2.2 概述
????????使用延遲著色時,可影響游戲?qū)ο蟮墓庠磾?shù)量沒有限制。所有光源都按像素進(jìn)行評估,這意味著它們都能與法線貼圖等正確交互。此外,所有光源都可以有剪影和陰影。
????????延遲著色的優(yōu)點是,光照的處理開銷與接受光照的像素數(shù)成正比。這取決于場景中的光量大小,而不管接受光照的游戲?qū)ο笥卸嗌佟R虼?#xff0c;可通過減少光源數(shù)量來提高性能。延遲著色還具有高度一致和可預(yù)測的行為。每個光源的效果都是按像素計算的,因此不會有在大三角形上分解的光照計算。
????????在缺點方面,延遲著色并不支持抗鋸齒,也無法處理半透明游戲?qū)ο?#xff08;這些對象使用前向渲染進(jìn)行渲染)。此外,它也不支持網(wǎng)格渲染器 (Mesh Renderer) 的接受陰影 (Receive Shadows) 標(biāo)志,并且僅在有限程度上支持剔除遮罩。最多只能使用四個剔除遮罩。也就是說,剔除層遮罩必須至少包含所有層減去四個任意層,即必須設(shè)置 32 個層中的 28 個層。否則,會產(chǎn)生圖形瑕疵。????????
1.2.3 要求?????
????????延遲著色要求顯卡具有多渲染目標(biāo) (MRT)、著色器模型 3.0(或更高版本)并支持深度渲染紋理。從 GeForce 8xxx、Radeon X2400、Intel G45 開始,2006 年以后制造的大多數(shù) PC 顯卡都支持延遲著色。
????????所有至少運行 OpenGL ES 3.0 的移動設(shè)備都支持延遲著色。
注意:使用正交投影 (Orthographic projection) 時不支持延遲渲染。如果攝像機(jī)的投影模式設(shè)置為正交模式,則攝像機(jī)將回退到前向渲染。
1.2.4 性能注意事項
????????延遲著色中的實時光源的渲染開銷與接受光照的像素數(shù)成比例,并_不_依賴于場景復(fù)雜度。所以小型點光源或聚光燈的渲染成本非常低,如果它們被場景游戲?qū)ο笸耆虿糠终趽?#xff0c;那么成本甚至更低。
????????當(dāng)然,有陰影的光源比沒有陰影的光源的成本高得多。在延遲著色中,對于每個陰影投射光源,仍然需要將投射陰影的游戲?qū)ο箐秩疽淮位蚨啻巍4送?#xff0c;應(yīng)用陰影的光照著色器的渲染開銷高于禁用陰影時的渲染開銷。
1.2.5 實現(xiàn)詳細(xì)信息
????????如果對象的著色器不支持延遲著色,則會在延遲著色結(jié)束后使用前向渲染路徑來渲染這些對象。
????????下面列出了 G 緩沖區(qū)中渲染目標(biāo) (RT0 - RT4) 的默認(rèn)布局。數(shù)據(jù)類型放置在每個渲染目標(biāo)的各個通道中。使用的通道顯示在括號內(nèi)。
- RT0,ARGB32 格式:漫射顏色 (RGB),遮擋 (A)。
- RT1,ARGB32 格式:鏡面反射顏色 (RGB),粗糙度 (A)。
- RT2,ARGB2101010 格式:世界空間法線 (RGB),未使用 (A)。
- RT3,ARGB2101010(非 HDR)或 ARGBHalf (HDR) 格式:發(fā)射 + 光照 + 光照貼圖 + 反射探針緩沖區(qū)。
- 深度+模板緩沖區(qū)。
????????因此,默認(rèn)的 G 緩沖區(qū)布局為 160 位/像素(非 HDR)或 192 位/像素 (HDR)。
????????如果混合光照模式為 Shadowmask 或 Distance Shadowmask,則使用第五個目標(biāo):*RT4,ARGB32 格式:光照遮擋值 (RGBA)。
????????因此,G 緩沖區(qū)布局為 192 位/像素(非 HDR)或 224 位/像素 (HDR)。
????????如果硬件不支持五個并發(fā)渲染目標(biāo),則使用陰影遮罩的對象將回退到前向渲染路徑。 當(dāng)攝像機(jī)不使用 HDR 時,發(fā)射+光照緩沖區(qū) (RT3) 采用對數(shù)編碼,因此提供的動態(tài)范圍高于 ARGB32 紋理通常可能提供的范圍。
????????當(dāng)攝像機(jī)使用 HDR 渲染時,不會為發(fā)射 + 光照緩沖區(qū) (RT3) 創(chuàng)建單獨的渲染目標(biāo);而是將攝像機(jī)渲染到的渲染目標(biāo)(即傳遞給圖像效果的渲染目標(biāo))用作 RT3。????????
1.2.6 G緩沖區(qū)通道
????????G 緩沖區(qū)通道將每個游戲?qū)ο箐秩疽淮巍B浜顽R面反射顏色、表面平滑度、世界空間法線和發(fā)射+環(huán)境+反射+光照貼圖都將渲染到 G 緩沖區(qū)紋理中。G 緩沖區(qū)紋理設(shè)置為全局著色器屬性供著色器以后訪問(_CameraGBufferTexture0 .._CameraGBufferTexture3 指定)。
1.2.7 光照通道????
????????光照通道根據(jù) G 緩沖區(qū)和深度來計算光照。光照是在屏幕空間內(nèi)計算的,因此處理所需的時間與場景復(fù)雜性無關(guān)。光照將添加到發(fā)射緩沖區(qū)。
????????不與攝像機(jī)近平面相交的點光源和聚光燈將渲染為 3D 形狀,并會啟用 Z 緩沖區(qū)對場景的測試。因此,部分或完全遮擋的點光源和聚光燈的渲染成本很低。方向光以及與近平面相交的點光源/聚光燈將渲染為全屏四邊形。
????????如果光源啟用了陰影,那么也會在此通道中渲染并應(yīng)用陰影。請注意,陰影并非是“無成本”的;需要渲染陰影投射物,并且必須應(yīng)用更復(fù)雜的光照著色器。
????????唯一可用的光照模型是標(biāo)準(zhǔn) (Standard) 光照模型。如果需要不同的模型,可修改光照通道著色器,方法是將內(nèi)置著色器中的 Internal-DeferredShading.shader 文件的修改版本放入“Assets”文件夾中名為“Resources”的文件夾內(nèi)。然后打開 Graphics 設(shè)置(菜單:Edit > Project Settings,然后單擊 Graphics 類別)。將“Deferred”下拉選單改為“Custom Shader”。然后,更改當(dāng)前使用的著色器對應(yīng)的著色器 (Shader) 選項。
?1.3 舊版延遲 (Legacy Deferred)
????????舊版延遲(光照預(yù)通道)類似于延遲著色,只是采用不同的技術(shù)并進(jìn)行不同的折中。它不支持 Unity 5 基于物理的標(biāo)準(zhǔn)著色器。
????????從 Unity 5.0 開始,舊版延遲渲染路徑被認(rèn)為是舊版功能,因為它不支持某些渲染功能(例如標(biāo)準(zhǔn)著色器、反射探針)。新項目應(yīng)考慮改用延遲著色渲染路徑。使用正交投影 (Orthographic projection) 時不支持延遲渲染。如果攝像機(jī)的投影模式設(shè)置為正交模式,則攝像機(jī)將始終使用前向渲染。
1.3.1 概述
????????使用延遲光照時,可影響對象的光源數(shù)量沒有限制。所有光源都按像素進(jìn)行評估,這意味著它們都能與法線貼圖等正確交互。此外,所有光源都可以有剪影和陰影。
????????延遲光照的優(yōu)點是,光照的處理開銷與接受光照的像素數(shù)成正比。這取決于場景中的光量大小,而不管接受光照的對象有多少。因此,可通過減少光源數(shù)量來提高性能。延遲光照還具有高度一致和可預(yù)測的行為。每個光源的效果都是按像素計算的,因此不會有在大三角形上分解的光照計算。
????????在缺點方面,延遲光照并不支持抗鋸齒,也無法處理半透明對象(這些對象將使用前向渲染進(jìn)行渲染)。此外,它也不支持網(wǎng)格渲染器 (Mesh Renderer) 的接受陰影 (Receive Shadows) 標(biāo)志,并且僅在有限程度上支持剔除遮罩。最多只能使用四個剔除遮罩。也就是說,剔除層遮罩必須至少包含所有層減去四個任意層,即必須設(shè)置 32 個層中的 28 個層。否則,將產(chǎn)生圖形瑕疵。
1.3.2 要求
????????延遲光照要求顯卡具有著色器模型 3.0(或更高版本)、支持深度渲染紋理以及具有雙面模板緩沖區(qū)。 2004 年以后制造的大多數(shù) PC 顯卡都支持延遲光照,包括 GeForce FX 及更高版本、Radeon X1300 及更高版本、 Intel 965/GMA X3100 及更高版本。在移動端,所有支持 OpenGL ES 3.0 的 GPU 都支持延遲光照,而一部分 支持 OpenGL ES 2.0 的 GPU 也支持延遲光照(即支持深度紋理的 GPU)。
1.3.3 性能注意事項
????????延遲光照中的實時光源的渲染開銷與接受光照的像素數(shù)成比例,并_不_依賴于場景復(fù)雜度。所以小型點光源或聚光燈的渲染成本非常低,如果它們被場景對象完全或部分遮擋,那么成本甚至更低。
????????當(dāng)然,有陰影的光源比沒有陰影的光源的成本高得多。在延遲光照中,對于每個陰影投射光源,仍然需要將投射陰影的對象渲染一次或多次。此外,應(yīng)用陰影的光照著色器的渲染開銷高于禁用陰影時的渲染開銷。
1.3.4 實現(xiàn)詳細(xì)信息
????????使用延遲光照時,Unity 中的渲染過程在三個通道中進(jìn)行:
??????? (1)基礎(chǔ)通道:渲染對象以生成具有深度、法線和鏡面反射能力的屏幕空間緩沖區(qū)。
??????? (2)光照通道:將先前生成的緩沖區(qū)用于計算光照以進(jìn)入另一個屏幕空間緩沖區(qū)。
??????? (3)最終通道:再次渲染對象。它們會獲取計算出的光照,將其與顏色紋理相結(jié)合,并添加環(huán)境/發(fā)射光照。
????????如果對象的著色器無法處理延遲光照,則會在此過程結(jié)束后使用前向渲染路徑來渲染這些對象。
1.3.5 基礎(chǔ)通道
????????基礎(chǔ)通道將每個對象渲染一次。視圖空間法線和鏡面反射能力將渲染到單個 ARGB32 渲染紋理中(法線位于 RGB 通道中,而鏡面反射強(qiáng)度位于 A 通道中)。如果平臺和硬件允許將 Z 緩沖區(qū)作為紋理讀取,則不會顯式渲染深度。如果無法將 Z 緩沖區(qū)作為紋理訪問,則會使用著色器替換在另外的渲染通道中渲染深度。
????????基礎(chǔ)通道的結(jié)果是填充了場景內(nèi)容的 Z 緩沖區(qū)以及包含法線和鏡面反射能力的渲染紋理。
1.3.6 光照通道
????????光照通道根據(jù)深度、法線和鏡面反射能力來計算光照。光照是在屏幕空間內(nèi)計算的,因此處理所需的時間與場景復(fù)雜性無關(guān)。光照緩沖區(qū)是單個 ARGB32 渲染紋理,其中在 RGB 通道中包含漫射光照,而在 A 通道中包含單色鏡面光照。光照值采用對數(shù)編碼,因此提供的動態(tài)范圍高于 ARGB32 紋理通常可能提供的范圍。如果攝像機(jī)啟用了 HDR 渲染,則光照緩沖區(qū)為 ARGBHalf 格式,并且不執(zhí)行對數(shù)編碼。
????????不與攝像機(jī)近平面相交的點光源和聚光燈將渲染為 3D 形狀(的正面),并會啟用對場景的深度測試。與近平面相交的光源也用 3D 形狀進(jìn)行渲染,但作為背面并進(jìn)行反向深度測試。因此,部分或完全遮擋的光源的渲染成本很低。如果光源同時與攝像機(jī)的遠(yuǎn)平面和近平面相交,則不能使用上述優(yōu)化,而光源會被繪制為緊密四邊形并且不進(jìn)行深度測試。
????????以上說明不適用于方向光;方向光總是渲染為全屏四邊形。
????????如果光源啟用了陰影,那么也會在此通道中渲染并應(yīng)用陰影。請注意,陰影并非是“無成本”的;需要渲染陰影投射物,并且必須應(yīng)用更復(fù)雜的光照著色器。
????????唯一可用的光照模型是 Blinn-Phong。如果需要不同的模型,可修改光照通道著色器,方法是將內(nèi)置著色器中的 Internal-PrePassLighting.shader 文件的修改版本放入“Assets”文件夾中名為“Resources”的文件夾內(nèi)。然后,選擇 Edit > Project Settings > Graphics 窗口。將“Legacy Deferred”下拉選單改為“Custom Shader”。然后,更改當(dāng)前使用的光照著色器對應(yīng)的著色器 (Shader) 選項。
1.3.7 最終通道
????????最終通道將產(chǎn)生最終渲染的圖像。在此階段將再次使用著色器渲染所有對象,這些著色器會獲取光照,將其與紋理相結(jié)合,并添加發(fā)射光照。在最終通道中還會應(yīng)用光照貼圖。在靠近攝像機(jī)的位置將使用實時光照,并且僅添加烘焙間接光照。因此會交叉淡入遠(yuǎn)離攝像機(jī)的完全烘焙光照。
1.4 舊版頂點光照
????????舊版頂點光照 (Legacy Vertex Lit) 是具有最低光照保真度且不支持實時陰影的渲染路徑。這是前向渲染路徑的子集。
????????頂點光照路徑通常在一個通道中渲染每個對象,并為每個頂點計算所有光源的光照。
????????頂點光照路徑是最快的渲染路徑,具有最廣泛的硬件支持。
????????由于所有光照都是在頂點級別計算的,因此該渲染路徑不支持大多數(shù)每像素效果:陰影、法線貼圖、光照剪影和高度細(xì)節(jié)化的鏡面高光都不受支持。
1.5 渲染路徑比較
| 功能 | ||||
| 每像素光照(法線貼圖、光照剪影) | 是 | 是 | 是 | - |
| 實時陰影 | 是 | 帶有警告 | 是 | - |
| 反射探針 | 是 | 是 | - | - |
| 深度和法線緩沖區(qū) | 是 | 其他渲染pass | 是 | - |
| 軟粒子 | 是 | - | 是 | - |
| 半透明對象 | - | 是 | - | 是 |
| 抗鋸齒 | - | 是 | - | 是 |
| 光照剔除遮罩 | 受限 | 是 | 受限 | 是 |
| 光照保真度 | 全部每像素 | 部分每像素 | 全部每像素 | 全部每頂點 |
| 性能 | ||||
| 每像素光照的成本 | 照射像素數(shù)量 | 像素數(shù)量 * 照射對象數(shù)量 | 照射像素數(shù)量 | - |
| 正常渲染對象的次數(shù) | 1 | 每像素光照的數(shù)量 | 2 | 1 |
| 簡單場景的開銷 | 高 | 無 | 中 | 無 |
| 平臺支持 | ||||
| PC (Windows/Mac) | Shader Model 3.0+ 和 MRT | 所有 | Shader Model 3.0+ | 所有 |
| 移動端 (iOS/Android) | OpenGL ES 3.0 和 MRT、Metal(在搭載 A8 或更高版本 SoC 的設(shè)備上) | 所有 | OpenGL ES 2.0 | 所有 |
| 游戲主機(jī) | XB1、PS4 | 所有 | XB1、PS4、360 | - |
2、使用 CommandBuffer 來擴(kuò)展內(nèi)置渲染管線
????????包含有關(guān)在內(nèi)置渲染管線中使用 CommandBuffer 的信息。有關(guān)在渲染管線中基于可編程渲染管線使用 CommandBuffer 的信息,請參閱在可編程渲染管線中調(diào)度和執(zhí)行渲染命令。
2.1 CommandBuffer 基礎(chǔ)知識
CommandBuffer? 保存渲染命令列表(例如設(shè)置渲染目標(biāo)或繪制給定網(wǎng)格)。可以指示 Unity 在內(nèi)置渲染管線中的各個點安排和執(zhí)行這些命令,因此,您可以自定義和擴(kuò)展 Unity 的渲染功能。
使用 CommandBuffer 進(jìn)行模糊折射????????可以使用 Graphics.ExecuteCommandBuffer API 立即執(zhí)行 CommandBuffer,也可以進(jìn)行安排,讓它們在渲染管線中的給定點執(zhí)行。要安排它們,請使用 Camera.AddCommandBuffer API 與CameraEvent 枚舉,以及 Light.AddCommandBuffer API 與 LightEvent 枚舉。要查看 Unity 何時執(zhí)行以這種方式安排的 CommandBuffer,請參閱 CameraEvent 和 LightEvent 的執(zhí)行順序。
????????有關(guān)可以使用 CommandBuffer 執(zhí)行的命令的完整列表,請參閱 CommandBuffer API 文檔。請注意,一些命令僅在某些硬件上受支持。例如,與光線追蹤有關(guān)的命令僅在 DX12 中受支持。
2.2 Command Buffer 示例
標(biāo)題使用 Command Buffers 貼花????????Unity 博客文章擴(kuò)展 Unity 5 渲染管線:CommandBuffer 介紹了內(nèi)置渲染管線中的 CommandBuffer,并包含示例項目和示例代碼。它介紹如何使用 CommandBuffer 來實現(xiàn)幾種不同的效果,并包含一個示例項目和示例代碼。項目是為 Unity 的舊版本創(chuàng)建的,但原理相同。
2.3 CameraEvent 事件的執(zhí)行順序
????????CameraEvents 執(zhí)行順序取決于項目使用的渲染路徑。
2.3.1 延遲渲染路徑
- BeforeGBuffer
- Unity 渲染不透明幾何體
- AfterGBuffer
- Unity 解析深度。
- BeforeReflections
- Unity 渲染默認(rèn)反射和反射探針反射。
- AfterReflections
- Unity 將反射復(fù)制到 G 緩沖區(qū)的 Emissive 通道。
- BeforeLighting
- Unity 渲染陰影。請參閱 LightEvent 執(zhí)行順序。
- AfterLighting
- BeforeFinalPass
- Unity 對最終通道進(jìn)行處理。
- AfterFinalPass
- BeforeForwardOpaque(僅當(dāng)存在無法以延遲方式渲染的不透明幾何體時調(diào)用)
- Unity 渲染無法以延遲方式渲染的不透明幾何體。
- AfterForwardOpaque(僅當(dāng)存在無法以延遲方式渲染的不透明幾何體時調(diào)用)
- BeforeSkybox
- Unity 渲染天空盒。
- AfterSkybox
- Unity 渲染光環(huán)。
- BeforeImageEffectsOpaque
- Unity 應(yīng)用僅不透明的后期處理效果。
- AfterImageEffectsOpaque
- BeforeForwardAlpha
- Unity 渲染透明幾何體以及具有 Screen Space - Camera 渲染模式的 UI 畫布。
- AfterForwardAlpha
- BeforeHaloAndLensFlares
- Unity 渲染鏡頭光暈。
- AfterHaloAndLensFlares
- BeforeImageEffects
- Unity 應(yīng)用后期處理效果。
- AfterImageEffects
- AfterEverything
- Unity 對渲染模式不是 Screen Space - Camera 的 UI 畫布進(jìn)行渲染。
2.3.2 前向渲染路徑
- BeforeDepthTexture
- Unity 渲染不透明幾何體的深度。
- AfterDepthTexture
- BeforeDepthNormalsTexture
- Unity 渲染不透明幾何體的深度法線。
- AfterDepthNormalsTexture
- Unity 渲染陰影。請參閱 LightEvent 執(zhí)行順序。
- BeforeForwardOpaque
- Unity 渲染不透明幾何體。
- AfterForwardOpaque
- BeforeSkybox
- Unity 渲染天空盒。
- AfterSkybox
- Unity 渲染光環(huán)。
- BeforeImageEffectsOpaque
- Unity 應(yīng)用僅不透明的后期處理效果。
- AfterImageEffectsOpaque
- BeforeForwardAlpha
- Unity 渲染透明幾何體以及具有 Screen Space - Camera 渲染模式的 UI 畫布。
- AfterForwardAlpha
- BeforeHaloAndLensFlares
- Unity 渲染鏡頭光暈。
- AfterHaloAndLensFlares
- BeforeImageEffects
- Unity 應(yīng)用后期處理效果。
- AfterImageEffects
- AfterEverything
- Unity 對渲染模式不是 Screen Space - Camera 的 UI 畫布進(jìn)行渲染。
2.4 LightEvent 執(zhí)行順序
在上面的“渲染陰影”階段,對于每個投射陰影的光源,Unity 執(zhí)行以下步驟:
- BeforeShadowMap
- BeforeShadowMapPass
- Unity 渲染當(dāng)前通道的所有陰影投射器
- AfterShadowMapPass
- Unity 對每個通道重復(fù)最后三個步驟
- AfterShadowMap
- BeforeScreenSpaceMask
- Unity 將陰影貼圖收集到屏幕空間緩沖區(qū)中并執(zhí)行過濾 *AfterScreenSpaceMask
3、內(nèi)置渲染管線的硬件要求
3.1 摘要 (Summary)
| Win/Mac/Linux | iOS/Android | 游戲主機(jī) | |
| 延遲光照 | SM3.0、GPU 支持 | - | 是 |
| 前向渲染 | 是 | 是 | 是 |
| 頂點光照渲染 | 是 | 是 | - |
| 實時陰影 | GPU 支持 | GPU 支持 | 是 |
| 圖像效果 | 是 | 是 | 是 |
| 可編程著色器 | 是 | 是 | 是 |
| 固定函數(shù)著色器 | 是 | 是 | - |
3.2?實時陰影
????????實時陰影 (Realtime Shadows) 適用于大多數(shù) PC、游戲主機(jī)和移動平臺。在 Windows (Direct3D) 上,GPU 還需要支持陰影貼圖功能;自 2003 年以后,大多數(shù)獨立 GPU 都支持這些功能,而自 2007 年以后,大多數(shù)集成 GPU 也支持這些功能。從技術(shù)上講,在 Direct3D 9 上,GPU 必須支持 D16/D24X8 或 DF16/DF24 紋理格式;在 OpenGL 上,必須支持 GL_ARB_depth_texture 擴(kuò)展。
????????移動端陰影 (iOS/Android) 要求具備 OpenGL ES 2.0 和 GL_OES_depth_texture 擴(kuò)展或者 OpenGL ES 3.0。最需要注意的是,該擴(kuò)展在基于 Tegra 3 和 Tegra 4 的 Android 設(shè)備上不存在,因此陰影在這些設(shè)備上不起作用。
3.3 后期處理效果
????????后期處理效果要求有渲染到紋理功能;此功能通常在本世紀(jì)以來制造的硬件產(chǎn)品上都是受支持的。
3.4 著色器
????????可以編寫可編程著色器或固定函數(shù)著色器。可編程著色器在所有平臺上都受支持,默認(rèn)為 Shader Model 2.0(桌面端)和 OpenGL ES 2.0(移動端)。如果想要更多功能,可定位更高版本的著色器模型。固定函數(shù)著色器在除游戲主機(jī)外的所有平臺上都受支持。
總結(jié)
以上是生活随笔為你收集整理的Unity-TA 成长之路(二)内置渲染管线-官方篇的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 都2021年了,c/c++开发竟然还能继
- 下一篇: java servlet试题_JAVA