Gamedev Valery Arugin
6 750

Как я планету в Unity генерировал

Это вторая часть истории о том, как разрабатывалась игра «How do you like it, Elon Musk?», в которой я оставлю счастливые озарения позади и поговорю о страданиях с Unity, которые незамедлительно появляются, когда ты хочешь создать на движке чуть больше, чем просто 2D платформер.

В закладки
Аудио
В одном шаге от No Man's Sky каким он был на релизе

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

Как всегда, в Unity не было встроенных инструментов для решения этой задачи. Terrain — единственный инструмент, который похож на то, что мне нужно, но он способен генерировать только плоские поверхности без возможности поворота, безнадежно устарел (даже с учетом последних обновлений в версии 2018.3), никак не расширялся, и к его исходникам невозможно было бесплатно получить доступ. Поэтому нужно было срочно задействовать свои навыки, корнями уходящие в университетские годы.

Поиск решений

Одна из немногих вещей, которой учит тебя университет — это максимальное уменьшение объема затраченных усилий на единицу задания, путем основания своей работы на базе того, что было сделано до тебя. Иными словами, зачем писать записку к курсовой с нуля, если можно найти готовую у ребят старше курсом и переделать лишь отличающиеся части? Этот принцип в менее искаженном виде отлично работает для программирования. Для любой поставленной задачи есть 99%-я вероятность, что ее решили до тебя и более умные чем ты люди и 33%-я вероятность, что они рассказали об этом в блоге, на GDC или даже выложили исходники. С учетом количества подводных камней, которые каждая задача в себе таит, любой поиск информации о ней будет себя окупать.

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

Первым стоит выделить Proland и его порт на Unity. Красиво, масштабно, с использованием физически корректных данных. Это казалось именно тем, что нужно, однако я наткнулся на две серьезные проблемы. Во-первых, лицензия (на момент моих поисков) не позволяла использовать Proland и все его производные в коммерческих продуктах без дополнительных согласований. Конечно, можно было пообщаться с французскими коллегами, продать свой холодильник и диван и оплатить стоимость неисключительной лицензии, если бы не вторая загвоздка. Она заключалась в том, что портирование исходников с C++, который я знал на уровне университетских лабораторных работ, заняло бы у меня больше времени, чем написание аналогичного проекта с нуля на C #.

Работы над библиотекой закончились в 2013 году, но ее картинка впечатляет до сих пор

А готовый порт, к сожалению, базировался на одном огромном костыле. Проблема заключалась в том, что Proland основан на системе координат, в которой ось Z направлена вверх, а в Unity вверх направлена ось Y. И автор порта разумно упростил себе жизнь, сохранив оригинальное направление осей и просто заменив MVP матрицу у камеры. В последней версии Unity это ломалось и изображение рендерилось зеркально-перевернутым. Даже если на это закрыть глаза, такой костыль все равно неприемлем: работать, когда у тебя половина проекта основана на другой системе координат будет невозможно.

Просто возьми, поменяй оси и пересчитай все матрицы, делов-то.

читатель с научной степенью в линейной алгебре

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

Следующим я нашел SpaceW. Все еще красиво, с намеком на расширяемость в полноценную солнечную систему. Этот проект запустился и даже работал на последней версии Unity без нареканий, но автор признался, что некоторые компоненты все также используют инвертированные оси и куски Proland, другие взяты из Space Engine, в коде много черной магии, экспериментальных фич, и вообще всё это не готово для использования в играх. По моим ощущениям кода и функционала там было еще больше, чем в Proland. Жаль, что автор прекратил активную разработку в 2017 году.

В проекте даже работали солнечные затмения

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

Выглядит в лучших традициях Unity, но главное ведь то, что внутри

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

В магазине ассетов Unity дела обстояли еще хуже, да и качество продуктов в нем по медиане еще ниже, чем качество самых дешевых инди-игр в Стиме, поэтому я смирился, что готовых «в один клик» решений мне не найти и перешел к поискам теоретического материала.

Исследование предметной области

Информации о том, как генерировать планеты в интернете попадалось много, однако она была размазана тонким слоем между форумами-мамонтами вроде gamedev.ru, туториалами на Ютубе, статьями в личных блогах и неполными ответами на Stackoverflow. Всю информацию я фильтровал через свой набор требований, выжимал из нее воду и шутки авторов, а сухой остаток складывал в общую копилку до тех пор, пока масса знаний не достигла критической и позволила мне приступить к работе.

Весь «список литературы» приводить здесь нет смысла, но я остановлюсь на трех ссылках. Для начинающих свой путь по чудесной преисподней Unity советую серию видео туториалов Себастьяна Лига, одного из ведущих графических разработчиков движка. Он опустил некоторые сложные детали, вроде динамического LOD, однако базовое представление о процедурной генерации получите.

Любителям хардкора и тем, кто не воспринимает информацию в разжёванном виде, можно обратить внимание на «старую», но от этого не менее ценную статью «Планетарный ландшафт». Статья подкреплена формулами, примерами кода на C++ и шейдерами на HLSL (или GLSL? они все на одно лицо) и является наиболее полным руководством к действию из тех, что я видел. Однако здесь нужно включать голову и понимать, как подходить к материалу через призму имеющихся инструментов Unity. Если, к примеру, кинуться реализовывать отсечение по пирамиде видимости из статьи, то можно потратить большое количество времени впустую.

И, напоследок, классика жизни, хрестоматия космических полетов и Святой Грааль безупречной физической симуляции — выступление на GDC разработчиков Kerbal Space Program. Генерации планет там посвящена всего четверть видео, да и в целом описаны общие концепции без конкретики, но слушать интересно и можно избежать пары грабель. Рекомендую.

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

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

Перечитав список требований, я на секунду задумался, а не вернуться ли к разработке убийцы Масс Эффекта, но пути назад уже не было. Скрипя зубами, я выписал список задач, с которыми мне предстояло столкнуться, и он удивительным образом оказался не таким устрашающим. И мы пройдемся по каждой задаче и моим вариантом ее решения в следующей статье на DTF.

Напоследок еще раз оставлю вам страницу игры в Стиме и ссылки на каналы в Телеграме и Дискорде. До скорой встречи.

#unity #long

Материал опубликован пользователем. Нажмите кнопку «Написать», чтобы поделиться мнением или рассказать о своём проекте.

Написать
{ "author_name": "Valery Arugin", "author_type": "self", "tags": ["unity","long"], "comments": 92, "likes": 149, "favorites": 134, "is_advertisement": false, "subsite_label": "gamedev", "id": 38082, "is_wide": false, "is_ugc": true, "date": "Tue, 29 Jan 2019 21:00:03 +0300" }
{ "id": 38082, "author_id": 72973, "diff_limit": 1000, "urls": {"diff":"\/comments\/38082\/get","add":"\/comments\/38082\/add","edit":"\/comments\/edit","remove":"\/admin\/comments\/remove","pin":"\/admin\/comments\/pin","get4edit":"\/comments\/get4edit","complain":"\/comments\/complain","load_more":"\/comments\/loading\/38082"}, "attach_limit": 2, "max_comment_text_length": 5000, "subsite_id": 64954 }

92 комментария 92 комм.

Популярные

По порядку

Написать комментарий...
18

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

Ответить
25

То ли еще будет!
Как автор сгенерит планету, появится статья "Как я планету вертел".

Ответить
1

На чём? Это важно!

Ответить
6

На оси Архимеда, ёпта...

Ответить
0

Зачтено, окей.

Ответить
0

По этому вопросу, ящетаю, следует проконсультироваться у завсегдатаев подсайта про шаурму

Ответить
1

Я завсегдатай там. Но даже мне требуется уточнение!

Ответить
6

На самом деле я готов уже было пуститься во все тяжкие и начать вбрасывать куски кода, но мне было не понятно, приветствуется ли подобный формат и интересна ли тема аудитории. + Статья уже стала приближаться к критическому объему, после которого ее никто не читает.

Ответить
23

Охх... вброс кода - это опасное занятие. Будь готов к олимпиарду комментариев вроде "кто так пишет в 2к19", "говнокооод" и аналогичным :)

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

Ответить
4

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

А критический объем легко разбавляется иллюстрациями.

Ответить
4

Вот это было бы полезно. Сам PCG занимаюсь иногда, а большинство статей обычно заканчиваются на симплекс-шуме, что итак очевидно уже лет 30 как, а заковырок там много, если углубляться. Например, даже великая Spore в итоге отказалась от симуляции бимов http://oceanquigley.blogspot.com/2009/04/spores-procedural-terrain-texturing.html?m=1 и при этом метода, описанная там с картой высот, полученной просто градиентным шумом не сработает - слишком уж сильно гладкие у Кена Перлина функции получаются - эти карты еще придется напильником в виде эрозий или даже симуляций тектоник пройтись (Amit как раз в очередном туториал-забеге этим занимался) шоб получилось все хорошо как в статье.

А у меня, например, пока недостижимый грааль - как раскрашивать все текстуры, вот все-все-все, во всем МИРЕ с помощью 3.5 цветов

Ответить
0

А можно цвета инвертнуть, уже 7 цветов получится, а мир в семи цветах уже авторский неповторимый стиль.

Ответить
1

Вот кстати http://conradsly.xyz/project-1-planet-generator/
Наивный подход подразумевает, что для каждого типа пданет будет составлен свой пресет цветов, однако же можно и сделать более универсально

Ответить
0

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

Ответить
1

У них да. Всего 5 цветов, а дальше хитро смешиваем от условий среды. Очень хитро.

Ответить
0

Да там вообще много чего можно с ними с ними сделать. Вопрос только как и что именно :-)
В той же Spore всего 6 цветов + градации серего используется: 3 основных цвета, 3 для деталей. Потом они по всякому смешиваются.
Находил генератор планет (без сорцов конечно же) где используется только 5 базовых цветов, которые смешиваются в зависимости от температуры, влажности, атмосферного давления, так что можно получить весь спектр планет (кроме газовых гигантов, но газовые гиганты все же не совсем уже планеты).

Ответить
3

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

Ответить
0

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

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

Ответить
2

Да. Надо бы всё-таки "What about this, Elon Musk?"

Ответить
1

Не, надо вот так:

How do you like THAT, Elon Musk? (а не IT)

Ответить
–14

Иccледование предметной области, мля XD ты диплом сел писать, или статью на dtf? Тут метро в eps выпускают, и mudfish обасрались XDD

Ответить
3

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

Автор разочаровал внезапным окончанием, я тока успел разогреться в прокрастинации. Эх, придется возвращаться в Юню и ковыряться дальше со своим бесконечным говном.

Ответить
3

Автор разочаровал внезапным окончанием, я тока успел разогреться в прокрастинации. Эх, придется возвращаться в Юню и ковыряться дальше со своим бесконечным говном.

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

Ответить
6

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

Ответить
4

Чтобы заинтриговать читателей, нужно всего лишь п...

Ответить
0

Аккуратней, тут работает сн...

Ответить
0

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

Ответить
3

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

Ответить
0

те например если вам нужно будет как-то влиять на рендер или переопределять какие-то такие штуки/делать оч необычные эффекта - то сделать это относительно просто(в плане интеграции) и удобно?
и нетолстых проектов).

с удивлением узнал что побег из таркова делают на юнити, так что последняя фраза спорная)

Ответить
0

Ну те кто делают тарков говорят что они упираются в движок.

Ответить
0

да? а не подскажите где про это почитать можно? очень интересуют подробного рода материалы

Ответить
0

Говорил Никита Буянов(главный у них) в подкасте у Галёнкина, 209 выпуск.

Ответить
1

спасибо

Ответить
0

Если вы хотите вбуриться в рендер, как раз сейчас Юнитеки заняты кардинально новым подходом к графическому пайплайну. Есть (пока еще в preview состоянии) lightweight и hd библиотеки, через которые можно на свое усмотрение жонглировать всеми аспектами рендера. Но вряд ли, конечно, это будет относительно просто. :)

К либам идет в довесок идет нодовый редактор шейдеров Shadergraph. Он точно поможет делать необычные эффекты без кодописанины.

Ответить
0

Они купили часть исходников, но даже так очень тяжело даётся из-за "особенностей".

Ответить
1

Нет, если говорить конкретно про эту задачу. К примеру, самая большая боль космических симуляторов — floating point precision будет присутствовать во всех движках, так как. это скорее проблема современных видеокарт, которые всё считают во флоатах. Рендеринг пайплайн открывает большие возможности по написанию своего рендера. Ну а орбитальную механику в любом случае придется реализовывать самому.

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

Ответить
1

Ну скорее не проблемы. Врядли вы найдёте геймера который выложил 20 килобаксов за Теслу, которая в даблы умеет, тем более у неё даже виделвыхода нет...
И вот как раз на эту тему я и хотел дать совет, хз на какой стадии у вас проект, но вы там написали что Земля имеет радиус овердохрена километров - вот реально, лучше отказаться от реальных масштабов пока не поздно...512-километровоц [s] ланеты[/s] солнечной системы хватит каждому, иначе удрюкайтесь в синглах с ошибками округление. В ассет сторе правда были ассеты для решения это проблемы, но на овердохрена километрах я там тоже Кракена находил (собственно в KSP они из-за синглов и вылезают, а там масштабы раз в 100 меньше реальных)

Ответить
1

И да, забыл, [zanuda mode on] Флоты - то бишь floating-point format - это просто циферка с плавающей запятой, единственный инструмент делать точные вычисления в IRL. Есть еще всякие fixed-point number (с коими мне много приходилось работать) - там количество разрядов после запятой фиксированное и это не от легкой жизни. Собственно на этом все (ну есть еще гибридные форматы с "полуплавающей" запятой и прочие извращения). На fixed-point делать космический симулятор будет совсем уж тяжко, хотя раньше как-то справлялись :-)

Касательно же Unity, а также UE, PhysX и прочего вместе с геймерскими видеокартами - все они заточены под single precision, который обычно так и обзывают single, но в C# почему-то обозвали float, хотя тип double вообще-то тоже float, просто double precision. Впрочем если капнуть глубже в MSDN, то первый тип это структура System.Single, а второй типа - это структура System.Double. Ну вот сингл-прецижн - это точность в 7 циферек https://docs.microsoft.com/ru-ru/dotnet/csharp/language-reference/keywords/float , так что Солнечную систему с точностью до 1 метра насимулячить не получиться и проблемы начнутся уже на уровне Земли (Нептун находится на расстоянии в 4500 млн. километров от Солнца). И в даблах кстати тоже проблемы будут, но не сразу - там всего 15-17 значимых разрядов https://docs.microsoft.com/ru-ru/dotnet/csharp/language-reference/keywords/double что уже правда заметно лучше. Есть еще 128- и 256-битные флоты, вот первые меня таки выручали как-то, там уже 30+ значимых разрядов, но это уже используется исключительно в научных целях и встретите Вы их только в Fortran, Matlab, Python (при наличии doubledouble.py), Julia и если повезет то и в C/C++

Так что у Вас на выбор собственно только float32 (type float) и float64 (type double). Во-втором случае у вас будет охренительная просадка (в десятки раз) в производительности на GPU (на CPU кстати пофиг, пока дело не доходит до SIMD инструкций, но это не про C#) на видеокартах класса ниже чем Tesla и Quadra (и то не все). Теслы предназначены для научных вычислений, а Квадры для инженерных расчетов и очень специфического рендеринга (который юзается только в САПР) и даже на них просадка в производительности будет ощутима (раза в 4-8) если юзать даблы вместо синглов - тупо меньше конвейеров получится задействовать и пропускная способность (bandwith) тоже вообще-то ограничена (на простых задачах, данные в видеокарту пересылаются кстати дольше чем потом там обрабатываются). А уж с даблами на видеокартах предназначенных для простых людей (включая и некоторые Титаны) - тем более никто заморачиваться не будет. Движки, всякие фрейморвки и библиотеки знающие про существование GPU на компьютере туда же, хотя ничего не мешает Вам выдумать и засунуть туда хоть 512 битные числа...только производительность Вам не понравится...

Так что если не разрабатывайте ПО в интересах НИИЧАВО, то только синглы, только 32 бита, только хардкор... Ну и как я выше написал - либо готовьтесь к костылям, либо уменьшайте масштаб... Я правда хз сталкивались Вы уже с этой проблемой и как с ней боролись - это тоже интересная штука[/zanuda mode off]

Ответить
0

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

Ответить
0

Вдруг пригодится https://ieeexplore.ieee.org/document/1587542

И реализация http://wiki.unity3d.com/index.php/Floating_Origin

Вроде бы работает, но тут только спасает от дрожании камеры, физику.

А так сборник каких-то велосипедов находится вот тут https://assetstore.unity.com/packages/tools/level-design/space-graphics-toolkit-4160

Ответить
0

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

Ну и бигинтеджер - это не совсем число, это структура содержащая массив uint + поля отвечающие за знак, размер и прочие свистелки и переделки , https://github.com/Microsoft/referencesource/blob/master/System.Numerics/System/Numerics/BigInteger.cs так что когда разряд доходит до своего максимума - добавляется ещё один элемент массива и так до тех пор, пока память не закончится :-)
Причем в dotNET принято соглашение об ограничении размера значимого типа в 16 байт, бигинт естественно в него может не влезть :-)

Ответить
1

А как же кластерное представление пространства? Я когда-то считал, могу ошибиться, но вроде метр (или все же километр) в кластере 1000x1000x1000 на седьмом (или восьмом) уровне покроет всю нашу галактику.
Для солнечной системы хватит, если грубо, 4 уровня вложенности + 4 камеры рендера.
Float(а) более чем достаточно для работы... хотя, я сам не занимался таким плотно, мож где и вылезают косячищщи космического масштаба. :)

Ответить
0

Самая большая проблема сейчас в том, что в HDRP сейчас удалили multi camera support, по сути зарезав этот подход и симуляторы космоса в принципе. Видимо придется клонировать себе ветку с HDRP и превращать ее в кастомный велосипед с костылями.

Ответить
0

А без него никак? Без HDRP-то? Может быть, его можно заюзать на главной камере, а многоступенчатые задники подстраивать руками?

Ответить
0

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

Ответить
0

рендеринг пайплайн открывает большие возможности

Речь вот об этом?

Ответить
0

Да, но пока я использую HDRP, смотрю на его возможности и ограничения. И он сам базируется на Scriptable Render Pipeline.

Ответить
0

Спасибо за статью! Сколько сейчас пользователей добавили игру в wishlist, если не секрет?

Ответить
3

700 человек.

Ответить
1

Почему названия российских или околороссийских игр такие кринжовые?🤔

Ответить
1

Вот еще автор, лови, вдруг пригодится пачка ссылок.
Просто накидаю от самых простых до поинтереснее:
https://www.redblobgames.com/maps/terrain-from-noise/#climate
https://www.redblobgames.com/x/1843-planet-generation/
http://www-cs-students.stanford.edu/~amitp/game-programming/polygon-map-generation/
https://www.redblobgames.com/maps/noisy-edges/
https://www.redblobgames.com/x/1723-procedural-river-growing/
http://simblob.blogspot.com/2018/10/mapgen4-river-representation.html
+ куча других (не буду все здесь выкладывать) + его сорцы https://github.com/redblobgames

https://www.indiedb.com/games/seed-of-andromeda/news/procedural-heightmap-terrain-generation
+ сорцы https://github.com/RegrowthStudios/SoACode-Public

https://mythcreants.com/blog/how-to-color-your-map-using-science/
http://www.decarpentier.nl/scape-procedural-basics
http://www.decarpentier.nl/scape-procedural-extensions
http://www.jgallant.com/procedurally-generating-wrapping-world-maps-in-unity-csharp-part-4/
http://oceanquigley.blogspot.com/2009/04/spores-procedural-terrain-texturing.html?m=1
https://catlikecoding.com/unity/tutorials/hex-map/

https://smcameron.github.io/space-nerds-in-space/earthlike/example/slideshow.html#1
https://github.com/smcameron/space-nerds-in-space
https://github.com/smcameron/gaseous-giganticus
https://github.com/vraid/earthgen-old

Может еще чего вспомню такого. Вдруг что пригодится

Ответить
0

Пилите свою версию Space Engine?

Ответить
1

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

Ответить
1

А во тс этого места хотелось бы поподробнее?

Ну просто можно например залезть на сайта NASA https://visibleearth.nasa.gov/view_cat.php?categoryID=1484&p=3 вытащить оттуда мегатекстуры Земли (вплоть до 500к), потом с помощью Awesome bump https://github.com/kmkolasinski/AwesomeBump вытащить оттуда карту высот, карту нормалей, окклюзии, а после чего натянуть сову на глобус...или купить в Ассет Сторе ассет где все это уже проделали (8192x8192 px я находил), после чего натянуть сову на глобус...

Но в Вашем случае такой вариант не очень прокатывает, глобус уже вряд ли подойдет - нужен будет кубик, который немного пучит, чанки-все-дела и много-много-много текстурок. В Spore, если мне память не изменяет было на каждую из 6 сторон кубика приходилось по 256 (8x8) больших текстур + дохрена еще мелких текстур деталей (3 типа для мультитекстурирования) + LOD и прочие свистелки и перделки. Так что задачка становится нифига не тривиальной.

Так что да, хотелось бы подробностей, тем более что под Юнити, что UE нифига нормальных примеров говнокода собственно и нет, каждый извращается на гитхабе в меру своей испорченности как может

Ответить
0

а если игрок направит ракету не к марсу, а к венере? как этот момент вообще реализован? как вообще другие планеты будут представлены в игре?

Ответить
1

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

Ответить
0

да ещё вдруг вспомнилось, что у Земли есть Луна )....

Ответить
–1

Кстати, перенести SE на UE4 было бы милое дело, и производительность бы улучшилась. Я что-то не уверен на Юнити. На нем можно генерировать текстуры на лету?

Ответить
2

Вот тут например юзаются вычислительные шейдеры (compute shaders) https://assetstore.unity.com/packages/tools/planet-texture-generator-51995 так шо 8k текстуру меньше чем за секунду (зависит от видеокарты) нагенерите.
Если сильно не страдать гигантоманией и удовлетвориться скромными 2k текстурами, то у меня получалось фрагментным шейдером на лету непрерывно генерировать и обновлять (меньше чем 1 миллисекунда), например, для имитации простенькой турбулентности облаков, ну или просто из-за лени. Правда что HLSL, что Cg - это все мир боли и унижений.

Совсем небольшие текстурки (64x64) можно в принципе и на CPU также на лету генерить. В любом случае вооружившись шейдерами и FX Composer какой-то собой проблемы с генерированием налету и какой-то особой привязки к движку - нет. Только надо иметь ввиду шо не у всех есть крутые GPU, а уж на мобильной платформе совсем все грустно.

Ответить
0

Без понятия, если честно.

Ответить
0

Да, можно.
И плюс интеграция с Substance

Ответить
0

Если не секрет: большая у вас команда?

Ответить
2

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

Ответить
0

А вот это, кстати, отличная для меня мотивация поднять наконец афедрон и продолжить свои эксперименты, спасибо :)

Ответить
0

Что такое "афедрон"? У меня все варианты какие-то пошловатые... а, всё, нашел в инете... хм... не так сильно я ошыбса :)

Ответить
0

Спасибо за статью, очень интересно. У меня вопрос, если передо мной стоит задача процедурной генерации ландшафта стоит ли мне изучать приведённые материалы? Генерация ландшафта встроена в генерацию планет или выведена в отдельные настраиваемые алгоритмы?

Ответить
2

Генерация планет и ландшафта это раздельные сущности, так что стоит. В ролике Себастьяна он достаточно хорошо разбивает всё по классам, что упростит переиспользование для вашего случая.

Ответить
0

Нестандартный террейн на Юнити. HDRP. Безумству храбрых.

Интересно, а насколько эффективны телеграм и дискорд оказались в дорелизном продвижении?

Ответить
2

Надеюсь, об этом тоже расскажу после релиза.

Ответить
–2

Круто, но выглядит как пиздец вблизи. Это Unity такой, я знаю.

Автору лайк.

Ответить
2

юнити может лучше, вопрос кто и как его использует)

Ответить
0

Только что на хайньюсе увидел титульную картинку и вспомнил про вашу планету.
А вы думаете делать тени от облаков, типа как здесь? Просто так спросил :)

Ответить
1

Да, это было бы круто. Я правда проводил быстрый ресерч облаков, и на этом фронте пока всё печально, но хотел бы вернуться к этой задаче где-нибудь в процессе Раннего доступа, после того как все остальные критические задачи будут решены.

Ответить

Комментарий удален

1

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

Ответить
0

А почему был выбран именно движок Unity? У него есть преимущества при генерации платен перед UnrealEngine, или просто уже он знаком автору?

Ответить
0

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

Ответить
1

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

Ответить
0

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

Ответить
0

Только через чанки.

Ответить
0

Ну про идеальную физическую симуляцию в KSP автор погорячился конечно, а так, удачи в начинаниях

Ответить
0

Это был сарказм :)

Ответить
0

Только не говорите об этом Крису Робертсу. А то он опять Стар Ситизен на новый движок переносить начнёт.

Ответить
0

А он переносил? (Ламберярд это форк крайнэнжена)

Ответить
0

там овердох изменений, скорее это новый движок.

Ответить
0

они называют это переносом. точка.

Ответить
0

Что то берут сомнения, что такой объем задач можно поднять за пол года. Но успехов вам. Добавил в стиме в желаемое.

Ответить
0

Нужен код. Не зря же эту возможность добавили в редактор.

Ответить
0

Прямой эфир

[ { "id": 1, "label": "100%×150_Branding_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox_method": "createAdaptive", "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "ezfl" } } }, { "id": 2, "label": "1200х400", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "ezfn" } } }, { "id": 3, "label": "240х200 _ТГБ_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fizc" } } }, { "id": 4, "label": "240х200_mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "flbq" } } }, { "id": 5, "label": "300x500_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "ezfk" } } }, { "id": 6, "label": "1180х250_Interpool_баннер над комментариями_Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "clmf", "p2": "ffyh" } } }, { "id": 7, "label": "Article Footer 100%_desktop_mobile", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fjxb" } } }, { "id": 8, "label": "Fullscreen Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fjoh" } } }, { "id": 9, "label": "Fullscreen Mobile", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fjog" } } }, { "id": 10, "label": "Native Partner Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyb" } } }, { "id": 11, "label": "Native Partner Mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyc" } } }, { "id": 12, "label": "Кнопка в шапке", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fdhx" } } }, { "id": 13, "label": "DM InPage Video PartnerCode", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox_method": "createAdaptive", "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "clmf", "p2": "flvn" } } }, { "id": 14, "label": "Yandex context video banner", "provider": "yandex", "yandex": { "block_id": "VI-250597-0", "render_to": "inpage_VI-250597-0-1134314964", "adfox_url": "//ads.adfox.ru/228129/getCode?pp=h&ps=clmf&p2=fpjw&puid1=&puid2=&puid3=&puid4=&puid8=&puid9=&puid10=&puid21=&puid22=&puid31=&puid32=&puid33=&fmt=1&dl={REFERER}&pr=" } }, { "id": 15, "label": "Плашка на главной", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "byudo", "p2": "ftjf" } } }, { "id": 17, "label": "Stratum Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fzvb" } } }, { "id": 18, "label": "Stratum Mobile", "provider": "adfox", "adaptive": [ "tablet", "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fzvc" } } } ]
10 самых лучших блюд
(согласно инстаграму Хидео Кодзимы)
Подписаться на push-уведомления