Последнее обновление: 21 мая 2013 (версия 0.9.7.1)
Внимаение! Текстура свечения (EmisMap) и бликов (SpecMap) будут реализованы в 0.9.7.1, в текущей версии 0.9.7.0 они работать не будут! Всё остальное работает.
Модель корабля в SpaceEngine состоит из:
Файла модели с расширением *.sm, находящегося в папке models/spacecrafts/default/ (стандартные модели) или models/spacecrafts/addons/ (аддоны).
Файла скрипта материалов и других параметров модели с расширением .cfg и именем, совпадающим с именем .sm файла модели, и находящегося в той же папке.
Одной или нескольких текстур, находящихся в одной из подпапок папки textures/spacecrafts/default/ (стандартные текстуры) или models/spacecrafts/addons/ (аддоны). Модель может быть и без текстур.
Скрипта, находящемся в файлеconfig/spacecrafts.sc. Этот скрипт один на все корабли. В нём описаны различные параметры корабля, ссылки на модель, а также сохраняются координаты и скорость корабля при выходе из игры.
Сначала опишу формат скрипта, это понадобится для дальнейшего понимания.
Скрипт корабля
Для добавления нового корабля откройте в блокноте файл config/spacecrafts.sc и наберите код типа приведённого ниже. Самый простой способ - скопировать один из уже существующих там скриптов кораблей, а затем изнемть нужные параметры. Обычно всё что требуется - изменить имя, размер и массу корабля, а также ссылку на модель.
Если просто скопировать существующий корабль, он появится в SpaceEngine и им можно будет управлять так же, как оригиналом. Поэтому чтобы отличить копию от оригинала, лучше дать ей другое имя.
Код
Spacecraft "SHW-X" // Имя корабля { Class "Starship" // Класс (отображается в инфо о корабле в SE) Length 516.504 // Длина (в метрах) Mass 2.2e11 // Масса (в кг) Unit 1.0 // длина юнита, использовавшегося в редакторе (в метрах)
Model "Default/SHW-X.cfg" // путь к скрипту модели корабля (в папке models/spacecrafts/)
Color ( 1.00, 1.00, 1.00 ) // цвет частицы, которая рисуется вместо модели, когда корабль далеко Albedo 0.07 // альбедо (влияет на яркость частицы) Exposure 3.0 // экспозиция (яркость модели при рендере)
// ID системы, в которой находится корабль: CurSystemID "-1.-1.-1.-1.-1.-1.-1.-1.73568.-1"
Class Класс корабля - отображается в инфо о корабле в SpaceEngine. Допустимые классы: "Probe" - зонд "Shuttle" - шаттл "Starship" - звездолёт "Planetship" - межпланетный корабль "Station" - станция
Length, Unit Длина корабля в метрах или длина юнита 3D редактора. Если указана длина юнита, длина корабля вычисляется и автоматически сохраняется в скрипт в параметр Length. Если длина юнита неизвестна, нужно просто указать приблизительную длину корабля в параметре Length (а параметр Unit не использовать).
Model Путь к скрипту модели корабля относительно папки models/spacecrafts/
Color RGB цвет частицы, которая рисуется вместо модели, когда корабль находится далеко.
Albedo Среднее альбедо (отражательная способность) корабля. Влияет на яркость частицы.
Exposure Экспозиция, применяется для всех материалов корабля. Задаёт общую яркость модели.
CurSystemID, UnivPos, Orientation, Velocity, AngVelocity, Orbit Эти параметры перезаписываются при выходе из SpaceEngine. Их можно не менять, но заданы они должны быть.
Бинарный формат модели *.sm
SE имеет свой бинарный формат модели *.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, начиная с нуля) uint16 - режим рисования:
Меш рисуется одним и тем же шейдером (материалом) независимо от режима, поэтому точки и линии будут окрашены цветом текстуры, как если бы режим был GL_TRIANGLES. Шейдер выбирается исходя из материала, например диффуз + нормаль, диффуз + спекулар + бамп, или даже просто монотонный цвет без текстуры (см. описание материалов). Каждый меш модели рисуется только одним материалом и имеет одну общую текстуру диффуза, одну текстуру нормалей и т.д.
Далее идёт непрерывный массив вершин, число которых указано во втором поле подзаголовка меша.
Далее идёт непрерывный массив индексов, в формате uint32. Меш рисуется режимом, который указан в заголовке объекта.
Импорт модели из формата *.obj
SpaceEngine поддерживает импорт модели из формата *.obj с автоматической конвертацией в формат *.sm. Для импорта модели надо сохранить её из вашего 3D редактора в формат *.obj с библиотекй материалов *.mtl (опционально) и поместить эти файлы в папку models/spacecrafts/addons/. Имена обоих файлов должны совпадать. При экспорте модели в *.obj в настройках 3D редактора необходимо выбрать экспорт треугольниками (triangles), а также поставить галочки - сохранять вершины (vertex), нормали (noramls) и текстурные координаты (texture coordinates), и создавать библиотеку материалов (Create mat-library).
При экспорте должно получиться два файла - с расширениями *.obj (геометрия модели) и *.mtl (библиотека материалов, текстовый файл с описанием).
После того, как будет добавлен скрипт корабля (см. выше), надо просто запустить SpaceEngine - он загрузит файлы *.obj и *.mtl и автоматически создаст файлы *.sm и *.cfg в той же папке. После этого файлы *.obj и *.mtl можно удалить. В зависимости от количества полигонов, загрузка *.obj может длиться довольно долго. Если надо обновить модель на новую версию, просто удалите *.sm и скопируйте в папку новый *.obj.
Если библиотеки материалов *.mtl нет или она не была экспортирована, SpaceEngine всё равно создаст файл *.cfg, но он будет содержать лишь параметр MeshEulerAngles, без описания материалов. Их надо будет добавить вручную.
Формат скрипта материалов *.cfg
В начале скрипта идёт параметр, не имеющий отношения к материалам:
MeshEulerAngles (180.000000 270.000000 90.000000) Это эйлеровы углы ориентации модели. Если корабль в SpaceEngine летит хвостом вперёд или лежит на боку, нужно правильно задать эти углы. Они могут быть установлены в режиме редактирования в SpaceEngine (два раза нажать кнопку *) с помощью стерлок и кнопок < и > (шаг изменения угла - 90°, с зажатым Shift - 1°). При редактировании изменения не сохраняются, углы надо переписать в скрипт вручную с показанй на экране.
После этого идёт один или несколько тэгов Material, содержащих описание материалов:
SpaceEngine поддерживает модель, состоящую из нескольких мешей. Каждому мешу назначается один материал, содержащий от 0 до 6 текстур, и тэга Material, описывающего способы использования этих текстур (если текстуры не назначены, тогда меш будет просто закрашен равномерным цветом). Тэги материалов в файле *.cfg идут в том порядке, в котором они использовались в *.obj. Почти все параметры тэга материала аналогичны параметрам из библиотеки *.mtl.
Описание параметров:
Material "Default" - заголовок тэга, "Default" - это имя материала. Имя может быть любым, оно не используется в SpaceEngine. При импорте из *.obj + *.mtl имя материала будет таким же, как в *.mtl, для удобства идентификации материала.
DiffMap Текстура цвета, RGB или RGBA (если есть альфа канал, он интерпретируется как яркость блика или прозрачность, см. параметр DiffMapAlpha).
BumpMap Текстура высот, Grayscale или RGB (лучше первое). Если указана только эта текстура, текстура нормалей генерируется по ней автоматически, используя параметр BumpHeight (см. ниже).
NormMap Текстура нормалей в tangent space, RGB. Если указана эта текстура, то параметры BumpMap и BumpHeight игнорируются.
SpecMap Текстура отражательной способности (specular), RGB или RGBA. Компоненты RGB задают цвет блика. Если есть альфа-канал, он интерпретируется как размер (экспонента) блика, таким образом можно задавать свой размер для каждого пикселя. Целочисельное значение альфы от 0 до 255 суммируется со значением параметра SpecPower. Таким образом, если вы хотите использовать только альфа канал, необходимо установить SpecPower 0.
EmisMap Текстура свечения, RGB или RGBA. Альфа-канал пока не используется.
DetailDiffMap Детальная диффузная текстура, т.е. мелкий цветной узор. Наносится на всю модель с повторениями, поэтому должна быть зациклена. Формат аналогичен DiffMap.
DetailBumpMap Детальная карта высот, т.е. мелкие неровности поверхности. Наносится на всю модель с повторениями, поэтому должна быть зациклена. Формат аналогичен BumpMap.
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 не назначена или ещё не загрузились, меш рисуется этим цветом.
SpecColor Цвета блика. Если текстура SpecMap не назначена или ещё не загрузились, блик на меше рисуется этим цветом. Компоненты SpecColor могут быть больше 1.0, тогда блик будет ярким, с эффектом сияния (если в настройках графики включено HDR/Bloom).
SpecPower Размер (экспонента) блика. Суммируется со значением альфа-канала пикселей текстуры SpecMap, если она есть.
EmisColor Цвета свечения, при рендере цвет пикселей из текстуры свечения EmisMap умножаются на этот цвет. Если текстура свечения не назначена или ещё не загрузились, эффект свечения не рисуется. Компоненты EmisColor могут быть больше 1.0, тогда свечение будет ярким, с эффектом сияния (если в настройках графики включено HDR/Bloom).
EmisBright Множитель для яркости эффекта свечения. Может быть больше 1.0, тогда свечение будет ярким, с эффектом сияния (если в настройках графики включено HDR/Bloom).
Пути к текстурам в *.cfg и/или *.mtl должны быть указаны относительно папки textures/spacecrafts/. Т.е. если вы хотите, чтобы все текстуры вашей модели находились по адресу textuers/spacecrafts/Addons/MyShip/, нужно указывать имя текстуры в виде DiffMap "Addons/Myship/texture.jpg". Допустимо использовать автовыбор формата, т.е. указание DiffMap "Addons/Myship/texture.*" заставит SpaceEngine загрузить текстуру в одном из поддерживаемых форматов, в таком порядке приоритета: dds, png, jpg, tif, tga.
В версии 0.9.7.1 желательно размещать текстуры новых кораблей (аддонов) в папке textuers/spacecrafts/Addons/, а модели - в папке models/spacecrafts/Addons/. Папки textuers/spacecrafts/Default/ и models/spacecrafts/Default/ зарезервированы для стандартных текстур и моделей кораблей. Ваши корабли могут использовать стандартные текстуры из папки textuers/spacecrafts/Default/, например - детальные текстуры.
Текстуры лучше сохранять в формате PNG или DDS (поддерживается DDS со сжатием DXT1, DXT3, DXT5, LATC1 и LATC2). Но помните, что фотошоп странно сохраняет PNG текстуры с альфа каналом - зачем-то умножает RGB на альфу и сохраняет как RGB. Чтобы это обойти, сохраняйте RGBA текстуры в формат TGA, и затем преобразуйте их в правильный PNG с помощью SpaceEngine. Для этого надо в консоли набрать команду:
подскажите что делаю не так. кидаю как и раньше модель в obj и mtl, создает sm (модель в spaceengine отображается) но файла cfg не создает. хотя вроде должнет. (автоматически создаст файлы *.sm и *.cfg в той же папке.)
Можно. В файле \SpaceEngine 0.97\config\spacecrafts.cfg Например: Spacecraft "Shuttle-01" { Class "Shuttle" Length 25.0317 !!!!!! Это и есть тот параметр. Mass 18000
Unit 0.01
Model "Default/Shuttle.cfg"
Albedo 0.07 Exposure 3.0 Color ( 1.00, 1.00, 1.00 ) и т.д.
Что касается эффекта выхлопа двигателей, то его пока нет.
Корабль просто прозрачный, блики и тому подобные эффекты отсутствуют...
У меня было тоже самое. Видно вы забыли написать скрипт Any name.сfg Процессор - AMD FX-9590 @4.70 GHz(куплен 27.12.13) Видеокарта - ATI Radeon HD 7990 6ГБ Оперативка - 16 GB RAM Операционая система - Windows 7 Ultimate x64