Minecraft Java版光影的开发资料整理

Minecraft Java版光影的开发资料整理

线性代数对着色器的开发很有用,因为矢量和矩阵操作在着色器(以及一般的3D图形)中非常常见。3blue1brown在这里有一个关于这个问题的不错的系列:【官方双语/合集】线性代数的本质 – 系列合集_哔哩哔哩_bilibili

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

OptiFine的渲染管线在doc文件夹里有一些文档:https://github.com/sp614x/optifine/tree/master/OptiFineDoc/doc。特别是要看shaders.txt和shaders.properties。这些文档也可以在你下载的 OptiFine.jar 文件中找到。

一旦你掌握了所有这些,有两种常见的方法可以开始实践你的技能:编辑别人的包,或者从头开始制作自己的包。你将从这两种做法中学到不同的技能,所以建议至少尝试这两种做法,但从你更喜欢的那一种开始。

第三方教程和着色器开发的有用资源:
https://optifine.readthedocs.io/index.html
OptiFine的doc文件夹的替代版本,看起来比github上的版本要好。

https://pastebin.com/aB5MJ7aN
OptiFine 的流水线、可用的程序和阶段、变化和缓冲区的概述。

https://github.com/Shadax-stack/MinecraftShaderProgramming/tree/master

Minecraft 渲染方式、缓冲区和一些示例效果的概述(含代码、图片和解释)。

https://cdn.discordapp.com/attachments/736928196162879510/856960040468873246/Shadow_tutorial.zip

阴影的解释和示例代码。

https://cdn.discordapp.com/attachments/237199950235041794/825483993951633438/base.zip

模板包包括大部分基本文件,但它们都没有实际作用。这使得它非常容易编辑。

https://docs.google.com/document/d/15TOAOVLgSNEoHGzpNlkez5cryH3hFF3awXL5Py81EMk/edit#
https://docs.google.com/document/d/18AhcnAI55liax72yh70njUomIzezOKshCurfdZPTKwM/edit#
https://github.com/bradleyq/mc_vanilla_shaders/tree/dev/resourcepack/assets/minecraft/shaders/program
https://github.com/ShockMicro/Minecraft-Shaders/wiki

关于原版着色器(非 OptiFine)的信息。

https://learnopengl.com/
https://www.lighthouse3d.com/tutorials/glsl-12-tutorial

这两个教程也包括OpenGL代码,但你不需要学习OpenGL的着色器。只有GLSL。它们也不是专门针对Minecraft的。

https://hughsk.io/fragment-foundry/chapters/01-hello-world.html

实践教程,在你阅读时测试你的技能。仍然不是专门关于Minecraft的。

https://www.shadertoy.com/

在你的浏览器中工作的GLSL沙盒。有点类似于一个复合通道。包含了很多人的示例代码。