Shader的属性和语义

属性

Shader 属性property就是Unity面板和shader的连接器。

	Properties {
		// Numbers and Sliders
		_ExampleName ("Integer display name", Integer) = 1
		_ExampleName ("Float display name", Float) = 0.5
		_ExampleName ("Float with range", Range(0.0, 1.0)) = 0.5
		// Colors and Vectors
		_ExampleColor("Example color", Color) = (.25, .5, .5, 1)
		_ExampleVector ("Example vector", Vector) = (.25, .5, .5, 1)
		// Textures
		_ExampleName ("Texture2D display name", 2D) = "" {}
		_ExampleName ("Texture2D display name", 2D) = "red" {}
		_ExampleName ("Texture2DArray display name", 2DArray) = "" {}
		_ExampleName ("Texture3D", 3D) = "" {}
		_ExampleName ("Cubemap", Cube) = "" {}
		_ExampleName ("CubemapArray", CubeArray) = "" {}
	}

语义

应用阶段到顶点着色器时用常用的语义如下:

  • POSITION:模型空间中的顶点位置,通常是float4类型

  • NORMAL:模型空间中的顶点法线,通常是float3类型

  • TANGENT:模型空间中的顶点切线,通常是float4类型

  • TEXCOORD:模型空间中的顶点纹理坐标,通常是float4 float2类型
    TEXCOORD0表示第一组坐标纹理 SHADERMODEL版本支持最大个数 2-3 支持8个 4-5 支持16个

  • COLOR:模型空间中的顶点颜色,通常是float4或fixed4类型

顶点着色器传递数据给片元着色器时常用的语义如下:

  • SV_POSITION:裁剪空间中的顶点坐标
  • COLOR0:输出第一组顶点颜色,不是必须
  • COLOR1:输出第二组顶点颜色,不是必须
  • TEXCOORDn:输出第n组纹理坐标,不是必须

片元着色器输出数据到unity阶段常用的语义如下:

  • SV_TARGET 输出值将存储到渲染目标(render target)中,等同于DX9中的COLOR语义

写法如下哦

struct a2v {
float4 vertex : POSITION;
float3 normal : NORMAL;
float4 texcoord : TEXCOORD0;
};

struct v2f {
float4 pos : SV_POSITION;
fixed3 color : COLOR0;
};
### Unity ShaderProperties 的含义用法 在 Unity 中,`Properties` 是着色器程序中的一个重要部分,用于定义可以在材质面板中调整的各种参数。这些属性允许开发者通过编辑器界面轻松修改着色器的行为而不必重新编译代码。 #### 属性的语法结构 一个典型的 `Properties` 块看起来像这样: ```csharp Shader "Custom/MyShader" { Properties { _MainTex ("Texture", 2D) = "white" {} _Color ("Color Tint", Color) = (1,1,1,1) _Cutoff ("Alpha Cutoff", Range(0,1)) = 0.5 } SubShader { // 子着色器内容... } FallBack "Diffuse" } ``` 每条属性声明遵循特定格式:`_PropertyName ("Display Name", Type) = DefaultValue {}`[^1]。 - `_PropertyName`: 实际使用的变量名,在 HLSL 或 CG 编程时调用。 - `"Display Name"`: 显示名称,即在 Inspector 面板上显示的文字说明。 - `Type`: 数据类型,决定了该属性可以接受什么类型的输入值。 - `DefaultValue`: 默认初始值设置。 #### 支持的数据类型 支持多种数据类型来满足不同需求,主要包括但不限于以下几种[^2]: - **2D Texture**: 表示二维贴图资源,通常用来存储颜色信息或其他图像数据。 ```csharp _MainTex ("Base (RGB)", 2D) = "white" {} ``` - **Color**: RGB(A) 彩色值,可用于调节物体的颜色或光照效果。 ```csharp _TintColor ("Tint Color", Color) = (1,1,1,1) ``` - **Range(min,max)**: 数字范围滑动条控件,适用于控制透明度阈值、强度因子等连续变化的数值。 ```csharp _MetallicGlossMap ("Smoothness", Range(0,1)) = 0.5 ``` - **Int / Float**: 整数或浮点数单个值,适合开关标志位或是简单的比例系数。 ```csharp _IsEnabled ("Enable Effect?", Int) = 1 ``` - **Vector**: 四维向量,常被用来表示位置坐标、方向矢量或者是四个独立分量的一组相关联的小数值。 ```csharp _Direction ("Light Direction", Vector) = (0.5,0.866,-0.707,0) ``` 当存在重复命名的属性时,Unity 只会采用第一次遇到的那个,并忽略之后相同名字的其他定义[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值