日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Unity Shaders

發(fā)布時間:2025/7/14 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Unity Shaders 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

推薦!!

Unity技術人員的博客:

http://aras-p.info/blog/

?

Unity 中的 Shader 按照使用方式來分的話,分為3種:

  • Surface Shader

受光照影響 Cg/HLSL。如果不受光照? 不要使用這種類型。最后這種shader也會自動轉化成 vertex/fragment。

這種 Shader 的存在是由于編寫跟光照交互的代碼不太好寫,Unity專門用這種方式來簡化光照Shader的編寫。會自動生成代碼。

關于 Surface Shader 推薦閱讀:

http://www.cnblogs.com/flappy/archive/2012/08/10/2631348.html

http://aras-p.info/blog/2010/07/16/surface-shaders-one-year-later/

?

  • Vertex/Fragment

如果不需要受光照的話 就使用這種類型。這種方式最靈活。靈活也就意味著比較麻煩。 Cg/HLSL。

使用方法:直接在 Pass 中插入 Cg 代碼。CGPROGRAM...ENDCG

  • Fixed Function

老顯卡。固定渲染管線。如果你編寫過 Direct3D 或者 OpenGL 的固定管線的程序,會發(fā)現(xiàn)很像。

?

ShaderLab 是什么東西

Unity自定義的一套shader語法。類似與 CgFX 以及 Direct3D 的 FX 文件,描述了材質。

不管你選擇使用哪一種 Shader (就是上面列出的3種),你都是用 ShaderLab 的語法來寫的。

?

shader定義屬性,可以在Inspector中顯示。

SubShader

表示適用于某個顯卡的 shader。可以寫多個,以匹配多種顯卡。編寫的順序是 高端->中端->低端。Unity會自動選擇第一個可以用的 SubShader。

Pass

在一個 SubShader中 可以包含多個 Pass,這些 Pass 會從上到下一個一個執(zhí)行下去。

Fallback

如果你的SHADER中任何一個SubShader都不被當前機器支持。那么你可以使用這個命令讓他使用另一個Shader里面的 SubShader。就好像把他的內容拷貝進來了似的。

引用其他文件的Pass

如果你的 Pass 別人已經(jīng)寫了跟你一模一樣的。可以使用 UsePass 命令去引用另一個文件中的 Pass。

如何判斷是使用固定管線還是編程管線

如果在 Pass? 使用了 vertex或者fragment。固定管線中的相應功能就會被關閉。vertex->3d變換(x).光照(x).紋理坐標自動生成(x)? fragment->SetTexture(x)

?

Shader文件的基本組成

// 定義 Shader 的名字 Shader "Custom/BasicDiffuse" {// 1個 Property 部分 Properties {}// 若干個 SubShader(至少1個) SubShader {// 每個 SubShader 中包含若干個 Pass(至少1個) Pass {}}SubShader {} }

?Surface Shader的編寫

這幾篇文檔需要一起看:

http://docs.unity3d.com/Manual/SL-SurfaceShaders.html

http://docs.unity3d.com/Manual/SL-SurfaceShaderExamples.html

http://docs.unity3d.com/Manual/SL-SurfaceShaderLightingExamples.html

1. vertex/fragment的 CGPROGRAM...ENDCG 是在 Pass 段中的? 而 Surface 是在 SubShader 中的。

2. 使用 #pragma surface ... 來標識這是一個 Surface Shader

?

轉載于:https://www.cnblogs.com/answerwinner/p/3795263.html

總結

以上是生活随笔為你收集整理的Unity Shaders的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。