文章目录

  • 渲染管线(Randering Pipeline)
  • 渲染流程
  • 可编程渲染管线
    • 应用阶段
      • 把数据加载到显存中
      • 设置渲染状态
      • 调用DrawCall
    • 几何阶段、光栅化阶段

渲染管线(Randering Pipeline)

渲染管线是将网格、纹理等信息从加载到展现在屏幕上的整个过程,也叫做渲染流水线。是给定坐标系、镜头、物体、纹理、光源等信息后如何呈现为二维画面的流程。这些流程以流水线的方式工作。相对于没有流水线的渲染方式,流水线各个环节互相干扰小,渲染效率也高了很多。

下图为有流水线和无流水线的效率比对:

Shader按管线分类一般分为固定渲染管线和可编程渲染管线。早期GPU遵循固定管线(Existing Fixed Function Pipeline),光源算法相对固定,只能通过贴图来改变,通常只有塑料的质感,无法操作间接光及环境光,早已过时。

下图为常见图形API从固定管线向可编程管线进化的版本:

3D API 最后支持固定管线的版本 第一个支持可编程管线的版本
OpenGL 1.5 2.0
OpenGL ES 1.1 2.0
DirectX 7.0 8.0

实际上现阶段所使用的渲染管线都是可编程渲染管线,原有的固定渲染管线功能也基本上被新的可编程管线模拟替代,大部分后期发布的显卡都已经彻底移除了固定渲染管线的概念。

渲染流程

渲染的整个流程是由CPU发起的,游戏本身使用CPU判断哪些物体需要渲染,找到需要渲染的物体后逐个调用系统对应的图形API,每一个物体都会调用一次DrawCall,这个DrawCall就是CPU通知显卡开始渲染的过程。当显卡接收到DrawCall后,会对指定的物体进行处理,最终显示在屏幕上。下图为渲染流程概念图:

可编程渲染管线

渲染管线从概念上划分大致可以分为三个阶段:

  1. 应用阶段(Application Stage);
  2. 几何阶段(Geometry Stage);
  3. 光栅化阶段(Rasterizor Stage)。

每个阶段都有其独有的子流水线。如下图所示:

应用阶段

应用阶段工作是在CPU中进行的,主要有三大任务:

  1. 准备场景数据(相机、光源、模型等);
  2. 粗粒度剔除(Culling),将不可见物体剔除;
  3. 设置渲染状态,包括材质(漫反射颜色、高光反射颜色等)、纹理、shader等。

这一阶段最重要的工作是输出渲染几何信息,即渲染图元(Rendering Primitives),渲染图元可以是点、线、三角面等几何信息,这些渲染图元将会被传递给下一个阶段。

注意:应用阶段是开发者主导的,与Shader基本无关。

应用阶段又可以大致分为三个阶段:

  1. 把数据加载到显存中;
  2. 设置渲染状态;
  3. 调用DrawCall。

把数据加载到显存中

所有渲染数据都是从硬盘加载到内存中,然后将其中的网格、纹理、顶点位置信息、法线方向、顶点颜色、纹理坐标等数据加载到显存中。这是因为显卡访问显存更快,且大多数显卡对于RAM没有直接访问权。

有部分信息加载到显存(VRAM)后就可以从内存中移除了,但有些数据仍然需要访问,例如:CPU访问网格数据进行碰撞监测。

数据加载完成后,渲染数据将会同时存在于硬盘、内存、显存中,而内存和显存的空间是有限的,所以优秀的开发者应该更多的考虑减少空间占用,减轻硬件负荷,以此提高游戏运行效率。

设置渲染状态

渲染状态定义了网格是如何被渲染的,包括使用哪个顶点着色器/片元着色器、光源属性、材质等。

调用DrawCall

DrawCall是从CPU向GPU发送的一个命令,这个命令指定一个需要被渲染的图元(Primitives)列表,通知GPU将其渲染。

几何阶段、光栅化阶段

几何阶段和光栅化阶段的工作是在GPU中进行的,而GPU只给了部分控制权限。实际上这两个阶段可以分为若干个更小的流水线阶段,这些流水线阶段有GPU来实现,每个阶段提供了不同的可配置性和可编程性。

GPU渲染管线是以接收顶点数据作为入口,这些数据是由应用阶段加载到显存中,再由DrawCall指定的。


更多内容请查看总目录【Unity】Unity学习笔记目录整理

【Unity】Unity Shader学习笔记(二)渲染管线相关推荐

  1. 【Unity NGUI】学习笔记(二)之英雄攻击和装备武器

    玩魔兽世界的时候,游戏人物可以行走,奔跑,攻击,死亡等等行为,今天继续结合上一个案例[Unity NGUI]学习笔记(一):英雄选择,皮肤更换上给英雄添加动作行为. 一.准备工作 给英雄准备奔跑 攻击 ...

  2. Unity基础知识学习笔记二

    1,object Instantiate(object original,Vector3 position,Quaternion rotation)  克隆原始物体,并返回克隆物体. 例如:Insta ...

  3. Unity Shader 学习笔记(3)URP渲染管线带阴影PBR-Shader模板(ASE优化版本)

    此 Shader 已经不是最新版本,最新版本见本专栏的第四篇文章: Unity Shader 学习笔记(4) 材质面板截图: 功能实现(URP渲染管线下): PBR材质.投射和接收阴影. 代码展示: ...

  4. Unity超基础学习笔记(二)

    Unity超基础学习笔记(二) 1. 基本数据类型的扩展 之前在K12中学习了一些基本的数据类型,实际上C#支持更多的数据类型.如下: 注意无符号整型数和有符号整型数的表示范围,例如: int 能表示 ...

  5. Unity Shader 学习笔记(33) 全局光照(GI)、反射探针、线性空间和伽马空间、高动态范围(HDR)

    Unity Shader 学习笔记(33) 全局光照(GI).反射探针.线性空间和伽马空间.高动态范围(HDR) 参考书籍:<Unity Shader 入门精要> [<Real-Ti ...

  6. Unity Shader 学习笔记(27)渲染轮廓线(描边)方法、卡通风格渲染、素描风格渲染

    Unity Shader 学习笔记(27)渲染轮廓线(描边)方法.卡通风格渲染.素描风格渲染 参考书籍:<Unity Shader 入门精要> 渲染轮廓线(描边) 五种方法: 基于观察角度 ...

  7. Unity动画状态机学习笔记

    Unity动画状态机学习笔记 一.建平面,拖人物模型.建状态机.动画导入.拖组件--实现Game时人物动画为等待状态. 二.拖WAIT01.WAIT02.WAIT03.WAIT04--实现按数字1切换 ...

  8. Unity之C#学习笔记(11):静态类型 Static

    前篇链接:Unity之C#学习笔记(10):接口和多态 Interfaces and Polymorphism 静态类型(Static)用一句话概括就是:在程序运行期间只会被创建一份的通用内容,用关键 ...

  9. Unity游戏框架学习笔记——03基于观察者模式的事件中心

    Unity游戏框架学习笔记--03基于观察者模式的事件中心 基于观察者模式的事件中心 一如既往指路牌:https://www.bilibili.com/video/BV1C441117wU?p=5. ...

  10. Unity UI Toolkit学习笔记-Runtime UI 案例实践

    Unity UI Toolkit学习笔记-Runtime UI

最新文章

  1. 收获单季最大营收,“半死不活”特斯拉再续命一秒?
  2. 人机融合智能与深度态势感知
  3. 经验总结--我的小程序开发和进化之路
  4. Java - Get a list of all Classes loaded in the JVM[转]
  5. 如何分析apache日志[access_log(访问日志)和error_log(错误日志)]
  6. Tengine HTTPS原理解析、实践与调试【转】
  7. leetcode 275. H 指数 II
  8. 以云战“疫”,这次阿里云又让人们惊了……
  9. mysql 5.7 root password 过期
  10. python queue threading_Python 多线程 -thread threading Queue- 简单学习
  11. C#之CAD二次开发: Ribbon界面初探
  12. 深入浅出MFC:Windows程序的生与死
  13. 《碎玉投珠》的读后感想法心得范文3800字
  14. iOS软键盘弹出后视图向上移动
  15. Eclipse插件(RCP)自定义编辑器添加Dirty效果
  16. 跳跃表(SkipList)
  17. python-docx文档高亮显示
  18. Mybatis在Maven中的应用技巧
  19. 易之 - 我是个算命先生(2014年3月23日)
  20. 160个CrackMe 029 Cosh.3

热门文章

  1. 头脑王者 艺术,电影,体育,时尚,动漫
  2. 基于SpringBoot+微信小程序的社区平台
  3. java callable接口_Java Callable接口实现细节详解
  4. 用 Python 挪车、管理农场,这届 PyCon 有点香!
  5. 什么是 web 语义化?有什么好处?
  6. 走访 “长寿之乡”,人口18万的超小县城
  7. 深富策略:冲高回落降准预期下A股将何去何从
  8. https://wenku.baidu.com/view/2a54b90e52ea551810a6874e.html
  9. 清华数据挖掘:理论算法 视频笔记
  10. python中声明变量注意事项_我们如何在Python中声明变量?