Рендер прозрачной партикли

Версия Minecraft
1.12.2
95
1
2
У моей кастомной партикли есть невидимые места, но получается так, что вода и другие партикли которые находятся за ней не рендерятся. Пытался вырубать glDepth, но тогда оно реднерится даже за стенами. В общем было может у кого, есть способы чинитЬ?
1550435630752.png
 
Решение
Если по-простому, то никак.

Поясню.
Майн сначала рендерит всю непрозрачную геометрию, затем частицы, затем дождь/снег, а затем полупрозрачную геометрию. Получается, что вода рендерится поверх всего. Майн 1.7.10 отключал запись в буфер глубины для частиц и погоды. Из-за этого вода рендерилась поверх.
В 1.12.2 майн не отключает запись в буфер глубины для частиц, хотя включен альфа блендинг. Поэтому вода не рендерится поверх партиклов. Но как только начинаешь использовать полупрозрачную текстуру, то получается эффект, который как раз на твоем первом скрине. Но майн не использует полупрозрачные текстуры для частиц и не спавнит большое количество частиц почти на одном уровне глубины, поэтому это живет нормально. Но вода все еще рендерится...
148
2
6
@AceGo Возможно потому что Forge на 1.13.2 ещё в бета?
 
3,005
192
592
@Hesperus_rus А при чем тут вообще 1.13 и тем более фордж?
В версии у него вроде бы 1.12.
 
1,038
57
229
Java:
GL11.glPushMatrix();
GL11.glEnable(GL_DEPTH_TEST);


//для прозрачности наде ещё включить BLEND
GL11.glEnable(GL11.GL_BLEND);
GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);


GL11.glDisable(GL11.GL_DEPTH_TEST);
GL11.glPopMatrix();
[50% OpenGl] GL_DEPTH_TEST просвечивает воду
 
1,038
57
229
очень напоминает огонь при поджигании игрока, вы смотрели ванильный эффект поджигания?
И хотелось бы ещё выяснить в каком именно месте вы использовали код (это в хуке, это в OnRenderOverlay, ещё где...)
 
2,505
81
397
Если по-простому, то никак.

Поясню.
Майн сначала рендерит всю непрозрачную геометрию, затем частицы, затем дождь/снег, а затем полупрозрачную геометрию. Получается, что вода рендерится поверх всего. Майн 1.7.10 отключал запись в буфер глубины для частиц и погоды. Из-за этого вода рендерилась поверх.
В 1.12.2 майн не отключает запись в буфер глубины для частиц, хотя включен альфа блендинг. Поэтому вода не рендерится поверх партиклов. Но как только начинаешь использовать полупрозрачную текстуру, то получается эффект, который как раз на твоем первом скрине. Но майн не использует полупрозрачные текстуры для частиц и не спавнит большое количество частиц почти на одном уровне глубины, поэтому это живет нормально. Но вода все еще рендерится поверх дождя/снега.

Решения.
Всунуть рендер партиклов после воды без записи в буфер глубины. Но тут сразу возникает проблема, что партиклы не будут видны сквозь воду. Видимо поэтому от этого отказались. Хотя на самом деле могли бы добавить еще один слой после воды.
Или реализовать какой-нибудь order-independent transparency алгоритм. Но тут ты сломаешь и оптифайн и, возможно, другие моды. Ну и вообще это high level.
 
95
1
2
@Dahaka я вот задавался вопросом не чинит ли эту проблему оптифайн, но пока поставить не смог еще. Есть ли возможно какое нибудь решение для своих кастомных партиклей? Что бы забить на воду и как минимум между кастомными не было конфликтов, или это уже конечная?
 
2,505
81
397
Я ведь написал решения.
Как реализовать их в рамках мода - без понятия. Может хуками как-нибудь прикрутить. Я не шарю в майне.
Попробуй поглядеть в других модах с полупрозрачными частицами. Если найдешь что-нибудь, то скинь сюда. Интересно посмотреть решения.
 
1,038
57
229
По поводу прозрачности я знаю один момент. Даже если картинка не имеет прозрачность, можно указать glColor(r,g,b,A);
glColor(1.0f, 1.0f , 1.0f, 1.0f); - это белый цвет, без изменения оригинальной текстуры
A - это альфа, картинка даже если не прозрачная разбивается на так называемую палитру, и если уменьшать альфу у совершенно не прозрачной текстуры, он будет убирать один слой за другим. Попробуй попробовать разные варианты типо 0.9f, или 0.45f. И ты заметишь о чём я говорю. Не включай BLEND, когда будешь тестировать.
 
95
1
2
Ну в общем с водой видимо никак не получится починить. Конфликт между своими кастомными все же удалось устранить. в методе getFXLayer() оказывается можно указывать слой, на котором рендерится партикля... и поставив значение выше, текстура перестала ломать все текстуры, которые за ней.
1550582332162.png
Ну а с водой наверное остается только в glAlphaFunc только отрезать ненужное дабы не резало сильно воду. Всем спасибо за ответы, тему закрываю
 
148
2
6
Попробуй обратиться к разрабам которые специализируются на этом, может они тебе расскажут что и как?
 
Сверху