实时渲染学习(十一)渲染加速算法总结

参考博文:【《Real-Time Rendering 3rd》 提炼总结】(十二) 渲染管线优化方法论:从瓶颈定位到优化策略

前言

这是作者关于《Real-Time Rendering》这本书提炼的最后一章,主要讲渲染管线的优化。学习这个专栏已经有半个月的时间,通过作者中文版的提炼,让我能迅速了解实时渲染的核心知识,虽然理解的还不够深入。图形学是一个非常有趣的学科,要学好图形学也必然要付出很多努力,以后有时间我想我会看一看《Real-Time Rendering》这本书。
本专栏学习结束之后,我的计划是看一本计算机图形学的书,复习并深入学习图形学的基础知识,并基于C++动手实现一个小型的render,算是将理论与实践结合起来。

关于渲染管线的构成请看实时渲染学习(一)图形渲染管线概括与总结

一、渲染管线的优化

优化思路:先将渲染速度最大化,然后使得非瓶颈部分和瓶颈部分消耗同样多的时间(既然要等,不放多给速度快的部分分配更多工作以达到更好的画面效果)。

二、渲染管线的瓶颈定位策略

2.1 光栅化阶段的瓶颈定位

光栅化阶段由三角形设置、像素着色器程序和光栅操作组成。其中,三角形设置阶段一般不会是瓶颈。

像素着色器程序的测试方法是通过改变屏幕分辨率来测试,如果较低的屏幕分辨率导致帧速率明显上升,像素着色器则是瓶颈,至少在某些时候会是这样。

2.1.1 光栅化操作的瓶颈定位

光栅化操作的瓶颈主要与帧缓冲带宽相关,光栅化操作用于深度缓冲和模板缓冲的读写、深度缓冲和模板缓冲比较,读写颜色,以及进行alpha 混合和测试,而光栅化操作中许多负载都加重了帧缓冲带宽负载。
光栅化操作的测试方法是将颜色输出的位深度从32(或24)位减少到16位。如果帧速率大幅度增加,那么此阶段为瓶颈所在。

2.1.2 纹理带宽的瓶颈定位

在内存中出现纹理读取请求时,就会消耗纹理带宽。
测试方法是使用大量正等级mipamap细节层次(LOD)的偏差,让纹理获取访问非常粗糙的mipmap金字塔级别,来有效地减小纹理尺寸,如果此修改显著地改善性能,则意味着纹理带宽是瓶颈限制。

2.1.3 片元着色的瓶颈定位

测试方法是如果调整分辨率使得性能改变,片元着色就可能是瓶颈所在,辅助的鉴别方法可以是修改片元长度,看这样是否会影响性能。

2.2 几何阶段的瓶颈定位

在几何阶段有两个主要区域可能出现瓶颈:顶点与索引传输和顶点变换阶段。

2.2.1 顶点与索引传输的瓶颈定位

测试方法是通过调整顶点格式的大小,来确定得到顶点或索引传输是否是应用程序的瓶颈。

2.2.2 顶点变换的瓶颈定位

对于可编程的顶点变换,只要简单地改变顶点程序的长度,就能确定顶点处理是否是瓶颈。如果此时发生性能的变化,就可以判定顶点处理阶段是瓶颈所在。
对于固定功能的顶点变换,判定瓶颈则有点麻烦。试着通过改变顶点的工作,例如修改镜面光照或纹理坐标生成的状态来修改负载。

2.3 应用程序阶段的瓶颈定位

  • 用Profiler工具查看CPU的占用情况;
  • 发送一些其他阶段工作量极小甚至根本不工作的数据;
  • CPU 进行降频。

三、渲染管线的优化策略

  • 对CPU的优化策略:减少资源锁定、批次的尺寸最大化
  • 应用程序阶段的优化策略
  • API调用的优化策略(使用某种形式的实例、批处理、用不同颜色合并对象)
  • 几何阶段的优化策略(减少顶点传输开销、顶点处理优化)
  • 光照计算的优化策略(控制光源数量、根据光源距离进行剔除、延迟着色、禁用光源使用环境贴图)
  • 光栅化阶段的优化策略(善用背面裁剪、合理的纹理压缩、在特定时期关闭Z缓冲、加速片元着色、减少纹理带宽、优化帧缓冲带宽)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值