Shader Lab 筆記
2020 04 05
1、聲明變量的屬性。
數值屬性:
QiangDu("滑條_QiangDu",Range(0,50))=0
A_Flot("浮點數_Flot",Float)=10
A_int("整數_int",int)=1
紋理屬性:
A_2D("紋理2d",2D)=" "{}
A_cube("四方貼圖cube",Cube)=""{}
A_3D("貼圖3d",3d)=""{}
顏色屬性和向量屬性
//聲明 顏色屬性和向量屬性
A_Color("顏色_Color",COLOR)=(0,0,0,0)
//向量
A_Vector("矢量圖_Vector",Vector)=(0,0,0,0)
2、Shader中"Tags"的用法和意義
句法
Tags { "TagName1" = "Value1" "TagName2" = "Value2" }
指定TagName1具有Value1,TagName2具有Value2。您可以根據需要擁有任意數量的標籤。
內置的5個標籤
*有四個預定義的渲染隊列,但是在預定義的渲染隊列之間可以有更多的隊列。預定義的隊列是:
(渲染順序)??
Background
-此渲染隊列先於其他任何隊列渲染。您通常會將它用於確實需要在後臺進行的操作。Geometry
(默認) -用於大多數對象。不透明幾何使用此隊列。AlphaTest
-經過Alpha測試的幾何使用此隊列。它是一個單獨的隊列,Geometry
因爲在繪製所有實體後,渲染經過Alpha測試的對象效率更高。Transparent
-此渲染隊列以從後到前的順序在Geometry和之後渲染AlphaTest
。任何與alpha混合的內容(即不寫入深度緩衝區的着色器)都應放在此處(玻璃,粒子效果)。Overlay
-此渲染隊列用於疊加效果。最後渲染的任何東西都應該放在這裏(例如鏡頭光暈)。
2020 04 06
3、ShaderLab 中LOD的含義是什麼?
1、
2、 Shader LOD其實就是根據設備性能的不同編譯不同版本的Shader。
這種編譯方式最早是爲了適應不同時代的顯卡而準備的。主機端本來就不存在這個問題,而現在在PC端上想找到上古級別的顯卡也不太容易。所以目前這玩意兒最大的用途也就是爲了適配高低配置不同的手機。
官網鏈接:
https://docs.unity3d.com/Manual/SL-ShaderLOD.html
Unity論壇中壇友理解經驗
https://forum.unity.com/threads/shader-lod-cant-find-examples.381298/
3、Unity的ShaderLab細節級別(LOD)*是開發人員的一項便利功能,可幫助他們在單個着色器中支持多個平臺。基本思想是應用程序可能具有SweetLightingShader
僅在PC上可以使用的。假設iPad不支持,SweetLightingShader
但它支持SemiSweetLightingShader
。您可以維護兩個單獨的着色器,或者甚至更好地將它們合併爲一個着色器,並使用LOD決定要使用的功能。
*請勿將ShaderLab LOD與幾何LOD混淆,它們是獨立的主題。
Unity渲染着色器時,它將遍歷所有子着色器並使用硬件支持的第一個着色器。
4、當需要支持各種性能不同的GPU時,Shader LOD非常有用。例如,如果您想讓遊戲在iPhone4和iPhone5S上流暢運行。
通常的做法是將一個着色器組合爲一組具有不同LOD的子着色器(將它們視爲同一着色器的版本)。您可以在具有較大LOD的子着色器中實現複雜的每像素照明,而在具有較小LOD的子着色器中實現粗糙的逐頂點照明。然後,您可以使用Shader.globalMaximumLOD在代碼中啓用適當版本的着色器。
3和4的解釋原文鏈接:
https://stackoverflow.com/questions/25210767/unity3d-shaders-level-of-detail
4、pass