Серия «Вся наша жизнь спираль»

Вся наша жизнь спираль: квартальное первое

Итак, первый квартал подходит к концу. И я хочу кратенько подвести некие итоги.


Во первых. Система Universal Entity Framework (он же Universal Asset) полностью себя оправдала.

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

Вся наша жизнь спираль: квартальное первое Unreal Engine, Unreal Engine 4, Gamedev, Cold Fusion, Разработка, Инди игра, Длиннопост

Редактор Вселенной с поддержкой Universal Entity Framework

Уже переписан редактор Вселенной (Tier2 в дорожной карте [кто не в курсе ознакомиться можно в тут: https://trello.com/b/Hdqa2t0k/cold-fusion ]), и начата проработка редактора Звездных систем:

Вся наша жизнь спираль: квартальное первое Unreal Engine, Unreal Engine 4, Gamedev, Cold Fusion, Разработка, Инди игра, Длиннопост

пока что это выглядит вот так.


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

Вся наша жизнь спираль: квартальное первое Unreal Engine, Unreal Engine 4, Gamedev, Cold Fusion, Разработка, Инди игра, Длиннопост

нужно выбрать максимальное и минимально кол-во квадов, которые будут отрисовываться на нужном расстоянии

Вся наша жизнь спираль: квартальное первое Unreal Engine, Unreal Engine 4, Gamedev, Cold Fusion, Разработка, Инди игра, Длиннопост

Также нужно выбрать кол-во квадов, которые уйдут в UV. UV Не должны быть слишком мелкими (низкая производительность) и не должны быть слишком крупными (мыло)


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

Показать полностью 4

Вся наша жизнь спираль: Итоги 2023, или те самые полимеры

И снова здравствуйте. С Вами ТехноМаг, и сегодня поговорим о том, что было нами сделано за этот год.

Большую часть времени конечно сожрал откат с Unreal Engine 5 на Unreal Engine 4. Подробнее я об этом писал в своем прошлом посте, поэтому останавливаться на этом не будем.

Вторая часть года была посвящена целиком и полностью редакторному коду. И вот тут появились проблемы, о которых я и хочу поговорить сегодня.


Как я писал ранее неоднократно - структура построения сцены UE (причем что 4, что 5) не подходит для космических сцен. Понимание этого у нас уже было давно и мы уже проделали достаточно большую работу по исправлению этого поведения, как для локального рендера, так и для сетевого взаимодействия сервер-клиент и клиент-сервер. В рамках этой-же проблемы сейчас необходимо еще несколько переработать и доработать игровые ассеты.

Как вы знаете, в Unreal Engine вся игровая логика строится вокруг Актера. Актера можно назвать минимальной игровой логической сущностью. Он-же выступает в качестве носителя сетевой логической сущности и это не изменить без существенного переписывания движка, чего я всеми силами пытаюсь избежать. Поэтому, последние несколько месяцев я работаю над дополнительным носителем игровой логики. Эта сущность (Entity - не путать с Entity в ECS) является по большей части клоном актера с порезанным функционалом. И именно в них мы сейчас упаковываем игровую логику. Актеры же в свою очередь переехали в разряд визуализации (на столько, на сколько это возможно). Такой метод поможет нам условно разделить игровой код на две составляющие (backend и frontend), что хорошо скажется на сетевом взаимодействии, а так-же на на общем производительности системы (будет меньшее кол-во операций на обсчете объекта c полной трансформой, т.к. эти расчеты будут выполнены на бэкенде и закэшированы по возможности).

Таким образом родился новый Фреймворк, который был назван "Universal Asset"). И сейчас я работаю над тем, чтобы внедрить его в уже написанный код, и подружить уже созданный инструментарий для работы с ним.

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

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

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


Работа над дизайном кораблей идет, хоть и медленнее чем хотелось бы. Тем не менее, практически готов полный набор концепт-артов (будет опубликован когда появится полностью в финальном виде).

И еще медленнее идет работа над их 3д исполнением. К сожалению, нам пока не удалось разработать эффективный workflow, который позволит эффективно и в приемлемое время создавать контент для проекта (с учетом IRL). Но мы работаем над этим.

Отдельно, я хочу поблагодарить Александра. Саша, спасибо тебе огромное, что тратишь свое личное время и помогаешь нам с косяками в моделях. Без тебя это все затянулось бы на гораздо большее количество времени.


И на этом, я думаю, пока закончим. И будем надеяться, что первая половина 2024 года будет такой-же продуктивной, как и первая половина 2023 года.

Показать полностью

Вся наша жизнь спираль: 2023, промежуточное

И снова здравствуйте. Хотелось бы поделится небольшим прогрессом над "Холодным Синтезом" за неполные полгода.

Начну с не приятного. Нам пришлось отказаться от использования Unreal Engine 5 и вернуться на старый добрый Unreal Engine 4. Причин этому есть несколько:

Первая, и наверное самая основная, это слишком низкий FPS на низкоорбитальных сценах. FPS поедается как нанитами, так и шейдером поверхности планет, прекрасно чувствующий себя на UE4, но ужасно и медленно работающий в UE5 (подозреваю, что тоже виноваты наниты).

Вторая: странные и плавающие баги с графическими ассетами в наших самописных редакторах, которых, опять-таки, не наблюдается в Unreal Engine 4.

И наконец третья - ужасная скорость компиляции как самого движка, так и игрового кода.

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

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

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

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

Сразу оговорюсь, почему работы предварительные. Да, код для работы с такими сетками уже написан, и по большей части отлажен. Однако, та версия, которую можно найти на github является всего-лишь proof of concept, которая не совсем подходит по функционалу в этом проекте. Мы будем его дописывать и переписывать, добавляя функционал, который требуется конкретно нам под этот конкретный проект.

Напоминаю, что ранее нами была запущена публичная доска на трелло (https://trello.com/b/Hdqa2t0k/cold-fusion), где вы можете наблюдать над чем конкретно мы сейчас работаем, и что будет реализовано в ближайшем будущем.

Показать полностью

Вся наша жизнь спираль: Итоги 2022

Итак, 2022 год был не простым. И больше не будем на эту тему )

Чем же я могу поделится на данный момент, и чего стоит ожидать в 2023.

Пост достаточно небольшой, без скриншотов и видео.

Итак, что-же было сделано:

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

2) Тоже самое касается планет. Редактор в работе.

3) Система шардинга с Node.JS, по ряду причин, перебралась на питон.

4) Начата работа по моделированию модульного экстерьера станций.

5) Подготовлены материалы для начала работы над модульной системой кораблей.

6) Большая часть базового ассет и часть игрового кода была вынесена в т.н. SDK плагин, который можно будет бесплатно поставить на бинарную версию Unreal Engine 5 и получить полный набор для создания дополнений и модов (в том числе и на стороне C++).

7) Была распланирована разработка вплоть до 2026 года включительно. С картой планов можно ознакомится тут: https://trello.com/b/Hdqa2t0k/cold-fusion

8) Команда разработки была несколько расширена.

Теперь кратенько о планах на 2023.

1) Доделать модуль построения мира до состояния "Орбита". И создать через него первую полноценную звезду. У звезды первую полноценную планету, а вокруг планеты закрутить первую игровую локацию.

2) Доделать до состояния "можно потрогать" первый псевдо модульный корабль (имеется ввиду доделать модульную систему, но пока без возможности вносить в нее изменения по ходу игры).

3) Сделать первую систему вооружения.

4) Сделать отрисовку кокпита и сам кокпит (если успеем, есть сомнения).

5) Запустить тестовый сервер и пустить первых игроков в эту локацию. (скорее всего сам запуск будет перенесен на 2024 год)

Показать полностью

Вся наша жизнь спираль: Итоги 2021

Год подходит к концу  и, т.к. в этом месяце у меня, скорее всего, не получится заниматься проектом, хочу подвести определенные итоги.


Что-же было сделано за 2021 год, и что стоит ожидать в 2022ом.


1) Проработан и почти доведен до ума модуль построения Мира (статьи из серии Синтез субатомных частиц). Тем не менее, в будущем году я продолжу работу над ним, ибо необходимо доработать несколько узких моментов и сделать связь с сетевым модулем.


2) Доведен до стадии пред релиза рендер планет. Самое главное, исправлен очень противный баг при рендере в Dx12, который, по до сих пор не понятным для меня причинам, давал артефакты на неровностях ландшафта.

(@MrMSE, вопрос со светом все еще открыт, т.к. встроенный Атмосферный Скаттеринг пока не удалось заставить работать так, чтобы можно было сделать "правильный" терминатор)


3) Начата работа над системой шардинга и системой быстрого развертывания сервера (система будет доступна в OpenSource. Пишется на Node.JS).


4) Подготовлены материалы для рефакторинга системы импульсной физики кораблей, для возможности работы через мультидрединг (сейчас сильно зависит от FPS, что сильно сказывается на плавности геймплея)


5) Готовятся материалы для начала работ над конструктором кораблей и станции (пока в концепции)


6) Готовится материал для начала работ над интерьерами станций и АТС.


7) Готовятся материалы для более глубокой оптимизации 3Д туманностей, из-за слишком плохой производительности на видеокартах до RTX эры.


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

Показать полностью

Вся наша жизнь спираль: Синтез субатомных частиц часть 2

В прошлом посте (Вся наша жизнь спираль: Синтез субатомных частиц) мы кратенько рассмотрели сложности работы с float и рендер туманностей.

Сегодня мы рассмотрим планеты и построение сцены относительно игрока.


Начнем с простого.

Свет.

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

Их всего 3:

- Point Light - свет излучается из точки по некому радиусу с затуханием

- Spot Light - или прожектор. Источник излучается из точки по конусу, опять таки с затуханием

- Direction Light - самый простой источник света. Свет идет по направлению, без источника как такового.


Логично предположить, что для звезды лучше всего подойдет последний. Звезда не точка, это огромная сфера, каждая точка которой излучает свет.

Хорошо, с этим определились. Но, Direction Light светит только в одном направлении, а звезда во все сразу. Это проблема, но решается достаточно просто. Мы просто берем, и привязываем направление света на позицию игрока. Тогда получится, что свет всегда идет от звезды к игроку.


А как быть с планетами и прочими макро объектами? Ведь если игрок сместится, то также сместится освещенная часть планеты.

Тут нам помогут уже простейшие шейдера.


Первым делом исключим наши объекты из списка объектов, на которые влияет источник света (иными словами сделаем их Unlit). А дальше, возьмем позицию источника света, посчитаем вектор направления к планете и возьмем dot product от каждой нормали вершины планеты. Вуаля, мы получим маску, которая будет эмулировать этот самый DirectionLight

Вся наша жизнь спираль: Синтез субатомных частиц часть 2 Unrealengine 4, Gamedev, Lima, Длиннопост, Unreal Engine 4

Вторая проблема, которая вытекает из первой - тени. Большие объекты, особенно если у них есть кольца - отбрасывают на них тень, которая

а) Привязана к источнику света

б) Имеет мерзкую привычку глючить на больших расстояниях

Снова обращаемся к шейдеру.

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

Делается это достаточно просто (хотя тут ноды лучше не использовать)

/*
* INPUT:
* LightLocationWS Light Position in WorldSpace
* LightSourceRadius Light Radius
* ParentBodyLocationWS Parent Body (Shadow Caster) location in WorldSpace
* ParentBodyRadius Parent Body Radius
* WorldPosition AbsoluteWorldPositionWS
* VertexNormal VertexNormalWS
*/
MaterialFloat3 LL = LightLocationWS;
MaterialFloat3 PL = ParentBodyLocationWS;
MaterialFloat LSR = LightSourceRadius;
MaterialFloat PBR = ParentBodyRadius;
MaterialFloat3 rc = WorldPosition - PL;
MaterialFloat c = dot(rc, rc) - (PBR*PBR);
MaterialFloat b = dot(normalize(LL - PL), rc);
MaterialFloat d = b*b - c;
MaterialFloat t = -b - sqrt(abs(d));
MaterialFloat st = step(0, min(t,d));
MaterialFloat shadow = lerp(-1, t, st);
return shadow;
В результате получится вот такой эффект, который не зависит от расстояния и от размера объекта
Вся наша жизнь спираль: Синтез субатомных частиц часть 2 Unrealengine 4, Gamedev, Lima, Длиннопост, Unreal Engine 4
Вся наша жизнь спираль: Синтез субатомных частиц часть 2 Unrealengine 4, Gamedev, Lima, Длиннопост, Unreal Engine 4

Со светом разобрались, теперь перейдем непосредственно к построению сцены.

В прошлом посте я рассказывал о пересчете позиций и размеров объектов через их угловой размер. Используем это, приняв то, что игрок будет находится всегда в координате [0,0,0], и то, что нам известно его физическое положение в мире.


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


В решении этой проблемы нам поможет инструмент, под названием Custom Depth Pass и CustomDepth Stencil Buffer (CustomDepth Stencil Write Mask и CustomDepth Stencil Value)


Это бит поле поможет нам отсортировать объекты таким образом, чтобы объекты правильно накладывались друг на друга.


Самый простой вариант (но не самый корректный) отсортировать объекты через дополнительную фазу Translucent (через приоритеты + через стенсил)

Вся наша жизнь спираль: Синтез субатомных частиц часть 2 Unrealengine 4, Gamedev, Lima, Длиннопост, Unreal Engine 4

где CheckDepth это CustomNode, которая имеет следующее внутри себя

uint SceneDepth = Depth;
return SceneDepth > 1 ? 0 : 1;
SceneDepth тут это как раз таки то самое CustomDepth Stencil Value, которое можно задать свое для каждого объекта в отдельности. Если объекты пересекаются, то значения буфера складываются. Например, если у нас пересеклись объекты со значением 1 и 2, то на выходе будет 3. Тогда, в материале объекта, со значением 1, если полученное число будет больше 1, то нам нужно скрыть этот объект.


Почему именно такие цифры.

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

Следовательно цифры, которые мы можем использовать принадлежат степени двойки, т.е.

1 2 4 8 16 ну итд


1, или 0b00000001 - это самый дальний объект (skycube), который должен быть скрыт, если его пересекает любой другой объект, следовательно если на него приходит любое другое значение, кроме как 1, то мы его скрываем.

Следующий объект 2 (0b00000010). Он не должен быть скрыт, когда к нему приходит значение 3 (собственное значение 2 + 1 от старкуба), но должен быть скрыт, когда приходит значение 4, ну итд.

При этом, если пересекаются два одинаковых объекта, то сокрытие одного или другого объекта будет разруливать не стенсил, но Translucency Sort Priority, который должен зависеть от дальности этих объектов.


У игроков, т.к. мы не изменяем их позиции и не пересчитываем их размер, мы укажем 0b10000000 для стенсил буфера, и таким образом они всегда будут рисоваться перед всеми остальными объектами. Сравнивать их дополнительно не нужно, т.к. если они должны быть ЗА объектом, то они уже давно вышли за расстояние, на котором их может быть видно, поэтому этот случай мы просто не рассматриваем.

Ну а теперь самое вкусное на сегодня - планеты

Всем известно, что когда нужно что-то нарисовать, то у меня лапки. Поэтому я сразу не рассматривал идею с рисованием текстур планет и сразу перешел к генерации из шума.

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

Пришлось попотеть - написать свою, более гибкую функцию генерации шума, придумать, как прорисовывать детальки, и как передавать цвет на все это дело.

В результате, получилось следующее:

Планета рисуется через функцию слоев материала (часть функционала для рисования ландшафта в UE4). Задается общий шум для ландшафта, а потом отдельными слоями дорисовываются детали: каньоны, горы, итд.

Цвет планеты задается через Атлас, который содержит кривую, которая в свою очередь привязана к градации серого цвета пикселя.

Из полученного результата мы генерируем нормаль и все это применяем на модель света, описанную выше. В результате получаем нечто, похожее на это:

Вся наша жизнь спираль: Синтез субатомных частиц часть 2 Unrealengine 4, Gamedev, Lima, Длиннопост, Unreal Engine 4
Вся наша жизнь спираль: Синтез субатомных частиц часть 2 Unrealengine 4, Gamedev, Lima, Длиннопост, Unreal Engine 4

и в довершение всего, применим к этому SkyAtmosphere - стандартный компонент визуализации UE4 (который наконец доделали в 4.26)

Вся наша жизнь спираль: Синтез субатомных частиц часть 2 Unrealengine 4, Gamedev, Lima, Длиннопост, Unreal Engine 4
Вся наша жизнь спираль: Синтез субатомных частиц часть 2 Unrealengine 4, Gamedev, Lima, Длиннопост, Unreal Engine 4

Здесь осталась одна нерешенная проблема. Изначально, для наложения деталей я выбрал не верный подход через 6planar mapping. Для слоя можно выбрать одну из 6ти сторон планеты, но не более того. В ближайшее время это будет заменено на проекцию по произвольному вектору, что позволит добавить более мелкие детали, и сделать более незаметным то, что поверхность планеты на самом деле двухмерна.

И на этом пока что все. До связи до следующего раза.

Показать полностью 8

Вся наша жизнь спираль: Синтез субатомных частиц

Прошел год с моего последнего поста, пора пилить следующий.

Сегодня снова поговорим о сети и об организации мира Синтеза.


Главное изменение сетевой модели, который получил Синтез - это полный авторити сервер.

Тем не менее, проблемы, которые я описывал ранее в L.I.M.A., никуда не делись, поэтому появился другой модуль, позволяющий обсчитывать сразу несколько "карт" и сливать их в одну карту, с репликой, по необходимости, на клиенты. Модуль имеет открытый исходный код и может быть найден тут: https://github.com/Delta-Proxima-Team/UE4-Module-RelatedWorl...

Если описать простым языком, то он работает по принципу инстанцев в небезызвестной Elite: Dangerous, с той лишь разницей, что можно передавать информацию сразу с нескольких инстанцев в единое мировое пространство клиента.


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


Мир Синтеза, как и в L.I.M.A. бесшовный. При полетах игрок не видит никаких загрузок. Перелет между системами выглядит плавным, между звездными системами можно встретить всякие интересности, или приключения на свою задницу. Это частично достигается новым сетевым модулем, а частично системой представления удаленных объектов. Она основана на методе пересчета размера небесных тел через их угловой размер. Об этом немного поподробнее.


Подсчет углового размера любого небесного тела можно представить вот таким-вот образом:

Вся наша жизнь спираль: Синтез субатомных частиц Unreal Engine 4, Gamedev, Lima, Длиннопост

, где D - расстояния от наблюдателя до границы объекта, а d - диаметр этого объекта.

Если расстояние D известно, то можно через обратное преобразование получить его радиус.

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

В ходе нехитрых преобразований, мы получим вот такую вот формулу:

Вся наша жизнь спираль: Синтез субатомных частиц Unreal Engine 4, Gamedev, Lima, Длиннопост

В коде, конечно-же, формула будет выглядеть как VisibleDistance * (RealRadius/RealDistance), т.к. отношение RealRadius к RealDistance безразмерный коэффициент. Это была первая проблема.


Вторая проблема это float и разница в единицах измерений (от сантиметра до светового года).

Как известно, если говорить, о целой части float, то она дает достаточную точность для целых чисел, значение которых можно уложить в 3 байта. Если дать больше конкретики, то это число 16 777 215 (16,7 км в единицах анрила). Дальше начинаются проблемы с точностью. Для обхода этой проблемы, и помня, как была решена проблема с размерами объектов, было принято решение делать "Continuous calculation". В такой системе, при подаче некоторого числа на вход, необходимо так-же указать его единицы, и, если оно выше или ниже некоего предела оно будет последовательно переведено в более подходящее для этого числа единицы (пример: если мы дадим на вход 100 000 см. то сначала будет выполнен перевод в 1 000 м, а потом в 1 км ). Таким образом, какое бы расстояние мы бы не передали, то на выходе, оно всегда будет занимать меньше трех байт. Погрешности, конечно-же, никуда не делись, но они нивелируются по мере уменьшения масштаба вычислений. Условно, чем ближе наблюдатель к объекту, тем меньше погрешность. Ну и соответственно, чем дальше, тем погрешность больше, но из-за большого расстояния - глазу не заметно и она не имеет тенденции к накоплению.


Третья проблема - туманности. Т.к. космос бесшовный, то они должны быть 3д. Как нарисовать 3д туманность? Эксперименты показали, что метод Density RayMarcher подойдет лучше всего.

Вся наша жизнь спираль: Синтез субатомных частиц Unreal Engine 4, Gamedev, Lima, Длиннопост
Вся наша жизнь спираль: Синтез субатомных частиц Unreal Engine 4, Gamedev, Lima, Длиннопост

(полученную из фрактала текстуру следует подчистить от артефактов)

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


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


Как бонус: один из ранних рендеров безатмосферных планет.

Вся наша жизнь спираль: Синтез субатомных частиц Unreal Engine 4, Gamedev, Lima, Длиннопост
Показать полностью 5

Вы хотите головоломок?

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

РАЗМЯТЬ МОЗГ

Вся наша жизнь спираль: от стазиса к синтезу

Это будет весьма небольшой пост. За последние 9 месяцев много всякого произошло, и проектом практически не было времени заниматься. Однако много думали. И пришло понимание того, что времени и ресурсов все это сделать как мы хотим и отладить, на данный момент нам не хватит ни при каких условиях.


В результате было принято решение отправить проект в стазис, взять часть модулей, переработать и использовать в другом, более простом проекте, который позволит их довести их до ума, а также покажет: будет ли это все работать так, как мы изначально задумывали в L.I.M.A.

Так на свет появился проект под названием "Холодный синтез" (Cold Fusion).


Из готового мы полностью выбросили все слои от L0 до L3, оставив только лишь упрощенную версию генератора поверхности планет, также в этой игре не будет конструктора кораблей и процедурно развивающегося сюжета (последний существует до сих пор только в концепции).

В общем выкинули, или упростили практически все (но не все). Летная и сетевая модели перекочевали практически без изменений. Core геймплей, боевая, экономическая и политическая модели также остались практически без изменений (я о них еще не рассказывал, но обязательно расскажу), как и много других уже готовых и не очень вещей.


Подробности о проекте, сложностях и принятых решениях (и костылях) будут также выходить под заголовком "спирали", т.к. тематика очень близкая, но с дополнительным тегом #ColdFusion, а так-же в отдельном чате нашего дискорд канала: https://discord.gg/aNfW5FQ в том-же формате, что и самый первый пост.


Ближайший пост будет посвящен созданию планет, их поверхностям, и как это работает в сетевом окружении, а так-же более подробно расскажу о Вселенной Синтеза.

Показать полностью
Отличная работа, все прочитано!