因为记不住,所以咱们都要学会做记录并做好注释,记得配合用法
枚举,最多可指定7个名称,自定义枚举,可以通过KeyWrod来控制
属性:
用法:
大家学习一定要多记录,方便以后遗忘了好翻出来看(熊猫老师就是这样的,很多东西记不住就翻出来再看看)。
上全代码:
// 熊猫悟道
Shader "XiongMaoWuDao/Texture01"
{
//材质面板属性
Properties
{
//内置枚举 混合模式
[Enum (UnityEngine.Rendering.BlendOp)] _BlendOp("BlendOp",Float)=0
[Enum(UnityEngine.Rendering.BlendMode)] _SrcBlend ("SrcBlend", Float) = 1
[Enum(UnityEngine.Rendering.BlendMode)] _DstBlend ("DstBlend", Float) = 0
/*深度开关
ZWriteMode 是没有内置的,,实际上也只有on和off两个状态,所以用Toogle其实也可以,
我这里是直接用[Enum(Off, 0, On, 1)]这样的写法声明了个新的自定义Enum */
[Enum(Off, 0, On, 1)]_ZWriteMode ("ZWriteMode", float) = 1
//提出模式 off 开启双面 ,Front 剔除正面 Back 剔除正面
[Enum(UnityEngine.Rendering.CullMode)]_CullMode ("CullMode", float) = 2
// 深度测试
[Enum(UnityEngine.Rendering.CompareFunction)]_ZTestMode ("ZTestMode", Float) = 4
//自定义枚举
[Enum(Alpha, 0, Add, 1)]_Blend ("ZWriteMode", float) = 1
[Enum(R, 0, G, 1, B, 2)]_RGB ("ZWriteMode", float) = 1
/*
显示一个抬头名称 [Header( )]
注意: 不支持汉字,数字和大部分符号。
在着色器属性之前窗前一个标题文本。
*/
[Header(Stencil)]
// 颜色通道写入遮罩 输出颜色通道
/* 大麦用法 : 需要在 SubShader 里面写入 Blend SrcAlpha One
ColorMask [_ColorMask] */
[Enum(UnityEngine.Rendering.ColorWriteMask)]_ColorMask ("ColorMask", Float) = 15
[Enum(UnityEngine.Rendering.CompareFunction)]_StencilComp ("Stencil Comparison", Float) = 8
[Enum(UnityEngine.Rendering.StencilOp)]_StencilPass ("Stencil Pass", Float) = 0
[Enum(UnityEngine.Rendering.StencilOp)]_StencilFail ("Stencil Fail", Float) = 0
[Enum(UnityEngine.Rendering.StencilOp)]_StencilZFail ("Stencil ZFail", Float) = 0
// 滑块
[Header(Slider)]
//IntRange 显示一个适用于 Range 着色器属性的整数滑动条,没有即是小数形式滑块
[IntRange]_StencilWriteMask ("Stencil Write Mask", Range(0,255)) = 255
[IntRange]_StencilReadMask ("Stencil Read Mask", Range(0,255)) = 255
[IntRange]_Stencil ("Stencil ID", Range(0,255)) = 0
/*
显示一个具有对应于 Range 着色器属性的非线性响应的滑动条。意思就是,让Range滑杆更加方便调整细微的值。
以[PowerSlider(1.0)]为分界,当值为1.0时,效果与range一致。当值<1.0时,值越大可调整的范围越大。
当值>1.0时,值越小可调整的范围越大。可以更精细地在这些区间进行微调。
*/
//总结 :PowerSlider值类似曲线的控制值,值越大,小值的范围越好调整,值越小,大值的可调整范围越大。
[PowerSlider(3.0)] _Shininess ("Shininess", Range (0.01, 1)) = 0.08
// 开关
/*
以开关形式显示浮点值。属性值为 0 或 1,具体取决于开关状态。当开关处于打开状态时,
将设置一个带有大写属性名称 +“_ON” 的着色器关键字,或者一个显式指定的着色器关键字。
*/
[Header(Toggle)]
[Toggle] _Toggle("Toggle", Float) = 0
[MaterialToggle] _MaterialToggle("Material Toggle", Float) = 0
[Header(KeywordEnum)]
// 每个选项都将被设置 _OVERLAY_NONE, _OVERLAY_ADD, _OVERLAY_MULTIPLY shader keywords.
// 配合multi_compile使用 每个名称都将 采用“属性名”+ 下划线 +“枚举名”这种形式的大写着色器关键字。最多可提供 9 个名称。
// 注意大小写
[KeywordEnum(None, Add, Multiply)] _Overlay ("Overlay mode", Float) = 0
// 空间划分 在两个变量之间添加空白
[Space] _Prop1 ("Prop1", Float) = 0
[Space(50)] _Prop2 ("Prop2", Float) = 0
[Header(Texture)]
// 用来修饰贴图变量,在inspcetor 面板中不再显示该贴图的tilling/offset 属性
[NoScaleOffset]_MainTex ("No Scale Offset", 2D) = "white" {}
// 用来修饰贴图变量,该贴图必须是一个法线贴图
[Normal]_NormalTex ("NormalTex", 2D) = "white" {}
// 用来修饰贴图变量,该贴图必须是一个high-dynamic range(HDR)贴图
[HDR]_HDRTex ("HDRTex", 2D) = "white" {}
}
SubShader
{
Tags { "RenderType"="Opaque" "RenderPipeline"="UniversalRenderPipeline" "Queue"="Geometry"}
//注意用法
Blend [_SrcBlend][DstBlend]
BlendOp [_BlendOp]
ZWrite [_ZWriteMode]
ZTest [_ZTestMode]
Cull [_CullMode]
ColorMask [_ColorMask]
Pass
{
HLSLPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"
struct Attributes
{
float4 positionOS : POSITION;
float2 uv : TEXCOORD0;
};
struct Varyings
{
float2 uv : TEXCOORD0;
float4 positionHCS : SV_POSITION;
};
TEXTURE2D(_BaseMap);
SAMPLER(sampler_BaseMap);
CBUFFER_START(UnityPerMaterial)
float4 _BaseMap_ST;
half4 _BaseColor;
CBUFFER_END
Varyings vert(Attributes IN)
{
Varyings OUT;
OUT.positionHCS = TransformObjectToHClip(IN.positionOS.xyz);
OUT.uv = TRANSFORM_TEX(IN.uv, _BaseMap);
return OUT;
}
half4 frag(Varyings IN) : SV_Target
{
return SAMPLE_TEXTURE2D(_BaseMap, sampler_BaseMap, IN.uv) * _BaseColor;
}
ENDHLSL
}
}
}