相关文档
Unity Shader学习笔记(3)Unity Shader模板、结构、形式
Unity用户手册(2018.3)/ 图像图形教程 / ShaderLab:属性
属性类型
- 数字 : Int、Float / Range
- 矢量 : Vector 可以定义矢量2–4
- 颜色 : Color
- 纹理 : 2D、 3D、Cube
数字和滑块
Float 类型换成Range(min, max)就可以在材质球上显示滑块
Shader "Hello" { Properties { // 整数 _MyInitA("MyInitA", Int) = 1 // 浮点数 _MyFloatA("MyFloatA", Float) = 0 // 浮点数--滑块方式显示 _MyFloatB("MyFloatB滑块", Range( 0 , 100)) = 0 } SubShader { CGPROGRAM #pragma target 3.0 #pragma surface surf StandardSpecular keepalpha addshadow fullforwardshadows exclude_path:deferred // 浮点数 uniform float _MyFloatB; uniform float _MyFloatA; // 整数 uniform int _MyInitA; void surf( Input i , inout SurfaceOutputStandardSpecular o ) { o.Albedo = 1; } ENDCG } }
颜色和矢量
Shader "Hello" { Properties { // 颜色 _MyColorA("MyColorA", Color) = (1,1,1,0) _MyColorB("MyColorB", Color) = (1,0,0.2275863,0) // 矢量 _MyVector2("MyVector2", Vector) = (1,2,0,0) _MyVector3("MyVector3", Vector) = (1,2,3,0) _MyVector4("MyVector4", Vector) = (1,2,3,4) } SubShader { CGPROGRAM #pragma target 3.0 #pragma surface surf StandardSpecular keepalpha addshadow fullforwardshadows exclude_path:deferred // 颜色 uniform float4 _MyColorA; uniform float4 _MyColorB; // 矢量 uniform float2 _MyVector2; uniform float3 _MyVector3; uniform float4 _MyVector4; void surf( Input i , inout SurfaceOutputStandardSpecular o ) { o.Albedo = 1; } ENDCG } }
纹理
Shader "Hello" { Properties { // 2D 纹理 _MyTextureSample2DA("MyTextureSample2DA", 2D) = "white" {} } SubShader { CGPROGRAM #pragma target 3.0 #pragma surface surf StandardSpecular keepalpha addshadow fullforwardshadows exclude_path:deferred struct Input { float2 uv_texcoord; }; // 纹理采样 uniform sampler2D _MyTextureSample2DA; uniform float4 _MyTextureSample2DA_ST; void surf( Input i , inout SurfaceOutputStandardSpecular o ) { float2 uv_MyTextureSample2DA = i.uv_texcoord * _MyTextureSample2DA_ST.xy + _MyTextureSample2DA_ST.zw; o.Albedo = tex2D( _MyTextureSample2DA, uv_MyTextureSample2DA ); } ENDCG } }
float 和 half
这两个的精度不一样, 所有float的地方都可以换成 half
Shader "Hello" { Properties { // 浮点 _MyFloatA("MyFloatA", Float) = 0 _MyFloatB("MyFloatB滑块", Range( 0 , 100)) = 0 // 颜色 _MyColorA("MyColorA", Color) = (1,1,1,0) // 矢量 _MyVector2("MyVector2", Vector) = (1,2,0,0) _MyVector3("MyVector3", Vector) = (1,2,3,0) _MyVector4("MyVector4", Vector) = (1,2,3,4) } SubShader { CGPROGRAM #pragma target 3.0 #pragma surface surf StandardSpecular keepalpha addshadow fullforwardshadows exclude_path:deferred // 浮点 uniform half _MyFloatB; uniform half _MyFloatA; // 颜色 uniform half4 _MyColorA; // 矢量 uniform half2 _MyVector2; uniform half3 _MyVector3; uniform half4 _MyVector4; void surf( Input i , inout SurfaceOutputStandardSpecular o ) { o.Albedo = 1; } ENDCG } }
Property attributes and drawers
Attributes | 功能 |
---|---|
[HideInInspector] | 材质球调试器,不显示该属性 |
[NoScaleOffset] | 材质球调试器,不显示纹理的Tiling和Offset (不显示纹理缩放和偏移) |
[Normal] | 表示纹理属性需要法线贴图。 |
[HDR] | 表示纹理属性需要高动态范围(HDR)纹理。 |
[Gamma] | 表示在UI中将float/vector属性指定为sRGB值(就像颜色一样),并且可能需要根据使用的颜色空间进行转换。请参阅着色器程序中的属性。 |
[PerRendererData] | 表示纹理属性将以MaterialPropertyBlock形式来自每个渲染器数据。材质检查器更改这些属性的纹理槽UI。 |
[Toggle] | 材质球调试器, 使用勾选的方式显示 |
[IntRange] | 材质球调试器, 滑块拖动时将以整数方式变化 |
[Enum(UnityEngine.Rendering.CullMode)] | 材质球调试器, 显示下拉选择, 内置枚举 |
[Enum(MyEnum_0,0,MyEnum_1,1)] | 材质球调试器, 显示下拉选择, 自定义枚举 |
Properties { _color1("color1", Color) = (0,0,0,0) // 材质球调试器,不显示该属性 [HideInInspector]_color2("color2", Color) = (0,0,0,0) // 材质球调试器,不显示纹理的Tiling和Offset (不显示纹理缩放和偏移) [NoScaleOffset] _Texture0("Texture 0", 2D) = "white" {} // 表示纹理属性需要法线贴图。 [Normal]_Texture1("Texture 1", 2D) = "white" {} // 表示纹理属性需要高动态范围(HDR)纹理。 [HDR][Normal]_Texture2("Texture 2", 2D) = "white" {} // 表示在UI中将float / vector属性指定为sRGB值(就像颜色一样),并且可能需要根据使用的颜色空间进行转换。 [Gamma] _Exposure ("Exposure", Range(0, 8)) = 1.0 // 表示纹理属性将以MaterialPropertyBlock形式来自每个渲染器数据。材质检查器更改这些属性的纹理槽UI。 [PerRendererData]_Texture3("Texture 3", 2D) = "white" {} // 材质球调试器, 使用勾选的方式显示 [Toggle]_Float1("Float 1", Range( 0 , 10)) = 0 // 材质球调试器, 滑块拖动时将以整数方式变化 [IntRange]_Float2("Float 2", Range( 0 , 10)) = 0 // 材质球调试器, 显示下拉选择, 内置枚举 [Enum(UnityEngine.Rendering.CullMode)]_Int0("Int 0", Int) = 0 // 材质球调试器, 显示下拉选择, 自定义枚举 [Enum(MyEnum_0,0,MyEnum_1,1)]_Float3("Float 3", Float) = 0 }
[NoScaleOffset]
加了[NoScaleOffset]之后