この記事はMinecraft Java Edition 1.21.4
向けに作成されています。
NegativeSpaceFontの敵、「テキストの背景」
どうもこんにちは!クロスプです!
最近は/title
コマンドにNegativeSpaceFontを汎用した制作物が非常に多くなりました。
そんな時、あなたは「アクセシビリティ設定」にこんな設定をがある事を知っているのでしょうか?
この設定、「チャット」と「すべて」の2種類があるのですが、「すべて」を選択するとどうなるのでしょうか?
こんな感じで、普段バックグラウンドがついていないアクションバーやアイテムも全てつくようになるんです。
これだけならまあやりたい人だけオンにすればいい設定なのですが、ここでNegativeSpaceFontを使うとどうなるのでしょうか。
こちら、NegativeSpaceFontやシェーダーを使ってアクションバーで上にいい感じの文字を表示させました。
このテキストの位置を上下に変更した方法はゆるふ🐺様の下記の記事を超参考にしてつくりました。まじで感謝してます。
さて本題に入りましょう。
ここの下にある「黒いアクションバーのバックグラウンド」を消したいのです。
(わかりづらいけど上のバックグラウンドは自分で作った)
この背景を消したいのですが、リソースパックにテキストの背景なんていうテクスチャはありません。
ということは、ここはシェーダーにて制御されている事になります。こちらを今回消しましょう。
まずはshaders
ファイルのcore
シェーダーにrendertype_gui.json
を作成しましょう。
minecraft:core/rendertype_gui.json
{
"vertex": "alpha_custom:text_background_delete_gui",
"fragment": "alpha_custom:text_background_delete_gui",
"samplers": [],
"uniforms": [
{
"name": "ModelViewMat",
"type": "matrix4x4",
"count": 16,
"values": [
1.0,
0.0,
0.0,
0.0,
0.0,
1.0,
0.0,
0.0,
0.0,
0.0,
1.0,
0.0,
0.0,
0.0,
0.0,
1.0
]
},
{
"name": "ProjMat",
"type": "matrix4x4",
"count": 16,
"values": [
1.0,
0.0,
0.0,
0.0,
0.0,
1.0,
0.0,
0.0,
0.0,
0.0,
1.0,
0.0,
0.0,
0.0,
0.0,
1.0
]
},
{
"name": "ColorModulator",
"type": "float",
"count": 4,
"values": [
1.0,
1.0,
1.0,
1.0
]
}
]
}
ここにあるvertex
とfragment
の値はそれぞれ.vsh
と.fsh
の参照場所となります。
今回alpha_custom:text_background_delete_gui
を参照していますので、
assets/alpha_custom/shaders/
に
text_background_delete_gui.vsh
とtext_background_delete_gui.fsh
を作成します。
内容は以下のファイルにします。
alpha_custom:text_background_delete_gui.vsh
#version 150
in vec3 Position;
in vec4 Color;
uniform mat4 ModelViewMat;
uniform mat4 ProjMat;
//Z座標の入手
out float depthLevel;
out vec4 vertexColor;
void main() {
//Z座標をデータに写す
depthLevel = Position.z;
gl_Position = ProjMat * ModelViewMat * vec4(Position, 1.0);
vertexColor = Color;
}
alpha_custom:text_background_delete_gui.fsh
#version 150
in vec4 vertexColor;
//Z座標の入手
//2200.00=アクションバーのバックグラウンド(アクセシビリティ設定有効時)
//2400.00=タイトルとサブタイトルのバックグラウンド(アクセシビリティ設定有効時)
in float depthLevel;
uniform vec4 ColorModulator;
out vec4 fragColor;
void main() {
vec4 color = vertexColor;
if (color.a == 0.0) {
discard;
}
else if (depthLevel == 2200.0) {
//アクションバーのバックグラウンドを無効化
discard;
}
else if (depthLevel == 2400.0) {
//タイトルとサブタイトルのバックグラウンドを無効化
discard;
}
fragColor = color * ColorModulator;
}
この3つのファイルを作成するだけで、アクションバーとタイトル/サブタイトルの背景を消すことが出来ます。
これで超すっきりしました。
NegativeSpaceFontや上下にテキストを移動するときにはこのファイルもいれておきましょう。
超簡単なコードですが、GLSL/HLSLの仕様が自分もよくわかっていないので、為になったのではないでしょうか。
それではまたどこかでお会いいたしましょう。バイバイ!