вот мой шрифт ттф для блюра. скажи, правильно рп с...

Creado el: 14 de abril de 2026

Respondido usando GPT-5.4 Thinking por Chat01

Pregunta

вот мой шрифт ттф для блюра. скажи, правильно рп сделал? просто будто неправильно рендерится. мне нужно чтобы символ размерами был 1 пиксель на 12. Правильно сделан ресурс пак?

{
"type": "ttf",
"file": "blur:minecraft_i_from_image.ttf",
"shift": [0, 2.5],
"size": 12,
"oversample": 8,
"skip": ""
},

Pensamiento

Searching for Minecraft font rendering info

The user’s question involves font rendering in Minecraft, but there's no clear match for a specific skill. I think it might be best to search for relevant, up-to-date information on official sources like Minecraft's docs or the Wikipedia page. I'll include citations as the info could change depending on the version.

{"search_query":[{"q":"Minecraft font provider ttf size oversample shift official documentation","domains":["minecraft.wiki","wiki.bedrock.dev","learn.microsoft.com"]},{"q":"Minecraft Java Edition resource pack font ttf provider size oversample shift minecraft wiki"},{"q":"Minecraft bitmap font height ascent 8 16 minecraft wiki"}],"response_length":"short"}

Exploring Minecraft font rendering

It might be useful to check out mcfonts and possibly a bug report to find more details related to font rendering in Minecraft. This could help clarify any issues the user is facing, or reveal any updates that might be affecting font rendering functionality.

{"open":[{"ref_id":"turn599893search2"},{"ref_id":"turn599893search8"}],"response_length":"short"}

Searching official resources on font rendering

I think it might help to look for official documentation or source code, especially for Java resource packs. mcfonts is a technical reference, but I should consider a more official source. I can search for information on font size, along with any relevant bug reports or community insights.

{"search_query":[{"q":"Minecraft Java font provider ttf size divisor em size source code"},{"q":"minecraft ttf provider divisor of em size source"},{"q":"TTFProvider size divisor em size minecraft code"}],"response_length":"short"}

Explaining font size and rendering

To explain the font size, I think I should clarify that "size: 12" doesn’t directly make the glyph 1px. The actual size probably depends on the font’s em square, which might usually be 1024 or 2048 units, as well as some oversampling. I’ll need to look into code or search documentation for the exact formula.

{"search_query":[{"q":"GlyphProviderDefinition TTF size oversample formula Minecraft source"},{"q":"TrueTypeGlyphProvider size oversample em formula decompiled"},{"q":"Minecraft TrueTypeGlyphProvider oversample size divisor em size formula"}],"response_length":"short"}

Exploring constructor fields via mappings

I think I'll check the search result for mappings.dev. That might help me see constructor fields, which could be useful for understanding the underlying structure or behavior I need. It’s worth looking into, as it could provide valuable details for solving the user's question.

{"open":[{"ref_id":"turn492339search17"},{"ref_id":"turn492339search0"},{"ref_id":"turn492339search3"}],"response_length":"short"}

{"find":[{"ref_id":"turn801305view1","pattern":"record Shift"},{"ref_id":"turn801305view1","pattern":"shiftX"},{"ref_id":"turn801305view1","pattern":"shiftY"},{"ref_id":"turn801305view1","pattern":"class Shift"}],"response_length":"short"}

Clarifying font rendering in Minecraft

It's likely that a resource pack’s JSON can be syntactically valid but not fit for 1px/12 size rendering. For imported pixel fonts, like Minecraft's, "size 12" works fine, but for TTF fonts, the font's em size affects the result. I’ll need to investigate shift and oversample settings more.

{"search_query":[{"q":"TrueTypeGlyphProviderDefinition Shift float minecraft forge shift x y"},{"q":"TrueTypeGlyphProviderDefinition.Shift float x y"},{"q":"Minecraft TrueTypeGlyphProviderDefinition Shift x y float"}],"response_length":"short"}

Clarifying resource pack and font selection

To answer "Is the resource pack done correctly?" I might say "not exactly." If the TTF came from a 12px grid, size 12 fits, but for others, font metrics need to align. If it’s a blurred image font, I’d suggest using a bitmap font provider for precision, since TTF uses anti-aliasing.

Discussing font rasterization and shift values

Based on the docs, the "shift [0, 2.5]" range can indeed accept floats, but a 2.5 shift might introduce half-pixel placement, potentially causing blur due to interpolation. Since the shift operates in scaling units, not screen pixels, I might suggest that a vertical shift could affect rasterization quality. I’d mention this cautiously as an inference.

Thought for 1m 21s

Respuesta

Не совсем.

Для цели «символ должен быть ровно 1 пиксель при размере 12» такой ttf-провайдер выглядит сомнительно, и проблема, скорее всего, не в одном поле, а сразу в нескольких.

Что у вас сейчас:

json
{ "type": "ttf", "file": "blur:minecraft_i_from_image.ttf", "shift": [0, 2.5], "size": 12, "oversample": 8, "skip": "" }

Что тут важно:

  1. size: 12это нормальная идея, если вы хотите попасть в ванильный масштаб 12. Для Minecraft ttf-провайдера size — это не “высота глифа в пикселях”, а делитель em-size шрифта. Для шрифтов, которые специально делали под ваниль, обычно как раз ставят size: 12. В проекте, который генерирует TTF из ванильного шрифта, прямо указано: чтобы совпасть с Minecraft, size надо ставить 12, а не стандартные 11. (mcfonts)

  2. oversample: 8самый подозрительный параметр. Документация по ttf-провайдеру говорит, что oversample — это разрешение рендера, и если оно не совпадает с em-size шрифта, появляется антиалиасинг. Плюс в 2025 был подтверждён баг Minecraft, где увеличение oversample у ttf ещё и меняло ширину символов; баг затрагивал 25w34b и был помечен как исправленный в 25w35a. (mcfonts)

  3. shift: [0, 2.5] — синтаксически это выглядит допустимо, потому что в современных определениях shift хранится как float x/y, а не только целые. Но 2.5 для пиксельного шрифта — плохой знак: это сдвиг “между пикселями”, из-за чего глиф легко начинает выглядеть мыльно или “не по сетке”. Это уже не прямая ошибка формата, а очень вероятная причина неправильного визуала. (aldak0.ru)

Главный вывод:

  • Если шрифт реально должен быть пиксельно-точным 1×1 на сетке 12, то ttf вообще не лучший вариант.
  • Особенно если ваш файл называется from_image.ttf: при конвертации картинки в TTF часто теряются точные метрики, появляются контуры/хинтинг, и на выходе Minecraft уже не рисует его как идеальный bitmap-глиф.
  • Для строго 1-пиксельного символа обычно лучше делать bitmap provider, а не ttf.

Что бы я попробовал сразу:

json
{ "type": "ttf", "file": "blur:minecraft_i_from_image.ttf", "shift": [0, 0], "size": 12, "oversample": 1, "skip": "" }

Это лучший тестовый baseline:

  • size: 12 оставить,
  • oversample снизить до 1,
  • shift временно поставить 0,0.

Если после этого символ всё равно не становится ровным и пиксельным, значит проблема уже в самом TTF, а не в JSON.

Мой вердикт:

  • формально JSON не сломан;
  • для вашей задачи ресурс-пак настроен неудачно;
  • самые вероятные виновники — oversample: 8 и shift: [0, 2.5];
  • для идеального 1 px / 12 лучше делать bitmap-шрифт, а не TTF.

Если хотите, я могу сразу показать, как оформить этот символ как bitmap provider, чтобы он рендерился строго по пиксельной сетке.

Pregunta

image.png
image.png

а какие настройки лучше сделать для такого эффекта как на картинке
#version 330

#moj_import minecraft:fog.glsl
#moj_import minecraft:dynamictransforms.glsl

uniform sampler2D Sampler0;

in float sphericalVertexDistance;
in float cylindricalVertexDistance;
in vec4 vertexColor;
in vec2 texCoord0;

out vec4 fragColor;

float sample_intensity(vec2 uv) {
return texture(Sampler0, uv).r;
}

void main() {
vec2 texel = 1.0 / vec2(textureSize(Sampler0, 0));

text
float center = sample_intensity(texCoord0) * 4.0; float blur = 0.0; blur += sample_intensity(texCoord0 + texel * vec2(-1.0, -1.0)); blur += sample_intensity(texCoord0 + texel * vec2( 0.0, -1.0)) * 2.0; blur += sample_intensity(texCoord0 + texel * vec2( 1.0, -1.0)); blur += sample_intensity(texCoord0 + texel * vec2(-1.0, 0.0)) * 2.0; blur += center; blur += sample_intensity(texCoord0 + texel * vec2( 1.0, 0.0)) * 2.0; blur += sample_intensity(texCoord0 + texel * vec2(-1.0, 1.0)); blur += sample_intensity(texCoord0 + texel * vec2( 0.0, 1.0)) * 2.0; blur += sample_intensity(texCoord0 + texel * vec2( 1.0, 1.0)); blur /= 16.0; float base = center / 4.0; float edgeMask = 1.0 - smoothstep(0.70, 1.0, base); float glyph = mix(base, blur, 0.70 * edgeMask); vec4 color = vec4(glyph) * vertexColor * ColorModulator; color.a *= 0.4; if (color.a < 0.02) { discard; } fragColor = apply_fog(color, sphericalVertexDistance, cylindricalVertexDistance, FogEnvironmentalStart, FogEnvironmentalEnd, FogRenderDistanceStart, FogRenderDistanceEnd, FogColor);

}

Я на обычный текст если что накладываю сверху вот этот как раз таки. и мне нужен эффект блюра. а сейчас у меня так(вторая картинка). Эффект прозрачности а не блюра. а нужно именно как блюр

Pensamiento

Searching for Minecraft font rendering info

The user’s question involves font rendering in Minecraft, but there's no clear match for a specific skill. I think it might be best to search for relevant, up-to-date information on official sources like Minecraft's docs or the Wikipedia page. I'll include citations as the info could change depending on the version.

{"search_query":[{"q":"Minecraft font provider ttf size oversample shift official documentation","domains":["minecraft.wiki","wiki.bedrock.dev","learn.microsoft.com"]},{"q":"Minecraft Java Edition resource pack font ttf provider size oversample shift minecraft wiki"},{"q":"Minecraft bitmap font height ascent 8 16 minecraft wiki"}],"response_length":"short"}

Exploring Minecraft font rendering

It might be useful to check out mcfonts and possibly a bug report to find more details related to font rendering in Minecraft. This could help clarify any issues the user is facing, or reveal any updates that might be affecting font rendering functionality.

{"open":[{"ref_id":"turn599893search2"},{"ref_id":"turn599893search8"}],"response_length":"short"}

Searching official resources on font rendering

I think it might help to look for official documentation or source code, especially for Java resource packs. mcfonts is a technical reference, but I should consider a more official source. I can search for information on font size, along with any relevant bug reports or community insights.

{"search_query":[{"q":"Minecraft Java font provider ttf size divisor em size source code"},{"q":"minecraft ttf provider divisor of em size source"},{"q":"TTFProvider size divisor em size minecraft code"}],"response_length":"short"}

Explaining font size and rendering

To explain the font size, I think I should clarify that "size: 12" doesn’t directly make the glyph 1px. The actual size probably depends on the font’s em square, which might usually be 1024 or 2048 units, as well as some oversampling. I’ll need to look into code or search documentation for the exact formula.

{"search_query":[{"q":"GlyphProviderDefinition TTF size oversample formula Minecraft source"},{"q":"TrueTypeGlyphProvider size oversample em formula decompiled"},{"q":"Minecraft TrueTypeGlyphProvider oversample size divisor em size formula"}],"response_length":"short"}

Exploring constructor fields via mappings

I think I'll check the search result for mappings.dev. That might help me see constructor fields, which could be useful for understanding the underlying structure or behavior I need. It’s worth looking into, as it could provide valuable details for solving the user's question.

{"open":[{"ref_id":"turn492339search17"},{"ref_id":"turn492339search0"},{"ref_id":"turn492339search3"}],"response_length":"short"}

{"find":[{"ref_id":"turn801305view1","pattern":"record Shift"},{"ref_id":"turn801305view1","pattern":"shiftX"},{"ref_id":"turn801305view1","pattern":"shiftY"},{"ref_id":"turn801305view1","pattern":"class Shift"}],"response_length":"short"}

Clarifying font rendering in Minecraft

It's likely that a resource pack’s JSON can be syntactically valid but not fit for 1px/12 size rendering. For imported pixel fonts, like Minecraft's, "size 12" works fine, but for TTF fonts, the font's em size affects the result. I’ll need to investigate shift and oversample settings more.

{"search_query":[{"q":"TrueTypeGlyphProviderDefinition Shift float minecraft forge shift x y"},{"q":"TrueTypeGlyphProviderDefinition.Shift float x y"},{"q":"Minecraft TrueTypeGlyphProviderDefinition Shift x y float"}],"response_length":"short"}

Clarifying resource pack and font selection

To answer "Is the resource pack done correctly?" I might say "not exactly." If the TTF came from a 12px grid, size 12 fits, but for others, font metrics need to align. If it’s a blurred image font, I’d suggest using a bitmap font provider for precision, since TTF uses anti-aliasing.

Discussing font rasterization and shift values

Based on the docs, the "shift [0, 2.5]" range can indeed accept floats, but a 2.5 shift might introduce half-pixel placement, potentially causing blur due to interpolation. Since the shift operates in scaling units, not screen pixels, I might suggest that a vertical shift could affect rasterization quality. I’d mention this cautiously as an inference.

Thought for 1m 21s

Respuesta

Не совсем.

Для цели «символ должен быть ровно 1 пиксель при размере 12» такой ttf-провайдер выглядит сомнительно, и проблема, скорее всего, не в одном поле, а сразу в нескольких.

Что у вас сейчас:

json
{ "type": "ttf", "file": "blur:minecraft_i_from_image.ttf", "shift": [0, 2.5], "size": 12, "oversample": 8, "skip": "" }

Что тут важно:

  1. size: 12это нормальная идея, если вы хотите попасть в ванильный масштаб 12. Для Minecraft ttf-провайдера size — это не “высота глифа в пикселях”, а делитель em-size шрифта. Для шрифтов, которые специально делали под ваниль, обычно как раз ставят size: 12. В проекте, который генерирует TTF из ванильного шрифта, прямо указано: чтобы совпасть с Minecraft, size надо ставить 12, а не стандартные 11. (mcfonts)

  2. oversample: 8самый подозрительный параметр. Документация по ttf-провайдеру говорит, что oversample — это разрешение рендера, и если оно не совпадает с em-size шрифта, появляется антиалиасинг. Плюс в 2025 был подтверждён баг Minecraft, где увеличение oversample у ttf ещё и меняло ширину символов; баг затрагивал 25w34b и был помечен как исправленный в 25w35a. (mcfonts)

  3. shift: [0, 2.5] — синтаксически это выглядит допустимо, потому что в современных определениях shift хранится как float x/y, а не только целые. Но 2.5 для пиксельного шрифта — плохой знак: это сдвиг “между пикселями”, из-за чего глиф легко начинает выглядеть мыльно или “не по сетке”. Это уже не прямая ошибка формата, а очень вероятная причина неправильного визуала. (aldak0.ru)

Главный вывод:

  • Если шрифт реально должен быть пиксельно-точным 1×1 на сетке 12, то ttf вообще не лучший вариант.
  • Особенно если ваш файл называется from_image.ttf: при конвертации картинки в TTF часто теряются точные метрики, появляются контуры/хинтинг, и на выходе Minecraft уже не рисует его как идеальный bitmap-глиф.
  • Для строго 1-пиксельного символа обычно лучше делать bitmap provider, а не ttf.

Что бы я попробовал сразу:

json
{ "type": "ttf", "file": "blur:minecraft_i_from_image.ttf", "shift": [0, 0], "size": 12, "oversample": 1, "skip": "" }

Это лучший тестовый baseline:

  • size: 12 оставить,
  • oversample снизить до 1,
  • shift временно поставить 0,0.

Если после этого символ всё равно не становится ровным и пиксельным, значит проблема уже в самом TTF, а не в JSON.

Мой вердикт:

  • формально JSON не сломан;
  • для вашей задачи ресурс-пак настроен неудачно;
  • самые вероятные виновники — oversample: 8 и shift: [0, 2.5];
  • для идеального 1 px / 12 лучше делать bitmap-шрифт, а не TTF.

Если хотите, я могу сразу показать, как оформить этот символ как bitmap provider, чтобы он рендерился строго по пиксельной сетке.

Pregunta

image.png
image.png

а какие настройки лучше сделать для такого эффекта как на картинке
#version 330

#moj_import minecraft:fog.glsl
#moj_import minecraft:dynamictransforms.glsl

uniform sampler2D Sampler0;

in float sphericalVertexDistance;
in float cylindricalVertexDistance;
in vec4 vertexColor;
in vec2 texCoord0;

out vec4 fragColor;

float sample_intensity(vec2 uv) {
return texture(Sampler0, uv).r;
}

void main() {
vec2 texel = 1.0 / vec2(textureSize(Sampler0, 0));

text
float center = sample_intensity(texCoord0) * 4.0; float blur = 0.0; blur += sample_intensity(texCoord0 + texel * vec2(-1.0, -1.0)); blur += sample_intensity(texCoord0 + texel * vec2( 0.0, -1.0)) * 2.0; blur += sample_intensity(texCoord0 + texel * vec2( 1.0, -1.0)); blur += sample_intensity(texCoord0 + texel * vec2(-1.0, 0.0)) * 2.0; blur += center; blur += sample_intensity(texCoord0 + texel * vec2( 1.0, 0.0)) * 2.0; blur += sample_intensity(texCoord0 + texel * vec2(-1.0, 1.0)); blur += sample_intensity(texCoord0 + texel * vec2( 0.0, 1.0)) * 2.0; blur += sample_intensity(texCoord0 + texel * vec2( 1.0, 1.0)); blur /= 16.0; float base = center / 4.0; float edgeMask = 1.0 - smoothstep(0.70, 1.0, base); float glyph = mix(base, blur, 0.70 * edgeMask); vec4 color = vec4(glyph) * vertexColor * ColorModulator; color.a *= 0.4; if (color.a < 0.02) { discard; } fragColor = apply_fog(color, sphericalVertexDistance, cylindricalVertexDistance, FogEnvironmentalStart, FogEnvironmentalEnd, FogRenderDistanceStart, FogRenderDistanceEnd, FogColor);

}

Я на обычный текст если что накладываю сверху вот этот как раз таки. и мне нужен эффект блюра. а сейчас у меня так(вторая картинка). Эффект прозрачности а не блюра. а нужно именно как блюр

Pensamiento

Searching for Minecraft font rendering info

The user’s question involves font rendering in Minecraft, but there's no clear match for a specific skill. I think it might be best to search for relevant, up-to-date information on official sources like Minecraft's docs or the Wikipedia page. I'll include citations as the info could change depending on the version.

{"search_query":[{"q":"Minecraft font provider ttf size oversample shift official documentation","domains":["minecraft.wiki","wiki.bedrock.dev","learn.microsoft.com"]},{"q":"Minecraft Java Edition resource pack font ttf provider size oversample shift minecraft wiki"},{"q":"Minecraft bitmap font height ascent 8 16 minecraft wiki"}],"response_length":"short"}

Exploring Minecraft font rendering

It might be useful to check out mcfonts and possibly a bug report to find more details related to font rendering in Minecraft. This could help clarify any issues the user is facing, or reveal any updates that might be affecting font rendering functionality.

{"open":[{"ref_id":"turn599893search2"},{"ref_id":"turn599893search8"}],"response_length":"short"}

Searching official resources on font rendering

I think it might help to look for official documentation or source code, especially for Java resource packs. mcfonts is a technical reference, but I should consider a more official source. I can search for information on font size, along with any relevant bug reports or community insights.

{"search_query":[{"q":"Minecraft Java font provider ttf size divisor em size source code"},{"q":"minecraft ttf provider divisor of em size source"},{"q":"TTFProvider size divisor em size minecraft code"}],"response_length":"short"}

Explaining font size and rendering

To explain the font size, I think I should clarify that "size: 12" doesn’t directly make the glyph 1px. The actual size probably depends on the font’s em square, which might usually be 1024 or 2048 units, as well as some oversampling. I’ll need to look into code or search documentation for the exact formula.

{"search_query":[{"q":"GlyphProviderDefinition TTF size oversample formula Minecraft source"},{"q":"TrueTypeGlyphProvider size oversample em formula decompiled"},{"q":"Minecraft TrueTypeGlyphProvider oversample size divisor em size formula"}],"response_length":"short"}

Exploring constructor fields via mappings

I think I'll check the search result for mappings.dev. That might help me see constructor fields, which could be useful for understanding the underlying structure or behavior I need. It’s worth looking into, as it could provide valuable details for solving the user's question.

{"open":[{"ref_id":"turn492339search17"},{"ref_id":"turn492339search0"},{"ref_id":"turn492339search3"}],"response_length":"short"}

{"find":[{"ref_id":"turn801305view1","pattern":"record Shift"},{"ref_id":"turn801305view1","pattern":"shiftX"},{"ref_id":"turn801305view1","pattern":"shiftY"},{"ref_id":"turn801305view1","pattern":"class Shift"}],"response_length":"short"}

Clarifying font rendering in Minecraft

It's likely that a resource pack’s JSON can be syntactically valid but not fit for 1px/12 size rendering. For imported pixel fonts, like Minecraft's, "size 12" works fine, but for TTF fonts, the font's em size affects the result. I’ll need to investigate shift and oversample settings more.

{"search_query":[{"q":"TrueTypeGlyphProviderDefinition Shift float minecraft forge shift x y"},{"q":"TrueTypeGlyphProviderDefinition.Shift float x y"},{"q":"Minecraft TrueTypeGlyphProviderDefinition Shift x y float"}],"response_length":"short"}

Clarifying resource pack and font selection

To answer "Is the resource pack done correctly?" I might say "not exactly." If the TTF came from a 12px grid, size 12 fits, but for others, font metrics need to align. If it’s a blurred image font, I’d suggest using a bitmap font provider for precision, since TTF uses anti-aliasing.

Discussing font rasterization and shift values

Based on the docs, the "shift [0, 2.5]" range can indeed accept floats, but a 2.5 shift might introduce half-pixel placement, potentially causing blur due to interpolation. Since the shift operates in scaling units, not screen pixels, I might suggest that a vertical shift could affect rasterization quality. I’d mention this cautiously as an inference.Explaining font rendering and shader blur effects

The user seems to be asking about font rendering and shader effects, particularly blur settings with TTF and shaders. The current shader likely blurs alpha/intensity, then multiplies by vertexColor, adjusting opacity. It's sampling the texture's red channel, so even if the font atlas is sharp, the blur creates a semi-transparent halo at exact text scale.

Explaining visual blur effect and font settings

To achieve a real blur effect, I’d suggest using a separate glow or blur layer, which is larger than the main, sharp glyph. This is done by combining the blurred alpha as an outer glow while keeping the main text crisp. The user is seeking an actual blur, not just transparency, so adjusting the blur radius and using better sampling techniques may help. For font settings, a thicker base glyph or bitmap might work better for the blur layer.Considering blur technique in Minecraft font rendering

For the blur effect, it seems the blur is applied in screen-space or through a larger atlas/oversampling, which impacts the smoothness of the glyph edges. The key point is that the blur radius in Minecraft's shader is based on texels in the atlas, which may not directly correspond to screen pixels, especially when using an oversampled TTF. Oversampling would give more texels in the glyph atlas, changing the blur's appearance.

Refining blur and sampling in Minecraft font rendering

When sampling, the glyph in the atlas may have many texels per screen pixel, so a 1-texel blur kernel can appear as subpixel, just softening the alpha slightly for transparency. The oversample setting affects the blur radius, making it smaller if it's set high, so reducing it or adjusting texel sizes would make the blur more effective. If the alpha is stored correctly in the alpha channel, using the red channel might work, but it's not guaranteed—especially if the glyph uses a white RGB texture with a transparent background.

Thought for 1m 44s

Respuesta

Да — у тебя сейчас получается не блюр, а полупрозрачная копия текста, и причина в шейдере больше, чем в ttf.

Что именно сейчас ломает эффект

1. Ты блюришь слишком маленьким радиусом

У тебя ядро всего 3x3 и смещение ровно 1 texel:

glsl
vec2 texel = 1.0 / vec2(textureSize(Sampler0, 0));

Если у шрифта oversample: 8, то этот texel для глифа становится очень мелким в реальном масштабе текста. В итоге blur почти не “расползается” наружу, а просто слегка размывает альфу внутри символа. Поэтому визуально это выглядит как прозрачность, а не как мягкий блюр.

2. Ты берёшь не маску, а яркость

Сейчас:

glsl
return texture(Sampler0, uv).r;

Для шрифта лучше брать alpha, а не r:

glsl
return texture(Sampler0, uv).a;

Для блюра текста тебе нужна именно маска глифа.

3. Ты ослабляешь и цвет, и альфу

Вот это:

glsl
vec4 color = vec4(glyph) * vertexColor * ColorModulator; color.a *= 0.4;

делает текст просто более бледным.
То есть у тебя не “свечение/размытие”, а “серая полупрозрачная копия”.


Какие настройки шрифта лучше

Для blur-слоя я бы начал с такого:

json
{ "type": "ttf", "file": "blur:minecraft_i_from_image.ttf", "shift": [0, 0], "size": 12, "oversample": 1, "skip": "" }

Иногда можно попробовать oversample: 2, но не 8.

Почему так

  • size: 12 — оставить
  • shift: [0, 0] — без полупиксельного сдвига
  • oversample: 1 — чтобы blur в шейдере был реально заметным, а не микроскопическим

Что лучше сделать в шейдере

Тебе нужен не просто blur всего глифа, а:

  1. взять оригинальную маску
  2. взять размытую маску
  3. отделить внешний ореол от самого символа

То есть не так:

glsl
glyph = mix(base, blur, ...)

А примерно так:

glsl
glow = max(blur - base, 0.0)

Тогда нижний обычный текст останется резким, а верхний слой даст именно мягкий ореол.


Рабочий вариант под твой кейс

Попробуй такой фрагмент:

glsl
#version 330 #moj_import <minecraft:fog.glsl> #moj_import <minecraft:dynamictransforms.glsl> uniform sampler2D Sampler0; in float sphericalVertexDistance; in float cylindricalVertexDistance; in vec4 vertexColor; in vec2 texCoord0; out vec4 fragColor; float sample_mask(vec2 uv) { return texture(Sampler0, uv).a; } void main() { vec2 texel = 1.0 / vec2(textureSize(Sampler0, 0)); // Увеличивай 1.5 -> 2.0 -> 3.0 пока не понравится float radius = 2.0; vec2 stepv = texel * radius; float base = sample_mask(texCoord0); float blur = 0.0; float weight = 0.0; for (int y = -2; y <= 2; y++) { for (int x = -2; x <= 2; x++) { vec2 offs = vec2(x, y); float w = 1.0 / (1.0 + dot(offs, offs)); blur += sample_mask(texCoord0 + offs * stepv) * w; weight += w; } } blur /= weight; // Только внешний мягкий ореол float glow = max(blur - base, 0.0); // Можно оставить чуть-чуть внутренней мягкости float softFill = base * 0.10; float alpha = glow * 1.2 + softFill; vec4 color = vertexColor * ColorModulator; color.a *= alpha; if (color.a < 0.02) { discard; } fragColor = apply_fog( color, sphericalVertexDistance, cylindricalVertexDistance, FogEnvironmentalStart, FogEnvironmentalEnd, FogRenderDistanceStart, FogRenderDistanceEnd, FogColor ); }

Что крутить для нужного вида

Если blur слишком слабый

Меняй:

glsl
float radius = 2.0;

Пробуй:

  • 2.0
  • 2.5
  • 3.0

Если получается слишком жирная тень

Уменьшай:

glsl
float alpha = glow * 1.2 + softFill;

например:

glsl
float alpha = glow * 0.8 + softFill;

Если нужен прям “мыльный” blur как на первой картинке

Сделай:

  • oversample: 1
  • radius = 2.5 или 3.0
  • softFill = base * 0.15

Самая важная мысль

У тебя сейчас эффект “полупрозрачного текста” из-за сочетания:

  • oversample: 8
  • blur на 1 texel
  • sample.r вместо sample.a
  • ослабления всего слоя через color.a *= 0.4

Для нормального блюра под Minecraft-текст лучше:

  • шрифт: size: 12, shift: [0,0], oversample: 1
  • шейдер: блюрить alpha
  • выводить не весь размытый глиф, а outer glow = blur - base
  • силу эффекта регулировать через radius, а не через сильную прозрачность

Если хочешь, я могу тебе сразу собрать 2 готовых шейдера:

  1. мягкий blur как на первой картинке
  2. более сильный glow/ореол для ника в чате

Pregunta

image.png

сделай такой шейдер: если символ под ttf шрифтом, то сверху на символ накладывай блюр. не только на символ а ещё и на фон символ. и именно чтобы выглядил как блюр, как на фото. и сильный. пример можешь брать из post шейдера blur, только бери из 1.21.8 и переделай на 1.21.11, потому что там был самый нормальный блюр

Pensamiento

undefined

Pensamiento

undefined

Pensamiento

undefined

Pensamiento

undefined

Pensamiento

Clarifying text shader behavior and blur methods

The core shader rendertype_text_intensity.fsh likely maps intensity to the .rrrr channel, possibly using it from the font atlas’ red channel and perhaps ignoring alpha. To ensure robustness, I'll use max(texture.r, texture.a) to handle both intensity and alpha channels. This ensures blur works across different channel formats. I could cite 1.21.11 box_blur.fsh for strong blur techniques. I’ll also mention the usage in outlining shaders.

Explaining shader limitations and providing a solution

I could explain that the core text shader only has access to the glyph texture (Sampler0) and not the screen buffer, so it can't blur the background behind the text. To blur the background, you'd need to switch to a post-processing chain. It might help if I provide shader code from rendertype_text.fsh and box_blur. I could also suggest settings and use max(r,a) to handle alpha and intensity channels.

Thought for 3m 11s

Respuesta

Да, могу. Но есть одно важное ограничение: в rendertype_text*.fsh ты не можешь размыть настоящий фон/мир за текстом, потому что у core-текстового шейдера в 1.21.11 есть только Sampler0 с текстурой глифа, а ванильный blur из post-цепочки работает уже по отдельному входному буферу InSampler через BlurDir и Radius. То есть внутри текстового шейдера можно сделать убедительную размытую копию символа с заходом на фон вокруг него, но не настоящий screen-space blur задника. (GitHub)

В 1.21.11 ванильный box_blur.fsh делает separable blur по направлению BlurDir, а entity_outline_box_blur.fsh использует ту же идею для мягкого размытия контура. Ниже я даю версию под rendertype_text*.fsh, но не как “полупрозрачность”, а как сильную размытую маску, похожую на твой пример. (GitHub)

Поставь это вместо шейдера для верхнего blur-слоя текста:

glsl
#version 330 #moj_import <minecraft:fog.glsl> #moj_import <minecraft:dynamictransforms.glsl> uniform sampler2D Sampler0; in float sphericalVertexDistance; in float cylindricalVertexDistance; in vec4 vertexColor; in vec2 texCoord0; out vec4 fragColor; // Универсальная маска: работает и там, где глиф хранится в red, // и там, где он лежит в alpha. float glyph_mask(vec2 uv) { vec4 s = texture(Sampler0, uv); return max(s.r, s.a); } void main() { vec2 texel = 1.0 / vec2(textureSize(Sampler0, 0)); // Главное, что делает эффект "похожим на blur с картинки": // не 1 texel, а большой шаг по атласу. // При oversample=1 обычно 2.5..4.0 выглядит хорошо. const float BLUR_SCALE = 3.2; vec2 stepv = texel * BLUR_SCALE; float base = glyph_mask(texCoord0); // 5x5 gaussian-like blur float k0 = 1.0; float k1 = 4.0; float k2 = 6.0; float blur = 0.0; float weight = 0.0; for (int y = -2; y <= 2; ++y) { float wy = (y == -2 || y == 2) ? k0 : (y == -1 || y == 1) ? k1 : k2; for (int x = -2; x <= 2; ++x) { float wx = (x == -2 || x == 2) ? k0 : (x == -1 || x == 1) ? k1 : k2; float w = wx * wy; blur += glyph_mask(texCoord0 + vec2(float(x), float(y)) * stepv) * w; weight += w; } } blur /= weight; // Важный момент: // делаем именно размытую копию символа, а не просто прозрачный текст. // core - затемняет сам символ, // halo - растягивает блюр на фон вокруг символа. float core = smoothstep(0.02, 0.75, blur); float halo = smoothstep(0.00, 0.45, blur) * (1.0 - smoothstep(0.30, 0.95, base)); // Сильный blur-слой. float alpha = max(core * 0.58, halo * 0.95); vec4 color = vec4( vertexColor.rgb * ColorModulator.rgb, vertexColor.a * ColorModulator.a * alpha ); if (color.a < 0.02) { discard; } fragColor = apply_fog( color, sphericalVertexDistance, cylindricalVertexDistance, FogEnvironmentalStart, FogEnvironmentalEnd, FogRenderDistanceStart, FogRenderDistanceEnd, FogColor ); }

Что это даст:

  • символ сверху станет выглядеть как сильно размытая копия;
  • блюр выйдет за пределы глифа на фон вокруг него;
  • эффект перестанет быть просто “полупрозрачным дублем”.

Под это лучше всего ставить такие настройки шрифта для blur-слоя:

json
{ "type": "ttf", "file": "blur:minecraft_i_from_image.ttf", "shift": [0.0, 0.0], "size": 12, "oversample": 1, "skip": "" }

Почему так: у тебя раньше blur выглядел как прозрачность, потому что при большом oversample и мелком шаге по текстуре размытие почти не расползалось наружу. Ванильный blur в post-шейдерах как раз строится вокруг размера входной текстуры и радиуса/направления размытия, а не вокруг простого “уменьшения альфы”. (GitHub)

Что крутить:

  • BLUR_SCALE = 2.6 — мягче и компактнее
  • BLUR_SCALE = 3.2 — хороший сильный blur
  • BLUR_SCALE = 4.0 — очень мыльный, почти как на картинке
  • alpha = max(core * 0.58, halo * 0.95)
    если нужно ещё жирнее, сделай core * 0.68 и halo * 1.05

Ещё важный момент: проверить внутри шейдера, “ttf это или не ttf”, нельзя — у текста нет такого флага в интерфейсе шейдера. Это надо решать не if-ом в GLSL, а тем, что ты этот .fsh вешаешь именно на отдельный верхний слой/отдельный шрифт для blur-рендера. По интерфейсу 1.21.11 текстовый шейдер видит только входную текстуру, цвет и fog-данные. (GitHub)

Если тебе нужен именно настоящий blur заднего фона за буквами, а не fake blur-копия символа, тогда уже надо делать не только rendertype_text.fsh, а связку:

  1. маска текста,
  2. post-pass blur по framebuffer,
  3. композит по этой маске.

Это уже другой пайплайн. Сейчас я дал вариант, который максимально близко имитирует твою картинку в рамках обычного текстового core shader.

Могу следующим сообщением дать ещё и вторую, более злую версию этого же шейдера — прям под очень жирный blur для ника/чата.

Pregunta

box_blur.fsh

а типа такого блюра сможешь? как при нажатие ESC MENU

Pensamiento

Clarifying shader options for text blur

The user asks about creating an ESC-menu-like blur for text. I’ll explain that the true effect requires a post-processing chain, but I can approximate it with a text shader. If they want it exactly like ESC, they'd need a post shader to blur the scene and mask the text. For only the core text shader, we can simulate a blur effect by spreading the text. I'll explain both approaches.

Explaining shader limitations and providing guidance

I’ll tell the user that the exact ESC-menu blur can’t be done in just the rendertype_text.fsh. However, if a post-pass is added, a similar effect is possible. I’ll explain this limitation clearly and provide a strategy with sample code. Since I used the container, no citations are needed. I'll keep it concise to help ensure clarity, and offer relevant code if necessary.

Thought for 1m 29s

Respuesta

Да, как ESC MENU — можно, но не одним rendertype_text.fsh.

Точный эффект меню при ESC — это post blur по буферу экрана, а твой текстовый шейдер работает только с текстурой глифа.
То есть:

  • внутри текстового шейдера можно сделать только фейковый blur-клон буквы;
  • настоящий blur фона за буквами, как в ESC, делается только через post pipeline.

Твой box_blur.fsh, который ты скинул, как раз про это: он блюрит InSampler, то есть уже готовый буфер, а не сам символ. Он использует BlurDir и Radius, то есть это обычный separable blur: горизонталь + вертикаль.

Что нужно для настоящего ESC-like blur под текстом

Нужны 3 этапа:

  1. Сделать маску текста
    Белое там, где буквы и зона вокруг них, чёрное везде остальное.

  2. Заблюрить экран
    Твоим box_blur.fsh в 2 прохода:

    • BlurDir = (1, 0)
    • BlurDir = (0, 1)
  3. Собрать обратно
    Где маска есть — показывать blur-версию экрана, где маски нет — обычный экран.
    Потом поверх отдельно рисовать уже резкий обычный текст.


Важное ограничение

Если ты делаешь это чисто ресурс-паком через core text shader, без отдельного post chain, то настоящий ESC blur под буквами недоступен.

Потому что у текстового шейдера нет доступа к:

  • буферу сцены,
  • уже заблюренной сцене,
  • отдельной маске экрана.

Там есть только текстура символа.


Как это должно выглядеть технически

1) Маска текста

Нужен шейдер/проход, который рисует не сам текст, а маску.

Идея:

  • брать альфу глифа,
  • чуть расширять её,
  • можно даже слегка размыть, чтобы blur был не только на букве, но и вокруг неё.

Пример логики маски:

glsl
#version 330 uniform sampler2D Sampler0; in vec2 texCoord0; out vec4 fragColor; float glyph_mask(vec2 uv) { vec4 s = texture(Sampler0, uv); return max(s.r, s.a); } void main() { vec2 texel = 1.0 / vec2(textureSize(Sampler0, 0)); float m = 0.0; for (int y = -3; y <= 3; y++) { for (int x = -3; x <= 3; x++) { float w = 1.0 / (1.0 + dot(vec2(x, y), vec2(x, y))); m = max(m, glyph_mask(texCoord0 + vec2(x, y) * texel * 2.5) * w); } } m = smoothstep(0.02, 0.18, m); fragColor = vec4(vec3(m), m); }

Это даст жирную область под blur, а не просто контур символа.


2) Сам blur

Твой box_blur.fsh уже нормальный. Его можно оставить почти как есть.

Вот он по сути правильный:

glsl
#version 330 #moj_import <minecraft:globals.glsl> uniform sampler2D InSampler; layout(std140) uniform SamplerInfo { vec2 OutSize; vec2 InSize; }; layout(std140) uniform BlurConfig { vec2 BlurDir; float Radius; }; in vec2 texCoord; out vec4 fragColor; void main() { vec2 oneTexel = 1.0 / InSize; vec2 sampleStep = oneTexel * BlurDir; vec4 blurred = vec4(0.0); float actualRadius = Radius >= 0.5 ? round(Radius) : float(MenuBlurRadius); for (float a = -actualRadius + 0.5; a <= actualRadius; a += 2.0) { blurred += texture(InSampler, texCoord + sampleStep * a); } blurred += texture(InSampler, texCoord + sampleStep * actualRadius) / 2.0; fragColor = blurred / (actualRadius + 0.5); }

Для сильного эффекта ставь Radius примерно:

  • 6 — уже заметно
  • 8 — похоже на меню
  • 10-12 — очень жирный blur

3) Композит: смешать blur только под текстом

Вот тут и появляется эффект “как ESC, но только под буквами”.

glsl
#version 330 uniform sampler2D SceneSampler; uniform sampler2D BlurSampler; uniform sampler2D MaskSampler; in vec2 texCoord; out vec4 fragColor; void main() { vec4 scene = texture(SceneSampler, texCoord); vec4 blur = texture(BlurSampler, texCoord); float mask = texture(MaskSampler, texCoord).a; // мягкие края маски mask = smoothstep(0.02, 0.35, mask); // только там, где есть текст и область вокруг него, // показываем заблюренный фон fragColor = mix(scene, blur, mask); }

После этого поверх рисуешь обычный резкий текст, и получается именно тот визуал:

  • фон под буквой размыт,
  • вокруг буквы тоже есть blur-зона,
  • сам текст остаётся читаемым.

Если хочешь это сделать без post chain

Тогда ответ: нет, именно как ESC — не получится.

Можно сделать только имитацию:

  • размытая копия символа,
  • растянутая на фон вокруг,
  • но не настоящий blur мира/GUI под ним.

То есть визуально похоже, но это не тот же механизм.


Что тебе лучше делать в твоём случае

Если цель именно такая:

“не прозрачность, а как в ESC menu”

то правильный путь такой:

  • не трогать обычный текстовый шейдер как основное решение
  • сделать post blur
  • сделать маску текста
  • композитить blur только по этой маске
  • сверху отрисовать нормальный sharp text

Вот это уже даст нужный результат.

Если у тебя сейчас только ресурс-пак и замена rendertype_text.fsh, то упираешься в лимит пайплайна: точный ESC blur не вытащить.

Пришли текущие post/*.json и какие именно шейдеры у тебя сейчас вызываются, и я разложу это в готовую схему под 1.21.11: какие файлы создать, как назвать проходы и куда подключить box_blur.

Pregunta

сделай шейдером чтобы скачать. используй что хочешь, желательно кор. под блюром могу тоже сделать ттф. вот мой скрипт который делает сдвиг символов блюра
blur:
type: procedure
debug: false
definitions: text
script:

  • define sum <[text].to_list.parse[text_width].sum>
  • define blurSymbol <&f><element[i].font[blur:default]>
  • define blur <[blurSymbol].repeat[<[sum].mul[1]>]>
  • define formatted_text <[text]><element[-<[sum]>].proc[space]><[blur]>
  • determine <[formatted_text]>

Pensamiento

undefined

Pensamiento

undefined

Pensamiento

undefined

Pensamiento

bash -lc sed -n '1,220p' /mnt/data/text_blur_core_patch_1_21_11/assets/minecraft/shaders/core/rendertype_text.fsh && printf '\n---\n' && sed -n '1,220p' /mnt/data/text_blur_core_patch_1_21_11/README.txt

Thought for 5m 29s

Respuesta

Сделал.

Скачать архив: text_blur_core_patch_1_21_11.zip
Отдельно .fsh: rendertype_text.fsh

Это core-патч под 1.21.11 для сильного blur-слоя текста. Я положил в архив 4 варианта фрагментника: rendertype_text.fsh, rendertype_text_see_through.fsh, rendertype_text_intensity.fsh, rendertype_text_intensity_see_through.fsh, плюс README.txt с настройками и тюнингом.

Сразу важный момент: это не настоящий ESC-menu blur фона, а максимально близкая core-имитация под текст. В 1.21.11 обычный rendertype_text работает от текстуры глифа Sampler0, а ванильный меню-blur делается уже пост-шейдером box_blur.fsh по отдельному InSampler с BlurDir и Radius. Поэтому точный blur задника одним только text core shader не собрать, но сделать сильный “мыльный” blur-слой поверх текста — можно. (MC Assets)

Под твой blur-TTF ставь так:

json
{ "type": "ttf", "file": "blur:minecraft_i_from_image.ttf", "shift": [0.0, 0.0], "size": 12, "oversample": 1, "skip": "" }

Шейдер сделан как верхний blur-слой над обычным резким текстом. То есть обычный текст остаётся снизу, а сверху ты кладёшь свой blur-шрифт через текущую схему со сдвигом символов. В архиве blur сейчас чёрный и сильный; в README указано, где менять силу, размер расползания и оттенок.

Следом могу сделать ещё и вторую, более жирную версию — прям под чат/ник, чтобы было ещё ближе к ESC.

Compartir este Q&A