Space Engine | Создание кораблей
682
page-template-default,page,page-id-682,page-child,parent-pageid-680,eltd-cpt-1.0,ajax_leftright,page_not_loaded,,se-ver-2.1, vertical_menu_with_scroll,transparent_content,blog_installed,wpb-js-composer js-comp-ver-5.0.1,vc_responsive
Создание кораблей

В этом руководстве описывается, как импортировать модель космического корабля в SpaceEngine. Перед тем, как продолжить, рекомендуем ознакомиться с Введением. Все примеры в этом руководстве не используют pak-файлы, но желательно, чтобы ваша конечная (релизная) версия аддона была запакована в pak.

Корабли в SpaceEngine

Корабль в SpaceEngine может состоять из нескольких частей, каждая из которых представлена своим файлом модели. Например, корабли из редактора SHW состоят из нескольких двигателей, радиаторов, баков, соединительных ферм и т.д. Одинаковые модули используют одну и ту же модель (например, двигатели или элемент фермы), что позволяет серьёзно сэкономить видеопамять. Но корабль может состоять и из одного модуля (например, шаттл). Если ваша новая модель достаточно сложная и имеет повторяющиеся элементы, есть смысл разрезать её на модули.

Далее в этом руководстве будем считать, что вы создаёте модель корабля Discovery из “Космической одиссеи 2001”. Будем также считать, что это не единственный корабль из этой франшизы, который вы хотите импортировать. Поэтому создадим в папке addons рабочую папку 2001, в ней папки SE для моделей и текстур:
addons/2001/models/
addons/2001/textures/

Любая модель корабля, даже одномодульного, состоит из нескольких файлов, разбитых на две группы. Первая группа имеет отношение к моделям, вторая – к текстурам. Модели хранятся в папке addons/2001/models/spacecraft/, текстуры – в папке addons/2001/textures/spacecraft/. Так что теперь нам надо создать папки две spacecraft:

addons/2001/models/spacecraft/ – будем называть её стандартной папкой моделей
addons/2001/textures/spacecraft/ – будем называть её стандартной папкой текстур

Важное замечание: все папки, имеющие путь вида */models/spacecraft/ и */textures/spacecraft/ считаются SpaceEngine одной большой виртуальной папкой. Так что если вы поместите в своём аддоне текстуру или модель прямо в стандартную папку, например вот так: addons/2001/texture/spacecraft/engine.jpg, то есть вероятность, что она заместит собой текстуру с таким же именем в каком-то другом аддоне по праву приоритета даты модификации pak-файла (или ваша текстура будет замещена текстурой другого, более позднего аддона). Во избежание этой ситуации, нужно внутри стандартных папок моделей и текстур создать дополнительные папки, имеющие уникальное имя. Например, Odyssey2001:

addons/2001/models/spacecraft/Odyssey2001
addons/2001/textures/spacecraft/Odyssey2001

Теперь эта папка Odyssey2001 должна будет учитываться при указании путей к файлам в скриптах корабля и материалов, зато она позволит избежать неоднозначности и замещения файлов файлами в других аддонах.

Т.к. в вашем аддоне может быть много кораблей, для удобства можно создать ещё один дополнительный уровень папок, хотя это и не обязательно. В данном случае есть смысл создать папку Discovery, т.к. мы импортируем модель этого корабля:

addons/2001/models/spacecraft/Odyssey2001/Discovery/ – будем называть её папкой моделей
addons/2001/textures/spacecraft/Odyssey2001/Discovery/ – будем называть её папкой текстур

Если некоторые модели используют общие текстуры, можно для них создать папку common, или не создавать вовсе, а сохранять их прямо в addons/2001/textures/spacecraft/Odyssey2001/. В общем, эти самые внутренние папки опциональны, и вам решать, использовать их или нет. Но они также повлияют на пути к файлам моделей и текстур, которые прописываются в скрипты, об этом важно помнить. Далее в этом руководстве будем считать, что вы создали папку Discovery. Так руководство будет полнее.

Итак, любой корабль в SpaceEngine состоит из следующих файлов:

  • Один или несколько файлов модели (модулей) с расширением *.sm (Spacecraft Model), находящиеся в папке моделей addons/2001/models/spacecraft/Odyssey2001/Discovery/. sm-файлы – это бинарный формат геометрии модели, его описание дано ниже. Tсть возможность импорта модели из формата obj.
  • Конфигурационный файл с расширением *.cfg для каждого sm-файла модели. Имя cfg-файла должно совпадать с именем sm-файла, и находиться он должен в той же папке. Конфигурационный файл описывает, какой материал использует каждый меш sm-модели, и некоторые другие параметры.
  • Один или несколько файлов текстур, находящихся в папке текстур addons/2001/textures/spacecraft/Odyssey2001/Discovery/ (помним, что подпапка Discovery опциональна). Текстуры – это обычные графические файлы в формате jpg, png, tiff, dds, tga. Модель может быть и без текстур, но должна иметь материалы.
  • Один или несколько файлов библиотеки материалов с расширением *.sml (SpaceEngine Material Library), находящихся в стандартной папке текстур или в опциональных вложенных в неё папках. Файл библиотеки материалов содержит описание одного или нескольких материалов, используемых мешами sm-модели. Материал – это описание того, какие текстуры используются, способы их наложения, яркость, цвет и другие параметры.
  • Один файл схемы корабля с расширением *.sss (SpaceEngine Spacecraft Scheme), находящийся в папке моделей addons/2001/models/spacecraft/Odyssey2001/Discovery/. Файл схемы описывает, какие модули использует корабль, их расположение и ориентацию, а также стандартное имя корабля, класс, размер, массу и прочие параметры. Корабль должен содержать как минимум один модуль. При запуске SpaceEngine, файлы схем кораблей автоматически ищутся по всем папкам вида */models/spacecraft/*/, в т.ч. внутри pak-файлов, и отображаются в меню строительства кораблей. Таким образом, чтобы корабль стал доступен в SpaceEngine, он должен иметь sss-файл (а для того чтобы он правильно рендерился, он должен иметь все остальные файлы, описанные выше).
  • Построенные игроком корабли сохраняются в скрипте config/spacecraft.sc. В нём сохраняется имя, ссылка на sss-файл схемы, а также координаты, скорость и орбита каждого корабля флота. Этот файл создаётся автоматически, его не надо править при импорте новых кораблей.

Сначала опишем формат файла схемы, это понадобится для дальнейшего понимания.

Файл схемы корабля – *.sss

Для добавления корабля Discovery, создайте в папке моделей addons/2001/models/spacecraft/Odyssey2001/Discovery/ пустой файл с именем DiscoveryShip.sss. Откройте его в блокноте и наберите код, приведённый ниже.

Code


Name    “Discovery”
Class   “Planetship”
Pack    “2001”
Faction “NASA”
Length   168.63181
Offset  (0 1.5 5)
Quat    (1 0 0 0)
Mass     2000000
Albedo   0.1
Exposure 3
Color   (1 1 1)MainEngines  30
RetroEngines 0
HoverEngines 0
CorrEngines  0.5
TurnEngines  0.002
WarpBoostLog 0
Hyperdrive   false
Aerodynamics false

Module  “Main”     { “Odyssey2001/Discovery/DiscoveryHull.cfg” (-1 0 0 0 0 1 0 0 0 0 -1 0 5 15 0 1) }
Module  “Engine1”  { “Odyssey2001/Discovery/DiscoveryEngine.cfg” (0.5 0.8660253882408142 0 0 -0.8660253882408142 0.5 0 0 0 0 1 0 0 60 -20 1) }
Module  “Engine2”  { “Odyssey2001/Discovery/DiscoveryEngine.cfg” (-0.5 0.8660253882408142 0 0 -0.8660253882408142 -0.5 0 0 0 0 1 0 -51.96152496337891 30 -20 1) }

Name – имя корабля по умолчанию, отображается в меню строительства. При постройке первого корабля такого типа он получит указанное имя, например “Discovery”. Второй построенный корабль такого типа получит имя “Discovery 01”, третий – “Discovery 02” и т.д. Имя корабля можно изменить в игре, нажав кнопку “Переименовать” в окне Мендежера кораблей. Можно дать имя, совпадающее с именем уже существующего корабля, однако делать это не рекомендуется, т.к. сложно будет отличить их друг от друга.

Class – Класс корабля, отображается в таблице информации о корабле в SpaceEngine. Допустимые классы:
“Astronaut” – космонавт
“Probe” – зонд
“Shuttle” – шаттл
“Starship” – звездолёт
“Planetship” – межпланетный корабль
“Station” – космическая станция

Pack, Faction – имя пака (комплекта, франшизы) и фракции, к которым относится корабль. В меню строительства кораблей применена двухуровневая схема сортировки по этим двум параметрам. В данном примере логично будет отнести корабль к паку “2001”, а в качестве фракции указать “NASA”. В этой франшизе есть и другие корабли, например корабль СССР “Леонов”, который логично будет отнести к фракции “USSR”. Все имена должны быть на английском языке, если вы хотите, чтобы они были читабельны для иностранных игроков.

Length – длина корабля в метрах, автоматически вычисляется при первой загрузке корабля (используя информацию о положениях и размерах модулей). Поэтому при создании скрипта надо указать значение 0.

Offset – смещение центра корабля в метрах, автоматически вычисляется при первой загрузке корабля, можно изменять в редакторе кораблей. Поэтому при создании скрипта надо указать значение (0 0 0).

Quat – ориентация всей модели как целого (кватернион), можно изменять в редакторе кораблей. Поэтому при создании скрипта надо указать значение (1 0 0 0).

Mass – масса корабля в килограммах, пока что не вычисляется и никак не используется движком, кроме отображения в таблице информации о корабле.

Color – RGB цвет частицы, которая рисуется вместо модели, когда корабль находится далеко. Пока не вычисляется автоматически.

Albedo – среднее альбедо (отражательная способность) корабля, влияет на яркость частицы. Пока не вычисляется автоматически.

Exposure – экспозиция или яркость, применяется ко всем материалам корабля. Задаёт общую яркость модели.

MainEngines, RetroEngines, HoverEngines, CorrEngines – максимальное ускорение (в м/с2) двигателей: главных, тормозных, вертикального взлёта, корректирующих. Если значение равно нулю, значит у корабля нет соответствующих двигателей (например, у стандартного корабля Shuttle нет тормозных двигателей, а у звездолёта – двигателей вертикального взлёта).

TurnEngines – “тяга” маневровых двигателей при повороте. Чем больше, тем быстрее корабль разворачивается.

WarpBoostLog – десятичный логарифм максимальной степени буста (т.е. во сколько раз увеличивается физическая скорость при включении варп-двигателя на полную мощность). Например, чтобы она была 1012, надо писать WarpBoostLog 12. Значение 1012 соответствует примерно 1 световому году в секунду в варпе при физической скорости 10 км/с.

Hyperdrive или Warpdrive – имеет ли корабль варп-двигатель.

Aerodynamics – предназначен ли корабль для полёта в атмосфере. Если значение равно true, то используется аэродинамическая модель шаттла с управляющими поверхностями (элероны, руль высоты, руль направления), которые управляются мышью и клавиатурой. Если значение false, корабль ведёт себя как стрела (разворачивается по направлению потока воздуха), управляющих поверхностей нет, вместо них для разворота используются двигатели коррекции (как в космосе).

Module – один или несколько тегов, описывающих модули корабля:

Code

Module  “Main”     { “Odyssey2001/Discovery/DiscoveryHull.cfg” (-1 0 0 0 0 1 0 0 0 0 -1 0 5 15 0 1) }

В этом коде:
“Main” – имя модуля, используется для отличения модулей друг от друга в редакторе (см. ниже).
“Odyssey2001/Discovery/DiscoveryHull.cfg” – путь к cfg-файлу модуля или модели относительно стандартной папки моделей addons/2001/models/spacecraft/.
(-1 0 0 0 0 1 0 0 0 0 -1 0 0 0 0 1) – матрица трансформации модуля (4×4), по строкам, т.е. первые 4 числа – первая строка, следующие 4 числа – вторая строка и т.д. В приведённом примере она имеет вид:
| -1 0 0 0 |
| 0 1 0 0 |
| 0 0 -1 0 |
| 5 15 0 1 |

Левая верхняя подматрица – это матрица поворота и масштаба. Первые три числа в нижней строке (5 15 0) – смещение центра модуля.
Если вы импортируете одномодульный корабль, сделайте эту матрицу единичной:
(1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1)
Это поместит модуль в центр модели и ориентирует его так, как это было сделано его автором.

Если ориентация корабля после импорта не совпадает с принятой в SpaceEngine системой координат, можно развернуть как сам корабль, так и отдельные модули в редакторе кораблей (см ниже).

Файл модели модуля – *.sm

SpaceEngine имеет свой бинарный формат модели *.sm. В примере, приведённом выше, корабль “Discovery” содержит три модуля, которым соответствуют две модели – DiscoveryHull.sm и DiscoveryEngine.sm (вторая используется дважды). Расположены они в папке addons/2001/models/spacecrafts/Odyssey2001/Discovery/, как указано в sss-файле. Для создания нового модульного корабля можно использовать уже существующие модели модулей, либо импортировать новые модели из формата obj (см. ниже).

Ниже приведена техническая информация о формате файла *.sm для тех, кто хочет сделать свой конвертер или редактор.

Формат *.sm состоит из заголовка и одного или нескольких мешей, каждый из которых состоит из своего подзаголовка и массивов вершин и индексов. Приведённые ниже элементы идут сразу друг за другом. Запись вида "3 * float32" означает три элемента типа float32. Используются следующие обозначения типов данных: char - C/C++ char (8 бит) uint16 - C/C++ unsigned short (16 бита) uint32 - C/C++ unsigned int (32 бита) float32 - C/C++ float стандарта IEEE 754 (32 бита)
Заголовок файла
4 * char - 4 символа 'SM01' 1 * uint32 - число мешей 3 * float32 - смещение центра модели (координаты центра bounding sphere) 1 * float32 - радиус сферы, описанной вокруг модели (радиус bounding sphere) Далее друг за другом идут меши, число которых указано во втором поле заголовка. Меш состоит из собственного подзаголовка, массива вершин и массива индексов.
Подзаголовок меша
uint32 - число вершин uint32 - число индексов uint16 - индекс материала (номер материала по по порядку начиная с нуля в списке материалов в cfg-файле, соответствующем данному sm-файлу) uint16 - режим рисования: 0 - GL_TRIANGLES 1 - GL_TRIANGLE_STRIP 2 - GL_TRIANGLE_FAN 3 - GL_QAUDS 4 - GL_QAUD_STRIP 5 - GL_LINES 6 - GL_LINE_STRIP 7 - GL_LINE_LOOP 8 - GL_POINTS Меш рисуется одним и тем же шейдером (материалом) независимо от режима, поэтому точки и линии будут окрашены цветом текстуры, как если бы режим был GL_TRIANGLES. Шейдер выбирается исходя из материала, например диффуз + нормаль, диффуз + спекулар + бамп, или даже просто монотонный цвет без текстуры (см. описание материалов). Каждый меш модели рисуется только одним материалом и имеет одну общую текстуру диффуза, одну текстуру нормалей и т.д. Далее идёт непрерывный массив вершин, число которых указано во втором поле подзаголовка меша.
Формат вершины
3 * float32 - координаты вершины 3 * float32 - нормаль 3 * float32 - тангенциальный вектор 1 * float32 - знак бинормали 2 * float32 - текстурные координаты Далее идёт непрерывный массив индексов, в формате uint32. Меш рисуется режимом, который указан в заголовке объекта.

Конфигурационный файл sm-модели – *.cfg

Это текстовый файл, имя которого должно совпадать с именем sm-файла. В нашем примере должно быть два таких файла – DiscoveryHull.cfg и DiscoveryEngine.cfg, расположенные там же, где и соответствующие им sm-файлы, т.е. в папке моделей addons/2001/spacecraft/Odyssey2001/Discovery/. Пример содержимого файла DiscoveryHull.cfg:

Code

Unit    1
Length  168.6318Material “Discovery_hull”
Material “Discovery_hull1”
Material “Discovery_HAL2001”
Material “Discovery_Sideairlockete”
Material “Discovery_antenna”
Material “Discovery_bridge”
Material “Discovery_bridge1”
Material “Discovery_elbow”
Material “Discovery_keyboard1”
Material “Discovery_material01”
Material “Discovery_material02”
Material “Discovery_material05”
Material “Discovery_podbayDiscoveryhull”
Material “Discovery_podbaydoors”
Material “Discovery_radar1”
Material “Discovery_sideairlockintDiscoveryhull”

Length, Unit – длина модели в метрах или длина юнита 3D редактора. Эти величины нужны для правильного масштабирования модели. Изначально одна из величин может быть равна нулю, в зависимости от того, известен ли вам юнит или длина модели. В этом случае SpaceEngine вычислит вторую величину и сохранит её в скрипте:
1) Unit = 0, Length = 0
Unit считается равным 1 метру, Length вычисляется по координатам самых удалённых вершин модели.
2) Unit = 0, Length != 0
Length задан, следовательно Unit вычисляется делением Length на длину модели, посчитанную по координатам самых удалённых вершин.
3) Unit != 0, Length = 0
Unit задан, следовательно Length вычисляется умножением Unit на длину модели, посчитанную по координатам самых удалённых вершин.
4) Unit != 0, Length != 0
Оба Unit и Length заданы, ничего не вычисляется.

Material – имя материала, используемого мешем модели (см. описание формата *.sm). Параметров Material столько, сколько мешей в модели, расположены они в порядке нумерации мешей, начиная с нуля. При импорте из *.obj список материалов создаётся автоматически. Сами материалы описываются в sml-файлах библиотеки материалов (см. ниже).

Файл библиотеки материалов – *.sml

Это текстовый файл, содержащий описание одного или нескольких материалов. SpaceEngine автоматически ищет и загружает все sml-файлы, находящиеся в папках вида */textures/spacecraft/*/. Таким образом, можно иметь сколько угодно библиотек материалов, например по одной для каждой модели корабля, или одну для набора кораблей. Похожие корабли могут использовать одинаковые материалы, поэтому есть смысл объединять их в библиотеки.

Модель модуля в SpaceEngine может состоять из нескольких мешей. Каждому мешу назначается один материал, содержащий от 0 до 6 текстур (см. ниже), и тэга Material, описывающего способы использования этих текстур (если текстуры не назначены, тогда меш будет просто закрашен однородным цветом).

При импорте из *.obj файл библиотеки материалов создаётся автоматически из файла *.mtl, идущего в комплекте с *.obj. Имена материалов берутся от туда же, как и большинство параметров (детальные текстуры не поддерживаются в *.obj, поэтому их необходимо добавить в материал самостоятельно после импорта). Имена материалов в cfg-файле модели идут в том порядке, в котором они использовались в *.obj.

Важно! Если при импорте будет обнаружен повторяющийся материал (все параметры, кроме имени, совпадают с каким-то материалом из этой же или другой библиотеки), то данному мешу будет назначен уже существующий материал. Это сделано для увеличения производительности движка – чем меньше различных материалов использует модель, тем реже их необходимо переключать, что уменьшает затраты процессорного времени. Функция объединения материалов работает только при импорте, и может быть отключена с помощью параметра ReplaceDuplicateMat в главном конфигурационном файле SpaceEngine main-user.cfg (параметр ReplaceDuplicateMat).

В нашем примере, используем одну общую для всех кораблей франшизы библиотеку материалов 2001.sml, поэтому поместим её в папку addons/2001/textures/spacecraft/Odyssey2001/ (вне папки Discovery):

Code


Material    “Discovery hull notex”
{

DiffColor       (0.878 0.878 0.878)
SpecColor       (1.000 1.000 1.000)
SpecPower       362.039

}

Material    “Discovery hull”
{

DiffColor      (0.878 0.878 0.878)
SpecColor      (1.000 1.000 1.000)
SpecPower       362.039
DiffMap        “Odyssey2001/Discovery/Discovery hull.png”
BumpMap        “Odyssey2001/Discovery/Discovery hull bump.png”
BumpHeight      5.0
DetDiffMap     “default/detail-noise.*”
DetBumpMap     “default/detail-noise.*”
DetDiffScale    8.0
DetBumpScale    8.0
DetBumpHeight   0.3
DiffMapAlpha   “Transp”
TwoSided        true

}

Material    “Discovery engine01”
{

DiffColor      (0.500 0.500 0.500)
SpecColor      (1.000 1.000 0.800)
SpecPower       15.0
EmisColor      (1.000 1.000 1.000)
EmisBright      0.5
DiffMap        “Odyssey2001/Discovery/Discovery engine.jpg”
NormMap        “Odyssey2001/Discovery/Discovery engine bump.png”
EmisMap        “Odyssey2001/Discovery/Discovery engine lights.dds”
DetBumpMap     “default/detail-noise.*”
DetBumpScale    20.0
DetBumpHeight   0.5

}

Material “Discovery_hull_notex” – заголовок тэга, “Discovery_hull_notex” – это имя материала. При импорте из obj + mtl, имя материала будет таким же, как в mtl.

DiffMap – текстура цвета, RGB или RGBA (если есть альфа канал, он интерпретируется как размер (экспонента) блика или как прозрачность, см. параметр DiffMapAlpha). Путь указывается относительно стандартной папки текстур, т.е. относительно addons/2001/textures/spacecraft/.

BumpMap – текстура высот, Grayscale или RGB (лучше первое). Если указана только эта текстура, текстура нормалей генерируется по ней автоматически, используя параметр BumpHeight (см. ниже). Путь указывается относительно стандартной папки текстур addons/2001/textures/spacecraft/.

NormMap – текстура нормалей в tangent space, RGB. Если указана эта текстура, то параметры BumpMap и BumpHeight игнорируются. Путь указывается относительно стандартной папки текстур addons/2001/textures/spacecraft/.

SpecMap – текстура отражательной способности (specular), RGB или RGBA. Компоненты RGB задают цвет блика. Если есть альфа-канал, он интерпретируется как размер (экспонента) блика, таким образом можно задавать свой размер блика для каждого пикселя. Яркость альфа-канала умножается на значение параметра SpecPower. Путь указывается относительно стандартной папки текстур addons/2001/textures/spacecraft/.

EmisMap – текстура свечения, RGB или RGBA. Альфа-канал пока не используется. Путь указывается относительно стандартной папки текстур addons/2001/textures/spacecraft/.

DetDiffMap – детальная диффузная текстура, т.е. мелкий цветной узор. Наносится на всю модель с повторениями, поэтому должна быть зациклена. Формат аналогичен
DiffMap.

DetBumpMap – детальная карта высот, т.е. мелкие неровности поверхности. Наносится на всю модель с повторениями, поэтому должна быть зациклена. Формат аналогичен формату BumpMap. Заметим, что здесь указан путь default/Detail-noise.*, т.е. будет загружена текстура Detail-noise.png из стандартного набора текстур SE, находящаяся по пути data/textures/spacecraft/default/. Помним, что папки вида */textures/spacecraft/ объединяются в одну большую виртуальную папку.

DetDiffScale, DetBumpScale – масштаб (частота) детальных текстур цвета и бампа.

BumpHeight, DetBumpHeight – амплитуда (высота) бампа и детального бампа.

DiffMapAlpha – способ интерпретации альфа-канала текстуры DiffMap, если он есть:
“None” – альфа-канал игнорируется
“Spec” – в альфа-канале задаётся яркость блика (specular). Она умножается на SpecColor. Если присутствует текстура SpecMap, то этот эффект блика складывается с эффектом от SpecMap.
“Transp” – в альфа-канале задаётся прозрачность. Если альфа меньше 0.5 (или 128 в целых единицах от 0 до 255), то пиксель отбрасывается и в этом месте в поверхности модели будет дырка. Используется для создания решётчатых/ферменных конструкций при минимуме полигонов (см. параметр TwoSided).

TwoSided – если установлен в true, материал считается двухсторонним, отсечение нелицевых граней отключается. Таким образом внутренние (обратные) поверхности меша будут рендериться. Если вы создаёте ферменную конструкцию, используя DiffMapAlpha “Transp”, необходимо использовать и этот параметр, иначе внутренние поверхности ферм не будут видны. При этом текстуры внешней и внутренней поверхностей совпадают. Другой вариант создания ферменных конструкций с разными текстурами на внешней и внутренней поверхности – дублирование геометрии, но с обратными нормалями и другими текстурными координатами (или другим материалом) для внутренней поверхности. При этом прозрачность должна быть включена (DiffMapAlpha “Transp”), а двусторонний материал отключен (параметр TwoSided не указывается).

DiffColor – цвет диффузной компоненты. Если текстура DiffMap не назначена или ещё не загрузились, меш рисуется этим цветом. Иначе цвет текстуры DiffMap умножается на этот цвет. Это можно использовать для быстрого создания скина другого цвета для той же модели. Однако убедитесь, что DiffColor не равен нулю, иначе текстура будет чёрной!

SpecColor – цвет блика, Финальный цвет блика умножается на этот цвет. Компоненты SpecColor могут быть больше 1.0, тогда блик будет ярким, с эффектом сияния (если в настройках графики включено Bloom).

SpecPower – размер (экспонента) блика. Умножается на значение альфа-канала текстуры SpecMap или DiffMap.

EmisColor – цвет свечения, умножаются на этот цвет на цвет пикселей из текстуры свечения EmisMap. Если текстура свечения не назначена или ещё не загрузились, эффект свечения не рисуется. Компоненты EmisColor могут быть больше 1.0, тогда свечение будет ярким, с эффектом сияния (если в настройках графики включено Bloom).

EmisBright – множитель для яркости эффекта свечения. Может быть больше 1.0, тогда свечение будет ярким, с эффектом сияния (если в настройках графики включено Bloom).

Пути к текстурам в *.sml должны быть указаны относительно стандартной папки текстур addons/2001/textures/spacecraft/. Т.е. если вы хотите, чтобы все текстуры вашей модели находились по адресу addons/2001/textures/spacecraft/Odyssey2001/Discovery/, нужно указывать имя текстуры в виде
DiffMap “Odyssey2001/Discovery/texture.jpg”
Допустимо использовать автовыбор формата, т.е. указание
DiffMap “Odyssey2001/Discovery/texture.*”
заставит SpaceEngine загрузить текстуру в одном из поддерживаемых форматов, в таком порядке приоритета: dds, png, jpg, tif, tga. Ваши корабли могут использовать стандартные текстуры из папки data/textures/spacecraft/default/, например детальные текстуры, как в этом примере.

Текстуры лучше сохранять в формате png или dds (поддерживается dds со сжатием DXT1, DXT3, DXT5, LATC1 и LATC2). Но помните, что в Photoshop непросто сохранить png текстуры с альфа каналом, т.к. формально альфа-канал в png не поддерживается. Чтобы это обойти, сохраняйте RGBA текстуры в формат tga, и затем преобразуйте их в альфа-png с помощью консольной команды SpaceEngine:

Code
SavePNG addons/2001/textures/spacecraft/Odyssey2001/Discovery/texture.tga

Необходимо указывать полный путь относительно папки SpaceEngine. Аналогично можно конвертировать текстуры в другие форматы командами SavePNG, SaveDDS, SaveJPG, SaveTIF, SaveTGA.

Импорт модели из формата *.obj

SpaceEngine поддерживает импорт модели из формата *.obj с автоматической конвертацией в формат *.sm. Всё, что для этого нужно, это сохранить модель из вашего 3D редактора в формат *.obj с созданием библиотеки материалов *.mtl (опционально), скопировать эти файлы и файлы текстур в соответствующие папки SpaceEngine (см. ниже), и создать файл схемы корабля *.sss.

При сохранении (экспорте) модели в формат *.obj, в настройках 3D редактора необходимо выбрать экспорт треугольниками (triangles), а также поставить галочки – сохранять вершины (vertex), нормали (normals) текстурные координаты (texture coordinates), и создавать библиотеку материалов (Create mat-library).

Пример настроек для 3ds Max

Будем считать, что мы импортируем модель корабля Discovery, основную часть без двигателей (двигатели в нашем примере были отдельными модулями, они импортируются аналогично). При экспорте из 3ds max должно получиться два файла – геометрия модели и библиотека материалов: DiscoveryHull.obj и DiscoveryHull.mtl. Их надо скопировать в папки моделей и текстур вашего аддона:
DiscoveryHull.obj – скопировать в addons/2001/models/spacecraft/Odyssey2001/Discovery/
DiscoveryHull.mtl – скопировать в addons/2001/textures/spacecraft/Odyssey2001/Discovery/
Текстуры также надо скопировать в папку addons/2001/textures/spacecraft/Odyssey2001/Discovery/.

Затем надо создать файл схемы корабля *.sss (см. выше), указав путь на файл addons/2001/models/spacecraft/Odyssey2001/Discovery/DiscoveryHull.cfg в параметре Module. Хотя этого *.cfg файла ещё не существует, он будет создан автоматически при загрузке корабля в SE. Файл *.sss можно создать самостоятельно, или скопировать и изменить какой-то уже существующий файл. Пока что в sss-файле указываем только один модуль – DiscoveryHull.

После этого надо просто запустить SpaceEngine, найти корабль в меню строительства и построить его. SpaceEngine загрузит файлы *.obj и *.mtl и автоматически создаст файлы *.sm и *.cfg в папке моделей и файл *.sml в папке текстур. В зависимости от количества полигонов, импорт *.obj может занять значительно время. В процессе импорта в лог-файле syste/se.log будут появляться сообщения о прогрессе и возможных ошибках. После успешного импорта файлы *.obj и *.mtl можно будет удалить. Если же необходимо повторить импорт (например обновить модель на новую версию), просто удалите *.sm файл и скопируйте новый *.obj файл в папку моделей и *.mtl файл в папку текстур.

Чтобы проверить ориентацию корабля или модуля, возьмите управление им. Если ориентация не верна, измените её в редакторе (см. ниже).

Если библиотеки материалов *.mtl нет или она не была экспортирована, SpaceEngine всё равно создаст файл *.cfg, но он будет содержать лишь параметры Unit и Length, без ссылок на материалы. Ссылки на материалы (и, возможно, библиотеку материалов) надо будет добавить вручную.

При импорте модели с библиотекой материалов *.mtl, пути и расширения текстур будут автоматически заменены на Odyssey2001/Discovery/ и .*. Т.е. например если в файле *.mtl встречается такое описание текстуры:
C:/User/3dsmax/ship1/hull.jpg
то оно будет заменено в *.sml на
Odyssey2001/Discovery/hull.*
Если такая замена не верна (например модель использует текстуру из другой папки SpaceEngine, к примеру Odyssey2001/Discovery/engine1.jpg), необходимо будет выйти и SpaceEngine, открыть файл библиотеки материалов *.sml и вручную исправить путь.

Т.к. формат *.obj + *.mtl не поддерживает такие эффекты SpaceEngine, как детальные текстуры, прозрачность, двусторонность и т.д., после импорта модели необходимо будет отредактировать созданную библиотеку материалов *.sml, либо сменить ссылки на материалы в файле *.cfg на какие-то материалы, уже существующие в других библиотеках.

Аналогично импортируются другие модули (как самостоятельные “корабли”). После успешного импорта, sss-файлы модулей необходимо удалить (иначе они останутся доступны в меню строительства кораблей), а вместо этого прописать ссылки на них в sss-файл самого корабля:

Code
Module  “Engine1”  { “Odyssey2001/Discovery/DiscoveryEngine.cfg” (0.5 0.8660253882408142 0 0 -0.8660253882408142 0.5 0 0 0 0 1 0 0 60 -20 1) }
Module  “Engine2”  { “Odyssey2001/Discovery/DiscoveryEngine.cfg” (-0.5 0.8660253882408142 0 0 -0.8660253882408142 -0.5 0 0 0 0 1 0 -51.96152496337891 30 -20 1) }

После этого их расположение и ориентацию можно будет подправить в редакторе (см. ниже), а также добавить эффекты, например для двигателей – реактивную струю.

Также после импорта можно объединить sml-файлы библиотеки материалов в один файл. А после импорта всех кораблей франшизы, объединить их sml-файлы в один общий файл. Хотя это не обязательно.

Использование редактора кораблей

Если ориентация корабля после импорта не совпадает с принятой в SpaceEngine системой координат, можно развернуть как сам корабль, так и отдельные модули в редакторе кораблей в SpaceEngine. Для этого надо выбрать корабль и нажать [Shift]+[F2]. Также здесь можно добавить эффекты двигателей, стыковочные порты и камеры вида от первого/третьего лица. Режимы работы редактора переключаются с помощью галочек в верхней части панели.

Изменение ориентации и сдвига корабля как целого

Поставьте галочку “Изменить сам корабль”. Можно вращать и сдвигать корабль как целое с помощью кнопок “Положение” и “Ориентация”. Единица расстояния – в метры, углов – градусы. Нажатие кнопки [Shift] переключает кнопки в “грубый режим” – полезно для быстрого перемещения модели. Галочка “Показать оси” поможет в определении центра модели. Вращайте камеру вокруг корабля с помощью зажатой правой кнопки мыши, чтобы определить, правильно ли сделана центровка. Возьмите управление кораблём для определения, правильно ли будет сориентирована модель в игре (должен быть вид автоматической камеры, см. ниже). Камеры добавляются/редактируются в этом же режиме (см. ниже).

Примечание: запустите время, иначе могут быть ошибки в центровке модели.

Изменение модуля

Поставьте галочку “Изменить модуль”. Выберите модуль из выпадающего списка ниже. Выбранный модуль начнёт мигать. Можно вращать, сдвигать и масштабировать модуль с помощью кнопок “Положение”, “Ориентация” и “Масштаб”. Единица расстояния – метры, углов – градусы. Нажатие кнопки [Shift] переключает кнопки в “грубый режим” – полезно для быстрого перемещения модели. Изменения касаются только этой конкретной копии модуля в этом классе кораблей. Например, если вы передвинете модуль двигателя в корабле “Explorer-1”, он окажется передвинут во всех новых копиях этого корабля, и в старых – после перезапуска SpaceEngine.

Изменение/добавление эффекта двигателя

Поставьте галочку “Изменить эффект двигателя”, когда выбран модуль. Эффект двигателя применяется к модулю. Это позволяет в модульных кораблях ввести модуль “двигатель” и сделать столько его копий, сколько нужно, расставив их в разных местах. При этом эффект двигателя у такого модуля будет только один. Напротив, для одномодульного корабля придётся добавлять столько эффектов двигателей, сколько двигателей имеет сам корабль.

Тип (Type) – влияет на внешний вид струи.
Группа (Group) – влияет на поведение.

Main, Retro, Hover, Thruster означают соответственно главные двигатели, реверсные (тормозные), двигатели вертикального взлёта и маневровые. SpaceEngine сам определяет величину и силу эффекта двигателя в зависимости от его расположения, ориентации и группы. Так что если вы расположите главные двигатели (группа Main) на носу корабля, они не будут работать (в смысле не будет эффекта). Физика пока не просчитывается, это просто визуальный эффект модели корабля.

Положение, ориентация и масштаб эффекта регулируются кнопками, аналогичными таковым при редактировании модуля. Изменения применяются сразу ко всем модулям данного типа, у всех кораблей! Так что настроив модуль двигателя один раз, можно потом к нему не возвращаться. Изменения сохраняются в cfg-файл модуля (добавляются тэги EngineEffect).

Изменение/добавление стыковочного порта

Поставьте галочку “Изменить стыковочный порт”, когда выбран модуль. Стыковочный порт, как и эффект двигателя, применяется к модулю. Это позволяет в модульных кораблях ввести модуль “стыковочный узел” и сделать столько его копий, сколько нужно, расставив их в разных местах. Например, это используется в модулях “shuttle_deck_front” и “shuttle_deck_back” модульных кораблей из редактора SHW.

В выпадающем списке ниже выбирается редактируемый порт, если он есть. Положение и ориентация порта регулируются кнопками, аналогичными таковым при редактировании модуля. Тип порта пока ни на что не влияет. Изменения применяются сразу ко всем модулям данного типа, у всех кораблей! Изменения сохраняются в cfg-файл модуля (добавляются тэги DockingPort).

Изменение коридора стыковочного порта

Поставьте галочку “Изменить коридор стыковочного порта”, когда выбран модуль. Стыковочные порты в SpaceEngine имеют визуальный указатель в виде коридора из переливающихся прямоугольников. Он позволяет сориентироваться пилоту прибывающего челнока перед стыковкой. Поэтому конец коридора (откуда выходят “волны”) должен быть расположен рядом с самим портом.

Параметры эффект коридора сохраняются в cfg-файл модуля, в тот же тэг DockingPort стыковочного порта. Поэтому имя у него в выпадающем списке такое же, как у стыковочного порта. Положение, ориентация и размер эффекта регулируются кнопками, аналогичными таковым при редактировании модуля. Тип порта пока ни на что не влияет.

Изменение/добавление камеры

Добавить камеру внешнего обзора или вида из кокпита можно, поставив галочку “Изменить камеру внешнего обзора”, когда стоит галочка “Изменить сам корабль”. В выпадающем списке ниже выбирается редактируемая камера, если она есть, а ещё ниже в выпадающем списке выбирается её тип:

Behind – плавная камера для вида от третьего лица.
Cockpit – вид из кокпита, камера жёстко закреплена на корабле.
Auto – стандартная плавная камера, используется также, если ни одной камеры не назначено.

При нажатии “Добавить” камера создаётся в той точке где в данный момент находится наблюдатель. Далее её можно двигать/вращать с помощью соответствующих кнопок. Положение и ориентация автоматической камеры не важны, они вычисляются самим движком. Проверить камеру можно, просто взяв управление кораблём, и переключившись на неё.

Изменения сохраняются в sss-файл корабля.

Сохранение изменений

Для сохранения изменений нажмите кнопку “Сохранить”. Сохранение в pak-архив не производится, вместо этого создаётся sss или cfg файл на диске по тому же виртуальному пути, что и у оригинального файла в pak-архиве. Будьте осторожны, редактируя корабль! Т.к. изменения записываются в sss-файл схемы корабля, они скажутся на всех построенных кораблях данного типа, а не на том конкретном корабле, который вы редактируете.

При нажатии кнопки “Закрыть” редактор закрывается без сохранения последних изменений на диск. Они однако остаются на том корабле, который редактировался, но только до перезапуска SpaceEngine.