Unity3D ShaderLab 修改渲染隊列進行深度排序

來源:互聯網
上載者:User

標籤:體繪製   通道   over   table   geometry   shader   攝像機   綠色   不同   

http://blog.csdn.net/meegomeego/article/details/42060389

Unity3D ShaderLab 修改渲染隊列進行深度排序

為了更深刻的理解透明度,我們還需要學習一下深度排序,簡單來說就是物體被渲染的先後順序。

Unity允許我們通過代碼來控制某個特定物體渲染到螢幕的順序。這個做法類似於photoshop中圖層的概念。

開始之前,準備工作還是建立Shader Material,準備測試情境。為了對比 是需要使用2個材質球的。

開啟我們的shader,稍微編輯一下即可看到效果。過程簡單如下:

Shader "91YGame/DepthSort" {    Properties {        _MainTex ("Base (RGB)", 2D) = "white" {}    }    SubShader {        //Tags { "RenderType"="Opaque" } default Tags.        Tags { "Queue"="Geometry-20" }        //我們的        Zwrite Off        //通知unity重寫物體的渲染深度順序。        LOD 200        CGPROGRAM        #pragma surface surf Lambert        sampler2D _MainTex;        struct Input {            float2 uv_MainTex;        };        void surf (Input IN, inout SurfaceOutput o) {            half4 c = tex2D (_MainTex, IN.uv_MainTex);            o.Albedo = c.rgb;            o.Alpha = c.a;        }        ENDCG    }     FallBack "Diffuse"}

如你所見 ,修改的內容少到極致。。。。。

返回unity,看看效果:

是的,你沒看錯。影子在前面,暴露了他的真實座標位置。可是在最終的成像渲染確把綠色的球體渲染到後面了。

 

預設情況下,unity會根據物體和攝像機之間的距離來決定渲染順序,這是符合大多數情境需求的。如果某天你需要改變。

那麼你是用Tags{}模組就可以自主控制渲染順序了。

Unity內建的渲染隊列如下:

渲染隊列 渲染隊列描述 渲染隊列值

Background

【背景】

這個隊列被最先渲染。它被用於skyboxes等。 1000

Geometry

【幾何體】

這是預設的渲染隊列。它被用於絕大多數對象。不透明幾何體使用該隊列。 2000

AlphaTest        

【透明度測試】

用於alpha測試的幾何體,它和Geometry隊列不同,在所有幾何體物體繪製後再進行渲染的對象,它更有效率。 2450

Transparent

【透明】

該渲染隊列在Geometry和AlphaTest隊列後被渲染,採用由後到前的次序。任何通過alpha通道混合的(也就是說,那些不寫入深度緩衝的Shaders)對象使用該隊列,例如玻璃和粒子效果。 3000

Overlay

【覆蓋】

該渲染隊列是用於實現疊加效果的。任何最後被渲染的對象使用該隊列,例如鏡頭光暈。 4000

一旦你確定好了使用哪一個渲染隊列,就可以給他賦予內建的渲染隊欄標籤了。我們的著色器使用Geometry,所以我們寫的是Tags { "Queue"="Geometry-20" }。

同時我們告訴物體再幾何體隊列之後在進行渲染,所以我們把它修改成了"Geometry-20"。這樣做的目的就是告訴unity,我們將它修改改成一個不透明或者說是實體物件。

但是它會在其他所有不透明的物體之後才進行渲染。

最後,我們需要在subshader中申明Zwrite 標籤。這樣告訴unity 我們要重寫物體的渲染深度順序。

我們為它所標識的渲染隊列賦予了一個值,Zwrite 的值被設定為Off。不設定,木有效果的哦!

ZWrite:是否此物體的像素深度會被記錄(預設記錄)

Zwrite on:進行深度記錄

Zwrite off:不記錄深度,通常用於半透明物體。

Unity3D ShaderLab 修改渲染隊列進行深度排序

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.