Космосим в Unity
|
|
Rater | Дата: Пятница, 23 Декабря 2016, 07:46 | Сообщение # 1 |
был не раз
Сейчас нет на сайте
| Здравствуйте.
Подскажите принцип обхода ограничения размерности float для сцены при рисовании космоса? И как одновременно показать, например вражеский корабль, который на расстоянии 10 км от игрока и планету которая занимает весь экран. Т.е. корабль на фоне планеты. Скайбокс, мне кажется, не подходит т.к. планета должна освещаться с одной стороны и менять размер при приближении удалении. Если изменить масштаб всего чтоб влезло во float, то как быть с передвижениями на небольшие расстояния?
Надеюсь понятно объяснил...
Спасибо.Добавлено (23 декабря 2016, 07:46) --------------------------------------------- Нет идей?
У меня такие мысли: Храним глобальные координаты объектов в переменных типа Decimal. В зависимости от скорости движения меняем масштаб мира - т.е. при высоких скоростях 1 ед. Unity = 10000м (примерная цифра) при снижении скорости масштаб меняем ближе к 1:1 (для оч. низкой скорости и остановки). Яркие объекты масштабируем и располагаем на некой границе мира Юнити (т.е. с координатами ближе 200`000 ед. Unity). Данный подход не решает вопрос об отображении оч. больших объектов вблизи. Например планета Земля это 12`000`000 м в диаметре. Мне кажется движок Unity офигеет от сферы такого диаметра.
Всем удачного игростроя! Мой первый "игроблин"!
Сообщение отредактировал Rater - Четверг, 22 Декабря 2016, 21:02 |
|
| |
Ranger | Дата: Вторник, 27 Декабря 2016, 17:28 | Сообщение # 2 |
почти ветеран
Сейчас нет на сайте
| Следующий вопрос, подозреваю, будет как натянуть hires текстуру на планету Цитата Rater ( ) 12`000`000 м в диаметре.
Цитата Rater ( ) Скайбокс, мне кажется, не подходит т.к. планета должна освещаться с одной стороны и менять размер при приближении удалении. планету на отдельный слой. показывать другой камерой.
Цитата Rater ( ) Подскажите принцип обхода ограничения размерности float для сцены при рисовании космоса? не хватает размерности? (можно отскейлить 1/1000 как решение например) Точно не хватает размерности ? можно делать свои вектора на float*float или double*double
|
|
| |
Rater | Дата: Среда, 28 Декабря 2016, 21:49 | Сообщение # 3 |
был не раз
Сейчас нет на сайте
| Цитата Ranger ( ) планету на отдельный слой. показывать другой камерой. Это как? Не могу понять принцип. Поможет ли для детального отображения близких и небольших объектов и очень больших, но расположенных дальше. (Т.е. корабль на фоне планеты.)?
PS Пока просто продумываю как такое можно реализовать.
Всем удачного игростроя! Мой первый "игроблин"!
|
|
| |
Qst | Дата: Пятница, 13 Января 2017, 13:06 | Сообщение # 4 |
был не раз
Сейчас нет на сайте
| т.е. надо что бы можно было подлететь к планете с расстояния 100000000000, где её видно точкой к расстоянию 100, где она занимает 100000 экранов? если игра 2д, то разные спрайты для разных расстояний + шейдеры. если игра 3д, то.. ну проверь всё-таки как юнити будет реагировать на очень большой объект, интересно даже) а если нет, то опять же можно сделать вторую камеру и там сферку увеличивать в размерах до определённого формата, потом менять на квад - когда планета очень близко, можно уже приравнять поверхность к плоскости.
но вообще, если тебе такое потребовалось, но мне кажется с геймдизайном что-то не то.
|
|
| |
alexsilent | Дата: Пятница, 13 Января 2017, 18:16 | Сообщение # 5 |
почти ветеран
Сейчас нет на сайте
| всё очень просто... После перехода определённого удаления от центра, сдвинуть вообще все объекты мира на (координаты центра) минус (твоя позиция), то есть герой или камера должна сместиться ровно в Vector3(0,0,0), а все вокруг объекты сдвинутся относительно перемещения героя на то же расстояние
только сдвиг должен быть моментальным, чтоб не было заметно, что мы что-то резко телепортировали, это что касается графики, а просчитывать глобальные расстояния огромных объектов должен какой-то особый скрипт, который мерит всё либо секторами, либо всё упрощается, то есть, к примеру 1 парсек в скрипте равен всего лишь 1.0, или больше или меньше, всё зависит от ваших амбициозных планов
Сообщение отредактировал alexsilent - Пятница, 13 Января 2017, 18:22 |
|
| |
EchoIT | Дата: Пятница, 13 Января 2017, 19:26 | Сообщение # 6 |
старожил
Сейчас нет на сайте
| Цитата Это как? Не могу понять принцип. Тогда сомневаюсь, что вам стоит заниматься таким проектом в данный момент.
К слову, не думаю, что требуется 100% правдоподобность масштабов в данном случае. Если уменьшить планету в 10 раз относительно реального размера, обычный игрок всё равно не заметит разницы.
Долгожданный анонсик: State of War
Сообщение отредактировал EchoIT - Пятница, 13 Января 2017, 19:27 |
|
| |
Ranger | Дата: Суббота, 14 Января 2017, 10:04 | Сообщение # 7 |
почти ветеран
Сейчас нет на сайте
| Цитата EchoIT ( ) К слову, не думаю, что требуется 100% правдоподобность масштабов Да. При fov 60, чтобы планета заняла весь экран при d = 12 Mm, дистанция до нее составит 10.4Mm Чтобы долететь до нее хотя бы за час потребуется скорость 3 км/c. Т.е космическую станцию размером с километр игрок пролетит за .3 сек. А попасть на таких скоростях в небольшой кораблик вообще не будет никакой возможности.
Сообщение отредактировал Ranger - Суббота, 14 Января 2017, 10:04 |
|
| |
Rater | Дата: Вторник, 17 Января 2017, 22:22 | Сообщение # 8 |
был не раз
Сейчас нет на сайте
| Цитата Ranger ( ) А попасть на таких скоростях в небольшой кораблик вообще не будет никакой возможности. Хм. Попасть да трудно - а увидеть приближающийся/удаляющийся корабль...? А если скорость маленькая - 0.1км/с и корабли по курсу друг за другом почти... считать что корабль дальше 100 км уже не видно и не показывать пока ближе не прилетит?
PS Всем спасибо что обсуждаете. :-)
Всем удачного игростроя! Мой первый "игроблин"!
|
|
| |
alexsilent | Дата: Пятница, 20 Января 2017, 13:28 | Сообщение # 9 |
почти ветеран
Сейчас нет на сайте
| К моему выше сказанному. Большие объекты должны быть маленького радиуса, НО они должны быть привязаны к позиции камеры. И перемещаться и увеличиваться с помощью расчётного скрипта привязанного к каждой планете. Я не могу подсказать детали, ибо не люблю математику) но даже маленькая планета, если будет привязана (не родительством, а скриптом, чтобы не изменять угол при изменении угла камеры) на небольшом расстоянии к камере, то будет казаться, что это что-то огромное и очень далеко.
Сообщение отредактировал alexsilent - Пятница, 20 Января 2017, 13:28 |
|
| |
Rater | Дата: Вторник, 31 Января 2017, 20:47 | Сообщение # 10 |
был не раз
Сейчас нет на сайте
| А вот меня посетила идея: Использовать помимо position ещё и scale для отображения объектов. Т.е. рисуем в 3D объекты 1:1 потом добавляем в юнити и при отдалении на некоторое расстояние начинаем Scale менять. С учётом того что мы знаем что реальный Scale = 1, то можно вычислить позицию относительно игрока. Интересно получится что-то таким методом или путаница будет?
Всем удачного игростроя! Мой первый "игроблин"!
Сообщение отредактировал Rater - Вторник, 31 Января 2017, 20:48 |
|
| |