Задать вопрос
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 км? Но тогда возникают проблемы с рендерингом больших сцен.
  • Вопрос задан
  • 3056 просмотров
Подписаться 3 Оценить 5 комментариев
Ответ пользователя laxikodeje К ответам на вопрос (4)
@laxikodeje
флоаты ОЧЕНЬ СИЛЬНО ЗАМЕДЛЯЮТ расчеты.
хотя и позволяют избегать округлений, неточности и переполнений ГОРАЗДО лучше, чем инты.

что и где использовать - решать вам самому.
зависит от конкретных мест.
а будет ли там тормозить на не самом крутом железе.
или вы ориентируетесь только на топовое железо.

если сомневаетесь - проводить тесты, эксперименты, замеры скорости.

что именно где использовать - без тестов и экспериментов вы будете знать заранее только с опытом.

UPD:
то целочисленный тип размером 64 бита позволяет сделать мир размером > 9000000000000 км, double ~10000000000 км и float ~10 км.

Зависит от логики вашего мира.
Может, будет проще сделать 128-битное целое - это все равно будет очень быстро.

или разделить мир на независимые сегменты - все равно очень далекие друг от друга объекты не взаимодействуют скорее всего.
такая технология была еще в прошлом веке задействована в процессорах именно для адресации. так называемый "сегмент:смещение" и "короткие ближние адреса" и "дальние длинные адреса".
Ответ написан