首页 > 其他分享 >2.3 HLSL常用函数

2.3 HLSL常用函数

时间:2023-07-29 20:06:51浏览次数:43  
标签:返回 ddy HLSL 投影 纹理 查找 2.3 col 函数

1.基本数学运算

函数

含义

示例图

min(a,b)

返回a、b中较小的数值

mul(a,b)

两数相乘用于矩阵计算

max(a,b)

返回a、b中较大的数值


2.3 HLSL常用函数_二维

abs(a)

返回a的绝对值

round(x)

返回与x最近的整数


2.3 HLSL常用函数_二维_02

sqrt(x)

返回x的平方根

rsqrt(x)

返回x平方根的倒数

degregee(x)

转换成弧度

redians(x)

将角度转为弧度制

noise(x)

噪声函数

2.幂指对与偏导数

函数

含义

示例图

pow(x,y)

x的y次幂,xy


2.3 HLSL常用函数_人工智能_03

ldexp(x,exp)

返回x与2的exp次方的乘积,x*2exp

exp(x)

返回以e为底的指数函数,ex

exp2(x)

返回以2为底的指数函数,2x

log(x)

返回x以e为底的对数,lnx

log10(x)

求以10为底的对数,log10x

log2(x)

求以2为底的对数,log2x

frexp(x,out exp)

把一个浮点数分解为尾数和指数,

x : 要分解的浮点数据

返回值: 返回尾数

x = 尾数*2指数

(如果x参数为0,则此函数的尾数和指数均返回0)

3.三角函数与双曲线函数

函数

含义

示例图

sin(x)

返回x的正弦值


cos(x)

返回x的余弦值

tan(x)

返回x的正切值

tan(y,x)

返回y/x的正切值

sincos(x, out s, out c)

返回x的正弦和余弦值

asin(x)

返回x的反正弦值


2.3 HLSL常用函数_人工智能_04

acos(x)

返回x的反余弦值

atan(x)

返回x的反正切值

atan2(y,x)

返回y/x的反正切值

sinh(x)

返回x的双曲正弦值,0.5*(ex-e-x)


2.3 HLSL常用函数_人工智能_05

cosh(x)

返回x的双曲余弦值

0.5*(ex-e-x)

tanh(x)

返回x的双曲正切值

4.数据范围

函数

含义

示例图

ceil(x)

返回>=x的最小整数


2.3 HLSL常用函数_人工智能_06

step(x,y)

x<=y为1,否则为0

floor(x)

返回小于或等于x的最大整数

saturate(x)

返回将x限制在0和1之间的值

clamp(x,min,max)

把x限制在[min,max]范围内,小于返回min,大于返回max

frac(x)

返回x的小数部分

fmord(a,b)

返回a/b的浮点部分

modf(x,out ip)

将值x分为小数和整数部分(各部分符号与x相同),ip返回整数部分,整体返回小数部分

lerp(a,b,s)

按照s在a到b之间差值


2.3 HLSL常用函数_3D_07

smoothstep(min,max,x)

如果x在[min,max]范围内,则返回介于0~1之间的平滑Hermite差值;使用smoothstep HLSL内在函数在两个值之间创建平滑过渡。例如,使用此功能平滑的混合两种颜色

5.类型判断类

函数

含义

all(x)

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

clip(x)

如果输入值小于0,则丢弃当前像素,常用语判定范围(不仅仅针对0,返回值为void),常用于测试alpha,如果每个分量代表到平面的距离,还可以用来模拟剪切平面

sign(x)

返回x的正负性,如果x小于0返回-1,如果x等于0返回0,如果x大于0返回1

isinf(x)

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

isfinite(x)

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

isnan(x)

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

6.向量与矩阵类

函数

含义

length(v)

返回向量的长度

normalize(v)

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

distance(a,b)

返回两个向量之间的距离,按理说应该为0,此处表示为根号下各分量之差的平方和

dot(a,b)

返回a和b这两个向量的标积/内积/数量积/点积(a在b上的投影长,a·b=|a||b|·cosθ)

cross(a,b)

返回a和b这两个向量的矢积/外积/向量积/叉积(返回值是个向量,而且与a、b都垂直,大小上|a×b| = |a| * |b| * sinθ)

determinant(m)

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

transpose(m)

返回矩阵m的转置矩阵

7.光线运算类

函数

含义

示例图

reflect(i, n)

返回以i为入射向量n为法线方向的反射光


2.3 HLSL常用函数_算法_08


2.3 HLSL常用函数_二维_09


2.3 HLSL常用函数_二维_10

refract(i, n, ri)

返回以i为入射向量n为返现方向,ri为折射率的折射光

lit(n_dot_l, n_dot_h, m)

输入标量(normal,light,半角向量h,镜面反射系数m),返回光照向量(环境光,漫反射光,镜面高光反射,1)

faceforward(n, i, ng)

得到面向视图方向的曲面法向量,输入输出为同源向量,返回

-n*sign(dot(i,ng))(normal,light,normal)

8.1D纹理查找(几乎不会使用)

GPU在PS阶段是在屏幕空间XY坐标系中对每一个像素去对应的文立中查找对应的纹素确定像素的颜色。

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

函数

含义

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除以透视值),然后使用投影纹理坐标进行查询


2.3 HLSL常用函数_3D_11

2.3 HLSL常用函数_java_12

2.3 HLSL常用函数_二维_13

2.3 HLSL常用函数_java_14

9.2D纹理查找

函数

含义

示例图

tex2D(s,t)

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

tex2D(s,t,ddx,ddy)

使用微分查询二维纹理 t和ddxy均为vector

tex2Dlod(s,t)

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


2.3 HLSL常用函数_3D_15

tex2Dbias(s,t)

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


2.3 HLSL常用函数_人工智能_16

tex2Dgrad(s,t,ddx,ddy)

使用微分并指定MIP层的二维纹理查找


2.3 HLSL常用函数_3D_17


2.3 HLSL常用函数_3D_18

tex2Dproj(s,t)

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

10.3D纹理查找

函数

含义

示例图

tex3D(s,t)

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


2.3 HLSL常用函数_算法_19


2.3 HLSL常用函数_人工智能_20

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除以透视值),然后使用投影纹理坐标进行查询

11.立体纹理查找

函数

含义

示例图

texCUBE(s,t)

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


2.3 HLSL常用函数_人工智能_21


2.3 HLSL常用函数_人工智能_22

texCUBE(s,t,ddx,ddy)

使用微分查询一维纹理t和ddxy均为vector

texCUBElod(s,t)

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

texCUBEbias(s,t)

将t.w决定的某个MIP层偏置后的一维纹理查找

texCUBEgrad(s,t,ddx,ddy)

使用微分并制定MIP层的一维纹理查找

texCUBEproj(s,t)

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


tex2Dbias

3D:

Introduction To Textures in Direct3D 11 - Win32 apps | Microsoft Learn

Texture Coordinates (Direct3D 9) - Win32 apps | Microsoft Learn

3D Textures

立体纹理查找:

Cubic Environment Mapping (Direct3D 9) - Win32 apps | Microsoft Learn

作业:

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

  1. tex2D(s,t)
  2. normalize(x)
  3. saturate(x)
  4. dot(x,y)
  5. lerp(x,y,t)

ddx、ddy的实际使用测试

1.锐化图像

fixed4 frag (v2f i) : SV_Target
 {
   fixed4 col = tex2D(_MainTex, i.uv);
   col += ddx(col * _DDXIntensity)+ ddy(col * _DDYIntensity);
   return fixed4(col.rgb,1.0);
 }

右图为锐化intensity=1时

2.3 HLSL常用函数_算法_23

最后输出ddx(col * _DDXIntensity)+ ddy(col * _DDYIntensity)则可以看到锐化范围。

2.3 HLSL常用函数_人工智能_24

2.求面法线

struct appdata
{
  float4 vertex : POSITION;
  float2 uv : TEXCOORD0;
  float3 normal : TEXCOORD3;
};

struct v2f
{
  float2 uv : TEXCOORD0;
  UNITY_FOG_COORDS(1)
  float4 vertex : SV_POSITION;
  float3 pos : TEXCOORD1;
  float3 worldPos : TEXCOORD2;
  float3 worldNormal : TEXCOORD3;
};

sampler2D _MainTex;
float4 _MainTex_ST;
float _Intensity;
float _DDXIntensity;
float _DDYIntensity;

v2f vert (appdata v)
{
  v2f o;
  o.uv = TRANSFORM_TEX(v.uv, _MainTex);
  o.vertex = UnityObjectToClipPos(v.vertex);
  o.worldPos = mul(unity_ObjectToWorld,v.vertex).xyz;
  o.worldNormal = mul(v.vertex,(float3x3)unity_WorldToObject).xyz;
  return o;
}

fixed4 frag (v2f i) : SV_Target
{
  fixed3 col = tex2D(_MainTex, i.uv);
  //锐化
  //col += ddx(col * _DDXIntensity)+ ddy(col * _DDYIntensity);
  //求面法线
  col = normalize(cross(ddy(i.worldPos),ddx(i.worldPos))); 
  return fixed4(col,1.0);
}

2.3 HLSL常用函数_java_25

标签:返回,ddy,HLSL,投影,纹理,查找,2.3,col,函数
From: https://blog.51cto.com/u_136836/6894998

相关文章

  • HuggingFace | HuggingFace中from_pretrained函数的加载
    我们使用huggingface的from_pretrained()函数加载模型和tokenizer,那么加载这些需要什么文件?加载模型测试代码:如果加载成功,就打印1。fromtransformersimportAutoModelForMaskedLMmodel=AutoModelForMaskedLM.from_pretrained("./bert-base-chinese")print(1)文件目......
  • 无涯教程-jQuery - Accordion组件函数
    小部件手风琴功能可与JqueryUI中的小部件一起使用。手风琴与Tabs相同,当用户单击标题以展开分成逻辑部分的内容时,Accordion与Tabs相同。Accordion-语法这是使用手风琴的简单语法-$(function(){$("#accordion").accordion();});Accordion-示例以下是显示手风琴用......
  • 【d2l】【常见函数】【19】 torch.squeeze( ), torch.unsqueeze( )
    torch.squeeze()压缩大小为1的维度参考:https://pytorch.org/docs/stable/generated/torch.squeeze.htmltorch.unsqueeze()在指定的维度处增加一个维度,大小为1参考:https://pytorch.org/docs/stable/generated/torch.unsqueeze.html......
  • 【MySQL技术专题】「实战开发系列」一同探索一下数据库的加解密函数开发实战指南之AES
    MySQL的加解密及压缩函数许多加密和压缩函数返回结果可能包含任意字节值的字符串。如果要存储这些结果,请使用具有VARBINARY或BLOB二进制字符串数据类型的列。这避免了删除尾随空格或转换字符集可能改变数据值的潜在问题,例如使用非二进制字符串数据类型(CHAR、VARCHAR、TEXT)时可能发......
  • 无涯教程-jQuery - Sortable排序函数
    能够排序功能可与JqueryUI中的交互配合使用。此功能可在任何DOM元素上启用可排序功能。单击并将其拖动到列表中的新位置,其他项将调整以适合。默认情况下,可排序项目共享可拖动属性。Sortable-语法$(function(){$("#sortable").sortable();$("#sortable").disabl......
  • Hive12---日期时间函数的操作
    Intro    时间函数的一些操作,记录之。备查当前时间frompyspark.sqlimportSparkSessionfrompyspark.sqlimportfunctionsasFfrompyspark.sql.typesimportDoubleType,IntegerType,StringTypedefget_or_create(app_name):spark=(SparkSession.buil......
  • mysql之find_in_Set函数
    1.语法#查询出在list中包含column2的所有行。此处list可以是字段或常量selectcolumn1fromtable_namewhereFIND_IN_SET(column2,list)2.与in的区别in后面只能跟常量,find_in_set()函数可以使用常量或字段。in是完全匹配,find_in_set()函数是精确匹配,字段值以英文”,”分隔。3.举......
  • 无涯教程-jQuery - Resizeable调整大小函数
    能够调整大小功能可与JqueryUI中的交互配合使用。可以在任何DOM元素上启用"调整大小功能"功能。使用光标抓住右边框或底边框并拖动到所需的宽度或高度。Resizeable-语法$("#resizable").resizable();Resizeable-示例以下是显示可调整大小的用法的简单示例-<!doctype......
  • 生成函数
    生成函数生成函数是一种将一个序列映射成一个多项式的方式,具体而言,对于无限/有限序列\(a_1,a_2,\dots,a_n,\dots\),记\(g(x)=a_1+a_2x+a_3x^2+\dots+a_nx^n+\dots\),则\(g(x)\)为原序列的生成函数。生成函数可以用于解决一些计数问题,它可以利用乘法原理。例如有\(1g,2g,4g\)......
  • 无涯教程-jQuery - Dropable移动函数
    Drop-able功能可与JqueryUI中的交互一起使用。此功能可在任何DOM元素上启用可放置功能。Dropable-语法$("#droppable").droppable();Dropable-示例以下是一个简单的示例,显示了drop-able的用法-<html><head><title>ThejQueryExample</title><s......