IFCS и физика полета
Перевод документа, которым поделился с сообществом Джон Притчетт. В нем он описал работу IFCS и физики полета.
В этом документе объясняется как общий принцип, так и детали игровой симуляции. Можно узнать про подсистемы корабля, работу трастеров, атмосферный полет, изменения в летной модели, режимы полетов: ESP, couple/decouple и т.д.
Джон открыто отвечает на все вопросы, пожелания и критику в этом разделе
Джон Притчетт
Ведущий программист физики в CIG
Общие сведения
В Star Citizen, IFCS (Intelligent Flight Control System) — это реалистично смоделированная система управления, которая помогает пилоту в эксплуатации космических аппаратов внутри летной симуляции Star Citizen. Сама по себе симуляция полета представляет из себя ньютоновскую модель твердых тел с шестью степенями свободы. В рамках этого моделирования, движение корабля осуществляется при помощи двигателей (трастеров), причем каждый отдельный трастер дает ограниченное количество усилий на точке подвески. В зависимости от направления двигателя и его крепления относительно центра тяжести, каждый трастер дает как усилие, так и крутящий момент на корабле. Сумма всех сил и моментов определяет линейное и угловое ускорение судна в любой момент. Даже при идеальных условиях, такую комплексную систему сложно контролировать без посторонней помощи. В реальном мире, пилот бы полагался на систему управления, которая переводила его или ее вводные данные в фактическое действие трастеров, что обеспечивало бы запрашиваемый уровень контроля как в плане точности, так и стабильности. В этом и есть назначение IFCS.
Примечание: Если не указано иное, в этом документе описывается фактическое состояние IFCS и функционал физики полета в игре с 3.2. Это не дизайн-документ, а описание нынешнего состояния этих систем.
Логика управления
IFSC состоит из множества компонентов. В первую очередь это вводные данные или управление пилота (pilot input), которые контролируют переменные во всех 6 независимых осях управления, а также ряд переключателей и настроек, влияющих на логику управления. Эти переменные передаются в систему планирования (planning system), которая, на основе параметров управления, определяет, как интерпретируются осевые переменные, в конечном счете, генерируя набор целевых профилей движения, как для линейного, так и вращательного управления. Эти профили, затем, передаются контроллеру прямой связи (feedforward controller), который высчитывает ускорения, необходимые для достижения требуемого движения в идеальных условиях. Кроме того, профили объединяются с датчиком обратной связи (feedback sensor), что позволяет выявить степень погрешности. Эти погрешности передаются в контроллер обратной связи, который вычисляет корректирующие ускорения, используя алгоритм контроля PID (Proportional–Integral–Derivative контроллер, исправляющий ошибки между заданными и действительными значениями управления). Необходимые линейные и угловые ускорения от обоих контроллеров прямой и обратной связи затем передаются в блок Системы Управления Движением или PCS (Propulsion Control System), где выработка силовых установок, обеспечивающих тягу, рассчитывается с условием достижения сил, необходимых для надлежащего контроля над судном. Затем, эти показания передаются в физические приводы (phisical actuators). Когда все двигательные установки активны на своих назначенных уровнях, сила и крутящий момент от отдельных приводов суммируются, и результирующие векторы силы и момента передаются в физический движок для физического перемещения корабля. Погрешности между запрошенным и действительным выводом привода, а также непредсказуемые силы окружающей среды (enironmental forces), действующие на судно, могут вызывать отклонения между желаемым и истинным состоянием судна после этапа симуляции. Эти ошибки обнаруживаются датчиками и возвращаются обратно в систему для последующей коррекции ошибок.
Ввод
Управление по осям
Хотя, в основном, все движение корабля происходит от сил, образованных каждым отдельным двигателем, не следует рассчитывать, что пилот будет управлять каждым трастером самостоятельно. Вместо этого, вводные данные пилота будут обозначать либо ускорение, скорость, либо задачу по вращению или позиционированию, которая должна достигаться на каждой из 3 линейных осей (поперечной, продольной и вертикальной) и 3 осях вращения (тангаж, крен и рысканье).
- Управление ускорением — это самая базовая форма управления кораблем. Пилот задает процентное значение от максимума доступного ускорения на каждую контрольную ось. Доступное ускорение определяется величиной усилия и момента, которые могут быть образованы установленными на корабле трастерами на каждой оси управления, а также текущей массой и моментом инерции судна. Для достижения контроля над ускорением, IFCS должен переводить запрошенные ускорения на каждой контрольной оси в отдельные уровни тяги, необходимые для достижения этих ускорений, с учетом текущего состояния корабля и его системы двигателей.
В настоящее время, управление ускорением используется для линейного управления в режиме отвязки (decoupled). - Управление скоростью — это упрощенный режим управления, в котором вводные данные пилота интерпретируется, как процент максимально допустимой скорости на каждой оси управления. IFCS рассчитывает оптимальные ускорения для достижения требуемого изменения в скорости. Как и при управлении ускорением, для этого рассчитывается необходимая логика ускорения, IFCS должен перевести эти ускорения в отдельные уровни тяги для достижения требуемого изменения скорости.
В настоящее время, регулирование скорости используется для привязанного (coupled) и отвязанного (decoupled) управления поворотом, управления газом (throttle) и стрейфом (strafe) в связке (coupled). - Управление положением — это простейший пилотный режим управления, где вводные данные интерпретируются как цель позиционирования или цель вращения на каждой контрольной оси. В целом, линейное управление обеспечивается благодаря системе путевых точек (waypoints), обозначая последовательность целевых позиций в трехмерном пространстве, в то время как управление вращением определяется заданным положением. Для линейного управления, IFCS будет вычислять логику ускорения, необходимую для увеличения крейсерской скорости, затем будет удерживать эту скорость до тех пор, пока не настанет время для обратного торможения до нулевой скорости, или до любой другой заданной конечной скорости, когда корабль достигнет намеченной позиции. Аналогичным образом обрабатывается управление вращением. Как и с другими режимами управления, эти ускорения переводятся в уровни тяги, необходимые для желаемого движения.
В настоящее время, контроль положения и вращения используется для всего автоматизированного управления кораблем, включая передвижения ИИ, автоматический взлет и посадку, квантовое выравнивание, и, в конечном счете, обеспечит линейное управление большими кораблями при помощи вэйпоинтов.
Достижение желаемого уровня ускорения, скорости, положения/вращения на каждой из 6 различных контрольных осей при помощи тяги, генерируемой набором двигателей, способствующих как одновременному линейному, так и вращательному движению, связанно со значительными сложностями. При полной эксплуатации, IFCS значительно упрощает эту задачу, позволяя пилоту сосредоточиться на том, что он или она хочет сделать, а не на том, как это сделать. Но важно признать, что IFCS сам по себе не является моделью полета. Это система управления, которая помогает игроку контролировать корабль внутри реалистичной ньютоновской летной симуляции, используемой в SC.
Режимы пилотирования
IFCS поддерживает множество настроек, определяющих как именно ввод пилота преобразуется в движение корабля.
- Coupled Mode (Режим привязки)
Режим привязки в SC является традиционным курсовым летным режимом, схожим с аэродинамическим полетом. Пилот контролирует скорости вращения при управлении тангажом/креном/рысканием. Для линейной скорости, газ указывает какую скорость следует поддерживать кораблю в направлении вперед.
В дополнение к скоростям вращения и газа, режим привязки поддерживает стрейфы, позволяя пилоту устанавливать целевую скорость по всем трем линейным осям. - Decoupled Mode (Режим отвязки)
Режим отвязки в SC является гибридом между связанным полетом и полным управлением ускорениями в 6 степенях свободы (6DOF). Как следует из названия, этот режим отвязывает вращение корабля от его скорости. В связи с этим больше не используется газ. Кроме того, ввод стрейфа интерпретируется как степень ускорения на каждой линейной оси вместо управления скоростью. Контроль вращения идентичен оному в режиме привязки. - Comstab (command-level stability или стабильность на уровне команд/управление стабильностью)
Comstab — это вспомогательный режим, призванный помочь начинающим пилотам контролировать свою скорость во время поворота, чтобы избежать чрезмерного заноса. Термин является пережитком тех времен, когда этот режим обеспечивал дополнительную стабилизацию во время экстремальных маневров, но в данный момент разумнее его называть просто «управлением поворотами».
При повороте корабля, Comstab замедляет корабль до максимально возможной скорости, при которой боковая или вертикальная тяга достаточна для того, чтобы избежать заноса.
- G-force Safety (Безопасные перегрузки)
G-Safe режим — это вспомогательный режим, призванный помочь пилотам избежать увечий или потери сознания от перегрузок во время экстремальных маневров. Это достигается путем ограничения ускорения от двигателей до значений ниже заданного порога. - Boost (Толчок/ускорение)
Boost — это расширенный режим ускорения. Когда буст активен, все трастеры судна получают дополнительную тягу за счет увеличения расхода топлива. Буст не является особенностью какого-либо конкретного типа управления, поэтому увеличение тяги можно использовать, чтобы помочь кораблю быстрее достигать более высокой скорости, быстрее останавливаться, удерживать более жесткий контролируемый радиус поворота, чтобы достичь более высокой предельной скорости при лобовом сопротивлении, быстрее стабилизироваться в заносе и т.д. - Afterburner/Afterburner 2 (Форсаж/Форсаж 2)
Afterburner/AB2 — это режим, позволяющий пилоту моментально увеличивать максимальную скорость судна, что позволяет , в случае с afterburner, избегать преследования, или, в случае с AB2, пересекать большие дистанции за более короткий срок. - ESP — Enchanced Stick Precision (Увеличенная точность рукояти/стика)
ESP является вспомогательным боевым режимом. Он помогает пилоту в управлении кораблем с установленным фиксированным вооружением, когда тот ведет преследование цели. Это достигается путем сравнения фактического тангажа и рыскания пилота с оптимальным решением для наведения, после чего оба варианта объединяются в идеальное решение, основанное на корреляции между ними. Цель этой системы в том, чтобы улучшить собственное управление пилота, вместо того, чтобы просто корректировать ввод пилота для достижения идеального наведения. Таким образом, объем оказанного содействия, предоставляемого ESP, должен зависеть от шансов игрока в стремлении достичь цели, с которой помогает ESP. Конкретно он помогает в доведении прицельной сетки из нынешней позиции, с минимальными отклонениями, до ее расположения перед целью. Это не должно ощущаться, будто ESP напрямую предоставляет наилучшее решение для захвата цели, а лишь только помогает пилоту достичь желаемого результата.
Планирование
Модели управления
Для того, чтобы перевести вводные данные пилота в ускорения, IFCS может использовать множество моделей управления. Модели управления позволяют рассчитывать желаемое движение судна, при изменениях скорости или при перемещении из одного положения в другое.
Простейшей моделью управления является движение 2-ого порядка(квадратичная функция), которая подразумевает, что ускорение может изменяться мгновенно, давая нам линейную скорость и квадратное положение. Однако, для Star Citizen, где мы поддерживаем экстремальные ускорения, эта модель не подходит. Если мы позволим нашим кораблям мгновенно изменять ускорение с нулевого до максимального, движение наших судов будет чрезвычайно жестким и неестественным. По этой причине, мы устанавливаем ограничение на то, как быстро меняется ускорение, и этот предел называется «jerk» (рывок). В SC существует две модели управления, использующие рывок.
Первая такая модель— движение 3-его порядка (кубическая функция), которая является расширенной версией движения 2-ого порядка, но с включенным конечным рывком и, следовательно, линейным ускорением, квадратом скорости и кубическим положением. Эта модель обычно используется в приложениях управления движением, например, в робототехнике, где движение приводится непосредственно контроллером обратной связи. Она хорошо себя зарекомендовала и дает предсказуемые результаты. Модель лучше всего подходит для управления скоростью или позиционированем по вэйпоинтам, где стандартные действия вычисляются и исполняются через несколько секунд. Когда решения по управлению положением должны рассчитываться прямо «на лету», погрешности в расчете 3-его порядка становятся слишком большими.
Вторая — переходная (transient) модель, которая является нелинейной (экспоненциальной) и непрерывной во всех свойствах высшего порядка, предоставляя продолжительное, плавное изменение положения, скорости, ускорения, рывков и т.д. Из-за этого сочетания плавности и эффективности, переходная модель предпочтительнее для судов с высокой производительностью, вроде гоночных кораблей и истребителей, которые обладают экстремальными ускорениями, а состояние в управлении может меняться в каждом кадре. Для больших кораблей, особенно кэпитал-класса, эти ускорения, обычно, намного ниже, а состояние кораблей меняется значительно реже, дли них достаточно движения 3-его или даже 2-ого порядка.
Контроллер обратной связи
Система реагирования (RCS — Reaction Control System)
RCS обеспечивает общее исправление погрешностей между профилем движения прямой связи (feedforward motion profile) и определенным состоянием судна. Это включает в себя контроль позиционирования, сохранение стационарного положения, коррекцию скорости во время ΔV-маневров, а также коррекцию скорости и положения во время маневров с использованием вэйпоинтов. Чтобы компенсировать ошибки в измерениях, IFCS использует критически сжатый алгоритм PID-контроллера, который вычисляет ускорения, необходимые для оптимальной корректировки судна из его текущего состояния до состояния через определенный промежуток времени. Это позволяет IFCS добиваться точного и стабильного управления в необычных и непредсказуемых условиях.
Наиболее очевидным примером работы RCS является автоматическое управление ориентацией, которое обеспечивает трёхосную стабилизацию позиции корабля относительно позиции заданной пилотом.
Контроллер прямой связи
Подсистемы управления
Управление IFCS состоит из нескольких подсистем, каждая из которых имеет задачу по управлению одной небольшой частью общей системы контроля движений.
- Линейное и вращательное управление пилота — это прямое подключение профиля движения, которое рассчитывается в блоке «планирования». Рассчитанные профили движения используются для генерации уровней ускорения, необходимых для достижения запрашиваемого движения за определенное время в условиях идеальной производительности.
- Устойчивость при поступательном движении — также известная как анти-занос, подсистема обеспечивающая поступательную устойчивость, задачей которой является создание ускорений, необходимых для поддержания идеального прямолинейного движения корабля во время управляемого поворота. Это включает в себя курсовую тягу, необходимую для компенсации потери скорости в повороте, а также боковую или тягу вверх/вниз, необходимую для компенсации возросшей вертикальной и/или поперечной скорости в повороте. До тех пор, пока подается необходимая тяга, поступательная стабилизация позволяет кораблю летать по идеальной окружности с нулевым заносом, сохраняя, при этом, ожидаемую курсовую скорость. Однако, если скорость и/или скорость вращения судна превышают его способность выдавать стабилизирующую тягу, оно начнет уходить в занос.
- Устойчивость при вращении — также известная как анти-опрокидывание, подсистема обеспечивающая устойчивость вращений, задачей которой являет создание обратного крутящего момента, необходимого для обеспечения идеального вращательного движения корабля вокруг его локальных осей управления. Поскольку локальные оси судна (продольные, поперечные и вертикальные), как правило, не совпадают с его главными осями инерции, любая устойчивая угловая скорость вокруг этих локальных осей будет создавать потенциально большие крутящие моменты вокруг других локальных осей. Если это не учитывать, корабль будет опрокидываться при вращениях.
IFCS запрашивает эту подсистему, чтобы определить максимально стабильную скорость вращения относительно каждой локальной оси, исходя из имеющегося в настоящее время момента. Как только корабль начинает терять тягу из-за повреждений, потери мощности и т.д., это может привести к значительному уменьшению его максимальной скорости вращения на одной или нескольких своих локальных осях.
- Компенсация гравитации — при наличии гравитации, эта подсистема будет использовать VTOL-двигатели (двигатели вертикального взлета и посадки) или, если они недоступны, маневровые двигатели для подачи тяги, компенсирующей гравитационные силы. Подсистема компенсации гравитации работает совместно с подсистемами управления пилота, исходя из этого, гравитация прибавляется либо вычитается из предполагаемых ускорений заданных пилотом. При ускорении вниз в гравитационном поле, сначала уменьшится компенсирующее гравитацию ускорение нижних трастеров/ДВВП для использования ускорения свободного падения, а потом при необходимости будет создано дополнительное ускорение верхними. При противоположном движении часть тяги нижних трастеров/ДВВП будет компенсировать гравитацию, и только оставшийся свободным запас тяги обеспечит ускорение вверх. В результате корабль со сбалансированными верхними и нижними трастерами вниз может ускоряться значительно быстрее, чем вверх.
- Компенсация лобового сопротивления — находясь в атмосфере, эта подсистема будет использовать маневровые или маршевые двигатели для подачи тяги, необходимой для компенсации предполагаемого сопротивления. Это необходимо для того, чтобы IFCS лучше прогнозировал ожидаемую логику движения в атмосфере. В противном случае, компенсация сопротивления будет управляться непосредственно через коррекцию ошибок обратной связи, что приведет к снижению работоспособности.
Как и в случае с компенсацией гравитации, подсистема компенсации сопротивления работает с системой управления пилота, так что сопротивление либо прибавляется, либо вычитается из предполагаемого ускорения заданного пилотом. При ускорении до более высокой скорости, сопротивление будет работать против тяги, а при замедлении до более низкой — способствовать ей. В обоих случаях сила сопротивления будет зависеть от текущей скорости относительно атмосферы, а также от площади поперечного сечения судна. В результате корабль более отзывчив при замедлении в атмосфере, чем при ускорении.
- Регулирование скорости — поскольку IFCS налагает искусственное ограничение на линейную скорость судна, подсистема регулирования скорости будет использовать ограниченное количество тяги для создания корректирующего торможения всякий раз, когда судно превышает ограничение скорости по какой-либо причине.
Общее требуемое линейное и угловое ускорение для корабля представляет собой сумму ускорений, создаваемых каждой из этих подсистем, ограниченных суммарной мощностью силовых установок.
Примечание: хотя в настоящее время это не поддерживается, моя цель — предоставить пилоту возможность самостоятельно включать или отключать каждую из этих систем (исключение составляет регулирование скорости, что строго ограничено). Кроме того, каждая из этих подсистем должна давать сбой в случае повреждения корабля. Однако, даже если все системы IFCS отключены, пилот будет сохранять как минимум первичное управление ускорением как для перемещения, так и для вращения по всем осям.
Система управления силовыми установками
После того, как требуемые линейные и вращательные ускорения установлены путем объединения сигналов управления прямой и обратной связи, PCS должен рассчитывать выхлоп отдельных двигателей, а также других устройств, задействованных в осуществлении движения, чтобы эти ускорения были достигнуты с разумной степенью точности.
Доступные устройства PCS делятся на две категории. Первая категория — точечные силовые генераторы (point force generators), в настоящее время к ним относятся различные типы двигателей и Gravlev-установки, но в итоге в список могут быть включены и другие типы силовых установок, вроде пропеллеров или или даже аэродинамических плоскостей (aerodynamic lifting bodies) с управляемой геометрией.
Вторая категория — генераторы крутящего момента, в настоящее время включают в себя только управляемый гироскоп Control Moment Gyro (CMG), который представляет собой небольшое устройство, которое может генерировать слабый крутящий момент вокруг заданной оси. Расположение CMG не имеет значения, но они, обычно, устанавливаются рядом с кокпитом, так что пока кокпит не поврежден, корабль всегда будет иметь минимальное вращательное управление на каждой оси.
Силовые генераторы
Силовые генераторы смоделированы как усилие, прикладываемое к точке на корпусе корабля. Таким образом, активный силовой генератор будет передавать судну как усилие, так и крутящий момент. Чтобы создать чистую силу на корабле, либо одиночный силовой генератор должен генерировать силу точно через центр тяжести судна, либо два или более генератора должны быть сбалансированы так, чтобы в сумме давать нулевой крутящий момент. Аналогично, для создания крутящего момента на корабле, по меньшей мере два силовых генератора должны выдавать комбинированный момент, отличный от нуля, с векторами силы, дающими ноль в сумме.
PCS анализирует доступный набор силовых генераторов, чтобы выстроить список генераторов чистых усилий и моментов на каждой оси, который затем используется для достижения запрашиваемого управления. Он также задействован в случае с несбалансированными силовыми генераторами, обеспечивающими линейное движение, но с моментом отличным от нулевого. Генераторы момента используются, когда необходимо создать силы, противодействующие нежелательному крутящему моменту. Сила, создаваемая несбалансированным генератором ограничена таким образом, чтобы корабль не осуществлял слишком сильных отклонений от заданного положения, вызванных ошибочными моментами. Если бы не эти ограничения, линейное управление несбалансированного судна заставляло бы его вращаться вокруг собственного центра масс. С другой стороны, без допущения несбалансированных линейных усилий, корабль потеряет все линейное управление после того, как получит даже небольшое количество повреждений приводящих к потере баланса двигателей.
Генераторы моментов
Генераторы моментов намного проще в использовании, поскольку они не могут генерировать какую-либо силу в качестве побочного эффекта. Поэтому генераторы крутящего момента всегда могут использоваться в создании крутящего момента, и ограничены только лишь собственной мощностью.
Выходной уровень каждого устройства в PCS рассчитывается с помощью анализа твердого тела. PCS рассматривает все доступные устройства, объединяет их вместе в генераторы движения и строит список отдельных генераторов движения, которые могут использоваться для достижения любого из действий управления в 6 степенях свободы. Этот способ информирует IFCS об ограничениях системы, а также диктует, каким образом в этой системе должно быть достигнуто заданное усилие и крутящий момент.
В целом, поскольку эта система не требует идеального баланса крутящего момента, а также потому, что она не предполагает идеальную производительность, конечные ускорения, создаваемые различными компонентами PCS, не будут идентичны запрошенным. Из-за этого, после завершения анализа и после того, как все уровни будут поданы в систему привода (actuator system), мы суммируем фактическую силу и крутящий момент, генерируемые каждым отдельным устройством, и передаем эту результирующую пару сил/крутящего момента в физическую симуляцию. Все расхождения между запрошенным и фактическим состоянием судна после симуляции рассматриваются в будущих шагах симуляции при помощи RCS. В идеальных условиях, когда корабль сбалансирован и находится в отличном состоянии, разница между запрошенными и фактическими ускорениями будет минимальной. Но как только корабль начнет получать урон, или когда он летает в непредсказуемых условиях, шанс появления этих ошибок значительно возрастает.
Другие темы
Атмосферная модель полета
Поскольку космические корабли в Star Citizen имеют способность путешествовать не только в пустоте космоса, но также в атмосферах планет, летная механика Star Citizen должна поддерживать аэродинамические силы. Однако, на данный момент, все наши корабли спроектированы как космические транспортные средства, что означает, что они всегда могут летать без использования аэродинамических сил, даже когда они находятся в атмосфере и в зоне действия гравитации. Атмосферные условия будут влиять на работоспособность наших кораблей, но они не используют аэродинамические силы для поддержания полета. Наши корабли продолжают полагаться на трастеры, как на основные средства управления. Хотя, очевидно, что некоторые корабли спроектированы с большими аэродинамическими соображениями, чем другие, и эти корабли будут иметь преимущества, благодаря дизайну.
Атмосферный полет в Star Citizen включает в себя несколько следующих компонентов:
Лобовое сопротивление (Drag) — сила сопротивления в Star Citizen точно моделируется при помощи уравнения квадрата скорости.
Сопротивление = ½ × K × Плотность × CSA × V²
- K — коэффициент, представляет собой константу, которая отражает сложные переменные, такие как вязкость и сжимаемость воздуха, форму корабля и его общий наклон по отношению к атмосферным потокам. Каждое судно настраивается с отдельным коэффициентом для каждого осевого направления, чтобы указать его относительную производительность при движении в атмосфере вдоль каждого осевого направления.
- Плотность — это плотность атмосферы, которая может варьироваться в зависимости от многих факторов, но в данный момент в основном зависит от высоты.
- CSA — Cross-Sectional Area или площадь поперечного сечения под прямым углом к вектору движения в атмосфере.
- V — Velocity или скорость корабля по отношению к атмосфере.
Подъем (Lift) — подъемная сила, которая в данный момент не поддерживается атмосферной моделью полета в SC. Когда придет время, подъемная сила будет добавлена в качестве дополнительной аэродинамической силы в атмосфере.
Площадь поперечного сечения (CSA) — площадь поперечного сечения рассчитывается динамически для каждого корабля по каждой из 3 осей. Она обновляется всякий раз, когда изменяется конструкция судна. В текущем методе измерения площади поперечного сечения используются ограничивающие рамки коробок от отдельных частей судна. Это обеспечивает разумный компромисс между точностью и эффективностью. Хотя этот метод имеет тенденцию завышать площадь корабля, это может быть компенсировано коэффициентом лобового сопротивления для данного осевого сечения.
Центр давления (Center of Pressure)— центром давления является точка на поверхности, где силы сопротивления сбалансированы так, что образуют нулевой крутящий момент. Она совпадает с центроидом поверхности. Эта рассчитывается вместе с площадью поперечного сечения всякий раз, когда изменяется конструкция судна. В тех случаях, когда присутствует сила сопротивления, предполагается, что она прилагается к центру давления. Когда центр давления не выровнен с центром масс вдоль вектора скорости, это приводит к крутящему моменту, значение которого зависит от длины нормали от проходящего через центр давления вектора силы сопротивления до центра масс.
Турбулентность (Turbulence) — модель турбулентности в настоящее время является плейсхолдером (временным заполнителем). Она обеспечивает, как правило, случайную, высокочастотную, непродолжительную турбулентность, основанную на текущей плотности атмосферы и скорости судна относительно атмосферы.
Модель атмосферной плотности (Atmospheric Density Model) — модель атмосферной плотности также является плейсхолдером до тех пор, пока не будет завершена глобальная система атмосферы и погоды. На данный момент она использует модель давления, зависящую от высоты, которая основана на атмосферных условиях Земли. Существует несколько параметров, которые можно настроить для достижения различных атмосферных условий, включая давление на уровне моря, расстояние до внешних слоев атмосферы, гравитацию на «уровне моря» и т.д.
Вход в атмосферу (Atmospheric burn-in)— атмосферная модель предусматривает простое сближение с атмосферой для генерации тепла в переднем ударном слое, с использованием упрощенного уравнения Саттон Грейвса. Однако, поскольку наши корабли в настоящее время не используют орбитальную механику, скорости входа в атмосферу ограничены относительно низкой скоростью кораблей, и, следовательно, самом деле не смогут создавать достаточного количества тепла, чтобы вызвать видимый эффект пламени. Из-за этого предлагаемая модель горения в настоящее время не используется, и эффект ожога просто запускается на основе высоты полета судна, независимо от его скорости и любых физических свойств движения судна сквозь атмосферу.
Предельная скорость (Terminal velocity) — во время полета в атмосфере, каждый корабль будет иметь предельную скорость, зависящую от плотности атмосферы, площади поперечного сечения корабля вдоль вектора полета, а также от максимально доступной тяги по этому вектору. Это будет иметь тенденцию к ограничению скорости судна ниже допустимого для него максимума, особенно на более низких высотах или когда возможности двигателей истощены.
Безопасная скорость (Safe velocity) — каждый корабль имеет скорость, при которой лобовое сопротивление становится чрезвычайно сильным для сохранения прочности конструкции корабля. Это наиболее проблематично для судов, предназначенных, главным образом, для космического полета, у которых конструкция не предусматривает усилий, возникающих в атмосфере. Суда, спроектированные для аэродинамического полета, редко достигают небезопасных скоростей из-за других ограничений, таких как искусственные ограничения скорости или предельная скорость.
ESP
Обзор
ESP означает «Enhanced Stick Precision». Цель ESP заключается в том, чтобы улучшить вводные данные игрока, приближая их к идеальному положению в отслеживании цели. Чем ближе исходные данные к идеальному положению, тем больше ввод игрока смешивается с идеальным решением. Цель состоит в том, чтобы игрок не замечал помощь ESP, если система не отключена, и с этой точки зрения она должна быть предельно понятной.
У этой системы есть 3 основные части:
- Увязка поворотов корабля с движущейся целью
- Замыкание на движущейся цели внутри области вращающегося корабля
- Смешивание ввода игрока с совмещенными и приближенными значениями, основанными на корреляции ввода.
Необходимые условия
- Игрок должен иметь зафиксированную вражескую цель
- Для использования зафиксированного гимбального вооружения, необходимо переключить тумблер «weapon gimbal lock».
- Я рекомендую отключать Comstab и G-Safe
Этапы обработки
1) ESP дает запрос системе целеуказания, ту же самую систему использует HUD для обновления местоположения прицельной сетки (pip), путем определения времени, необходимого для попадания по цели при использовании последнего стрелявшего вооружения.
2) Система целеуказания возвращает запрошенное показание: «время для попадания», t, которое используется для прогнозирования местоположения цели в момент попадания по нему снарядом, основываясь на относительной скорости и ускорении корабля игрока и его цели.
а. Используется уравнение постоянного ускорения:
ПоложениеЦели = ПоложениеВрага + ΔV × t + ½f × ΔУскорения × t²
3) ESP вычисляет «соответствие показаний», значения тангажа и рысканья, необходимые для того, чтобы точно соответствовать движению цели, удерживая ее в том же положении относительно носа корабля.
а. Вычисляется вектор между кораблем и целью:
Радиус = ПоложениеЦели — ПоложениеКорабля;
б. Вычисляется скорость цели вдоль радиус-вектора:
РадиальнаяСкорость = СкоростьЦели по радиус-вектору) / (радиус-вектор) × радиус
в. Вычисляется тангенциальная скорость цели по радиус-вектору:
ТангенциальнаяСкорость = СкоростьЦели — РадиальнаяСкорость
г. Вычисляется угловая скорость:
V = R × Omega, Omega = V/R
Omega = |ТангенциальнаяСкорость| / |Радиус|
д. Вычисляются значения тангажа и рысканья у обоих
4) Теперь ESP имеет значения вращений, необходимые для отслеживания цели и того, как она перемещается по экрану, но отсутствует «захват» цели.
5) Вычисляется угол тангажа и рысканья, необходимый для поворота носа с выравниванием по радиус-вектору (вектору между кораблем и целью).
6) Вычисляются «приближенные значения», значения рысканья и тангажа по локальным осям, необходимые для захвата цели без погрешностей.
7) Вычисляются целевые значения рысканья и тангажа:
а. Основываясь на корреляции между направляющим вектором игрока и радиус-вектором между игроком и целью.
б. Корреляционный фильтр использует плотную экспоненту, так что есть очень маленькое окно с высокой корреляцией, с нулевой корреляцией около 2,4 градуса и полной корреляцией при 0 градусов.
в. При полной корреляции, целевой тангаж или рысканье устанавливаются в соответствии с тангажом и рысканьем, так что ESP смешивается в сторону скорости вращения, соответствующей движению цели, не фокусируясь на ней.
г. При нулевой корреляции, целевой тангаж или рыскание устанавливаются на сумме значений или по ближайшим параметрам рысканья, передавая приближенные к цели значения.
д. Тем временем, идеальные и полученные показатели тангажа или рысканья смешиваются друг с другом.
е. Цель этого алгоритма смешения состоит в том, чтобы создать небольшое окно перед объектом, которое помогает игроку поддерживать слежение за поворотами, без необходимости непосредственного точечного наведения на цели (центре тяжести корабля противника). Это позволяет игроку усовершенствовать стрельбу относительно идеального отслеживания и является важным элементом этого дизайна.
8) Используя алгоритм векторного смешения, объединяются значения рысканья и тангажа, задаваемых игроком, и вычисляются необходимые значения тангажа и рысканья.
а. Объем смешения зависит от корреляции между вводом игрока и параметрами цели. Чем выше соотношение, тем больше смешение.
б. Корреляция измеряется на основе величины и направления 2D-вектора (тангажа и рыскания),каждое значение рассматривается независимо.
в. Алгоритм смешения имеет несколько значений, которые можно настраивать для управления поведением смешивания. За время существования системы, настраиваемые значения менялись незначительно.
9) Скорректированные значения тангажа и рысканья передаются обратно IFCS, который заменяет ими необработанные вводные данные игрока.
Примечание: по состоянию на 3.2, ESP все еще находится в разработке. Несмотря на то, что в прошлом он работал хорошо, в настоящее время не соответствует моим стандартам. Видение ESP простое: он должен помогать пилоту, но так, чтобы не было ощущения, что ESP выполняет работу за него. Пока эта цель не будет достигнута, я продолжу ее совершенствовать.
Настройка корабля
Из-за комплексности летной модели SC, я предоставил дизайнерам метод настройки кораблей, основанный на целях, которые они преследуют. Это позволяет им сконцентрироваться на том, какие корабли они хотят, вместо того, чтобы решать как добиваться нужной эффективности судна внутри симуляции.
Есть 4 шага в настройке корабля. Первые два предназначены только для начальной настройки, а остальные повторяются каждый раз, когда корректируется задача производительности судна.
Шаг первый — Настройка трастеров
Каждый корабль должен иметь совокупность двигателей, достаточную для обеспечения каждого из 6 основных действий в управлении, включая линейное управление вдоль и вращательное управление вокруг каждой локальной оси. Тем не менее, концепт-художники не должны размещать все двигатели в точном месте, необходимом для реалистичного достижения этих действий по управлению. Поэтому, чтобы преодолеть разрыв между художественным образом и симуляцией, я разрешаю дизайнерам назначать «fixup» позиции для двигателей, которые позволят им функционировать как полагается. Насколько велики эти отклонения, остается на усмотрении дизайнеров, но ожидается, что они должны быть относительно небольшими, к примеру, менее 1/10 метра на корабле размером с Hornet. В больших отклонениях, чем обычно, нет необходимости, и если они выходят за рамки этих «fixup», то скорее маскируют неправильную компоновку двигателей, вместо упрощения задач по настройке.
Это наиболее трудоемкая часть настройки корабля. Однако, после завершения этого шага, остается лишь вводить корректировки всякий раз, когда количество и/или схема их расположения меняется.
Шаг второй — Настройка корабля
Прежде, чем начнется настройка, дизайнер должен определить опорный (референсный) корабль для настройки, который оснащен корпусом, базовой компоновкой, а также необходимым количеством и расположением двигателей. Опорный корабль задает массу и момент инерции, а также доступные двигатели и их относительные места размещения, которые будут использоваться для достижения желаемого результата при настройке судна. Если позже корабль изменит свою массу, это либо увеличит, либо уменьшит производительность судна по сравнению с этой базовой настройкой. Кроме того, если совокупность двигателей будет расширена или сокращена, это также изменит работоспособность судна. Другими словами, простые параметры целевой производительности, предоставляемые дизайнером, будут определять, как судно работает в очень специфических условиях, но любые изменения состояния судна достоверно изменят его производительность в соответствии с симуляцией полета.
Шаг третий — Определение летных состояний
Летные состояния для каждой уникальной конфигурации судна определяют настройки трастеров, цели производительности и т.д. Каждый корабль может поддерживать несколько состояний полета, с возможностью переключения между ними по мере необходимости. В настоящее время, мы поддерживаем состояния полета, которые представляют собой комбинации космических, атмосферных, посадочных, гравитационных или режимов в невесомости. Типичные различия между состояниями полета могут варьироваться от развертывания или складывания VTOL-двигателей до, как в случае с Reliant, изменения конфигурации всего судна.
В рамках этих летных состояний, дизайнер предоставит подробную информацию о доступных двигателях, в том числе о типе каждого трастера (это дает ограничения на использование каждого двигателя), их расположении, диапазоне изменения вектора тяги и т.д. Кроме того, дизайнер решает задачи производительности корабля, изменяя параметры, которые отвечают за то, как быстро корабль достигнет скорости от нуля до максимальной, на каждой из его контрольных осей.
Шаг четвертый — Автонастройка корабля
Как только установка трастеров для референсного корабля завершена, а целевые параметры производительности выявлены для каждого поддерживаемого летного состояния, дизайнер может загружать корабль в движок и запускать процесс автонастройки. Цель этого процесса — рассчитать мощности каждого двигателя на судне, а также установить набор ограничений по осям так, чтобы судно действительно могло достичь определенных целей производительности в рамках симуляции.
Автоматические шаги заключаются в следующем:
- Устанавливается базовая мощность каждого трастера, затем вычисляются максимальные усилия и моменты, которые могут быть получены при подаче тяги по всем осям для каждого из нескольких видов двигателей (маневровые, маршевые, ретро, VTOL и т.д.)
- Определяется соотношение между доступными и требуемыми ускорениями для каждой контрольной оси и вида тяги. Масштабируются мощности трастеров для каждого типа двигателя с таким соотношением, чтобы требуемоей ускорение выполнялось только тогда, когда все двигатели подают максимальную тягу. Если двигатель на шарнире, и может выдавать тягу по нескольким осям, каждая ось тяги масштабируется отдельно, но двигатель должен иметь достаточную мощность для обеспечения полной тяги на каждой оси одновременно. Это приведет к тому, что трастер будет иметь большую тягу, чем требуется для любого осевого усилия, но это гарантирует, что двигатель всегда будет иметь достаточную тягу для любого действия по управлению, независимо от того, насколько оно сложное.
Автоматическая часть настройки занимает всего несколько секунд. Как только она завершается, двигателям присваиваются индивидуальные значения тяговой мощности, так что референсный корабль получит производительность, близкую к той, что продиктованы задачами. Процесс автоматизирует сложную задачу расчета мощности трастеров для решения этих задач. Но как только настройка завершена, эффективность корабля в симуляции будет зависеть непосредственно от реальной мощности каждого двигателя, настоящей массы и центра тяжести судна, момента инерции и т.д. Все эти значения могут меняться, так что производительность корабля не жестко контролируется, а возникает из реалистичной симуляции в соответствии со сложными взаимодействиями физических свойств в рамках модели твердого тела.
Таким образом, моя цель — упростить процесс настройки, чтобы оградить дизайнеров от сложностей этого реалистичного моделирования. Но сама имитация никоим образом не упрощена или подделана для достижения этих задач. Движение корабля, независимо от того, насколько оно точное и контролируемое, всегда тщательно смоделировано из усилий, создаваемых двигателями и другими компонентами системы силовых установок.
Уточнение
Недостаток этого подхода в том, что можно достичь любой желаемой работоспособности корабля, независимо от того, насколько это реалистично. Если дизайнер хочет настроить Idris таким образом, чтобы он мог разгоняться с нуля до 1 км/с за полсекунды, эта система сгенерирует такую мощность трастеров, которая позволит кораблю достичь такой производительности, несмотря на целесообразность. Если не брать это во внимание, судно, к примеру, может быть оборудовано маневровым двигателем небольшого диаметра, который будет выдавать усилие в миллион ньютонов, в то время как маршевый двигатель большого диаметра будет выдавать лишь малую часть этой мощности. Несмотря на то, что это может быть правдоподобно в рамках симуляции, это было бы просто неразумно. Основываясь на выдуманных ограничениях технологий, трастеры должны иметь взаимосвязь между их размерами и мощностью. Симуляция не принуждает к подобным ограничениям.
Баланс между выполнением задач производительности и реалистичным физическим поведением каждого корабля полностью зависит от дизайнера.
Обходные пути
Хоть я и прилагал все усилия для того, чтобы избежать необоснованного «читерства» в симуляции, к сожалению, они есть в любой игре. Мое общее правило в том, чтобы любое движение корабля регулировалось приложением силы, и эти свойства ускорения, скорости и позиционирования плавно и непрерывно могли меняться со временем. Например, я не просто привязываю скорость корабля или его положение к необходимым значениям, такое возможно только если они не приближены к итоговым параметрам и эта привязка будет незаметна. Я полагаюсь на систему реагирования (RCS) в доведении всех величин до их финальных значений.
Обходные пути, которые я принимаю как неизбежность, заключаются в следующем:
Gimbaled thrusters (Шарнирные двигатели)
Решение поддерживать шарнирные трастеры вызывает широкий круг вопросов и проблем. Хотя их поддержка может осуществляться довольно точно, использование их без надлежащей конструкции трастера приводит к нестабильной работе корабля. В частности, такие трастеры не подходят для контроля реагирования. RCS-двигатели должны иметь возможность мгновенной подачи тяги по нескольким осям, особенно в случае, когда гимбальный трастер поворачивается в обоих направлениях одной оси, время, необходимое для переориентации двигателей с одного направления на другое, делает их непрактичными с точки зрения подачи стабилизирующей тяги.
Поскольку многие наши корабли используют шарнирные трастеры только для контрольной тяги, необходимо жульничать и позволять шарнирным двигателям генерировать усилие непосредственно в заданном векторе, даже если двигатель все еще находится в процессе разворота до назначенного вектора. Это можно заметить на кораблях вроде Hornet, которые начинают незамедлительно поворачивать или стрейфиться, в то время как трастеры не успевают выравняться по необходимому вектору.
Существует 2 потенциальных решения этих проблем, но ни одно из них не может быть использовано. Одно из них заключается в том, чтобы полностью убрать шарнирные двигатели из игры. Другое — обеспечить, чтобы все корабли были оснащены набором фиксированных трастеров, способных подстраховать тягой в каждом направлении локальных осей, что приведет к тому, что шарнирные двигатели станут второстепенными, дающими дополнительное усилие или момент, и только после соответствующего поворота.
Fixup (Поправка/установка)
Существует 3 вида поправок, поддерживаемых симуляцией:
- Положение трастеров — как я уже писал в разделе, посвященном настройке кораблей, я могу располагать двигатели в несоответствии с их физическим положением на модели корабля. Однако, предполагается, что эта поправка может быть относительно небольшой, и, хотя это явное «читерство», для наблюдателя не должно быть очевидным, что двигатель генерирует тягу от точки симуляции, которая отличается от видимой точки крепления у модели корабля.
- Диапазон трастеров — вместе с расположением трастеров, я также могу вводить поправки вращения. В некоторых случаях корабль спроектирован так, что вектор трастера не совпадает с одной или несколькими локальными осями корабля. Симуляция требует, чтобы каждый двигатель был либо закреплен на локальной оси, либо мог перемещаться по всему диапазону между двумя или более осями. В тех случаях, когда художественный образ не позволяет достичь этого должным образом, можно использовать поправку. Но эти корректировки диапазона должны быть даже еще меньше, чем поправки положения. Даже небольшое отклонение вектора тяги между симуляцией и ее визуальным отображением будет заметно для большинства наблюдателей. В идеале, эти fixup будут временно зафиксированы до тех пор, пока арт не будет выверен с целью поддержки требуемого диапазона трастера.
- Центр тяжести — Для любого корабля с особым расположением двигателей есть идеальный центр тяжести, который обеспечивает оптимальную работу этих трастеров. Он, как правило, расположен в сбалансированной точке совокупности двигателей, поддерживая как можно больший баланс при линейных действиях тяги. Если центр тяжести будет плохо сбалансирован, это приведет к дополнительным затратам тяги, противодействующей крутящему моменту, возникающему в результате несбалансированной линейной тяги.
Пока не будет реализована более совершенная система, я использую fixup центра тяжести, для упрощения процесса установки центра тяжести в наиболее желательном месте. Эта поправка применяется в момент настройки и в тот момент относится к истинному центру тяжести. Если истинный центр тяжести изменится после настройки, поправочный центр масс изменится на одну и ту же относительную величину. Это позволяет динамически изменять центр тяжести при изменениях в корабле, даже если исходное положение было отрегулировано относительно его истинного положения.
Любая поправка центра тяжести предполагается как временная до тех пор, пока референсный корабль не будет приспособлен для естественного достижения желаемого центра тяжести. В будущем, динамическая балластная система приведет к тому, что эти поправки станут ненужными.
Степень серьезности многих из этих обходных решений остается на усмотрение дизайнеров. Моя философия заключается в том, что мы должны быть очень осторожны, чтобы лишний раз не использовать эти обходные пути. Когда игроки начинают видеть расхождения между физической симуляцией и игровыми визуальными эффектами, они теряют уверенность в точности моделирования и предполагают, что все подделано. В этот момент трудно оправдать сложность такого реалистичного моделирования. Если оно выглядит и чувствуется как подделка, почему бы просто не подделать его?
Версии IFCS
IFCS 1.0 — был введен в конце 2013 года, прямо перед релизом Догфайт-модуля 1.0. Он включал в себя полную симуляцию твердых тел, но не использовал какой-либо контроль прямой связи. Все управление осуществлялось прямо через систему обратной связи. Эта версия действовала всю ветку SC 1.x до ранних версий SC 2.x.
IFCS 2.0 был выпущен в ранних версиях SC 2.х. Он был переработан, прежде всего, с учетом недостатков в системе контроля обратной связи, при поддержке прогнозируемого управления для ИИ и операций, связанных с автопилотом. В этот момент я представил компонент системы управления обратной связи, используя управление 3-го порядка из-за его сочетания плавности и предсказуемости.
IFCS 3.0 был запущен в SC 3.1. Эта доработка была необходима для осуществления нескольких изменений и оптимизации, проделанных с движком Star Citizen для выпуска 3.0. Он ввел несколько новых подсистем управления, позволяя независимо отслеживать и контролировать подачу тяги для этих подсистем. Также была улучшена модульность, путем добавления поддержки общих алгоритмов управления прямой связью, позволяя нам легко переключаться между движениями 2-го и 3-го порядка, переходной моделью, сплайновой или любой другой желаемой логикой движения. Я снова сделал переходный профиль управления движения основным, вместо движения 3-го порядка, это соответствует тому, что использовалось в IFCS 1.x. И, наконец, я разделил генерацию физического импульса и логику системы управления для того, чтобы обеспечить лучший баланс между оптимизацией и стабильностью.