[UnityShader2]顶点片段着色器基础
2016-03-19 23:48
429 查看
官方文档:http://docs.unity3d.com/Manual/SL-VertexFragmentShaderExamples.html
1.语义
SV_Traget:如果顶点/片段程序只输出一个值,那么可以使用这个
SV_POSITION:存储裁剪空间中的位置,float4类型,这个是顶点程序必须输出的一个值
TEXCORD0,TEXCORD1:存储高精度数据,例如纹理坐标、位置等
COLOR0,COLOR1:低精度,0到1范围(对于颜色,使用低精度的fixed4就足够了)
VPOS:屏幕空间中的像素位置
2.变量
a.类型
对应关系:
Color & Vector :float4、half4、fixed4
Range & Float :float、half、fixed
2D :sample2D
CUBE:sampleCUBE
b.特殊的纹理属性:
{TextureName}_ST:float4类型,x存tiling的x值、y存tiling的y值、z存offset的x值、w存offset的y值(tiling和offset是纹理的两个属性)
例如,如果shader有一个属性_MainTex,那么tiling和offset的信息就会存放在_MainTex_ST中。
3.
struct appdata_base {
float4 vertex : POSITION;
float3 normal : NORMAL;
float4 texcoord : TEXCOORD0;
};
struct appdata_tan {
float4 vertex : POSITION;
float4 tangent : TANGENT;
float3 normal : NORMAL;
float4 texcoord : TEXCOORD0;
};
struct appdata_full {
float4 vertex : POSITION;
float4 tangent : TANGENT;
float3 normal : NORMAL;
float4 texcoord : TEXCOORD0;
float4 texcoord1 : TEXCOORD1;
float4 texcoord2 : TEXCOORD2;
float4 texcoord3 : TEXCOORD3;
#if defined(SHADER_API_XBOX360)
half4 texcoord4 : TEXCOORD4;
half4 texcoord5 : TEXCOORD5;
#endif
fixed4 color : COLOR;
};
对于一个四元数,w默认值为1。对于一个2D的纹理坐标,如果用一个float4来接收,那么值为(x,y,0,1)
法线x,y,z三个变量的范围为(-1,1),纹理坐标x,y两个变量的范围为(0,1)
1.语义
SV_Traget:如果顶点/片段程序只输出一个值,那么可以使用这个
fixed4 frag (v2f i) : SV_Target
SV_POSITION:存储裁剪空间中的位置,float4类型,这个是顶点程序必须输出的一个值
TEXCORD0,TEXCORD1:存储高精度数据,例如纹理坐标、位置等
COLOR0,COLOR1:低精度,0到1范围(对于颜色,使用低精度的fixed4就足够了)
VPOS:屏幕空间中的像素位置
2.变量
a.类型
_MyColor ("Some Color", Color) = (1,1,1,1) _MyVector ("Some Vector", Vector) = (0,0,0,0) _MyFloat ("My float", Float) = 0.5 _MyTexture ("Texture", 2D) = "white" {} _MyCubemap ("Cubemap", CUBE) = "" {}
fixed4 _MyColor; // low precision type is usually enough for colors float4 _MyVector; float _MyFloat; sampler2D _MyTexture; samplerCUBE _MyCubemap;
对应关系:
Color & Vector :float4、half4、fixed4
Range & Float :float、half、fixed
2D :sample2D
CUBE:sampleCUBE
b.特殊的纹理属性:
{TextureName}_ST:float4类型,x存tiling的x值、y存tiling的y值、z存offset的x值、w存offset的y值(tiling和offset是纹理的两个属性)
例如,如果shader有一个属性_MainTex,那么tiling和offset的信息就会存放在_MainTex_ST中。
3.
struct appdata_base {
float4 vertex : POSITION;
float3 normal : NORMAL;
float4 texcoord : TEXCOORD0;
};
struct appdata_tan {
float4 vertex : POSITION;
float4 tangent : TANGENT;
float3 normal : NORMAL;
float4 texcoord : TEXCOORD0;
};
struct appdata_full {
float4 vertex : POSITION;
float4 tangent : TANGENT;
float3 normal : NORMAL;
float4 texcoord : TEXCOORD0;
float4 texcoord1 : TEXCOORD1;
float4 texcoord2 : TEXCOORD2;
float4 texcoord3 : TEXCOORD3;
#if defined(SHADER_API_XBOX360)
half4 texcoord4 : TEXCOORD4;
half4 texcoord5 : TEXCOORD5;
#endif
fixed4 color : COLOR;
};
对于一个四元数,w默认值为1。对于一个2D的纹理坐标,如果用一个float4来接收,那么值为(x,y,0,1)
法线x,y,z三个变量的范围为(-1,1),纹理坐标x,y两个变量的范围为(0,1)
相关文章推荐
- [UnityShader2]顶点片段着色器实例(六)
- [UnityShader2]顶点片段着色器实例(五)
- 关于Unity3D协程的使用
- 破解Unity3D的步骤-为部分人提供帮助
- 配置Unity脚本开发环境visual studio 2013 tools for unity
- unity c# LINQ查询
- unity c# Lambda表达式
- unity c# 泛型委托
- unity c# 标准事件模式
- unity c# 事件
- unity c# 接口
- Unity4.6 UI按钮绑定事件(一)
- 详解Unity 4.6新UI的布局
- 学习Unity 4.6新GUI系统
- Unity ugui 和 模型 粒子的层级管理
- unity3d热更新插件uLua学习整理
- 初学者学习 - Unity中的热更新 - Lua和C#通信
- Unity3D小小小经验篇——Canvas
- Unity3d 着色器语法(Shader)
- Unity3D Shader