【Unity Shader】二、顶点函数(vertex)和片元函数(fragment)传递数据,及各阶段可使用的语义(semantic)...

学习资料:http://www.sikiedu.com/course/37/task/433/show


本节学习目标:

  • 学习Shader中结构体struct的使用。
  • 学习在片元函数(vertex)和顶点函数(fragment)之间传递数据。
  • 学习从应用程序传递到顶点函数(a2v)、从顶点函数传递到片元函数(v2f)、从片元函数传递回系统(f2a)时,各个阶段中可以使用的语义。
Shader "Custom/02" {
    SubShader{
        Pass {
            CGPROGRAM

#pragma vertex vert
#pragma fragment frag

            struct a2v // 命名表示从应用程序传递到顶点函数,application to vertex
            {
                float4 vertex : POSITION;    // 告诉Unity把模型空间下的顶点坐标填充给vertex属性
                float3 normal : NORMAL;      // 告诉Unity把模型空间下的法线方向填充给normal属性
                float4 texcoord : TEXCOORD0; // 告诉Unity把第一套纹理坐标填充给texcoord属性
            };

            struct v2f // 命名表示从顶点函数传递到片元函数,vertex to fragment
            {
                float4 position : SV_POSITION;
                float3 temp : COLOR0; // 属性必须指定语义。该语意可以由用户自定义,一般用于存储颜色
            };

            // 计算顶点坐标从模型坐标系转换到裁剪面坐标系
            v2f vert(a2v v)
            {
                v2f f;
                f.position = mul(UNITY_MATRIX_MVP, v.vertex);
                f.temp = v.normal;
                return f; // 使用结构体struct就可以一次返回多个数据
            }

            // 计算每个像素点的颜色值
            fixed4 frag(v2f f) : SV_Target 
            {
                return fixed4(f.temp, 1); // f.temp是float3已经包含了三个数值
            }

            ENDCG
        }
        
    }
    FallBack "Diffuse"
}

最终显示的颜色值是每个像素点的法线方向的颜色值。参考右上角的世界坐标。

 


从应用程序传递到顶点函数(a2v)时,可以使用的语义:

  • POSITION 顶点坐标(模型空间)
  • NORMAL 法线(模型空间)
  • TANGENT 切线(模型空间)
  • TEXCOORD(0~n) 纹理坐标。x、y从0到1
  • COLOR 顶点颜色 

从顶点函数传递给片元函数(v2f)时,可以使用的语义:

  • SV_POSITION 顶点坐标(剪裁空间),一般是系统直接使用
  • COLOR0 可以传递一组值(4个)
  • COLOR1 可以传递一组值(4个)
  • TEXCOORD(0~7) 传递纹理坐标

从片元函数传递回系统(f2a)时,可以使用的语义:

  • SV_TARGET 颜色值,显示到屏幕上的颜色

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值