Ваш браузер устарел, и поэтому некоторые важные функции этого сайта могут не работать. Пожалуйста, обновитесь то более современного браузера. 🙁

Проблема с шейдерами 1.15.2

чёрные шейдеры

Tripl

Майнкрафт становится чёрным после включения шейдеров

#1 | 7 июня 2020 — 12:21

JonnyB

JonnyB

Goldфаги

Звание: Бабка на лавке

о моя оборона

#2 | 7 июня 2020 — 12:24

CheshirX

CheshirX

Звание: Бесценный нехолоп

Tripl,
видеокарта не поддерживает данный шейдер. Или что-то не так в настройках. Но скорее первое
Tripl нравится это сообщение.

Просто призрак студента аэрокоса

#3 | 7 июня 2020 — 13:06

Caman86

Caman86

ТруЪ Олдфаги-с

Звание: Чоткий паря

Чёрные шейдеры что делать?

Tripl,
optifine в данный момент пока на стадии бета-пререлиз. Подожди, возможно разраб исправит твою проблему. Если шейдер не работает и на версиях ниже, то проблема с видеокартой/её драйверами.

Tripl нравится это сообщение.

#4 | 7 июня 2020 — 13:15

Статистика форума

Сейчас онлайн: 21

Создано тем 12936 Написано сообщений 816389 Пользователей 365940 Новый участник dudedaniyar

Администраторы | Главные редакторы | Модератор | Дедушки | Журналисты | HENTAI BOY | Goldфаги | Журналисты-олдфаги | ТруЪ Олдфаги-с | ТруЪ Плагинщик | Олдфаги | true Художник | Модератор бездны | Картоделы | XXXL ПХЛ | Просто хорошие люди | Посетители | Новички

Последние сообщения с форума

Mandarinka_TV

Просмотров: 2164

Ответов: 29

Просмотров: 15109

Ответов: 108

Автор: Alex G.

Просмотров: 3844

Ответов: 10

Автор: Alex G.

Просмотров: 48

Ответов: 0

Автор: Alex G.

ritterydam

Просмотров: 59802

Ответов: 287

Источник: ru-minecraft.ru

Пример черно-белого шейдера на GLSL

Пример черно-белого шейдера на GLSL

Привет всем. Когда я писал мод на скиллы, я прочитал статью про шейдеры, и про то, как их использовать в майнкрафте вот из этого тутора Алекса. И там не было конкретного примера, и так как некоторые просили его, я решился его сделать сам, и слить код с объяснениями, который я написал для того мода на скиллы. Поэтому перед прочтением данного примера, рекомендую прочитать те две статьи Алекса

[Minecraft Problems] Чёрные Шейдеры? РЕШАЕМ ПРОБЛЕМУ

Для начала, что бы использовать шейдеры, надо создать специальный класс для их удобной подгрузки из ресурсов и использования. И статический класс для хранения подгруженных шейдеров и их регистрации
Класс-обертка для нашего шейдера назовем ShaderProgram

Читайте также:  Как построить в Майнкрафте люстру

public class ShaderProgram < private int programID; // индекс нашей шейдерной программы public ShaderProgram()< programID = ARBShaderObjects.glCreateProgramObjectARB(); // генерируем индекс и задаем его >public ShaderProgram addFragment(String path) < return add(path, ARBFragmentShader.GL_FRAGMENT_SHADER_ARB); >public ShaderProgram addVertex(String path) < return add(path, ARBVertexShader.GL_VERTEX_SHADER_ARB); >// метод для добавления в шейдерную программу какого-либо шейдера public ShaderProgram add(String path, int shaderType) < int shaderID = ARBShaderObjects.glCreateShaderObjectARB(shaderType); // генерируем индекс нового шейдера ARBShaderObjects.glShaderSourceARB(shaderID, readFile(path)); // привязываем код шейдера к его индексу ARBShaderObjects.glCompileShaderARB(shaderID); // компилируем шейдер // проверяем компиляцию на ошибки. Если что-то пойдет не так, будет краш с ошибкой if (ARBShaderObjects.glGetObjectParameteriARB(shaderID, ARBShaderObjects.GL_OBJECT_COMPILE_STATUS_ARB) == GL11.GL_FALSE) throw new RuntimeException(«Shader compilation error!n» + ARBShaderObjects.glGetInfoLogARB(shaderID, ARBShaderObjects. glGetObjectParameteriARB(shaderID, ARBShaderObjects.GL_OBJECT_INFO_LOG_LENGTH_ARB))); // если ошибок при компиляции не было, привязываем шейдер к программе ARBShaderObjects.glAttachObjectARB(programID, shaderID); return this; >// метод для компиляции всей нашей программы public ShaderProgram compile() < ARBShaderObjects.glLinkProgramARB(programID); return this; >// включает шейдерную программу public void start() < ARBShaderObjects.glUseProgramObjectARB(programID); >// выключает шейдерную программу public void stop() < ARBShaderObjects.glUseProgramObjectARB(0); >// метод возвращает индекс юниформы из программы, по её имени в шейдере public int getUniform(String name) < return ARBShaderObjects.glGetUniformLocationARB(programID, name); >// метод для считывания файла из ресурса private String readFile(String path) < try < StringBuilder builder = new StringBuilder(); BufferedReader reader = new BufferedReader(new InputStreamReader(Minecraft.getMinecraft().getResourceManager().getResource(new ResourceLocation(Reference.MOD_ID, path)).getInputStream(), «UTF-8»)); String str; while ((str = reader.readLine()) != null) builder.append(str).append(«n»); return builder.toString(); >catch (IOException e) < e.printStackTrace(); >return null; > >

А класс для хранения и регистрации всех шейдеров будет называться ModShaders
public class ModShaders < public static ShaderProgram blackWhite; // этот метод мы вызываем при инициализации мода, что бы зарегестрировать все наши шейдеры public static void register()< // путь к файлам шейдера мы указываем относительно нашей папки в ассетах blackWhite = new ShaderProgram() .addFragment(«shaders/black-white.frag») // добавляем фрагментный .addVertex(«shaders/texture_color.vert») // добавляем вертексный .compile(); // после добавления надо вызывать обязательно компиляцию >>

Читайте также:  Как быстро найти аванпост разбойников в Майнкрафт

После написания этих двух классов надо написать сами шейдеры. Один из них будет вертексный, и он будет передавать во фрагментный данные о цвете и координате точки на текстуре, что бы адекватно наложить эту текстуру на полигон
Для этого создаем два файла в ресурсах, вертексный шейдер я назову «texture_color.vert», а фрагментный «black-white.frag». И положу их в папку «shaders» для удобства хранения

В вертексном шейдере, как я уже говорил, задаем цвет вершины и текстурную координату, а так же позицию самой вершины. Переменная с модификатором varying значит, что значение этой переменной будет передано всем последующим шейдерам. В нашем случае эти значения мы получим далее во фрагментном шейдере

#version 120 // версия шейдера varying vec2 texcoord; // текстурная координата varying vec4 color; // цвет вершины void main() < gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; // находим позицию вертекса, перемножая его на матрицу проекции texcoord = vec2(gl_MultiTexCoord0); color = gl_Color; >

А вот и код фрагментного шейдера, где мы обесцвечиваем пиксель, оставляя только его яркость с прозрачностью

#version 120 varying vec2 texcoord; varying vec4 color; uniform sampler2D texture; // текстура полигона uniform float procent; // процент, который показывает какую часть полигона сделать черно-белой void main() < vec4 original = texture2D(texture, texcoord); // получаем оригинальный цвет текстуры float d = (original.r + original.b + original.g)/3.0; // вычисляем яркость if (procent < texcoord.y) // если координата пикселя больше, чем наш процент, то делаем его черно белым gl_FragColor = vec4(d, d, d, color.a); else gl_FragColor = original * color; >

Дальше осталось дело за малым, а именно написать рендер иконки скилла, применив к нему шейдер и подставив в юниформу фрагментного шейдера процент отката нашего скилла, что бы со временем отката, черно-белая часть иконки уменьшалась. Вот кусок кода рендера иконки с шейдерами. Рендрил я её на экране в эвенте

float procentOfSkillCD = skill.GetCD(); // получаю откат скилла в процентах. Соответственно со временем процент будет уменьшатся Minecraft.getMinecraft().getTextureManager().bindTexture(skill.GetIcon()); // задаем текстуру нашей иконки ModShaders.blackWhite.start(); // включаем черно-белый шейдер ARBShaderObjects.glUniform1fARB(ModShaders.blackWhite.getUniform(«procent»), procentOfSkillCD); // устанавливаем значение юниформе procent нашему шейдеру Minecraft.getMinecraft().ingameGUI.drawTexturedModalRect(x, y, 0, 0, width, height); // отрисовываем иконку скилла, в нужной позиции и с нужным размером ModShaders.blackWhite.stop(); // если мы ничего далее не собираемся рисовать с этим шейдером, то выключаем его

Читайте также:  Где найти экскалибур в Майнкрафт medieval craft

Вот и всё, когда кастую скилл, получаю вот такую картину. По степенно, линяя, разделяющая цветную и черно-белую часть начинает опускаться, пока скилл не восстановится, и не уберется черно-белая часть

Спойлер: Скрин
Шакально, т.к. иконка у меня маленькая, но всё же эффект виден

Безымянный.png

Автор Minebot Просмотры 3,013 Первый выпуск 15 Июн 2018 Обновление 15 Июн 2018 Оценка 4.00 звёзд 2 оценок

Источник: forum.mcmodding.ru

Почему шейдеры черные в майнкрафт

CubixWorld логотип звезда 1 CubixWorld логотип звезда 2 CubixWorld логотип звезда 3 CubixWorld логотип свет CubixWorld логотип ветка 1CubixWorld логотип ветка 2

Рассмотрено Проблема с шейдерами

5 мар. 2022 г., 14:25

5 мар. 2022 г., 14:25

  1. Ваш никнейм, сервер: MakushiSharkuum, HiTech/Galaxy
  2. Интересующий вас вопрос: Возникла проблема с шейдерами, а именно с текстурой включённых ламп из мода ProjectRed-Illumination. Такая текстура только при включённом шейдере (любом). «Проклацал» настройки шейдера — ничего. Текстур-пак как стандартный, так и свой никак не влияют. Скрин (если на форум картинка не грузится) — https://prnt.sc/IPK0WxgriPHp
  3. (P.S) А также есть небольшая проблемка — папка с шейдерами сбрасывается при каждом запуске лаунчера до стандартного списка. Не критично, но нужно каждый раз закидывать свои шейдеры в папку.

5 мар. 2022 г., 14:43
Управляющий
5 мар. 2022 г., 14:53

Доброго времени суток.

Прежде всего шейдеры не подразумевают под собой что они будут использоваться при играх с модами.

Это вполне нормально что текстура поплыла из-за шейдера, т.к некоторые шейдеры добавляют текстуре блока отражение или еще что-то. При написании шейдера используется ванильный майнкрафт и ванильные блоки, а дальше уже просто заливается в общий доступ или на патрон (как автор пожелает).

Нужно искать шейдеры, которые не будут конфликтовать с модами, но таких к сожалению вероятнее всего нет.

Источник: cubixworld.net