fragment的工作原理_计算机图形学原理及实践学习笔记第一章

第一章 绪论

1.1 计算机图形学简介

  • 在计算机图形学中,“模型”这个词指的可以是 几何模型 也可以是 数学模型。
    • 几何模型:我们想要呈现在图像中的物体的模型,例如 构建的汽车模型、房子模型、角色模型等。可以在模型中引入颜色、纹理或材料的反射率等多种属性(构成材质),来增强几何模型的表达能力。
      • 建模:从一无所有开始、创建出一个模型的过程。得到的就是对物体的“几何加其它信息”的描述为模型
    • 数学模型:物理 或 计算过程的模型。例如,光从光泽表面反射的各种模型。还有物体如何运动的模型,以及关于数码相机中图像采集过程的模型。这些模型也许是可靠的,也可能是 不准确的。可以是基于物理的,或者从原理推导来的,也可以是根据观察或直觉得到的 经验模型 或 现象模型。

  • 解决问题的两条原则:
    • 明确问题原则:知道你要解决的是什么问题
    • 近似求解原则:寻找近似的求解方法,而不是对问题本身进行近似
  • 在图形学中有大量的采用近似方法,但是一定要明确近似的对象是什么。

  • 谈及图形应用时的一些概念:
    • 绘制:指将物体或图像呈现在显示器上
    • 一种实用的绘制性能度量标准:每秒可绘制的基本体个数
    • 基本体:面向应用的基本构形单元。例如 带纹理的多边形

1.2 简要历史

1.3 一个光照例子

该节给出了一个这样的场景:
在黑暗的房间里,一个 100W 的点光源悬挂在桌子上方约 1m 处,桌面涂有灰色乳胶漆。我们从 2m 高处看这个桌子,会看到什么?

这一场景的描述,使用的是我们生活中的描述,即使用我们在真实世界中得出的物理概念来描述场景。

然而,在计算机图形学中,这样的描述可能并不适用。因为在大多数标准图形包中没有 “米”、“克”、“焦耳”这些真实物理单位,它们对光的描述中甚至不考虑波长。且由于显示器等图形显示硬件的限制和物理原理,即使使用真实物理的计算方式,得出的结果也可能反而让人觉得不真实。

在图形学中,我们追求的并非物理上的仿真 而是 如何以视觉的方式来呈现信息。以上述情形为例,光以大致相同的强度从各个方向入射到景物表面,场景中各处反射光的差异大概在10^3范围内。简单地将屏幕像素的显示亮度调整到合理的区间,让它在类似范围内变化,效果很好,因而无需在视图上模拟真实的物理反射。但是必须保证所显示的图像忠于原作(制作者的显示器 和 其他人的显示器看到的颜色是一样的);所显示的关键物体的颜色必须是准确的,确保用户看到的是真实的外观。

  • 抽象
    • 抽象是视觉交流的一个关键因素
    • 用户看到计算机图形时,图形的物理特性并不会对用户的观感产生很大影响,人们在讨论图形时更多的是 形状、颜色、形式这些更为抽象的术语。这是建模的一个关键特点。
    • 例如,在角色建模时,我们通常会先从角色的基本形状开始建模。对于一个好的角色设计,往往从角色形状(把角色概念图全部涂成黑色,这样就只能看到角色的形状)就能让人感受到角色的一些特点(例如在反派角色的设计中,其形状中往往会有更多地棱角)

1.4 目标、资源 和 适度的抽象

  • 在任何仿真中,首先要了解其背后的物理或数学过程(基于已知的有关它们的知识),然后,在给定时间限制、处理器能力 和 类似因素(我们的资源)的情况下,确定可提供所需结果(目标)的最佳近似方法。
    • 睿智建模原则:对某一现象进行建模时,先深入了解需要 建模的现象 和 建模的目标,然后选择一个含义丰富的抽象模型,再在你所限资源范围内,为其选择合适的表示方法。最后通过测试来验证所建的抽象模型是否合适。
      • 大部分实景模型由三部分组成:物理模型、数学模型 和 计算模型
      • 以海洋波形为例:
        • 物理模型:海洋波形表现为海水表面的垂直位移,波浪的起伏运动完全是因为周围的高度差而产生的力,而不是风力。
        • 数学模型:将位移刻画为海洋表面整数网格点位置的时序函数,中间各点由插值计算得到。
        • 计算模型:海面在将来某个时刻的状态可由当前的状态决定,这可通过采用有限差分来逼近所有导数,然后求解一个线性方程组实现
    • 视觉系统影响原则:在求解图形学问题和构建模型时需要考虑人类视觉系统的影响。
      • 计算机图形最终是要被人的眼睛所感知的,因此我们在求解问题时要考虑到人眼的视敏度、光感等

1.5 图形学中的常数 和 一些参数值的量级

  • 光能量 和 光子到达率
    • 单一光子的能量 E 随波长 λ 的变化方程:
      E = h c / λ E
      其中,普朗克常量 h ≈ 6.6×10^{-34}J·s,光速:c≈3×108m/s
      可得:E≈1.98×10−25Jm
      令典型光子的波长为 650nm,可以得到E≈3×10−19J
      即为一个典型光子的能量

  • 显示器的特性 和 眼睛的分辨率
    • 2010年 一个典型的显示器有 100~150 百万个像素,不久后出现了 400万像素,显示器宽度为 37cm,像素中心间的对角线距离为 0.25mm
    • 一个典型显示器的动态亮度范围为 500 : 1 即最亮的像素发出的光能量是最暗像素的 500 倍
    • 人眼的角分辨率约为 1弧度,相当于在 1km 远距离观察 300mm 的长度,或者说是在 1m 距离 观察 0.3mm 长度(对观看计算机屏幕这一情况而言更加实际)。如果像素比当前尺寸小一半,眼睛将无法分辨它们。
    • 偏离视图中心越远,人眼的分辨率越低,因此显示器屏幕四边处的像素密度大部分时间并无作用。
    • 眼睛对于运动十分敏感。

  • 数码相机的特性
    • 消费级数码相机镜头的面积约为 0.1cm2
    • 具有感光器,感光器具有像素

  • 复杂应用的需求
    • 计算机游戏是当前图形学需求最大的应用
    • 每秒(帧)绘制的多边形数和每秒着色的像素数成为衡量绘制效率的两个指标。

1.6 图形管线

  • 标准图形系统的实施流程通常称为图形管线(graphics pipeline)。
    • “管线”一词是因为,从数学模型到生成屏幕上像素的过程,包含多个步骤,而这些步骤是按序执行的,上一个步骤的结果会作为下个步骤的输入,就向生产的流水线一样。
    • 管线的简化示意图:

4e1eeb8071c32a9c27cdb259df1dee35.png
    • 由于图形应用编程接口(API)提供了可调整管线每一阶段参数的实用方法,固定管线模型正在被快速淘汰,取而代之的是用 着色器(Shader) 程序 来实现管线中某些甚至整个管线的功能。

  • 纹理映射与近似
    • 纹理映射是图形管线中的一个标准模块。
    • 纹理映射通过查表的方式将纹理图像的颜色映射到一个或多个多边形上。
    • 纹理图像可以是扫描到系统中的艺术画作、数码相机拍摄的照片 或者 绘图软件制作的图像(就是张图片)
    • 一个物体的外观部分取决于表面的 法向量。计算光从表面的反射就涉及法向量

  • 更为详细的图形管线
    • 随着管线所含阶段数的增多,从输入数据到生成最终结果所需的时间总量也将增加。对于交互性能要求很高的系统,这种 滞后 或者说 潜在滞后 也许是关键性的。(例如,NVIDIA 对于底层架构的修改就包括合并一些管线阶段,探索减少滞后的方案也是图形学的研究方向之一)
    • 图形管线包括 4 个主要部分:
      • 顶点几何处理和变换
      • 三角形处理(光栅化) 和 片段(fragment)生成
      • 纹理映射 和 光照
      • 组装最终图形的片段
    • 下图中,顶点处理部分被标记为“几何变换”,片段生成、纹理 和 光照 合起来放到一个单独的框里面,最后的 片段加工处理则标记为“生成图像”

c00aae24f365135d29be9d27f2b398f9.png
    • 管线的几何处理部分负责输入物体的几何描述(通常为逼近物体表面的多边形网格顶点位置,这里说的网格是共享顶点和边的一系列多边形的几何) 以及 施加于这些顶点的特点变换,然后计算顶点的实际位置。顶点变换后,由这些顶点定义的多边形网格自然也会随之变换。
    • 三角形处理阶段输入的是多边形网格(通常是三角形网格) 和 用来拍摄场景的虚拟相机的参数,然后对多边形逐个进行 光栅化处理 ,将它们从连续的几何表示(三角形) 转化为 面向显示的离散像素表示(确定三角形包含哪些像素,或者其中一部分)
    • 在 片段 生成过程中,将根据场景中的光照和网格纹理来计算片段(三角形内的像素或其一部分,如果未被其它片段遮挡,将展示在最终画面上)的颜色
    • 如果多个片段覆盖同一像素,通常绘制位于最前面的片段(靠近摄像机的),不过也可以实施其它面向单个像素的操作(例如 透明计算,或者进行 “掩膜” 使得仅仅特定的片段被绘制)

1.7 图形学与艺术、设计、感知的关系

  • 诡异谷理论(恐怖谷理论)
    • 随着机器人变得越来越像人类,观察者对它的亲近感在增长到某一程度后会急剧下降,直到机器人跟人非常像之后,亲近感迅速超越先前的水平。

  • 艺术家和设计师们采用逆向工程的方法来模拟人类视觉系统,力图以最小的 “绘画开销” 来获得最大得感知效果。他们的工作使得我们领悟到,图形显示的目的是交流。
  • 在图形学中,我们可以从艺术家和设计师采用逆向工程的思路中得到启发,运用他们的技术来提高效率。

1.8 基本图形系统

  • 一个现代的图形系统包括若干交互装置、一个 CPU、一个 GPU 和 一个 显示器。

  • 图形数据
    • 模型空间(对象空间)坐标系:以模型中心为原点的坐标系(x、y、z 轴方向与世界空间坐标系相同)
    • 场景空间(世界空间)坐标系:以设定的场景原点为坐标系原点。模型其顶点的 模型空间 坐标 加上 模型关于 场景空间原点的偏移,就可以得到 模型顶点 的 场景空间坐标
    • 相机空间坐标系:以摄像机为原点,z 轴指向 摄像机拍摄方向的反方向,x 轴指向 摄像机右侧(从摄像机拍摄方向看),那么 y 轴就可以根据 右手定则确定(或用叉乘确定)
    • 规格化设备坐标系:在相机空间坐标系的基础上,可见景物的 x, y 坐标被表示成 -1 和 1 范围间的浮点值,z 坐标为负值(x, y 坐标超过 -1~1 范围的景物表示不在摄像机的视域内,z 坐标 大于 0 的,表示其在摄像机后面,不在镜头前)
    • 像素坐标:可见片段会被变换为像素坐标。像素坐标为整数(其中像素 (0, 0) 位于显示器左上角,像素 (1280, 1024) 位于显示器的右下角(与显示器分辨率有关)),这一变换可以通过坐标值缩放和取整来实现。所得到的坐标值有时也称为 图像空间坐标

1.9 视为黑盒的多边形绘制

从连续几何到离散几何的转换实现复杂,暂时将多边形绘制视为一个黑盒,不讨论其具体实现。待到后面在探讨。

1.10 图形系统中的交互

  • 图形程序通常采用两个并行的线程
    • 一个线程处理主程序
    • 另一个线程处理 GUI
    • GUI 中的每个部件——按钮、复选框、滑动条等,都关联于主程序中的一个回调程序

1.11 不同类型的图形应用

这一小节列举了一些 图形学在不同的图形应用中应该考虑的一些因素。阐述了对于不同的图形应用,对图形中的许多问题并不存在最佳的答案。

1.12 不同类型的图形包

  • 应用程序编程接口
    • 程序员编写图形程序时一般会选择 应用程序编程接口(Application Programming Interface)作为起点。即对图形卡的功能进行某种软件抽象所得到的封装代码。简称 API
    • 开发出的用来辅助图形编程的系统称为 图形平台

1.13 构建真实感绘制模块:概述

想要生成一幅真实感图像,必须对以下方面的知识有所了解:

  • 光线的物理性质 与 传播机制
  • 与光线发生交互的材质的模型 以及 交互的过程
  • 如何捕获来自画面的光线(是采用真实的或虚拟的相机,还是通过人的眼睛)
  • 现代显示器的工作原理
  • 人类视觉系统以及它如何感知入射光线
  • 描述这些事情所涉及的数学模型
    为什么都是关于光的?因为人眼捕获图像的过程,就是人眼捕获光的过程

  • 光线的基本原理
    • 光在真空中沿直线传播,直到遇到某一表面停止
    • 光线遇到光滑表面发生反射,其反射角等于入射角;或者被表面吸收,或者是这两种情况的组合
    • 大多数看上去光滑的表面,其微观看是粗糙的。在光线照射下它们的表现类似于很多光滑的微小平面的组合。因此,入射到这类平面上的光会想各个方向散射(或被吸收)
    • 平板上的针孔只允许一束光线通过,这些光线或直接穿过针孔的中心或与之非常接近。
    • 当相机的一个感光像素或者眼睛的一个细胞检测到光时,会累积(通过积分)在一小段时间到达其一小片区域的所有的光。积分值即为传感器对入射的所有光子的反应,它对应于像素或细胞所“看见”的光的总量。
    • 可对显示器上的像素进行调节使之发出指定亮度和颜色的光。

  • 物体和材料
    • 三角面的法向量为 n (单位向量)
    • 光线入射方向向量为 l (光源指向表面,单位向量)
    • 对于镜面反射
      • 则反射光线位于 ln平面,反射角与入射角相同,即 l 与 n 的夹角
    • 对于完全散射表面
      • 光将朝所有方向散射,反射光亮度与 ∣ l ⋅ n ∣ |l · n|∣ln∣ 即 入射光 与 法向量 的点积的绝对值 成正比(朗伯反射)
      • 作为散射的先决条件,表面必须面向光源,即 l ⋅ n < 0 l · n < 0ln<0
    • 对于光泽表面
      • 其表面外观与观察者的视角相关。即人在观察物体上的高光时,随着人的移动,高光也会随之移动。这一现象可采用一个经验模型来较准确地模拟(冯模型)
      • 设 h 为 从表面到光源的方向向量 即 -l 和 从表面到视点(观察者)的方向向量 e 的角平方向量,然后进行单位话。即:
      • h = e − l ∣ ∣ e − l ∣ ∣ h = frac {e - l} {||e - l||}h=∣∣el∣∣el
      • 解释:e − l = e + ( − l ) e - l = e + (-l)el=e+(−l) 两个向量的和,其方向就为两个向量的角平分方向
      • 则反射光与 ( n ● h ) (n ● h)(nh) 的 k 次幂成正比
    • 对于一般的表面
      • 其表面反射是 漫反射(完全散射)、光泽表面反射 以及 镜面反射情形的组合

  • 图像显示
    • 像素:现代显示器屏幕通常被划分为许多细小的方向区域,称之为像素(注意图像定义 和 物理定义的区别)
    • 像素可按照给定的三元组 (r, g, b) 即 RGB 三元组 发出红、黄、蓝混合的指定光。RGB 每个分量占一个字节,即 (0-255) 范围,也可用两个十六进制数表示。例如 0xFF00CC 表示 R = 255,G = 0 ,B = 204 是一种紫红色
    • 像素发出的光强 不是 直接和RGB数字成正比,而是遵循一种关系,即数值上的等量差异大体对应于等量的感知亮度上的差异。

  • 人类视觉系统
    • 入射到眼睛的光先进入 晶状体,穿过瞳孔,最后到达视网膜。
    • 无论是黑暗中微弱的光 还是 比起亮 1 0 10 10^{10}1010 倍的太阳直射光,眼睛都可以看到并进行处理
    • 眼睛在适应了周边的光照后,可区分强度范围在 1000倍之内的光照
    • 人眼对亮度的感知不是线性的。眼睛适应了某一亮度层次的光线后,即使进入人眼的光的强度减少了 80%,但感知到的亮度只是减少了一半
    • 视觉系统会对进入眼睛的信息进行组织并试图理解。即使输入的视图质量很差,我们的视觉系统仍有很好的适应性。比如在暴雨中认出自己的家。

  • 数学运算
  • 为了以更合理的方式去理解和学习图像学,需要掌握以下数学知识:
    • 三角学
    • 对小的向量和矩阵的操作
    • 积分和微分
    • 还有一些几何和拓扑的概念,比如连续性、3D空间中的曲面几何和曲率等

  • 积分和采样
    • 可以认为合成图像上的每个像素同样表示了穿过该像素的场景光线的光能。可以将其看作入射光在该区域的积分。但计算这样的积分是不现实的(运算量过大)。
    • 我们通常采用近似计算方法。即 用区域中心的采样 乘以 区域面积 表示该区域的积分

1.14 学习计算机图形学

  • 绪论:交代初步信息
  • 接下来几章:介绍微软的 WPF、图形学程序框架、图像绘制核心思想
    • 第二章:WPF 的 2D 图形功能
    • 第三章:非常简单的3D图形绘制程序
    • 第四章:两个 WPF 程序
    • 第五章:人类视觉系统和感知
    • 第六章:WPF 的 3D 图形功能
    • 第七章:图形学的数学基础
    • 第八到第十三章:线性代数
    • 第十四章:一系列传统近似模型
    • 第十五章:构建光线追踪和光栅化两个绘制程序的初步版本
    • 第十六章:讨论各种图形系统
    • 到 十六章,图形学传统教授内容就没了。剩下的章节在 进阶篇,本书没有。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值