Страница 1 из 1

Полет по орбите планет

СообщениеДобавлено: 20 фев 2017, 15:40
siriusspark
Привет, народ.

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

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

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

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

И да, посадок на планеты в игре не предусмотрено, только орбитальные полеты и глубокий космос.

Re: Полет по орбите планет

СообщениеДобавлено: 20 фев 2017, 16:07
samana
А просто ограничение на дистанцию не подойдёт? Например если от центра планеты до корабля меньше определённого расстояния, то корабль отодвигается от планеты.

Re: Полет по орбите планет

СообщениеДобавлено: 20 фев 2017, 17:57
Paul Siberdt
Вариант без перемещения:
Вторая камера, которая рисуется под основной и отвечает за все недостижимые элементы. камера тупо висит где-нить, никому не мешает и повторяет ориентацию основной. Приближение к планете невозможно.

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

В принципе, можно реализовать вериант 1 с облётом, но без перемещения, как такового, но это может вызвать диссонанс у пилота. :)

Re: Полет по орбите планет

СообщениеДобавлено: 20 фев 2017, 19:11
siriusspark
Гм, вариант со второй камерой "где-то-там" вполне интересен. Но я так понимаю, что она должна все равно где то смотреть на планету, а соответственно эта планета где то должна торчать, не? И теоретически игроки могут на нее каким то образом наткнуться. Или я чего то не так понял?

Paul Siberdt писал(а):но это может вызвать диссонанс у пилота. :)


Глупый вопрос - а почему? :)

Re: Полет по орбите планет

СообщениеДобавлено: 20 фев 2017, 19:24
Paul Siberdt
Ну... я лечу вправо, планета крутится, я лечу влево - планета крутится... я лечу вперед... вперед... вперед... вот, суки! :)

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

Re: Полет по орбите планет

СообщениеДобавлено: 20 фев 2017, 21:41
siriusspark
Вот же ж я :) Теоретически понимаю что вы предлагаете, а практически никак не могу уловить куски мыслей в единое целое))

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

P.S. наткнулся на форуме на подобную темку, там человек пытался реализовать примерно то же самое, в итоге запутался еще больше :)

Re: Полет по орбите планет

СообщениеДобавлено: 20 фев 2017, 21:54
Paul Siberdt
- Создаете пустую сцену.
- Создаете слой Celestials.
- Создаете шарик (планета) и чуть сдвигаете в сторону от центра ( нужна же красота, а не абы как :D ) и назначаете слой Celestials шарику.
- Создаете камеру, переименовываете в CameraCelestials, в маске рендера указываете только Celestials, в глубине -10.
- Основной камере в маске рендера снимаете Celestials и в заполнении буфера указываете Don't Clear
- Создаете кубик (корабель).

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

Re: Полет по орбите планет

СообщениеДобавлено: 20 фев 2017, 22:37
siriusspark
Та-ак. Вот теперь сообразил. Премного благодарен, пойду мучать юнити :)
(3A4OT)

Re: Полет по орбите планет

СообщениеДобавлено: 19 май 2017, 10:25
siriusspark
В общем все получилось, но теперь нарисовалась другая проблема. Есть ведь объекты которые находятся рядом, астероиды там всякие, космический мусор и прочее. Они соответственно не в слое Celestials и отрисовываются основной камерой. Но вот в чем беда - скайбокс то с космосом отрисовывается камерой которая видит только слой Celestials. И в итоге движение фона не совпадает с движением ближних объектов, этакий ооочень заметный параллакс наблюдается.

Это как нибудь лечится?

Для справки: камера отрисовывающая слой Celestials не движется, просто повторяет вращение камеры корабля.