unity-shader Unity内置的函数变量等

本文详细介绍了Unity中关于Shader的基础知识,包括变换矩阵、摄像机和屏幕参数,以及ShaderLab属性和Cg变量的匹配关系。此外,还深入讲解了光照模型,如环境光、漫反射、高光反射、Blinn-Phong光照,并展示了如何使用Unity提供的内置函数计算光照信息。同时,文章也讨论了透明效果的渲染队列、混合模式及其操作。最后,简要提及了前向渲染、延迟渲染路径中的光照变量和函数,以及动画相关的时间变量。
摘要由CSDN通过智能技术生成

基础篇

Unity内置的变换矩阵:
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的逆矩阵

_Object2World
当前的模型矩阵,用于将顶点/方向矢量从模型空间变换到世界空间

_World2Object
_Object2World的逆矩阵,用于将顶点/方向矢量从世界空间变换到模型空间


Unity内置的摄像机和屏幕参数:
_WorldSpaceCameraPos
float3
该摄像机在世界空间中的位置

_ProjectionParams
float4
x = 1.0(或−1.0,如果正在使用一个翻转的投影矩阵进行渲染),y = Near,z = Far,w = 1.0 + 1.0/Far,其中Near和Far分别是近裁剪平面和远裁剪平面和摄像机的距离

_ScreenParams
float4
x = width,y = height,z = 1.0 + 1.0/width,w = 1.0 + 1.0/height,其中width和height分别是该摄像机的渲染目标(render target)的像素宽度和高度

_ZBufferParams
float4
x = 1− Far/Near,y = Far/Near,z = x/Far,w = y/Far,该变量用于线性化Z缓存中的深度值(可参考13.1节)

unity_OrthoParams
float4
x = width,y = heigth,z 没有定义,w = 1.0(该摄像机是正交摄像机)或w = 0.0(该摄像机是透视摄像机),其中width和height是正交投影摄像机的宽度和高度

unity_CameraProjection
float4x4
该摄像机的投影矩阵

unity_CameraInvProjection
float4x4
该摄像机的投影矩阵的逆矩阵

unity_CameraWorldClipPlanes[6]
float4
该摄像机的6个裁剪平面在世界空间下的等式,按如下顺序:左、右、下、上、近、远裁剪平面


ShaderLab属性类型和Cg变量类型的匹配关系:
Color,Vector ---- float4, half4,fixed4

Range,Float ---- float,half,fixed

2D ---- sampler2D

Cube ---- samplerCube

3D ---- sampler3D


Unity中一些常用的包含文件:
UnityCG.cginc
包含了最常使用的帮助函数、宏和结构体等

UnityShaderVariables.cginc
在编译Unity Shader时,会被自动包含进来。包含了许多内置的全局变量,如UNITY_MATRIX_MVP等

Lighting.cginc
包含了各种内置的光照模型,如果编写的是Surface Shader的话,会自动包含进来

HLSLSupport.cginc
在编译Unity Shader时,会被自动包含进来。声明了很多用于跨平台编译的宏和定义


UnityCG.cginc中一些常用的结构体:
appdata_base
可用于顶点着色器的输入
顶点位置、顶点法线、第一组纹理坐标

appdata_tan
可用于顶点着色器的输入
顶点位置、顶点切线、顶点法线、第一组纹理坐标

appdata_full
可用于顶点着色器的输入
顶点位置、顶点切线、顶点法线、四组(或更多)纹理坐标

appdata_img
可用于顶点着色器的输入
顶点位置、第一组纹理坐标

v2f_img
可用于顶点着色器的输出
裁剪空间中的位置、纹理坐标


从应用阶段传递模型数据给顶点着色器时Unity支持的常用语义:
POSITION
模型空间中的顶点位置,通常是float4类型

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

TANGENT
顶点切线,通常是float4类型

TEXCOORDn ,如TEXCOORD0、TEXCOORD1
该顶点的纹理坐标,TEXCOORD0表示第一组纹理坐标ÿ

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值