Надо ли тутор на простой screen space фонарик?

1,296
35
243
Замутил (навайбкодил) такой себе, может мне гайдик забацать или слив кода... Хз надо ли вам1777010892230.png
 
Балдеж вообще. А как сделал фонарик? У меня просто квад с единичной матрицей проекции рисуется (на экран по сути), где шейдер через мой фбо с учетом глубины и текстуры ванильного фбо делает расчет освещения на экране. От первого лица все fine, but от третьего лица хз как сделать чтобы он правильно рисовал свет от головы игрока
 
По сути у меня тут есть классические spot light и point light обрабатываемые через SSBO и кастомный шейдер Complementary, в остальном просто компонент, который я прицепил к голове игрока, поэтому кстати и теней от такого источника на видео нет, как на скринах ниже, поскольку игрок попадает на shadow map и по итогу светится только его голова :D
Короче говоря, большая часть логики просто была взята из исходного шейдера. Ну и по мелочи, пробовал разные подходы к куллингу, вроде direct / tiled / clustered, но пока сыровато выходит, больше 50 источников без просадок не вывозит)
 
Поэтому я сделал фонарь только для игрока. У других не рисую
больше 50 источников без просадок не вывозит)
Блин, если бы подробнее объяснил, как правильнее сделать фонарь, то цены б не было. Хотелось бы гайд написать с более полным функционалом, а не как щас у меня - только от первого лица
Ты же не встраивался в рендер кубача, да? Если встраивался, то немного расстроюсь. Не хотелось бы его пайплайн менять. Главное шобы от третьего лица добить работу
 
Если встраивался, то немного расстроюсь
Ага, суть как раз в этом)

У тебя тут по сути 2 варианта, или обойтись костылями и затемнить всё по краям, сделав своего рода виньетку, либо лезть в сами шейдеры (будь то ванила, оптифайн или Iris) и патчить само освещение игры. Если речь идёт и о шейдерпаках, то увы, тут придётся патчить буквально каждый шейдерпак, поскольку подходы к освещению у них могут существенно отличаться и сделать универсальный вариант почти нереально. Из около-ванильных решений есть Veil, но он понятное дело не совместим с Iris/Optifine)
 
Понял, спасибо)
Все таки обойдусь прагматичным решением
 
Крч, костыль признан неудачным. В теории, можно получить отключение освещения своего персонажа через стенсил буфер и уменьшить угол фонаря, но мне впадлу + это тоже костыль
Нормальный фонарь только в World Space будет
 
Последнее редактирование:
патчить само освещение игры
Кстати, про патчить освещение, я так понимаю это хук в EntityRenderer, где рисуются все блоки и энтити, и сделать чота типа:

Java:
GL20.glUseProgram(lightShaderID);

// setup uniforms...
       
Minecraft.getMinecraft().renderGlobal.renderEntities(player, null, partialTicks);
Minecraft.getMinecraft().renderGlobal.renderBlocks(null, partialTicks);
GL20.glUseProgram(0);
?
 
рисуются все блоки и энтити
Ну, в целом можно и проще, если упрощать, у меня информация о источниках света записывается в SSBO, а потом этот свет подмешивается в сам шейдерпак:
1777101249949.png1777101404839.png
Вмешиваться в рендеринг блоков и сущностей нужно, если тебе уже нужны тени от этого света или объёмный туман, тогда уже нужно создавать shadow map атлас, туда рендерить всё от чего будет тень, но вероятно в твоём случае этим можно пренебречь)
Будет достаточно и depth-буфера. Всякие fragPlayerPos и fragViewPos у меня берутся из шейдерпака, но по сути там логика та же - взять координаты пикселя и его глубину из depth-буфера и перевести в мировые координаты через projectionInverse
 
Страшные вещи делаешь, fukkivdan
Судя по твоим скринам и видео (текстуры, оружие + спавнер NPC в виде мотыги) - ты делаешь для проекта, а не отдельный мод (но могу ошибаться)
А в таких вещах первое что нужно сделать - выкинуть моды и сразу править исходный код, без дурацких мук с хуками / миксинами
 
выкинуть моды и сразу править исходный код, без дурацких мук с хуками / миксинами
да бро веритрах, просто я не знаю, как мне без попной боли перейти с форджа на мсп, еще и чтобы поддержка модов была
делаю то для проекта, но слить обычный фонарик это ваще пофик, у каждого второго проекта скелетка + пбр
 
Назад
Сверху