Unity Shader 入门精要(01) -- 渲染流水线
发布日期:2021-06-29 11:13:22 浏览次数:3 分类:技术文章

本文共 1265 字,大约阅读时间需要 4 分钟。

一、什么是渲染流水线

流水线大家都了解。渲染流水线的工作任务在于从一个三维场景出发、生成(或者说渲染)一张二维图像(即我们在电脑屏幕上看到的效果)。换句话说,计算机需要从一系列的顶点数据、纹理等信息出发,把这些信息最终转换成一张人眼可见的图像。这个工作通常是由CPU和GPU共同完成。

渲染流程分为3个阶段:应用阶段、几何阶段、光栅化阶段

这里写图片描述
应用阶段(cpu):①准备好场景数据,例如摄像机的位置、视椎体、场景中包含了那些模型、使用了那些光源等等 ②为了提高渲染性能我们往往需要做一个粗粒度剔除工作,可以把那些不可见的物体剔除出去,这样就不需要在移交给几何阶段处理 ③最后,我们需要设置好每个模型的渲染状态(材质、纹理、shader)这一阶段最主要的是输出渲染需要的几何信息,即渲染图元。图元是网格的基本单位。它可以是点、线、三角面等
几何阶段(gpu):处理所有和我们要绘制的几何相关的事情。例如,决定要绘制的图元是什么,怎样绘制它们,在哪里绘制它们。这一阶段最重要的任务是把顶点坐标变换到屏幕空间中。
光栅化阶段(gpu):使用上阶段传递来的数据来产生屏幕上的像素,并渲染出最终的图像。主要任务是决定每个渲染图元中的那些像素应该被绘制在屏幕上。

二 、GPU和CPU之前的通信

前面提到的应用阶段大致分为3下面三个阶段

① 把数据加载到显存中(顶点的位置信息、法线方向、顶点颜色、纹理坐标等)------ 场景数据
② 设置渲染状态(使用哪个顶点着色器/片元着色器、光源属性、材质、纹理等)---------- 渲染成什么样子
③ 调用Draw Call(CPU告诉GPU开始一个渲染过程。并指向本次要渲染的图元列表)------- 喂!GPU,渲染这个

CPU、Opengl/Directx、显卡驱动、GPU之间的关系
三 、一些基础概念的理解

OpenGL/Directx:渲染引擎(图像应用编程接口)。shader是一种渲染命令,由opengl或者Dx进行解析,最终由GPU来渲染。

显卡驱动:显卡的操作系统。
显卡:GPU + 显存。

四 、什么是Draw Call

Draw Call:CPU调用图像编程接口,以命令GPU进行渲染的操作。在Draw Call中其实造成性能问题的元凶是CPU.

cpu和gpu是如何并行工作的

这里写图片描述

为什么是Draw Call多了会影响帧率

举个例子:①创建10000个文件,每个文件大小为1KB,总共占内存10MB ②创建一个单独的文件,大小为10MB,然后各自从当前文件夹中复制到另一个文件中,第二种方案用的时间会少很多。因为每一个复制动作需要很多额外的开销,复制次数越多开销就越大。
同理,每次调用Draw Call之前,CPU需要向GPU发送很多内容,包括数据、状态、命令等,这一阶段,CPU需要完成很多工作,例如检查渲染状态等。而GPU的渲染能力是很强的,渲染200个还是2000个三角网格通常没什么区别。

如何减少Draw Call

① 避免使用大量的小网格,尽量合并。比如图集打包。
② 避免使用过多的材质,尽量在不同的网格之间公用同一个材质。

转载地址:https://blog.csdn.net/zwg739424406/article/details/80889391 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Unity Shader 入门精要(02) -- shader的编码基础
下一篇:【u3d泰斗破坏神】09 --- 角色血条的制作、掉血特效

发表评论

最新留言

不错!
[***.144.177.141]2024年04月30日 11时15分45秒