参考博文:【《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缓冲、加速片元着色、减少纹理带宽、优化帧缓冲带宽)

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

  1. Android OpenGL ES 学习(十一) –渲染YUV视频以及视频抖音特效

    OpenGL 学习教程 Android OpenGL ES 学习(一) – 基本概念 Android OpenGL ES 学习(二) – 图形渲染管线和GLSL Android OpenGL ES 学 ...

  2. 实时深度学习的推理加速

    还未完成的...... 作者 Yanchen 毕业于普林斯顿大学机器学习方向,现就职于微软Redmond总部,从事大规模分布式机器学习和企业级AI研发工作.在该篇文章中,作者介绍了实时深度学习的推理加 ...

  3. 【《Real-Time Rendering 3rd》 提炼总结】(十一) 第十四章 : 游戏开发中的渲染加速算法总结

    本文由@浅墨_毛星云 出品,转载请注明出处.   文章链接: http://blog.csdn.net/poem_qianmo/article/details/78884513 导读 这是一篇1万3千 ...

  4. 【转载】【《Real-Time Rendering 3rd》 提炼总结】(十一) 第十四章 : 游戏开发中的渲染加速算法总结

    本文由@浅墨_毛星云 出品,转载请注明出处.    文章链接:  http://blog.csdn.net/poem_qianmo/article/details/78884513 导读 这是一篇1万 ...

  5. 实时渲染学习(二)GPU渲染管线与可编程着色器

    写在最开始: 参考博文:[<Real-Time Rendering 3rd> 提炼总结](三) 第三章 · GPU渲染管线与可编程着色器 注意区分图形渲染管线和GPU渲染管线.图形渲染管线 ...

  6. “基于云平台的移动终端实时渲染”学习参考

    "基于云平台的移动终端实时渲染"学习参考 之前在看"基于云平台的移动终端实时渲染"时,遇到了很多问题.在解决这些问题的过程中,查阅了大量的资料.此处记录下当时所 ...

  7. 自学习芯片、实时3D表情捕捉渲染,百倍DNN模型无损压缩 | 英特尔中国研究院媒体开放日...

    在人工智能的大背景下,这几年,说起芯片霸主英特尔,似乎总有一股时过境迁的味道.但是,"关于芯片霸主这个问题,判断是不是具有领先性,既不能看近期的市场营收,也不能只看媒体曝光的热度,应该要从一 ...

  8. 实时渲染、离线渲染、实时云渲染、混合渲染是什么?

    渲染,就是将 3D 模型转换成 2D 图像,并最终呈现在屏幕上的过程.虽然这里只有一句话,但是这一句话里面包含了太多的数学.物理和计算机方面的知识,它描述了我们用计算机来虚拟化真实世界的基本逻辑.渲染 ...

  9. Unity3D灯光与渲染学习之(一):天空盒、灯光以及色彩空间

    最近在学习Siki学院中的U3D渲染,将学习的笔记进行整理,方便日后查阅,也方便各位交流学习.课程大纲如下: 先介绍灯光渲染的大致内容,灯光效果主要分为实时光照(RealTime) 和烘焙(Baked ...

  10. 实时渲染:实时、离线、云渲染、混合渲染的区别

    渲染,就是将3D模型转换成2D图像,并最终呈现在屏幕上的过程.虽然这里只有一句话,但是这一句话里面包含了太多的数学.物理和计算机方面的知识,它描述了我们用计算机来虚拟化真实世界的基本逻辑.渲染过程是需 ...

最新文章

  1. 融资2.1亿商汤领投,他要用VR+AR解决无人驾驶的路测难题
  2. 杭州新设大数据资源管理局 推动资源共享、市场规范
  3. 七日存留查询(MYSQL)
  4. python哪一版好用-最好的 Python IDE,你们推荐使用哪一个?
  5. CSS基础教程(企业内部培训)
  6. 模块化和组件化的定义以及两者的区别
  7. 【LeetCode】414. 第三大的数
  8. 怎么配置php服务器时间,php如何设置服务器时间
  9. Opencv获取身份证号码区域
  10. Sentinel(七)之网关限流
  11. 几款win10下的小工具:截图、录屏、置顶窗口
  12. python文本聚类分析作用_文本聚类应用意义
  13. vue百度地图自定义标记图标
  14. 怎样获取Atlantic免费一年的VPS主机
  15. 【CSS】相对长度单位 绝对长度单位,vw/vh , rem等
  16. Leetcode-1658. 将 x 减到 0 的最小操作数
  17. node爬取双马尾小姐姐图片
  18. 不积硅步,无以至千里
  19. WEB 在线相册小系统
  20. 笔记本显示网络电缆被拔出怎么解决_如何解决系统显示网络电缆被拔出的问题...

热门文章

  1. 7450清零_联想M7450F打印机加粉清零方法
  2. android http统一回调,Android使用OKHttp构建带进度回调的多文件下载器
  3. 用word写接口文档时的常规格式设置
  4. CAD导出JPG如何控制转换质量?
  5. abap实现大数据-echar调用
  6. 人工神经网络 图像分割 matlab,MATLAB图像分割毕业设计开题报告
  7. 神经网络搭建六步法扩展
  8. MATLAB信号与系统实验(一)
  9. Excel Mrp生产计划工具
  10. 《现代控制系统》第四章——反馈控制系统特性 4.3 控制系统对参数变化的敏感程度