UnityShader 备忘录

4 篇文章 0 订阅
4 篇文章 0 订阅

UnityShader备忘录

最近在学shaderlab,准备发个文整理整理笔记,持续更新。


目录

UnityShader备忘录

 

1、函数

2、语义

3、变量

4、UnityCG.cginc

顶点着色器输入

顶点着色器的输出

5、摄像机和屏幕参数

6、英文名词

空间变换

光照


1、函数

float3 WorldSpaceViewDir(float4 v)  //输入一个模型空间中的顶点位置,返回世界空间中从该点到摄像机的观察方向

float3 UnityWorldSpaceViewDir(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类型  ,w分量默认为1,用于齐次变换,平移变换等等

NORMAL  //顶点法线,通常是float3类型,

TANGENT //顶点法线,通常是float4类型  ,w分量为1或-1,用于确定BiNormal的方向

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    //当前的模型*观察*投影矩阵,用于将顶点/方向矢量从模型空间转换到裁剪空间

  UnityObjectToClipPosv) 用于将顶点从模型空间转换到裁剪空间

UnityObjectToViewPos(v) 用于将顶点从模型空间转换到观察空间

 

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、UnityCG.cginc

顶点着色器输入

struct appdata_base {

    float4 vertex : POSITION;

    float3 normal : NORMAL;

    float4 texcoord : TEXCOORD0;

    UNITY_VERTEX_INPUT_INSTANCE_ID

};

struct appdata_tan {

    float4 vertex : POSITION;

    float4 tangent : TANGENT;//顶点切线

    float3 normal : NORMAL;

    float4 texcoord : TEXCOORD0;

    UNITY_VERTEX_INPUT_INSTANCE_ID

};

struct appdata_full {

    float4 vertex : POSITION;

    float4 tangent : TANGENT;

    float3 normal : NORMAL;

    float4 texcoord : TEXCOORD0;

    float4 texcoord1 : TEXCOORD1;

    float4 texcoord2 : TEXCOORD2;

    float4 texcoord3 : TEXCOORD3;

    fixed4 color : COLOR;

    UNITY_VERTEX_INPUT_INSTANCE_ID

};

 

struct appdata_img

{

    float4 vertex : POSITION;

    half2 texcoord : TEXCOORD0;

    UNITY_VERTEX_INPUT_INSTANCE_ID

};

 

顶点着色器的输出

struct v2f_img

{

    float4 pos : SV_POSITION;

    half2 uv : TEXCOORD0;

    UNITY_VERTEX_INPUT_INSTANCE_ID

    UNITY_VERTEX_OUTPUT_STEREO

};

 

float4 UnityObjectToClipPos(float3 pos) //在齐次坐标中将一个点从模型空间转换到相机的裁剪空间。这相当于mul(UNITY_MATRIX_MVP, float4(pos, 1.0)),应该用它来代替。

float3 UnityObjectToViewPos(float3 pos) ///将一个点从模型空间转换为观察空间。这相当于mul(UNITY_MATRIX_MV, float4(pos, 1.0)).xyz,应该在它的位置上使用。

float2 TRANSFORM_TEX(texure, name)  //Transforms 2D UV by scale/bias property

tex.xy * name##_ST.xy + name##_ST.zw

 


5、摄像机和屏幕参数

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个裁剪平面在世界空间下的等式,按左、右、下、


6、英文名词

空间变换

Clip space

裁剪空间

 

Clip matrix

 裁剪矩阵

同投影矩阵

View frustum

视锥体

六个裁剪面组成

projection matrix

投影矩阵

 

Orthographic projection

正交投影

2D

Perspective projection

透视投影

3D

Near clip plane

近裁剪面

 

Screen space

屏幕空间

二维

光照

Irradiance

辐照度

 

Scattering

散射

 

Absorption

吸收

 

Refraction

折射

 

Reflection

反射

 

Specular

高光反射

物体表面的反射

Diffuse

漫反射

折射,吸收,散射

Emissive

自发光

 

Ambient

环境光

其他所有间接光照

Global illumination

全局光照

 

Fresnel reflection

菲涅尔反射

 

Isotropic

各向同性

固定视角和光源方向旋转表面

时,反射不会发生任何改变。

Anisotropic

各向异性

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值