好,Unity Shader的從找門到入門教程= =
阿新 • • 發佈:2018-11-28
好的。當需求對我這個可憐的小貓咪下手的時候,拿棒槌逼著我去寫Shader的時候,打死我也不會屈服的[○・`Д´・ ○]!
//Shader名稱: //1.固定寫法:Shader"XXX/XXX" //2./表示層級,與C#指令碼不同的是Shader名稱和外面的檔名沒有關係 Shader"MyShader/MyShader1" { //屬性: //1.固定寫法:Properties{XXX} //2.在這裡宣告的變數會顯示在使用此Shader的材質球的面板上 //3.此處宣告的變數需要初始化,不初始化會報錯 //4.此處宣告語句不需要加';' //5.結構:_Name("ShowName",Type) // ①_Name:在此Shader中使用且在外部賦值Shader變數時使用的變數 // ②ShowName:在材質球面板上顯示的名稱 // ③Type:此變數的型別。 Properties{ //Float:浮點型 //此外還有常用的Float陣列,但是無法在此處定義 //Float/Float2/Float3/Float4 後面數字表示能存放的值的數量 _Float("Float",Float) = 0.5 //Int:整數 //雖然是Int值,但是如果你在外面的材質球上也能寫浮點數 //但是指令碼中就不闊以了 _Int("Int",Int) = 5 //Range:此變數的取值範圍,型別亦為Float _Range("Range",Range(0,100)) = 30 //Vector:四維向量 //取值為(x,y,z,w) _Vector("Vector",Vector) = (0,0,0,0) //Color:顏色型別 _Color("Color",Color) = (0,0,0,1) //圖片紋理:先設定一個顏色,{}中放置圖片紋理 //TODO:待找到理論依據 //顏色值無法改變,且無法在外面賦值,只能是在這裡預設的 _2D("2D",2D) = "white"{} //Cube:立方體紋理 立方體貼圖(不知道有什麼用,手動狗頭=3=) _Cube("Cube",Cube) = "white"{} //3D:3D紋理(不知道有什麼用,手動狗頭=3=) _3D("3D",3D) = "white"{} } //放程式碼塊的地方 SubShader{ //至少含有一個Pass //一個Pass代表一個處理流程 //一般應該有多個Pass來處理在不同裝置上的顯示效果 //一般從上至下,效果越來精簡,所以最上方的Pass塊一般為最秀的 Pass{ //又回到最初的起點,可以開始寫程式碼了 CGPROGRAM //在這裡搞CG語言程式碼 //在這裡再宣告上面設定的變數才能在Pass塊中使用 //在這裡宣告的變數後面需要加';' Float _Float; //Int比較神奇。 //我也不太清楚我是不是有別的操作影響到Int大佬的心情了,但是我的確碰到了個問題。 //如果在Pass塊中聲明瞭vertex 且 聲明瞭 fragment 函式 //這個地方就不能宣告Int變量了,不然就會報錯。 //但是單獨宣告其中一個沒有問題,但是應該沒有獨自使用這些函式的情況bia= = //就需要寫為一下情況: //Float _Int; Int _Int; Float _Range; Vector _Vector; Color _Color; 2D _2D; Cube _Cube; 3D _3D; //陣列: //Properties塊中木有辦法寫陣列,所以也就沒有辦法通過在Properties塊中宣告陣列 //然後賦值的方法來使用外部的陣列 //那怎麼整??? //因為Unity在較低版本中還沒有整合所以只能通過別的辦法來解決 //可以在Pass塊中宣告需要使用的陣列 //然後在指令碼中直接賦值的方法來實現 //但是這個辦法在unity5之前不好使 //因為專案原因我試用的是unity4.x的版本,相應指令碼中並沒有相應的方法 //所以此方法只能在Unity5之後使用(我用5.6.0f3開啟裡面是含有相應的函式的) //之前的專案怎麼辦? //升級版本吧,小老弟,或者壓縮這個需求量控制在可操作的範圍內=3= //此外:陣列的長度必須是固定的無法修改,所以需要提前先按照需求設計好 uniform Float[100] _FloatList; uniform Vector[100] _VectorList; ENDCG } } //備用方案:上述Pass塊,全都使不了,就使介個。 FallBack "Diffuse" }
真香( • ̀ω•́ )✧。
感謝以下文章嗎,為我提供了短時間內的解決方案:
這哥們提供的溫度雲圖解決方案,為我提供了思路,使我理解了其中的一些內容
感恩這個哥們,文章挺細的,比較系統化,提供了很深的理解,並且他的外掛很有用,配合UI實現的展示功能
感謝以上但不限於的哥們們,因為有的文章我看完了忘收藏了ヾ(๑╹◡╹)ノ"
以後有機會我一定不會看Shader的書的ヽ(#`Д´)ノ!
(好,留下個真香Flag= =督促自己學習,手動狗頭(๑>ڡ<)✿ )