量子计算9 发表于 2022-5-7 14:59

纹理映射,辐射度技术与实时绘制技术

纹理映射

纹理(texture)通常指物体的表面细节



墙面纹理



地面纹理

纹理映射技术给出了定义表面上任意点属性的一种方式

[*]漫反射率
[*]镜面反射率
[*]透明度
[*]折射率

https://www.zhihu.com/equation?tex=I_d%3DK_dI_ecos%5Calpha
两类最常使用的纹理

[*]颜色纹理



[*]几何纹理



圆环面

颜色纹理

确定表面上颜色纹理的两种方法
预先建立表面的纹理模型
纹理映射:

[*]建立表面上的每一点和一已知图像上的点的对应关系
[*]取图像上相应点的颜色值作为表面上各点的颜色值



[*]采用景物表面的参数化表示来确立表面的纹理映射坐标,即可实现纹理图像在景物表面的映射
[*]景物表面的参数化表示为f(u,v)
[*]纹理图像表示为T(s,t)
[*]建立景物表面参数空间(u,v)和纹理图像参数空间(s,t)之间的一一对应关系


示例



纹理映射

几何纹理


[*]凹凸映射(bump mapping)
在不改变物体宏观几何的前提下,模拟物体表面粗糙的、褶皱的、凹凸不平的光照效果
在应用光照明模型计算景物表面光亮度时,对景物表面法向进行微小的扰动
方法:
物体表面S由参数方程S=S(u,v) 表示
S上的任意一点(u,v)的法向n=Su×Sv
沿着表面S的法线方向叠加一个微小的扰动量P(u,v)定义了一张新的表面S’

https://www.zhihu.com/equation?tex=S%27%3DS%28u%2Cv%29%2BP%28u%2Cv%29%5Cfrac%7Bn%7D%7B%7Cn%7C%7D
新表面的法向可用 n’=Su’×Sv’ 计算

https://www.zhihu.com/equation?tex=n%27%3Dn%2B%5Cfrac%7BP_u%28n%27%2CS_v%29%7D%7B%7Cn%7C%7D%2B%5Cfrac%7BP_v%28S_u%27%2Cn%29%7D%7B%7Cn%7C%7D
在计算表面S的光亮度时,取新表面的法向量n’取代原光滑表面法向量n,生成物体表面的凹凸效果
扰动函数P(u,v)既可解析定义,也可通过二维图像定义



凹凸映射



凹凸映射


[*]法向映射(normal mapping)
利用法向纹理保证高质量的表面细节复现
借助低精度模型和一个法向纹理,获得高精度模型的绘制效果
先计算高精度模型的法向,将其保存在法向纹理中,再将法向纹理映射到低精度模型上进行光照计算



法向映射


[*]位移映射(displacement mapping)
利用纹理改变物体表面上点的几何位置,获得很强的深度感和细节
依据与表面上点所对应的纹理值,沿表面法向偏移该点的几何位置
能产生很强的深度感

[*]自遮挡
[*]自阴影
[*]轮廓
计算代价大

[*]与凹凸映射、法向映射相比



纹理反走样




纹理走样示例

纹理走样原因: 欠采样


常用纹理反走样方法


[*]前置滤波方法
[*]超采样方法
[*]Mipmap方法
前置滤波方法


[*]确定屏幕像素P上可见的景物表面区域A
[*]将区域A直接映射到纹理空间区域T
[*]取区域T内的所有纹理像素颜色值的平均作为景物表面区域A的平均纹理颜色
[*]代入光照明模型,计算出像素P应显示的光亮度值



前置滤波



前置滤波效果

超采样方法


[*]将屏幕像素P的四个角点分别映射到纹理空间,得到四个纹理像素值
[*]将上述四个纹理颜色值取平均作为像素P所对应的可见表面区域的纹理颜色



超采样



超采样效果

Mipmap方法

MIP来源于 拉丁语“multum in parvo”,意为“many things in a small place”
目前应用最广的纹理反走样算法之一
通过预先计算并存贮原始纹理图像的一组多分辨率版本,能显著地节省纹理反走样的计算量



存储一组多分辨率的版本

预处理:

生成一个由不同分辨率图像构成的纹理图像序列
从原始纹理图像出发,生成一个其分辨率为原始图像1/4的新的纹理图像版本
新版本中的每一个像素值取为原始图像中相对应的四个像素颜色值的平均
类似地基于所得到的新纹理图像版本生成一个更低分辨率的、尺寸更小的纹理图像版本
这一过程一直持续到最后生成的纹理图像仅包含一个像素为止



预处理

映射阶段:

[*]屏幕上的每一像素内的可见表面区域被映射到原始纹理图像上的一块区域
[*]估计该区域所覆盖的原始纹理图像中像素的个数并以此作为选取适当分辨度的纹理图像版本的一种测度



[*]从预先构造的纹理图像序列中找出其压缩率最接近当前纹理像素与屏幕像素比率的两个纹理图像
[*]在相邻分辨率的两纹理图像上计算当前屏幕像素映射点的纹理颜色值
[*]根据两纹理图像对原始图像的压缩率在所得到的两个纹理颜色值间取加权平均,作为当前屏幕像素可见表面区域的颜色值



利用OpenGL实现纹理映射的三个主要步骤


[*]生成纹理数据
[*]将纹理数据载入纹理内存
[*]将纹理数据映射到物体表面
<hr/>辐射度技术

颜色辉映


直接照明与辐射度效果对比


直接照明效果

艺术家在此场景中精心放置了三类光源以模拟真实的光照效果:

[*]聚光灯:能产生阴影,放置于 窗外
[*]泛光:缺少泛光,房间内所有可见但未被光源直接照射的表面会是全黑的
[*]点光源:不产生阴影,可减弱泛光产生的“平板”效果
辐射度效果

采用辐射度算法绘制, 光效未经艺术家特别处理。
场景中仅包含一个面光源,即放置于窗外的天空。
与直接照明效果相比,主要区别在于:

[*]房间有发光效果
[*]地板上软影清晰可见,房间周围可观察到细微的光效
[*]地毯上的红色辉映到灰墙上,产生淡淡的温暖的感觉
辐射度技术

原理

光是一种辐射能,在一个封闭环境中,场景中的光能经过表面之间的反射和透射,最终达到平衡状态
场景中各表面的光亮度实际上是场景中光能分布的反映
前提:针对理想漫射环境
辐射度

单位时间内从物体单位表面积向外辐射的光能

[*]物体作为光源自身向外发出的能量
[*]物体表面接受来自周围场景表面传递给它的能量后,再次反射出去的部分


辐射度系统方程

求解场景中物体表面的辐射度:
将场景中每一物体的表面分解为互不重叠的小面片(patch)Ai(i=1,2,…,n)
(前提:假设每一小面片的辐射度和漫反射率均为常数)
(小面片大小可以不一致,一般分解为方形,也有分解为三角形等其他形状的)
场景表面分解示例



分解为互不重叠的小面片

对于每一小面片,成立:

https://www.zhihu.com/equation?tex=B_i%3DE_i%2B%5Crho_iH_i

[*]https://www.zhihu.com/equation?tex=B_i :辐射度
[*]https://www.zhihu.com/equation?tex=E_i :自身拥有的辐射度
[*]https://www.zhihu.com/equation?tex=%5Crho_i :漫反射率
[*] :周围场景面片入射到单位面积上的光能,是周围面片辐射度的函数
设面片为一周围场景面片,由辐射度定义,向外辐射的总的光能为 https://www.zhihu.com/equation?tex=B_jA_j ,其中一部分到达
设到达的光能占向外辐射的总光能的比例为 https://www.zhihu.com/equation?tex=F_%7Bji%7D (称为到的形状因子),
则从周围环境面片入射到的总光能为:

https://www.zhihu.com/equation?tex=%5Csum_%7Bj%3D1%5C%5Cj%5Cnot%3Di%7D%5EnF_%7Bji%7DB_jA_j
入射到面片单位面积上的光能则为:

https://www.zhihu.com/equation?tex=H_i%3D%5Csum_%7Bj%3D1%5C%5Cj%5Cnot%3Di%7D%5EnF_%7Bji%7DB_jA_j%2FA_i
由于 https://www.zhihu.com/equation?tex=A_jF_%7Bji%7D%3DA_iF_%7Bij%7D,可以得到 :

https://www.zhihu.com/equation?tex=H_i%3D%5Csum_%7Bj%3D1%7D%5EnF_%7Bij%7DB_j
于是可以得到辐射度系统方程 :

https://www.zhihu.com/equation?tex=B_i%3DE_i%2B%5Crho_i%5Csum_%7Bj%3D1%5C%5Cj%5Cnot%3Di%7DF_%7Bij%7DB_j%28i%3D1%2C2%2C...%2Cn%29

https://www.zhihu.com/equation?tex=E_i%2Cr_i%2CF_%7Bij%7D 都是已知的,那么就可以得到一个关于n 个 辐射度变量的线性方程组


辐射度系统方程举例 :










辐射度算法



表面分割

均匀网格化(uniform meshing)





               参照结果                                 均匀分割绘制结果



[*]A: 块状阴影
[*]B: 特征丢失了
[*]C:马赫带
[*]D:着色不连续
[*]E:不连续



低分辨率网格及绘制结果          高分辨率网格及绘制结果

自适应网格化(adaptive meshing)



绘制结果                                                                     自适应网格剖分         

形状因子计算

计算和确定场景面片之间的形状因子是求解辐射度系统方程的关键
微面元-面片形状因子计算公式

https://www.zhihu.com/equation?tex=F_%7BdA_i-A_j%7D%3D%5Cint_%7BA_j%7D%5Cfrac%7BV%28dA_i%2CdA_j%29cos%5Ctheta_icos+%5Ctheta_j%7D%7B%5Cpi+r_%7Bij%7D%5E2%7DdA_j
遮挡因子(visibility term):

https://www.zhihu.com/equation?tex=V%28dA_i%2CdA_j%29%3D%5Cbegin%7Bcases%7D+1%2C%26if%26dA_i%5C%2Cand%5C%2CdA_j%5C%2Care%5C%2C%5C%2Cmutually+%5C%2C%5C%2Cvisible+%5C%5C+0%2C%26otherwise++%5Cend%7Bcases%7D
几何解释:
在微面元dAi 上建立一个单位半球,则dAi对周围面片Aj的形状因子等于Aj投影到半球面后,其投影区域再次投影到底平面所形成的区域Ap的面积与单位圆的面积的比率。

https://www.zhihu.com/equation?tex=F_%7BdA_i-A_j%7D%3D%5Cfrac%7BA_p%7D%7Bp%7D


面片-面片形状因子计算公式

https://www.zhihu.com/equation?tex=F_%7BA_i-A_j%7D%3D%5Cfrac%7B1%7D%7BA_i%7D%5Cint_%7BA_i%7D%5Cint_%7BA_j%7D%5Cfrac%7BV%28dA_i%2CdA_j%29cos%5Ctheta_icos%5Ctheta_j%7D%7B%5Cpi+r_%7Bij%7D%5E2%7DdA_jdA_i
若两曲面片互不遮挡,可通过斯托克定理把双重面积积分变换成双重曲线积分计算,但对于存在遮挡的情况,极难得到解析解,此时,常采用数值方法求解

[*]半立方体方法
[*]光线采样方法
半立方体方法

在微面元Ai处建立一个半立方体

[*]对于半立方体表面上每一网格,预计算微面元Ai到该网格的形状因子
[*]以微面元Ai为投影中心将面片Aj经消隐后投影到半立方体表面上
[*]将所有为Aj投影所覆盖的网格的形状因子相加


半立方体表面网格形状因子的预计算(可做成查找表存贮备用)



https://www.zhihu.com/equation?tex=%5CDelta+F%3D%5Cfrac%7By%7D%7B%5Cpi+%28y%5E2%2Bz%5E2%2B1%29%5E2%7D%5CDelta+A
方程求解

理论上说,辐射度系统方程可采用任何一种线性方程组的求解算法来求解

https://www.zhihu.com/equation?tex=%5BF_%7Bij%7D%5D%5BB_j%5D%3D%5BE_j%5D

[*]直接求逆
高斯消去法(Gauss elimination)

[*]迭代法
Gauss-Seidel迭代—Gathering
Southwell迭代—Shooting
Gathering

对于每一面片,收集场景中其它面片对它辐射的光能,更新该面片的辐射度




Shooting

选取辐射源面片(具有最大待辐射光能),将其辐射光能发送到其他面片,更新各面片的辐射度。
选取新的辐射源面片


逐步求精辐射度算法


[*]通过迭代过程求解辐射度方程
[*]每次迭代相当于一次光能传递过程
[*]每次迭代后,采用场景中各面片的当前辐射度值绘制整个场景
[*]经过多次迭代后,各面片的辐射度值逐渐逼近方程组的解
[*]可用于对场景进行交互预览
对于迭代过程中的每一步
选取辐射源面片,计算辐射源面片到周围所有面片的形状因子
for each iteration {
       select a source patch i
       calculate Fij for all receiving patch j
       for each patch j{
             update radiosity of patch j
             update emission of patch j
      }
       update the emission of patch i to zero
}逐步求精辐射度算法:示例

[*]随着迭代过程的进行,可看到光在场景中传递
[*]墙上和地上的每一小面片均为正方形
[*]从左至右分别对应1、2、3、16次迭代的情形


效果图示例:




<hr/>实时绘制技术

利用计算机快速生成三维场景的真实感图形:

[*]与图形硬件发展和人们对人机交互的需求密不可分
[*]图像绘制的速度采用帧频(单位为帧/秒)来衡量
关键:

[*]如何充分发挥图形硬件和图形算法各自长处,在绘制速度和图形质量之间取得平衡
图形绘制流水线


[*]常用三维图形绘制由一系列顺序的过程组成,这些过程已可部分或全部采用硬件实现
[*]它们连接在一起称为图形绘制流水线
三维图形绘制流水线一般分为五个阶段

[*]场景描述
[*]图形变换
[*]扫描处理
[*]绘制/光栅化
[*]屏幕显示
实时绘制技术

图形硬件、硬件驱动程序、图形API及应用程序间的关系


常用实时绘制技术


[*]细节层次(LOD)技术
[*]网格压缩传输技术
[*]遮挡剔除技术
[*]基于图像的绘制(IBR)技术

LOD技术

细节层次模型是以不同精度刻画物体几何细节的一组模型
基本思想:
根据物体在画面上的视觉重要性选取适当细节层次绘制该物体


自动生成物体的细节层次表示是细节层次技术的重要研究内容
一般地,物体的细节层次表示可由网格简化算法来完成

[*]基于一定误差度量准则,通过几何元素删除操作删除复杂几何中相对于物体外观而言次要的几何元素
[*]重新对物体进行较低精度的采样,以生成物体的较低精度的细节层次表示
[*]有的能保持物体的拓扑结构不变,有的不能
网格简化操作示例:边塌陷(Edge Collapse)

[*]通过将两个点变为一个点来删除一条边
[*]对体模型来说,该操作删除2个三角形、3条边和1个顶点
[*]过程可逆,通过顺序存储操作信息,可以从简化模型重构出复杂模型



u塌陷到v,删除了三角形A和B及边uv

由网格简化生成的飞机的三个细节层次表示


网格压缩传输技术

场景绘制的速度受到场景中三角形数目的制约,在绘制一个三角形时,必须将其全部三个顶点的信息传送到图形硬件。
为避免同一顶点信息的重复传送,大多数图形API均采用三角形带和三角形扇等复合三角形结构进行传输,以充分利用图形硬件的有限带宽。
三角形带(Triangle Strips)



n个顶点的顺序三角形定义为顶点序列:{},其中三角形 i 为 https://www.zhihu.com/equation?tex=%CE%94v_i+v_%7Bi%EF%BC%8B1%7D+v_%7Bi%EF%BC%8B2%7D
三角形扇(Triangle Fans)



n个顶点的顺序三角形定义为顶点序列:{},其中三角形 i 为 https://www.zhihu.com/equation?tex=%CE%94v_1v_%7Bi%EF%BC%8B1%7Dv_%7Bi%EF%BC%8B2%7D

[*]采用类似于三角形带或三角形扇这样的复合结构
[*]将把处理与传输m个三角形的代价从3m个顶点降到(m+2)个顶点。
如果应用程序的瓶颈为填充率时,很难使用这种方法提高系统性能

[*]填充率:每秒可填充的像素数量
给定一个任意的三角形网格,最好能快速、高效地将其分解为三角形条带
给定任意的三角形网格,如何获得最优的三角形条带问题已被证明为NP完全问题,必须使用启发式方法获得最接近的条带数目
已有多种方法可自动生成三角形带:如改进的SGI三角形带生成方法
由三角形带/三角形扇/三角形混合表示的物体示例:


遮挡剔除技术

在对场景作取景变换之前剔除场景中对于当前视点不可见的某些物体的整体或局部,从而加速场景的绘制
为实现遮挡剔除,需要首先对物体进行可见性检查

[*]物体的可见性检查一般在场景数据组织阶段由计算机CPU计算完成,不涉及到图形硬件
[*]针对当前视点,预计算其可能可见的所有面片的集合

IBR技术

以待绘制的场景的一系列二维图像作为输入,通过将其画面像素重新整合来生成在新的视点和新的视线方向上的场景画面。


全景相机拍摄的全景图




优点

[*]无需进行复杂的场景几何造型即可实现对场景的浏览、漫游
[*]绘制计算量与场景的几何复杂度无关,而仅与所需绘制的画面分辨率有关
缺点

[*]仅适用于静态场景,用户无法与场景中的景物进行实时交互
[*]绘制质量在很大程度上取决于原始图像的采样数目和相应的插值方法

实时光线跟踪

实时光线跟踪已经成为可能
计算机计算速度的快速提升、图形硬件处理能力的高速发展以及计算机网络技术的成熟
光线跟踪在灵活性、连贯性、并行性、遮挡剔除、着色效率与质量等方面均有较大的优势
与传统的基于图形绘制流水线的光栅化算法相比
OpenRT应用示例






<hr/>非真实感图形绘制技术

非真实感图形绘制已逐渐成为计算机图形的研究热点之一
Non-Photorealistic Rendering,简称NPR,又称风格绘制(Stylistic Rendering)
画面不具有照片真实感,而呈现手绘风格


NPR主要特点


[*]表现出艺术特质


[*]对所需绘制的场景或物体加以抽象,去除不必要表现的冗余信息
[*]以艺术家的眼光,而不是仅仅从编程者的角度,来表现现实世界
2. 像人类艺术作品一样,具有不同的风格、品味,也包含类似的缺陷或不完美之处
3. 真实感图形的有效补充
主要分类


[*]素描(Sketching)
[*]卡通绘制(Cartoon Rendering)
[*]美术绘制(Painterly Rendering)






素描

一种富有表现力的信息交流方式
已渗透到现实生活的许多方面


绘制算法大体上可分为两类

[*]轮廓绘制(Silhouette Rendering)算法
[*]画影线(hatching)算法


卡通绘制

在强调物体轮廓的同时,利用明暗处理模型(通常为flat明暗处理),并结合物体材料颜色、阴影颜色等刻画物体外形、光效等


美术绘制

对传统的绘画风格,如油画、水彩画、蜡笔画等进行模拟

[*]基于物理的方法(physical simulation)
[*]自动绘画(automatic painting)方法

页: [1]
查看完整版本: 纹理映射,辐射度技术与实时绘制技术