Artlav
была раньше игруха такая - сакрафайз, не помню как по английски пишется, типо играешь за посланников богов, вот там была забавная оптимизация - довольно угловатые монстры оптимайзились на глазах по мере удаления, поэтому видимость была довольно далёкая и скорость приличная, ибо жутко угловатые модели из пары десятков полигонов вполне сносно смотрелись на горизонте и не жрали ресурс будь их там хоть сто, может если прикрутить такой алгоритм к твоим планетам будет норм? они же довольно гладкие и оптимизация может идти глаже чем подгружение лодов + она может идти до определённой степени и срезать лишнии полики не подчёркивающие форму.
reQuiem
> У тебя сейчс планета-камень\-пустыня\-лед. ЛУчше когда комбинируется +
> океаны\разбитие на материки, изменение типа поверхности по долготе.
Это уже следующий уровень, для котороно нужно накопить базовых ландшафтов.
> и еще, почему лед в расщелинах\ на низких уровнях а не наоборот? O_o
Потому что это ваккумная леденистая планета - лёд на ней постоянен и накоплен, а не идёт с неба дождём и замерзает.
kinyz
> может если прикрутить такой алгоритм к твоим планетам будет норм? они же
> довольно гладкие и оптимизация может идти глаже чем подгружение лодов + она
> может идти до определённой степени и срезать лишнии полики не подчёркивающие
> форму.
Вообще то это и есть грубое описание того, как у меня рисуются планеты - чем дальше, тем меньше.
ну у тебя идёт подгрузка лодов и то что это происходит на лету очень заметно, а там есть модель 1 для кадого монстра, но в зависимости от дальности до неё у неё определённые точки по опредлённым провилам калапсятся и в моделе постепенно уменьшается количество треугольников.
kinyz
> подгрузка лодов
Не подгрузка, а генерация.
Более четкой модели не существует до того, как мы подлётом не приведём к её генерации.
Есть функция, задающая поверхность. По ней строится сетка модели и раскраска.
Если мы удаляемся, более чёткий элемент скрывается, оставляя более грубый.
ну вот, а я имею ввиду что сразу генерируется высокодетализированый, а потом жёстко оптимайзится на лету до страшной угловатости, а потом по мере подлёта оптимизация убавляется и получается более детальная модель. это сжирает ресурс наверное, но можно как-то наверное совместить эти два способа)
kinyz
> сразу генерируется высокодетализированый,
А для какого места генерировать?
Ведь нельзя же предсказать, куда игрок полетит.
прикольно, не пожалел трафа.
Видео с розовой планетой - супер.
А где можно скачать програмку, чтобы полетать?
Хочу еще у вас в симуляторе увидеть взрыв сверхновой!:)
Artlav
для всей планеты, но это по ходу мего жир)))
kinyz
> для всей планеты, но это по ходу мего жир)))
Давай прикинем.
Для планеты размером с Землю на имеющемся у меня разрешении в 1 пиксель на 10 квадратных метров имеем 200 000 гигабайт текстур и 18 000 гигабайт поверхностной сетки, на генерацию которых уйдёт около 166 лет.
Sergio666
> Видео с розовой планетой - супер.
> А где можно скачать програмку, чтобы полетать?
>
> Хочу еще у вас в симуляторе увидеть взрыв сверхновой!:)
Наверное выложу к концу месяца.
А вот про сверхновую - ещё не знаю.
Artlav
> Наверное выложу к концу месяца.
Жду!
> А вот про сверхновую - ещё не знаю.
Хорошо было бы. Выглядело бы очень эффектно. Только надо посмотреть на реальные фотки, и сделать так же, как у вас уже сделаны планеты - с научным подходом ;)
Ледяные спутники почти целиком состоят из замёзрзших льдов (вода, угл. газ, метан и т.д.), тяжёлые элементы (т.е. камни и металлы) в процессе эволюции опустились к центру и сформировали ядро спутника. Поэтому а поверхости такого тела не должно быть торчащих чёрных скал, должен быть сплошной лёд и снег, с примесью пыли. Формы рельефа - обширные плоские равнины, кратеры, стокилометровые трещины во льду. То что ты сделал (на видео) похоже на каменистый спутник (типа Луны) с замёрзшей атмосферой. На Плутоне такое бывает - атмосфра замерзает и выпадает на поверхность снежком:) Почитай в инете про спутники Юпитера и других планет-гигантов.
Вообще, по-моему, самый реалистичный алгоритм генерации поверхности - это моделирование эволюции тела. Например начинаем с гладкого застывшего жидкого шара, бомбим его сначала гигантскими астероидами (планетезималями) - получаются гигантские ударные бассейны, как лунные моря, залитые лавой низины, и гагантские разломы коры. Потом пару миллиардов лет бомбим всё уменьшающимся потоком более мелких астероидов. Получается реалистичная Луна. Для планет с атмосферой кратеры постепенно затираются, для планет с водой придётся моделировать движение литосферных плит и т.д. Зато тогда легко можно будет сделать путешествие не только в пространстве, но и во времени:) Дополнить кодом планетогенезиса, взрывами от падения астероидов и взрывами звёзд:)
Насчёт видео: почему бы для записи демок не отключить создание текстур и рельефа в параллельном потоке? Я в своём движке сделал 2 режима: real time, когда тик времени - по системному счётчику, а подгрузка текстур во втором потоке, и frame time, когда тик времени - константа (т.е. в начале каждого кадра time+=const), а загрузка идёт в том же потоке - если нужна текстура, она тут же грузится, потом рендер продолжается. В итоге на демках нет лагов и не заметно подгрузки, как будто всё уже и так в памяти:)
На видео при подлёте к планете на её краю заметен жестокий z-fighting. Не хватает точности z-буфера? Я например при рендере планет делаю разбиение z-буфера (управляя ближней и дальней плоскостями с помощью glDepthRange) таким образом, чтоб пустое пространство между планетами не занимало места. Т.е. если например на экране две планеты, не перекрывающиеся по z, z-буфер делится пополам: для дальней glDepthRange(0.5, 1.0), для ближней glDepthRange(0.0, 0.5). Ближнюю устанавливаю чуть ближе ближней поверхности планеты, дальнюю - чуть дальше центра. В итоге никакого z-fighting'а нет. Только если очень близко подлететь к поверхности, начинает колбасить далёкие горы, но тогда они уже скрыты за коризонтом. Вообще говоря, в таком случае можно даже тупо юзать алгоритм художника, рисовать планеты от дальних к ближним, перед каждой планетой очищая z-буфер. Останется только управлять плоскостями отсечки. И не забыть группировать планеты, перекрывающиеся по z.
Neptune
> Насчёт видео: почему бы для записи демок не отключить создание текстур и
> рельефа в параллельном потоке?
> ...
> В итоге на демках нет лагов и не заметно подгрузки, как будто всё уже и так в памяти:)
Идея хорошая, выглядеть на видео будет прекрасно, вот только проблема - не честно же ведь?
Neptune
> На видео при подлёте к планете на её краю заметен жестокий z-fighting. Не
> хватает точности z-буфера? Я например при рендере планет
> ...
> Останется только управлять плоскостями отсечки. И не
> забыть группировать планеты, перекрывающиеся по z.
Что очень хорошо описывает используемый мной алгоритм - 2 прохода по Z-буферу, по одному блоку на планету, планеты отсортированы.
z-fighting вызван тем, что алгоритм несколько разлажен - кольца планет рисовались в планетном окне, и для них нужно было ставить очень близкие значения.
В общем, уже исправлено.
Neptune
> Вообще, по-моему, самый реалистичный алгоритм генерации поверхности - это
> моделирование эволюции тела.
Легко сказать...
А вот как результат выразить фрактальной функцией?
Artlav
> Идея хорошая, выглядеть на видео будет прекрасно, вот только проблема - не честно же ведь?
Ну и что, зато можно будет снимать красивые ролики:)
> кольца планет рисовались в планетном окне, и для них нужно было ставить очень близкие значения.
По-идее для колец не нужен z-буфер, они же полупрозрачные. Надо разбить кольцо на две половинки - дальнюю и ближнюю, и рисовать художником: дальняя, планета, ближняя. Но всю малину портят спутники, которые могут быть внутри кольца, из-за них приходится рендерить кольцо с включенным z-тестом... Поэтому у меня спутники Сатурна иногда просвечивают сквозь него... А как ты разобрался с кольцами?
> А вот как результат выразить фрактальной функцией?
У тебя же вроде вполне реалистично получалось, хотя я не видел, чтобы кратеры накладывались друг на друга. По идее более "свежий" кратер должен разрушать вал более древнего. Как у тебя работает кратерная функция?Artlav
Тема в архиве.