Shader常用函数属性

Properties属性支持类型

属性类型默认值的定义语法例子
Intnumber_Int(“Int”,Int)=2
Floatnumber_Float(“Float”,Float)=1.5
Range(min,max)number_Range(“Range”,Range(0.0,5.0))=3.0
Color(number,number,number,number)_Color("“Color”,Color)=(1,1,1,1)
Vector(number,number,number,number)_Vector(“Vector”,Vector)=(2,3,6,1)
2D“defaulttexture”{}_2D(“2D”,2D)=""{}
Cube“defaulttexture”{}_Cube(“Cube”,Cube)=“white”{}
3D“defaulttexture”{}_3D(“3D”,3D)=“black”{}

常见渲染设置

状态名称设置指令解释
CullCull Back 或 Front 或 Off剔除背面/正面/关闭剔除
ZTestZTest Less Greater 或 LEqual 或 GEqual 或 Equal 或 NotEqual 或 Always设置深度测试函数
ZWriteZwrite On 或 Off开关深度写入
BlendBlend SrcFactor DstFactor开启并设置混合模式

SubShader标签类型

标签类型说明例子
Queue控制渲染顺序Tags{“Queue”=“Transparent”}
RenderType对着色器进行分类,例如这是一个不透明着色器或是一个透明着色器Tags{“RenderType”=“Opaque”}
DisableBatching指明是否对SubShader进行批处理Tags{“DisableBatching”=“True”}
ForceNoShadowCasting是否会投射阴影Tags{“ForceNoShadowCasting”=“True”}
IgnoreProjector如果为True则不接受投影影响Tags{"IgnoreProjector "=“True”}
CanUseSpriteAtlas当该SubShader是用于精灵(Sprites)时 ,将该标签设置为FalseTags{"CanUseSpriteAtlas "=“False”}
PreviewType指明材质面板将如何预览材质,默认为一个球,可以设置为Plane、SkyBoxTags{“PreviewType”=“Plane”}

ShaderLab属性和Cg变量类型的匹配关系

ShaderLab属性Cg变量
Color,Vectorfloat4,half4, fixed4
Range,Floatfloat,half,fixed
2Dsampler2D
CubesamplerCube
3Dsampler3D

常用的包含文件

文件名描述
UnityCG.cginc包含了最常用的帮助函数、宏和结构
UnityShaderVeriables.cginc自动包含,有许多内置的全局变量,如UNITY_MATRIX_MVP
Lighting.cginc自动包含,各种光照模型
HLSLSupport.cginc自动包含,用于夸平台的宏

常用的结构体

名称描述包含变量
appdata_base可用于顶点着色器输入顶点位置、顶点法线 、第一组纹理坐标
appdata_tan可用于顶点着色器输入顶点位置、顶点切线、顶点法线、第一组纹理坐标
appdata_full可用于顶点着色器输入顶点位置、顶点切线、顶点法线、四组或更多纹理坐标
appdata_img可用于顶点着色器输入顶点位置、第一组纹理坐标
v2f_img可用于顶点着色器输出裁剪空间中的位置、纹理坐标

应用阶段传递给顶点着色器时Unity支持的常用语义

语义描述
POSITION模型空间中的顶点位置,通常是float4
NORMAL顶点法线,通常是float3
TANGENT顶点切线,通常是float4
TEXCOORD0、TEXCOORD1…该顶点的纹理坐标通常是float2或float4
COLOR顶点颜色,通常是fixed4、float4类型

顶点着色器传给片元着色常用语义

语义描述
SV_POSITION裁剪空间中顶点坐标
COLOR0通常用于输出第一组顶点色,非必须
COLOR1通常用于输出第二组顶点色,非必须
TEXCOORD0~7通常用于输出纹理坐标,但不是必需的

片元着色器输出时Unity支持的常用语义

语义描述
SV_Target输出值将会存储到渲染目标中

3种精度数值

类型精度
float高精度,32位
half中精度,16位,-60000~+60000
fixed底精度,11位,-2.0~2.0

Unity支持的Shader Target

指令描述
#pragma target2.0默认,相当于Direc3d 9上的ShaderModel 2.0,不支持对顶点纹理采样,不支持显示 的LOD文理采样
#pragma target3.0相当于Direc3d 9上的ShaderModel 3.0,支持对顶点纹理的采样等
#pragma target4.0相当于Direc3d 10上的ShaderModel 4.0,支持几何着色器等
#pragma target5.0相当于Direc3d 11上的ShaderModel 5.0

UnityCG.cginc中一些常用的帮助函数

函数名描述
float3 WorldSpaceViewDir(float4 v)给一个模型空间顶点,返回世界空间该点到摄像机方向
float3 UnityWorldSpaceViewDir(float4 v)给一世界空间顶点,返回世界空间该点到摄像机方向
float3 ObjSpaceViewDir(float4 v)输入一个模型空间中的顶点位置,返回模型空间中从该点到摄像机的方向
float3 WorldSpaceLightDir(float4 v)仅可用于前向渲染中。给一个模型空间中顶点位置,返回世界空间中从该点到光照方向,没归一化
float3 UnityWorldSpaceLightDir(float4 v)仅可用于前向渲染中。给一个世界空间中顶点位置,返回世界空间中该 点到光源方向,没归一化
float3 ObjSpaceLightDir(float4 v)仅可用于前向渲染中。给一个模型空间中顶点位置,返回模型空间中从该点到光源的方向。没归一化
float3 UnityObjectToWorldNormal(float3 norm)把法线方向从模型空间转到世界空间
float3 UnityObjectToWorldDir(float3 dir)把方向失量从模型空间转到世界空间
float3 UnityWorldToObjectDir(float3 dir)把方向失量从世界空间转到模型空间

ShaderLab的Blend命令

名称意义
Blend Off关闭混合
Blend SrcFactor DstFactor开启混合源色会乘以SrcFactior而目标色会乘以DstFactor
Blend SrcFactor DstFactor, SrcFactorA DstFactorA和上面几乎一样,只是使用不同的因子混合
BlendOp BlendOperation并非排源色和目标色相加混合,而是使用BlendOperation对它们进行其他操作

ShaderLab中的混合因子

参数描述
One因为了1
Zero0
SrcColor源因子为色值 ,当为RGB通道时返回rgb,当为A通道时返回a值
SrcAlpha源因子的A通道值
DstColor目标因子色值,当RGB通道时返回rgb,当为A通道时返回a值
DstAlpha目标色值为A通道值
OneMinusSrcColor因子为1-源颜色。当为RBG则用rgb作为分量,为A通道时则以a作业值
OneMinusSrcAlpha因子为1-源颜色的a
OneMinusDstColor因子为1-目标颜色。当为RBG则用rgb作为分量,为A通道时则以a作业值
OneMinusDstAlpha因子为1-目标颜色a

LightMode支持的渲染路径设置

标签名描述
Always会被渲染,但不计算光照
ForwardBase用于前向渲染。会计算环境光,最重要的平行光,逐顶点/SH光i源和Lightmaps
ForwardAdd用于前向渲染。会计算有外的逐像素光源,每个Pass对应一个光源
Deferred用于延迟渲染。该Pass会渲染G缓冲
ShadowCaster把物体的深度信息渲染到阴影映射纹理中
PrepassBase用于遗留的。该Pass会渲染法线和高光反射的指数部分
PrepassFinal用于遗留延迟渲染。该Pass通过合并纹理、光照和自发光来渲染得到最后的颜色
Vertex、VertexLMRGBM、VertexLM用于遗留的顶点照明渲染

前向渲染内置灯光变量

名称类弄描述
_LightColor0float4该 Pass处理的逐像素光源的颜色
_WorldSpaceLightPos0float4该 Pass处理的逐像素光源的位置,如果是平行光,则是0
_LightMatrix0float4X4世界空间到光源空间的变换矩阵
unity_4LightPosX0,unity_4LightPosY0,unity_4LightPosZ0float4仅用于Base Pass前四个重要点光源在世界的位置
unity_4LightAttenfloat4仅用于Base Pass前四个重要点光源的衰减引子
unity_LightColorhalf4[4]仅用于Base Pass前四个重要点光源的颜色

前向渲染内置灯光函数

函数名描述
float3 WorldSpaceLightDir(float4 v)仅用于前向渲染,给一个模型空间顶点,返回世界空间该点到到光源的方向,没有归一化
float3 UnityWorldSpaceLightDir(float4 v)仅用于前向渲染,给一个世界空间顶点,返回世界空间该点到到光源的方向,没有归一化
float3 ObjSpaceLightDir(float4 v)仅用于前向渲染,给一个模型空间顶点,返回模型空间该点到到光i源的方向,没有归一化
float3 Shader4PointLights(float4 v)仅用于前向渲染,计算四个点光源的光照,参数是打包进失量的光照数据 ,用常用这个计算逐点光照

RenderType的参数

参数说明
Opaque用于大多数着色器(法线着色器、自发光着色器、反射着色器以及地形的着色器)。
Transparent用于半透明着色器(透明着色器、粒子着色器、字体着色器、地形额外通道的着色器)。
TransparentCutout蒙皮透明着色器(Transparent Cutout,两个通道的植被着色器)。
BackgroundSkybox shaders. 天空盒着色器。
OverlayGUITexture, Halo, Flare shaders. 光晕着色器、闪光着色器。
TreeOpaqueterrain engine tree bark. 地形引擎中的树皮。
TreeTransparentCutoutterrain engine tree leaves. 地形引擎中的树叶。
TreeBillboardterrain engine billboarded trees. 地形引擎中的广告牌树。
Grassterrain engine grass. 地形引擎中的草。

数据函数:

函数含义
abs(x)返回输入参数的绝对值
acos(x)反余切函数,输入参数范围为[-1,1],返回[0,π]区间的角度值
all(x)如果输入参数均不为0,则返回 ture;否则返回 flase。&&运算
any(x)输入参数只要有其中一个不为0,则返回 true。
asin(x)反正弦函数,输入参数取值区间为[−1,1],返回角度值范围为[−π/2 ,π/2 ]
atan(x)反正切函数,返回角度值范围为⎡−π/2 ,π/2⎤
atan2(y,x)计算y/x 的反正切值。实际上和atan(x)函数功能完全一样,至少输入参数不同。atan(x) = atan2(x, float(1))
ceil(x)对输入参数向上取整。例如:ceil(float(1.3)),其返回值为 2.0
clamp(x,a,b)如果x 值小于 a,则返回a;如果 x 值大于 b,返回b;否则,返回 x
cos(x)返回弧度 x 的余弦值。返回值范围为[−1,1]
cross(A,B)返回两个三元向量的叉积(cross product)。注意,输入参数必须是三元向量
degrees(x)输入参数为弧度值(radians),函数将其转换为角度值(degrees)
determinant(m)计算矩阵的行列式因子
dot(A,B)返回A 和 B的点积(dot product)。参数A 和 B 可以是标量,也可以是向量(输入参数方面,点积和叉积函数有很大不同)
exp(x)计算ex的值,e= 2.71828182845904523536
exp2(x)计算2x的值
floor(x)对输入参数向下取整。例如floor(float(1.3)) 返回的值为1.0;但是 floor(float(-1.3))返回的值为-2.0。
fmod(x,y)返回x/y 的余数。如果 y 为 0,结果不可预料
frexp(x, out exp)将浮点数 x 分解为尾数和指数,即x = m* 2^exp,返回m,并将指数存入 exp 中;如果 x 为 0,则尾数和指数都返回0
frac(x)返回一个标量或矢量的小数部分组件
isfinite(x)判断标量或者向量中的每个数据是否是有限数,如果是返回true;否则返回false;无限的或者非数据(not-a-number NaN)
isinf(x)判断标量或者向量中的每个数据是否是无限,如果是返回 true;否则返回 false;
isnan(x)判断标量或者向量中的每个数据是否是非数据(not-a-number NaN),如果是返回true;否则返回false;
ldexp(x, n)计算x∗2n的值
lerp(a, b, f)计算(1−f )∗ + ∗a b f或者a+f ∗ −(b a)的值。即在下限a 和上限 b 之间进行插值,f表示权值。注意,如果 a和 b 是向量,则权值 f必须是标量或者等长的向量。
lit(NdotL,NdotH, m)N表示法向量;L 表示入射光向量;H表示半角向量;m 表示高光系数。函数计算环境光、散射光、镜面光的贡献,返回的 4元向量: 1.位表示环境光的贡献,总是 1.0;2.位代表镜面光的贡献,如果 N •L<0,则为0;否则为 N •L;3.位代表镜面光的贡献,如果N •L<0或者 N •H <0 ,则位 0;否则为(N •H)m;
log(x)返回以e为底的对数。
log2(x)计算log(2x)的值,x 必须大于 0
log10(x)计算log10(x)的值,x必须大于 0
max(a, b)比较两个标量或等长向量元素,返回 大值
min(a,b)比较两个标量或等长向量元素,返回 小值
step(a, x)如果 x<a,返回0;否则,返回1。
sqrt(x)求 x的平方根, x ,x必须大于 0。
tan(x)输入参数为弧度,计算正切值
transpose(M)M 为矩阵,计算其转置矩阵

几何函数:

函数名含义
distance( pt1, pt2)两点之间的欧几里德距离(Euclidean distance)
faceforward(N,I,Ng)如果Ng I• <0 ,返回N;否则返回-N。
length(v)返回一个向量的模,即 sqrt(dot(v,v))
normalize( v)归一化向量
reflect(I, N)根据入射光方向向量 I,和顶点法向量N,计算反射光方向向量。其中I和N 必须被归一化,需要非常注意的是,这个I 是指向顶点的;函数只对三元向量有效。
refract(I,N,eta)计算折射向量,I为入射光线,N为法向量,eta为折射系数;其中 I 和N必须被归一化,如果I 和N 之间的夹角太大,则返回(0,0,0),也就是没有折射光线;I是指向顶点的;函数只对三元向量有效。
mul(M, N)计算两个矩阵相乘,如果 M 为 AxB 阶矩阵,N 为 BxC阶矩阵,则返回 AxC 阶矩阵。下面两个函数为其重载函数。
noise( x)噪声函数,返回值始终在 0,1 之间;对于同样的输入,始终返回相同的值(也就是说,并不是真正意义上的随机噪声)。
pow(x, y)幕运算
radians(x)函数将角度值转换为弧度值
round(x)Round-to-nearest,或 closest integer to x 即四舍五入
rsqrt(x)X 的反平方根,x 必须大于 0
saturate(x)如果 x 小于 0,返回 0;如果 x 大于 1,返回1;否则,返回 x
sign(x)如果 x 大于 0,返回 1;如果 x 小于 0,返回-1;否则返回 0。
sincos(float x, out s, out c)该函数是同时计算 x 的 sin 值和 cos 值,其中s=sin(x),c=cos(x)。该函数用于“同时需要计算 sin 值和 cos 值的情况”,比分别运算要快很多!
sinh(x)计算双曲正弦(hyperbolic sine)值。
smoothstep(min, max, x)值 x 位于 min、max 区间中。如果 x=min,返回 0;如果 x=max,返回 1;如果 x 在两者之间, 返回平平滑差值;
step(a, x)如果 x<a,返回 0;否则,返回 1。
sqrt(x)求 x 的平方根, x ,x 必须大于 0。
tan(x)输入参数为弧度,计算正切值
tanh(x)计算双曲正切值
transpose(M)M 为矩阵,计算其转置矩阵

纹理映射函数

函数含义
tex1D(sampler1D tex, float s)一维纹理查询
Tex2D(sampler2D tex, float2 s)二维纹理查询
Tex2Dproj(sampler2D tex, float4 s)tex2Dproj(v) = tex2D(v.x/v.w, v.y/v.w);
Tex2Dlod(sampler2D tex, float4 s)s.xy是UV坐标 s.w是细节层次 例:float2 aa = tex2Dlod(_MainTex, float4(v.texcoord.xy, 0, 0)) (target3.0 版本 可用于在顶点着色器中获取图片颜色)
Tex3D(sampler3D tex, float s)三维纹理查询

偏导函数

函数含义
ddx(a)参数 a 对应一个像素位置,返回该像素值在 X 轴上的偏导数
ddy(a)参数 a 对应一个像素位置,返回该像素值在 X 轴上的偏导数
  • 5
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小盖子

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值