光追加速结构(BVH树)
一、层次包围体 BVH Bounding volume hierarchy (BVH)即层次包围体,在BVH中,所有的几何物体都会被包在bounding volume的叶子节点里面,bounding volume外面继续包着一个更大的bounding volume,递归地包裹下去,最终形成的根节点会包裹着整个场景。常用于碰撞检测和光线追踪的加速,能够将时间复杂度降低到关于物体数量的对数级别。
二、轴对齐包围盒 AABB 轴对齐包围盒:axis-aligned bounding box, 缩写为 AABB
光线追踪
真实地显示物体的方法,光线跟踪方法沿着到达视点的光线的反方向跟踪,经过屏幕上每一个象素,找出与视线相交的物体表面点P0,并继续跟踪,找出影响P0点光强的所有光源,从而算出P0点上精确的光线强度,在材质编辑中经常用来表现镜面效果。光线跟踪或称光迹追踪是计算机图形学的核心算法之一;
视觉展示:
- 亮度:受光与平面的夹角影响,自身颜色 [图片未在原笔记仓库中找到] [图片未在原笔记仓库中找到]
- 阴影,反射,折射:光线路径是否有阻挡,阻挡程度
- 漫反射 [图片未在原笔记仓库中找到]
渲染管线
渲染管线贴切的翻译应该叫渲染流水线,作用:将数据从3D场景转换为2D图像,并最终在屏幕上显示出来的过程。分为:应用阶段、几何阶段、光栅阶段。
应用阶段:碰撞检测、计算数据(顶点坐标、法向量、纹理坐标、纹理),通过数据总线传给图形硬件。
几何阶段:顶点着色器(MVP变换)–》曲面细分着色器(修改网格精度)–》几何着色器(生成多种图元)–》裁剪与背面剔除(去掉多余的点和面)–》屏幕影射(NDC空间)。
光栅阶段:矢量图形转化成像素点的过程 。
光照模型
一.综述 [图片未在原笔记仓库中找到]
二.真实感渲染(Photorealistic Rendering) [图片未在原笔记仓库中找到] 真实感图形技术包括消隐技术、光照模型、明暗处理和纹理及纹理映射,阴影生成等
三.光照模型(illumination model) 当光照射到物体表面时,物体对光会发生反射、透射、吸收、衍射、折射、和干涉,其中被物体吸收的部分转化为热,反射、透射的光进入人的视觉系统,使我们能看见物体。为模拟这一现象,我们建立一些数学模型来替代复杂的物理模型,这些模型就称为明暗效应模型或者光照明模型。
3.1什么是局部光照模型: [图片未在原笔记仓库中找到] 在真实感图形学中,仅处理光源直接照射物体表面的光照明模型被称为局部光照明模型。
- Lambert漫反射模型 Lambert是光源照射到物体表面后,向四面八方反射,产生的漫反射效果。这是一种理想的漫反射光照模型。如下图:这个是顶点函数处理后的该光照模型,因此看起来像素不够平滑。 [图片未在原笔记仓库中找到]
- phong光照明模型 Lambert模型较好的表现了粗糙表面的光照现象,如墙壁,纸张等,但是在用于诸如金属等有光泽效果的材质上则会显得呆板,表现不出光泽,主要原因是Lambert光照模型没有考虑表现这些表面的镜面反射效果。 [图片未在原笔记仓库中找到]
- BlinnPhong光照模型 BlinnPhong光照模型混合和了Lambert的漫反射和标准的高光,渲染有时比Phong高光更柔和、更平滑,此外它的处理速度相当快,因此成为许多CG软件中默认的光照渲染方法。 Phong模型及它的改进模型Blinn-Phong模型至今仍在使用,比如著名的3D软件3dsMax中的基于它们的Blinn-Phong明暗器。
- cook-torrance光照模型 BlinnPhong模型和cook-torrance模型均建立在双向反射率这一概念上.双向反射率的定义为表面朝给定方向的反射光亮度与入射光在景物表面产生的照度之比.
3.2什么是全局光照模型 [图片未在原笔记仓库中找到] 全局光照模型是基于光学物理原理的,光照强度的计算依赖于光能在现实世界中的传播情况,考虑光线与整个场景中各物体表面及物体表面间的相互影响,包括多次反射 、透射 、散射等。因此,与局部光照模型相比,全局光照模型需要相当大的计算量 ,但同时也能取得非常逼真的真实效果。
3.3光线跟踪 光线跟踪算法通过模拟光的传播方式,即光从光源出发经过若干次反射或折射到达摄像机的过程来实现全局光照效果。其思想起源于光线投射算法。由于只有最终到达摄像机的光线才会对生成的图像有贡献,因此光线跟踪的实现通常是从摄像机逆向发出光线,以寻找达到光源的路径。尽管对光线的跟踪方向不同,两者所遵循的计算方式是一致的。其核心操作是寻找光线与场景中物体的交点。
whitted光线追踪 whitted提出了一种递归的光线跟踪方式,可实现直接光照、镜面反射和折射效果,如图所示。为了确定着色点是否对光源直接可见,算法从着色点向光源发射一条阴影线以寻找任意交点。如果交点存在,则意味着光照被某个物体遮挡,因而着色点必然位于阴影中。否则,着色点一定能够直接被光源照射到。为了实现镜面的反射和折射效果,当光线命中一个材质为镜面的物体时,跟踪过程在结束对当前着色点的直接光照后,会继续向反射和折射方向发射新的光线。反射和折射方向可根据物理定律得到。由于新的光线又会重复可见性判定和着色操作,因此整个跟踪过程可以按照递归的方式实现。通常,阴影线、反射和折射线被统称为次级光线以区别于从摄像机发出的主光线。 [图片未在原笔记仓库中找到]
分布式光线跟踪 分布式光线跟踪引入了随机采样的思想,可以实现比递归光线跟踪更加丰富的效果。递归光线跟踪只允许点光源模型,即光源与着色点之间的遮挡判定只有“是”或“否”两种结果。因而只能实现硬阴影效果。而分布式光线跟踪允许使用面积光源从而能够支持软阴影效果。 通过从面积光源表面随机抽取若干采样点,光源与着色点间可以形成多条阴影线。遮挡关系可以通过综合多条阴影线的判定结果得出。随着阴影线数量的增加,遮挡关系的表示精度也相应扩大,从而使阴影的程度不仅限于“是”或“否”两种级别。
3.4辐射度 辐射度方法对热辐射的发散和反射的描绘基于热能工程模型,它为物体间的多重反射提供了更加精确的处理方法,避免了对漫反射光线直接处理。
辐射度方法是一种物体空间的算法,用于解离散的点或者环境中的表面曲面片的光强度问题,而不是用于解图像平面投影中的像素问题。因此,解是独立于观察者的位置的。辐射度方法也是一种能量守恒或者叫做能量平衡的方法,它作为一个封闭的空间中所有表面的辐射度提供一个解。对于系统的输入,能量来自那些作为发射器的表面。
3.5光子映射 在提出光子映射之前,主流的全局光照渲染算法是光线跟踪和辐射度算法,早期的光线跟踪算法只能处理镜面反射、折射以及直接光照,随着蒙特卡罗的方法对光线跟踪算法进行的扩展,使得光线跟踪算法可以处理焦散、间接光照等效果,这种方法对甸条光线使用随机的光线分布,要得到满意的图像需要对光线进行大量的采样。
光子映射在1994年被提出,95年有第一篇关于它的论文发表,它可以很好模拟包括漫反射辉映、焦散等全局光照效果,和一般的光线跟踪一样的灵活,但计算时间却少得多。当然,光子映射仍然无法达到实时的地步。
基飞光子映射的全局光照算法有两步:
第一步,从光源向场景发射光子,少在它们碰到镜面物体时发生反射,在碰到镜面物体时按一定几率反射,将不发生反射的光子保存在一个光子图中,建立光子图。光子图表示了光源发出的能量在场景中的分布。
第二步,渲染,使用统计方法从光子图中提取出场景中所有点的入射通量以及反射辐射能。光子图与场景表述是完全分离开的,这一特性使得光子映射方法能处理很复杂的场景,包括千万个三角面片,实例化的几何体,复杂的过程式物体.