森罗万象
教程
OptiFine文档
Blockbench文档
论坛版 (opens new window)
下载示例 (opens new window)
教程
OptiFine文档
Blockbench文档
论坛版 (opens new window)
下载示例 (opens new window)
  • 属性文件说明
  • 连接纹理
  • 自然纹理
  • 更好的草地
  • 自定义方块渲染
  • 自定义物品纹理
  • 随机实体纹理
  • 自定义实体模型
  • 自定义动画
  • 自定义颜色
    • 颜色设置
    • 颜色映射
    • 生物群系调色板
    • 生物群系调色板:网格格式
    • 自定义光照贴图
      • 概述丨Overview
      • 自定义光照丨Custom lighting
      • 夜视效果丨Nightvision effect
      • 参考文献丨References
  • 自定义天空
  • 自发光纹理
  • 动态光源
  • 自定义载入画面
  • 自定义GUI
  • 自定义全景图
  • 高清字体
  • 系统属性
  • 纹理属性
  • 光影

  • 调试快捷键
  • 尚未完成的事

自定义光照贴图

Custom Lightmaps

# 概述丨Overview

OptiFine 让你可以自定义游戏中的光照

一个非常好的教程:https://www.mcbbs.net/thread-1014633-1-1.html (opens new window)

原版光照是如何工作的

每个方块都有两个范围为 0 到 15 的光照等级(light values),一个是天空亮度(sky brightness),另一个是方块亮度(torch brightness)。

被阳光直射的方块具有值为 15 的天空亮度,与之毗邻的位于阴影下的方块的天空亮度为 14,以此类推。深埋地下,且远离任何能看到天空的方块的方块的天空亮度为 0。方块亮度也类似。一个火把方块的光照等级为 14(荧石为15),每远离一个方块,光照等级下降1。

为了生成你在游戏中实际看见的光照,Minecraft 使用了一张 16x16 的光照贴图。它的两个轴分别对应两个种类的16个光照等级。

如果一个方块具有方块亮度 x 和天空亮度 y,那么坐标 (x,y) 就会作为它的光照贴图坐标。

光照贴图不在游戏的任何文件夹内,但每一帧都会生成。

两个变量影响光照贴图,一天中的时间和火把的闪烁。

通过让整个光照贴图变暗或变亮,Minecraft实现了黄昏/黎明的过渡和火把闪烁(torch flicker),而不是通过调整天空/火把的亮度。

# 自定义光照丨Custom lighting

为了创建自定义光照,你需要为每个世界新建一个光照贴图调色板:

下界:assets/minecraft/optifine/lightmap/world-1.png

主世界:assets/minecraft/optifine/lightmap/world0.png

末地:assets/minecraft/optifine/lightmap/world1.png

对于overworld(主世界)你还可以创建可选的降雨和雷暴天气调色板:

主世界降雨:assets/minecraft/optifine/lightmap/world0_rain.png

主世界雷暴:assets/minecraft/optifine/lightmap/world0_thunder.png

只有在定义了主世界调色板时,降雨和雷暴天气调色板才生效。

每个调色板都可以是任意宽度,但高度必须是32或64像素。如果高度为64像素,下半部分将用于夜视效果,这将于稍后讨论。

在32行像素中,上面16行代表阳光,下面16行代表火把的光。

两个列,上半部分的16个像素和下半部分的16个像素,被选择来形成最终用于渲染的16x16光照图的轴线。

lightmap_template.png 模板: images/lightmap_template.png

蓝色代表夜晚,橙色代表黄昏/黎明,青色代表白天,黄色代表闪电。在上半部分,左边代表夜晚,右边代表白天,其间有黄昏/黎明的过渡。调色板的最右边代表闪电。

重申,调色板没有固定的宽度,但是更宽意味着过渡中更多的细节空间。

译注:OptiFine提供的示例看不出对应的颜色了,可以参考下面这张图片,来源于https://bitbucket.org/prupe/mcpatcher/wiki/Lightmaps (opens new window) Template by Misa

火把的工作原理类似,但在这种情况下,x坐标只是一个模拟火把闪烁的随机值。沿x轴的变化将决定火炬闪烁有多明显。要使火把光线完全稳定,没有闪烁,就要让每一行的所有像素具有相同的颜色。

光照贴图在三个世界 (主世界, 下界, 末地) 中的工作方法都是一样的,但是由于在下界和末地没有昼夜,"一天中的时间(time of day)" 值为常量。对于这些世界你可以简单地给出0-15行相同的颜色。

# 夜视效果丨Nightvision effect

在原版游戏中,夜视效果是通过 1.0 / max(R,G,B) 缩放RGB值计算的。例如,(0.2, 0.3, 0.6) 在除以 0.6之后会变亮为 (0.333, 0.5, 1.0)。

你可以用高度为64像素而不是32像素的自定义光照贴图覆盖这个行为。需要提供四种调色板而不是两种: normal sun, normal torch, nightvision sun, nightvision torch。除了使用32-47行和48-63行,生成光照贴图的方式完全相同。

# 参考文献丨References

  • https://bitbucket.org/prupe/mcpatcher/wiki/Lightmaps (opens new window)

← 生物群系调色板:网格格式 自定义天空 →