shader 2.0

本文介绍了Shader2.0相对于1.0的主要区别,重点讲解了Shader2.0中的常用语义,如POSITION, NORMAL, TEXCOORD等,并详细阐述了在Unity中如何进行3D坐标变换,包括物体坐标到世界坐标、世界坐标到相机坐标以及最终到屏幕坐标的转换。同时,还列举了Unity中相关的矩阵和变换函数,如UNITY_MATRIX_MVP等,并提及在Unity5.6及以上版本中相关函数的变化。" 121955864,10754823,LaTeX论文排版技巧:图片与公式居中,"['latex', '论文排版', '技术分享', '编辑技巧', '计算机科学']

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

shader1.0和2.0的区别

2.0可以实现编程;

 

Shader2.0常用语义

POSITION:      获取模型顶点的信息。
NORMAL:       获取法线信息
TEXCOORD(n):         高精度的从顶点传递信息到片段着色器
COLOR:          表示低精度从顶点传递信息到片段着色器
TANGENT:      获取切线信息。
SV_POSITION:    表示经过mvp矩阵已经转化到屏幕坐标系
SV_TARGET:     输出到那个render target

    }
    SubShader
    {
        // No culling or depth
        Cull Off ZWrite Off ZTest Always

        Pass
        {
            CGPROGRAM //2.0
            #pragma vertex vert //定义一个顶点着色器的 入口函数
            #pragma fragment frag //定义一个片段着色器的 入口函数

            #include "UnityCG.cginc" //引用

            struct appdata
            {
                float4 vertex : POSITION; //POSITION获取模型顶点信息 normal 法线
                float2 uv : TEXCOORD0; //
            };

            struct v2f //顶点着色器的 输出值 片段的输入值
            {
                float2 uv : TEXCOORD0;
                float4 vertex : SV_POSITION; // 表示经过MVP矩阵 已经转化到屏幕坐标的位置
            };

            v2f vert (appdata v)//顶点着色器的入口函数  appdata从meshrender里面来的
            {
                v2f o;
                o.vertex = UnityObjectToClipPos(v.vertex);
                o.uv = v.uv;
                return o;
            }

            sampler2D _MainTex;

            fixed4 frag (v2f i) : SV_Target  //输出到 哪个render target
            {
                fixed4 col = tex2D(_MainTex, i.uv);
                // just invert the colors
                //col.rgb = 1 - col.rgb;
                return col;
            }
            ENDCG
        }
    }
}

2.0要做什么

1.计算顶点位置变化;

2.计算顶点颜色

(U3D 里面 的矩阵是左乘)

1.1将 物体坐标系变换到

P(世界)=M(物体到世界的变换矩阵)*P(物体)

vector3 posWold=transform.parent.localToWorldMatrix.MultiplyPoint(transform.localPosition);

规律:3D变换 第一步都是将物体坐标系变换到世界坐标系。

1.2 将 世界坐标 变换到 相机坐标系。

P(相机)=M(世界到相机的变换矩阵)*P(世界)

transform.worldToLocalMatrix.MultiplyPoint(posWold);

 

MVP

M:物体坐标系》》世界坐标系

V:世界坐标系》》相机坐标系

P:将3D坐标系》》2D屏幕坐标系

 

UNITY_MATRIX_MVP        当前模型视图投影矩阵
UNITY_MATRIX_MV           当前模型视图矩阵
UNITY_MATRIX_V              当前视图矩阵。
UNITY_MATRIX_P              目前的投影矩阵
UNITY_MATRIX_VP            当前视图*投影矩阵
UNITY_MATRIX_T_MV       移调模型视图矩阵
UNITY_MATRIX_IT_MV      模型视图矩阵的逆转
UNITY_MATRIX_TEXTURE0   UNITY_MATRIX_TEXTURE3          纹理变换矩阵

更新后现在

在unity5.6以上版本中,shader中的语句改变

UNITY_MATRIX_MVP》》UnityObjectToClipPos

UNITY_MATRIX_VP》》UnityWorldToClipPos,

UNITY_MATRIX_P》》UnityViewToClipPos

Pass中加上一句  #include "UnityCG.cginc" 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值