Палнеты так и работают. Только сегменты (ноды) не 2000х2000 км, а в виде дерева с разными лодами, от 6 нодов на всю планету (как грани куба) до сверхдетальных нодов размером 300*300 метров. при этом разренение каждого нода одинаковое - 256*256 пикселей, а лод выбирается в зависимости от расстояния.
То-есть пока планета в кеше, но мы очень далеко от неё( на другом конце системы например) она куб? Config: Gigabyte GTX 770 (2048 MB/256 bit) , Intel Core i5 2400 3,1GHz, 8Gb DDR3, W10 x64
Если я не ошибаюсь mindstalker, приводит пример проги Wilbur?
Нет, это я по быстрому в 3ds Max'е набросал...
Quote (NuclearCHE)
То-есть пока планета в кеше, но мы очень далеко от неё( на другом конце системы например) она куб?
Если я правильно понимаю технологию, то когда мы очень далеко, планета - спрайт (плоский квадрат ;).
Кэшируется не геометрия а текстура. И вот этих текстур верхнего уровня - шесть (на самом низком лоде). Они накладываются на грани "раздутого" до сферы куба.
Детали см. здесь Windows 7 x64; Core i5-2500K (3.3 Ghz); 8Gb RAM; Radeon HD 6950 2Gb
Я это понимаю. Хотел предложить другое, просто выразился коряво в 1 ночи))) разделить генерацию на 2 этапа, сейчас она идет процедурно, как я понимаю. При приближении идет генерация планеты лодов и т.п.. Так оставить на 1 этапе. А уже при посадке создать 2 этап генерации. Болиие глобальный расчет с атмосферой и всем остальным. Что бы движек не перенапригался, а работал на планету по которой ходишь. Атмосферные эффекты сильно загрузят движок в такой глобальной системе как сейчас. А хочется планету во всей красе ощутить. Пусть даже не так быстро грузиться и выгружаться при взлете все будет. Высадился на планету идет ее генерация с водой, физикой атмосферой химией. Не отдельной процедурой движка, а полностью движком на 90% 10% на расчет движения в солнечной системе тел. Я не знаю как это называется на языке программистов))) Когда часть программы выгружается а часть загружается. Вот в чем мое предложение.
То-есть пока планета в кеше, но мы очень далеко от неё( на другом конце системы например) она куб? Если я правильно понимаю технологию, то когда мы очень далеко, планета - спрайт (плоский квадрат ;). Кэшируется не геометрия а текстура. И вот этих текстур верхнего уровня - шесть (на самом низком лоде). Они накладываются на грани "раздутого" до сферы куба.
Не куб и не спрайт, а шарик с одной текстурой 256*128, если подлететь ближе - шарик с 6 текстурами, ещё ближе - каждая рекурсивно делится на 4.
Quote (alexxbumer1)
Не отдельной процедурой движка, а полностью движком на 90% 10% на расчет движения в солнечной системе тел. Я не знаю как это называется на языке программистов))) Когда часть программы выгружается а часть загружается. Вот в чем мое предложение.
Всё равно не поятно. Зачем что-то выгружать, SE и так генерирует, обсчитывает и рендерит только то что непосредственно видно или влияет на видимые объекты.
Не куб и не спрайт, а шарик с одной текстурой 256*128, если подлететь ближе - шарик с 6 текстурами, ещё ближе - каждая рекурсивно делится на 4.
Так ведь с другого конца системы на месте планеты видна лишь звездочка (если не использовать экстремально маленький FOV). Я и предположил, что эта звездочка отрисовывается как спрайт Или даже на таком расстоянии генерируется геометрия планеты?
И вопрос про повышение реалистичности: А что мешает реализовать процедурную детализацию для планет с заданными вручную текстурами?
Как я понимаю, достаточно на тех нодах, для которых нет заданной вручную текстуры/карты высот, запустить алгоритм процедурной генерации текстур/карт высот поверхности, считая ноды уровнем выше (для которых текстуры есть) предыдущей итерацией (т.е. не считать первые несколько октав шума, а остальные накладывать на существующую текстуру).
Или есть какие-то подводные камни?
Нашел объяснение проблем в теме про SpaceEngine на gamedev.ru.
Quote (Neptune)
Эти шумы по-видимому связаны с достижением предела точности float в шейдере, который генерирует текстуры. Там для вычисления значений фрактальных функций в точке на поверхности нужно знать 3D координаты этой точки, т.е. опять величины вроде 1.000151, 0.9991531 (т.к. только трёхмерный Перлин, Вороной и т.д. можно использовать для круглой планеты, двумерный неизбежно даст артефакты, сжатие масштабов и т.д. на полюсах или на краях граней кубической текстуры). Пока не знаю как обойти это. Edit: можно сделать такой чит: генерировать честно текстуры до уровня 10 метров, а следующие несколько уровней делать на основе уже сгенерированных верхних текстур, просто разбиением вроде diamond-square или тем же Перлином, но двумерным. Заметно не будет, тем более что те детальные текстуры и так мапятся в текстурных координатах граней куба. Кстати, такое увеличение детализации последнего уровня можно использовать на Земле и других планетах, заданных готовыми текстурами. Только я пока не представляю, как так же увеличить детализацию цветовой текстуры (до этого я говорил только о карте высот).
Windows 7 x64; Core i5-2500K (3.3 Ghz); 8Gb RAM; Radeon HD 6950 2Gb
Сообщение отредактировал mindstalker - Понедельник, 19.11.2012, 20:40
Так ведь с другого конца системы на месте планеты видна лишь звездочка (если не использовать экстремально маленький FOV). Я и предположил, что эта звездочка отрисовывается как спрайт Или даже на таком расстоянии генерируется геометрия планеты?
Да, звёздочка-спрайт.
Quote (mindstalker)
И вопрос про повышение реалистичности: А что мешает реализовать процедурную детализацию для планет с заданными вручную текстурами? Как я понимаю, достаточно на тех нодах, для которых нет заданной вручную текстуры/карты высот, запустить алгоритм процедурной генерации текстур/карт высот поверхности, считая ноды уровнем выше (для которых текстуры есть) предыдущей итерацией (т.е. не считать первые несколько октав шума, а остальные накладывать на существующую текстуру). Или есть какие-то подводные камни?
Мешает то, что нет никаких итераций. Генератор создаёт текстуру любого уровня сразу со всеми октавами шумов. Чтобы сделать последовательную генерацию, используя верхние уровни как основу, нужно сильно переделывать генератор. А для реальных планет нужна как-то генерировать цветовую текстуру, учитываю цвета последнего уровня с реальными текстурами.