【TA 100】2.3 HLSL常用函数介绍

news2025/2/25 3:31:47

一、基本数学运算

● 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)
○ 噪声函数
○ 将uv的坐标作为x传入,随机的返回一个[0,1]的值,就会得到一张噪声图
在这里插入图片描述
在这里插入图片描述

二、幂指对函数与偏导数

● pow(x,y)
○ x的y次幂(x、y都可以是自变量或具体数) → x y x^y xy
● exp(x)
○ 返回以e为底的指数函数 → e x e^x ex
● exp2(value x)
○ 返回以2为底,x为指数的幂 → 2 x 2^x 2x
● ldexp(x,exp)
○ 返回与2的exp次方的乘积 → x ∗ 2 e x p x*2^exp x2exp
● log(x)
○ 返回指定值的以e为底数的对数 → l n x lnx lnx
● log10(x)
○ 求以10为底的对数 → l o g 10 x log_{10}x log10x
● log2(x)
○ 求以2为底数的对数 → l o g 2 x log_{2}x log2x
● frexp(x,out exp)
○ 把浮点数分解为尾数和指数,x的返回值是尾数(x=ret*2^exp),exp参数返回的是指数
○ 是按照计算机存储浮点数的方式分解的
■ eg:1.2这个数,是分为两部分的,尾数为12,指数为0.1
○ out关键字:exp也会作为一个返回值传出,也就是说这个函数有两个返回值。
○ 如果x参数为0,则此函数的尾数和指数均返回0

三、三角函数和双曲线函数

● sin(x)、cos(x)、tan(x)
○ 三角函数(弧度制:1°=π/180 rad)
● asin(x)、acos(x)、atan(x)
○ 反三角函数
● sincos(x,out s,out c)
○ 返回x的正弦和余弦
● tan(y,x)
○ 返回y/x的正切
● atan2(y,x)
○ 返回y/x的反正切
● 双曲正余弦
○ sinh(x) 返回x的双曲正弦值 → ( e x − e − x ) / 2 (e^{x}-e^{-x})/2 exex/2
○ cosh(x) 返回x的双曲余弦值 → ( e x + e − x ) / 2 (e^{x}+e^{-x})/2 ex+ex/2
○ tanh(x) 返回x的双曲正弦值 → ( e x − e − x ) / ( e x + e − x ) (e^{x}-e^{-x})/(e^{x}+e^{-x}) exex/ex+ex

四、数据范围类

● 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之间插值,返回 x ∗ ( 1 − s ) + y ∗ s x*(1-s)+y*s x1s+ys
● smoothstep(min,max,x)
○ 如果x在[min,max]范围内,就返回介于[0,1]之间的平滑Hermite插值,使用smoothstep在两个值直接创建平滑过渡
○ 平滑地混合两种颜色

五、类型判断类

● 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为折射率的折射光
● lit(n_dot_l,n_dot_h,m)
○ 输入标量(normal,light,半角向量h,镜面反射系数m)
○ 返回光照向量(环境光,漫反射光,镜面高光反射,1)

八、纹理查找

1.一些注意的点:
纹理查找的分类
● 所有的纹理查找函数都可以分为三类:普通的、微分的、投影的

—1.1 偏导函数ddx ddy(微分类)
● 如果函数 ddx 的参数为 myVar,该参数对应的像素点记为p(i,j),则 ddx(myVar)的值为“像素点 p(i+1,j)的值减去myVar”(ddy同理)
● 如果函数 ddx 和 ddy 的输入参数为常数,则函数返回值永远为 0。
● 1.函数 ddx 和 ddy 用于求取相邻像素间某属性的差值;
● 2.函数 ddx 和 ddy 的输入参数通常是纹理坐标;
● 3.函数 ddx 和 ddy 返回相邻像素键的属性差值;偏导数的物理含义是:在某一个方向上的变化快慢。
○ 4 所以 ddx 求的是 X 方向上,相邻两个像素的某属性值的变化量
○ 5 ddy 求的是 Y方向上,相邻两个像素的某属性值的变化量
● 6 由于 ddx 和 ddy 指令是作用于像素级的,所以 ddx 和 ddy 函数只被片段程序所支持
● mipmap在选择到底用哪一层mipmap的level时,靠的就是偏导数。

1.2 投影类
● 投影纹理是指:将纹理当做一张幻灯片投影到场景中,使用投影纹理技术需要计算投影纹理坐标,然后使用投影纹理坐标进行查询。使用投影纹理坐
标进行查询的函数就是投影纹理查询函数。

1.3 Mipmap类
● lod 采样一张mipmap
● bias 偏置后再采样(由t,w决定)
● grad 使用微分来选择mip的层,进行采样

1D纹理查找(几乎不用)
● tex1D(s, t) 普通一维纹理查找 返回纹理采样器s在标量t位置的color4
● tex1D(s,t,ddx,ddy) 使用微分查询一维纹理, t和ddxy均为vector
● tex1Dlod(s, t) 使用LOD查找纹理s在t.w位置的color4
● tex1Dbias(s, t) 将t.w决定的某个MIP层偏置后的一维纹理查找
● tex1Dgrad(s,t,ddx,ddy) 使用微分并指定MIP层的一维纹理查找
● ex1Dproj(s, t) 把纹理当做一张幻灯片投影到场景中,先使用投影纹理技术需要计算出投影纹理坐标t(坐标t.w除以透视值),然后使用投影纹理坐标进行查询

2D纹理查找
● tex2D(s, t) 普通二维纹理查找 返回纹理采样器s在vector t位置的颜色
● tex2D(s,t,ddx,ddy) 使用微分查询二维纹理,t和ddxy均为vector
● tex2Dlod(s, t) 使用LOD查找纹理s在t.w位置的color4
● tex2Dbias(s, t) 将t.w决定的某个MIP层偏置后的二维纹理查找
● tex2Dgrad(s,t,ddx,ddy) 使用微分并指定MIP层的二维纹理查找
● tex2Dproj(s, t) 把纹理当做一张幻灯片投影到场景中,先使用投影纹理技术需要计算出投影纹理坐标t(坐标t.w除以透视值),然后使用投影纹理坐标进行查询

3D纹理查找
● tex3D(s, t) 普通三维纹理查找 返回纹理采样器s在vector t位置的颜色
● tex3D(s,t,ddx,ddy) 使用微分查询三维纹理, t和ddxy均为vector
● tex3Dlod(s, t) 使用LOD查找纹理s在t.w位置的color4
● tex3Dbias(s, t) 将t.w决定的某个MIP层偏置后的三维纹理查找
● tex3Dgrad(s,t,ddx,ddy) 使用微分并指定MIP层的三维纹理查找
● tex3Dproj(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) 使用投影方式的立方体纹理查找

2.ddx ddy的实际使用测试

● 上边说了,ddx 、ddy求的是 x、y方向上,相邻两个像素的某属性值的变化量
● 这也就是《GAMES101》中讲mipmap部分时说的,相邻像素(pixel)之间的距离(差值)对应到纹理(texel)中是多少距离。
● 随便找个了采样贴图的shader,左边为正常采样的结果,作为对照
● 右边部分,shader中声明一个修改差值的系数Range,并在片元着色器中添加ddx ddy的部分。

   fixed4 frag (v2f i) : SV_Target
            {
                // sample the texture
                fixed4 col = tex2D(_MainTex, i.uv);
                col += (ddx(col), ddy(col)) * _Float;
                // apply fog
                // UNITY_APPLY_FOG(i.fogCoord, col);
                return fixed4(col.rgb,1.0);
            }

请添加图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/619124.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ThreeJS教程:地图案例(包围盒、正投影)

推荐&#xff1a;将 NSDT场景编辑器 加入你的3D工具链 3D工具集&#xff1a; NSDT简石数字孪生 地图案例(包围盒、正投影) 地图案例(包围盒、正投影) 地图案例会涉及到几何体、包围盒、正投影相机三方面知识点。 平面填充几何体ShapeGeometry包围盒Box3正投影相机Orthograph…

MTK开发板-4G/5G联发科开发板相关方案定制

开发板是用于嵌入式系统开发的电路板&#xff0c;包括中央处理器、存储器、输入设备、输出设备、数据通路 / 总线和外部资源接口等一系列硬件组件。一般来说&#xff0c;开发板由嵌入式系统开发者根据开发需求自主定制&#xff0c;也可以由用户自己研究设计。开发板不仅是初学者…

进阶篇丨链路追踪(Tracing)很简单:链路成本指南

广义上的链路成本&#xff0c;既包含使用链路追踪产生的数据生成、采集、计算、存储、查询等额外资源开销&#xff0c;也包含链路系统接入、变更、维护、协作等人力运维成本。为了便于理解&#xff0c;本小节将聚焦在狭义上的链路追踪机器资源成本&#xff0c;人力成本将在下一…

十二、光照基础

第一部分概念 OpenGL ES的基础光照模型&#xff0c;目前opengl还无法模拟现实世界的复杂光照效果&#xff0c;但是为了效果上的逼真&#xff0c;还是引入了一些简单的模型来模拟光照效果&#xff0c; 这里介绍冯氏光照模型(Phong Lighting Model)模型&#xff0c;他是由三种元…

大数据:spark RDD编程,构建,RDD算子,map,flatmap,reduceByKey,mapValues,groupBy,

大数据&#xff1a;spark RDD编程 2022找工作是学历、能力和运气的超强结合体&#xff0c;遇到寒冬&#xff0c;大厂不招人&#xff0c;可能很多算法学生都得去找开发&#xff0c;测开 测开的话&#xff0c;你就得学数据库&#xff0c;sql&#xff0c;oracle&#xff0c;尤其s…

618有什么数码好物值得购买?2023值得入手的数码好物推荐

在618期间&#xff0c;有哪些值得入手的数码好物&#xff1f;很多人还不知道有哪些数码好物值得买的&#xff0c;本文推荐几款质量不错数码好物&#xff0c;助您尽情享受618购物买买买。 一、南卡OE不入耳蓝牙耳机 推荐理由&#xff1a; 南卡OE耳机是一款性价比超高的不入耳蓝…

进公司第一天当老板问:“测得怎么样了?”我懵逼了

当我入行做测试头两份年&#xff0c;觉的测试工作有时候似乎挺苦逼的&#xff0c;我太难了…… 前言 说实话&#xff0c;我真想从上面去掉"似乎"两个字&#xff0c;软件测试人&#xff0c;就是苦逼&#xff01;有的人曾抱怨过开发很糟糕&#xff0c;但我们没办法要求…

用AI生成思维导图的方法

写在前边&#xff1a; 这篇文章很简单&#xff0c;只为给自己做个记录。并且做一个简单的思考&#xff1a;明明很容易的东西&#xff0c;一旦陷入了思维困境中&#xff0c;就无法找到出去的路。这时候需要扩展思维或者他人提点。 正文&#xff1a; 就挺尴尬&#xff0c;之前…

计算机毕业论文内容参考|基于python的农业温室智能管理系统的设计与实现

文章目录 导文文章重点前言课题内容相关技术与方法介绍技术分析技术设计技术设计技术实现方面系统测试和优化总结与展望本文总结后续工作展望导文 计算机毕业论文内容参考|基于python的农业温室智能管理系统的设计与实现 文章重点 前言 本文介绍了一种基于Python的农业温室智…

玩过Tauri和Electron,最终我选择Flutter进行跨平台应用开发

Flutter、Tauri 和 Electron 都是现代桌面应用程序开发的流行选择&#xff0c;每种技术有其独特的优缺点&#xff0c;下面我们就来对它们进行一个全面的技术对比。 一、Flutter Flutter 是 Google 推出的一款开源的 UI 工具包&#xff0c;用于构建高性能、高保真度的移动、We…

2023年6月杭州/广州/深圳NPDP产品经理认证找这里

产品经理国际资格认证NPDP是新产品开发方面的认证&#xff0c;集理论、方法与实践为一体的全方位的知识体系&#xff0c;为公司组织层级进行规划、决策、执行提供良好的方法体系支撑。 【认证机构】 产品开发与管理协会&#xff08;PDMA&#xff09;成立于1979年&#xff0c;是…

从搜索电商,社交电商到兴趣电商如何进化

【搜索电商】需求>联结>信任 淘宝、天猫、京东这些是属于什么电商&#xff1f; 答&#xff1a;这些都是属于搜索电商。 某宝&#xff0c;某东等用户有需求&#xff0c;才能产生主动寻找商品的触点&#xff0c;由第三方担保&#xff0c;产生信任。 试想一下&#xff0c;我…

高逼格的 SQL 写法:行行比较

码农code之路 2023-06-01 08:28 发表于天津 环境准备 需求背景 循环查询 OR 拼接 混查过滤 行行比较 总结 环境准备 数据库版本&#xff1a;MySQL 5.7.20-log 建表 SQL DROP TABLE IF EXISTS t_ware_sale_statistics; CREATE TABLE t_ware_sale_statistics (id bigin…

面向过程 VS 面向对象

学习编程&#xff0c; 基本功是掌握编程语言&#xff0c;但编程的本质是逻辑&#xff0c;所以编程思维的培养也很重要。面向过程和面向对象是两种重要的编程思想&#xff0c;下面讲述一下这两者的区别和优缺点比较。 1. 面向过程 面向过程是一种以事件为中心的编程思想&#…

cmake编译报错

CMake Error &#xff1a;The source.. 此处大概意思是一个文件地址does not match the 另外一个文件地址so used to generate cache. Rerun cmake...解决方法&#xff1a; vscode 快捷键ctrl shift P &#xff0c;点击第一行的删除cmake 缓存 或者将 build 下的 CMakeCac…

算法百花齐放:探索常见算法的精妙之道

在计算机科学的领域中&#xff0c;算法是一项关键而令人着迷的技术。它们是解决问题、优化效率以及创造智能系统的核心。从简单的排序和搜索任务到复杂的机器学习和深度学习应用&#xff0c;常见算法为我们提供了解决各种挑战的有力工具。在本篇博客中&#xff0c;我们将探索常…

chatgpt赋能python:Python如何过滤某个字母——关于SEO的建议

Python如何过滤某个字母——关于SEO的建议 SEO&#xff08;搜索引擎优化&#xff09;是现代网络营销中的一个重要概念。为了让自己的网站在搜索引擎排名中更加靠前&#xff0c;许多管理员和开发人员都在使用Python等编程语言来过滤特定的字母或符号&#xff0c;以优化关键词的…

linux服务器更新yum源,安装 dnf包管理器

进入yum目录 cd /etc/yum.repos.dls 查看 备份 将“CentOS-Base.repo”重命名备份为“CentOS-Base.repo.backup” mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup下载yum源并查看 下载对应版本 repo 文件, 放入 /etc/yum.repos.d/ (操作前请…

MAC 安装配置Tomcat

一、安装Tomcat 1、首先到官网下载Tomcat&#xff1a;https://tomcat.apache.org/download-80.cgi 2、解压tomcat文件,可以通过快捷键(commandshiftG)把它放入/Library(资源库中) 二、用终端打开Tomcat 1.在Bin目录下 打开终端 2.授权bin目录下的所有操作&#xff1a;终端…

Gradle Kotlin 规范插件用于模块化结构 - 共享构建逻辑

Gradle Kotlin 规范插件用于模块化结构 - 共享构建逻辑 我们中的许多人都遇到过Groovy的困难&#xff0c;并习惯于将其转换为Kotlin DSL。 然后&#xff0c;作为Android工程师&#xff0c;在完全使用Kotlin编写的项目上工作是纯粹的喜悦。 我们假设采用基于功能的模块化应用程…