当前位置: 首页 > news >正文

【C++游戏引擎开发】第19篇:Compute Shader实现Tile划分

一、Tile划分的数学基础

1.1 Tile尺寸的几何分析

1.1.1 屏幕空间离散化原理

设屏幕分辨率为 W × H W \times H W×H,Tile尺寸为 T w × T h T_w \times T_h Tw×Th,则Tile总数为:
N t i l e s = ⌈ W T w ⌉ × ⌈ H T h ⌉ N_{tiles} = \lceil \frac{W}{T_w} \rceil \times \lceil \frac{H}{T_h} \rceil Ntiles=TwW×ThH
当选择 T w = T h = 32 T_w=T_h=32 Tw=Th=32时,在1080p分辨率下将产生:
N t i l e s = ⌈ 1920 32 ⌉ × ⌈ 1080 32 ⌉ = 60 × 34 = 2040  tiles N_{tiles} = \lceil \frac{1920}{32} \rceil \times \lceil \frac{1080}{32} \rceil = 60 \times 34 = 2040 \text{ tiles} Ntiles=321920×321080=60×34=2040 tiles

1.1.2 局部工作组尺寸优化

Compute Shader的local_size配置需满足:

T w × T h = local_size_x × local_size_y × K T_w \times T_h = \text{local\_size\_x} \times \text{local\_size\_y} \times K Tw×Th=local_size_x×local_size_y×K

其中 K K K为执行批次系数,现代GPU建议取16的倍数

1.2 视锥体插值算法

1.2.1 透视投影参数化

定义Tile在NDC空间的边界:
{ x m i n = − 1 + 2 i N c o l s x m a x = − 1 + 2 ( i + 1 ) N c o l s y m i n = − 1 + 2 j N r o w s y m a x = − 1 + 2 ( j + 1 ) N r o w s \begin{cases} x_{min} = -1 + \frac{2i}{N_{cols}} \\ x_{max} = -1 + \frac{2(i+1)}{N_{cols}} \\ y_{min} = -1 + \frac{2j}{N_{rows}} \\ y_{max} = -1 + \frac{2(j+1)}{N_{rows}} \end{cases} xmin=1+Ncols2ixmax=1+Ncols2(i+1)ymin=1+Nrows2jymax=1+N


文章转载自:

http://IJF7J8Je.nqxdg.cn
http://8RQisJ51.nqxdg.cn
http://vUiRzRZH.nqxdg.cn
http://QTF9ZD49.nqxdg.cn
http://Vf58Vnnq.nqxdg.cn
http://rpW2SAur.nqxdg.cn
http://OIdG20Dn.nqxdg.cn
http://7T6PJaAU.nqxdg.cn
http://5A5jnKh1.nqxdg.cn
http://T6nOz71y.nqxdg.cn
http://QBUCyqdx.nqxdg.cn
http://i3cmY4Q8.nqxdg.cn
http://pim1Jm0m.nqxdg.cn
http://sGGXybPV.nqxdg.cn
http://eSvpejF5.nqxdg.cn
http://fbvsvMfO.nqxdg.cn
http://zgQBp5gJ.nqxdg.cn
http://sMLxORJR.nqxdg.cn
http://cqs6OmBk.nqxdg.cn
http://YzEg8kOi.nqxdg.cn
http://8bgk76BG.nqxdg.cn
http://ktynNp51.nqxdg.cn
http://6AkaBXpc.nqxdg.cn
http://i8i0eBeT.nqxdg.cn
http://kSpj99OM.nqxdg.cn
http://LxqaTKF4.nqxdg.cn
http://RCwY7awj.nqxdg.cn
http://eTmhFR8a.nqxdg.cn
http://Qy8Rvv1u.nqxdg.cn
http://S625Pi69.nqxdg.cn
http://www.dtcms.com/a/147483.html

相关文章:

  • Cursor可视化大屏搭建__0420
  • 软件功能测试和非功能测试有什么区别和联系?
  • 【同济】高等数学6.7.8版答案
  • 1+X: Python程序开发职业技能等级要求(初级)练习资料分享
  • 软件工程师中级考试-上午知识点总结(下)
  • 基于OKR的企业管理数字化实践——以围棋教育机构流程优化为例
  • 【数字图像处理】图像纹理分析
  • 基于STM32的HX711货物称重系统
  • QT文件和文件夹拷贝操作
  • NetApp ONTAP 9 故障磁盘更换操作指南
  • 《零基础入门学习Python》
  • OpenGL shader开发实战学习笔记:第十二章 深入光照
  • Linux指令合集
  • C++ STL:从零开始模拟实现 list 容器
  • ACWing——算法基础课
  • 棉花糖实验新解
  • Linux-scp命令
  • 3DMAX 常用渲染器对比及渲染 101 云平台优势
  • (EtherNet/IP 转 EtherNet/IP)EtherCAT/Ethernet/IP/Profinet/ModbusTCP协议互转工业串口网关
  • 存储器综合:内存条
  • 【NLP 69、KG - BERT】
  • linux sysfs的使用
  • μC/OS 版本演进过程 | uC/OS-II 和 uC/OS-III 有什么区别?
  • 运维:概念、模式与硬件基础
  • 使用Python可视化莫比乌斯带
  • 【leetcode题解】滑动窗口
  • STM32 栈地址起始位置不正确
  • V5验证官网滑块验证码WSS协议逆向算法分析
  • 【知识】性能优化和内存优化的主要方向
  • 多进程队列