В дополнении Падение Ориата, запущенном в этом августе, мы значительно изменили технологию воды в Path of Exile. В сегодняшней новости наш программист графики Алекс расскажет о процессе внедрения этих изменений.

По мере развития Path of Exile, мы вкладывали все больше и больше ресурсов в её движок рендера. Тем не менее, некоторые игроки оценивали движок на основании старых графических ресурсов, созданных несколько лет назад, таких, например, как эффект воды (одна из первых вещей, на которые обращаешь внимание, начиная играть за нового персонажа). В действительности мы постоянно работаем над поддержанием движка в актуальном состоянии, над его быстротой и расширением, и мы хотели, чтобы наши игроки это заметили. Когда мне поручили заменить воду в игре, у меня было много идей, которые можно было попробовать осуществить, я знал, что от некоторых из них (а, скорее всего, от большинства) придется отказаться по причинам производительности или просто потому, что результат бы выглядел не очень красиво.

Замена всей воды в игре была действительно непростой задачей, потому что её используют многие игровые ресурсы, и новая вода должна была быть на 100% обратно совместимой с ними. Недостаточно было просто сделать новую воду, которая бы смотрелась хорошо, она должна была подстраиваться под любую поверхность и любые условия окружения в игре. Разумеется, производительность была одним из главных приоритетов, потому что окружение не должно оттягивать на себя слишком много ресурсов графического процессора.

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



Хотя распознавание работало хорошо, я знал, что оно может сказаться на производительности, поэтому отказался от этой идеи. Следующим шагом было добавление волн на поверхности, цвета воды и отражений:



Поверхность воды была отрендерена с использованием алгоритма трассировки лучей на экране. Это значит, что вода на самом деле плоская, но выглядит трехмерной из-за технологий шейдеров, аналогичных технологии карта параллакса. На данном этапе мне нужно было определиться, что хорошо работало и подходило для дальнейшей разработки, а что нужно было переделать с нуля. Интересно, что при рендере воды вы на самом деле не видите цвет воды, вы видите всё то, что отражается и преломляется на её поверхности. Поэтому я решил доработать эту часть, оставить трассировку лучей как есть и переделать все остальное.

Для точности отражений я даже разработал алгоритм, который отражал всё, что есть на экране. В результате получилась похожая на ртуть "вода" со 100% отражением:



Это как раз одна из тех вещей, от которых нужно отказаться, вне зависимости от того, насколько она вам нравится, просто потому, что она не оправдывает затраченных на неё ресурсов.

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



Хотя я знал, что иду в правильном направлении, мне нужно было понять, как сделать пену реалистичной. Например, у моей пены была очень простая структура, а на настоящую пену действуют бурные и непостоянные потоки воды. Я написал простое приложение, чтобы подробнее изучить движение частиц воды в поперечном сечении волны и на её гребне.

После того, как я добавил это в свой шейдер и частично исправил освещение, получилось что-то вроде этого:



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

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

Этот алгоритм позволил нам сглаживать форму волн более естественным образом. Добавление карт окружения с высоким динамическим диапазоном помогло улучшить общее восприятие водной поверхности: оно позволило нам создать очень светлые "сверкающие" эффекты, которые вы видите, когда солнце отражается от волн:



С этого момента оставалось только оптимизировать весь шейдер и добавить пару косметических эффектов. Например, когда солнечные лучи преломляются на поверхности воды, они создают светлые узоры на поверхности песка. Или когда солнечные лучи преломляются на глубине, гребни волн становятся немного светлее (это называется подповерхностным рассеиванием). Добавление способа рассеивания пены на песке сделало береговую линию более интересной. Все эти изменения приблизили нас к той воде, которая сейчас есть в игре:



Сумрачное взморье - самая первая область, в которой оказываются новые игроки. Вода - одна из первых вещей, которую они видят. При создании новой системы воды, мне очень хотелось, чтобы Path of Exile понравилась новым игрокам сразу же, как только они увидят воду.
Сообщение 
Grinding Gear Games
Всё это конечно хорошо,но... На текущий момент это к сожалению-"технология лагов". Первое на что обращают внимание новые игроки это ни разу не вода,а прогрузка города. Самого первого. И она далеко не всегда успешна и удачна.
"
19Grey_Rain83 написал:
Всё это конечно хорошо,но... На текущий момент это к сожалению-"технология лагов". Первое на что обращают внимание новые игроки это ни разу не вода,а прогрузка города. Самого первого. И она далеко не всегда успешна и удачна.


купите нормальный комп.
Интересно.
There is a sure way to die.

Билды - это листья на дереве Path of Exile. C каждым патчем одни опадают, и каждую лигу вырастают другие.
Побольше б такой фигни!

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

Без ума от утёкшего росомахи и последнего СЭДЖЭАЯ СК2 ВоЛ с недоднланными спецэффектами.

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

Я удовлетворён.
Последняя редакция: Slojeniets. Время: 18 дек. 2017 г., 22:58:45
ФПС проседает 20-30
"
19Grey_Rain83 написал:
Всё это конечно хорошо,но... На текущий момент это к сожалению-"технология лагов". Первое на что обращают внимание новые игроки это ни разу не вода,а прогрузка города. Самого первого. И она далеко не всегда успешна и удачна.

Это что за хлам комп нужно иметь, чтобы первый город не прогрузился?
GGG, сделайте уже торговлю автоматизированной-хватит лениться.Блевать тянет с торговли.Скоро кто-нибудь переплюнет выпуск реюзабельного контента каждые 3 месяца/на 2 недели игры.
"
19Grey_Rain83 написал:
Всё это конечно хорошо,но... На текущий момент это к сожалению-"технология лагов". Первое на что обращают внимание новые игроки это ни разу не вода,а прогрузка города. Самого первого. И она далеко не всегда успешна и удачна.


У тебя что, видюха встроенная? Или комп из 90-х годов остался?
На нормальном железе игра не тормозит.
О, о, о... налетели папки с топовыми конфигурациями \0/
Вангуя срачь, минимум на 10 страниц. Пожалуй, я начну.

Почему моя карта на экране логина загружена на 100%, вопрос. На экране логина слишком много частиц, которые грузят карту? Я молчу про пачки мобов. И да, карта у меня гавно! gtx 750 ti, за 13к рублей. Но вот до нее у меня стояла карта еще хуже, gtx 550 ti, и ведь не лагало, хм.... Оптимизация?
Последняя редакция: Dehale. Время: 18 дек. 2017 г., 23:16:27
вода понравилась с первого взгляда, вообще всеми руками и ногами за подобное оживление мира:)
ЧС для форума:
https://ru.pathofexile.com/forum/view-thread/3216210

ヽ(・∀・)ノ

Пожаловаться на запись форума

Пожаловаться на учетную запись:

Тип жалобы

Дополнительная информация