科普:实时渲染与离线渲染
demi 在 周二, 04/07/2020 - 17:40 提交
视景仿真过程基本分为两个阶段:一是建模,二是渲染。所谓建模,是指用点、线、面、贴图、材质等元素构建逼真的物体和场景,建模是视景仿真的基础。所谓渲染,是指把模型在视点、光线、运动轨迹等因素作用下的视觉画面计算出来的过程。
渲染是计算机图形学中的一个过程,它指的是将3D场景或模型转化为2D图像的过程。这是在计算机图形学、计算机辅助设计(CAD)、虚拟现实、视频游戏等领域中非常重要的步骤。
视景仿真过程基本分为两个阶段:一是建模,二是渲染。所谓建模,是指用点、线、面、贴图、材质等元素构建逼真的物体和场景,建模是视景仿真的基础。所谓渲染,是指把模型在视点、光线、运动轨迹等因素作用下的视觉画面计算出来的过程。
延迟渲染:将光照计算从观察空间延迟到屏幕空间。先迅速生成不含光照的场景,并将所有用于光照计算的信息存储在几何缓冲(G buffer)中,如深度、表面法向量、颜色、PRT系数等。完成场景渲染后用几何缓冲的信息计算光照和着色。这样更高效。
大多数时候,项目并不需要一直保持最高帧率渲染,尤其是在移动平台上。过去,Unity开发者们常使用Application targetFrameRate或Vsync(垂直同步)来限制引擎的渲染速度。这种方法在影响渲染的同时,还会对其他部分的运行速率造成一些影响。而新的按需渲染API允许开发者将渲染频率从整体中独立出来调整。
针对渲染导致的性能问题,这个世界上是没有一套万能的解决方案的。渲染的性能问题涉及到许多因素,不仅仅是游戏本身,它也很大程度上取决于运行游戏的硬件和操作系统。最重要的是我们要通过不断的研究和实验来解决这些性能问题。
Shader的LOD技术可以控制使用的Shader等级,原理是,只有Shader的值小于某个设定的值,这个Shader才会被使用,而使用了那些超过设定值的Shader的物体将不会被渲染执行。
3D游戏制作通常都是由模型制作开始的。我们应该尽可能减少模型中三角面片的数目,一些对于模型没有影响,或者是肉眼很难察觉到区别的顶点都要尽可能去掉。为了尽可能减少模型中的顶点数目,美工人员往往需要优化网格结构。在很多三维建模软件忠,都有相应的优化选项,可以自动优化网格结构
overdraw 指的是同一像素被绘制了多次。为了最大限度地避免overdraw,一个重要的优化策略就是控制渲染的顺序。由于Z-深度测试的存在,如果我们可以保证物体都是从前往后渲染的,那么就可以很大程度上减少overdraw。
Draw Call本身的含义很简单,就是CPU调用图像编程接口,如OpenGL中的glDrawElements命令或者DirectX中的DrawIndexedPrimitive命令,以命令GPU进行渲染的操作。
使用纹理图集可以帮助我们减少draw call的数目,而这些纹理的大小同样是一个需要考虑的问题。需要注意的是,所有纹理的长宽比最好是正方形,而且长款值最好是2的整数幂。这是因为有很多优化策略只有在这种时候才可以发挥最大效用。
在Unity3D中,常用的减少Draw call的优化技术就是批处理技术。批处理的原理是减少每一帧需要的Draw call数目。为了把一个对象渲染到屏幕上,CPU需要检查哪些光源影响了该物体,绑定shader并设置它的参数,再把渲染命令发送给GPU。当场景中包含了大量的对象时,这些操作就会非常耗时。