计算机图形学 1 —— 颜色模型图像基本知识,Phong光照模型

色彩视觉

        什么是色彩?

色彩是对不同波长的光的能量的感知:

  • 不同波长的电磁波(electromagnetic waves) 对应不同的色彩;
  • 对于人眼能感知的光(可见光),其波长范围为 380nm到760nm之间。

 光的谱分布:

  • 光 是由不同波长的电磁波按照某种能量分布混合叠加而成。

        例如,“白光”则是由所有可见波长的电磁波以相等的强度混合得到。

  • 谱分布:光在各个可见波长的分量的强度分布函数,称为光的谱分布。
各种可见光的分量的分布函数--光谱函数

        和光类似,色彩也可以用谱分布函数来进行描述,但是有些情况下同一种颜色,可能对多个谱分布,即 不同的谱分布函数对应同一种色彩,就是异谱同色现象。

       

        色彩空间:

        在所有用于表示色彩的各个色彩空间中,RGB红绿蓝 色彩空间 在计算机图形学中,使用最为广泛:

        色彩使用三通道RGB向量(r,g,b)来表示;在RGB的色彩空间中,有部分的常用操作可以通过对RGB三通道分别处理而进行;通常可以将r,g,b 分别规整化为 [0,1] 内的浮点数;当使用8位进行存储时,r,g,b 通常取值为 [0,255] 内的整数。

        色彩被表示为三个基本色彩: 红色(R) ,绿色(G),蓝色(B) 的线性组合:

                        -C = rR+gG +bB           r ,g, b 三个系数来表示颜色

为什么选择的是红绿蓝作为基本色彩?

        以人类视觉的三刺激理论为基础:人眼的视网膜中有三种锥状视觉细胞,分别对红,绿,蓝三种光最为敏感。

色彩空间

 但是,一部分色彩,无法表示成R,G,B光波的正线性组合,这是RGB 色彩空间的缺点。

下图是所有可见光波的RGB 分量图:

画圈部分的红色光取值是负数,无法表示

         正是这种问题,国际标准化组织引入另一种颜色空间做修正。

图像和像素:

        图像可以看作成一个二维离散函数 : f(x,y) 

        函数f 的定义域 是由矩阵排列着的许多格子组成,这些格子被称为像素(pixel)。

        函数 f 的取值则为各个像素的色彩:对于彩色的图像,可以是RGB 或者RGBA; 对于灰度图像,f 为单值函数。

图形学的任务是: 确定图像上每个像素的值,主要还是跟像素打交道。

三角网格模型:

        光栅图形学,处理的是平面上的多边形。如何在屏幕上显示多边形 —— 裁剪消影等操作。真实感图形学要处理立体的图形。如何用三角形表示复杂的多边形。

图形学目标:从虚拟的三维场景及相机的位置信息中,生成一副二维图像。

- 而三维的场景又以怎样的数据结构来表示呢?

  • 简单的球体,长方体可直接用其参数描述。
  • 对于复杂模型,则需要使用 参数曲线 曲面或者 更一般的网格模型来进行描述。
  • 网格模型之中又以三角网格最为常用。因为三角网格表示模型,在计算机硬件处理上更为方便。
  • 三角网格 是 由一系列欧式空间中的三维顶点以及连接这些顶点的若干三角面片组成,具体包括: 

- 顶点的集合 V = (V1,V2,V3...Vn)     顶点表

- 面片的集合  F = (f1,f2,f3...Fm)     其中F中的每个面片 f i 都是由V中的顶点构成的空间三角形:

fl=(Va1,Vb1,Vc1),f2=(Va2,Vb2,Vc2), ......   面表,就是一个三元组,有三个顶点编号。顶点表有100万个点,我只需要记住他的序号即可。

模型牛上显示了三角网格的结构,模型龙和人头则是利用三角网格进行绘制的结果。

三角网格处理 ——  法向量 (normal) 

-  三角面片的法向量 是 垂直于该三角面片所在平面的非零向量;

-  对于每个三角面片单独而言,其法向量都有两种可能的朝向;

-  法向量的朝向决定了一个三角面片的正面与反面。

- 对于连续可定向的三角网格整体而言,相邻的三角面片需要具备一致的法向量朝向。

—— 法向量 是影响物体上的一点色彩 的一个非常重要的因素所以要时时刻刻计算表面的法向量。

法向量的计算:

        三角网格顶点的法向量可以通过其周围的所有三角面片的法向量通过加权叠加计算:

面积加权平均计算是最常用的

如何绘制三角网格? 

三角网格的简单绘制:

  • 三角网格模型的每个顶点需要指定一个色彩属性。
  • 基于色彩的绘制,模型表面的每个点的色彩通过其所在的三角面片的顶点色彩插值得到。
  • 基于光照的绘制   需要指定一个虚拟光照环境,即要有光源;如何计算光照对色彩的影响是最大的问题(光照模型)。

线框效果

颜色效果 --每个面画上颜色

光照效果

 由上可知,我们得会算 光照下的颜色 ,从网格模型出发,去算,再度插值。

如何基于物理的原理 来算颜色值,这是图形学中非常重要的事情。

光照模型

  • 光照模型(lighting model 或 illumination mode) 用于计算光的强度:        

--  局部光 照明(Local Lighting) 

        关注物体直接受到光源影响所产生的光照效果。不考虑物体间的互相影响。

--  全局光 照明(Global Lighting ) 

        关注阴影效果;

        关注所有不是直接与光源位置相关的光照效果,例如:反射和折射效果,等等...既考虑直接照射,又考虑间接照射。

        光照模型的提出,使得我们一下子从 光栅图形学 踏入 真实感图形学,也就是今天大片特性,游戏特效,都是参照光照模型。

        关照模型的历史:

        1967年,Wylie等人 第一次在显示物体时加入光照效果,认为光的强度与物体到光源的距离成反比关系。1970年,Bouknight 第一次提出了光反射模型:Lambert 漫反射光 + 环境光;1971年,Gouraud 提出漫反射模型 加 插值的思想 : Lambert 漫反射光 + Barycentric插值;1975年,Phong 提出图形学中第一个有影响也是最有影响的光照模型:Phong 模型:漫发射(diffuse light) + 环境光(ambient light) + 高光(specular light) 

如何去计算上面提到这些模型呢?还需一些概念。

  • 第一个:光的传播:

光的传播遵循反射定律:

       入射角等于反射角;入射光线,反射光线,以及反射面的法向量 位于同一平面内 ,即共面的,且反射角等于入射角。

反射定律 Normal是法向量

光的传播遵循折射定律(Snell定律):

        入射角和反射角的正弦值之比是一个仅仅取决于介质的常熟;

        这个常数称为相对折射系数。

Snell定律

  • 光线传播的能量方程

光的传播遵循能量守恒定律:

然后我们要一些概念来度量光,光的度量方法:

光的度量方法

Phong 光照模型  —— 这是第一个有影响的光照模型,写入所有教科书的光照模型,各种游戏软件等非常常用的光照模型,它是一个数学模型,一个简化的模型。

-  Phone模型支持 点光源 和 方向光源 。

-  Phone模型是局部光照模型,将局部光的照明效果分解为三个部分:

               1. 漫反射效果,2.镜面反射效果,3.环境光效果。

我们先来看第一个漫反射效果:

Phong模型示意图

         L是入射光方向;R是反射光;N是物体表面的法向量;V是视点方向;H是L和V夹角的角平分线方向。

        这个公式要说明什么呢? 他想说的是:物体表面上的一点,他的颜色或者他的光强,主要取决于什么:主要取决于入射光和法向量的夹角,因为是点积,夹角越大越弱,夹角越小,就越强。所以早上的太阳弱,中午太阳厉害就是这个原理,因为它垂直于你。Kd 这个是反射系数,编程的时候,颜色就是由它来表示出来的。

我们先来看第二个镜面反射效果:

-         对于光滑的平面,依据反射定律,反射光线往往集中在一个小的立体角内,这些反射光,我们称之为镜面反射光;

-          镜面反射光的强度为 :

 R是反射光,V是视角。反射光线和视角的夹角,如果这个夹角是0的话,意味着 光直接打到眼睛里了。夹角越小,值越大;夹角越大,值越小。因为物体表面有粗糙度,不是完全光滑的,所以这个光线反射的时候,他不一定严格准确的局限在这个反射出去的光线上,相邻的地方也有反射光的影响。所以我们用这样的一个公式来表示它这个光照模型。

我们先来看第三个环境光效果:

 其他的光,都不管它们了,统一用常数 K 来表示 环境光。

        以上三项在一起,就是一个完整的Phong模型基本组成。

视角方向的发光强度 =  环境光项 + 高光项 + 漫反射项

Phong模型示例:有很多系数,有Kd 有 Ks ,有漫反射和镜面反射2个系数,通过调节这些系数,可以得到不同的光照效果。

软件Demo:

通过调整不同的系数,得到不同的光照效果。

        马赫带效应:人的眼睛的视觉系统:对相邻颜色的小微的视觉差异,会本能的做放大处理。是一种主观的边缘的对比效应。当观察两块亮度不同的区域时,边界处亮度对比加强,使轮廓表现得特别明显。

        所以,模型是由很多面片表示的,有棱有角会显得非常难看,所以必须给其做插值,做光滑处理。这就是做明暗处理的原因。

 色彩插值 和 法向插值 两种做法

  • 1971年 Gouraud 的明暗处理 色彩插值 计算方法:

1. 首先计算所有模型顶点的色彩值;

2. 然后对模型上的任何一点,按照其所在的三角面片上顶点的色彩值,按重心插值(Barycentric Interpolation)的结果赋予其色彩值。

  • 1973年 Phong的明暗处理  点的法向量进行插值

        计算方法:与Gouraud 的明暗处理不同,他的这个明暗处理,不对色彩进行插值,而是对点的法向量进行插值,得到连续的法向量场,再利用该法向量场,逐点使用光照模型进行色彩的计算。从而可能得到了原来光滑曲面的一种近似,所以这种做法是有一定的道理的。

         现在的计算机,GPU自动就把上面的这种状态处理了,想看到也不容易。

        扫描转换算法(很重要) —— 给一个多边形,怎么求出里面每一个像素,把多边形的边界表示,转化成像素表示。 为什么很重要,它提出了一个思想叫图形相关,整数运算,怎么搞的最快。计算机是一个实践性很强的学科,需要技巧。明暗处理这块,可以通过增量算法来加速。

图形的变换:

        视点变换和视点方向:

  • 图形学关注于如何将几何模型组成三维场景绘制成 rendering 高质量的彩色图像。
  • 变换在图形学中至关重要:通过变换,可以简洁高效地设置和编辑三维场景,光照位置,以及视点方向。

 你可以用openGL 重写一段代码,也可以灵活的做一次变换。基于变换的解决方案在图形学中随时都需要用到,使用变换的可以使代码更加灵活,快速,模块化。

openGL代码

 类似于 猫变老虎 的效果 就是 Morphing ;  物体上一些尺寸上的变化Deformation。

 

 

 

 

 

 

 

 

 

 

 

 

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值