27 апреля 2013 г.

Океан для UDK (шейдер, исходники)

В хагодемонском блоге опубликовал исходники шейдера океана, над которым недавно работал. В основе лежит демка nVidia Island11.

Для демонстрации прикрепляю видео:


И несколько скриншотов:




По результатам сборки шейдера из исходников вы должны увидеть такую сцену:


Описание и "инструкция по применению" лежат по ссылке выше и доступны только на английском. На "статью" это не тянет, переводить не буду. Тем не менее, задавать вопросы и обсуждать можно на русском :)

22 апреля 2013 г.

Корабли: возможный перерыв в обслуживании

В связи с внеплановыми техническими работами форум и сайт проекта Корабли может быть недоступен 23 и 24 апреля.

Поправка: работы были перенесены на 25-26 апреля

19 апреля 2013 г.

Отпусти меня, глубина

На днях поймал себя на том, что всю ночь, в смысле во сне, я занимался работой над морем. И хотя проснувшись я воскликнул "мне было откровение!" и быстро сделал многое, ощущение разбитости осталось. Тем не менее, второй мейлстоун пройден и у нас появилась глубина.


Само по себе добавление прозрачности - вопрос достаточно тривиальный. Проблема в том, что в рамках технологий, используемых Unreal Engine, прозрачные (transluent) материалы не поддерживают тени от динамических объектов. В случае океана это означает, что световая дорожка проходит через корабль, сам корабль не отбрасывает тени и во время вечерних битв никаких вспышек световых эффектов от взрывов на море ждать не приходится.

Ну что ж, очередной обман движка состоялся. Жена начинает шутить, что пора к Эпикам устраиваться.


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

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

15 апреля 2013 г.

UDK Ocean WIP

Работать напрямую с DirectX'ом для программиста шейдеров - привычка достаточно дурная. Точнее так - каверзная. Различные системы координат (мало того, что вертикальная ось в UE3 это Z, дак еще и вся система координат правосторонняя), особенности гамма коррекции движка, генерации мипмапов и прочие радости могут превратить "переход" с голого DX'а на движок в адский забег.

Три дня неотрывной работы, матричной математики и гнусных хаков шейдерной системы анрила, но некий мейлстоун достигнут.


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

В статике выглядит так:


Для слабых машинок используется плоская версия, обладающая вполне неплохим видом и очень шустрой скоростью работы:


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