UE5 HLSL 学习笔记

half的取值范围是整形的-60000 到 60000,考虑带宽的情况下使用half

vector默认为float4

访问可以.xyzw,也可以.rgba,也可以[index],且顺序可以变,比如说.yzwx

矩阵的获取值的方式

第一个行代表获取第1行第0号元素

第二行代表获取第二行第三个元素

第三行代表获取第一行第二个元素

第四行代表获取第二行第二个元素和第二行第三个元素共同组成float2

第一行代表声明了一个2行3列的浮点数矩阵

第二行代表声明了一个3行3列的浮点数矩阵

第三行代表声明了一个4行4列的浮点数矩阵

这个代表一个4行4列的矩阵

加了static就可以不用给他外部输入赋值了

声明数组,声明十个vector类型的数组,声明10个float4类型的数组

C++的结构体可以直接在结构体里面float A = 4.3;这样初始化,但是HLSL不行

HLSL的强转:

一维变多维,将把一维的值复制到xyzw上

多维变一维,将把多维的x值给到一维

如果是浮点矩阵转整形,他会向下取整,10.8变成10

HLSL支持隐式转换

all的意思是bool数组里面所有变量都为true,返回值才为true,有一个为false都为false

any的意思是bool数组里面有一个为true,返回值就为true

clip里面的值如果小于0,则丢弃

discard丢弃像素,以上的含义为,假如cccccc值为1,则像素被丢弃

什么时候用【branch】什么时候用【flatten】?

branch:当分支内部内容比较简单的时候用

flatten:当分支内部内容比较复杂的使用

branch和flatten的区别:

branch如何runtime下,执行了if中的某个条件,执行完毕后会执行跳转指令,跳转指令会消耗性能,而flatten就是全部if else内部内容都编译好,当然编译好就会消耗一定的内存,但是不会执行跳转指令的消耗,这个使用取舍具体看项目

什么时候用【loop】?

当循环遍历的次数不确定的时候

比如说:

复制代码
[loop]
for(int i = 0; i < LoopTimes; i++)
{

}

这种LoopTimes需要传进来才知道的,就最好加一个【loop】,可以减少性能开销

什么时候用【unroll】?

当遍历的次数是已知的

比如说:

复制代码
[unroll]
for(int i = 0; i < 100; i++)
{

}

这时候可知循环体为100次

unroll就和[flatten]有点像,它会提前把循环体内的代码提前编译好,然后线性让它执行,因为提前编译过,执行的速度会更快,但是带来的是消耗更多的内存

countbits是计算一个数里面转成二进制过后,里面有几个1

cross叉乘的意思

ddx和ddy分别可以检测图像的x向的梯度和y向的梯度

ddx,左右两边颜色插值越大,返回值就越大

ddy,上下两边颜色插值越大,返回值就越大

通常可以做边缘检测算法

相关推荐
小裕哥略帅10 分钟前
PMP知识--五大过程组
笔记·学习
Aliex_git18 分钟前
提示词工程学习笔记
人工智能·笔记·学习
FAFU_kyp26 分钟前
Rust 流程控制学习教程
学习·算法·rust
0和1的舞者33 分钟前
力扣hot100-链表专题-刷题笔记(二)
笔记·算法·leetcode·链表·职场和发展
刘孬孬沉迷学习37 分钟前
【5G&6G NTN】卫星通信学习系列1
学习·5g·卫星通信·ntn·移动通信·卫星·星地通信
航Hang*41 分钟前
Photoshop 图形与图像处理技术——第9章:实践训练6——滤镜特效
图像处理·笔记·学习·ui·photoshop
renhongxia11 小时前
大型语言模型性能预测器:学习何时在混合人机-人工智能管理系统中升级
人工智能·深度学习·学习·机器学习·语言模型·自然语言处理
知识分享小能手1 小时前
Oracle 19c入门学习教程,从入门到精通,SQL*Plus命令详解:语法、使用方法与综合案例 -知识点详解(4)
sql·学习·oracle
燃犀知不可乎骤得1 小时前
MFC学习记录
c++·学习·mfc
星火开发设计1 小时前
C++ 运算符全解析:算术、关系、逻辑与位运算
java·开发语言·c++·学习·位运算·知识·操作符