1.1k likes | 1.32k Views
实时渲染. 什么是实时渲染 ?. 即在计算机上快速绘制图形图像 实时渲染通常意味着3 D 渲染 较高的帧频( FPS,Frame Per Second) FPS>6: 具有交互性 FPS>15: 具有实时性 FPS>72: 肉眼难以辨别 高质量的渲染效果. 应用领域. 虚拟现实 医学:断层成像技术( CT) 娱乐:电影制作、广告设计 军事和航空 电子商务 CAD 等领域 3 D 游戏 实时图形渲染是未来所有3 D 应用程序的核心技术. CT 成像. 电影3 D 制作. 飞行模拟器. 3 D 游戏制作. 3 D 游戏制作. 实时渲染的主要技术.
E N D
什么是实时渲染 ? • 即在计算机上快速绘制图形图像 • 实时渲染通常意味着3D渲染 • 较高的帧频(FPS,Frame Per Second) • FPS>6:具有交互性 • FPS>15:具有实时性 • FPS>72:肉眼难以辨别 • 高质量的渲染效果
应用领域 • 虚拟现实 • 医学:断层成像技术(CT) • 娱乐:电影制作、广告设计 • 军事和航空 • 电子商务 • CAD等领域 • 3D游戏 • 实时图形渲染是未来所有3D应用程序的核心技术
实时渲染的主要技术 • 简化场景复杂度 • 空间数据结构 • 多分辨率模型 • 层次细节模型(Level-of-Detail, LOD) • 再划分(Remeshing) • 剔除(Culling) • 背面剔除(Back-face culling) • 可视体剔除(View-volume culling) • 遮挡剔除(Occlusion culling) • 混合绘制(Hybrid rendering) • 点绘制(Point-based rendering)
实时渲染的主要技术 • 提高图像质量 • 光照技术 • 纹理映射(texture mapping) • 阴影(shading) • 多通路绘制(Multi-pass rendering) • 基于图像的绘制 • 混合绘制 • 非真实感渲染(Non-photorealistic rendering)
实时渲染的主要技术 • 硬件加速 • 缓存技术 • 深度缓存(Z-buffer)、帧缓存(frame buffer)、累积缓存(accumulation buffer)、模板(stencil buffer) • 纹理映射 • 可编程着色器 • 顶点着色器(Vertex shader) • 象素着色器(Pixel shader) • 目标是影院级的效果 • 场景管理 • 动态处理:如碰撞检测
光照明模型 • 局部光照 • 如Lambert、Phone、Blin模型等 • 仅考虑光源直接照射在物体表面产生的影响 • 能够产生高质量效果,基本满足需求 • 全局光照 • 如光线跟踪、辐射度算法等 • 除了光源,还要考虑间接光照如反射 • 追求照片级的真实感效果 • 计算量大,实现比较困难
漫反射分量 • 捕捉不光滑表面的反射 • 基于Lambert定律 I为光强度,C为系数,说明光强度和cosф成正比
r l 2(n•l)n (n•l)n 镜面反射分量 • 产生高光效果 • Phong光照方程 n Mshi越大,光线越聚集,高光越强
环境分量 • 捕捉来自其他物体表面的光照 • 增加一个常量: • 也能够看见没有直接光照的物体,如果关闭光照,环境分量自动设为零
+ + = 光照方程 • i=iamb+idiff+ispec
全局光照模型 • 局部光照模型 • 硬件支持,在实时绘制中广泛采用 • 不能处理透明、反射以及阴影等效果 • 无法产生相片级真实感效果 • 全局光照模型 • 除了光源,还要考虑间接光照如反射 • 追求照片级的真实感效果 • 主要有光线跟踪和辐射度等算法
光线跟踪 • 物理上描述了光线的镜面反射和折射过程 • 能够产生照片级真实感效果 • 忽略了物体表面的漫反射,阴影稍显尖锐,物体看上去太光泽 • 计算量大,需要计算光线和所有物体的求交,与场景的几何复杂度相关 • 与视点相关 • 可以通过可编程图形处理器进行加速
辐射度算法 • 能够捕捉来自漫反射表面间接光线 • 视点独立 • 不能很好的绘制光滑表面和镜面高光效果 • 计算速度慢 • 借助目前的可编程图形处理器可以进行加速
辐射度场景 游戏Dead or Alive中使用辐射度产生的人物光照效果
纹理贴图 • 纹理贴图通过修改光照方程中参数,从而改变物体的表面属性 • 凹凸纹理贴图(Bump Mapping) • 改变表面的法线方向 • 光泽贴图(Gloss Mapping) • 改变镜面反射分量分布 • 光照贴图(Light Mapping) • 环境贴图 • Alpha贴图
凹凸贴图 Nvidia公司的狼人皮肤(凹凸效果采用法线图)
× + = 镜面反射分量 光泽图 漫反射分量 最后结果 • 并非所有的物体表面都有均匀的光泽。如地板破损、钢板上的文字等,可以由光泽贴图(Gloss Mapping)技术来实现 光泽贴图
光照贴图 • 预先计算光照效果并存在纹理中 • 可得到类似Phong光照的效果。 • 通常用来模拟漫反射表面的光照效果(镜面反射和视点相关,比较难以模拟) 漫反射分量 光照纹理 最后结果
光照贴图 没有使用光照贴图
光照贴图 使用光照贴图
光照贴图场景 Wolfenstein 3D(德军司令部) 中的光照贴图
多通路绘制 • 可以生成运动模糊、景深、反走样、软阴影、平面反射等效果 • 基本思想:每个通路计算一段光照方程,使用Frame buffer存储中间结果,最后合成图像。 • Quake III的早期设计就用了10个通道 • 通路1~4:累积凹凸纹理图 • 通路5:漫反射光照 • 通路6:基纹理(具有镜面反射分量) • 通路7:镜面光照 • 通路8:放射光照(emissive lighting) • 通路9:体/大气效果 • 通路10:屏幕Flash
4个通路 运动模糊 16个通路
无景深效果 景深效果 有景深效果
多通路绘制 水效果像素着色器(对于不支持像素着色器的显卡,采用支持多通路绘制达到同样的效果,但速度更慢)
砖头纹理 光照纹理 多重纹理贴图 • 目前大部分硬件支持在一个绘制通路中使用多个纹理 • 多通路绘制和多重纹理结合可以产生非常复杂的光照效果
阴影 暗黑之刃( Blade of Darkness )中的阴影
阴影 • 阴影效果在真实感图像的生成、物体形状和位置的判断方面是一个非常重要的元素 判断物体间相对位置
阴影 • 可以判断物体的几何形状 判断遮挡物的几何形状 判断接收物的几何形状
硬阴影 阴影分类 软阴影
阴影分类 • 硬阴影 • 由点光源或者无穷光源产生; • 会被误认为是物体的一个部分,如曲面上的皱褶。 • 软阴影 • 面光源产生 • 分为本影区(全部遮挡)和半影区(部分遮挡) • 一般来说更为可取 • 遮挡物和接收物之间距离越大越“软”
阴影绘制方法 • 阴影绘制的方法主要有投影阴影(ProjectedShadow)、阴影图(Shadow Map)、阴影体(Shadow Volume)等 平面上的投影阴影
投影阴影的扩展 • 可以通过对光源进行多采样将投影阴影变为软阴影 • 可以使用阴影纹理(Shadow Texture),将平面阴影扩展到曲面阴影。
阴影图 • 制作电影“玩具总动员”的RenderMan中(Pixar的产品)使用了阴影图技术。 • 两遍渲染: • 第一遍:从光源位置绘制整个场景,深度值存入Z缓冲器(即为阴影图) • 第二遍:从视点绘制整个场景,绘制过程中其深度值与阴影图的Z值进行比较,“大于”则在阴影中。 • 光源位置没有变化时,阴影图不必重新绘制,因此可以进行预处理。 • 存在走样问题(图像空间) • 通过双线性插值来产生伪-软阴影
阴影体 Doom 3(来自ID Software)中的阴影, 使用Shadow Volume技术
阴影体 • 1991年由Heidmann提出; • 可以使用模板缓冲器将阴影投影到任意形状的物体上 • OpenGL在1.0版本就支持(1991年) • DirectX在DX6中支持(1998年) • 基于窗口空间计算阴影 • 不存在反走样问题,可以在任何地方产生清晰的阴影(包括自阴影) • 主要性能问题:损耗填充率(阴影图没有这个问题)