|
3 / 3 / 0
Регистрация: 18.01.2024
Сообщений: 168
|
|
Как избежать проблем с плавающей запятой на больших картах21.04.2024, 16:42. Показов 2738. Ответов 34
Всем привет!
Собственно, уже второй раз поднимаю этот вопрос. Первая тема носила теоретический характер. Я как бы слышал об этой проблеме, но не сталкивался с ней вживую. А вот теперь, когда настала пора собрать мои наработки в кучку, вижу, что проблема реально есть и я даже пока вообще не представляю как ее решить. Имеется карта размером 6000х6000 юнитов (6х6 км). Совсем небольшая карта, если в игре есть автомобиль. Центр координат в центре карты, т.е. если отойти на край карты, удаление от центра будет +/- 3000. И вот на этом удалении имеем вот это: Дрожание анимации персонажа начинается уже где-то при удалении от центра на чуть больше 1000 юнит. Чем дальше, тем хуже. Т.е. эффективная карта должна быть 2х2 км (с 0:0:0 в центре), чтобы не было такого дрожания. Но это же несерьезно в 2024 году. Я читал про джиттеринг и способы его решения методом переноса центра координат мира к игроку и т.д. Но, во-первых, все эти методы довольно старые, я нахожу статьи и видео 2019-2020 года. И они не идеальны, т.к. несут некоторые проблемы. К тому же незнание английского языка не способствует хорошему пониманию найденного материала (переводчик переводит, но как-то не так, как это хочет сказать автор). Вопрос к форумчанам. Если кто-то делал большие открытые миры, кто как решал проблему с джиттерингом плавающей запятой?
0
|
|
| 21.04.2024, 16:42 | |
|
Ответы с готовыми решениями:
34
Возможные проблемы значений с плавающей запятой на больших расстояниях от начала координат Смена структуры: как избежать проблем Как избежать сокращения для чисел с плавающей точкой? |
|
298 / 260 / 108
Регистрация: 26.10.2012
Сообщений: 810
|
|
| 23.04.2024, 07:21 | |
|
0
|
|
|
3 / 3 / 0
Регистрация: 18.01.2024
Сообщений: 168
|
|
| 24.04.2024, 01:08 [ТС] | |
|
Кстати, пока тестировал смещение начала координат, призадумался, а как реализовывать сохранения в таком случае? Сейчас у меня сохраниться можно в любом месте, так как позиция мира неизменна. Сохранил текущий вектор персонажа - загрузил сохраненный вектор. А при использовании смещения начала координат, положение мира и всего что на нем, будет сбрасываться. И как тогда получать координаты (персонажа, к примеру) и загружать их?
0
|
|
|
270 / 202 / 30
Регистрация: 26.11.2022
Сообщений: 879
|
|
| 24.04.2024, 02:02 | |
|
чем мешает классический вариант - разбиение неограниченного мира на кубики по 1км на 1км, их динамическая подгрузка и переход между ними?
0
|
|
|
3 / 3 / 0
Регистрация: 18.01.2024
Сообщений: 168
|
|
| 24.04.2024, 02:08 [ТС] | |
|
Aledveu, мир будет наподобие пустыни из игры Mad Max. Переход с локации на локацию прям посреди пустыни такое себе...
0
|
|
|
270 / 202 / 30
Регистрация: 26.11.2022
Сообщений: 879
|
|
| 24.04.2024, 02:17 | |
|
alexsecl, это не переход с локации на локацию.
это метод организации неограниченного мира. мир делится на регионы - обычно квадратные. количество загруженных регионов определяется дальностью прорисовки + запас. переход между регионами происходит мгновенно ибо это просто представление координат. регионы постепенно подгружаются по мере движения персонажа. это классический типовой подход для неограниченного мира.
0
|
|
|
3 / 3 / 0
Регистрация: 18.01.2024
Сообщений: 168
|
|
| 24.04.2024, 11:45 [ТС] | |
|
Aledveu, вы имеете ввиду что-то типа такого?
Если да, то эта система подзагрузки/выгрузки регионов призвана улучшить производительность игры, а не решить проблемы с плавающей запятой на удалении от начала координат, нет разве? Допустим, первый регион расположен по координате 0,0,0. Второй регион по координате 1000,0,0. Третий - 2000,0,0. И т.д. Чем дальше от нуля, тем больше проблем с плавающей запятой. Если вы что-то другое имели ввиду?
0
|
|
|
298 / 260 / 108
Регистрация: 26.10.2012
Сообщений: 810
|
||||
| 24.04.2024, 12:40 | ||||
|
0
|
||||
|
3 / 3 / 0
Регистрация: 18.01.2024
Сообщений: 168
|
||
| 24.04.2024, 12:51 [ТС] | ||
|
0
|
||
|
270 / 202 / 30
Регистрация: 26.11.2022
Сообщений: 879
|
||
| 24.04.2024, 14:56 | ||
|
при переходе в другой регион нулём становится ноль региона. абсолютные координаты региона можно хранить хоть в int64_t, но они для отображения не нужны - они только когда ищется соседний регион или надо карту всего мира сделать.
0
|
||
|
400 / 309 / 104
Регистрация: 07.05.2017
Сообщений: 2,228
|
|
| 24.04.2024, 15:37 | |
|
самый главный момент, это смещения игрока и мира на один вектор(одно и то же расстояние). что бы игрок стал в ноль и мир сместился с ним на такое же расстояние. например это можно делать во время загрузки игры.
тут человек предложил тип данных double. эти данные используются в банковской системе. и не спроста. в них число чисел после запятой на порядки больше, а следовательно, точность возрастает. как вариант использовать самописную структуру типа Vector3 или полностью Trancform, но не на float, а на double. но расчеты таких чисел будут медленнее и памяти они занимают больше. для мощного железа, это конечно не особо критично, но все же... думаю нужно колдовать с синхронным перемещением мира и игрока в удобные моменты, чтоб не было особо заметно.
0
|
|
|
270 / 202 / 30
Регистрация: 26.11.2022
Сообщений: 879
|
|
| 24.04.2024, 17:31 | |
|
Gammister, никаких даблов - даже не думайте в эту сторону.
конечные трансформации будут производится в шейдерах на видеокарте и никаких гарантий что у пользователя видюха будет их поддерживать и не сконвертирует во флоаты. это как раз одно из основных отличий профессиональных графических карт от игровых - что на профессиональных полная поддержка даблов для расчётов как на уровне аппаратуры так и драйверами. а для игр достаточно точности флоатов.
0
|
|
|
400 / 309 / 104
Регистрация: 07.05.2017
Сообщений: 2,228
|
|
| 24.04.2024, 19:03 | |
|
спасибо за подсказку. буду иметь в виду
0
|
|
|
3 / 3 / 0
Регистрация: 18.01.2024
Сообщений: 168
|
||
| 24.04.2024, 19:18 [ТС] | ||
|
0
|
||
|
298 / 260 / 108
Регистрация: 26.10.2012
Сообщений: 810
|
||
| 25.04.2024, 14:22 | ||
|
Разве что запилит там аддонами полностью свою систему рендеринга.
0
|
||
|
59 / 52 / 11
Регистрация: 04.08.2015
Сообщений: 731
|
|
| 01.05.2024, 23:11 | |
|
у меня игра галактических масштабов и я разделил мир на несколько ступеней, скажем самые огромные масштабы где расстояния между звездами, там стоит отдельная рендер камера и рендерит бекграунд с галактикой, сама галактика со звездами с точки зрения движка в тысячи раз меньше реальных масштабов, на средних околозвездных масштабах принцип такой-же правда эта текстура уже появляется перед галактикой и рендерится после нее, ну и на обычных масштабах я как раз пошел по принципу костыля где двигается мир относительно игрока, ну и физика в игре у меня тоже своя так что это было не так болезненно как если бы я пытался rigidbody использовать. хотя если бы мне все-таки пришлось использоваться я бы скорей всего просто создал свой класс который обрабатывает эти изменения позиций мира для физики и наследовал бы этот класс от rigidbody.
0
|
|
| 01.05.2024, 23:11 | |
|
Как сложить числа с плавающей запятой Как следить за числом с плавающей запятой? Как не округлять числа с плавающей запятой? Как проверить введение числа с плавающей запятой Как получилась мантисса числа с плавающей запятой Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Doom для терминала без стрельбы и монстров. 3D Raycasting на ascii.
dcc0 05.07.2026
Попросил нейронную сеть deepai. org написать рейкастинг 3D с библиотекой ncurses для Linux. Чтобы можно было
ходить на стрелочки. Чтобы стены были отрисованы символами. Справилась.
Первый вариант. . .
|
Установка статуса документа по условию
Maks 05.07.2026
Алгоритм из решения ниже реализован на нетиповом документе "НарядПутевка" разработанного в КА2.
Задача: в табличной части "Материалы" документа при записи автоматически устанавливать статус. . .
|
Сезонность и суточность закисления почв
anaschu 04.07.2026
200 часов это все равно моловато. Есть ситуации, но нестандартные, когда смена происходит за 5 лет.
Но обычно это 50 лет и более.
Наверное, закисление почвы происходит сезонно в средней. . .
|
В чем ценность человеческого опыта в глобальном смысле?
kumehtar 03.07.2026
Возможно, ценность человека не в том, что он однажды достигает мудрости, а в том, что он становится носителем карты пути. Он знает не только истину, но и последовательность внутренних изменений,. . .
|
|
интеграция AnyLogic с самописным REST API и переход на Odoo
anaschu 03.07.2026
Успешная интеграция AnyLogic с самописным REST API и переход на промышленную Odoo WMS
Сегодня проделал огромный путь от простой симуляции физических процессов до построения полноценной. . .
|
Поиск всех путей на ориентированном графе. Linux
dcc0 02.07.2026
Переработка старого кода из моей статьи.
Через несколько переработок от PHP кода к C89 (надеюсь, 89).
Но довольно запутанно получилось. Код для Linux.
Но если убрать time и то, что с ним. . .
|
Сам себя обучал rest api
anaschu 02.07.2026
Педагогический лайфхак: Почему чистый REST API для ученика намного круче, чем готовые библиотеки
Когда мы отказались от капризного JAR-файла AnyLogic и переписали код на стандартный HttpClient,. . .
|
rest api anylogic - выполнение модели на своём русском сайте
anaschu 02.07.2026
Как подружиться с AnyLogic Cloud API, победить провайдеров и развернуться Java-бэкенд в Docker на бесплатном хостинге: Двухдневный лог борьбы
Всем привет! Хочу поделиться свежим (и довольно. . .
|