Здравствуйте, уважаемые разработчики. Я работаю над воссозданием графики Disco Elysium

по данному видео, которое раскрывает часть процесса.
Это изометрическая игра от третьего лица с комбинированной 2D\3D графикой. Разумеется, оригинал делался на Unity, но ZaUm планируют разработку следующей игры на UE5. У меня не возникло сложностей с созданием ассетов окружения (рендеры локаций), однако я столкнулся с трудностями, которые не были раскрыты в документации или в обучающих роликах на YouTube.
В частности, это сортировка по глубине (когда текстура глубины, предварительно созданная в стороннем 3D пакете накладывается на плоскость и делает меш персонажа невидимым в областях, где он стоит "за препятствием").
.
Задача заключается в том, чтобы создать материал, который будет сравнивать расстояние от камеры до глубины плоскости (А) и расстояние от камеры до персонажа (Б) и динамически прятать персонажа по пикселям, если А < Б.
Обыскал весь интернет несколько раз, и не нашёл готового решения или намёков на то, как решать этот вопрос.
Как следует подходить к этой задаче? Нужно ли писать шейдер на HLSL или всё можно сделать при помощи нод материалов UE?

Нужное время на видео: 9:16.
Благодарю за ответы.
https://www.youtube.com/watch?v=vp5mtj2tJMQ&ab_channel=BombsandLasers-%D0%A0%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0%D0%B8%D0%B3%D1%80

6 ответов

30 просмотров

Из видоса вообще не понятно используется там precomputed глубина или считается в рантайме. Он там тыкает по дроуколам, но по сути рассказывает просто обычную отрисовку глубины при рендере. В ue ты можешь использовать pixel depth offset для решения своей задачи

Leo-Mechnikov Автор вопроса
Илья Максимович
Из видоса вообще не понятно используется там preco...

Илья, спасибо за ответ! Да, там заготовленная карта глубины (чёрно белая bitmap) созданная отдельно в Blender, которая вставляется в материал.

Leo Mechnikov
Илья, спасибо за ответ! Да, там заготовленная карт...

Ок, просто из фрагмента это было не понятно. Ну ты можешь сделать так же, и пихать эту карту в pdo канал материала

Leo-Mechnikov Автор вопроса
Илья Максимович
Ок, просто из фрагмента это было не понятно. Ну т...

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

Leo Mechnikov
Благодарю, изучу это. Я уже что только не пробовал...

Тебе нужно сделать что-то типа такого. Но не смотри на мои ноды, я просто хотел проверить работоспособность подхода. Это просто концепт

Leo-Mechnikov Автор вопроса
Илья Максимович
screenshot Тебе нужно сделать что-то типа такого. Но не смотр...

Проведу испытания, кажется что это то, что нужно!!!

Похожие вопросы

Обсуждают сегодня

Ребята, всем привет. Подскажите, пожалуйста, можно ли как-то через бота понять, что этого бота добавили в группу\канал и выдали ему права администратора?
Artem Stormageddon
9
Привет, такой вопросик появился кажется ли вам что Rust слишком сложный/строгий для высокоуровневого программирования и слишком "безопасный"/строгий для низкоуровневого?
Крокант
10
А не хотим ли мы развлечься? 😉 Но так чтобы с пользой для наших профессиональных навыков?? 👨‍🎓👩‍🎓 Предлагаю на октябрь запланировать тестовый запуск новой командной игры "Игр...
Andrii Kurdiumov
2
Это переведённый текст с английского. Я не говорю на русском, но могу использовать переводчик Телеграм. Приветствую! Я начинающий веб-разработчик и все еще учусь. В настояще...
𐩱𐩪𐩣𐩱𐩲𐩺𐩡
2
Всем привет. Хотел бы написать для себя свою ос. Причины: 1) нужен опыт в чем-то 2) будет меньше весить 3) свое, но там будут свои задумки Я понимаю что нужно писать для всег...
Shadow Akira
18
А какие существуют способы обработки ошибок выделения памяти в ядре? Т.е., допустим, есть функция, которая возвращает адрес свободной страницы в физической памяти и диапазон в...
disba1ancer
51
Всем привет! Скажите, никто не пытался уменьшить размер процесса ssl, которые ассоциируется с открытым соединением (не помню точное название этого процесса, но там была какая-...
Алексей
20
5? да там все 10
Boris Vinogradov
12
у кого сколько оперативы на базе данных ?
АДИЛЬБЕК
4
Привет всем! Почему этот код не срабатывает при добавлении или удалении пользователя из чата? bot.on('chat_member', async (ctx) => { console.log(ctx); }) bot.launch({allo...
Alexander
5
Карта сайта