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

devtools/2024/11/24 18:29:27/

简介:

        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/devtools/136605.html

相关文章

VMware ubuntu创建共享文件夹与Windows互传文件

1.如图1所示&#xff0c;点击虚拟机&#xff0c;点击设置&#xff1b; 图1 2.如图2所示&#xff0c;点击选项&#xff0c;点击共享文件夹&#xff0c;如图3所示&#xff0c;点击总是启用&#xff0c;点击添加&#xff1b; 图2 图3 3.如图4所示&#xff0c;出现命名共享文件夹…

Python内置数据结构:列表篇:【】,list函数创建。列表创建常见遇到问题,索引,列表增删改查,常用函数,while,for进行列表遍历,列表推导式

介绍&#xff1a; 列表元组字典集合 列表&#xff1a; 方括号【】和list函数是列表最常用的两种定义方式。 我们暂且称列表内的东西为元素&#xff0c;列表内的元素以逗号分隔开。列表的初始化&#xff1a;空列表&#xff0c;有数值是列表的两种初始化情况。 使用方括号创建…

开发工具 - VSCode 快捷键

以下是一些常用的 VS Code 快捷键&#xff08;Windows、macOS 和 Linux 均适用&#xff0c;略有不同&#xff09;&#xff1a; 常用快捷键 功能Windows/LinuxmacOS打开命令面板Ctrl Shift P 或 F1Cmd Shift P打开文件Ctrl OCmd O保存文件Ctrl SCmd S全部保存Ctrl K,…

【什么是RabbitMQ】

RabbitMQ&#xff1a;可靠、灵活的消息中间件 在当今的分布式系统和微服务架构中&#xff0c;消息中间件扮演着至关重要的角色。RabbitMQ&#xff0c;作为一款开源的消息代理软件&#xff0c;以其可靠性、灵活性、可扩展性和多语言支持等特点&#xff0c;在众多消息队列系统中…

java-贪心算法

1. 霍夫曼编码&#xff08;Huffman Coding&#xff09; 描述&#xff1a; 霍夫曼编码是一种使用变长编码表对数据进行编码的算法&#xff0c;由David A. Huffman在1952年发明。它是一种贪心算法&#xff0c;用于数据压缩。霍夫曼编码通过构建一个二叉树&#xff08;霍夫曼树&a…

每日小练:Day6

1.简写单词 题目链接&#xff1a;1037-简写单词_牛客竞赛语法入门班数组字符串习题 每次取出输出的首字母&#xff0c;如果首字母是小写&#xff0c;则将其变成大写输出&#xff0c;如果是大写&#xff0c;则直接输出 import java.util.*;public class Main{public static vo…

GitLab使用示例

以下是从 新建分支开始&#xff0c;配置 GitLab CI/CD 的完整详细流程&#xff0c;涵盖每个步骤、配置文件路径和具体示例。 1. 新建分支并克隆项目 1.1 在 GitLab 上创建新分支 登录 GitLab&#xff0c;进入目标项目页面。依次点击 Repository > Branches。点击右上角 Ne…

tdengine学习笔记-建库和建表

目录 建库和建表 创建超级表​ 创建表​ 自动建表​ 创建普通表​ 多列模型 VS 单列模型​ 数据类型映射​ 示例程序汇总​ 在车联网领域的应用 1. 数据模型概述 2. 表结构设计 2.1 静态数据表 2.2 动态数据表 4. 查询数据 4.1 查询单个车辆的数据 4.2 查询多个…