资讯详情

unity shader格式

unity shader

  • 主要框架
    • Properties格式
      • Attribute属性标记
      • Type属性类型
    • SubShaders格式

主要框架

  • Shader “learn/MyShader”:unity工程里shader的名称, / 表示子级。
  • Properties{}属性、材料球面板显示的贴图、属性参数等都需要在这里定义设置,也可以不设置。
  • SubShaders{}SubShader第一个对应高、中、低三种机器配置SubShader当你不能满足的时候,你会以此类推。
  • FallBack “Diffuse”:如果SubShaders三个都不满意或者写了shader当一些机器不支持时,它会自动切换到引号中的名称shader。

Properties格式

  • 通用格式:
    1. Attribute属性标记,对当前属性做一些特殊处理。
    2. _Name名称,即shader变量名,也是外部脚本的调用名。
    3. Display Name材料面板上显示的名称主要起注释作用。
    4. Type属性类型,有Range(滑竿), Color, Int, Float, Vector, 2D, 3D, Cube等类型。
    5. Default Value与类型对应的属性默认值。

Attribute属性标记

  • [Header(text)]:在界面上生成一个内容text文本通常用作分类组,只支持英语、数字、空间和下划线。
  • [HideInInspector]:这个属性不会显示在材料面板中,也不会隐藏。
  • [Toggle]:勾选项,只接受数字类型,勾选时为1,否则为0。
  • [IntRange]:将参数限制在整数范围内。
  • [PowerSlider(Value)]:指数级缩放滑动条的密度接近Range左值会有更准确的调整范围,Value接受指数级控制,值为1时相当于普通Range。
  • [Enum(List)]:枚举类型,限制参数下拉列表的可选项。
  • [NoScaleOffset]:不显示纹理的缩放/偏移编辑器。
  • [Normal]:提示这是法线纹理。

见官方文件unity3D/Editor/Data/en/ScriptReference/MaterialPropertyDrawer.html

Type属性类型

//定义Numbers(数值)和Sliders(区间值) name ("display name", Range (min, max)) = number name ("display name", Float) = number name ("display name", Int) = number  //定义Colors(颜色)和Vectors(向量) //颜色表示四维向量,对应颜色RGBA通道;每个重量值为[0,1] ///向量必须是四维向量 name ("display name", Color) = (number,number,number,number) name ("display name", Vector) = (number,number,number,number)  //定义Textures(纹理) name ("display name", 2D) = "defaulttexture" { 
        } name ("display name", Cube) = defaulttexture" { 
        }
name ("display name", 3D) = "defaulttexture" { 
        }
  • 其中defaulttexture为纹理声明时的默认值,有以下默认值: 在这里插入图片描述
  • 非2维纹理,如:Cube, 3D, 2DArray,默认值是empty string,当他们没有材质指定时,默认使用“gray”

SubShaders格式

SubShader
{ 
        
	//[Tags]标签,[RenderSeup]状态 都是可选的,如果在pass里面用的话那么将会应用于所有的pass
	//[RenderSeup]用来设置显卡的各种状态,例如开启混合|深度测试等等
	//[Tags]是一个键值对,用来表示,subshader和渲染引擎之间的关系,告诉引擎,我该怎样,或者如何渲染对象

	Tags { 
         "RenderType" = "Opaque" "LightMode" = "ForwardBase" }
	LOD 100
	//顶点,片元着色器的书写都会在pass里面,但是surfaceShader不需要
	//surfaceShader是对片元,顶点着色器更高一层的抽象,价值在于处理光照细节
	Pass
	{ 
        
		CGPROGRAM  //开启CG代码段
		//编译指令
		#pragma vertex vert
		#pragma fragment frag
		//颜色和向量用float4 / half4 / fixed4存储,精度从高到低
        //数值用float / half/ fixed存储,精度从高到低
        //2D纹理 / 3D纹理 / Cubemap分别用sampler2D / 3D / CUBE存储
        sampler2D _Texture;
        float4 _Texture_ST;
        float4 _Texture_TexelSize;
        fixed4 _Color;
        float4 _Vector;
        samplerCUBE _Cubemap;


		//定义了一个结构体
        struct appdata//vert的输入
        { 
        
            float4 vertex : POSITION;
            float2 uv : TEXCOORD0;
        };
        struct v2f//vert的输出
        { 
        
            float2 uv : TEXCOORD0;
            float4 vertex : SV_POSITION;
        };


        v2f vert (appdata v)
        { 
        
            v2f o;
            o.vertex = UnityObjectToClipPos(v.vertex);
            return o;
        }

        fixed4 frag (v2f i) : SV_Target
        { 
        
            return col;
        }
        ENDCG/ENDCGsampler
	}
}
//如果上面的subshader都不满足条件,就会执行下面的东西
FallBack "Diffuse"
FallBack off//关闭

标签: 襄樊滑竿电位器延安滑竿电位器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台