Войти
Unreal EngineФорумПрограммирование

UE4, точность вычислений (2 стр)

Страницы: 1 2
#15
11:06, 6 сен. 2018

FordPerfect
> Диапазон float не такой большой.
> Константа Планка, масса электрона - близки к границам.
> Возвёл в квадрат энергию водородной связи или массу ДНК - вылетел в денормалы.
В таких случаях нужно считать не в килограммах-метрах-секундах, а в специально подобранных попугаях (например), чтобы все измерения лежали в пределах пары порядков от единицы.

Dcs
> Все правильно считаю, ибо на плюсах уже реализовано и сверено с эталоном.
У тебя логическая ошибка - "всё правильно считаю" не является следствием из "сверено с эталоном", это только одна из возможных причин.

Dcs
> Модель орбитального движения, где во многих формулах (определение дальности в
> частности) присутствует операция умножения на скорость света, потому даже
> маленькая неточность грозит серьезным промахом
В чём ты измеряешь расстояния? В чём измеряешь время? По каким формулам интегрируешь? В чём проявляется погрешность?

Например, если ты считаешь движение спутника вокруг неподвижной сферы, это нужно делать через параметры орбиты и фазу, а законы Ньютона использовать исключительно для перерасчёта параметров после манёвров.
Другие модели так же можно описать так, что требуемые инварианты сохраняются явным образом.
Таким образом, если модель нестабильна из-за неточности флоатов - достаточно часто это является проблемой не самой модели, а конкретных уравнений, по которым модель интегрируется.
Поэтому я и спрашиваю - что ты хочешь посчитать и каким образом ты это пытаешься сделать? Вполне возможно, что твою проблему можно решить и без написания мат-плагинов к движку, чисто за счёт математических преобразований.

Ну и да. На самом деле, в космосе, световая секунда - это очень удобная единица измерения. Расстояние между Землёй и Луной - около 1 секунды. Орбита Земли - около 500 секунд. Околоземные орбиты - от 0.5 мкс до 7 мс, хотя если у тебя в формулах есть скорость света, то такая мелочёвка, скорее всего, тебя уже не волнует.


#16
12:46, 6 сен. 2018

Delfigamer
Я считаю по методу Рунге-Кутта 4го порядка движение искуств. спутника земли в ИЭГСК.
Скармливаю функции на вход начальные координаты (положение и вектор скорости), обрабатываю внутри функции эти данные 4 раза для каждого коэффициента. Координаты имеют приблизительную дальность от центра системы отсчета (центр планеты) в районе 30 000 км., если быть точным то по одной из осей -30425.4497е0 км., при этом вектор скорости так же по одной из осей -9.150248082е-4км/с.
Так вот, в результате вычислений дробная часть становится значительно больше и выходит за рамки точности формата float.
Вставил ряд костылей и заставил систему работать через ж..., использовав при этом в разы уменьшенные значения.
Если хочется вникнуть в проблему, могу предоставить скрины реализации на плюсах

#17
13:09, 6 сен. 2018

Dcs
Тебе для игры какой-нибудь, или вот прямо реальная симуляция до сантиметра нужна?

#18
14:09, 6 сен. 2018

Dcs
я тебе сразу сказал, что такие задачи надо обезразмеривать. считать не в километрах, а в астрономических величинах, чтобы характерные значения всех переменных в вычислениях были порядка единиц, а не сотен и миллионов. после расчёта величины переводятся обратно в размерные. иначе постоянно будут ненормализованные float'ы выпадать.

#19
14:43, 6 сен. 2018

Dcs
> UncleMike
> Как в блюпринтах назначить переменной тип double?
Выкиньте блюпринт. Делайте на плюсах.

#20
14:51, 6 сен. 2018

Dcs
> если быть точным то по одной из осей -30425.4497е0 км., при этом вектор
> скорости так же по одной из осей -9.150248082е-4км/с.
оба значения за рамками точности float.

#21
15:02, 6 сен. 2018

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

Запустить видео по клику - Как делать игрыЗапустить видео по клику - Как делать игры

#22
3:58, 15 ноя. 2018

Здравствуйте всем.
Проблема практически решена

+ Показать

Однако, теперь вопрос знатокам движка UE4 касательно оптимизации.
Орбита рисуется средствами Draw debug, но после режима компиляции проекта в режиме "выпуск", ноды, имеющие флаг
"Development only", убираются из проекта, следовательно никакой орбиты не будет.
Пробовал создать свой аналог рисования шлейфа за объектом средствами VFX и нодой Spawn Emitter at Location.
Как шлейф - вполне подойдет, однако, если продлить орбиту и не затирать ее некоторое время, уже во время первого
оборота начинает ощущаться нехватка производительности. В то время, как в случае с Draw debug Line, можно допустить и
по 3 - 4 витка, особо не теряя производительность.
Подскажите, пожалуйста, чем можно заменить этот самый Draw debug Line, не слишком проиграв в производительности? 

Прошло более 1 года
#23
1:13, 17 янв. 2020

Dcs
Точно не помню, как костыль в HUD'е есть метод Draw через который можно рисовать линии.
Хорошим решением будет рисовать линии плейнами/билбордами

#24
2:35, 17 янв. 2020

Старенькая тема)
Но, спасибо.

Страницы: 1 2
Unreal EngineФорумПрограммирование