Minecraftで学ぶ!シェーダー作成の基本!【glsl】

下一次:追踪影像的方法

はじめに

2017-11-30_20.45.50.jpg

是的!它可以将Minecraft的世界变得非常逼真!有许多由志愿者制作的不同影子模组,其中代表性的是SEUS Renewed,但它们都有一个共同点…

它是用一种名为GLSL的着色器语言编写的!

glsl(着色器語言)是…

你可以认为它是专为图形而设计的C语言版本。

在中文中,有丰富的元素,比如向量和矩阵等等,可以方便地进行颜色和坐标计算!

在这篇文章中,我们将通过使用Minecraft来解释glsl的基本知识!

准备

首先,请下载Minecraft的着色器模板。

模板在这里。

将模板应用于Minecraft的方法基本上与其他影子模组没有太大区别。
(在这里省略了介绍安装方法的说明)

2021-02-06_23.15.04.png

应用后,Minecraft世界应该保持与未引入任何内容时的外观几乎没有变化。

如果要找到差異的話,可能是在于有無雾霾吧。

我们来实际编辑一下吧!

打开模板文件夹后,里面有一个名为“shaders”的文件夹。

在其中有很多GLSL着色器文件,这些文件的扩展名是“.fsh”和“.vsh”。

让我们来编辑一下负责Minecraft基本方块颜色的”gbuffers_terrain.fsh”文件吧。

#version 120

uniform sampler2D lightmap;
uniform sampler2D texture;

varying vec2 lmcoord;
varying vec2 texcoord;
varying vec4 glcolor;

void main() {
    vec4 diffuse = texture2D(texture, texcoord) * glcolor;
    diffuse *= texture2D(lightmap, lmcoord);

    gl_FragData[0] = diffuse;
}

简单解释一下这个机制,就是把Minecraft的材质信息和亮度信息放入名为“diffuse”的变量中,最终把这些信息放入“gl_FragData[0]”来决定颜色信息。

由于「diffuse」包含了「红、绿、蓝、透明度」的信息,因此,这次我们将编辑除透明度外的色彩信息。

diffuse.rgb *= vec3(3.0 , 1.0 , 1.0);

把以下的代码放在“gl_FragData[0] = diffuse;”和“diffuse *= texture2D(lightmap, lmcoord);”之间,并保存,然后尝试加载着色器。

2021-02-06_23.33.36.png

方块变得鲜红了呢。

「A *= B;」的意思是将A乘以A与B的值放入A中,如果用前面提到的代码来替换,意思就是将diffuse.rgb乘以diffuse.rgb和”红3.0,绿1.0,蓝1.0″的值放入diffuse.rgb中。

通过在“diffuse”后添加“.rgb”,您可以除了透明度之外编辑三种颜色的信息。

“vec3()” 可以记作一个括号中,由逗号分隔的三个数字组合而成的意思。

正如你所知,无论我们将数字乘以1.0,结果都不会改变。因此,根据我之前所写的代码,红色元素会变为其三倍。

通过更改vec3()括号中的数值,可以将颜色更改为您喜欢的颜色,请尝试更改为您喜欢的颜色!

最后

这是我的第一篇文章。之所以选择使用Minecraft来介绍glsl的基础知识,是因为

・因为这是一款非常受欢迎的游戏,所以知名度很高。
・由于不需要搭建环境,所以可以轻松地开始。
・在Qiita上没有找到类似的文章。
・简单来说,这是我非常喜欢的游戏。

因为有诸多原因.

Minecraft是一款付费游戏,除了着色器外,还可以通过Mod、命令、数据包、资源包等,在一个游戏中,无论是有编程经验的人还是非编程人员都可以进行各种多样的创作,我认为这一点非常棒!

希望下次有机会能解释如何进行尾随,今后也请多多关照!

bannerAds