热门标签 | HotTags
当前位置:  开发笔记 > 程序员 > 正文

[实时渲染]2.1架构

在物理世界中,管线的概念以及不同的形式来证明自己,从工厂组装线到缆车,也被用在图形处理中。管线包含了多个阶段[541],例如,在输油管道中,油料不
     在物理世界中,管线的概念以及不同的形式来证明自己,从工厂组装线到缆车,也被用在图形处理中。
     管线包含了多个阶段[541],例如,在输油管道中,油料不能从第一个阶段到达第二阶段直到第二阶段中的石油已经移到第三阶段,等等。没意味管线的速度取决于最慢的阶段,不管其它阶段的速度多么地快。
     理想情况下,非管线系统被分割成N管线阶段可以达到N倍的加速,增加性能提升是使用管线的主要原因。例如在缆车中只放一个坐椅是低效的,放置更多的缆椅可以成倍加速运送滑雪者到达山顶。管线的不同阶段并行地执行,但会被最慢的阶段拖延直到该阶段完成为止。例如,如果汽车组装线上的方向盘安装阶段需要3分钟,而其它阶段只需要两分钟,那么最快的速度是3分钟完成一辆汽车,在方向盘安装阶段完成之前,其它阶段必空闲一分钟。对于这个管线而言,方向盘阶段是一个瓶颈,因为它决定了生产的速度。
     
     这种类型的管线在实时计算机图形中也可以见到,实时渲染管线可以粗略分为三个概念阶段:应用程序,几何图形以及光栅器,如图2.2所示。这个结构是实时计算机图形中使用的渲染引擎的核心,也是接下来的章节中讨论的根本问题。不同阶段的本身也是一个管线,这也意味着管理包含了很多不同的子管线。我们来区分概念阶段(应用程序,几何图形以及光栅器),功能阶段以及管线阶段的区别。功能阶段是指在管线中执行特定的任务,但未指定执行任务的方法。另一方面,一个管线阶段是指同时执行所有其它管线阶段,出于高性能的需要,一个管线阶段可以被并行地执行,例如,几何处理阶段可以被分为5个功能阶段,但图形系统的实现决定了被划分的管线阶段。一个给定的实现可能整合了两个功能阶段到一个管线阶段,同时也会将更耗时的功能阶段划分成不同的管线阶段来并行化之。

     最慢的管线阶段决定了渲染速度即图像的更新速率,该速率可能被表述为帧率(fps),也即是每秒被渲染的图像数量,也可以表述为赫兹(Hz),更新频率1/秒的简化。应用程序生成图像的时间是变化的,取决于每帧执行计算的复杂度,FPS用来表达特定帧的执行速度,或者一段时间内的平均性能。赫兹用于硬件,如显示器,被设置为固定速度。因为我们使用管线进行处理,因此无法得到通过整个管线中所有被渲染数据的处理时间总合,当然这也是管线允许不同阶段并行执行带来的后果。如果能定位到瓶颈所在,如管线中最慢的阶段,测量数据通用该阶段所占用的时间 ,那么我们就可以计算得到渲染速度。例如,假设瓶颈阶段花费20ms来执行,那么渲染速度就是1/0.020 = 50 Hz,然而这个值只有在输出设备可以以这个速度进行更新的情况下才是正确的,否则正确的输出速度会被降低。在其它管线环境中,使用吞吐量(throughput)而不是渲染速度。
     
      示例:渲染速度。假设我们的输出设备的最大更新频率为60Hz,并且已经渲染管线中的瓶颈,时间测量显示该阶段执行花费62.5ms,渲染速度的计算如下,首先忽略输出设备,我们可以得到最大的渲染速度 1/0.0625 = 16 fps,然后,调整该值到输出设备的频率:60Hz意味着渲染速度可以达到60Hz,60 / 2 = 30Hz,60 / 3 = 20 Hz, 60 / 4 = 15 Hz,60 / 5 = 12 Hz等等,这意味着我们可以期望渲染速度达到15Hz,因此输出设备可以管理的最大固定速度 小于16Hz。

     正如其名,应用程序阶段受应用程序驱动,由运行中的软件在CPU上进行实现,CPU通常包含多个核心来并行执行不同的线程,这也使用CPU可以高效地运行大量应用程序阶段负责的任务。根据应用程序的不同,一些通常在CPU上执行的任务包含碰撞检测,全局加速算法,动画,物理模拟等等。下一步是几何处理阶段来执行变换,投影等等,该阶段计算什么需要被绘制,怎么绘制以及被绘制在什么地方,典型地,几何处理阶段在图形处理单元(GPU)上执行,GPU包含很多可编程的核心及固定功能的硬件。最后光栅化阶段根据之前阶段生成的数据逐像素计算绘制(渲染)一张图像,光栅化阶段完成在GPU上完成。这些阶段以及内部阶段在后面三章中会被讨论,关于GPU如何处理这些阶段的更多细节将在第三章中给出。













推荐阅读
  • Node.js 开发入门:环境搭建与配置
    随着Node.js技术的日益成熟及其即将发布的1.0稳定版,越来越多的开发者开始关注并尝试这一高性能的服务器端JavaScript平台。本文将引导读者如何在Windows环境下安装配置Node.js,并介绍一些常用的开发工具和框架。 ... [详细]
  • Spring Cloud Config: 高效统一的配置管理解决方案
    Spring Cloud Config 是一个用于集中管理和分发应用程序配置的工具,支持多环境下的配置管理(如开发、测试和生产环境),并且能够根据需求动态调整配置参数(例如,在大型促销活动期间增加数据库的最大连接数)。 ... [详细]
  • 在近期的百度大数据开放会议上,计算机科学领域的专家怀进鹏教授的演讲引发了广泛关注。尽管演讲内容高深复杂,但对于那些对计算机科学和人工智能领域有所了解的人来说,这场演讲无疑揭示了未来技术发展的无限可能性。 ... [详细]
  • 本文探讨了软件配置管理(CM)的核心概念,包括配置项、基线、变更管理和配置库的划分。文章基于作者在CMMI咨询中的经验,指出软件配置管理不仅限于版本控制,而是涵盖了更广泛的领域。 ... [详细]
  • 本文详细探讨了 Java 中 Daemon 线程的特点及其应用场景,并深入分析了 Random 类的源代码,帮助开发者更好地理解和使用这些核心组件。 ... [详细]
  • Linux进程中的主要内存区域及其功能
    在Linux系统中,每个运行的进程(即执行的程序)都会占用一定量的内存资源。这些内存资源根据不同的用途被划分为多个区域,包括代码段、数据段、BSS段、堆以及栈。本文将详细介绍这五个内存区域的作用及特点。 ... [详细]
  • 本文档详细介绍了服务器与应用系统迁移的策略与实施步骤。迁移不仅涉及数据的转移,还包括环境配置、应用兼容性测试等多个方面,旨在确保迁移过程的顺利进行及迁移后的系统稳定运行。 ... [详细]
  • 第十代英特尔酷睿H系列处理器发布,i9-10980HK领衔登场
    2020年4月2日,英特尔正式发布了第十代酷睿H系列高性能处理器,专为移动平台设计。此次发布的处理器阵容强大,包括多款i5、i7及顶级i9处理器。 ... [详细]
  • 本文详细探讨了字符编码的发展历程,从最早的8位字节编码到现代的UNICODE和UTF8,解释了各种编码方式的原理及其在不同场景下的应用。 ... [详细]
  • Swell数学用户故事实践
    本文介绍了用户故事的基础知识,包括其定义、组成要素及其在项目管理中的应用。通过Swell数学项目的案例,详细探讨了如何利用用户故事提高团队协作效率,确保产品开发满足用户需求。 ... [详细]
  • 腾讯发布全新Android原生UI框架,开源社区再添强援
    近日,腾讯宣布开源了一款全新的Android原生UI框架,旨在提升开发者的工作效率与用户体验。这一举动再次展示了腾讯对开放源代码社区的支持。 ... [详细]
  • 本文详细探讨了UML用例图中的两种重要关系——包含关系和扩展关系,通过具体示例解析这两种关系的应用场景及其实现方式。 ... [详细]
  • 本文档详细规划了从基础到高级的软件测试学习路径,包括但不限于测试基础、Linux和数据库、功能测试、Python编程、接口测试、性能测试、金融项目实战、UI自动化测试等内容,旨在为初学者和进阶者提供全面的学习指导。 ... [详细]
  • 评估Kotlin的学习价值及其在大厂面试中的作用
    本文探讨了Kotlin这门编程语言的学习必要性,并分析了其在移动开发领域的地位,特别是在求职大厂时的影响。 ... [详细]
  • RabbitMQ消息分发策略与确认机制
    本文详细介绍了RabbitMQ的消息分发轮询机制以及消息确认(Message Acknowledgment)功能,通过实例演示了如何确保消息可靠传递。 ... [详细]
author-avatar
angel青彤雪
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有