TA之路——Shader学习03(顶点函数和片元函数及常用语义)

本文详细介绍了在Unity中编写Shader的基本结构与方法,包括顶点函数和片元函数的作用及编写方式,以及如何使用struct进行更高效的数据传递。同时,文章列举了Unity中常用的语义,帮助开发者更好地理解并应用Shader。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

顶点函数和片元函数编写结构:


Shader "MyShader/02_Shader"{

SubShader{
    Pass{
    CGPROGRAM
    //声明顶点函数的函数名,基本作用是完成顶点坐标从模型空间到剪裁空间的转换
    #pragma vertex vert
    //声明片元函数的函数名,基本作用是返回模型对应的屏幕上每一个像素的颜色值
    #pragma fragment frag
    //顶点函数
    float4 vert(float4 v:POSITION):SV_POSITION{//通过POSITION语义告诉系统我需要顶点坐标,把顶点坐标传给v
    //通过SV_POSITION语义用来解释说明返回值,意思是返回值是剪裁空间下的顶点坐标
    return UnityObjectToClipPos(v);//矩阵跟点相乘,作用是完成顶点坐标从模型空间到剪裁空间的转换

    }
    //片元函数
    fixed4 frag():SV_Target{//通过SV_Target语义传递给系统的颜色值,传递给系统的颜色
    return fixed4(1,0,0,1);
    }

    ENDCG

        }
    }

Fallback "VertexLit"
}

使用struct编写:(常用格式)

Shader "MyShader/03_Shader"{

SubShader{
    Pass{
        CGPROGRAM
        #pragma vertex vert
        #pragma fragment frag

        struct av{
            float4 ps:POSITION;//告诉Unity把模型空间下的顶点坐标填充给ps
            float3 nm:NORMAL;//告诉Unity把模型空间下的法线方向填充给nm
            float4 tc0:TEXCOORD0;//告诉Unity把第一套纹理坐标填充给tc0

        };

      

    struct vf{
            float4 position:SV_POSITION;
            fixed3 cl : COLOR;
        };

    //顶点函数
        vf vert(av v){
            vf f;
            f.position=UnityObjectToClipPos(v.ps);
            f.cl=v.nm;
            return f ;
        }


        //片元函数
        fixed4 frag(vf f):SV_Target{//通过SV_Target语义传递给系统的颜色值,传递给系统的颜色
            return fixed4(f.cl,1);
        }

        ENDCG

        }
    }

Fallback "VertexLit"
}

Unity中的语义:

从应用程序传递给顶点函数的语义:

POSITION 模型顶点坐标

NORMAL 法线向量

TANGENT 正交于表面法线的向量(切线)

TEXCOORDi 第i组纹理坐标(也即UV坐标,坐标范围在0-1之间),i是0-7中的一个数字

COLOR 顶点颜色

从顶点函数传递给片元函数的语义:

SV_POSITION 剪裁空间中的顶点坐标(一般是系统直接使用)

COLOR0 可以传递一组值 4个

COLOR1 可以传递一组值 4个

TEXCOORD0~7 传递纹理坐标

从片元函数传递给系统的语义:

SV_Target 颜色值,输出到屏幕上的颜色

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值