Войти
ПроектыФорумОцените

SpaceWay: Вселенная без границ (6 стр)

Страницы: 15 6 7 828 Следующая »
#75
2:40, 18 янв. 2010

Pyronimous
Я примерно это и делаю:) Только у меня не одна галактика...


#76
22:50, 16 фев. 2010

Pyronimous
> По поводу того, что из этого можно сделать:
> Есть такая штука - noctis (wikipedia).
> Дык вот, можно сделать что-нибудь по мотивам Ноктиса, но с крутой графикой и расширенными возможностями - выбор планетарных транспортных средств (вездеход, ховеркрафт, самолет и тп), или охота на местную дичь, например.
Интересно, выглядит как начальный план к действию.
Вселенная, планеты, поверхность, корабли, наземные/летательные/бегательные средства, никаких границ.
Цель - прилетел, посмотрел, погулял.

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

Где бы добыть нормальный алгоритм генерации галактики?


Более свежую демку можно взять тут:
http://orbides.1gb.ru/sway/s-way_100216.zip
Разницы не много, разве что звёзды лучше покрашены и стабильность другая.

#77
2:00, 17 фев. 2010

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

Artlav
> Где бы добыть нормальный алгоритм генерации галактики?
Да, вопрос конечно интересный...
1) Модель галактики (типа светящегося газа и пыли, хотя газ на самом деле - это скопление миллиардов звёзд).
Я пока что создаю галактику по текстуре, интерпретируя её как 2D карту плотности спирального узора. Но собираюсь когда-нибудь написать полностью процедурный алгоритм. Основная идея такая: рисуем размытую 2-х или 3-х лучевую звезду, смотря сколько хотим получить спиральных рукавов, добавляем ещё несколько побочных лучей, и закручиваем это в логарифмическую спираль на 0.5-1.5 оборота. Потом дисторсим немного. Получаем ту же 2D текстуру, по которой потом можно создавать модель из спрайтов или 3D текстуру плотности, смотря как рендеришь галактику, а так же генерить звёзды.
2) Модель распределения звёзд в галактике (собственно генерация звёзд).
Типичная спиральная галактика содержит сотни миллиардов звёзд, поэтому для современного железа нужна оптимизация:) Основная идея - далёкие звёзды не видны, поэтому их не надо рендерить и даже не надо сразу создавать. Суммарное свечение миллиардов далёких звёзд создаёт эффект непрерывного Млечного Пути - а он уже рендерится, см. п. 1:) Для близких звёзд, которые видны отдельно, я использую динамически конструируемое иерархическое octree. Основная идея иерархичности: верхние уровни содержат яркие звёзды, которые видны на большом расстоянии, но которых сравнительно немного, нижние уровни содержат слабые звёзды, которые видны только на небольшом расстоянии, но которых ооочень много, вплоть до десятков миллиардов (так устроена т.н. функция светимости - распределение звёзд по полной мощности излучения). Поэтому их можно и нужно рендерить только вблизи. И если большой кубик уровня N не виден (т.к. не видна его самая яркая звезда по причине ослабления блеска с расстоянием), то не видны и все его потомки уровня N+1, которые содержат звёзды слабее самой слабой звезды этого кубика. Естественным образом octree используется и для отсечения по фрустуму. Дерево строится динамически - если пользователь сместился, при обходе дерева в нём окажутся новые, ещё не созданные узлы, они создаются и генерятся соответствующие им звёзды, используя карту плотности галактики и очень хитрую функцию, задающую распределение звёзд по спектральному классу (он задаёт цвет, температуру, радиус и т.д., как её "научно" сделать, я пока не знаю:)). Старые узлы можно сразу не удалять, потом, когда лимит памяти будет исчерпан (получается типа кэш). Шаг по светимости между уровнем N и N+1 выбирается таким образом, чтобы в каждом кубике было одинаковое число звёзд (без учёта плотности, как если бы она была равномерной). Генерация тысяч звёзд на ЦПУ происходит ой как медленно, поэтому надо думать о переносе её на ГПУ и/или в отдельный поток...
3) При подлёте к звезде создаётся планетная система и процедурно текстурированные планеты - это у тебя уже есть:) Кстати, генерация текстур происходит на ЦПУ?

#78
12:06, 17 фев. 2010

Neptune
> 1) Модель галактики
> Модель распределения звёзд в галактике
Тут всё ясно, функция разброса звёзд как по месту так и по спектру давно есть.
Алгоритм у меня похож, но выглядит всё равно фиговенько.

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

> Кстати, генерация текстур происходит на ЦПУ?
Да, куда же её ещё девать? CUDA/OpenCL есть у немногих избранных, шейдеры совсем в другой области.

#79
13:47, 17 фев. 2010

Artlav
> Аппаратура легко держит 200000 звёзд, но выглядит это как бесформенное
> скопление точек, ни с какого ракурса формы галактики не видно, только куча
> точек. Надо как-то делать облака пыли, раньше я их распихивал случайно, сейчас
> octree и куда совать - не ясно.
Увеличь предельную яркость звёзд - форма галактики станет видна. Только надо при этом ограничить глубину рекурсии дерева, а то получишь 100 млн звёзд и переполнение памяти:)
http://www.gamedev.ru/code/forum/?id=122716&page=21#m303
Отдельными звёздами млечный путь не нарисовать - миллионы их нужны. В лучшем случае будет заметна просто концентрация звёзд к плоскости. Я раздельно рендерю звёзды и пыль с "сиянием далёких звёзд", как описал выше. Иначе как рендерить галактику издалека, когда отдельные звёзды уже не видны?

Artlav
> > Кстати, генерация текстур происходит на ЦПУ?
> Да, куда же её ещё девать? CUDA/OpenCL есть у немногих избранных, шейдеры
> совсем в другой области.
Почему это шейдеры в другой области? Что мешает создать fbo и отрендерить в него один квад с шейдером, в котором будут использоваться предрассчитанные текстуры с шумом перлина, повторяющим то, что ты делаешь на ЦПУ? В fbo как раз получится сгенерированная текстура для патча планеты. Её даже не надо будет перегонять по шине куда-то - она уже и так в видеопамяти:)

#80
18:37, 17 фев. 2010

Neptune
> http://www.gamedev.ru/code/forum/?id=122716&page=21#m303
> Я раздельно рендерю
> звёзды и пыль с "сиянием далёких звёзд", как описал выше. Иначе как рендерить
> галактику издалека, когда отдельные звёзды уже не видны?
Интересно. сколько получается частиц на сцену? Они вроде там отсортированы?

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

Neptune
> Почему это шейдеры в другой области? Что мешает создать fbo и отрендерить в
> него один квад с шейдером, в котором будут использоваться предрассчитанные
> текстуры с шумом перлина, повторяющим то, что ты делаешь на ЦПУ?
Мешает то, что нужно тогда засовывать в шейдер немалую библиотеку фрактальных функций, да ещё и как-то передавать параметры, плюс текстур - тысячи, когда и где и как их считать?
Текстура считается по профилю сферы и ландшафту, затрудняюсь представить, как это в шейдере делать - где брать высоты, считаемые асинхронно в другой нити?
В общем, это с нуля писать надо, заодно тогда и нормальный алгоритм генерации поверхностей сделать можно.

#81
20:39, 17 фев. 2010

Artlav
> Интересно. сколько получается частиц на сцену? Они вроде там отсортированы?
Звёзд или спрайтов галактики? Звёзд - несколько десятков тысяч, модель галактики состоит из 15-20 тысяч спрайтов. Спрайты клипятся по фрустуму небольшими блоками, и сортируются, чтобы корректно обрабатывалась прозрачность. Для одновременного рендера светящихся спрайтов и пыли использую burn блендинг: т.е. рендерю с функцией (GL_ONE, GL_ONE_MINUS_SRC_ALPHA), альфа у светящихся спрайтов 0.0-0.2, у пылевых 0.7-1.0.

> Занялся этим подробнее, как-то не очень пока смотрится. Цвета где брать не
> ясно, с размером и разбросом частиц ещё подбирать и подбирать, звёзд много.
> Да и наверное тормозить будет нещадно на компьютере не способном посчитать
> бесконечный цикл за пару секунд.

Цвета бери из текстуры вроде такой: http://apod.nasa.gov/apod/image/0305/m74_gemini_big.jpg (только звёздочки удали в фотошопе). Или ты уже сгенерировал модель процедурно? В общем, расцветка такая: спиральные рукава голубые, т.к. содержат яркие голубые звёзды, ядро и гало желтоватое, т.к. содержит старые карлики типа нашего Солнца. И пыль. Вот с пылью проблема - она создаёт мелкие детали, которые отдельными спрайтиками задавать - жёстко будет. В общем, тут надо думать, может сделать octree для детализации, типа как у планет. Я пока что для пыли взял такую "рваную" текстуру, вроде побольше деталей стало. Как распределить спрайты по размерам и в пространстве, так чтобы не было видно регулярной структуры - тут только эксперименты подскажут. И ещё: редрерь спрайты в vbo с разрешением в 3-4 раза меньше, чем разрешение экрана. Иначе здорово тормозить будет - блендинг тысяч больших полигонов...
Ещё есть вариант - рендерить 3D текстуру трассировкой луча. Тогда можно будет правильно учитывать поглощение света пылью (которое пропорционально интенсивности света, а не просто константа, как при рендере спрайтами). Но детализация бедет наверное не очень, и памяти 3D текстура займёт немеряно...

Чё-то не понял при чём тут бесконечный цикл...

Artlav
> Мешает то, что нужно тогда засовывать в шейдер немалую библиотеку фрактальных
> функций, да ещё и как-то передавать параметры, плюс текстур - тысячи, когда и
> где и как их считать?
> Текстура считается по профилю сферы и ландшафту, затрудняюсь представить, как
> это в шейдере делать - где брать высоты, считаемые асинхронно в другой нити?
> В общем, это с нуля писать надо, заодно тогда и нормальный алгоритм генерации
> поверхностей сделать можно.

Почитай журнал Flavien Brebion, как он делал планеты:
http://www.gamedev.net/community/forums/mod/journal/journal.asp?j… mp;cyear=2005

#82
22:19, 17 фев. 2010

Neptune
> Звёзд или спрайтов галактики?
Спрайтов. Странно, у меня от 2000 штук FPS падает до 30, что-то не так. А ведь ещё надо повернуть каждую лицом и отсортировать.
Как это гуглибельно называется? Системы частиц?

Neptune
> Цвета бери из текстуры вроде такой:
> http://apod.nasa.gov/apod/image/0305/m74_gemini_big.jpg (только звёздочки удали
> в фотошопе). Или ты уже сгенерировал модель процедурно?
Процедурно, форма - корень из фи, цвета пока не совсем придумал, но уже ближе к снимку.
С пылью - можно несколько текстур нагенерить, и ставить вразброс. Но, надо сначала частицы оптимизировать.

В общем, вот текущая демка:
http://orbides.1gb.ru/sway/s-way_100217.zip (Обн. 22:50)
(Рули включаются кнопкой W)
Интересно, что за FPS выйдет.

> Чё-то не понял при чём тут бесконечный цикл...
Старый анекдот.

Изображение
Изображение
Изображение

#83
13:35, 18 фев. 2010

20-30 fps. При повороте камеры подгемаривает. Звёзды почему-то резко появляются и исчезают. Ты вообще учитывешь ослабление яркости звезды с расстоянием?
Чё это за туманные пятнышки? На последнем скрине тоже видны.
ЗЫ: Как изменить скорость полёта? :)

#84
14:54, 18 фев. 2010

Neptune
> При повороте камеры подгемаривает.
При движении мыши происходит выбор наведением, криво сделанный.

> Звёзды почему-то резко появляются и исчезают. Ты вообще учитывешь ослабление
> яркости звезды с расстоянием?
Учитываю, но звёзды появляются слишком близко на скорости, потому так. А резкое появление - 1 секунда от создания до полного цвета.

> туманные пятнышки
Которые прочие галактики чтоли?

> Как изменить скорость полёта?
Shift+Num+ и Shift+Num- в данном режиме. Без шифта - реактивная тяга.

Понаисправлял и понаоптимизировал.
Теперь должно быть побыстрее, перелёты между галактиками должны работать всегда, и никаких тормозов от движения мыши.
Положение с полётом из предыдущей версии - F4, загрузить, flight.

Далее, к вопросу удобства:
Планеты отмечены для облегчения навигации (O выключает).
Ближайшие звёзды можно наводить мышью для получения информации.
А также, русская версия как игры так и инструкции по кнопкам.
http://orbides.1gb.ru/sway/s-way_100218.zip

Изображение
#85
16:02, 18 фев. 2010

Чё-та падает прога часто... :(
Пара рекомендаций:
1) Планеты вдалеке надо рендерить как звёзды - светящимися точками. В реальности ведь так и есть:) Яркость точки - это яркость звезды  делить на квадрат расстояния от звезды до планеты (т.е. яркость освещения), умножить на альбедо планеты и на фазовый множитель (т.е. какая часть диска освещена с точки зрения наблюдателя), и делить на квадрат расстояния до наблюдателя.
2) При межпланетном полёте звёзды рендерятся скайбоксом? Очёнь уж размытыми выглядят. Имхо лучше их всегда рендерить точками.
3) Падение фпс при межзвёздном полёте - это из-за постоянной генерации новых звёзд? Сделай такой чит: при большой скорости, ограничивай глубину рекурсии дерева, тогда мелкие звёзды не будут генериться, но их всё равно на большой скорости сложно заметить. Или у тебя дерево не иерархическое?
4) Сделай управление кораблём с цифровой клавиатуры независящим от Num Lock, а то напрягает переключать. И не инверсным, а то мозг вскипает, когда нажмаю вверх, а корабль поворачивает вниз:) Вообще, неплохо было бы заюзать мышку.
ЗЫ: А как выбирать объекты? Я чё-то не понял. Автопилот есть? Типа выбрал объект, нажал G и автопилот сам выведет корабль на орбиту.

#86
18:12, 18 фев. 2010

Neptune
> Чё-та падает прога часто... :(
В каких ситуациях? У меня со вчерашнего дня ещё ни разу не упала.
Что в логах?

> Планеты вдалеке надо рендерить как звёзды - светящимися точками.
Это, кстати, есть для всех объектов от кораблей до галактик, и должно работать.  Чтобы дальше видно было?

> При межпланетном полёте звёзды рендерятся скайбоксом? Очёнь уж размытыми
> выглядят. Имхо лучше их всегда рендерить точками.
Да, если точками - кадр с 500мс падает до 3000мс, не везде заметно, но на машинах второй мощности FPS ощутимо падает.

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

> Сделай управление кораблём с цифровой клавиатуры независящим от Num Lock, а то
> напрягает переключать.
Это как? Должно же всё нормально без num lock работать?

> И не инверсным, а то мозг вскипает, когда нажмаю вверх, а корабль поворачивает
> вниз:) Вообще, неплохо было бы заюзать мышку.
Стандартное управление в авиасимуляторах, нет? Будет галочка.
На счёт мышки - мне трудно представить, как ей можно управлять полётом. А вот джойстик точно скоро будет.

> А как выбирать объекты? Я чё-то не понял. Автопилот есть? Типа выбрал объект,
> нажал G и автопилот сам выведет корабль на орбиту.
Не, такого пока нет. Есть только предсказатели траекторий в разных системах отсчёта. Летать надо самому, с рассчётом на реактивных или прямой наводкой на гипердвижке.
Если бы всё дело было - кликнул и прилетел - скучно же до жути будет, нет?

#87
22:46, 18 фев. 2010

Artlav
> В каких ситуациях? У меня со вчерашнего дня ещё ни разу не упала.
> Что в логах?

18.02.2010-15:51:08:[SWAY      ]:Started.
18.02.2010-15:51:08:[DBG      ]:Spaceway engine v100217 started.
18.02.2010-15:51:08:[DBG      ]:.
18.02.2010-15:51:08:[DBG      ]:Loading settings
18.02.2010-15:51:08:[DBG      ]:.
18.02.2010-15:51:08:[DBG      ]:Genesis
18.02.2010-15:51:08:[DBG      ]:.
18.02.2010-15:51:08:[DBG      ]:Graph
18.02.2010-15:51:09:[DBG      ]:.
18.02.2010-15:51:09:[DBG      ]:Initcalc
18.02.2010-15:51:09:[DBG      ]:.
18.02.2010-15:51:57:[GRP_INIT  ]:Error in updstars Assertion failure (D:\Prdesign\Prg\SpaceWay\src\sys\swgrpinit.pas, line 294)

Падает при подлёте к другой звезде или вылете из галактики.

Artlav
> > Планеты вдалеке надо рендерить как звёзды - светящимися точками.
> Это, кстати, есть для всех объектов от кораблей до галактик, и должно работать.
> Чтобы дальше видно было?
Не совсем, это просто физика. Заодно конечно удобнее становится. Ещё для удобства сделай отображение орбит - тогда сразу становится ясна геометрия системы, и планеты видны, если выделять их "след":

scr00056 | SpaceWay: Вселенная без границ

Artlav
> Это как? Должно же всё нормально без num lock работать?
Без Num Lock работает, а с ним - нет. У меня он по дефолту включен, приходится отрубать.

Artlav
> Стандартное управление в авиасимуляторах, нет? Будет галочка.
> На счёт мышки - мне трудно представить, как ей можно управлять полётом. А вот
> джойстик точно скоро будет.
Стандартное, да, но я например привык к "кваковскому" управлению, WASD. В своём движке сделал стандартное WASD, RF для вверх/вниз, QE для вращения как у тебя на стрелках <- / ->. Режим управления с инерцией тоже есть (только без гравитации), вполне удобно поворачивать мышкой - чем дальше уводишь мышку от центра, тем больше ускорение вращения ("тяга ориентационных двигателей"). Аналог отклонения джойстика.

#88
0:59, 21 фев. 2010

Neptune
> Падает при подлёте к другой звезде или вылете из галактики.
Есть ли улучшения?
http://orbides.1gb.ru/sway/sway-100220-win32-bin.zip

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

#89
14:31, 21 фев. 2010

Всё так же падает при переходе в межзвёздное пространство:(

Страницы: 15 6 7 828 Следующая »
ПроектыФорумОцените

Тема в архиве.