真实感图形学
纹理(Texture)
纹理使得用户不必对模型的几何细节进行建模就可以丰富表面细节。而且绘制真实感图像的最重要的任务之一就是对表面细节进行建模。例如,如果我们想对一块砖墙进行建模,选择之一:用大量的具有恰当表面颜色和反射属性的多边形对表面细节进行建模。然而,在大多数应用中,很会去注意太多砖墙的细节。大多数是在一定距离以外观看这.面墙-在这种情况下,我们可能并不需要知道砖墙的所有细节。相反,我们可以用大的多边形平面对墙进行建模,并把一幅墙的图片贴在多边形上以使得这个多边形看起来像一面砖墙。将纹理引用于物体表面的过程为纹理映射。
纹理的作用
纹理图像表示表面,省时省力,不用建模所有几何/材质细节且渲染简单的多边形模型和纹理,而不是BRDF的模型几何细节,渲染过程更有效,节约计算时间和资源。
纹理的使用
首先是需要纹理采集(手绘拍照合成啥的);
纹理贴图:给定纹理图像和三维模型,需要弄清楚如何将纹理映射到模型上。可以通过给每个三维模型的顶点指定一个纹理坐标。并利用这个坐标把纹理图像上的色彩赋值给模型实现;
纹理滤波,映射后采样的方法,处理不好会有一些人为痕迹(artifacts) (信号相关)。
纹理采集
主要是针对过程纹理和纹理合成。编写特殊的程序模拟物理形成过程或者材质外观合成模拟。优点是其本身十分紧致,只需存储过程本身和参数。然后可以通过改变过程参数改变材质的外观,提供优良的可控性,但缺点过程是合成不存在普适性,且没有已知程序代码的材质无法生成。
柏林噪声
白噪声是一种在所有频率均具有很亮能量密度的新号,其傅里叶变换是近似平坦的,可以通过均匀随机函数产生。而柏林噪声是有限频宽函数,通过对不同频段的白噪声求和得到,再求和之前需要通过插值是的不同频带对应的不同图像大小插值(interpolation)使之图像大小相同,通过对持久度决定其权重。
纹理合成
从一个特定的样本合成一个新的纹理,其对用户更友好(使用该算法只需要一个sample)。
主要分为两类,基于像素和基于块。
逐像素合成新的纹理,其值由局部邻域确定(扫描线算法);而基于块的情况,合成区块,结合扫描线算法。(适合做一些半规则纹理)
纹理映射
给定一个模型和二维纹理图像,将图像映射到图像坐标的方程来完成,方程称之为表面映射函数,在给模型店着色时,我们从二维纹理中寻找适当的像素,并用该点去影响最终的颜色。
而对函数的制定:规则图形自然参数化,复杂物体手工制定纹理坐标;
网格参数化,从三维网格模型到平面域的映射;
共形参数化与面积保持,反曲率映射——在网格上从网格边的边长到网格顶点的高斯曲率的映射称之为曲率映射,利用共形几何理论,由网格曲面的曲率映射的切映射,可以证明这个映射是可逆的;
纹理滤波(filter)
在映射后,若直接渲染,则会因为由信号走样引起人为痕迹。走样和反走样:走样由于信号采样频率过低,但直接提高采样率会因为屏幕分辨率导致采样频率会被限制。而存在两类滤波
各向同性滤波:材质转换:构造一组经过预滤波和重采样图像构成的图像金字塔,其由原图在1/2,1/4,1/8等尺度对应的采样,然后在光栅化过程张,计算与情网采样率最接近的图像序号。
各向异性滤波:在材质转化中可能会导致过模糊,因为我们在建立多级纹理时,我们通常将各向同性的高分辨率纹理进行滤波,这种方法在期望的滤波器是各向异性的时候会引起模糊。而通过预计算各向异性的滤波构造一个ripmap来替代mipmap。
阴影(Shadow)
定义:在一个场景中,每个可能被照到的物体称之为接受者;
若从$P$点看不到光源的任何一部分则$P$称之为本影(umbra),看得到一部分称之为半影。
半影和本影称之为阴影:即对于任意阴影中的一点,光源中至少存在一点会被遮挡。而挡住光源到阴影区域的物体被称为遮挡物(occluders)。
阴影的类型:
附着阴影(attached shadows):发生于接收者(receiver)的法向背离光源方向时。.
投射阴影(cast shadows):发生于接收者(receiver) 的法向朝着光源方向,但光源被遮挡物(occluder)所遮挡时。
自阴影(self shadows):是一类特殊的投射阴影; 对于自阴影,接收者(receiver)和遮挡物(occluder)来自于同一物体。
阴影的重要性
场景中物体的相对位置关系和大小关系;理解复杂的接受者的几何形状;理解遮挡物的几何形状。
硬阴影(与之相对的软阴影可以视作取反):
- 硬阴影通常会将“阴影”理解为-一个二值的状态:每个点要么在阴影中,要么不在。这样的理解对应的其实是硬阴影(Hard shadows),硬阴影由点光源产生。然而,点光源在实际中并不存在,并且硬阴影会给图像带来一种相当不真实的感觉。注意到,即使是我们日常生活中最常见的光源——太阳,也具有很显著的角展(angular extent),产生的也并不是硬阴影。
- 尽管如此,由于点光源在图形学中容易被模拟:我们将会看到,对硬阴影的计算存在不少实时算法(real-time algorithms)。在有限展度(finite extent)的光源(通常是面光源)下,确定本影(umbra)和半影(penumbra)区域通常比较困难,因为这意味着需要求解3D空间中的可见关系(visiblity relationships),而这是个非常困难的问题。
平面阴影
当物体的阴影被投射到平的表面时,会产生平面阴影(最简单的)。
阴影投影:在阴影投影方法中,三维空间中的物体需要被绘制两次已实现阴影效果,即使用一个矩阵将遮挡物的表面的点投影到需要计算阴影的平面上,称之为Projection Matrix。为了绘制阴影,可以简单的利用之前的矩阵将三维场景中的物体投影到目标平面,然后对投影物体使用暗色并去除光照进行绘制,但是要求接受者必须是平面,且无论是否发生改变,每一帧的阴影都需要重新绘制。
曲面上的阴影:用阴影图像作为投影的纹理,从光源作为视点,之后看得到的被绘制,看不到的就是阴影。
可能产生的两种错误阴影:
antishadow:光源位于最上方物体之下,算法会生成错误的阴影;
- false shadow:当物体位于接受平面背对光源的一方时,也会导致产生错误的阴影。
E. 阴影的绘制算法:阴影域,阴影图算法
阴影域算法:
- 将某一点想象成点光源,同时想象出一个三角形平面,将三角形平面的三个顶点和点光源相连接并无限延长,就可以得到一个无限的三棱锥;
- 只要任何物体的任何一部分在我们构造的三角形面和点光源之间的三棱锥内,那只要切去顶端的三棱锥,剩下的部分处于阴影区域。于是我们将这个被切去顶端的三棱锥称之为阴影域。
- 假设视点在所有的shadow volume之外,我们维护一个计数器,其初始值是,每当从视点射向目标像素的射线进入到一个shadow volume中,计数器$+1$,射出时计数器$-1$;这样我们只需检验当射线到达交点时计数器是否大于0,若大于0则交点位于阴影中,否则不属于阴影区域。
- 优缺点:
- 优点:
- 首先使用通用的图形学硬件实现,而且仅需要一个缓存模板;
- 而且他不是基于图像,故shadow volume算法并不会产生因采样和分辨率带来的各种问题,从而可以在任何地方生成正确和清晰的阴影;
- 缺点:但其不足主要是体现在性能方面(因为其面片通常比较多)。
- 优点:
- 具体实现时,我们会使用模板缓存:
- 首先清空模板缓存,然后将整个场景绘制到帧缓存中,因为绘制只使用环境光分量和发光分量,并获取相应的颜色消息和深度信息;
- 接着关闭颜色缓存的写入和深度监测,并绘制所有shadow volume的正面。在这个过程中,如果一个像素其深度值小于之前的z-buffer,则对应模板缓存上的计数器++;
- 然后类似于前一步骤,按照SV的反面绘制一遍,只是每发现一个小于则-1;
- 最后将整个场景根据模板缓存的信息绘制漫反射分量和高光分量:缓存为0的像素才绘制,已实现阴影效果。
阴影图(shadow map):基于$z-buffer$的通用算法,快速计算阴影;
思想:以光源作为视点位置,使用$z-buffer$算法绘制场景获得其阴影图。并将其结果用于任意场景的阴影绘制。
过程:
- 通过使用深度缓存,获得从光源触发到任意一个方向最近点的距离,并以图像形式存储下来,称之为阴影图;
- 然后进行第二次绘制——在进行绘制时,沿视点向屏幕每个像素发出光线并求与场景中物体的交点,再使用阴影图判断该点是否位于阴影区域:若该交点到光源的距离大于阴影图上对应点所存储的深度值,则该点位于阴影中,否则不在阴影中。
优点在于绝大部分硬件可以直接支持算法,且特别快,其可以在常数时间内完成。
缺点:
- 但其基于图像,所以其质量会受到阴影图分辨率,$z-buffer$的数值精度影响;
- 且在距离比较的误差值太小时,可能在物体表面产生莫尔干涉条纹,太大的时候会产生物体漂浮的感觉。
计算机动画(Animation)
动画和计算机动画
动画是一门通过在连续多格的胶片上拍摄一系列单个画面,从而产生动态视觉的技术和艺术,计算机动画采用连续播放静止图像的方法产生物体运动的效果。其分类为二维动画(图形分类和形状混合);三维动画(关键帧动画,变形物体的动画和过程动画,人体动画等)
形状混合
二维图形动画,都可以简化为多边形处理,二维形状混合,实际上是在两个关键帧的多边形之间插入中间多边形。二维形状混合需要解决的关键问题包括:顶点对应问题和对应顶点之间的插值路径问题。
关键帧动画
源于动画制作,关键帧为动画的关键画面。在计算机动画当中,中间帧的生成由计算机生成,插值计算代替了设计中间帧的动画师,而影响画面图像的参数都可以成为关键帧的参数。
其需要解决的问题是:给定一物体运动的轨迹,求物体在某一帧的位置。而运动轨迹可以用参数样条表示,如直接对参数空间进行等间隔采样,势必引起运动的不均匀性。故需对样条进行弧长参数化。
变形物体的动画:
由于刚体动画过于生硬,所以需要对物体进行形变,方法主要为$barr$变形,轴变形,面变形(参数曲面的动态自由变形),和自由体变形方法。
关节动画和人体动画
因为人体运动过程中自由度高且复杂,人的肌肉表情也会变形,且涉及运动学和动力学。
智能生物的行为动画
图像变形
任意给定两幅不带任何几何信息的图像$S$和$D$,将$S$自然变形为$D$的过程。其焦点问题是找到$S$和$D$之间的各像素点之间的对应关系,如何处理颜色渐变和如何使得变形更加自然和真实。
直接变形法
将$S$和$D$上的像素按照空间位置关系建立对应关系,在每对像素之间对其颜色进行插值,已得到变形的中间帧图像。
基于特征的图像变形关系
像素的对应关系是通过分析图像的特征建立起对应关系,在对应关系的基础上,将集合变形和颜色变形结合。
Beier &Neely算法:
由多个控制向量,每个控制向量线性加权求和即可(算法略)
2D形状混合:
关注与如何在两个多边形之间插入中间的混合多边形,使变化尽量合理和自然。解决的问题为顶点对应问题和对应顶点之间的插值路径问题。
顶点插值法
给定具有相同顶点个数的两个多边形:并且顶点之间已经有了对应关系,然后就使用对应插值公式(公式略)。
几何内在参数法
边向量混合法
对多边形的边向量插值:
- 若有$a$和$b$构成的三角形的而两个底角中有一个非锐角,那么直接进行线性插值;
- 若两个底角均为锐角,则使用二次bezier曲线插值;并且要保证多边形的封闭性,即其和为0。
FFD方法
将变形物体嵌入一个简单柔软的实体中,这个包含嵌入物的实体的变形,是嵌入物发生相应的变形。
- 主要为以下几个步骤:先构造一个足够大的三参数自由体,然后将想要变形的物体嵌入到自由体重,各点都可以对张量积bezier体求反参数,然后通过bezier体改变控制顶点作变形了最后对变形体上的各点由参数按新的控制顶点计算点变形后的位置,得到新的变形体。
- 直接操作FFD的算法为DFFD,在DFFD中,用户可以直接选定物体上的一点,并且给出其想要变换到的目标位置,然后算法可以自动计算出控制点需要的变换。
- DFFD优点:为方便用户操作;
- DFFD缺点:但是存在无法块计算控制点的目标位置,以及支持实时交互的动画变形控制。
- 这里涉及到多点约束条件的分解:一个包含h点约束条件下的DFFD问题可以分解为h个单点约束条件下的DFFD问题依次串联而成。故可以得到显式解;
- 基于权值修改:也可以修改权值实现
非真实感绘制
非真实感图形
也称风格化绘制,其主要途径为创作媒介的计算机模拟和创作方法和风格的计算机模拟,目的是为了生成和照片一样的真实图像效果,源于真实,超越真实,使用抽象的模型传达信息,重要加强无关弱化或者去除。应用在于艺术,科学成果可视化,技术产品图示教育等。
创作媒介的计算机模拟:
研究对象:模拟笔墨纸等;方法为:模拟媒介的微观几何结构和模拟和滑键微观物理规律,构建方程或函数等。
铅笔画:
作画材料略,绘制单元为笔画
水彩模拟:
研究纸对液体的流动和色素沉积效果,将纸分解为单元,使用细胞自动机(这是啥)求解,模拟效果为笔画轮廓变深、液体回流,水流扩散风格等
水墨风格模拟,
建模为骨架模型和分叉模型。
总结下来,创作媒介的计算机模拟:模拟自然创作媒介,主要基于物理建模;-多使用真实参数,但有时应用虚拟的参数可以产生真实世界无法出现的增强效果;-效率非常重要:要求实时处理;可以在动漫创作中进行辅助创作,提高效率。今后可能发展方向:提高常用创作媒介的仿真程度;尝试新的创作媒介模拟。
基于图像的非真实感绘制:
目的是模拟真实艺术创作的效果,大多数创作都是画家一笔一笔画出来的;研究思路为基于笔划绘制,笔划建模和笔划布置。点画图和马赛克图;图像类比。
总结下来:从模拟艺术风格的效果和画家艺术创作的过程入手进行研究;自动的算法可以生成形似的效果,结果可以体现出对应画种的基本特征;用户交互可以提高作品的艺术感程度:如用户输入画面布局和创意。可能发展的方向为针对画面的布局和整体艺术特征进行研究基于学习的艺术家创作特征提取与应用。
基于物体模型的非真实感绘制:
主要研究的是素描,钢笔画等线条画,重点在于连续的三维模型特征提取和表现,基本思路是考察人们对三维模型的额感觉,目前应用为主曲率分析。可能发展方向为在视点变换和物体放缩时的连续性保持以及大规模三维场景的非真实感绘制
基于视频的非真实感绘制:
是将一个真实拍摄的视频转换为某种艺术风格动画,主要研究思路为基于交互的视频高层结构信息分析和基于底层的光流算法。这个专题难点在于艺术风格绘制下的时空连续性保持是难点,且数据量过大,处理效率低,因此可能发展方向为稳定搞笑的视频结构分析和利用GPU和多核CPU并行视频处理。
基于大规模数据的非真实感绘制(略)
基于图像的图形技术
传统的图形技术
是几何建模->光照建模->光线跟踪或辐射度绘制,而基于图像的图形技术是从图像到图像,避开了复杂的几何建模过程。而现代是从图像到图像,避开了复杂的几何建模过程。因此出现了新的图形流水线:由场景建模、光照模型和rendering转变为了已有图像图形视频处理。即利用获取的BTF,BRDF和动态视频进行相应的处理和渲染是当前图形学的主要特征。
基于图像的绘制技术:
视图插值
问题来源虚拟博物馆/Quick Time VR(三维场景采样,在采样点处生成圆柱环境映照。用离用户视点最近的采样点处的环境映照生成画面)。
通过视图插值我们可以产生非常逼真且视觉效果很好的图像,尽管其算是二维图像变化,但是其有效图像变形能体现三维世界的物体自然过度。
平行视图插值
通过移动相机代替以动物体来产生同样的两幅图像,称之为平行视图;若能够产生平行视图,那么线性图像插值能够生成新的投影视角,我们将这种形式的投影矩阵的相机/视点称为平行相机或平行视点,对其进行线性插值。
层次图像存储
考虑到离视点较远的景物,在前后帧画面,上的投影往往变化不大,一个自然的想法是将景物在前一帧画面中的投影图像存储起来,并以之为纹理映射到一-个四边形上,来近似取代该景物在后续画面上的绘制。由此可大大提高绘制效率。
全景函数造型技术
全景函数是一个参数化函数,定义空间任一一点处任意时刻的波长范围内的可见信息(函数略),这个函数事实上刻画了场景中任一一点的环境映照。基于图像绘制问题可以描述为:给定全景函数的离散样本几何,基于图像绘制技术的目标是生成全景函数的一个连续表示。后来改进为光场函数。
生成投影矩阵相对应的视图:
预变形->图像变形->后变形。
基于图像的漫游技术
从单张照片、油画、图片作动画而非新的idea,如固定画面的北京,移动画中 的任务或动物,对图像作几何变形等。这个技术在不知道三维场景的几何结构下,从其二维图像生成计算机动画的情况下困难但有意义。其涉及到的关键是画面的尽头的确切位置很难确定,且由于缺乏三维信息,需要人工指定。
色彩迁移
将已有图像的色彩传递到目标图像,对灰度图像彩色化。
基于graph-cut彩色化原理:交互式操作,用户标记若干颜色,使用graph-cut进行分割(快速分离出需要着色的区域)并进行快速填充;
基于YIQ颜色空间;
内容敏感的图像缩放
基本想法
为了适应不同大小、长宽比的显示器,图像会不可避免的被变形。而这种变形希望在缩放过程尽可能的保持图像中的重要性区域的比例
相关技术
图像中重要区域检测。接缝雕刻的不足:容易破坏物体结构,且处理速度较慢。后续由基于可伸缩性图的缩放算法。
处理方法
在所有方向上的处理有:
基于网格变形,但是容易产生接近水平或垂直的网格线,不能很好地分布扭曲。
后续由基于共形能量的方法。共形能量方法优点能够更好的在各个方向上分布扭曲,采用灵活的共形约束方式,有利于更优化地分布扭曲且更好地保持整体特征且速度较快。
网格参数化和几何图像技术
网格参数化技术包括多面体参数化,球面参数化和平面参数化。重点在于几何图像技术和复杂拓扑下的网格切割路径选取算法。
参数化原因
由于网格曲面模型灵活高效(相较于隐式曲面,参数曲面之类的),在工业界广泛使用。
网格参数化关注于如何在网格曲面和给定参数域之间建立一个映射关系,是一个基本技术。
应用
纹理映射(需要尽量保角和均匀平面参数化);网格重剖;几何变形;形状分析;图像矢量化。
网格参数化的分类
多面体参数化,球面参数化和平面参数化。
多面体参数化
方法是由将一张复杂的网格映射到一个与他同拓扑的相对简单网格上,这个简单的网格是所谓的基网格;用基网格作为参数域实际上就是将原网格曲面分割为很多面片,每个面片对应基网格上的一个面。第一步需要建立一个与原曲面同拓扑的基网格,可以通过将原网格进行化简;然后在原网格和基网格之间建立映射关系(具体方法略)。优点为变形小应用广,但是由于不同面对应不同的参数域,因此在参数域的交界(即面的交界)
球面参数化
对于亏格为0的封闭网格,我们可以将网格的霉变想象成一根皮筋,若他套在塑料球外面,则可以将其包住,这样就建立了原网格到球面的映射关系。
参数化方法为边折叠操作将网格化简化为一个凸多面体,然后使用中心投影对这个凸多面体建立一个球面映射,从这个初始映射触发,通过点分裂操作将图多面体还原为原始网格,每还原一个点都计算出该点的球面参数,最终生成原网格的球面映射。
其核心问题是:如何保证参数化的网格不产生边翻转(即为一满射)。
其缺点为对网格拓扑有亏格为0的限制,否则需要切开,切割路径也很复杂,因此切割不如之后的直接映射到平面。
平面参数化
与参数曲面一样,我们同样希望将网格曲面映射到平面上一个有限的区域内,如果曲面与圆盘同拓扑且有界,我们可以很容易将其拍到平面上,同时利用方法减小变形。
其方法有很多:基于顶点坐标表示的方法,基于角度表示的方法和基于圆包的方法(Circle Packing),这些方法都关注如何让参数化前后的网格扭曲尽量减小。
对于拓扑结构复杂的曲面,我就必须将曲面切开,传统方法是将曲面分割为若干与圆盘同拓扑的面片,再将么个面片映射到平面上的一个片,最后利用atlas方法把这些片合理的分布到一个指定的区域内(一般为正方形)。
这种方法主要应用在纹理映射中:分片越多变形越小,分片越少变形越大,我们需要将整个曲面映射为一片且减少变形,而理论上任何一个联通的二流形曲面都可以找到一条切割路径将其曲面展开,使之与圆盘同拓扑,继而将其映射到平面上。
其重点是切割路径的选择,而切割路径的选择分为两步:
- 找出网格上的突起位置作为切割点;
- 然后找到一条连接有所有切割垫的尽量短的路径作为切割路径,若存在边界则必须与边界相连。
回路到骨架的收缩
回路上每条边都被制定一唯一标识,往内部传播。由于在收缩过程中会出现锯齿状因此届时对steiner和terminal之间的路径用最短路径代替
切割点的计算:
切割点的选择
可有选择所有点的局部曲率,选择大的作为切割点,或者将曲面方程划到单位圆中,再在参数域上找到变形最大最明显的一些方法。切割路径实际上就是一个网的Steiner树(在网上连接若干个给顶点的最短树),其为NP问题,只能近似求解。
切割方法
采用增量法,每增加一个切割点,就把该点到当前切割路径的最短路径加入当前切割路径中。
另有一个通过所有短点寻找回路的启发式算法,启发策略为回路长度最短,通过对回路的收缩,得到一个端点的骨架,最后将骨架拉直进行切割路径输出,其需要进行回路自交检测。
回路的计算,我们需要构造一个完全图(由所有端点和他们之间的最短路径做为权重构成),然后求出一个MST,沿MST遍历一圈可以得到一个有向回路,回路中包含重复则去除重复端点。
几何图像技术
关注方向
如何将一个二维网格流形使用均匀参数域的图像来进行表示。其目的是通过几何图像技术,使得许多图像处理技术能够直接应用到网格模型上,其技术核心是平面参数化。
构造过程
- 先将连通的二维网格流形切割并展开成为一个与圆盘同胚的网格;
- 然后将展开后的圆盘进行平面参数化,参数化到个正方形区域;
- 最后对正方形区域进行均匀采样,计算采样点对应原网格模型上的坐标及法向量,存储为“几何图像”。
记录法向量的原因
由于在没有法向量的情况下,会对几何图像进行一定程度的压缩,将会严重影响绘制网格的模型质量,故需要法向量信息;且有了法向量信息,即使几何图像进行了压缩,人可以绘制出高质量的网格模型