Dreaman Dreaman

TheDarkestRed,

Отлично! Всё прям как в проектах AAA-класса ;)

Dreaman Dreaman

В игре "Mental State" на космической станции появилось новое просторное и довольно уютное помещение :)

...
win20082007 win20082007

Наконец то закончил работу над первым боссом, осталось сделать еще 7 :) Если кого заинтересовал проект со странными существами - милости прошу к нашему шалашу https://vk.com/another_arts

TheDarkestRed TheDarkestRed

Concept art нового врага для The Darkest Red 🎮 🧟 👨‍🎨

...
kirsakshlil kirsakshlil

Ох, давненько я не заходил сюда. С Новым Годом всех! Надеюсь в новом году работа попрёт!

Dreaman Dreaman

Jusper,

Спасибо! Приятно слышать :)

id230694559 id230694559

Хорошая подборка книг по разработке игр https://iunity3d.ru/top-luchshih-knig-po-razrabotke-igr/

Jusper Jusper

Dreaman, с наступившим Новым годом! Приятно следить за твоим прогрессом :)

Dreaman Dreaman

Присоединяюсь к поздравлениям! Отдельное спасибо за упоминание :)
Всех поздравляю с уже наступившим Новым Годом!

Jusper Jusper

Taske,

LOD-ы нет вроде, не делали.

Taske Taske

Возможно глупый вопрос, но я пока только вникаю в юнити.

Лоды при этом методе у мешей сохраняются? Какие объекты выгоднее всего таким образом объединять?

Jusper Jusper

И вас с наступающим, друзья.
Успехов!

TheDarkestRed TheDarkestRed

Новый лесной монстр для The Darkest Red 🎮 🧟 👹
https://vk.com/the_darkestred

TheDarkestRed TheDarkestRed

Тестируем новую механику захвата врагов 🎮🧟🤺

Jusper Jusper

Ato_Ome, скетч без контекста игры выглядит хорошо, стильно.
в игре сразу будут проблемы: так как это камера сверху имеет смысл прикидывать скетч сразу якобы сверху с игровой камеры. Плечи у этого упыря мелковаты...

Ato_Ome Ato_Ome

Скетч-арт от художницы для нашего проекта, упырь.

alexprey alexprey

ehnaton, никто его не обижает, у него просто стиль похожий

Логотип проекта Unity

Делаем шейдер для речной воды в Unity

Делаем шейдер для речной воды в Unity

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

Так результат работы шейдера выглядит в игре

Сначала нам нужно определить форму волн. Берем normal map волн и поворачиваем в каждой точке в направлении, определяемом картой течений, которая задается тоже как normal map. В результате получим полную карту нормалей для всей поверхности реки:

Делаем шейдер для речной воды в Unity — Unity — DevTribe: инди-игры, разработка, сообщество (Unity, статьи, шейдер)

Добавляем движение: смещаем волны по X в зависимости от текущего времени:

Делаем шейдер для речной воды в Unity — Unity — DevTribe: инди-игры, разработка, сообщество (Unity, статьи, шейдер)

К постоянным волнам от течения реки добавляем динамические волны от объектов в игре, взаимодействующих с водой (таких как лодки и их весла, плещущиеся рыбы и прочее). Для этого во время игры на серой текстуре каждый фрейм рисуем карту высот: осветляем там, где волны выше общего уровня, и затемняем там, где ниже. Затем в шейдере считаем нормали этой карты высот и складываем их с нормалями из предыдущего пункта:

Делаем шейдер для речной воды в Unity — Unity — DevTribe: инди-игры, разработка, сообщество (Unity, статьи, шейдер)

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

Делаем шейдер для речной воды в Unity — Unity — DevTribe: инди-игры, разработка, сообщество (Unity, статьи, шейдер)

Вода искажает то, что находится за ней, в зависимости от толщины слоя. Используем GrabPass, чтобы получить текстуру с фоновым изображением, и сместим итоговое изображение в зависимости от карты глубины, задаваемой еще одной текстурой на входе шейдера:

Делаем шейдер для речной воды в Unity — Unity — DevTribe: инди-игры, разработка, сообщество (Unity, статьи, шейдер)

Волны тоже влияют на толщину слоя воды в каждой отдельной точке, так что карту нормалей из предыдущих пунктов мы также учитываем для этого эффекта:

Делаем шейдер для речной воды в Unity — Unity — DevTribe: инди-игры, разработка, сообщество (Unity, статьи, шейдер)

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

Делаем шейдер для речной воды в Unity — Unity — DevTribe: инди-игры, разработка, сообщество (Unity, статьи, шейдер)

Бонус: разберем параметры шейдера

Делаем шейдер для речной воды в Unity — Unity — DevTribe: инди-игры, разработка, сообщество (Unity, статьи, шейдер)
  • Stream Matrix: Карта нормалей, определяющая направление течения.
  • Depth Map: Карта глубины реки.
  • Water Texture: Текстура, определяющая собственный цвет реки.
  • Waves Normal Map: Карта нормалей волн.
  • Waves Overlay: Карта высот динамических волн (в игровой сцене это RenderTexture).
  • Skysphere Texture: Текстура неба.
  • Segments: Количество сегментов, на которые разбивается область, в каждом сегменте текстура волн поворачивается независимо.
  • Blend Threshold: Определяет гладкость смешивания соседних сегментов.
  • Speed: Скорость течения.
  • Waves Reflection Scale: Насколько сильно волны искажают отражение неба.
  • Camera Reflection Scale: Масштаб неба относительно изображения на экране.
  • Depth Scale: Насколько сильно глубина влияет на искажение дна.
  • Waves Height Scale: Насколько сильно волны влияют на искажение дна.
  • Min Share of Bottom: Насколько хорошо дно видно на максимальной глубине, этот параметр вместе с глубиной в конкретной точке влияет на долю дна в окончательном результате.
  • Sky/Water: Взаимные доли отражения неба и собственного цвета воды в окончательном результате.

Вступайте в наше сообщество, следите за новостями и делитесь нашими статьями с друзьями!

Смотрите также:


Комментарии



Очень любопытно!
Вот только меня интересует такой вопрос: а как вы складываете карту нормалей с картой высот? нормали это все таки вектор направления, а не высота. Было бы любопытно взглянуть на идею преобразования нормали в высоту.

И я правильно понимаю, что это происходит для всего экрана и карта течения и остальные генерируются на ходу? Было бы интересно почитать тоже по этому поводу

Справка