0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

NegativeSpaceFontの敵、「テキストの背景」

Posted at

この記事はMinecraft Java Edition 1.21.4向けに作成されています。

NegativeSpaceFontの敵、「テキストの背景」

どうもこんにちは!クロスプです!
最近は/titleコマンドにNegativeSpaceFontを汎用した制作物が非常に多くなりました。
そんな時、あなたは「アクセシビリティ設定」にこんな設定をがある事を知っているのでしょうか?

hidetextbackground1.png

この設定、「チャット」と「すべて」の2種類があるのですが、「すべて」を選択するとどうなるのでしょうか?

hidetextbackground2.png

こんな感じで、普段バックグラウンドがついていないアクションバーやアイテムも全てつくようになるんです。

これだけならまあやりたい人だけオンにすればいい設定なのですが、ここでNegativeSpaceFontを使うとどうなるのでしょうか。

hidetextbackground3.png

こちら、NegativeSpaceFontやシェーダーを使ってアクションバーで上にいい感じの文字を表示させました。
このテキストの位置を上下に変更した方法はゆるふ🐺様の下記の記事を超参考にしてつくりました。まじで感謝してます。

さて本題に入りましょう。

ここの下にある「黒いアクションバーのバックグラウンド」を消したいのです。
(わかりづらいけど上のバックグラウンドは自分で作った)

hidetextbackground4.png

この背景を消したいのですが、リソースパックにテキストの背景なんていうテクスチャはありません。
ということは、ここはシェーダーにて制御されている事になります。こちらを今回消しましょう。

まずはshadersファイルのcoreシェーダーにrendertype_gui.jsonを作成しましょう。

minecraft: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
      ]
    }
  ]
}

ここにあるvertexfragmentの値はそれぞれ.vsh.fshの参照場所となります。

今回alpha_custom:text_background_delete_guiを参照していますので、
assets/alpha_custom/shaders/
text_background_delete_gui.vshtext_background_delete_gui.fshを作成します。

内容は以下のファイルにします。

alpha_custom:text_background_delete_gui.vsh
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
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つのファイルを作成するだけで、アクションバーとタイトル/サブタイトルの背景を消すことが出来ます。

hidetextbackground5.png

これで超すっきりしました。

NegativeSpaceFontや上下にテキストを移動するときにはこのファイルもいれておきましょう。

超簡単なコードですが、GLSL/HLSLの仕様が自分もよくわかっていないので、為になったのではないでしょうか。

それではまたどこかでお会いいたしましょう。バイバイ!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?