zoukankan      html  css  js  c++  java
  • 【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 颜色值,显示到屏幕上的颜色
  • 相关阅读:
    网店推广之秘诀
    预言:“你被暴光了没有?” 将成为2010又一网络流行语
    已不联系好多年
    任道而重远
    从思南县看撤县建市对提升城市价值的影响
    我和三十有个约定
    浅谈小学生英语学习方法
    热烈祝贺IT诗人代腾飞官方网站开通啦
    爱情许愿砂
    “走远了” 2010又一网络流行语诞生
  • 原文地址:https://www.cnblogs.com/guxin/p/unity-shader-vertex-and-fragment-pass-parameter.html
Copyright © 2011-2022 走看看