游戏开发工程师--游戏引擎的场景渲染

298 阅读2分钟

场景渲染概述

渲染

将三维矢量描述的场景转换到二维像素描述的场景处理过程

从场景图中取出看的见的对象,如三维模型 和纹理 ,经过光照计算等处理,转换为屏幕的上的像素场景。

事件发生,则开始渲染
渲染哪些三角形面片
场景中真实感渲染的属性定义
用什么方式渲染? 光照计算 、纹理的映射、Shader程序

真实感渲染 / 非真实感渲染(NPR ,Non-photorealisbc rendering) 场景剔除
真实感处理(光照、阴影、纹理、特效)
shader编程
优化渲染的LOD技术

摄像机(camera)

确定摄像机的位置,确定视见体,确定视口(显示器窗口的作图区)

图形变换 (Transformation)

世界坐标系 -> 眼睛坐标系 -> 规范化设备坐标系 -> 视口modelview变换和阴影变换 ->

帧缓存 (Framebuffer)

视见体可见面的像素值RGBA,求像素值的运算包括:材质光照计算、纹理映射、阴影计算

材质光照计算、纹理映射、阴影计算

FPS (Frame per Second )

图形渲染的速度要快于更新的速度

实时渲染过程

通过交互控制 游戏画面是实时产生的
游戏事件 :鼠标键盘等外部事件 ,也可以是游戏中的内部事件

场景管理目的 : 实时渲染 ,要求的渲染速度快、渲染效果真实

摄像机改变 或场景中的可移动对象变化时开始渲染

遍历场景图,渲染场景
包围盒剔除不可见场景
真实感绘制,计算光照、纹理、阴影、特效、求像素值
生成场景显示的渲染结果,FrameBuffer

不可见物体剔除 (Culling)

剔除视见体之外的物体 (View-frustum Culling)

剔除视见体内的被遮挡物体(Occlusion Culling)

判断八叉树节点之间与视点的位置
用射线追踪法判断物体平面与视点的距离 剔除被遮挡物体的三角形面片

背面剔除(Back-face Cuing)

物体上的每一个三角形面片的正面和背面 由三角形面的法向量决定的

不可见物体剔除计算的权衡

若场景复杂,则做剔除、减少渲染物体
硬件加速的渲染计算达到帧率的要求可不剔除

ORGE 渲染过程