unity ShaderLab 基础之【UnityCG.cginc 库】命令详解

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顶点位置、顶点切线、顶点法线、四组(或更多)纹理坐标icfloat4 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)所有分量取反
  • 8
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

千年奇葩

从来没受过打赏,这玩意好吃吗?

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值