Еще немного идей и предложений
|
|
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
| Добавлю: Для всех этих изменений добавить режим карьеры как пункт главного меню.
В режиме планетария оставить все как есть.
|
|
| |