Задать вопрос
devalone
@devalone
̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻

Что использовать, int, float или double в современном игровом движке?

Рассмотрим современные CPU архитектуры с 64 битными инструкциями и современные GPU, например, nvidia 1080

Если представлять мир с точностью до миллиметра, то целочисленный тип размером 64 бита позволяет сделать мир размером > 9000000000000 км, double ~10000000000 км и float ~10 км.
int достаточно большой и я сомневаюсь, что кто-то захочет игру с ещё большим открытым миром. Но современные процессоры уже давно имеют сопроцессор для операций с плавающей точкой и я не думаю, что арифметика с плавающей точкой будет сильно медленнее. Если выбирать между float и double, double больше, но видеокарты работают быстрее с float https://en.wikipedia.org/wiki/GeForce_10_series#Ge...
GeForce GTX 1080 Ti: Single precision - 10609 GFLOPS, Double precision - 332 GFLOPS.

Такие движки как Unity используют float, но есть также и те, которые используют double, например unigine unigine.com/en/products/engine/unbounded-world У них не возникает проблем с медленной double арифметикой?

Что лучше использовать для представления положения, скорости, ускорения и т.д. игровых объектов: int(64), float или double?

Или, может быть, разбить мир на кубы размером, допустим 10 км? Но тогда возникают проблемы с рендерингом больших сцен.
  • Вопрос задан
  • 3057 просмотров
Подписаться 3 Оценить 5 комментариев
Ответ пользователя maaGames К ответам на вопрос (4)
maaGames
@maaGames
Погроммирую программы
И то и то и то. В видеокарту double лучше не передавать (особенно в карточки nvidia), поэтому float. В физическом движке лучше double, либо вещественное число с фиксированнй точкой (читай int/int64).
У вас ошибка в суждениях. 1мм - это много или мало? Для линейного размера нормально? А для углового? А если пять раз повернуться по часовой стрелке и три раза против часовой, при этом координата сохраняется с точностью до миллиметра? Если поворачиваем корабль, длиной в 300 метров? А если карандаш, длиной 7 сантиметров? А если это моргает персонаж? Т.е. нужно использовать те типы данных, которых достаточно для представления тех данных, с которыми работаете. Причём, они вполне могут конвертироваться друг в друга, возможно, с потерей точности.
Ответ написан
Комментировать