MineGraph Docs Help

术语表

这里列出了整个图书馆中可能会出现的术语,这些术语或常见或罕见,我们会尽可能多地收录。在遇到不能理解的术语时,可以到此文档中进行查阅。

一些术语是临时简单存放,若未来为这些术语单开了解释文档,则会从这里移除。

如果你有更多想要提供的术语,或者发现了术语中的疏漏,可以在 GitHub 上为我们提交 Issue 和 Pull Request。

约定

粗体

表示强调关键词

斜体

表示 引用人/团队名加粗时二次强调

跳转

跳转到站内其他位置,或当链接后跟有 ↗ 时,表示跳转站外链接。将鼠标悬停在其上有时会有和缩写一样的提示。

角标

表示这只在对应环境中有效。

缩写

鼠标悬停或点击 触屏设备 可以查看缩写全称。

代码

表示这是程序运行时显示/日志/代码内容,或计算机行为。
代码块内容 的约定:

  • <尖括号> :由尖括号括起来的内容表示在这个区域内应该填写的内容。例: <文件名>.jpg ,其中 <文件名> 部分可以使用任意符合尖括号内定义的内容替换,例: 图片1.jpg

    • 在替换时应当将尖括号一同替换

  • [方括号] :分为参数和数组两种情况。

    • 表示函数中内容可选填入,例: smooth([id], val, [fadeInTime, [fadeOutTime]])

    • 在数组中,方括号不需要被一同替换,此时,例: float[a][b] 可以替换为 float[1][3]

  • 函数() :函数分为原型和调用两种情况。

    • 当函数和参数含有 变量类型 时,表示这是函数的原型 。例: float floor(float num)

      • 有些函数有多个可以传入的变量类型,此时会在变量类型处使用 <尖括号> 。例如 min(<int|float> numA, <int|float> numB)

    • 当函数内参数仅有变量类型时,表示我们调用函数时会在这个函数内填何种参数。例: max(float, float)

按键

表示这是键盘或者鼠标的按键

  • AB 表示同时按下 A 和 B

  • A, B 表示按下 A 并松开后再按下 B

  • ^A 表示按住 A

公式

形如 的非衬线西文内容。

游戏相关

JE

Java 版游戏,在本文档中,也可以表示只能在 Java 版渲染模组下有效。

BE

基岩版游戏,这其中也包含了PE

NE

网易代理的中国版游戏,也称网易版 ,表示为网易版独占,例:防沉迷 NE ,延迟渲染 API BE(NE)

模组和文件包体

模组

Mod ,由第三方编写的修改原版游戏内容的文件包。

模组加载器

Mod Loader ,由第三方提供的用以加载模组的嵌入式程序。目前主流的加载器有 ForgeFabric ,此外还有 Fabric 的分支版本 Quilt 以及自 JE 1.12.2 停止更新的 LiteLoader ,现在还有从 Forge 独立出来的 NeoForge ,它的目标是做一个可以通用的加载器。

  • Fabric 和 Quilt 的接口(API)和加载器本身是独立的,而其他加载器均内置了接口。

资源包

Resource Pack ,即通俗所说的材质包,详见 资源包 基本概念

光影包

Shader Pack ,由一个或数个 着色器 组成的一套流水线工程,用以渲染画面。

整合包

Mod Pack ,由多个模组整合而成的文件包。

  • 国内以前的整合包通常是懒人包 ,即:将游戏本体启动器模组以及其他配置和资源文件打包,玩家解压之后即可启动游玩。

  • 国外标准的整合包是 CurseForge 格式 ,这种整合包只包含了需要的模组和配置信息,需要在启动器上在线安装好后才能游玩,这通常需要正版账户 。顾名思义,其由 CurseForge 发起建立,是如今很多启动器都支持的格式。由启动器在下载安装模组接口、模组和其他外围资源时同时下载游戏本体和资源库。

    • 国内的启动器如 HMCLPCL 2BakaXL 等启动器也均跟进支持了此格式。

数据包

Data PackJE 1.13 加入的由官方支持的可以修改世界内数据的文件包,自 JE 1.16-pre1 起可以在创建世界之前加载数据包。

渲染模组和引擎

Blaze3D JE

Java 版现用的渲染引擎。

Render Dragon BE

渲染龙 ,基岩版现用的渲染引擎。

GLSL Shader Core

光影核心模组, 最早的 Java 版光影模组。

  • 在 OptiFine 集成后其更新频率明显下降,不再提供新功能支持。

  • 作为一个用于运行老旧光影的备选项,光影核心已于 JE 1.12.2 停止更新。

OptiFine

高清修复 ,简称 OF ,老牌 Java 版优化模组。作者为 sp614x

  • 最早是提供优化并合并了 MCPatcher 的更大纹理分辨率支持的模组,这也是中文名被翻译为高清修复的原因。

  • JE 1.8 之后集成了 GLSL Shader Core 的功能,开始提供光影支持。

  • 在某一版本中整合了动态光源模组,让世界中的实体光源可用于照明。

Sodium Fabric / Quilt / NeoForge

意为 ,伴随 Fabric 出现的新兴优化模组,旨在优化 JE 1.14 后的游戏性能。

Iris Fabric / Quilt / NeoForge

伴随 Fabric 出现的新兴光影模组。由于 OptiFine 闭源导致很多模组无法兼容 ,而很多玩家想要在整合包中运行光影,Iris 由此而生。

  • 如今 Iris 已经在着手支持独占功能,并且与 Sodium 深度绑定。

Oculus Forge

Iris 的 Forge 分支,旨在提供与 Iris 一样优秀的模组兼容性。

Canvas Fabric

另一新兴渲染模组,完全独立于 OptiFine 之外,通过资源包进行加载。具有极强的兼容性和很多独有特性。

Blaze4D Fabric

使用 Vulkan 的实验性渲染引擎。

  • 与 OptiFine 或 Sodium 不同,它的目的不是优化,但是也包含了一定的性能改进。

    • 其唯一真正制作的优化工作是 baked-entity-models (烘焙实体模型),并将其提交给了 Sodium 以供所有人使用。

  • 未来将允许开发者将 DLSSFSR 乃至硬件加速光线追踪引入到光影开发中,但是目前来说仍旧遥遥无期。

Focal Engine 所有加载器

Continuum 研发的渲染模组。

  • 目前是 OptiFine 的增强模组,主要用于他们自己的光影包 Continuum 2.1 / RT 的代码支持、加密和联网验证,同时支持 Stratum 的安装。

  • 更长远的目标是独立于 OptiFine 在 Vulkan 上实现光影渲染,给其他作者提供加密和联网验证及其他支持,并引入硬件加速光线追踪

Advanced Shader Forge

是一个 OptiFine 辅助模组,旨在让 JE 1.12.2 兼容更高版本的光影。

计算机相关

数学基础

标量

也称数量,一个数字就是一个标量。

区间

即取值范围

  • 表示

  • 表示

  • 表示

向量

也称矢量,多个标量构成的有向的量。

参数量相等的向量称为同维向量。

模长

向量的长度。

单位向量

模长为 1 的向量。

归一化
  • 对于标量:将特定范围内的数据映射到 的过程。

  • 对于向量:将一个非零向量转换为单位向量的过程。

点乘

两个向量运算为一个标量,得到的值称为内积。

叉乘

向量之间的有序乘法,得到的向量称为外积。

其中 为向量 的夹角,方向遵循右手螺旋定则

向量的普通四则运算

将两个同维向量的对应分量或一个向量的所有分量与一个标量进行四则运算。

矩阵

形如 由多个标量按长方排列而成的阵列称为矩阵。

行列相等的矩阵称为方阵,N 维向量的本质是一个 列的矩阵。

方阵从左上角至右下角的元素集合称为主对角线。

单位矩阵

主对角线上元素为 ,其余元素为 的方阵。

矩阵乘法

矩阵乘法是矩阵间的有序乘法。

矩阵乘法中左侧矩阵的必须等于右侧矩阵的 ,做积所得矩阵为右侧矩阵的左侧矩阵的 ,即:一个 列的矩阵与一个 列矩阵相乘,所得矩阵为 列。
当向量与矩阵做积时,应该将向量视作一个 列的矩阵:

当向量与向量进行点乘时,实际上就是进行了矩阵乘法:

要进行向量的同维变换,需要将同维方阵置于左侧与其相乘,这种乘法称为左乘 。左乘本质上是进行了行变换(列数不变),而相应的右乘则是进行了列变换。

计算机基础

像素

Pixel ,简称 PX ,二维位图的最小显示单位。

体素

Voxel ,简称 VX ,对应像素的定义,作为一种三维图形的表示方法,在此类空间中定义的三维图形,体素是最小坐标单位。

位图

也称标量图 ,最小单位为像素的图像。

矢量图

由顶点位置和连接顶点的线段信息所组成的图像。 .svg 就是其中一种矢量图格式。

分辨率

分辨率是表征位图大小的参数。

视频文件和显示器中常用的分辨率 1080p 意为纵向 1080 px逐行扫描

  • p 意为逐行扫描 ,而 i 则为隔行扫描

    • 扫描:即从上至下显示画面的过程,这个名词沿用自 CRT 显示器时代的画面显示方式。从左至右一排像素为一条扫描线。

      • 逐行扫描为从上至下依次显示每排像素,也是现代显示器和视频文件大多数情况下的显示方式。

      • 隔行扫描以两条扫描线为一组,上面一条称上场 ,下面一条称下场 。上场和下场依次更新,每一轮画面显示只会更新一个场。

  • 伴随此种简写的分辨率出现的还常有画面比例 (画幅)。

    • 你可以使用这个公式来计算横向分辨率

  • 2k4k 等的定义:

    • 由标准情况下的横向分辨率决定,k 的换算公式为:

    • 标准的 4k 分辨率为 ,在 16:9 下为 ,由此可以推论

    • 从这个公式还可以知道,所谓 2k 指的实际上是 ,而 2.67k ,更准确的叫法是 1440P

离散和连续

像素和体素都是一种离散的记录方式,它们依照特定的分辨率进行记录。通常使用整数值来表示像素和体素坐标。

与之对应的,矢量图是一种以浮点精度为最大精度记录信息的方式。通常使用浮点值来表示顶点坐标。

颜色通道

颜色通道的数量表示色彩类型的数量,显示器的颜色通道为 RGB,也就是光学三原色红绿蓝 。在此基础上再加上 A 通道,也就是不透明度 ,就构成了我们常用的 RGBA格式 。在没有特殊说明的情况下,我们都以 RGBA格式 为准。

API

应用程序接口 ,其提供特定的方法,让第三方代码通过它们修改程序。

编程类

作用域

表示程序和变量可以被调用的范围,在下面这段代码中

[...]; int a = 0; float function() { int b = 0; a = 1; // 可行 [...]; } void main() { a = 2; // 可行 b = 1; // 不可行 [...]; }

a 可以被 function()main() 调用,而 b 只能在 function() 内被调用。

当作用域在最外层(位置形如 a )时,我们称其为全局变量 ;与之相对的(位置形如 b ),我们称其为局部变量

变量类型和修饰符

在许多语言中,我们都需要在定义一个变量的时候同时定义它的类型。如 int a 前面的 int 就是变量 a 的变量类型,这决定了计算机如何处理它们。

  • 这里列出了一些 C 中常见的变量类型(不包含扩展):

    • int :整数。

      • long :长整数,长度是 int 的两倍。

        • longlong int 表示一个长整型, long longlong long int 表示一个超长整型。

      • short :短整数,长度是 int 的一半。

    • float :浮点数,计算机中可以表示小数的类型。

      • double :双精度浮点,长度是 float 的两倍。

      • half :半精度浮点,长度是 float 的一半。

    • char :单个字符。

除了数据类型以外,我们还可能会用到一些修饰符,它们可以用来对控制变量类型或改变变量的行为,例如 const int b;

  • 这里列出了一些 C 中常见的修饰符:

    • auto :默认的变量修饰符,不指定存放位置,不指定生命周期。 通常省略

    • static

      • 修饰函数时:表示该函数只能在此文件内被调用。

      • 修饰 全局变量 时:表示该变量只在此文件内有效。

      • 修饰 局部变量 时:表示退出作用域之后变量不会被销毁,重新进入作用域时变量也不会被初始化(除非在声明时进行了赋值)。

    • register :表示尝试把该变量放入 CPU 寄存器而不是内存中,以获得更快的访问速度,特别是那些经常会访问的变量。

    • const :表示该变量值不能被修改,此时我们可以把其视为常量

指针

在变量类型后紧跟 * 表示声明一个指针类型的变量,它的值是对应变量类型的内存地址

  • 要对它进行进行赋值,我们需要使用取地址符 & 紧跟一个对应类型的变量。

  • 要想调用它所指向的值,我们要在调用此变量时在前面加上取值符 *

数组

许多同类型数据的集合。通常在数据类型后加 [] 来定义。 []的数量代表了数组的维度

  • 我们使用形如 int a[][]... 来声明一个数组变量,使用 int[][]... 来直接表示数组类型。例如 int c[2][3]

  • 声明出来的数组变量本身是一个指针 ,我们可以使用形如 a[0] 来访问数组 a[][]... 中第一维上的第一个元素。

代码示例

在这个示例中,我们使用 C 对前面的说明进行了实践,
为了降低阅读门槛,我们省略了除变量相关外的具体代码,并以 [...] 表示:

[...]; float glva = 0; // 声明一个全局的浮点型变量 float func1(float para) { // 声明函数,需要传入一个浮点型参数 static float stva = 1.414; // 声明一个不会被销毁的变量,它只会初始化一次 stva += para + glva; // 全局变量可以随时使用 return stva; // 返回计算后的值 } void main() { float pi = 3.14; // 声明一个浮点型变量 float* f_ptr = &pi; // 声明一个浮点指针,指向pi const float e = 2.7182818; // 声明一个数据不可更改的常量 long int g[2][3][3]; // 声明一个长整型数组 [输出两次 func1(e) 的值]; [输出数组 g 的值]; [输出指针 f_ptr 的值,输出指针(取值)*f_ptr 的值]; [输出全局变量(取地址)&glva 的值]; [...]; }

它的输出结果是:

第一次调用函数的值为:4.13228 第二次调用函数的值为:6.85056 数组变量的地址为:0000008a3d6ff650 指针所指的变量的地址为:0000008a3d6ff6a8,值为:3.14 在主函数中调用了全局变量,它的地址为:00007ff7cf687098
  • 我们可以注意到两次调用函数返回的值不一致,但是我们没有对全局变量 glva 做任何赋值操作,传入的变量 e 是一个常量,所以只能是没有被销毁的 stva 变化了。

  • 直接输出 g 的值,注意到它输出的是一个十六进制的地址。

  • 直接输出 f_ptr 的值,发现它也是一个地址,我们对其取值 *f_ptr 并输出,最终成功得到了 pi 的值。

  • 我们还成功在主函数中输出了全局变量的地址 &glva

    图形学(3D)

    图形基础

    参阅: 着色器 基本概念和轶事

    着色器

    Shader ,光影中包含一个或数个着色器。着色器定义了如何处理传入的三角形,以及向何处输出何种信息。

    渲染管线

    Rendering Pipeline ,规定了着色器处理画面的顺序。

    三角形和法线

    不同于前文所述的 体素 ,3D图形更常用的是类似 矢量图 的渲染方法。

    • 计算机图形学约定,三角形的三个顶点以逆时针顺序所形成的平面就是这个形状的正面

      • 垂直于这个面朝外的方向就是这个三角形的面法线 (Surface Normal)。

    着色(目标)点

    Shading Point ,指当前着色器正在处理的像素点。

    采样(目标)点

    Sampling Point ,指当前着色器正在 缓冲区 上采样的像素点。

    视平面

    在场景中所有能看到的内容可以构成一个平截头体 ,或者说视锥体 。最近能看见的位置所成的平面称为近平面 ,同理最远可见的位置所成的平面称为远平面 。为了保证近处不被意外遮挡或剔除,通常会将近平面设置为一个小值,沿摄像机朝向在Z轴上小于这个位置的几何体都会被剔除。而归一化就是在基于摄像机的坐标系下,将近平面到远平面的坐标映射到 [0, 1] 上。

    平行光源

    也称无限光 ,距离玩家无穷远处的光源。

    点光源

    从自身向所有方向发射光照的光源。

    渲染方法

    现代常用的渲染方法有两种, 向前渲染法延迟渲染法

    向前渲染法

    将一类几何体全部传入对应的单个着色器,处理完毕后,将颜色直接输出在屏幕上。

    其因所有效果的处理都随管线向前推进而得名。

    延迟渲染法

    将画面处理分为两趟

    几何缓冲(阶段)

    Geometry Buffer (Stage) ,这种阶段的着色器因传入的顶点数据是场景中实际的几何体而得名,它还接受所有原始纹理(包括法线、高光等)的传入,并将其映射到几何体上。

    延迟处理(阶段)

    Deferred / Composite (Stage) ,这种阶段的着色器所使用的信息都是之前的几何缓冲上一个延迟处理着色器绘制到缓冲区的画面。在这个阶段,着色器从缓冲区中读取信息,并将计算结果绘制到铺屏四边形上。

    • 此阶段无法引入原本场景中额外的几何和颜色信息,不能改变原本的纹理映射坐标。

    • 在这个阶段可以通过各种深度图逆矩阵重建各种坐标。

    其因延后了大部分性能开销较大的效果到独立阶段而得名。

    缓冲区

    Frame Buffer ,亦称屏幕缓冲、帧缓冲,是存储图像的区域(对象)。可以理解为一张图片,在延迟渲染法中,先在几何缓冲阶段将原始信息写入缓冲区,再在延迟处理阶段调用信息进行运算。

    深度缓冲区

    Depth Buffer ,也叫深度图,是一种特殊的缓冲区,它只有一个通常是 32 位的 R 通道。它所包含的信息是相对垂直于摄像机朝向的平面的归一化距离,越远的地方值越趋于 1.0 ,反之越趋于 0.0

    颜色附件

    Color Attachments ,是负责着色器间传递数据的对象,每个颜色附件包含两个缓冲区,以逻辑名称 main )和 alt )标记,在不同系统和 GPU 上,颜色附件的数量可能有所差异。得益于双缓冲区颜色附件,着色器可以读取 缓冲区中的信息进行计算,最后再输出回同附件的 缓冲区。在 OptiFine 中, 阴影颜色附件有 2 个,而屏幕颜色附件至多有 16 个。
    * 几何缓冲阶段不会翻转缓冲区延迟处理阶段则在每个着色器结束后都会翻转

    坐标系

    Coordinate System ,通常以 XYZW 为坐标。在着色器中基于不同坐标系即称为不同空间 ,通过矩阵可以在不同坐标系之间转换。

    局部空间

    Local Space ,以单个物体为基准,通常以画面中心为原点,描述每个物体的每个顶点的相对位置。

    世界空间

    World Space ,以整个场景为基准,描述每个顶点的绝对位置。

    观察空间

    View Space ,以摄像机为基准,以摄像机为原点,描述每个顶点相对摄像机的位置。

    裁切空间

    View Space ,以摄像机为基准,以画面中心为原点,坐标取值范围为 ,描述每个顶点经过透视映射(投影)后相对画布的位置。

    屏幕空间

    Screen Space ,以窗口为基准,以画面左下角为原点,坐标取值范围为 ,描述每个顶点在屏幕上的位置。

    纹理坐标

    Texture Coordinate ,通常以 UV 为坐标。以二维纹理为例,对于三维空间中任意三角形的表面上的任意点,都有一个在二维纹理上对应的坐标,这个坐标就是这个三角形此处的纹理坐标。纹理坐标可以在着色器中进行各种变换。

    • 将二维纹理坐标上的颜色映射到三维空间中三角形上的过程,就是纹理映射,而三角形获取纹理上的颜色,就称为纹理采样。

    精灵图

    Sprite ,屏幕上的每个组成元素都是一个精灵。

    • 古早主机上,活动的贴图都是精灵,而背景则称为“瓦片(Tile)”。

    • 现代平台上,精灵通常指 图元

    OpenGL 相关

    OpenGL

    开源图形库 ,简称 GL。Java 版所使用的图形库。

    GLSL

    (Open)GL 着色语言 ,顾名思义,它是 OpenGL 的着色器所使用的语言,语法类似 C。

    • 其它的图形库还有如 Vulkan,它的着色器语言也是 GLSL;DirectX,它的着色器语言是 HLSL (高级着色语言)。

    GLSL 类型

    除了 前文 所提到的类型外,GLSL 还有新增了一些数据类型:

    • bool :布尔值,可以是 true (1) 或 false (0)。

      • C 可以使用 stdbool.h 引入这个类型。

    • vec<N> :浮点向量, 是属于区间 的整数,表示该向量的维度。

      • ivec<N> 为整数向量, bvec<N> 为布尔值向量。

      • 例: vec3 ivec4

      • 在 OpenGL 和 GLSL 中,一个 vec4 类型可以被看做一个 float[4] 类型,但是需要注意:我们声明 float[] 类型的变量时,本质上是声明了一个指针,所以我们不能像 vec<N> 一样直接进行 向量四则运算

      • 我们可以使用 .xyzw/.rgba/.stpq 来访问向量中特定的分量。

    • mat<N> mat<N>x<M> :浮点矩阵, 可以为 的整数,表示该矩阵的大小。

      • mat<N> 表示 大小的矩阵, mat<N>x<M> 表示 大小的矩阵。

      • 例: mat3mat2x4

      • 假设我们现在有一个矩阵 mat3 M 我们可以使用 M[1][2] 来访问对应位置上的量。

    • sampler<N>D :样本,可以通过纹理采样函数来获取样本的信息, N 可以为 的整数,表示该样本的维度。

      • samplerCube :六面包围盒式的样本。

      • 例: sampler2D

    • 此外,除了 auto (默认)和 const ,GLSL 无法使用其他修饰符。

    GLSL 函数

    这里列出了一些常用的 GLSL 函数:

    • texture(sampler<N>D texture, vec<N> texcoord) :纹理采样函数

      1. sampler<N>D texture :与函数维度相等的样本,通常是 纹理

      2. vec<N> texcoord :与函数维度相等的向量,通常是 纹理坐标

        • N 应该一致。

        • 在 GL 上最早使用的纹理采样函数 texture<N>D() 已经弃用,虽然仍可以使用,但是不推荐这样做。

    • dot(vec<N> a, vec<N> b)点乘

    • cross(vec<N> a, vec<N> b)叉乘

    • normalize(vec<N> a)归一化

    • smoothstep(float a, float b, float x) ,将 x 从 [a, b] 平滑地映射到 [0, 1]。

    纹理/贴图相关

    灰度图

    仅有一个 颜色通道 的图片。

    阴影贴图

    Shadow Map ,是深度图的一种,其运作原理大致如下:

    1. 光源视角绘制深度图并从其方向上投射到玩家视角作为距光源的最近距离

      • 这里所说的最近距离是指从光源出发,沿该点与光源连线上最近可以遇到的物体。

    2. 将其与玩家视角里每个像素实际到光源的距离做比较;

    3. 如果实际距离比最近距离更大,就是阴影。

      • 由于其算法特性, 阴影精度与阴影贴图分辨率直接挂钩,同时会大幅影响性能

    法线贴图

    Normal Map ,偏移物体表面的朝向,这样就可以影响每个纹理像素的光照强度,从而产生额外的表面细节。

    • 在计算机渲染中,我们通常使用法线信息与光源方向做 点乘 dot(lightDir, Normal) 来获得该像素被光源照亮的程度,法线贴图在此时的作用就是偏移了 Normal 这个量。所以实际上法线并没有真正偏移表面 ,而只是让该纹理像素的信息被改写。

    渲染技术相关

    参阅 光影 技术科普

    视差遮蔽映射

    POM ,简称视差

    • 和法线相似,视差贴图通过偏移表面的采样坐标 ,让玩家从不同角度感觉到表面上某些纹理被其他纹理遮挡,从而创造凹凸的观感,这也是其名字中映射的含义。

    基于物理的渲染

    PBR ,其核心是渲染方程。

    • 一种着色的方法,更准确地表现光线如何与材料性质相互作用。

    • 它有一些传统着色中没有考虑到的部分,如能量守恒光电效应等。

    渲染方程

    渲染方程用来描述场景中每个点如何物理地与光照交互,是 PBR 的核心算法。

    其中:
    表示 着色点
    表示观察方向;
    表示光照方向;
    表示表面法线;
    表示 BRDF (双向反射分布函数),表示表面材质对光照的影响;
    表示光源的辐射率函数,表示光照的衰减;
    表示着色点的自发光强度;
    表示表面方向与光线夹角对光照强度的影响;
    表示在法半球所有方向上计算结果的积分。

    全局光照

    GI 。是直接光照和间接光照的集合。

    直接光照

    Direct Lighting ,直接来自光源的光照。

    • 在 Minecraft 中,通常只有太阳和月亮能提供直接光照,方块光照均是通过光照贴图实现的。

      • 体素化 光影(通常伴生光线追踪)中,将光源方块编码进体素之后,也可以作为光源投射直接光照。

    • 在计算机图形学中,我们把可以投射阴影贴图的光源称为直接投影光源 ,OptiFine 光影直接支持的直接投影光源有且仅有太阳或(取决于时间)月亮。

    间接光照

    Indirect Lighting ,直接光照经过物体表面反射或内部散射最终离开物体,并打在周围其他表面上形成的照明效果。

    散射

    Scattering ,是电子吸收光线(电磁波)能量,再向周围发射电磁波的物理现象。

    焦散

    Caustic ,经由光滑表面散射产生方向性较强的光线 ,打到其他表面上而成的局部更亮的现象。

    • 可以理解为表面光滑度参与影响光线路径之后所形成的间接光照。

    • 直接光照受其影响更大。

    SSS

    此简写包含以下两种概念

    次表面散射

    模拟光线进入物体后在其内部经过多次散射后射出照亮物体内部的效果,允许某些材质(如纸、树叶、皮肤)的物体透过光线,从而产生更加通透真实的质感。

    屏幕空间阴影

    由于阴影贴图的精度不足,容易在物体与表面接触的边缘产生锯齿和偏移。屏幕空间阴影就是用于这些地方来补足阴影的效果,因此也称为接触阴影 (Contact Shadow)。

    屏幕空间反射

    SSR 。采样屏幕上的内容来绘制反射场景,其受限于 屏幕空间

    环境光遮蔽

    AO 。间接光照在场景间经过各种反射之后逐渐被场景所吸收和遮挡的效果。

    光线追踪

    RT ,模拟光子从光源到达表面的过程。

    参阅: 光线追踪专题

    逆向光线追踪

    从摄像机发射每个“光子”,根据光路可逆原理 ,逆向寻找光源。

    路径追踪

    PT ,使用蒙特卡洛随机采样并模拟光子多次反弹,经由漫反射、镜面反射、折射等直到达到退出条件所最终产生的光照。

    09 四月 2025