找回密碼
 注冊帳號

掃一掃,訪問微社區

DeadWind UnityShader學習筆記(二)

8
回復
1201
查看
打印 上一主題 下一主題
[ 復制鏈接 ]
排名
39864
昨日變化

6

主題

14

帖子

100

積分

Rank: 9Rank: 9Rank: 9

UID
306031
好友
12
蠻牛幣
99
威望
0
注冊時間
2018-11-26
在線時間
55 小時
最后登錄
2019-9-20

馬上注冊,結交更多好友,享用更多功能,讓你輕松玩轉社區。

您需要 登錄 才可以下載或查看,沒有帳號?注冊帳號

x
本帖最后由 DeadWind 于 2019-7-31 20:42 編輯

上一篇我們講的如何判斷游戲是否運行在模擬器上面,實現起來其實很簡單,就判斷有沒有光傳感器就行了,因為市面上大多數模擬器都還沒有達到能模擬光傳感器這個功能,因此只需要光傳感器就可以判斷出市面上的大多數模擬器了。本篇就回歸的shader的分享,進行我們的shader入門到放棄(二)!!!本篇還是以基礎及簡介為主。

主要參考文獻是《shader入門精要》--馮樂樂,請支持正版。

shader入門到放棄(一)我們講的是什么是shader、為什么學shader、以及三種shader的相同點和區別及簡單的代碼示例。正文開始。


一、選擇哪種shader
  • 除非你有非常明確的需求必須要使用固定函數著色器,例如需要在非常舊的設備上運行你的游戲(這些設備非常少見),否則請使用可編程管線的著色器,即表面著色器或頂點/片元著色器。
  • 如果你想和各種光源打交道,你可能更喜歡使用表面著色器,但需要小心它在移動平臺的性能表現。
  • 如果你需要使用的光照數目非常少,例如只有一個平行光,那么使用頂點片元著色器是一個更好的選擇。
  • 最重要的是,如果你有很多自定義的渲染效果,那么請選擇頂點/片元著色器。

二、Vertex/Fragment Shader代碼分析

如上篇所說,表面著色器渲染的代價比較大,而固定函數著色器在unity5.2后,都會被unity編譯成對應的頂點/片元著 色器。所以我們這里就主要分析頂點/片元著色器。

我們在unity場景中創建一個cube,創建一個材質球,把材質球拖到cube身上,再創建一個shader把下面的代碼復制進去,同時賦給剛剛創建的材質球。

[C#] 純文本查看 復制代碼
//定義Shader的名字
Shader "Example/Simple Shader"{
        //SubShader語句塊
        SubShader{
        //Pass語句塊
        Pass{
            //CG語句塊
          CGPROGRAM 
           //告訴Unity函數vert包含了頂點著色器的代碼
           #pragma vertex vert
           //告訴Unity函數frag包含了片元著色器的代碼
           #pragma fragment frag
      
           //頂點著色器函數,返回值是float4類型的變量,輸入float4類型的參數v,
           //POSITION和SV_POSITION都是CG/HLSL的語義,他們都是不可省略的
           //POSITION告訴Unity把模型的頂點坐標輸入到v中
           //SV_POSITION告訴Unity頂點著色器輸出的是裁剪空間中的定點坐標
          float4 vert(float4 v : POSITION) : SV_POSITION{   
              //把頂點坐標從模型空間轉換到裁剪空間
              return mul(UNITY_MATRIX_MVP,v);
          }

           //片元著色器函數,返回值是fixed4類型的變量,無輸入參數
           //SV_Target也是HLSL中的一個系統語義,告訴渲染器把用戶的輸出顏色存儲到一個渲染目標中
           fixed4 frag() : SV_Target{            
               //返回一個表示紅色的fixed4類型變量,(R,G,B,A)
               return fixed4(1.0,0.0,0.0,0.0);
           }
         ENDCG
          }
        }
}


在Unity上面就會有這樣的效果:


本篇就講到這吧,內容有點少,就只是分析了一下頂點/片元著色器的代碼。
慢慢來吧,積少成多,后面會慢慢增多內容。
下一篇可能繼續寫shader也可能寫一個小工具的實現,emmm...




回復

使用道具 舉報

4四處流浪
400/500
排名
12481
昨日變化

10

主題

159

帖子

400

積分

Rank: 4

UID
310955
好友
0
蠻牛幣
1181
威望
0
注冊時間
2019-1-7
在線時間
171 小時
最后登錄
2019-10-15
沙發
2019-8-1 09:21:44 只看該作者
Shader 從入門到放棄。。
回復 支持 反對

使用道具 舉報

5熟悉之中
940/1000
排名
10707
昨日變化

0

主題

663

帖子

940

積分

Rank: 5Rank: 5

UID
301976
好友
1
蠻牛幣
1408
威望
0
注冊時間
2018-10-31
在線時間
179 小時
最后登錄
2019-9-30
板凳
2019-8-1 10:21:20 只看該作者
Shader 之路...
回復

使用道具 舉報

0

主題

45

帖子

71

積分

Rank: 2Rank: 2

UID
327286
好友
0
蠻牛幣
54
威望
0
注冊時間
2019-7-16
在線時間
26 小時
最后登錄
2019-9-27
地板
2019-8-1 10:29:53 只看該作者
感謝分享~
回復

使用道具 舉報

5熟悉之中
803/1000
排名
2949
昨日變化

0

主題

6

帖子

803

積分

Rank: 5Rank: 5

UID
273003
好友
1
蠻牛幣
4966
威望
0
注冊時間
2018-3-18
在線時間
297 小時
最后登錄
2019-10-15
5#
2019-8-1 11:52:27 只看該作者
Shader從入門到入墳
回復 支持 反對

使用道具 舉報

4四處流浪
393/500
排名
16220
昨日變化

2

主題

42

帖子

393

積分

Rank: 4

UID
269716
好友
0
蠻牛幣
1504
威望
0
注冊時間
2018-2-27
在線時間
305 小時
最后登錄
2019-10-15
6#
2019-8-2 17:05:28 只看該作者
不是有新功能 shader graph嗎,樓主用過嗎?
回復 支持 反對

使用道具 舉報

5熟悉之中
940/1000
排名
10707
昨日變化

0

主題

663

帖子

940

積分

Rank: 5Rank: 5

UID
301976
好友
1
蠻牛幣
1408
威望
0
注冊時間
2018-10-31
在線時間
179 小時
最后登錄
2019-9-30
7#
2019-8-8 10:46:21 只看該作者
學無止境....   
回復 支持 反對

使用道具 舉報

5熟悉之中
685/1000
排名
15911
昨日變化

6

主題

408

帖子

685

積分

Rank: 5Rank: 5

UID
313764
好友
2
蠻牛幣
494
威望
0
注冊時間
2019-2-13
在線時間
235 小時
最后登錄
2019-10-15
8#
2019-8-9 15:43:28 只看該作者
買的書 現在還沒看過
回復 支持 反對

使用道具 舉報

3偶爾光臨
225/300
排名
14745
昨日變化

0

主題

81

帖子

225

積分

Rank: 3Rank: 3Rank: 3

UID
236535
好友
0
蠻牛幣
345
威望
0
注冊時間
2017-8-8
在線時間
90 小時
最后登錄
2019-10-15
9#
2019-8-9 18:59:14 只看該作者
Shader 從入門到放棄。。
回復 支持 反對

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 注冊帳號

本版積分規則

3d近3o期开机号和今天的试机号