一、基本数学运算

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) 噪声函数

数学公式输入可视化:Graphtoy

  • 将uv的坐标作为x传入,随机的返回一个[0,1]的值,就会得到一张噪声图

二、幂指对函数

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

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的反正切

双曲正余弦

四、数据范围类

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

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

frac(x) 取x的小数部分

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

lerp(x,y,s)按照s在x到y之间插值,返回x * 1(1 - s) + y * s

smoothstep(min,max,x) 如果x在[min,max]范围内,就返回介于[0,1]之间的平滑Hermite插值,使用smoothstep在两个值直接创建平滑过渡

  • eg,平滑地混合两种颜色

五、类型判断类

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

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

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

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) 叉积

  • 具体点积叉积应用可参考GAME101线代部分笔记、TA百人计划1.21的作业

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)

  • 为BlingPhong光照模型(看到这部分了这个应该清楚,参考GAMES101着色部分)

faceforward(n,i,ng) 得到面向视图方向的曲面法向量输入输出为同元向量,返回-n*sign(dot(i,ng))(normal,light,normal)

八、纹理查找

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层的一维纹理查找

tex1Dproj(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) 使用投影方式的立方体纹理查找。

写出你觉得最常用的5个函数

pow(x,y) x的y次幂

mul函数 用于矩阵的相乘

dot函数 点积

normalize(v) 向量归一化

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

ddx ddy的实际使用测试

相关资料

微积分本质

【官方双语】微积分的本质 - 01 -_哔哩哔哩_bilibili

微积分的本质 - 02 - 导数的悖论

【官方双语】微积分的本质 - 02 - 导数的悖论_哔哩哔哩_bilibili

理解偏导数、梯度、方向导数

理解偏导数、梯度、方向导数_小白一直白-CSDN博客_梯度和偏导数的关系

ddx, ddy 这两条指令用于对指定的寄存器,求其值在临近像素上的变化率,因为纹理坐标的梯度可以用来确定纹理当前被缩放的程度,可用该值来计算Mip层,另外它也可以用来计算Texel的跨越Size,由此求得正确的过滤宽度,从而纠正通常的线性过滤在远处由于过滤宽度错误而产生的失真。

偏导函数(Derivative Functions)

(GPU 编程与 CG 语言之阳春白雪下里巴人)

偏导函数的用法很容易让人困惑,因为找不到非常信息的解释说明,当我查

找这两个函数的中文资料时,给出的解释通常都是“ddx:返回关于屏幕坐标 x 轴

的偏导数;ddy:返回关于屏幕坐标 y 轴的偏导数”。这个简单且单纯的解释完全

可以让人陷入长时间的迷惑中,并进而怀疑自己的智商。于是我查找Cg Refernece

Manual 中关于 ddx 函数的定义(ddy 函数的定义与之类似),原文是“returns

approximate partial derivative with respect to window-space X”。看来是典型的上梁

不正下梁歪。学习一个函数,最重要的是明白其输入\输出参数的意义,以及有

何作用。下面我们带着问题来学习这两个函数:

  1. 函数 ddx 和 ddy 是做什么用的,即对输入参数进行了哪些处理?

  2. 函数 ddx 和 ddy 的输入参数的意义?是纹理坐标,还是颜色值?

  3. 函数 ddx 和 ddy 输出量表达了何种含义?

下面这段话引自某个论坛上的技术讨论贴,作者不详:

上面这句话的意思是,如果函数 ddx 的参数为 myVar,该参数对应的像素点记为p(i,j),则 ddx(myVar)的值为“像素点 p(i+1,j)的值减去 myVar”。同理,ddy(myVar)的值为“像素点 p(i,j+1)的值减去 myVar”。如果函数 ddx 和 ddy 的输入参数为常数,则函数返回值永远为 0。

这里面存在像素点所对应数据的类型问题。从前面的知识可知,传入片段程序的顶点属性一般有:屏幕坐标空间的顶点齐次坐标、纹理坐标、法向量、光照颜色等。假设传递给 ddx\ddy 函数的参数 myVar 是纹理坐标,则,ddx(myVar)的值为,纹理上像素点的纹理颜色值减去 myVar 对应的纹理颜色值。

现在我们可以回答上面的三个问题:

  1. 函数 ddx 和 ddy 用于求取相邻像素间某属性的差值;

  2. 函数 ddx 和 ddy 的输入参数通常是纹理坐标;

  3. 函数 ddx 和 ddy 返回相邻像素键的属性差值;

现代的 GPU 中提供了计算 partial derivative 的指令(通常被称为梯度指令或者偏导数指令,DDX 或 DDY),Cg 中所对应的函数为 ddx()和ddy()(注:glsl 和 hlsl 中也有该函数)。按照屏幕相关空间 x 或 y 计算偏导数,对纹理滤镜以及抗锯齿等非常有用(注:也可以用于 TXD 纹理查找的参数计算)。学过高等数学应该知道,偏导数的物理含义是:在某一个方向上的变化快慢。所以 ddx 求的是 X 方向上,相邻两个像素的某属性值的变化量;ddy 球的是 Y方向上,相邻两个像素的某属性值的变化量。正是由于 ddx 和 ddy 指令是作用于像素级的,所以 ddx 和 ddy 函数只被片段程序所支持。当在纹理查询函数中使用 ddx 和 ddy 是可以进行图形过滤。所谓图像过滤,一个比较简单的定义是:对于给定的输入图像 A,要创建新的图像 B,把源图像A 变换到目标图像 B 的操作就是图像滤波。最一般的变换是调整图像大小、锐化、变化颜色,以及模糊图像等。复杂的过滤有赖于知道究竟需要过滤多少纹理。像 GeForce 那样的现代 GPU 提供的偏导函数可以帮助我们。

C for Graphic:ddx/ddy

C for Graphic:ddx/ddy_羊羊的博客-CSDN博客

ddx函数是右边的像素值-左边的像素值,ddy函数是上面的像素值-下面的像素值(那么片段以2x2为单位栅格化就好理解了,毕竟按照ddx/ddy算法的前置条件就需要横纵像素长度大于2)。结合图像就是ddx(p0UV) = p1RGBA-p0RGBA,ddy(p0UV) = p2RGBA-p0RGBA。但是我们前面看到的ddx/ddx函数的入参和出参分量是一致的(输入uv返回float2,输入color返回float4),所以ddx(p0RGBA)=p1RGBA-p0RGBA,ddy(p0RGBA)=p2RGBA-p0RGBA才对

GAMES101-现代计算机图形学入门-闫令琪

GAMES101-现代计算机图形学入门-闫令琪_哔哩哔哩_bilibili

代码测试

cg shader

边缘查找(输出变化率)

Shader "VS/TestDDXYShader"
{Properties{_MainTex ("Texture", 2D) = "white" {}_Range("ddxpow",Range(0,100)) = 0.2}SubShader{Tags { "RenderType"="Opaque" }LOD 100Pass{CGPROGRAM#pragma vertex vert#pragma fragment frag#include "UnityCG.cginc"struct appdata{float4 vertex : POSITION;float2 uv : TEXCOORD0;};struct v2f{float2 uv : TEXCOORD0;float4 vertex : SV_POSITION;};sampler2D _MainTex;float4 _MainTex_ST;float  _Range;v2f vert (appdata v){v2f o;o.vertex = UnityObjectToClipPos(v.vertex);o.uv = TRANSFORM_TEX(v.uv, _MainTex);return o;}fixed4 frag (v2f i) : SV_Target{fixed4 col = tex2D(_MainTex, i.uv);col = ddx(col) + ddy(col) * _Range;return col;}ENDCG}}
}

边缘锐化(输出变化率加颜色)

只改了一个加号

图形 2.3 HLSL常用函数介绍相关推荐

  1. HLSL常用函数介绍

    基本数学运算 max(a,b)返回较大的那个 min(a,b)返回较小的那个 mul(a,b)两变量相乘,常用于矩阵运算 abs(a)返回a的绝对值 round(x)返回与x最近的整数 sqrt(x) ...

  2. 【技术美术图形部分】2.3 HLSL常用函数

    --介绍HLSL常用函数,API的使用. 想要成为合格的技术美术,一定要具备Shader开发能力,满足性能的需求,无论是技术美术的哪一个方向,HLSL都是需要点满的技能点. 参考 微软官方HLSL库: ...

  3. TF:tensorflow框架中常用函数介绍—tf.Variable()和tf.get_variable()用法及其区别

    TF:tensorflow框架中常用函数介绍-tf.Variable()和tf.get_variable()用法及其区别 目录 tensorflow框架 tensorflow.Variable()函数 ...

  4. php spl函数,PHP SPL标准库中的常用函数介绍

    这篇文章主要介绍了PHP SPL标准库中的常用函数介绍,本文着重讲解了spl_autoload_extensions().spl_autoload_register().spl_autoload()三 ...

  5. R语言使用psych包进行主成分分析PCA和探索性因子分析EFA的常用函数介绍:principal、fa、fa.parallel、factor.plot、fa.diagram、scree

    R语言使用psych包进行主成分分析PCA和探索性因子分析EFA的常用函数介绍:principal.fa.fa.parallel.factor.plot.fa.diagram.scree 目录

  6. oracle常用函数number,Oracle 常用函数介绍

    Oracle常用函数介绍,包括日期函数.类型转换函数 常用日期函数 1.add_months()函数可以得到指定日期之前或之后n个月的日期 date_value:=add_months(date_va ...

  7. Pandas入门之常用函数介绍

    一.Pandas简介 pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的. Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具. pan ...

  8. (转)postgis常用函数介绍(一)

    http://blog.csdn.net/gisshixisheng/article/details/47701237 概述: 在进行地理信息系统开发的过程中,常用的空间数据库有esri的sde,po ...

  9. mysql ceil,MySQL常用函数介绍

    前言: MySQL数据库中提供了很丰富的函数,比如我们常用的聚合函数,日期及字符串处理函数等.SELECT语句及其条件表达式都可以使用这些函数,函数可以帮助用户更加方便的处理表中的数据,使MySQL数 ...

最新文章

  1. c语言平年表示方法,C语言平年闰年问题
  2. c++异常处理的基本思想
  3. 【渝粤题库】国家开放大学2021春1425调剂学(本)题目
  4. 项目管理中的特殊———例外管理
  5. fullpage常用配置
  6. 《计算机网络》学习笔记 ·002【物理层】
  7. 节选转载:你敢向代码库中添加Boost你就等着被开除吧
  8. hdu 1072 Nightmare BFS搜索(可重走)
  9. 翱翔云天的SAP技术课程体系
  10. gis 数据框裁剪_【更新80篇】地理数据科学技术文章合集,欢迎大家点赞、在看、转发三连!...
  11. Eclipse官方下载步骤
  12. 文章的DOI号是神马
  13. Vue2.0源码解析 - 知其然知其所以然之Vue.use
  14. 详解项目管理中任务、成本、产品三者的关系
  15. [Scrapy使用技巧] 如何在scrapy中捕获并处理各种异常
  16. 无法更改edge浏览器启动页(主页)\新标签页
  17. GitBook建立本地Book及导入别人Book
  18. 笔记 | Java 虚拟机
  19. Bugku 杂项 中国菜刀
  20. 硬盘坏道早知道,原来NAS还有这些工具可以预知硬盘状态

热门文章

  1. delphi Inc函数和Dec函数的用法
  2. 快递驿站APP开发重点功能介绍
  3. OTB100数据集序列分类
  4. 浅谈数字化管道建设[胜利油田集输信息中心 常贵宁]
  5. 数字孪生石油管理平台的能力介绍
  6. 关于开源授权协议 GPL 和 LGPL
  7. Linux怎么检测nat类型,STUN(RFC3489)的NAT类型检测方法
  8. 微波射频网在世界电信日 成功召开4G手机射频技术研讨会
  9. 线上马太效应加剧,线下会是“二次元服饰们”的新出路吗?
  10. 自主开发项目说明(新锐售楼管理系统)