实时渲染第7章——高级渲染

使用灯光、着色、透视可以让物体更逼真。
——Jhon Constable
Ground着色模型是在1971年发明的。Phong的镜面高光是1975年左右发明的。Blinn和Newell大约在1976年提出在物体表面使用贴图。这些技术是固定渲染管线的一部分,这些算法曾一度加速了图形学的发展。可编程的着色器的出现大大加速了很多的可能,现在的GPU可以计算任意的着色模型。这就从之前的“什么是可能的?”转变为“使用什么方法是最优的?”

了解一些和渲染相关的物理和心理学原理对于研究这些课题是很重要的。前一小节介绍了如何控制流水线的技术以及他们背后的基本理论。本节将会介绍渲染的一些科学基础。辐射理论讲会被第一个介绍,因为他是光的物理传播的核心领域。我们能够感知颜色纯属心理现象。这个将在颜色学里面讨论。一个着色模型包含两个部分:光源+有材质的模型。我们有一节会着重介绍有很多的中的变换可能。最后一部分会介绍实现着色模型的高效实现。

本节的所有的可能都是建立在一个基础的假设上。所有的光源都是从一个方向照射物体表面,对于区域光、间接光、环境光都没有考虑进去。第8章将会介绍更普遍的照明系统。

7.1 辐射学
第5章在介绍着色器模型的时候,粗略的介绍了辐射学理论。本章将会更深入的研究辐射学,并介绍一些新的特点。
辐射学主要用来度量电磁的辐射。这类的辐射包含一些光子,光子会根据情况的不同,而表现出粒子或者波的两种特性。仅仅使用光子的粒子特性能够应对很大的一部分的需求。虽然有些物理现象如果没有考虑光子的波特性的话就不能够建模,但是,早期的甚至是高质量的批处理渲染都忽略了这一点。

光子和波特性相关的属性不能够被丢弃,因为每个光子都有相关的频率和波长。这是很重要的一个属性,因为每个光子的能量和它的频率是成正比的,这个会影响光子和其他物体的交互。最重要的是,光子的波特性会影响很多的传感器,比如我们人眼睛的视杆和视锥。不同频率的光子如果被我们感知的话,就代表了不同颜色的光,当然也有没有被感知的光,这些都已经超出了人眼的极限。光子的波长λ(单位米),和频率ν(赫兹),以及能量Q(焦耳)之间的关系如下:
在这里插入图片描述
这里的c是光速((2.998×108 米/秒),h是Planck常数(6.62620 × 10−34 焦耳秒)。

电磁辐射会有一个频率和能量的范围。从ELF(低频率极限)辐射波到gamma射线。光在的波长在380到780纳米之间是可以被人类感知的,所以只有在这个范围的可见光子,才会被渲染。图7.1展示了可见的光谱。光子的能量和频率是成正比的。越绿的光子能量越高,越红的光子能量越低。

本节我们将讨论多种辐射单元和他们的之间的关系。他们的单元在表格7.1中列出:
图7.1
在这里插入图片描述

表7.1
在这里插入图片描述

在辐射学中,基本单元能量单元或者是辐射能量Q,是用焦耳度量的,简写为J。每个光子都有辐射能量,正如我们看到的,和他的频率成正比。比如,如果光子的波长是550纳米,通过公式7.1,计算得到它的能量为2.77*10的18方焦耳。

一个光源的辐射流量或者是辐射能量,用字母Φ 或者P表示,等于每秒发出的焦耳数量(dQ/dt)。瓦特W是每秒焦耳数的另外一个术语。原则上,衡量一个光源的辐射流量,是通过累加每秒释放的光子的能量来的得到。比如,一个电灯泡可能释放100瓦特的辐射量。看图7.2。
在这里插入图片描述
在第五章中简要的介绍了辐射度,它是辐射流量的密度,也就是(dΦ/dA)。辐射度的定义是和表面相关的,这个表面是空间虚拟的表面,最通常用的是物体的表面。在下一节的光学中,相应的照明量度是计算每平方米的光。
在之前的介绍中,辐射度E用来计算光流入一个表面,M用来表示流出物体的表面的量。通常的术语辐射流量密度有时候指代的是这两个,也就是辐射度以及出射度。第5章展示了如何使用辐射度计算理想平行光的照明度。这类的光源对于这类情况,如和灯的距离远远大于渲染的场景,这是个很好的近似。如上图的一堆玩具是在放假的另外一侧。灯泡的辐射度EL(用和光线垂直的平面计算)这个值近似等于常量(在这个例子中,在可见的辐射区域,每平方米的0.3瓦特)。

对于较近的光源(或者较大的场景),EL是不能是常量的。想象一个以灯泡为中心的球体,如7.2图的右上方所示,这个灯泡很小,我们假设所有的光线都是从中心点发射出来的。我们想计算一个特定方向(比如7.2图右上方的橙色箭头)的光源辐射是多少,我们构建一个较窄的圆柱体,它的轴是沿着橙色箭头的方向,它的顶是在灯泡的中心。让这个圆锥体和球体的相交,产生了一系列的切面,他们的面积也和距离灯光的距离的平方成正比。由于辐射流量穿过一个切面是相同的,所以辐射度会递减:
在这里插入图片描述

公式7.2中的系数是常量,他不会随着距离的变化而变化。
在这里插入图片描述

I,称为密度或者角度辐射度密度。如果距离r等于1,这个密度等于辐射度,换句话说,辐射密度等于在弥合的半径为1的球体表面的辐射量。半径为1的球体区域,可以用弧度来定义。一个角度从某种意义来说是一系列的方向。而弧的大小,等于和闭合的半径为1的圆相交的弧长。一个固定的角度是三维的——连续的方向集合,用立体弧度来衡量(简写为sr),它的定义为半径为1的球体的相交面的大小。固定的角度用符号ω表示。从现在开始,我们看到密度实际上是和角度相关的,也就是dΦ/dω,和辐射度不同的是,这个是和区域相关的辐射密度。密度是表示每立体角度的瓦特量。

固定角度的概念不太好理解,这里有一个类比可以有助理解。固定角度和朝向的关系一样,每个表面区域都有表面的位置。区域就是这些地点的集合,而固定角度又是方向的集合。

大多数的灯光源对所有的方向释放的能量不是都一样的。图7.2的灯泡在不同的方向上释放的强度是不同的,这个可以通过左上角图的箭头密度来观察到。右上角的图可以看到灯泡向某个角度释放的强度是15瓦特每立体角。

在二维的情况下,2π弧度可以覆盖整个的单位圆。把这个扩展到三维的情况,4π立体角可以覆盖整个的单位球体。单位立体角的固定角度可以从图7.3查看。
在这里插入图片描述

在之前的几个图中,我们假设光源可以视为点。凡是能被近似为点的光源的叫做点光源。就好像平行光对于场景来说在很远地方,那么平行光就是很有用的抽象。而如果光源很小,与此同时光源又很远,那么此时可以视为点光源。平行光的抽象在于和场景的距离,而点光源的抽闲在于光源本身的大小。强度对于点光源来说能有效表示在不同方向能量变化。正如我们看到的,辐射度的大小与和点光源的距离平方成反比。什么时候使用这个近似是合理的呢?朗博在1760年提出5个规则。如果与光源的距离是光源宽度的五倍或者更多,那么这个强度的递减和距离的平方成反比的定律是合理的近似。

在第5.4节,眼睛或者摄像机是传感器,所以他们对于渲染来说很重要。我们计算渲染方程的目的是沿着这个射线计算辐射度(从渲染物体的表面的顶点到摄像机)。辐射度测量的是单一一个射线的照明情况——这个就是区域和固定角度相关的流体密度,如图7.4所示。辐射度单位是每平米每立体角的瓦特数,公式如下:
在这里插入图片描述

分母中的dAproj,指的射线的dA投射到正交平面的量。
在这里插入图片描述

dA和dAproj的关系可以从图7.4看出。这个投射和θ的cosine相关,此角度是物体表面法线和射线的夹角。
在这里插入图片描述
在这里插入图片描述

这个cos(θ)上划线,在page8中定义了,如果cos(θ)小于0,则返回0。什么情况下会小于0呢?当投射的方向在物体表面的后面,在这种情况下投射区域为0。

和两个量相关的密度很难可视化。

在这里插入图片描述

Eproj指的是和射线垂直的面。
在图7.5的左边展示的离开灯泡的射线拥有辐射度L。
7.3 颜色学
可见光的范围在380到780纳米之间。光发射到每个方向上,都会包含一些列的光子,光子的分布和波长相关。这个分布被称为光谱。如图7.7。
人类可以识别大约1千万种不同的颜色。对于颜色认知,眼睛会有三个不同类型的接收雷达。每个接收器能接收到的波长是不同的。对于特定的光谱,大脑都会从三个接收器接收不同的信号。这就是为什么我们只需要三个数字就可以简单的表示任意的可见光谱。
是哪三个数字呢。CIE提出了一些标准的测量颜色的条件,并使用这些条件做了颜色匹配实验。在颜色匹配中,三个不同颜色的灯被投射到白色的屏幕上,所以他们的颜色会会叠加起来称为一个整体的颜色。这个整体的颜色会有一个特定的波长。观察者可以改变三个颜色的灯,可以通过把手把颜色在-1到1之间做调整,直到测试的颜色匹配。负数权重也是需要的,像这类的权重意味着和权重相反的颜色被叠加上去了。一些灯的测试结果,所谓的rgb在图7.8中展示。每个颜色分类代表不同的波长,如r的波长为645纳米,g的波长为526纳米,b的波长为444纳米。
这些曲线为我们提供了一个方法就是把光谱三个对应的值。给定一个光的波长,那么三个颜色的设置就可以从图中读取出来,然后通过调整按钮,设置灯光的条件,就可把对应的光展示在屏幕上。给定任意一个光谱,这些曲线可以和光谱进行相乘,然后在曲线底下的区域代表了和提供的颜色所匹配的大小。完全不同的光谱可以得到三个不同的权重,换句话说,他们对于观察者来说是相同。匹配光谱称为原色。
Rgb三个分量不能代表所有的颜色,因为他们的颜色匹配曲线对于很多波长来说都有负权重。Cie提出三个不同的更高层的抽象光源,他们不是单调的光源。这些颜色匹配曲线用如下符号表示。他们的光谱在图7.9所示。颜色匹配函数为 y(λ) i。事实上。。。。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
内容简介   本书从实践的角度出发,详细介绍3D游戏开发的高级技术,并具体描述了一个游戏引擎的构建过程。全书着重讨论三个主题:游戏开发的一般过程;实时渲染过程;角色动画。所有主题均围绕一个具体的游戏开发系统Fly3D SDK2.0加以介绍。   本书旨在为当今的三维游戏引擎技术提供一个综合的解决方案,使读者尽快地进入开发者角色,了解整个游戏的开发过程并初步具备游戏引擎开发能力。   本书适合作为高等院校相关专业的教学参考书,同时可供相关技术人员和游戏开发人员阅读。 编辑推荐   本书从实践的角度出发,详细介绍3D游戏开发的高级技术,并具体描述了一个游戏引擎的构建过程。全书着重讨论三个主题:游戏开发的一般过程;实时渲染过程;角色动画。所有主题均围绕一个具体的游戏开发系统Fly3D SDK2.0加以介绍。   本书旨在为当今的三维游戏引擎技术提供一个综合的解决方案,使读者尽快地进入开发者角色,了解整个游戏的开发过程并初步具备游戏引擎开发能力。   本书适合作为高等院校相关专业的教学参考书,同时可供相关技术人员和游戏开发人员阅读。 作者简介   Alan Watt 英国谢菲尔德大学计算机科学系讲师,是该校计算机图表学研究室主任,曾经编写过多本优秀著作,包括《3D计算机图形学》和《The Computer Lmage》。 Fabio Policarpo 工作在里约热内卢的软件开发者,他是Paralelo计算机公司的创始人,目前正致力于三维动作多玩家游戏的研究。 目录 出版者的话 专家指导委员会 译者序 前言 第一部分 高级游戏系统剖析 第1 高级游戏系统剖析I:构造过程和静态光照 1.1 数据结构 1.1.1 顶点 1.1.2 面 1.1.3 包围盒 1.2 构造过程 1.2.1 从场景几何中创建BSP树 1.2.2 路径规划的凸体和PVS计算 1.2.3 处理复杂的地形 1.2.4 BSP叶节点中的面 1.2.5 寻找叶凸体 1.2.6 凸体和伪人口 1.2.7 潜在可视集 1.3 光照贴图的构造 1.3.1 生成光照贴图的坐标 1.3.2 光照贴图的打包 1.3.3 对光照贴图的解释 1.4 BSP管理 1.5 高级静态光照——辐射度 附录1.1 构造实践 附录1.2 辐射度理论基础 第2 高级游戏系统剖析Ⅱ:实时处理 2.1 视见和BSP 2.1.1 生成视见约束体的面 2.1.2 远近裁剪面和视见约束体 2.2 照相机控制 2.3 使用BSP的基本碰撞检测和反弹 2.3.1 碰撞和BSP遍历 2.3.2 粒子,场景检测和反弹 2.4 特殊的碰撞检测和反弹 2.4.1 AABB的定义 2.4.2 AABB类的定义和静态成员的定义 2.4.3 碰撞检测和碰撞反弹 2.4.4 使用AABB的伪碰撞反弹 2.4.5 使用AABB的碰撞检测 2.4.6 AABB顶点与场景面相交 2.4.7 场景顶点与AABB面相交 2。4.8 AABB边与场景边相交 2.4.9 更精确的碰撞检测 2.4.10 使用碰撞阈值 2.5 基本的路径规划 附录2.1 实时处理的演示 第3 高级游戏系统剖析Ⅲ:软件设计与应用编程 3.1 应用的种类 3.1.1 插件 3.1.2 前端 3.1.3 工具 3.2 Fly3D引擎体系结构 3.2.1 FlyMath 3.2.2 FlyDirectX 3.2.3 FlyRender 3.2.4 FlyEngine 附录3.1 编写一个插件 第二部分 实时渲染 第4 实时渲染 4.1 简介 4.2 顶点、像素和贴图 4.2.1 基本的逐像素着色 4.2.2 着色和坐标空间 4.2.3 25年来主流的插值着色方法和颜色贴图 4.2.4 标量表示 4.3 因式分解法 4.3.1 使用因式分解着色模型的逐像素着色——各向同性模型 4.3.2 使用因式分解着色模型的逐像素着色——各向异性模型 4.4 BRDF和真实材质 4.5 使用BRDF进行逐像素着色 4.6 环境贴图参数化 4.6.1 环境贴图参数化:立方映射 4.6.2 环境贴图参数化:球面映射 4.6.3 环境贴图参数化:对偶抛物面贴图 4.6.4 环境贴图——可比点 4.6.5 立方贴图和向量规范化 4.7 实现BRDF:可分离的近似 4.8 着色语言和着色器 4.8.1 着色语言:简单的历史回顾 4.8.2 RenderMan着色语言 4.8.3 实时渲染的着色语言 第5 实时渲染:实践 5.1 基本着色器 5.1.1 渲染状态 5.1.2 着色器排序 5.1.3 着色器类的实现 5.2 渲染状态 5.2.1 全局设定 5.2.2 局部设定 5.3 着色器实例 5.3.1 环境映射和铬映射效果——玻璃、金属和铬 5.3.2 移动发光告示牌 5.3.3 简单栅栏效果 5.3.4 高级栅栏效果 5.3.5 监视器效果 5.4 实时硬件渲染 5.4.1 顶点编程 5.4.2 像素编程 5.4.3 使用寄存结合器的像素编程 5.4.4 纹理地址编程 5.4.5 纹理地址编程——Phong映射 5.4.6 顶点和像素编程以及多步着色器 5.5 动态纹理 5.6 特效 5.6.1 燃烧尾迹 5.6.2 加速器 5.6.3 脉冲星 附录5.1 使用和探索着色器 附录5.2 NVIDIA GeForce 3上的顶点编程 附录5.3 NVIDIA寄存结合器操作 第6 几何处理 6.1 简介 6.2 推动因素和定义 6.2.1 离线和实时阶段 6.2.2 拓扑因素 6.2.3 离散简化与连续简化 6.2.4 物体内部分辨率变化 6.2.5 对称性/可逆性 6.2.6 局部简化操作 6.3 排序(误差)标准 6.3.1 排序标准——外观相似 6.3.2 排序标准——局部体积不变 6.3.3 排序标准——二次误差度量 6.3.4 排序标准——简化外壳 6.4 简化与属性 6.4.1 简化与游戏纹理 6.4.2 简化和蒙皮模型 6.4.3 算法框架 6.4.4 顶点去除算法的重新三角形划分 6.5 实例分析 6.5.1 实例分析1——渐近式网格技术 6.5.2 实例分析2——使用微分几何 6.5.3 实例分析3——网格重新划分算法MAPS 附录6.1 数学背景 附录6.2 演示 第三部分 动画制作 第7 角色动画 7.1 简介 7.2 顶点动画与合成 7.3 骨架动画 7.4 低层次动画管理 7.4.1 行进的路径规划 7.4.2 骨架动画和面向对象的动画控制 7.4.3 对障碍物的躲避 7.4.4 路径规划总结 附录7.1 用四元数描绘旋转 附录7.2 四元数的实现 附录7.3 角色动画中效率的考虑 第8 动画成形方法 8.1 简介 8.2 样条框架 8.3 自由形状变形 8.4 扩展自由形状变形(EFFD) 8.5 曲线变形——铰线 8.6 皮肤控制 8.6.1 面向表面的自由形状变形(SOFFD) 8.6.2 骨架皮肤精致化 8.6.3 组合皮肤和形状混合 附录8.1 使用径向基函数进行离散数据插值 第9 高级角色动画之要素 9.1 引言——一种拟人的游戏界面 9.2 将语言表述转变为动画——示例 9.2.1 IMPROV(纽约大学媒体研究实验室) 9.2.2 PAR体系结构(宾夕法尼亚大学人体建模和仿真中心) 9.2.3 具体化的对话界面代理(MIT媒体实验室) 9.2.4 游戏结论 9.3 面部动画、视觉语音和跟踪 9.4 用于控制、渲染和跟踪面部网格的模型 9.4.1 基于图像的建模、渲染和跟踪 9.4.2 跟踪方法 9.4.3 参数化 9.4.4 伪肌肉模型 9.4.5 面片技术 9.5 视觉语音 9.6 面部动画和MPEG-4 9.7 渲染问题 9.8 总结和问题 9.8.1 参数化与照片真实性 9.8.2 网格表示 9.8.3 皮肤的渲染 9.8.4 没有声音很多面部动画更好看 9.8.5 情感和语音 附录9.1 一个伪肌肉模型的实现 第10 基于运动捕捉的角色动画 10.1 简介 10.2 运动数据 10.3 骨架和MoCap BVH格式 10.4 运动数据的基本处理 10.4.1 加速和减速运动 10.4.2 混合和时间扭曲 10.4.3 对齐运动序列 10.4.4 运动扭曲 10.5 MoCap中的插值 10.5.1 B样条表示法 10.5.2 运动混合——动词和副词 10.6 经典信号处理和MoCap 10.6.1 傅里叶理论 10.6.2 傅里叶理论和非周期数据 10.6.3 傅里叶理论和采样数据 10.6.4 采样和走样现象 10.6.5 反走样滤波器 10.6.6 时间域中的过滤——卷积 10.7 信号处理和MoCap数据 10.7.1 傅里叶域中的插值/外推法 10.7.2 使用拉氏算子的多分辨率滤波 10.8 运动编辑:基于约束的方案 10.8.1 运动中的动力学约束 10.8.2 运动中的运动学约束 10.8.3 每帧重定位法 10.8.4 时空法 附录10.1 示范 第11 反向运动学原理 11.1 例子——二链臂 11.2 雅可比矩阵 11.3 IK方法 11.3.1 使用雅可比阵的微分方法 11.3.2 最优法 11.3.3 循环坐下降法(CCD) 11.4 反向运动学的实践方案 11.4.1 混合方法——分析法+约束最优化法 11.4.2 混合方法——三阶段:分析法+约束最优化+分析法 11.4.3 防止自碰撞 11.4.4 IK与运动目标 参考文献
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值