Shader语义

语义

TEXCOORD0 ----模型第一组纹理坐标

 

系统数组语义:

SV_POSITION   POSITION

SV_Target  COLOR

 

Unity支持的语义

POSITION

NORMAL

TANGENT

TEXCOORDn:该顶点的纹理坐标

COLOR:顶点颜色

 

其中,TEXCOORD的n的数目和Shader Model有关,Shader Model2 和 Shader Model3 n=8,4和5中,n=16

 

顶点着色器传递给片元着色器Unity常用语义:

SV_POSITION:裁剪空间中的顶点坐标,结构体中必须包含

COLOR0:输出第一组顶点颜色

TEXCOORD:输出纹理坐标

 

片元着色器输出Unity支持的常用语义:

SV_Target

调试方法

1.假彩色图像2.windows vs Graphics Debugger

 

内置结构体(在UnityCG.cginc里,偷懒用)

 

struct appdata_base {

    float4 vertex : POSITION;

    float3 normal : NORMAL;

    float4 texcoord : TEXCOORD0;

    UNITY_VERTEX_INPUT_INSTANCE_ID

};

 

struct appdata_tan {

    float4 vertex : POSITION;

    float4 tangent : TANGENT;

    float3 normal : NORMAL;

    float4 texcoord : TEXCOORD0;

    UNITY_VERTEX_INPUT_INSTANCE_ID

};

 

struct appdata_full {

    float4 vertex : POSITION;

    float4 tangent : TANGENT;

    float3 normal : NORMAL;

    float4 texcoord : TEXCOORD0;

    float4 texcoord1 : TEXCOORD1;

    float4 texcoord2 : TEXCOORD2;

    float4 texcoord3 : TEXCOORD3;

    fixed4 color : COLOR;

    UNITY_VERTEX_INPUT_INSTANCE_ID

};

 

struct v2f_vertex_lit {     float2 uv   : TEXCOORD0;     fixed4 diff : COLOR0;     fixed4 spec : COLOR1; };

自定义Shader,支持实例化渲染

#pragma multi_compile_instancing

启用实例化渲染(材质球上将出现启用实例化的勾选框);

UNITY_VERTEX_INPUT_INSTANCE_ID

在a2v及v2f的结构中定义实例化索引下标(SV_InstanceID ),也就是当前渲染单位的索引,用于从Constant Buffer中提取正确的属性(做显示差异化用);

UNITY_INSTANCING_BUFFER_START ~ END

在这个起止区域内定义属性,才能在着色器中正确的根据索引提取出当前渲染单位所对应的属性;

UNITY_SETUP_INSTANCE_ID

定义在着色器的起始位置,使顶点着色器(或片段着色器)可以正确的访问到实例化单位的索引;

UNITY_ACCESS_INSTANCED_PROP

根据索引访问到这个单位对应的属性,如上面例子中每个箱子的颜色属性。

 

DirextX平台

 

平台判断

UNITY_UV_STARTS_AT_TOP 判断当前平台是否是DirextX平台

 

抗锯齿判断

_MainTex_TexelSize.y < 0

D9172CCB93704F9AA592C8B8E730A7D8

不支持tex2D,需要#progma target 3.0 然后使用tex2Dlod

 

 

Shader语法规范

fixec 11位  half 16位 float 32位 尽量选择更小的精度

类型相匹配的参数对变量进行初始化。

慎用if while等分支语句

不要除以0

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值