关闭

切线 Visualizing tangents and binormals

标签: fragmentunity shadervertex片段顶点着色器
163人阅读 评论(0) 收藏 举报
分类:

Visualizing tangents and binormals


原文链接 http://docs.unity3d.com/530/Documentation/Manual/SL-VertexProgramInputs.html

Tangent and binormal vectors are used for normal mapping. In Unity only the tangent vector is stored in vertices, and the binormal is derived from the normal and tangent values.

切线和副法线向量用于法线贴图。在unity中只有切线和法线是在顶点信息中有存储的,副法线来源于法线和切线的值。


Shader "Debug/Tangents" {
SubShader {
    Pass {
        CGPROGRAM
        #pragma vertex vert
        #pragma fragment frag

        // vertex input: position, tangent
        struct appdata {
            float4 vertex : POSITION;
            float4 tangent : TANGENT;
        };

        struct v2f {
            float4 pos : SV_POSITION;
            fixed4 color : COLOR;
        };
        
        v2f vert (appdata v) {
            v2f o;
            o.pos = mul( UNITY_MATRIX_MVP, v.vertex );
            o.color = v.tangent * 0.5 + 0.5; //tangent切线
            return o;
        }
        
        fixed4 frag (v2f i) : SV_Target { return i.color; }
        ENDCG
    }
}
}



Bitangents副法线为法线和切线的叉乘,即垂直于法线和切线

Shader "Debug/Bitangents"
{


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


#include "UnityCG.cginc"


struct appdata
{
float4 vertex : POSITION;
float3 normal : NORMAL;
float4 tangent : TANGENT;
};


struct v2f
{
float4 color : TEXCOORD0;
float4 pos : SV_POSITION;
};



v2f vert (appdata v)
{
v2f o;
o.pos = mul(UNITY_MATRIX_MVP, v.vertex);
float3 bitangent = cross(v.normal,v.tangent.xyz) * v.tangent.w;     //副法线为法线和切线的叉乘,即垂直于法线和切线的线
o.color.xyz= bitangent * 0.5 + 0.5 ;
o.color.w =1.0;
return o;
}

fixed4 frag (v2f i) : SV_Target
{
fixed4 col = i.color;
return col;
}
ENDCG
}
}
}



0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:15550次
    • 积分:368
    • 等级:
    • 排名:千里之外
    • 原创:19篇
    • 转载:10篇
    • 译文:0篇
    • 评论:4条
    最新评论