ENG Новый сайт

Расширенный поиск
[ Новые сообщения · Пользователи · Правила ]
Еще немного идей и предложений
SpaceEngineerДата: Вторник, 02.08.2016, 11:29 | Сообщение # 571
Автор Space Engine
Группа: Администраторы
Российская Федерация
Сообщений: 5547
Награды: 55
Статус: Offline
Цитата ABetc ()
1. Генерируем точку.
2. Генерируем пороговую величину: случайную, но не равномерную.
3. Если функция принадлежности даёт величину выше пороговой, идём к п. 1, а точку не ставим. Всего скажем 3 таких итерации. Если ниже пороговой - ставим галактику. Если за 3 итерации не прошли под пороговую - не ставим точку.
4. Идём к п.1 за новой точкой.

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

Цитата ABetc ()
Или так.
1. Генерим энное кол-во точек, проверяя значение р(а), пока не попадём ниже некоторого порога (параметр b). Значит, мы попали вблизи волокна.
2. Берём эту точку за отсчёт и собираем множество точек таким образом:

Это может прокатить, но не получится ли то же самое, если тупо вместо 1 галактики ставить 10 вокруг найденной точки?

Цитата ABetc ()
Таким образом каждая точка "отталкивается" - куда? - правильно, к периферии каждой из полостей. Можно в несколько итераций каждую точку так. Ну и там - галактика.

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


ABetcДата: Вторник, 02.08.2016, 11:57 | Сообщение # 572
Космический турист
Группа: Пользователи
Российская Федерация
Сообщений: 36
Награды: 0
Статус: Offline
Цитата SpaceEngineer ()
Ведь точка может как выползти за пределы данного куба, так и вползти в него из соседнего. Это оверхед, и придётся подбирать функцию так, чтобы точки не могли уползать дальше, например, одного дополнительного куба.


Мне бы понимать: каковы размеры минимального куба?
Можно ли передавать данные из родительского куба?
Ведь точек - центров войдов во много раз меньше самих галактик, очевидно.
Практически, это вполне небольшой массив, который можно даже не генерить каждый раз.
А обращаться к нему уже готовому.
И ещё непонятно: сколько вообще кубов охватывается при отображении?
Если например я на стыке максимального количества, т.е. 8 кубов. Все они генерятся?
По всем этим данным можно было бы что-то подобрать, оптимизировать...


Кольца планет - это диски, на которые предыдущие цивилизации записали всю свою историю и как они довели планету до такого состояния...))
SpaceEngineerДата: Вторник, 02.08.2016, 13:20 | Сообщение # 573
Автор Space Engine
Группа: Администраторы
Российская Федерация
Сообщений: 5547
Награды: 55
Статус: Offline
Вся Вселенная - куб со стороной 10 гигапарсек
Octree имеет 10 уровней, т.е. самый маленький нод (кубик) - 10 Гпк / 210 = 9.77 Мпк
Обход дерева начинается сверху вниз:
0 уровень (вся Вселенная) обычно всегда виден - генерируем до 10000 самыx яркиx галактик (если ещё не сгенерировано) и добавляем в рендер-лист.
1 уровень - смотрим, какие из 8 потомков нода 0 уровня видны в поле зрения - далее работаем только с ними. Генерируем до 10000 галактик только в тех нодах, которые видны, если они ещё не сгенерированы. Светимость галактик для нодов уровня 1 лежит между светимостью галактик 0 уровня и 2 уровня. Добавляем в рендер-лист.
2 уровень - смотрим, какие из 8 потомков нода 1 уровня (каждого из тех, что были пройдены на предыдущем шаге) видны в поле зрения - далее работаем только с ними. Генерируем до 10000 галактик только в тех нодах, которые видны, если они ещё не сгенерированы. Добавляем в рендер-лист.
...
10 уровень - то же самое.

Кроме проверки на попадание в поле зрения камеры, ноды проходят ещё проверку на видимость по расстоянию. Берётся максимальная возможная светимость галактики данного уровня, берется расстояние до ближайшей точки нода, считается видимая яркость и сравнивается с пороговой. Если меньше - то нод не прошел тест и далее он не обрабатывается (и все его потомки тоже - они даже не создаются; это важный момент и он возможен потому, что диапазоны светимостей галактик на разных уровнях не пересекаются, т.е. все галактики уровня N+1 гарантированно тусклее самой тусклой галактики уровня N). Без проверки по расстоянию/светимости нодов 10 уровня было бы сотни миллионов - комп бы не справился, при том что большинство их просто не были бы видны из-за расстояния. Именно поэтому не стоит задирать предельную зв. величину галактик или звёзд - комп просто не сможет сгенерить столько нодов и заполнить их галктиками/звездами, кэш нодов заполнится до предела и будет бесконечное удаление/генерация нодов.

В среднем получается видно порядка 80 нодов разных уровней, которые отправляют на рендер 120-150 тыс. галактик. Это при дефолтной включенной настройке автоувеличение яркости галактик (т.е. пороговой зв. величины, при которой галактика видна) - до 15m. При отключенной порог будет 7m, и видно всего лишь 24-28 нодов с ~40 тыс галактик, из которых дай бог 2-3 реально можно заметить на экране.

Так работает octree галактик (звёздный устроен аналогично). При желании, при генерации нода-потомка, в него можно передать массив галактик или какие-то другие данные из нода-родителя. А вот данные из соседних нодов нельзя - они вообще могут не существовать, т.к. ни разу не были видны камере по границам поля зрения/расстоянию. Генерировать всех соседей каждый раз будет очень накладно, тем более что это будут не совсем "полоноценные" соседи (если запускать полноценный алгоритм генерации галактик для каждого соседа, то надо будет генерировать и его соседей, т.е. получается, что надо сгенерировать вообще всю Всленную).

10000 галактик на нод - это и есть то число точек N, которое генерируется в объёме нода (куба) и смотрится функция плотности вероятности нахождения галактики в данной точке. Реально сгенерированное число галактик получается 500-2000 на нод. Так что оверхед уже и так довольно значительный; с учётом медленности функции плотности (там диаграмма Вороного, точнее шум Волрея) генерация нода галактики происходит раз в 100 дольше, чем нода звёзд. Тут спасает только то, что галактик реально мало видно по сравнению со звёздами, даже при предельной величине 15m. Чтобы сделать волокна тоньше, а галактик в них больше, можно например функцию плотности возвести в какую-нибудь степень, и увеличить число N до 100к. Но это будет убийственно долго. Но можно действительно применить хак с прореживанием, который вы предложили - вызывать функцию плотности не на каждую точку, а на скопление из 10-100 точек, которые заодно модулировать какой-нибудь локальной шумовой функцией.


ABetcДата: Среда, 03.08.2016, 00:15 | Сообщение # 574
Космический турист
Группа: Пользователи
Российская Федерация
Сообщений: 36
Награды: 0
Статус: Offline
Цитата SpaceEngineer ()
Это может прокатить, но не получится ли то же самое, если тупо вместо 1 галактики ставить 10 вокруг найденной точки?

Нет! Почему? Алгоритм пробирается по локальным минимумам функции! Высвечивает волокна. И по ним раскидывает точки.

Цитата SpaceEngineer ()
Вся Вселенная - куб со стороной 10 гигапарсек

Как получалось расстояние у меня между объектами в противоположных концах мира в 50 млрд. св.лет?

Цитата ABetc ()
...
10 уровень - то же самое.

Почему бы тогда не проделывать на каждом уровне фокус с отбрасыванием от центров войдов самых ярких галактик? В соседних нодах. Это не решит проблему?


Кольца планет - это диски, на которые предыдущие цивилизации записали всю свою историю и как они довели планету до такого состояния...))

Сообщение отредактировал ABetc - Среда, 03.08.2016, 00:24
SpaceEngineerДата: Среда, 03.08.2016, 19:02 | Сообщение # 575
Автор Space Engine
Группа: Администраторы
Российская Федерация
Сообщений: 5547
Награды: 55
Статус: Offline
Цитата ABetc ()
Как получалось расстояние у меня между объектами в противоположных концах мира в 50 млрд. св.лет?

ребро куба = 10 гигапарсек = 32.6 млрд св. лет
диагональ куба = 56.4 млрд св. лет

Цитата ABetc ()
Почему бы тогда не проделывать на каждом уровне фокус с отбрасыванием от центров войдов самых ярких галактик? В соседних нодах. Это не решит проблему?

Что значит отбрасывать? Удалять или двигать? Если удалять - то оно так и работает.


RattusДата: Пятница, 05.08.2016, 16:40 | Сообщение # 576
Строитель Миров
Группа: Модераторы
Российская Федерация
Сообщений: 663
Награды: 4
Статус: Offline
Цитата princemoth ()
А планетоходы будут реализованы?
Должны быть. Энтузиасты ранее уже предложили концепты.


"Ннапыльн%х тpапинкахъ далиокихъ плонеттъ астануцца нашшы погадкиъ!" (ЙожЪ)
payload_habitatmoduleДата: Пятница, 05.08.2016, 21:31 | Сообщение # 577
Исследователь
Группа: Пользователи
Российская Федерация
Сообщений: 286
Награды: 1
Статус: Offline
еще:

? хочется функции более аккуратного(с меньшим шагом, например 0,1) изменения тяги двигателей, хотя Ассистент помогает.

? модули как корабли: если имя модуля == имя корабля и тип "Cargo","Ship","Transportation" etc, то модуль можно строить в списке кораблей. Список тогда нужен с группами, пусть и ручная группировка.
Еще тогда сделать управление группой как кораблем, чтобы отправлять куда-нить флот или садить карго-модуль 2-3мя минидронами на планету.

? материалы отвязать от модулей,кораблей(от cfg-, sm-файлов) чтобы менять их внешний вид.
Например: задаем в cfg-файле корабля, модуля
Material "SHW_*", а в SE можно будет выбрать текстуры материала как "SHW_Default", так и любой SHW_ например "SHW_payload"

? пристыкованные модули-корабли может быть прописать в cfg-файле корабля и при создании корабля добавлять пристыкованные в spacecraft.cfg


XP x86, AMD Phenom 4GB DDR, AMD HD 7700 1GB

Сообщение отредактировал payload_habitatmodule - Пятница, 05.08.2016, 21:32
payload_habitatmoduleДата: Пятница, 05.08.2016, 21:34 | Сообщение # 578
Исследователь
Группа: Пользователи
Российская Федерация
Сообщений: 286
Награды: 1
Статус: Offline
еще:

? управление стыкованным кораблем: нужен выбор каким управлять для перемещения карго-модулей от основного корабля миниботами

? общая идея: столкновение кораблей === посадка === стыковка (по скоростям и углам)

? новые классы кораблей(моделей) "Транспорт"("Transportation"), "База"("Transaction"),
"Модуль"("Module"), "Бот"("Bot" или "Dron" орбитальный бот,аэробот)


XP x86, AMD Phenom 4GB DDR, AMD HD 7700 1GB
payload_habitatmoduleДата: Пятница, 05.08.2016, 21:35 | Сообщение # 579
Исследователь
Группа: Пользователи
Российская Федерация
Сообщений: 286
Награды: 1
Статус: Offline
по звуку:

пожелания по звуковым эффектам: датчики и голос компьютера
- mp3 на события - голос компьютера корабля: стыковка, посадка, выбор цели, начало полета к цели, достижение цели, обнаружение новых объектов.
- звуковые сообщения от датчиков и телескопов текущего корабля
разные голоса разных моделей кораблей (параметры в cfg-файле корабля)

почему бы не: панель датчиков и телескопов для визуализации этих сообщений.

На кнопках мигают огоньки, если датчики передали сообщение. При нажатии на мигающую кнопку - переход на объект, в соотв. режим.

+ сделать общий лог: события, сообщения с фильтром по кораблям.


XP x86, AMD Phenom 4GB DDR, AMD HD 7700 1GB
RutkovichДата: Суббота, 06.08.2016, 14:36 | Сообщение # 580
Нет аватара
Космонавт
Группа: Пользователи
Российская Федерация
Сообщений: 77
Награды: 0
Статус: Offline
Очень сильно жду каталога спутников и зондов...
ABetcДата: Воскресенье, 14.08.2016, 16:51 | Сообщение # 581
Космический турист
Группа: Пользователи
Российская Федерация
Сообщений: 36
Награды: 0
Статус: Offline
Куда это написать?
Данные о планетной системе Фомальгаута изменены: планет не 1 а 2, размеры другие.
Википедия


Кольца планет - это диски, на которые предыдущие цивилизации записали всю свою историю и как они довели планету до такого состояния...))

Сообщение отредактировал ABetc - Воскресенье, 14.08.2016, 16:52
SpaceEngineerДата: Воскресенье, 14.08.2016, 19:12 | Сообщение # 582
Автор Space Engine
Группа: Администраторы
Российская Федерация
Сообщений: 5547
Награды: 55
Статус: Offline
Цитата payload_habitatmodule ()
- mp3 на события - голос компьютера корабля: стыковка, посадка, выбор цели, начало полета к цели, достижение цели, обнаружение новых объектов.
- звуковые сообщения от датчиков и телескопов текущего корабля
разные голоса разных моделей кораблей (параметры в cfg-файле корабля)

Это можно, сделаете набор звуков? Только не mp3, а ogg.


payload_habitatmoduleДата: Воскресенье, 14.08.2016, 21:20 | Сообщение # 583
Исследователь
Группа: Пользователи
Российская Федерация
Сообщений: 286
Награды: 1
Статус: Offline
Цитата SpaceEngineer ()
Цитата payload_habitatmodule ()
- mp3 на события - голос компьютера корабля: стыковка, посадка, выбор цели, начало полета к цели, достижение цели, обнаружение новых объектов.
- звуковые сообщения от датчиков и телескопов текущего корабля
разные голоса разных моделей кораблей (параметры в cfg-файле корабля)

Это можно, сделаете набор звуков? Только не mp3, а ogg.


)) могу записать себе в todo.
у меня пока мозг больше моделями занят.

Проще же сейчас добить в SE функционал управления по стыковке, модули-корабли и выбор материалов.
(Я так думаю со своей точки зрения на колокольню.)


XP x86, AMD Phenom 4GB DDR, AMD HD 7700 1GB
EchoTangoДата: Пятница, 19.08.2016, 16:33 | Сообщение # 584
Исследователь
Группа: Пользователи
Пират
Сообщений: 238
Награды: 4
Статус: Offline
Не знаю что будет в следующих версиях, потому как Инженер не связывает себе руки декларированием майл-стоунов.
По моему скромному мнению совсем не сложно ПРЯМО СЕЙЧАС добавить в уже имеющийся код следующие ИГРОВЫЕ фичи:
- На околоземной орбите разместить футуристическую орбитальную станцию (ОС), которая будет служить отправной точкой всех экспедиций.
- Убрать функцию создания кораблей игроков в любом месте пространства. Вместо этого корабль создавать только в окрестностях ОС. Да. Той самой, на орбите Земли.
- При столкновении корабля с небесным телом, убирать его из вселенной, и возвращать игрока на ОС.
- Убрать браузер планет звездной системы, как читерскую фичу. Браузер должен включаться только для систем, где присутствует корабль игрока.
- Создать общую базу данных, куда будут сбрасываться результаты исследований.

Каких таких исследований? Начнем с простого: при прибытии в систему корабль получает данные о количестве планет, и их типе.
При выходе на орбиту вокруг планеты, получаем данные, которые в данной версии выводятся с левой стороны экрана: физические параметры и данные атмосферы.

Просто? Да. Но это включит играбельность и челлендж.

Да. Это при отсутствии ресурсов и дефицита топлива.
Начало.
EchoTangoДата: Суббота, 20.08.2016, 02:03 | Сообщение # 585
Исследователь
Группа: Пользователи
Пират
Сообщений: 238
Награды: 4
Статус: Offline
Добавлю:
Для всех этих изменений добавить режим карьеры как пункт главного меню.

В режиме планетария оставить все как есть.
Поиск:

>