当前位置: 首页 > article >正文

Unity Shader常见函数 内置Built-in/URP等效函数

简介:

        Unity Shader的URP中的函数与Built-in中的是不一样的,升级URP之后,基本都提供了平替的函数

Built-in 内置渲染管线函数URP 通用渲染函数
TRANSFORM_TEX(uv, textureName)TRANSFORM_TEX(uv, textureName)
tex2D, tex2Dlod, 等SAMPLE_TEXTURE2D、SAMPLE_TEXTURE2D_LOD等
UnityObjectToClipPos(positionOS)TransformObjectToHClip(positionOS),或使用GetVertexPositionInputs().positionCS
UnityObjectToWorldNormal(normalOS)TransformObjectToWorldNormal(normalOS),或使用GetVertexNormalInputs().normalWS
ComputeScreenPos(positionCS)ComputeScreenPos(positionCS),但在 Unity 2021 / URP v11+ 中已弃用。应该GetVertexPositionInputs().positionNDC使用
ComputeGrabScreenPos(positionCS)URP 不支持 GrabPass
WorldSpaceViewDir(positionOS)计算positionWS并使用下面的函数代替
UnityWorldSpaceViewDir(positionWS)GetWorldSpaceViewDir(positionWS)(在 v9+ 中添加到ShaderVariablesFunctions.hlsl)。对于之前的版本,请将其复制出来。如果需要对其进行标准化,可以使用它GetWorldSpaceNormalizeViewDir(positionWS)来代替。
WorldSpaceLightDir(positionOS)见下文
UnityWorldSpaceLightDir(positionWS)/
_WorldSpaceLightPos0
对于主定向光,请使用GetMainLight().direction。请参阅Lighting.hlsl
Shade4PointLights(...)实际上没有直接的等效项,但内置将其用于前向中的顶点照明,因此请参见下文。
ShadeVertexLights(vertex, normal)VertexLighting(positionWS, normalWS)在Lighting.hlsl中
ShadeSH9(half4(worldNormal,1))SampleSH(normalWS),但在Lighting.hlslSAMPLE_GI(input.lightmapUV, input.vertexSH, inputData.normalWS)中使用宏/SampleSHVertex/SampleSHPixel函数。例如,请参见LitForwardPass.hlsl
UNITY_FOG_COORDS(n)float fogFactor : TEXCOORDn
UNITY_TRANSFER_FOG(o, positionCS)OUT.fogFactor = ComputeFogFactor(positionCS.z)
UNITY_APPLY_FOG(fogCoord, color, fogColor)color.rgb = MixFog(color.rgb, fogCoord)
UNITY_APPLY_FOG_COLOR(fogCoord, color)color.rgb = MixFogColor(color.rgb, fogColor.rgb, fogCoord)
Linear01Depth(z)Linear01Depth(z, _ZBufferParams)
LinearEyeDepth(z)LinearEyeDepth(z, _ZBufferParams)
ParallaxOffset(h, height, viewDirTS)ParallaxOffset1Step(h, amplitude, viewDirTS)如果是 v10.1+(对于之前的版本,复制函数)。请参阅ParallaxMapping.hlsl
Luminance(rgb)Luminance(rgb),参见Color.hlsl
V2F_SHADOW_CASTER大致相当于float4 positionCS : SV_POSITION;,但请参阅ShadowCaster部分。
TRANSFER_SHADOW_CASTER_NORMALOFFSET请参阅ShadowCasterPass.hlslGetShadowPositionHClip(input)中的示例,另请参阅上面
SHADOW_CASTER_FRAGMENTreturn 0;
SHADOW_COORDS(1)float4 shadowCoord : TEXCOORD1;
TRANSFER_SHADOW(o)TransformWorldToShadowCoord(inputData.positionWS)
SHADOW_ATTENUATION(i)MainLightRealtimeShadow(shadowCoord),但GetMainLight(shadowCoord)也会处理它。请参阅Lighting.hlsl和Shadows.hlsl

数学计算相关:

max(a,b) 返回两者中较大的

min(a,b)返回两者中较小的

mul(a,b) 两向量相乘

abs(a)返回a的绝对值

round(x)返回与x最近的整数

sqrt(x)返回x的平方根数

rsqrt(x)返回x的平方根倒数

degrees(x)将弧度转化为角度

redians(x)将角度转化为弧度

noise(x) 噪声函数

pow(x,y)幂运算,x的y次幂

exp(x)返回以e为底的指数

exp2(value x)返回以2为底,x为指数的幂

ldexp(x,exp)返回与2的exp次方的乘积

log(x) 返回指定值的以e为底数的对数

log10(x) 以10为底的对数

log2(x)以2为底数的对数

sin(x)、cos(x)、tan(x)

asin(x)、acos(x)、atan(x)

ceil(x)返回>=x的最小整数

floor(x)返回<=x的最大整数

step(x,y) x<=y返回1,否则返回0

saturate(x) 返回将x钳制到[0,1]范围之间的值

clamp(x,min,max) 将x限制在[min,max]范围的值,比min小返回min,比max大返回max

fmod(x,y)返回x对y取余的余数

frac(x)取x的小数部分

modf(x,out ip)将x分为小数和整数部分(输出的ip为整数部分,返回值为小数部分)

lerp(x,y,s)按照s在x到y之间插值

smoothstep(min,max,x)如果x在[min,max]范围内,就返回介于[0,1]之间的平滑插值

all(x)确定指定量的所有分量是否均为非零,均非零则返回true,否则返回false(处理由浮点型、整型、布尔型数据定义的标量、向量或者矩阵)

clip(x)

如果输入值小于零,则丢弃当前像素 常用于判定范围(不仅仅针对0,返回值为void)

常用于Alpha Test,如果每个分量代表到平面的距离,还可以用来模拟剪切平面

sign(x)返回x的正负性

如果x小于零返回-1

如果x等于零返回0

如果x大于零返回1

isinf(x)

如果x参数为+ INF或-INF(无穷+无穷仍无穷,0x3f3f3f3f),返回true,否则返回False

isfinite(x)

判断x参数是有限,即有界的,与isinf(x)相反

isnan(x)

如果x参数为NAN(非数字),返回true,否则返回false

length(v) 返回向量的长度

normalize(v) 向量归一化,x/length(x) 方向向量归一化

distance(a,b) 返回两个向量之间的距离,不平行的两个向量应该为0,此处表示为根号下各分量之差的平方和

dot(a,b) 点积

cross(a,b) 叉积

determinant(m) 返回指定浮点矩阵的按行列式方式计算的值

transpose(m) 返回矩阵m的转置矩阵

reflect(i,n) 以i为入射向量n为法线方向的反射光

refract(i,n,ri) 以i为入射向量n为法线方向,ri为折射率的折射光

纹理采样相关函数(Built-in):

tex2D(s, t) 普通二维纹理查找 返回纹理采样器s在vector t位置的颜色

tex2D(s,t,ddx,ddy) 使用偏导数微分查询二维纹理,t和ddxy均为vector

tex2Dlod(s, t) 使用LOD查找纹理s在t.w位置的color4,可以在vert中采样

tex2Dbias(s, t) 将t.w决定的某个MIP层偏置后的二维纹理查找

tex2Dgrad(s,t,ddx,ddy) 使用微分并指定MIP层的二维纹理查找

tex2Dproj(s, t) 把纹理当做一张幻灯片投影到场景中,先使用投影纹理技术需要计算出投影纹理坐标t(坐标t.w除以透视值),然后使用投影纹理坐标进行查询

texCUBE(s,t) 返回纹理采样器s在vector t位置的颜色

texCUBE(s,t,ddx,ddy) 使用微分查询立方体维纹理 ,t和ddxy均为vector

texCUBEDload(s,t) 使用LOD查找纹理s在t.w位置的color4

texCUBEbias(s,t) 将t.w决定的某个MIP层偏置后的立方体纹理查找

texCUBEgrad(s,t,ddx,ddy) 使用微分并指定MIP层的立方体纹理查找

texCUBEproj(s,t) 使用投影方式的立方体纹理查找


http://www.kler.cn/a/409284.html

相关文章:

  • 详细探索xinput1_3.dll:功能、问题与xinput1_3.dll丢失的解决方案
  • 《第十部分》1.STM32之通信接口《精讲》之IIC通信---介绍
  • JS精进之Hoisting(提升)
  • shell编程之sed
  • leetcode day13 贪心 45+55
  • vue3【实战】响应式的登录界面
  • 【WPF】Prism学习(九)
  • android-sdk 安装脚本
  • BERT的基本理念
  • Github工作流
  • 高级网络安全——移动IP (GSM认证和密钥协议)(week6)
  • Win11下载和配置VSCode(详细讲解)
  • ant vue3 form嵌套校验
  • C++ 优先算法 —— 长度最小的子数组(滑动窗口)
  • SD NAND 的 SDIO在STM32上的应用详解
  • 最新‌VSCode保姆级安装教程(附安装包)
  • vue2 src_Todolist编辑($nextTick)
  • java SQL中使用for update作用和用法
  • 输入三个整数x,y,z,请把这三个数由小到大输出。-多语言实现
  • Scala案例:全文单词统计
  • 【架构】主流企业架构Zachman、ToGAF、FEA、DoDAF介绍
  • 资产管理运营系统mobilefront2前台文件上传漏洞
  • XMOS携手合作伙伴晓龙国际联合推出集成了ASRC等功能的多通道音频板
  • 面试干货:软件测试常见面试题(附答案)
  • 深入解析:如何使用 PyTorch 的 SummaryWriter 进行深度学习训练数据的详细记录与可视化
  • vue3【实战】响应式的登录界面