




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、©11()奇酷學(xué)院http:/www .qikedu .comI I、 IK U E D U COM今日精選-Unity3D Shader 入門精進(jìn)我們都應(yīng)該經(jīng)歷過這樣的過程。閱讀了各種大牛小牛發(fā)表的關(guān)于 Shader的 文章,他們一般都會貼出相關(guān)的代碼和效果圖,看起來酷酷的樣子。我們也是走 馬觀花的看了一下代碼,有種一知半解的成就感。等真有一天需要開發(fā)相關(guān)的 Shader效果的時(shí),如果沒有保存相關(guān)的鏈接,大腦還是一片空白,然后再重頭 Baidu (yi ge sha zi)一遍。實(shí)際上這種學(xué)習(xí)方式是很低效的。說白了就是沒有 去深刻的研究,沒有仔細(xì)經(jīng)過大腦的思考和記憶。本篇的目的主要
2、是想通過另外一種方式,通過先思考再實(shí)踐的推導(dǎo)過程,加深大家的印象,提高學(xué)習(xí)的效果,所以本文取名叫做Shader入門精進(jìn)。由于是精進(jìn), 當(dāng)然是大家應(yīng)該有一定的Shader編程基礎(chǔ)。如果沒有還是建議去看一些入門的 文章有一個(gè)大概印象。本篇不想通過什么高大上的效果, 或者教條的指明一些基礎(chǔ)知識,而是想通過默 認(rèn)的shader的簡單代碼來展開。實(shí)現(xiàn)我們知道是3D引擎來做模擬2d的游戲的。干貨來啦!讓我們不看答案自己先回答一下下面 問題,記得一定要自己先思考哦。©11()奇酷學(xué)院http:/www .qikedu .comI I、 I K U E D U COM問題1 :如果讓我們來寫一個(gè)2D
3、的默認(rèn)Shader著色器,它應(yīng)該具有什么特質(zhì)呢?1、沒有光照也不需要光照;2、傳入的主紋理就是2D的圖像信息;3、我們普遍認(rèn)知的2D圖像是有透明信息的,所以渲染的是透明物體;4、由于是透明物體,那么根本不需要深度測試;5、同樣物體的背面也是不需要渲染的(因?yàn)槲覀兏究床坏?;6、使用的是正交投影,所以沒有透視投影的實(shí)質(zhì)內(nèi)容。問題2 :梳理一下Unity3D系統(tǒng)提供的Shader的類型,如果是你你會選擇哪 一種呢?Unity支持三種shader:1) Surface Shaders: 主要處理光照和陰影,利用了 Unity的光照流水線,是一種較高層次的抽象。如果不使用光照則不要使用這種shade
4、r,因?yàn)闀胁槐匾男阅芟摹J褂肅g/HLSL編寫shader代碼,但最終的shader是需要編譯生成的。2) Vertex and Fragment Shaders:這個(gè)就是一般話的 shader了,可以實(shí)現(xiàn)任意效果,當(dāng)然也要處理所有的事情,并且不能利用Unity的光照系統(tǒng)了。同樣也使用 Cg/HLSL編寫。3) Fixed Function Shaders:固定功能,只能實(shí)現(xiàn)簡單效果,且某些平臺支持不好,因此已經(jīng)不推薦使用了,完全使用ShaderLab 編寫。©11()奇酷學(xué)院http:/www .qikedu .comI I、 IK U E D U COM答案是:顯然沒有光照
5、模型的存在,那么可以排除固定管線和還有surface,然后只剩下一個(gè)可編程 Vertex and Fragment Shaders類型可以選了。好了,我的思考就到這里,下面我們揭曉答案吧。讓我們看一下默認(rèn)的2D Shader代碼:C#純文本查看復(fù)制代碼?Shader "Sprites/Default"001002 003004 Properties005006 007008 PerRendererData _MainTex009 ("Sprite Texture", 2D)=010 "white" 011012 _Color (&qu
6、ot;Tint", Color)=013 (1,1,1,1)014015 MaterialToggle PixelSnap016 ("Pixel snap", Float) = 0017018 019020 SubShader021022 023024 Tags025026 027028 "Queue"="Transparent"029030 "lgnoreProjector"="True"031032 "RenderType"="Transparent&
7、quot;033©11()奇酷學(xué)院I I、! KU ECU COM034 "PreviewType"=' 'Plane'"035036 "CanUseSpriteAtlas"="True"037038 039040 Cull Off /關(guān)閉背面剔除041042 Lighting Off / 關(guān)閉燈光043044 ZWrite Off / 關(guān)閉 Z 緩沖045046 Blend One OneMinusSrcAlpha /047混合源系數(shù)one(1)目標(biāo)系數(shù)048 OneMinusSrcAlp
8、ha(1-one=0)049050 Pass051052 053054 CGPROGRAM055056 #pragma vertex vert057058 #pragma fragment frag059060 #pragma multi_compile _061 PIXELSNAP_ON / 告訴 Unity 編譯不062同版本的Shader,這里和后面vert中063 的 PIXELSNAP_ON對應(yīng)064065 #pragma shader_feature066 ETC1_EXTERNAL_ALPHA067068 #include "UnityCG.cginc"069
9、070 struct appdata_t /vert 輸入071072 073074 float4 vertex : POSITION;075076 float4 color : COLOR;077©11()奇酷學(xué)院I I > X-Z QI KU ED U .C owl.http:/078 float2 texcoord : TEXCOORDO;079080 ;081082 struct v2f /vert 輸出數(shù)據(jù)結(jié)構(gòu)083084 085086 float4 vertex : SV_POSITION;087088 fixed4 color : COLOR;089090 flo
10、at2 texcoord : TEXCOORD0;091092 ;093094 fixed4 _Color;095096 v2f vert(appdata_t IN)097098 099100 v2f OUT;101101 OUT.vertex =102 mul(UNITY_MATRIX_MVP,103 IN.vertex);105104 OUT.texcoord = IN.texcoord;107105 OUT.color = IN.color * _Color;109106 #ifdef PIXELSNAP_ON111107 OUT.vertex = UnityPixelSnap108 (
11、OUT.vertex);114109 #endif116110 return OUT;118111 120121 sampler2D _MainTex;©11()奇酷學(xué)院122123 sampler2D _AlphaTex;124124 fixed4 SampleSpriteTexture125 (float2 uv)127126 129127 fixed4 color = tex2D (_MainTex,128 uv);132129 #if ETC1_EXTERNAL_ALPHA /etc1134沒有透明通道,從另一圖中取a值135136 / get the color from
12、an external137 texture (usecase: Alpha support138 for ETC1 on android)139139 color.a = tex2D (_AlphaTex,140 uv).r;142141 #endif /ETC1_EXTERNAL_ALPHA144142 return color;146143 148fixed4 frag(v2f IN) : SV_Targetfixed4 c = SampleSpriteTexture (IN.texcoord) * IN.color;c.rgb *= c.a;return c;ENDCG©11
13、()奇酷學(xué)院I I、! KU EDU COMA、顯然這是一個(gè)可編程著色器類型。B、然后我們思考的相關(guān)的特性。是不是逐一印證了我們的答案。Tags"Queue"="Transparent" /渲染順序是透明物體"Ign oreProjector"="True" / 忽略投影"Re nderType"="Tra nspare nt" / 渲染類型"PreviewType"="Pla ne" / 不知道什么鳥"Ca nUseSpri
14、teAtlas"="True /可以使用精靈圖集Cull Off /關(guān)閉背面剔除Light ing Off / 關(guān)閉燈光ZWrite Off / 關(guān)閉Z緩沖Blend One OneMinusSrcAlpha /混合源系數(shù) one(1)目標(biāo)系數(shù)記住是渲染透OneMinusSrcAlpha(1-one=0),這個(gè)其實(shí)是一個(gè)公式不用深究,明效果即可C、最后再讓我們補(bǔ)充說明下幾個(gè)我們不知道是什么鬼的東東1、Tags不明白的標(biāo)簽©11()奇酷學(xué)院2 x,r其中LightMode 標(biāo)簽指定該pass的渲染路徑,Queue指定渲染順序,IgnoreProjector 指定是否
15、忽略 Projector 的影響,PreviewType 般用于UIshader ,PreviewType=Plane 的話在材質(zhì)面板看到的就是一個(gè)平面而不是材質(zhì)球。2、關(guān)于像素渲染和相關(guān)的內(nèi)置函數(shù)也就是將像素當(dāng)做頂點(diǎn)逐個(gè)處理的方式,在國外的2d游戲中很多都是像素游戲,國內(nèi)這方面介紹很少,這里知道是干什么的就行了。O Inspeclor0Offset0Black 1Shader- Sprites/DEfaultSprite TTilingTint16fitinoPIXEL PERFECT RENDERING IN ONITTIt1' s 牴口n <& iindfrudtr
16、btbd 板th piiel art ih Ifnity3 it f irstn Lt疳o dilf iculttn get tht! sri tes to rBinder as p i e«?1 perfect, ri cJtTSo I dni dad 切 vri ta a phort gui dfi, ith all thin: that yofu nciccl ipi n ordar 切 got ttiigwurikLng; wlHmjuK uslne any thirdylm!cLJ jiTj c ;陽 2 廠Pirst, t s 士Izp jaire all. rmr nf
17、irii tes in L . f寺 z 于tings;©Il<()奇酷學(xué)院2",r '' 3、etcl沒有透明通道的相關(guān)處理。這是一種紋理格式的處理。具體參考以下的文字引用主要是在安卓。平臺上應(yīng)用.3之后,平臺的默認(rèn)壓縮紋理改為 ETC2。ETC2支持半透明,使用也很方便,不過問題是尚未普及,尤其是低端機(jī)是不支持ETC2的。Unity對不支持ETC2的機(jī)子,在加載圖片的時(shí)候會解壓為RGBA,不過這樣就會造成極大的內(nèi)存浪費(fèi),也會嚴(yán)重影響加載速度。對于沒有透明色且為2的整次幕的正方形圖片,Unity會轉(zhuǎn)為ETC1,所以模型的紋理是可以用默認(rèn)的壓縮格式。需
18、要注意的是非2的整次幕的圖片,以及含有半透明的圖片。這里 主要是UI圖片資源。Unity提供了 ETC1+Alpha的支持。在圖片分頁進(jìn)行如圖所示的 設(shè)置Defflul t4 1 *|00verride for AndroidMax2046FormattCompr ession QualityliornnaJ0Ccmpre£5 using ETC1 (split alpha ehannalj1Revert | Apply ,Onlv1. Jth 'ht.jjJ tj/ij "j: "iphluf 4 esncompress ed to L > forTn< trn 芒 n r w . n IT: |_i Only POT 1:電:ctuir電"f
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025至2030年中國二氧化碳校驗(yàn)器數(shù)據(jù)監(jiān)測研究報(bào)告
- 統(tǒng)編版二年級語文下冊第七單元達(dá)標(biāo)測試卷(含答案)
- 四升五語文知識銜接專項(xiàng)訓(xùn)練 專題二·漢字 同步練習(xí)(含答案)人教統(tǒng)編版
- 高叉理論考試試題及答案
- 環(huán)宇技校焊工考試題及答案
- 2025年消防設(shè)施操作員之消防設(shè)備基礎(chǔ)知識強(qiáng)化訓(xùn)練試卷A卷附答案
- 河南單招培訓(xùn)試題及答案
- 2023-2024學(xué)年廣東省廣州市華南師大附屬番禺學(xué)校七年級(下)月考數(shù)學(xué)試卷(含答案)
- 采購與安裝分包合同(2篇)
- 農(nóng)業(yè)技術(shù)推廣數(shù)字化平臺建設(shè)方案
- 中考英語過去將來時(shí)趣味講解動態(tài)課件(43張課件)
- hidlibrary使用操作手冊
- 足療店禁止涉黃協(xié)議書模板
- 醫(yī)師定期考核題庫-公衛(wèi)
- 校外培訓(xùn)機(jī)構(gòu)規(guī)范辦學(xué)承諾書
- 非遺文化之漆扇介紹課件
- 軟件工程自考02333重點(diǎn)難點(diǎn)匯集
- 污水氣浮處理工程技術(shù)規(guī)范(HJ 2007-2010)
- 護(hù)理技能操作案例分析
- 第十一屆大唐杯5G知識考試題庫300題(含答案)
- 宣講《鑄牢中華民族共同體意識》全文課件
評論
0/150
提交評論