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