UnityCG.cginc 库
UnityCG.cginc 该文件中包含了很多即成的参数方法。使用十分方便
引入文件
CGPROGRAM
#include "UnityCG.cginc"
ENDCG
unitycg.cginc 常用结构
命令 |
参数 |
实例 |
说明 |
appdata_base |
顶点位置、顶点法线、第一组纹理坐标 |
float4 vertex : POSITION; float3 normal : NORMAL; float4 texcoord: TEXCOORD0; |
可用于顶点着色器的输入 |
appdata_tan |
顶点位置、顶点切线、顶点法线、第一组纹理坐标 |
float4 vertex : POSITION; float4 tangent : TANGENT; float3 normal : NORMAL; float4 texcoord : TEXCOORD0; |
可用于顶点着色器的输入 |
appdata_full |
顶点位置、顶点切线、顶点法线、四组(或更多)纹理坐标i |
cfloat4 vertex : POSITION; float4 tangent : TANGENT; float3 normal : NORMAL; float4 texcoord : TEXCOORD0; float4 texcoord1 : TEXCOORD1; float4 texcoord2 : TEXCOORD2; float4 texcoord3 : TEXCOORD3; #if defined(SHADER_API_XBOX360) half4 texcoord4 : TEXCOORD4; half4 texcoord5 : TEXCOORD5; #endif fixed4 color : COLOR; |
可用于顶点着色器的输入 |
appdata_img |
可用于顶点着色器的输入 |
float4 vertex : POSITION; half2 texcoord : TEXCOORD0; |
可用于顶点着色器的输入 |
v2f_img |
裁剪空间中的位置、纹理坐标 |
|
可用于顶点着色器的输出 |
unitycg.cginc 常用函数
命令 |
参数 |
实例 |
说明 |
float4 WorldSpaceViewDir(float4 v) |
|
|
输入一个模型空间中的顶点位置,返回世界空间中从该点到摄像机的观察方向 |
float4 UnityWorldSpaceViewDir(float4 v) |
|
|
输入一个世界空间中的顶点位置,返回世界空间中从该点到摄像机的观察方向 |
float4 ObjSpaceViewDir(float4 v) |
|
|
输入一个模型空间中的顶点位置,返回模型空间中从该店到摄像机的观察方向 |
float4 WorldSpace LightDir(flaot4 v) |
|
|
仅用于向前渲染。 输入一个模型空间中的顶点位置,返回世界空间中从该点到光源的光照方向。没有被归一化 |
float4 ObjectSpaceLightDir(float4 v) |
|
|
仅用于向前渲染中,输入一个模型空间中的顶点位置, 返回模型空间中从该点到光源的光照方向。没有被归一化 |
float4 UnityWorldSpaceLightDir(float4 v) |
|
|
仅用于向前渲染中,输入一个世界空间中的顶点位置, 返回世界空间中从该点到光源的光照方向。没有被归一化 |
float3 UnityObjectToWorldNormal(float3 norm) |
|
|
把法线方向从模型空间中转换到世界空间中 |
float3 UnityObjectToWorldDir(float3 dir) |
|
|
把方向矢量从模型空间中变换到世界空间中 |
float3 Unity WorldToObjectDir(float3 dir) |
|
|
把方向矢量从世界空间变换到模型空间中 |
shader数学函数:
函数 |
说明 |
实例 |
radians(degree) |
角度变弧度(一般默认都用弧度) |
|
degrees(radian) |
弧度变角度 |
|
sin(angle), cos(angle), tan(angle) |
三角函数 |
|
asin(x) |
arc sine, 返回弧度 [-PI/2, PI/2]; |
|
acos(x) |
arc cosine,返回弧度 [0, PI] |
|
atan(y, x) |
arc tangent, 返回弧度 [-PI, PI]; |
|
atan(y/x) |
arc tangent, 返回弧度 [-PI/2, PI/2]; |
|
pow(x, y) |
x的y次方 |
|
exp(x) |
指数, log(x) |
|
exp2(x) |
2的x次方, log2(x) |
|
sqrt(x) |
x的根号; |
|
inversesqrt(x) |
x根号的倒数 |
|
abs(x) |
绝对值 |
|
sign(x) |
取当前数值的正负符号,返回 1, 0 或 -1 |
(x>0;x=0;x<0) |
floor(x) |
底部取整 |
|
ceil(x) |
顶部取整 |
|
fract(x) |
取小数部分 |
|
mod(x, y) |
取模, x - y*floor(x/y) |
|
min(x, y) |
取最小值 |
|
max(x, y) |
取最大值 |
|
clamp(x, min, max) |
min(max(x, min), max); |
|
mix(x, y, a) |
x, y的线性混叠, x(1-a) + y*a; |
|
step(edge, x) |
如 x smoothstep(edge0, edge1, x): threshod smooth transition时使用。 edge0<=edge0时为0.0, x>=edge1时为1.0 |
|
length(x) |
向量长度 |
|
distance(p0, p1) |
两点距离, length(p0-p1); |
|
dot(x, y) |
点积,各分量分别相乘 后 相加 |
|
cross(x, y) |
差积 |
x[1]*y[2]-y[1]*x[2], x[2]*y[0] - y[2]*x[0], x[0]*y[1] - y[0]*x[1] |
normalize(x) |
归一化 |
length(x)=1; |
faceforward(N, I, Nref) |
如 dot(Nref, I)< 0则N, 否则 -N |
|
reflect(I, N) |
I的反射方向 |
I -2*dot(N, I)*N, N必须先归一化 |
refract(I, N, eta) |
折射 |
k=1.0-etaeta(1.0 - dot(N, I) * dot(N, I)); 如k<0.0 则0.0,否则 etaI - (etadot(N, I)+sqrt(k))*N |
matrixCompMult(matX, matY) |
矩阵相乘, 每个分量 自行相乘 |
r[j] = x[j]*y[j]; |
lessThan(vecX, vecY) |
向量 每个分量比较 x < y |
|
lessThanEqual(vecX, vecY) |
向量 每个分量比较 x<=y |
|
greaterThan(vecX, vecY) |
向量 每个分量比较 x>y |
|
greaterThanEqual(vecX, vecY) |
向量 每个分量比较 x>=y |
|
equal(vecX, vecY) |
向量 每个分量比较 x==y |
|
notEqual(vecX, vexY) |
向量 每个分量比较 x!=y |
|
any(bvecX) |
只要有一个分量是true, 则true |
|
all(bvecX) |
所有分量是true, 则true |
|
not(bvecX) |
所有分量取反 |
|