赞
踩
所有渲染所需要的数据需要从硬盘中加载到系统内存,然后网格和纹理等数据又被加载到显存中
如何获得渲染所需要的数据:进行剔除和排序
剔除:
排序:
渲染状态定义了场景中网格是如何被渲染的,使用哪个顶点着色器VertexShader/片元着色器FragmentShader、光源属性、材质等
打包数据:
模型信息:顶点坐标,法线,UV,切线,顶点色,索引列表
变换矩阵:世界变换矩阵,VP矩阵(根据摄像机位置和FOV等参数构建)
灯光,材质参数:Shader,材质信息,灯光信息
绘制调用,DrawCall是一个命令,发起方是CPU,接收方是GPU
DrawCall
的补充DrawCall本身的含义:CPU调用图像编程接口
注意:DrawCall中造成性能问题的元凶是CPU而不是GPU
利用命令缓冲区实现,当CPU需要渲染一些对象时,它可以向命令缓冲区中添加命令,而当GPU完成上一次的渲染任务后,它就可以从命令队列中取出一个命令并执行它,DrawCall
就是这诸多命令中的一种
DrawCall
如何影响帧率:每次调用DrawCall
之前,CPU需要向GPU发送很多内容,如数据、状态、命令等。
然而GPU渲染能力很强,因此渲染速度往往取决于CPU提交命令的速度。
如果DrawCall
数量太多,CPU就会把大量的时间花费在提交和准备DrawCall
上,造成CPU过载
DrawCall
:采用批处Batching
的方法,例如将图集打包,将静态的物体合并等
DrawCall
的开销用于实现顶点的空间变换、顶点着色等功能
可以加入可选着色器:
将不在摄像机视野内的顶点裁剪掉,并剔除某些三角图元的面片
无法编程,为硬件上的固定操作
补充:转换到NDC标准坐标系之后即可进行背面剔除
Window Coordinates
固定函数阶段,计算光栅化以一个三角网格所需的信息(即进行生成图元,将上一个阶段获得的顶点装配成三角形图元)
固定函数阶段,获取三角形三个顶点的颜色,并根据该顶点信息对覆盖区域的像素信息进行插值,即光栅化
可编程的,实现逐片元的着色操作
输入是上一阶段对顶点信息插值得到的结果,输出为一个或多个颜色值,同时完成纹理采样,光照计算等操作
光照组成:直接光+间接光
光照模型:
执行很多重要操作,如修改颜色、深度缓冲、进行混合等,不可编程,具有很高可配置性
逐片元操作具有高度可配置性,可以设置每一步的操作细节
Early-z技术:将深度测试提前到片元Shader之前,这样就可以早知道哪些片元是被舍弃的,对于这些片元就不需要再使用片元着色器计算其颜色了,同时提前这些测试有可能会与片元着色器发生冲突,现代CPU会判断这些冲突
OpenGL/DirectX即图像应用编程接口,用于渲染一些二维或三维图形,架起了上层应用和底层CPU的沟通桥梁
应用程序运行在CPU上,通过调用OpenGL或DirectX的图形接口将渲染所需的数据存储在显存中的特定区域,随后开发者通过图像编程接口发出渲染命令DrawCall
,他们将会被显卡驱动翻译成GPU理解的代码,进行真正的绘制
着色语言有DirectX的HLSL,OpenGL的GLSL,NAVIDIA的CG
Unity中,可以选择使用”CG/HLSL“或者”GLSL“
参考:
UnityShader入门精要
技术美术入门:渲染管线概述
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。