Table of Contents:

坐标系和矩阵

世界坐标(World Coordinate):

本地坐标(Local Coordinate):

模型 - 视图( Model-View , MV )矩阵

  1. 观察矩阵(View Matrix)
    • 观察矩阵用于将场景中的对象从世界坐标系(或者说世界空间)转换到观察者或相机的视图空间。
    • 它描述了观察者的位置和方向,以及观察者看向的方向。
    • 观察矩阵通常由 glm::lookAt() 函数生成,该函数接受相机位置、观察目标和上方向作为参数,并返回观察矩阵。
  2. 模型-视图矩阵(Model-View Matrix,MV Matrix)
    • 模型-视图矩阵用于将对象的局部坐标系(模型空间)转换到观察者或相机的视图空间。
    • 它描述了对象在世界空间中的位置、旋转和缩放,以及观察者的位置和方向。
    • 模型-视图矩阵是观察矩阵与模型变换矩阵的组合,通常表示为 MV = V * M,其中 V 是观察矩阵,M 是模型变换矩阵。

因此,观察矩阵用于将整个场景从世界坐标系转换到观察者的视图空间,而模型-视图矩阵用于将单个对象从其局部坐标系转换到观察者的视图空间。这两个矩阵的组合描述了场景中对象的最终位置和方向,以便进行后续的投影和渲染。

LookAt 矩阵

通常用于创建相机或观察者的视图矩阵。视图矩阵用于将场景中的对象从世界坐标系转换到观察者的视图空间。
创建方法:glm::lookAt()

透视投影矩阵

透视矩阵用于将 3D 空间中的点变换至近剪裁平面上合适的位置
创建方法:glm::perspective()

正射投影矩阵

正射投影是一种平行投影,其中所有的投影过程都沿与投影平面垂直的方向进行

光照模型

OpenGL的光照使用了简化的模型并基于对现实的估计来进行模拟。
经典的光照模型有Lambert模型,Phong模型,Blinn-Phong模型,全局光照模型
冯氏光照模型的主要结构由3个元素组成:环境(Ambient)、漫反射(Diffuse)和镜面(Specular)光照
* 环境光照(Ambient Lighting):即使在黑暗的情况下,世界上也仍然有一些光亮(月亮、一个来自远处的光),所以物体永远不会是完全黑暗的。我们使用环境光照来模拟这种情况,也就是无论如何永远都给物体一些颜色。
* 漫反射光照(Diffuse Lighting):模拟一个发光物对物体的方向性影响(Directional Impact)。它是冯氏光照模型最显著的组成部分。面向光源的一面比其他面会更亮。
* 镜面光照(Specular Lighting):模拟有光泽物体上面出现的亮点。镜面光照的颜色,相比于物体的颜色更倾向于光的颜色。

材质、纹理、贴图

在图形学中,材质(Material)、纹理(Texture)、贴图(Texture Mapping)是三个相关但不同的概念,它们在渲染和表现物体外观时具有不同的作用:

1. 材质(Material):

2. 纹理(Texture):

3. 贴图(Texture Mapping):

烘焙贴图

烘焙贴图(Baked Texture)是一种在计算机图形学中常用的技术,用于将场景中的光照、阴影和其他视觉效果转化为纹理贴图
贴图烘焙简单地说就是一种把光照信息渲染成贴图的方式,而后把这个烘焙后的贴图再贴回到场景中去的技术。这样的话光照信息变成了贴图,不需要CPU再去费时的计算了,只要算普通的贴图就可以了,所以速度极快,将这种贴图控制在模型上,可以得到一种假的但很真实的效果。

这个过程主要涉及以下步骤:
1. 渲染场景
- 首先,通过渲染引擎在场景中放置物体并设置相应的光照,模拟光线的传播和交互。

  1. 计算光照信息
    • 在渲染期间,计算机会捕捉场景中的光照信息,包括直接光照、间接光照、阴影等。
  2. 把信息转化为贴图
    • 将捕捉到的光照信息转化为纹理贴图,即烘焙贴图。这些纹理贴图包含了场景中每个点的光照、阴影、反射等信息。
  3. 应用到模型表面
    • 将烘焙贴图应用到相应的模型表面上,以模拟场景中的光照效果。这使得渲染过程中无需再次计算光照,而是直接使用预先捕捉到的信息,加快了渲染速度。

应用和优点:
烘焙贴图常见于实时渲染和游戏开发中。它能够提供高质量的光照效果,同时减轻了实时渲染的压力,因为光照等信息在预处理阶段已经被捕捉并存储为纹理,避免了在实时渲染过程中的复杂计算。

烘焙贴图也有一些限制,例如静态性(不适用于动态变化的场景)、占用存储空间等,因此需要根据场景需求和性能考虑使用。

贴图种类:
烘焙的贴图有:法线贴图,OCC或ao贴图,转换贴图,高光贴图,固色贴图等。
1、什么是贴图?
贴图(texture)是一张不大的二维图像,它呈现了某个表面的最终信息。它被指定到线框多边形的表面,给予模型最终的外观。贴图的制作技巧是创建游戏真实度方面的关键因素。

2、贴图格式及大小
一般情况下,贴图将实现在图像处理软件中制作完成,纹理一般会包含很多信息和图层,也将随后被储存成PSD格式,当制作完成后,文件合并成一个图层,被存储为JPG格式,在游戏制作中,普遍被存储为TGA格式。这是因为这些文件格式包含一个ALPHA通道,可以实现其他的纹理效果。
贴图的尺寸一般是正方形,2的N次方,256,512。。。由于游戏是实时渲染,像三维空间中的多边形数量一样,贴图大小也将需要处理的时间,贴图越大,处理时间就越长,因此,一般最多使用1024、2048大小的贴图。

3、指定贴图
为了制作准确的贴图,设计师需要执行一个叫做UVW展开的操作,以方便后期贴图的制作与修改。

4、次世代游戏贴图的组成
次世代贴图是由:法线贴图、AO贴图、固有色贴图、高光贴图、凹凸贴图、透明贴图及自发光贴图的组合而成的一整套贴图。

(1)法线贴图:记录凹凸信息的贴图
生成方法:通过3dmax 把同一个模型的高低版本对在一起,把高模细节通过烘焙的方法将生成法线贴图记录下来。

(2)AO贴图:环境光遮蔽贴图,AO-Ambient Occlusion,“环境吸收”或者“环境光吸收”。 AO不需要任何灯光照明,它以独特的计算方式吸收“环境光”(同时吸收未被阻挡的“光线”和被阻挡光线所产生的“阴影”),从而模拟全局照明的结果,它主要是通过改善阴影来现实更好的图像细节,尤其在场景物体很多从而到处阻挡着光线导致间接照明不足时,AO的作用会更加明显。 AO可以解决或改善漏光、飘和阴影不实等问题,解决或改善场景中缝隙、褶皱与墙角、角线以及细小物体等的表现不清晰问题,综合改善细节尤其是暗部阴影,增强空间的层次感、真实感,同时加强和改善画面明暗对比,增强画面的艺术性。

(3)固有色贴图:通常情况下,我们把白色阳光下物体呈现出来的色彩效果总和成为固有色。固有色是指物体固有的属性在常态光源下呈现出来的色彩。

(4)高光贴图:就是光滑物体弧面上的亮点,而平面上则是一片光。与光源和摄像机的位置有关。但通常为一个小白点。
制作过程:高光的绘制一般把固有色贴图进行去色处理,再进行修整和调节。注意高光贴图不能出现纯黑和纯白。

(5)透明贴图
透明贴图是将不需要显示的部分现实出的颜色是当前对话框的背景色,类似于遮罩。

UVW 展开

UVW 展开是计算机图形学中用于纹理贴图映射的一种技术。在3D模型制作中,UVW 展开是将三维模型表面上的顶点(Vertex)和面(Face)映射到二维纹理贴图坐标上的过程。

  1. UVW 的含义
  1. UVW 展开
  1. UV 坐标
  1. 应用

UVW 展开在建模、纹理绘制和渲染过程中都是非常重要的步骤,它决定了纹理如何映射到模型表面,直接影响着最终呈现的质量和视觉效果。

法线(Normals)

法线(Normals)在计算机图形学中是描述表面方向的重要概念。它们是指与表面垂直的矢量或向量,垂直于表面的方向。法线通常被用来表示几何形状的方向和朝向。

作用:

  1. 光照和渲染:法线在光照和渲染过程中起着关键作用。它们定义了表面的朝向和方向,决定了光线如何与表面相交、折射或反射。光线与法线的角度决定了表面的明暗和阴影。

  2. 平滑表面:法线也用于创建平滑表面的外观。在多边形网格中,每个顶点周围的法线可以平均计算,使得相邻多边形之间的过渡更加平滑。

  3. 几何计算:法线也用于进行几何计算,如碰撞检测、表面交互等。它们可以用于检测物体之间的碰撞,或者计算视图矩阵以确定物体的可见性。

类型:

图形流水线(Graphic Pipeline)

[[深入浅出计算机组成原理-3处理器#30 GPU(上):为什么玩游戏需要使用GPU?]]

参考链接