开发相关资料整理

过时的文档

这篇文档在 新版文档open in new window 中有修改,此处仅为旧版留档。

开发之前的基础概念

在编写着色器之前,我们需要了解最基础的概念。经过多个着色器作者的筛选,我们推荐观看以下视频:

不要求必须看懂所有内容,但至少需要理解前半部分所提到的概念,初步了解各种技术的原理,这样在后续才能借助代码工具实现想要的效果。

着色器开发背景知识

着色器开发一般有 3 套背景知识:线性代数、 GLSL 和 OptiFine 的渲染管线

线性代数对着色器开发很有用,因为矢量和矩阵操作在着色器(以及一般的三维图形)中非常常见。

3blue1brown 在这里有一个不错的系列介绍:

GLSL 是 OpenGL 的着色器语言。 互联网上有不少这方面的教程,但 Minecraft 特别使用了一个旧的 OpenGL 版本,所以如果找到一个同样旧的 GLSL 教程可能是有用的。任何写着 #version 120 的东西都是没问题的。 JE 1.17+ 将使用 #version 150 ,但你并不需要局限于这些特定的 #version ,你可以使用你的 GPU 驱动支持的任何版本。

OptiFine 的官方文档open in new window 中也给出了不少开发细节,尤其是 shaders.txtshaders.properties 。这些文档也可以在你下载的 OptiFine .jar 文件中找到。

着色器开发

一旦你掌握了以上的所有内容,就可以开始将你的技能付诸实践,有两种常见的方法:

  1. 魔改别人的着色器包;
  2. 从头开始制作自己的着色器包。

你将从这两种做法中学到不同的技能,所以建议至少尝试这两种做法,但从你更喜欢的那一种开始。注意:魔改着色器包前需要了解相关版权问题,至少应该知道作者是否允许别人魔改后发布他的着色器。

第三方教程和对着色器开发的有用资源:

资源包开发

开发技巧和窍门

  • 快速重载:

    • Iris 上,你可以按 R 来重新加载当前的着色器包。事实上,这是一个可配置的绑定键。
    • OptiFine 上,该键位是 F3+R ,而且是不可配置的。不需要进入着色器选择菜单来重新加载着色器。
  • 文件夹:

    • 文件夹可以作为着色器包加载,就像 zip 文件一样
    • 目录结构是 .minecraft/shaderpacks/<着色器名称>/shaders/<着色器代码>
    • 不需要每次想改变什么的时候都解压和重新压缩你的着色器包。
  • 语法错误调试(OptiFine):

    • OptiFine 上,如果你的着色器包有语法错误,你会在聊天菜单中看到 无效的程序(invalid programs) 提示;
    • 在写这篇文档的时候, Iris 没有这个错误信息。相反,如果你有任何无效的程序,Iris完全禁用着色器
    • 无论如何,如果这两种情况发生在你身上,你可以在你的 日志文件 中找到更多关于导致程序错误的信息。
    • 日志可以在 .minecraft/logs/latest.log 找到。
      • 如果你使用 Forge ,那么日志文件将被 .minecraft/logs/fml-client-latest.log 代替。
    • 如果你不知道在你的日志文件中寻找什么,请在频道的 求助问答平台open in new window 处寻求帮助,并确保在那里上传你的日志文件。
  • 语法错误调试(Iris):

    • 在着色器选择菜单中按下 CTRL + D 可以启用“调试模式”。
    • 在调试模式下,如果您的着色器包中存在语法错误,Iris 会在每次加载着色器包时在游戏中显示错误信息。
    • 请注意,当前版本的Iris可能会显示错误的文件名和行号,降低了其实用性。
    • 调试模式还会将修补后的着色器包输出到 .minecraft/patched_shaders/,给出的行号将与修补后的着色器包相匹配。
    • 修补后的着色器包通常类似于原始着色器包,这可以作为另一种跟踪语法错误的方法。
  • 快速查看日志文件:

    • 如果您使用官方启动器,您可以在设置 -> 启动 Minecraft: Java Edition 时打开输出日志中启用选项,以在游戏运行时显示日志文件。
    • 这样做可以更快地访问日志文件,尤其是当您没有一个与当前打开文件同步的文本编辑器时。
    • MultiMC 和 Prism Launcher 都有类似的选项。其他启动器可能不支持此功能。