1. 程式人生 > >Unity3D -- shader常用函數和變量

Unity3D -- shader常用函數和變量

erp unity blog 翻轉 修飾 osi view ase right

最近在學習Unity Shader,寫Shader的時候總是忘記Unity為我們提供的函數、變量怎麽寫的,這裏整理一下,方便自己查閱,也提供給網友,學習Shader不易。

1、函數

float3 WorldSpaceViewDir(float4 v)  //輸入一個模型空間中的頂點位置,返回世界空間中從該點到攝像機的觀察方向

float3 ObjSpaceViewDir(float4 v)    //輸入一個模型空間中的頂點位置,返回模型空間中從該點到攝像機的觀察方向

float3 WorldSpaceLightDir(float4 v) //僅用於前向渲染中(ForwardBase),輸入一個模型空間中的頂點位置,返回世界空間中從該點到光源的光照方向,沒有被歸一化

float3 UnityWorldSpaceLightDir(float4 v)    //僅可用於前向渲染中,輸入一個世界空間的頂點位置,返回世界空間從該點到光源的光照方向,沒有被歸一化

float3 ObjSpaceLightDir(float4 v)   //僅用於前向渲染中(ForwardBase),輸入一個模型空間中的頂點位置,返回模型空間中從該點到光源的光照方向,沒有被歸一化

float3 UnityObjectToWorldNormal(float3 norm)    //把法線從模型空間轉換到世界空間中

float3 UnityObjectToWorldDir(in float3 dir) //把方向矢量從模型空間轉換到世界空間中

float3 UnityWorldToObjectDir(float3 dir)    //把方向矢量從世界空間轉換到模型空間中

float3 Shade4PointLights(...)   //僅可用於前向渲染中,計算四個點光源的光照,它的參數是已經打包進矢量的光照數據。前向渲染通常會使用這個函數來計算逐頂點光照

2、語義

POSITION    //模型空間中的頂點位置,通常是float4類型

NORMAL  //頂點法線,通常是float3類型

TANGENT //頂點法線,通常是float4類型

TEXCOORDn   //該頂點的紋理坐標,TEXCOORD0表示第一組紋理坐標,…,通常是float2或float4類型

COLOR   //頂點顏色,通常是fixed4或float4類型

SV_POSITION //裁剪空間中的頂點坐標,結構體中必須包含一個用該語義修飾的變量。等同於DirectX9中的
POSITION,但是最好是使用SV_POSITION

COLOR0  //輸出第一組頂點顏色

COLOR1  //輸出第二組頂點顏色

TEXCOORD0~TEXCOORD7    //輸出紋理坐標

SV_Target   //輸出值將會存儲到渲染目標(render target)中

3、變量

UNITY_MATRIX_MVP    //當前的模型*觀察*投影矩陣,用於將頂點/方向矢量從模型空間轉換到裁剪空間

UNITY_MATRIX_MV //當前的模型*觀察矩陣,用於將頂點/方向矢量從模型空間轉換到觀察空間

UNITY_MATRIX_V  //當前的觀察矩陣,用於將頂點/方向矢量從世界空間轉換到觀察空間

UNITY_MATRIX_P  //當前的投影矩陣,用於將頂點/方向矢量從觀察空間轉換到裁剪空間

UNITY_MATRIX_VP //當前的觀察*投影矩陣,用於將頂點/方向矢量從世界空間轉換到裁剪空間

UNITY_MATRIX_T_MV   //UNITY_MATRIX_MV的轉置矩陣

UNITY_MATRIX_IT_MV  //UNITY_MATRIX_MV的逆轉置矩陣,用於將發現從模型空間轉換到觀察空間,也可以用於得到UNITY_MATRIX_MV的逆矩陣

unity_ObjectToWorld(_Object2World)  //當前的模型矩陣,用於將頂點/方向矢量從模型空間變換到世界空間

unity_WorldToObject(_World2Object)  //用於將頂點/方向矢量從世界空間轉換到模型空間

4、攝像機和屏幕參數

float3  _WorldSpaceCameraPos  //該攝像機在世界空間中的位置

float4  _ProjectionParams    //x=1.0(或-1.0,如果正在使用一個翻轉的投影矩陣進行渲染),y=Near,z=Far,w=1.0+1.0/Far,其中Near和Far分別是近裁剪平面和遠裁剪平面到攝像機的距離

float4  _ScreenParams   //x=width,y=height,z=1.0+1.0/width,w=1.0+1.0/height,其中width和height分別是該攝像機的渲染目標(render target)的像素寬度和高度

float4  _ZBufferParams  //x=1-Far/Near,y=Far/Near,z=x/Far,w=y/Far,該變量用於線性化Z緩存中的深度值

float4  unity_OrthoParams   //x=width,y=height,z沒有定義,w=1.0(該攝像機是正交攝像機)或w=0.0(該攝像機是透視攝像機),其中width和height是正交投影攝像機的寬度和高度

float4x4  unity_CameraProjection    //該攝像機的投影矩陣

float4x4  unity_CameraInvProjection  //該攝像機的投影矩陣的逆矩陣

float4  unity_CameraWorldClipPlanes[6]   //該攝像機的6個裁剪平面在世界空間下的等式,按左、右、下、上、近、遠裁剪平面

版權聲明:陽仔原創,轉載請註明出處。 https://blog.csdn.net/honey199396/article/details/54574254

Unity3D -- shader常用函數和變量