Как поменять гамму на серые тона?

Версия Minecraft
1.12.2
API
Forge

Dem

6
0
Создаю мод для игры за монстра и хочу что бы он видел все в серых тонах(только 1 игрок), но не знаю как это сделать. Полагаю это связано с рендером изображения и заменой его на более серые цвета.

Заранее спасибо!
 
Гамма это про освещение, то что ты хочешь сделать это скорее пост-процессинг
1 из вариантов реализации: Использовать фреймбуффер майнкрафта и рендерить его картинку с наложенным шейдером, и шейдером ты можешь изменять цветность картинки

Возможно подойдет для такого какой-нибудь RenderOverlayEvent который происходит после рендера мира, но перед рендером интерфейса, т.е. Pre
Дальше достаешь фреймбуффер, достать его можно сразу в классе майнкрафта, вроде Minecraft.getMinecraft().getFramebuffer(), биндишь его текстуру, есть метод вроде даже отдельный там
Далее накладываешь шейдер через glUseProgram(programID) и рендеришь квадрат на весь экран с текстурой фреймбуффера
далее отключаешь шейдер используя вместо programID 0 и в целом всё

Есть еще совет, фреймбуфферы всегда возвращают картинку в перевернутом формате, поэтому нужно от 1 отнять текстурную координату Y
Примерный код фрагментного шейдера который может получится:
Fragment Shader:
uniform float u_stepping; //шаг от обычного цвета к черно-белому 0.0-1.0
uniform sampler2D u_texture; //текстура, нужно установить на int 0
varying vec2 v_texCoords;
void main() {
    vec4 color = texture2D(u_texture, v_texCoords);
    float gray = 0.21 * color.r + 0.71 * color.g + 0.07 * color.b;
    gl_FragColor = mix(color, vec4(gray, gray, gray, 1.0), u_stepping);
}

Вершинный:
Vertex Shader:
varying vec2 v_texCoords;

void main() {
    gl_Position = ftransform();
    v_texCoords = vec2(gl_MultiTexCoord0.x, 1.0 - gl_MultiTexCoord0.y); //инверсия текстурных координат
    gl_TexCoord[0] = gl_MultiTexCoord0; //эта строка может и не понадобится(старые исходники)
}

При компиляции шейдеров скорее всего понадобятся методы из GL20 класса, это вроде нигде не указано, но если что ищи в GL11, GL12, GL20 и т.п.
Первый попавшийся grayscale шейдер, урок по компиляции шейдеров, статья объясняющая как работают шейдеры(наверное)
 
Назад
Сверху