导图社区 图形学
这是一篇关于图形学的思维导图。图形学是一种使用数学算法将二维或三维图形转化为计算机显示器的栅格形式的科学。
编辑于2022-05-18 17:32:15OpenGL
词汇表1
OpenGL: 一个定义了函数布局和输出的图形API的正式规范。
GLAD: 一个拓展加载库,用来为我们加载并设定所有OpenGL函数指针,从而让我们能够使用所有(现代)OpenGL函数。
视口(Viewport): 我们需要渲染的窗口。
图形管线(Graphics Pipeline): 一个顶点在呈现为像素之前经过的全部过程。
着色器(Shader): 一个运行在显卡上的小型程序。很多阶段的图形管道都可以使用自定义的着色器来代替原有的功能。
标准化设备坐标(Normalized Device Coordinates, NDC): 顶点在通过在剪裁坐标系中剪裁与透视除法后最终呈现在的坐标系。所有位置在NDC下-1.0到1.0的顶点将不会被丢弃并且可见。
顶点缓冲对象(Vertex Buffer Object): 一个调用显存并存储所有顶点数据供显卡使用的缓冲对象。
顶点数组对象(Vertex Array Object): 存储缓冲区和顶点属性状态。
索引缓冲对象(Element Buffer Object): 一个存储索引供索引化绘制使用的缓冲对象。
Uniform: 一个特殊类型的GLSL变量。它是全局的(在一个着色器程序中每一个着色器都能够访问uniform变量),并且只需要被设定一次。
纹理(Texture): 一种包裹着物体的特殊类型图像,给物体精细的视觉效果。
纹理缠绕(Texture Wrapping): 定义了一种当纹理顶点超出范围(0, 1)时指定OpenGL如何采样纹理的模式。
纹理过滤(Texture Filtering): 定义了一种当有多种纹素选择时指定OpenGL如何采样纹理的模式。这通常在纹理被放大情况下发生。
多级渐远纹理(Mipmaps): 被存储的材质的一些缩小版本,根据距观察者的距离会使用材质的合适大小。
stb_image.h: 图像加载库。
纹理单元(Texture Units): 通过绑定纹理到不同纹理单元从而允许多个纹理在同一对象上渲染。
向量(Vector): 一个定义了在空间中方向和/或位置的数学实体。
矩阵(Matrix): 一个矩形阵列的数学表达式。
GLM: 一个为OpenGL打造的数学库。
局部空间(Local Space): 一个物体的初始空间。所有的坐标都是相对于物体的原点的。
世界空间(World Space): 所有的坐标都相对于全局原点。
观察空间(View Space): 所有的坐标都是从摄像机的视角观察的。
裁剪空间(Clip Space): 所有的坐标都是从摄像机视角观察的,但是该空间应用了投影。这个空间应该是一个顶点坐标最终的空间,作为顶点着色器的输出。OpenGL负责处理剩下的事情(裁剪/透视除法)。
屏幕空间(Screen Space): 所有的坐标都由屏幕视角来观察。坐标的范围是从0到屏幕的宽/高。
LookAt矩阵: 一种特殊类型的观察矩阵,它创建了一个坐标系,其中所有坐标都根据从一个位置正在观察目标的用户旋转或者平移。
欧拉角(Euler Angles): 被定义为偏航角(Yaw),俯仰角(Pitch),和滚转角(Roll)从而允许我们通过这三个值构造任何3D方向。
词汇表2
颜色向量(Color Vector):一个通过红绿蓝(RGB)分量的组合描绘大部分真实颜色的向量。一个物体的颜色实际上是该物体所不能吸收的反射颜色分量。
冯氏光照模型(Phong Lighting Model):一个通过计算环境光,漫反射,和镜面光分量的值来估计真实光照的模型。
环境光照(Ambient Lighting):通过给每个没有被光照的物体很小的亮度,使其不是完全黑暗的,从而对全局光照进行估计。
漫反射着色(Diffuse Shading):一个顶点/片段与光线方向越接近,光照会越强。使用了法向量来计算角度。
法向量(Normal Vector):一个垂直于平面的单位向量。
法线矩阵(Normal Matrix):一个3x3矩阵,或者说是没有平移的模型(或者模型-观察)矩阵。它也被以某种方式修改(逆转置),从而在应用非统一缩放时,保持法向量朝向正确的方向。否则法向量会在使用非统一缩放时被扭曲。
镜面光照(Specular Lighting):当观察者视线靠近光源在表面的反射线时会显示的镜面高光。镜面光照是由观察者的方向,光源的方向和设定高光分散量的反光度值三个量共同决定的。
冯氏着色(Phong Shading):冯氏光照模型应用在片段着色器。
Gouraud着色(Gouraud shading):冯氏光照模型应用在顶点着色器上。在使用很少数量的顶点时会产生明显的瑕疵。会得到效率提升但是损失了视觉质量。
GLSL结构体(GLSL struct):一个类似于C的结构体,用作着色器变量的容器。大部分时间用来管理输入/输出/uniform。
材质(Material):一个物体反射的环境光,漫反射,镜面光颜色。这些东西设定了物体所拥有的颜色。
光照属性(Light(properties)):一个光的环境光,漫反射,镜面光的强度。可以使用任何颜色值,对每一个冯氏分量(Phong Component)定义光源发出的颜色/强度。
漫反射贴图(Diffuse Map):一个设定了每个片段中漫反射颜色的纹理图片。
镜面光贴图(Specular Map):一个设定了每一个片段的镜面光强度/颜色的纹理贴图。仅在物体的特定区域显示镜面高光。
定向光(Directional Light):只有一个方向的光源。它被建模为不管距离有多长所有光束都是平行而且其方向向量在整个场景中保持不变。
点光源(Point Light):一个在场景中有位置的,光线逐渐衰减的光源。
衰减(Attenuation):光随着距离减少强度的过程,通常使用在点光源和聚光下。
聚光(Spotlight):一个被定义为在某一个方向上的锥形的光源。
手电筒(Flashlight):一个摆放在观察者视角的聚光。
GLSL uniform数组(GLSL Uniform Array):一个uniform值数组。它的工作原理和C语言数组大致一样,只是不能动态分配内存。
词汇表3
几何(Geometry)
双线性插值
图像金字塔(Mipmap)
范围查找
三线性插值
各项异性过滤(Anisotropic Filtering)
隐式几何(Implicit)
Algebraic Surfaces(代数曲面)
CSG(Constructive Solid Geometry)(构造实体几何)
SDF(Signed Distance Functions)(有向距离函数)
Level Set Methods(水平集)
Fractals(分形几何-自相似)
显式几何(Explicit)
点云
多边形网格(Polygon Mesh)
贝塞尔曲线
凸包
逐段贝塞尔曲线
样条
B样条——贝塞尔曲线的扩展
贝塞尔曲面
曲面细分 = 细分 + 调整
Loop Subdivision——三角形面
Catmull-Clark Subdivision——各种面
曲面简化
边坍缩(Collapsing An Edge)
二次度量误差(Quadric Error)
词汇表4
光线追踪(Ray Tracing)
Whitted-style Ray Tracing
Bounding Volumes (包围盒)
AABB (Axis-Aligned Bounding Box)
加速
空间划分
八叉树 (Oct-Tree)
BSP-Tree (二分砍。。。)
KD-Tree (砍刀树。。。)
常用,但不好判断三角形是否在盒子里
物体划分
BVH(Bounding Volume Hierarchy)(层次包围盒)
广泛应用,一个物体只存在一个盒子里
把物体分为两堆,并重新计算包围盒
辐射度量学 (Radiometry)
物理上准确定义光照的方法
球坐标系
极坐标系
irradiance
radiance
BRDF (Bidirectional Reflectance Distribution Function) 双向反射分布函数
已知入射光能量和角度,射到物体表面会向各个方向辐射,辐射出去的能量跟角度是不一样的;这个方法 就能求出给定方向的辐射的能量是多少,比如辐射到摄像机那里会有多少能量,估计主要是为了得到这个量
渲染方程/反射方程
全局光照
Monte Carlo Integration (蒙特卡洛)
Path Tracing (路径追踪)
SPP(Samples Per Pixel)
gamma correction (伽马校正)
词汇表5
材质 (Materials) == BRDF
非负,表示能量分布;线性;可逆性;能量守恒
Microfacet Material (微表面)
远处:材质近处:几何
Isotropic/Anisotropic Materials (BRDFs) (各项同性/异性材质)
Advanced Light Transport (高级光线传播)
Unbiased Approach (无偏估计)
Bidirectional Path Tracing (BDPT) (双向路径追踪)
Metropolis Light Transport (MLT) (Metropolis光线传播)
Biased Approach(有偏估计) == blurry(模糊)
Photon Mapping (光子映射)
Vertex Connection and Merging (VCM)
BDPT + 光子映射
Instant Radiosity (IR) (实时辐射度)
Advanced Appearance Modeling (高级外观建模)
Non-surface models (非表面模型)
Surface models (表面模型)
Procedural appearance (程序化生成)
Camera (相机)
Field of View (FOV) (视场)
Exposure (曝光)
Aperture size (光圈大小)
Shutter speed (快门速度)
ISO (gain) (感光度增益)
Light Field / Lumigraph (光场)
任意位置射向任意方向的光的强度
The Plenoptic Function (全光函数)
The Visible Spectrum of Light (可见光谱)
Spectral Power Distribution (谱功率密度)
Animation
Keyframe (关键帧)
Particle Systems (粒子系统)
Forward Kinematics (正向运动学)
Inverse Kinematics (逆向运动学)
多解
无解
Rigging (骨骼绑定)
Blend Shapes (融合)
Motion Capture (动作捕捉)
Euler's Method (欧拉方法)
误差
稳定性
正反馈
Runge-Kutta (龙格-库塔)
Position-Based / Verlet Integration
非物理法,根据位置实时调整弹簧位置
Fluid Simulation (流体模拟)
通过模拟水(小球)的位置来模拟整个水体的运动
Lagrangian (拉格朗日法 - 质点法)
Eulerian (欧拉法 - 网格法)
Hybrid (混合欧拉法和拉格朗日法)
Rigid Body Simulation (刚体模拟)
帧缓冲(FrameBuffer)
先将整个场景利用帧缓冲渲染到一个纹理上,再将纹理利用默认的帧缓冲渲染至一个四边形(屏幕)上
颜色缓冲(Color_Buffer)
写入颜色值,控制像素显示
深度缓冲(Depth_Buffer)
写入深度信息,进行深度测试,计算遮挡关系
模板缓冲(Stencil_Buffer)
丢弃特定片段,实现部分渲染,设置物体轮廓
防止深度冲突
1.避免将两个物体靠的太近,导致部分三角形重叠2.将投影矩阵变换的近平面设置远一点,提高整体精度3.使用更高精度的深度缓冲,如将24位提高到32位的深度缓冲
坐标系统
摄像机
图形渲染管线
初始化绘制代码