вот мой шрифт ттф для блюра. скажи, правильно рп с...
Created on: April 14, 2026
Answered using GPT-5.4 Thinking by Chat01
Created on: April 14, 2026
Answered using GPT-5.4 Thinking by Chat01
вот мой шрифт ттф для блюра. скажи, правильно рп сделал? просто будто неправильно рендерится. мне нужно чтобы символ размерами был 1 пиксель на 12. Правильно сделан ресурс пак?
{
"type": "ttf",
"file": "blur:minecraft_i_from_image.ttf",
"shift": [0, 2.5],
"size": 12,
"oversample": 8,
"skip": ""
},
Не совсем.
Для цели «символ должен быть ровно 1 пиксель при размере 12» такой ttf-провайдер выглядит сомнительно, и проблема, скорее всего, не в одном поле, а сразу в нескольких.
Что у вас сейчас:
json{ "type": "ttf", "file": "blur:minecraft_i_from_image.ttf", "shift": [0, 2.5], "size": 12, "oversample": 8, "skip": "" }
Что тут важно:
size: 12 — это нормальная идея, если вы хотите попасть в ванильный масштаб 12. Для Minecraft ttf-провайдера size — это не “высота глифа в пикселях”, а делитель em-size шрифта. Для шрифтов, которые специально делали под ваниль, обычно как раз ставят size: 12. В проекте, который генерирует TTF из ванильного шрифта, прямо указано: чтобы совпасть с Minecraft, size надо ставить 12, а не стандартные 11. (mcfonts)
oversample: 8 — самый подозрительный параметр. Документация по ttf-провайдеру говорит, что oversample — это разрешение рендера, и если оно не совпадает с em-size шрифта, появляется антиалиасинг. Плюс в 2025 был подтверждён баг Minecraft, где увеличение oversample у ttf ещё и меняло ширину символов; баг затрагивал 25w34b и был помечен как исправленный в 25w35a. (mcfonts)
shift: [0, 2.5] — синтаксически это выглядит допустимо, потому что в современных определениях shift хранится как float x/y, а не только целые. Но 2.5 для пиксельного шрифта — плохой знак: это сдвиг “между пикселями”, из-за чего глиф легко начинает выглядеть мыльно или “не по сетке”. Это уже не прямая ошибка формата, а очень вероятная причина неправильного визуала. (aldak0.ru)
Главный вывод:
ttf вообще не лучший вариант.from_image.ttf: при конвертации картинки в TTF часто теряются точные метрики, появляются контуры/хинтинг, и на выходе Minecraft уже не рисует его как идеальный bitmap-глиф.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.
Мой вердикт:
oversample: 8 и shift: [0, 2.5];Если хотите, я могу сразу показать, как оформить этот символ как bitmap provider, чтобы он рендерился строго по пиксельной сетке.
а какие настройки лучше сделать для такого эффекта как на картинке
#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));
textfloat 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);
}
Я на обычный текст если что накладываю сверху вот этот как раз таки. и мне нужен эффект блюра. а сейчас у меня так(вторая картинка). Эффект прозрачности а не блюра. а нужно именно как блюр
Не совсем.
Для цели «символ должен быть ровно 1 пиксель при размере 12» такой ttf-провайдер выглядит сомнительно, и проблема, скорее всего, не в одном поле, а сразу в нескольких.
Что у вас сейчас:
json{ "type": "ttf", "file": "blur:minecraft_i_from_image.ttf", "shift": [0, 2.5], "size": 12, "oversample": 8, "skip": "" }
Что тут важно:
size: 12 — это нормальная идея, если вы хотите попасть в ванильный масштаб 12. Для Minecraft ttf-провайдера size — это не “высота глифа в пикселях”, а делитель em-size шрифта. Для шрифтов, которые специально делали под ваниль, обычно как раз ставят size: 12. В проекте, который генерирует TTF из ванильного шрифта, прямо указано: чтобы совпасть с Minecraft, size надо ставить 12, а не стандартные 11. (mcfonts)
oversample: 8 — самый подозрительный параметр. Документация по ttf-провайдеру говорит, что oversample — это разрешение рендера, и если оно не совпадает с em-size шрифта, появляется антиалиасинг. Плюс в 2025 был подтверждён баг Minecraft, где увеличение oversample у ttf ещё и меняло ширину символов; баг затрагивал 25w34b и был помечен как исправленный в 25w35a. (mcfonts)
shift: [0, 2.5] — синтаксически это выглядит допустимо, потому что в современных определениях shift хранится как float x/y, а не только целые. Но 2.5 для пиксельного шрифта — плохой знак: это сдвиг “между пикселями”, из-за чего глиф легко начинает выглядеть мыльно или “не по сетке”. Это уже не прямая ошибка формата, а очень вероятная причина неправильного визуала. (aldak0.ru)
Главный вывод:
ttf вообще не лучший вариант.from_image.ttf: при конвертации картинки в TTF часто теряются точные метрики, появляются контуры/хинтинг, и на выходе Minecraft уже не рисует его как идеальный bitmap-глиф.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.
Мой вердикт:
oversample: 8 и shift: [0, 2.5];Если хотите, я могу сразу показать, как оформить этот символ как bitmap provider, чтобы он рендерился строго по пиксельной сетке.
а какие настройки лучше сделать для такого эффекта как на картинке
#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));
textfloat 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);
}
Я на обычный текст если что накладываю сверху вот этот как раз таки. и мне нужен эффект блюра. а сейчас у меня так(вторая картинка). Эффект прозрачности а не блюра. а нужно именно как блюр
Да — у тебя сейчас получается не блюр, а полупрозрачная копия текста, и причина в шейдере больше, чем в ttf.
У тебя ядро всего 3x3 и смещение ровно 1 texel:
glslvec2 texel = 1.0 / vec2(textureSize(Sampler0, 0));
Если у шрифта oversample: 8, то этот texel для глифа становится очень мелким в реальном масштабе текста. В итоге blur почти не “расползается” наружу, а просто слегка размывает альфу внутри символа. Поэтому визуально это выглядит как прозрачность, а не как мягкий блюр.
Сейчас:
glslreturn texture(Sampler0, uv).r;
Для шрифта лучше брать alpha, а не r:
glslreturn texture(Sampler0, uv).a;
Для блюра текста тебе нужна именно маска глифа.
Вот это:
glslvec4 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 всего глифа, а:
То есть не так:
glslglyph = mix(base, blur, ...)
А примерно так:
glslglow = 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 ); }
Меняй:
glslfloat radius = 2.0;
Пробуй:
2.02.53.0Уменьшай:
glslfloat alpha = glow * 1.2 + softFill;
например:
glslfloat alpha = glow * 0.8 + softFill;
Сделай:
oversample: 1radius = 2.5 или 3.0softFill = base * 0.15У тебя сейчас эффект “полупрозрачного текста” из-за сочетания:
oversample: 8sample.r вместо sample.acolor.a *= 0.4Для нормального блюра под Minecraft-текст лучше:
size: 12, shift: [0,0], oversample: 1radius, а не через сильную прозрачностьЕсли хочешь, я могу тебе сразу собрать 2 готовых шейдера:
сделай такой шейдер: если символ под ttf шрифтом, то сверху на символ накладывай блюр. не только на символ а ещё и на фон символ. и именно чтобы выглядил как блюр, как на фото. и сильный. пример можешь брать из post шейдера blur, только бери из 1.21.8 и переделай на 1.21.11, потому что там был самый нормальный блюр
Да, могу. Но есть одно важное ограничение: в 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 — хороший сильный blurBLUR_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, а связку:
Это уже другой пайплайн. Сейчас я дал вариант, который максимально близко имитирует твою картинку в рамках обычного текстового core shader.
Могу следующим сообщением дать ещё и вторую, более злую версию этого же шейдера — прям под очень жирный blur для ника/чата.
а типа такого блюра сможешь? как при нажатие ESC MENU
Да, как ESC MENU — можно, но не одним rendertype_text.fsh.
Точный эффект меню при ESC — это post blur по буферу экрана, а твой текстовый шейдер работает только с текстурой глифа.
То есть:
Твой box_blur.fsh, который ты скинул, как раз про это: он блюрит InSampler, то есть уже готовый буфер, а не сам символ. Он использует BlurDir и Radius, то есть это обычный separable blur: горизонталь + вертикаль.
Нужны 3 этапа:
Сделать маску текста
Белое там, где буквы и зона вокруг них, чёрное везде остальное.
Заблюрить экран
Твоим box_blur.fsh в 2 прохода:
BlurDir = (1, 0)BlurDir = (0, 1)Собрать обратно
Где маска есть — показывать blur-версию экрана, где маски нет — обычный экран.
Потом поверх отдельно рисовать уже резкий обычный текст.
Если ты делаешь это чисто ресурс-паком через core text shader, без отдельного post chain, то настоящий ESC 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, а не просто контур символа.
Твой 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Вот тут и появляется эффект “как 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); }
После этого поверх рисуешь обычный резкий текст, и получается именно тот визуал:
Тогда ответ: нет, именно как ESC — не получится.
Можно сделать только имитацию:
То есть визуально похоже, но это не тот же механизм.
Если цель именно такая:
“не прозрачность, а как в ESC menu”
то правильный путь такой:
Вот это уже даст нужный результат.
Если у тебя сейчас только ресурс-пак и замена rendertype_text.fsh, то упираешься в лимит пайплайна: точный ESC blur не вытащить.
Пришли текущие post/*.json и какие именно шейдеры у тебя сейчас вызываются, и я разложу это в готовую схему под 1.21.11: какие файлы создать, как назвать проходы и куда подключить box_blur.
сделай шейдером чтобы скачать. используй что хочешь, желательно кор. под блюром могу тоже сделать ттф. вот мой скрипт который делает сдвиг символов блюра
blur:
type: procedure
debug: false
definitions: text
script:
Сделал.
Скачать архив: 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.