Войти
ФлеймФорумРазработка игр

Реальный радиус Земли, Z-up и горизонт

Страницы: 1 2 Следующая »
#0
18:34, 24 фев. 2016

Извиняюсь за глупый-преглупый вопрос... Но у меня совсем нет опыта на эту тему.

Итого:
Есть большой бесшовный мир.
Вблизи - детализирован. Вдали - LODы (несколько ступеней).
Надо сделать far land. Т.е. игрок с некоторых точек видит дальние земли (например, с горы - дальше).

В общем, карта представляет собой две горы, перевал и большую равнину с лесом снизу, берег моря и океан уходящий за горизонт. С горы игрок может "охватить взглядом" всю карту, на равнине же видно только 2 км до горизонта и горы вдали. В лесу - и того меньше.

Можно это сделать относительно условно - "туманом" и ограничением дальности видимости.
Но мне пришла в голову идея просто реально нанести кусок ландшафта на кусок сферы радиусом 6400 км. Например, если игровая область будет 10х10 км, то добавим вокруг 30х30 км "дальних земель" и получим естественную линию горизонта за счёт "заворачивания" сферы. А дальше - просто изменять Z-up вектор чтобы сохранить правильную ориентацию камер и объектов. В смысле, как "в простой физике".

Это бред или так можно делать? И как этот вопрос решается в "нормальных" случаях?


#1
20:23, 24 фев. 2016

eugeneloza
Т. е. логически мир плоский?
И ты пытаешься дальнюю геометрию прятать, аппелируя к знакомому землянам явлению горизонта?

The disc, being flat, has no real horizon. Any adventurous sailor who got funny ideas from staring at eggs and oranges for too long and set out for the antipodes soon learned that the reason why distant ships sometimes looked as though they were disappearing over the edge of the world was that they were disappearing over the edge of the world.
― Terry Pratchett, The Light Fantastic

Ещё вспомнилось:
http://freespace.virgin.net/hugo.elias/models/m_clouds.htm

#2
20:37, 24 фев. 2016
Т. е. логически мир плоский?

Ну, в общем, декартова система координат в которой DirectionUP=(0,0,1) является плоским миром. В таком мире (грубо) будет видно любую бесконечно-удалённую точку на поверхности мира, если она не закрыта другими объектами рельефа. Нереалистично и непрактично. Сферическую геометрию считать - тоже не из лучших занятий с точки зрения FPS.
Приблизительный (точности тут не надо) горизонт - самое оно. До горизонта 2 км, размер игровой области, скажем, 10км - на фоне возвышаются горы, залез на гору - видно равнину "как на ладони" (естественно, замыленную дымкой, LOD-нутую) - всё как надо.
Но, не будет ли проблем, если я буду делать (приблизительно для x<<R, y<<R) DirectionUP=(x/R,y/R,1/sqrt(1-(x^2+y^2)/R^2))? Механически это "оно". Но, что-то у меня закрадываются впечатления, что "так люди не делают" - именно в играх.
Я понимаю, что проще дать "туман" и скрыть горизонт. Но хочется ясной и солнечной погоды иногда хоть :)
+ Ну, типа...
#3
22:18, 24 фев. 2016

eugeneloza
В масштабе карты 30х30 км земля плоская и горизонт тебе никак не поможет.

#4
22:53, 24 фев. 2016

-Eugene-
До горизонта 2 5 км при взгляде с человеческого роста (если не ошибаюсь, давненько всю эту геометрию изучал // проверил: да, Изображение, похоже). 10х10 км перекроет это расстояние 4 полтора раза. 30х30 км (такого в игре нет, это far land, который видно только с горы в хорошую погоду) - 13 6 раз.
Можно просто на 2км дать туман и всё, особенно учитывая, что какую-то дымку таки придётся делать. Но это ведь так просто - поменять DirectionUp простой формулой от координат, учесть сферичность поверхности в модели динамически-генерируемого ландшафта и всё - естественно и красиво. Я сделал участок сферы и ни о чём не думаю, всё становится на свои места автоматически. Мне даже объекты на карте не надо будет крутить - просто крутить весь контейнер. Углы будут измеряться десятитысячными радиан - т.е. для большинства механик вообще не будут ни на что влиять...
Вопрос простой - так делают?

Похоже, что нет :) Может, я что-то не понимаю... ведь всё просто как интеграл Эйлера-Пуассона...

Если нет - почему? Например, могут быть глюки камеры при минимальной смене DirectionUp (но вроде во всяких леталках там она "как попало" крутится)...
Может физика заглючить на переменной силе гравитации? (у меня физики почти нет, но в перспективе может появиться)
#5
23:14, 24 фев. 2016

eugeneloza
> До горизонта 2 км при взгляде с человеческого роста
А с 25 этажа я вижу на 30+ километров.
И гору тоже буду видеть на таком расстоянии.

> Если нет - почему?
Лочить камеру на up=(0,1,0) намного проще, чем на переменную ось.
И ты не получаешь ничего, кроме проблем.
На 30 км плоскость отличается от сферы на 70 метров. Ты надеешься получить визуальный эффект от каких-то 70 метров?

#6
23:46, 24 фев. 2016
Ты надеешься получить визуальный эффект от каких-то 70 метров?

Нет, от естественности горизонта :) Достаточно 2 метра, чтобы объект за ним скрылся. А на 70 метров и 30 этажный дом скроется.
Лочить камеру на up=(0,1,0) намного проще, чем на переменную ось.

Эммм... почему? Не, ну ясное дело, что (0,0,1) проще, чем (0.0011048543456,0.0011048543456,0.9999987793). Но если при смене текущего чанка будет просто player.camera.DirectionUp:=Chunk[x,y].Up...? Даже пересчёта делать не надо - всё считается один раз при генерации локации.
(Я понимаю, что скорее всего именно здесь собака и зарыта - хочется для себя разобраться "почему" :) Благодарю за ответы.)
10х10 км это я даю "навскидку" размер, возможно, в процессе балансировки геймплея он будет увеличен (или, что вряд-ли, уменьшен). Кроме того, буду ещё крутить радиус планеты (сейчас Плаиза - планета Земного типа с 0.9g, т.е. радиус процентов на 5 меньше, но возможно это также будет изменяться, есть ещё одна небольшая открытая локация на планете Фроза с 0.3g, но она в кратере, и ещё один небольшой кратер на Аккумуле (0.1g - радиус планеты 1000 км.)). Все эти цифры будут, возможно, изменяться для более интересных эффектов, возможно, с учётом горизонта :) Это не самоцель, но если так получилось бы - было бы хорошо.
Иной пример (эту "вторую" игру я скорее всего делать не буду - по крайней мере, не в обозримом будущем): размер территории 200х200 км (но там с far land проще - там вокруг плотная цепочка гор).
#7
0:11, 25 фев. 2016

eugeneloza
> Нет, от естественности горизонта :) Достаточно 2 метра, чтобы объект за ним
> скрылся. А на 70 метров и 30 этажный дом скроется.
У тебя что, симулятор сковороды? Естественный перепад высот хотя бы в сотню-другую метров, и эти 70м уже никто не разметит.

> Эммм... почему?
/пожимает плечами/

#8
0:15, 25 фев. 2016

Всякие леталки юзают горизонт - им оно как бы по чину положено.
Например:
https://www.microsoft.com/Products/Games/FSInsider/developers/Pag… lTerrain.aspx

#9
13:12, 25 фев. 2016

Делать надо то, что проще дает приемлемый для потребителя результат.
Если на террейне подразумевается какая-то игровая логика с физикой, реальные искажения поверхности лишь добавят гимора, а результат для игрока в лучшем случае не будет сильно отличаться от того, что делают другие обычным туманом видимости.
имхо.

#10
14:12, 25 фев. 2016
террейне подразумевается какая-то игровая логика с физикой

Не подразумевается, кроме несущественного "падения" выброшенных предметов, да падения с небольшой высоты. Игра почти пошаговая. Максимум: ragdoll для трупов, но пока даже и её не предвидится.
реальные искажения поверхности лишь добавят гимора

Подозреваю, что могут быть проблемы... По этому и создал тему... но пока ни одной кроме незначительного усложнения формул при генерации ландшафта так и не увидел... А обидно будет потратить несколько дней-недель, сделать и наткнуться на трудноразрешимую проблему или неоправданное падение FPS и переделывать назад.
Просто один раз в 10 минут перещёлкнуть DirectionUp на соответствующий текущему чанку... (при генерации ландшафта, объектов на поверхности - не в счёт, но там тоже проблем особых нету, я всё заворачиваю в TTransformNode и вообще не думаю про ориентацию... Может, стоит будет базовый ландшафт "перезавернуть" отдельно, чтобы избежать швов... но по сравнению с остальными проблемами, с которыми я воюю - это мелочи (например, недавно провозился несколько часов, чтобы разобраться как после существенного изменения DirectionUp апдейтнуть камеру в движке без скачка... сейчас воюю как правильно упрощать чанки, чтобы обеспечить максимальный FPS и при необходимости выгружать текстуры из памяти... Это куда сложнее.)).
не будет сильно отличаться

Но всё-таки будет. Хочу хоть иногда ясной погоды - солнца, не хочу вечного тумана :) Если весь "гимор" сводится к "один раз при генерации рассчитать, а потом изредка (при смене относительно большого чанка) изменять DirectionUp", то меня это с головой устраивает. Ради естественности мне не составляет ни минимальной проблемы добавить один множитель в формулу для ландшафта и ещё одну формулу для расчёта DirectionUp и соответствующей обёртки TTransformNode - и у меня сразу автоматом "уходит" проблема, какого размера делать Far Land, как определять степень упрощения чанка (до какого LOD-a) или вообще его скрывать.
Это принцип - сделал и забыл. Естественность будет сама заботиться о себе. Даже если вдруг стукнет в голову сделать одну из локаций  почти на полушарие (например, возможность полетать над игровой локацией и в ближайших окрестностях)... Изменить одну константу - размер генерируемой Far Land и задача решена (почти - надо будет разнообразить Far Land, но это к вопросу отношения не имеет).
#11
14:24, 25 фев. 2016

На мой взгляд, проще всего нелинейно деформировать всю сцену, сдвинув ее по Z на −α(x²+y²), начало координат — в точке игрока.
При этом физику и прочий геймплей можно считать, по-прежнему, в плоском недеформированном мире.

#12
17:27, 25 фев. 2016

Нужно эксперементировать, и тестировать как это будет выглядеть.

Мир - плоский может быть, достаточно вершины правельно сдвинуть.
https://www.dropbox.com/s/1smn8kqjshlahl2/openGL_core_release_201… _906.avi?dl=0

Можно натянуть на сферу площать который на порядки меньше минра.
https://www.dropbox.com/s/hwtpjwxdqic2emo/openGL_core_Debug_2012_… _921.avi?dl=0

В игре - только трансформация вершин, модифицирована в вершинном шейдере.
https://www.dropbox.com/s/zthu9s9bzfaz6vj/javaw%202013-07-19%2017… -564.avi?dl=0

Можно наоборот
https://www.dropbox.com/s/8hvao87wekzo46x/javaw%202013-07-19%2022… -087.avi?dl=0

#13
20:03, 25 фев. 2016

susageP
Ух... "наоборот" вообще шик.
}:+()___ [Smile]
Хм... похоже, действительно, вершинный шейдер на −α(x²+y²) куда более простое и разумное решение! Надо поразмыслить... Благодарствую!!!

#14
20:48, 25 фев. 2016

susageP
Тени плющит

Страницы: 1 2 Следующая »
ФлеймФорумРазработка игр

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