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

news/2024/11/24 3:08:47/

简介:

        Unity ShaderURP中的函数与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.ppmy.cn/news/1549430.html

相关文章

flume-将日志采集到hdfs

看到hdfs大家应该做什么&#xff1f; 是的你应该去把集群打开&#xff0c; cd /export/servers/hadoop/sbin 启动集群 ./start-all.sh 在虚拟机hadoop02和hadoop03上的conf目录下配置相同的日志采集方案&#xff0c;‘ cd /export/servers/flume/conf 切换完成之后&#…

Github工作流

GitHub 工作流 是一种专门为 GitHub 上的代码协作和版本控制而设计的工作流&#xff0c;它强调通过 **拉取请求&#xff08;Pull Request&#xff0c;PR&#xff09;** 来管理代码的合并和审查。GitHub 工作流通常涉及到使用 **分支** 来进行功能开发和修复&#xff0c;并通过 …

缓冲区的奥秘:解析数据交错的魔法

目录 一、理解缓存区的好处 &#xff08;一&#xff09;直观性的理解 &#xff08;二&#xff09;缓存区的好处 二、经典案例分析体会 &#xff08;一&#xff09;文件读写流&#xff08;File I/O Buffering&#xff09; BufferedOutputStream 和 BufferedWriter 可以加快…

Flutter:AnimatedSwitcher当子元素改变时,触发动画

AnimatedSwitcher中的子元素 由:CircularProgressIndicator() 改变为:Image.network(https://cdn.uviewui.com/uview/swiper/1.jpg) 则会触发动画class _MyHomePageState extends State<MyHomePage> {bool flag true;overrideWidget build(BuildContext context) {retur…

百度Q3财报:净利润增长17%超预期 文心大模型日调用量增30倍达15亿

发布 | 大力财经 11月21日晚&#xff0c;百度发布2024年第三季度财务报告&#xff0c;显示季度总营收336亿元&#xff0c;百度核心营收265亿元&#xff0c;归属百度核心的净利润75.4亿元&#xff0c;同比增长17%&#xff0c;超出市场预期。财报显示&#xff0c;11月&#xff0…

Excel常用技巧分享

excel单元格内换行 直接按回车会退出当前单元格的编辑&#xff0c;如果需要在单元格中换行&#xff0c;需要按下AltEnter。 excel插入多行或多列 WPS 在WPS中想要插入多行&#xff0c;只需在右键菜单中输入对应的数字即可。 Office Excel excel中相对麻烦一些&#xff0c;比…

web——sqliabs靶场——第九关——时间盲注

什么是时间盲注 时间盲注是指基于时间的盲注&#xff0c;也叫延时注入&#xff0c;根据页面的响应时间来判断是否存在注入。 使用sqlmap不同的技术 sqlmap --technique 参数用来设置具体SQL注入技术 B: Boolean-based blind 基于布尔的忙逐步 E:Error-based 报错注入 U&am…

PyTorch 分布式并行计算

0. Abstract 使用 PyTorch 进行多卡训练, 最简单的是 DataParallel, 仅仅添加一两行代码就可以使模型在多张 GPU 上并行地计算. 但它是比较老的方法, 官方推荐使用新的 Distributed Data Parallel, 更加灵活与强大: 1. Distributed Data Parallel (DDP) 从一个简单的非分布…