Шейдеры оптифайна для своего моба

Версия Minecraft
1.12.2
3,005
192
592
Как-то можно отключить наложение шейдеров оптифайна на своего моба?
 
2,505
81
397
Я уже точно не помню, но можно попробовать переопределить главный метод в класса Render таким же кодом.
Можно попробовать выключить шейдер и после твоего моба включить заново. Текущий шейдер скорее всего запомнен в GLStateManager.

C другой стороны, даже если ты отключишь шейдер, может быть только хуже. Почти все шейдер паки не сразу накладывают эффекты в процессе рендеринга, а заполняют gbuffer. А затем в постпроцессинге накладываются эффекты на весь экран.
Зачастую gbuffer состоит как минимум из цвета, нормалей и uv лайтмапы. Если отрендерить сущность без использования нужного шейдера, то gbuffer запишется только цвет, и при этом на него уже будет наложено освещение от лайтмапы и статических источников света вокруг энтити. И теперь в постпроцессинге при обработке пикселей твоей энтити будет доставаться информация с объектов, которые находятся за ней. В результате на неё будет наложено дополнительное некорректное освещение.
 
7,099
324
1,509
А если перед отрисовкой своего мода заюзать шейдер с id 0?
 
3,005
192
592
Хорошо, если убирать шейдер для своего моба не будет хорошим решением, тогда как сделать поддержку шейдера для своего мода? (что бы был нормальный рендер)
 
2,505
81
397
Просадишь фпс на переключениях, если делать это внутри рендерера коровы. Только если делать еще один pass исключительно для коров в конце постпроцессинга.

Еще один неприятный момент это очистка буфера глубины, которая происходит после рендера руки. В итоге отрендерить коров просто так не получится, точнее они будут просто поверх всего. Я не очень помню, есть в оптифайне сохранение буфера глубины из коробки, или шейдер паки сохраняют ее отдельно в MRT. Но если есть, то этот способ реален.
 
3,005
192
592
3,005
192
592
Класс наследован от RenderLiving.
Далее addLayer в конструкторе.
И там оно ?само? рендерится.
 
олько если делать еще один pass исключительно для коров в конце постпроцессинга.
Ну не только для коров же, туда можно будет все рендерить что должно рисоваться без шейдеров

Еще один неприятный момент это очистка буфера глубины, которая происходит после рендера руки. В итоге отрендерить коров просто так не получится, точнее они будут просто поверх всего
никогда не было проблемой с глубиной. Всегда спасает блит, не знаю как там в оптифайне намудрили
 
2,505
81
397
По поводу глубины я там чета загнался. Но блитать все равно просто так не стоит.

Собственно, проблема была в том, что @Doc использует текстурную матрицу для своей жижи. А в шейдер паках она чаще всего (или скорее всего всегда) не используется. Поэтому решение только одно - не использовать текстурную матрицу. Поэтому её лучше вообще никогда не использовать, если не хотите сломать оптифайн и нет возможности править шейдер паки.
Код:
texcoord = gl_MultiTexCoord0;
lmcoord = gl_TextureMatrix[1] * gl_MultiTexCoord1;
 
Сверху