Unity Skybox渲染順序測試

昨天群里有個朋友提問,一個場景中只有相機绵脯、平行光和一個Cube,相機的Clear Flags設(shè)置為Skybox蛆挫,Cube給了一個簡單的材質(zhì),Shader名為"Unlit/test":

Shader "Unlit/test"
{
    Properties
    {
        _MainTex ("Texture", 2D) = "white" {}
    }
    SubShader
    {
        Tags { "Queue"="Geometry" }
        LOD 100

        Cull Off
        ZWrite Off //不寫入深度
        ZTest Always

        Pass
        {
            ...
        }
      }
}

結(jié)果無法渲染出cube瞧剖,如圖:


ZWrite Off

然后改為ZWrite On寫入深度可免,可以渲染出來:


ZWrite On

這里就有一個疑問了,為什么呢浇借?
群里大家都討論了一番,結(jié)論是因為Cube沒有寫入深度時Skybox將cube覆蓋了逮刨,寫入深度就不會覆蓋,可以渲染出來堵泽,但是我印象中Skybox使用的渲染隊列是"Background","Background"的值是1000迎罗,而這里Cube的渲染隊列是"Geometry",也就是非透明opaque纹安,值是2000砂豌,Unity的渲染順序是按照從小到大渲染的:
Background(1000)-->Geometry(2000)-->AlphaTest(2450)-->GeometryLast(2500)-->Transparent(3000)-->Overlay(4000)

SkyBox使用的材質(zhì)是"Skybox/Procedural"


Skybox/Procedural

按照Unity官方的說法光督,應(yīng)該先渲染Skybox,然后渲染Cube筐摘,那么Cube無論是否寫入深度都會被渲染出來船老,為什么沒有渲染出來咖熟,于是又打開Frame Debugger:


Frame Debugger

可以看到確實是先渲染非透明隊列馍管,再渲染Skybox,這個就比較奇怪了确沸,難道Background在非透明之后嗎躬存?
于是又copy了Cube的Shader张惹,將Shader名改為"Unlit/test1"岭洲,將隊列改為"Background",這次都改為ZWrite On盾剩,將"Unlit/test1"的color乘以紅色fixed(1,0,0,1),忽略Skybox屎暇,只比較"Background"和"Geometry"的渲染先后驻粟,再分別copy一個Cube1和材質(zhì)球根悼,使用渲染隊列為為"Background"的Shader蜀撑,Cube1的x軸偏移一點:


"Background"和"Geometry"的渲染先后

可以看到"Geometry"確實是在Background之后渲染酷麦,那為什么Skybox使用的渲染隊列是"Background",卻在"Geometry"之后呢沃饶?Skybox使用的渲染順序到底是多少轻黑?
于是又做了個測試琴昆,還是使用Cube和"Unilt/test"的Shader氓鄙,關(guān)閉深度寫入ZWrite Off椎咧,嘗試去修改Inspector中材質(zhì)的Render Queue的值,當(dāng)值改為2501時蟋座,Cube渲染出來了:


Render Queue=2501

Frame Debugger

所以猜測Skybox的渲染順序是2500脚牍,相當(dāng)內(nèi)置的隊列是"GeometryLast",即Skybox是在非透明渲染的最后才渲染诸狭。

最后說結(jié)論:
雖然Skybox的材質(zhì)的渲染隊列是"Background"(1000),但事實的渲染隊列是"GeometryLast"(2500)驯遇,至于為什么?應(yīng)該是Unity對Skybox做了特殊處理舒帮,專門把Skybox單獨拿出來放到非透明的最后去渲染陡叠,具體如何做的不清楚玩郊,文檔也沒有說明枉阵。
但是為什么要這么做呢?當(dāng)然是出于性能的考慮兴溜,天空盒的繪制需要渲染整個屏幕,其過程伴隨的是屏幕每一個像素運行一遍片元著色器刨沦,如果放到最后去渲染,由于Early-z(提前深度測試)的存在已卷,天空盒的大部分都無法通過Early-z的測試淳蔼,無法通過的直接丟棄,就不需要運行片元著色器了鹉梨,當(dāng)然省了性能了。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末晌坤,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子骤菠,更是在濱河造成了極大的恐慌疤孕,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,635評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件祭阀,死亡現(xiàn)場離奇詭異,居然都是意外死亡专控,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評論 3 399
  • 文/潘曉璐 我一進店門赢底,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蔗牡,“玉大人,你說我怎么就攤上這事辩越。” “怎么了黔攒?”我有些...
    開封第一講書人閱讀 168,083評論 0 360
  • 文/不壞的土叔 我叫張陵督惰,是天一觀的道長不傅。 經(jīng)常有香客問我赏胚,道長,這世上最難降的妖魔是什么觉阅? 我笑而不...
    開封第一講書人閱讀 59,640評論 1 296
  • 正文 為了忘掉前任秘车,我火速辦了婚禮劫哼,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘权烧。我一直安慰自己,他們只是感情好妻率,可當(dāng)我...
    茶點故事閱讀 68,640評論 6 397
  • 文/花漫 我一把揭開白布板祝。 她就那樣靜靜地躺著,像睡著了一般扔字。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上革为,一...
    開封第一講書人閱讀 52,262評論 1 308
  • 那天,我揣著相機與錄音琢蛤,去河邊找鬼。 笑死博其,一個胖子當(dāng)著我的面吹牛迂猴,可吹牛的內(nèi)容都是我干的慕淡。 我是一名探鬼主播沸毁,決...
    沈念sama閱讀 40,833評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼携兵!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起徐紧,我...
    開封第一講書人閱讀 39,736評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎并级,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,280評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡凯旋,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,369評論 3 340
  • 正文 我和宋清朗相戀三年至非,在試婚紗的時候發(fā)現(xiàn)自己被綠了钠署。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片荒椭。...
    茶點故事閱讀 40,503評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖狸棍,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情草戈,我是刑警寧澤,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布唐片,位于F島的核電站涨颜,受9級特大地震影響费韭,放射性物質(zhì)發(fā)生泄漏庭瑰。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,870評論 3 333
  • 文/蒙蒙 一钉汗、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧损痰,春花似錦、人聲如沸卢未。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,340評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至滴铅,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間汉匙,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,460評論 1 272
  • 我被黑心中介騙來泰國打工戏自, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留伤锚,地道東北人擅笔。 一個月前我還...
    沈念sama閱讀 48,909評論 3 376
  • 正文 我出身青樓屯援,卻偏偏與公主長得像,于是被迫代替她去往敵國和親狞洋。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,512評論 2 359