Здесь приведены не полные, но иногда полезные данные по формату этой комманды, возможны ошибки. Буду рад увидеть ваши замечания и исправления. Документы, на которые есть ссылки можно найти на сайте у Эпиков. Команды описывались и проверялись для Unreal / UT 4.05.
Словарик:
Меш – mesh – 3D модель
персонажа, то что мы видим в игре.
LOD-последовательности -
последовательности упрощения, то есть чем дальше, тем меньше деталей
отображается. Есть у текстур и моделей (у текстур это мипы //MIPS).
Важно:
Что можно делать командой #exec.
Импорт мешей и анимаций для персонажей из файлов, созданных плагином из 3DSMAX
//Дополнительно смотреть документ Unreal Geomorph Level-Of-Detail Notes
Комментарий:
Параметры после DATAFILE не обязательны.
Низкоуровневая детализация (LOD) может быть выключена по умолчанию (depending on how it is hardcoded in UnEdSrv.cpp)
Параметры:
MLOD - type Boolean (аналог MIPS=OFF для текстур)
Двоичный ключ для отключения детализации меша. MLOD=0 исключает потерю
деталей.//!!!При этом объект почему-то может вообще не рисоваться (меш перестаёт
отрисовываться) в Unreal/UT.
Always use MLOD=0 if you want to disable any detail loss, rather than putting extreme STRENGTH or MINVERTS values in the LODPARAMS. Что означает, если ключ нормально работает, то лучше пользоваться им, а не вторым способом изменения уроня детализации (см. #exec MESH LODPARAMS).
LODSTYLE
Битовое поле переключающее стили построения
последовательности упрощения.
Значение по умолчанию == 0. Полезны 2 и 8.
0x01: Кривизна дороже длины.
0x02: Защищает грани двусторонних
полигонов.
0x04: Пытаться беречь текстуру от изломов (рубцов).
0x08:
Длина дороже кривизны
0x10: Прозрачные полигоны схлопываются немного раньше
в LOD-последовательности (убрано в 224)
Совет: для модели лучше попробовать
несколько комбинаций и в итоге выбрать наиболее подходящую.
LODFRAME
Если есть анимационная последовательность, можно выбрать
представительный кадр (тот кадр, на основе которого будут создаваться
LOD-последовательности) для генерации последовательности упрощения.
(По-умолчанию кадр == 0).
LODNOTEX - не видел
ZEROTEX
Если установлен, заставляет игнорировать текстурные
координаты. Как результат меньше памяти и лучше быстродействие для сложных мешей
обстановки (environment-mapped meshes).
LODOLD - не видел
Maintain the original order of animation
vertices as they are imported. If active, this means some internal
reorganization will be done at load time, instead of compile time. Included to
make differential patching of older content feasible.
UNMIRROR – !!! При установленном в 1 происходит зеркалирование меша относительно плоскости YZ; То есть из одной модели можно сделать и её зеркальную копию, что в основном применяется для создания оружия (правый/левый вид)
UNMIRRORTEX - (значения 1,4). Аналогично зеркалирование для текстур.
Определяет параметры LOD-выбраковки (см. также).Параметры:
STRENGTH - float
Линейный LOD-масштаб. По-умолчанию == 1.0. Увеличивать, для более сильной LOD-выбраковки, уменьшать в случаях, когда искажения модели начинаются слишком рано.MINVERTS - int
Минимальное количество вершин, которое должно остаться у меша независимо от расстояния.
В основном используется для очень простых объектов (коробки, деревья, птицы и т.п.), которые должны выглядеть хорошо даже на большом расстоянии.MORPH - float – примеров использования не видел
0.0 для отсутствия трансформирования, любое другое значение в отрезке 0.0-1.0 означает пропорцию вершин которыми позволяется жертвовать для плавного трансформирования. По-умолчанию 0.3. Чем больше значение, тем меньше растрескивание, но больший расход времени на просчет. Нормальные значения лежат в интервале 0.25-0.4.ZDISP - активно используется в UT
В координатах мира (стандартная высота игрока == 60) расстояние от отображаемогомеша, с которого начинается упрощение.
В оригинале: More precisely, the fraction of vertices drawn scales with the distance Z as follows: 1 / ( STRENGTH * (Z - ZDISP) ), where (Z-ZDISP) is clamped at a minimum of 1.0.
Параметры:
MESH – меш
SEQ – имя анимации.
TIME – задает относительное время вызова из анимции приблизительно по формуле:
!!! ПАРАМЕТР TIME=0.0 не работает.
Значения TIME должны различаться, иначе все одинаковые, кроме первого,
игнорируются.
Для анимации из 5 кадров с RATE=1 (один кадр в секунду):
Действие | Время в игре | Величины |
Start |
|
4.040 (полное время) |
TIME = 0.0001 ~ 0-й кадр |
|
0.038 (дельта) |
TIME = 0.1 |
|
0.491 (дельта) |
TIME = 0.2 - 1-й кадр |
|
0.526 (дельта) |
TIME = 0.3 |
|
0.489 (дельта) |
TIME = 0.4 - 2-й кадр |
|
0.488 (дельта) |
TIME = 0.5 |
|
0.524 (дельта) |
TIME = 0.6 - 3-й кадр |
|
0.500 (дельта) |
TIME = 0.7 |
|
0.492 (дельта) |
TIME = 0.8 - 4-й кадр |
|
0.492 (дельта) |
End |
|
0.000 (дельта) |
FUNCTION – метод персонажа, который будет вызван из анимации в установленное в TIME время.
Относительное изменение положения центральной точки и вектора направления для меша.
Можно смещать центральную точку меша
Eдиницы, скорей всего, из 3D MAX. 10ed==1unreal unit (для масштабирования см. SCALE),повороты 2*Pi=2^8 (2 в степени 8) //64 == 90 градусов.
Yaw – в плоскости XY
Roll – поворот в плоскости нормали к направлению (по оси направления (взгляда) по часовой стрелке)
Pitch – поворот вверх по направлению взгляда.
Значения могут быть и орицательными.
объявление анимационной последовательности для меша.Параметры:
RATE – кадров в секунду (default value == 30 (а я верю ;) )), необходим для начального регулирования скорости анимации, чтобы играть её в UT с определённым параметром скорости.
GROUP – название группы для разделения анимаций.
STARTFRAME – первый кадр анимации в общей последовательности кадров.
NUMFRAMES – количество кадров из общей последовательности
Примечание: на один набор кадров могут накладываться несколько анимаций (в любой модели есть анимация ALL, а все остальные заданы внутри неё), точно также один кадр может принадлежать любому количеству анимаций.
ПРИМЕЧАНИЕ: работает только в UT.
Параметры по аналогии с #exec
MESH SEQUENCE
Назначение MESHMAP - карты размещения текстуры на меше.
Масштабирование модели по осям (относительно 3DSMAX-овских).
Зачем здесь повороты (Yaw,Pitch,Roll) не знаю (может это возможность масштабирования в некой повёрнутой системе координат).
Назначение текстур на меш.
В модели реально может быть до 8 разных текстур (определяется массивом (Display)MultiSkins[0..7]). Под каждую из них отводится свой слот, они нумеруются от 0 до 7.
При этом 0 – слот для скинов //переменная skin в модели.
Важно: Этой коммандой можно назначить любую текстуру на модель, в том числе анимационную или процедурную во время компиляции модуля.Параметры:
MESHMAP – имя карты
NUM – номер внутренней карты текстуры (0-9);
TLOD – (видел TLOD=5,10,30,50,200) наверное связано с текстурной LOD-выбраковкой
Примечание: если текстуру не назначать, то на модель ляжет тектура по умолчанию.
Менять текстуру на модели можно в редакторе или из скрипта, устанавливая переменные skin или значения массива MultiSkins по соответствующему индексу.
Варинта подгрузки два:
Классное применение – перенос процедурных текстур в свой
package.
записать некий набор информации в файлFILE какPACKAGE UwindowFonts.Например можно объединять несколько текстурных package-файлов в один, или создавать автоматические текстурные модули (см. наводку здесь).
импорт тектур.GROUP – группа текстуры. Для разделения по группам в браузере текстур.
FLAGS – флаги текстуры, переносимые на полигон (за разъяснением механизма переноса обращаться к Эпикам ;) ).
любая комбинация флагов. Из всех возможных проверялось всего несколько.
(в общем, это не до конца проверенная гипотеза)Флаги из заголовочных файлов к движку.
PF_Invisible = 0x00000001 // Poly is invisible. - невидим
PF_Masked = 0x00000002 // Poly should be drawn masked. - маскирован
PF_Translucent = 0x00000004 // Poly is transparent. - прозрачный
PF_NotSolid = 0x00000008 // Poly is not solid, doesn't block.
PF_Environment = 0x00000010 // Poly should be drawn environment mapped.
PF_Semisolid = 0x00000020 // Poly is semi-solid=collision solid,Csg nonsolid.
PF_Modulated = 0x00000040 // Modulation transparency. – модулированная прозрачность
PF_FakeBackdrop = 0x00000080 // Poly looks exactly like backdrop.
PF_TwoSided = 0x00000100 // Poly is visible from both sides. - двусторонний
PF_AutoUPan = 0x00000200 // Automatically pans in U direction.
PF_AutoVPan = 0x00000400 // Automatically pans in V direction.
PF_NoSmooth = 0x00000800 // Don't smooth textures.
PF_BigWavy = 0x00001000 // Poly has a big wavy pattern in it.
PF_SmallWavy = 0x00002000 // Small wavy pattern (for water/enviro reflection).
PF_Flat = 0x00004000 // Flat surface.
PF_LowShadowDetail= 0x00008000 // Low detaul shadows.
PF_NoMerge = 0x00010000 // Don't merge poly's nodes before lighting when rendering.
PF_CloudWavy = 0x00020000 // Polygon appears wavy like clouds.
PF_DirtyShadows = 0x00040000 // Dirty shadows.
PF_BrightCorners = 0x00080000 // Brighten convex corners.
PF_SpecialLit = 0x00100000 // Only speciallit lights apply to this poly.
PF_Gouraud = 0x00200000 // Gouraud shaded.
PF_Unlit = 0x00400000 // Unlit.
PF_HighShadowDetail= 0x00800000// High detail shadows.
PF_Portal = 0x04000000 // Portal between iZones.
PF_Mirrored = 0x08000000 // Reflective surface. – зеркальная текстураСоответственно десятичное число по комбинации флагов. Само собой разумеется, что некоторые флаги не подлежат комбинированию.
Примечание: флаги текстуры имеют меньший приоритет, чем флаги граней на меше. (не проверялось для скинов).MIPS - создание карт масштабирования для текстуры (LOD-выбраковка) количество или Off (нельзя отключить для текстур больших чем 256x256)
LODSET – не известно
ALPHATRICK - не известно
В комментариях указывается имя материала данное в 3D MAX. При этом комментарий при перекомпилляции u-файла роли не играет. Название материала играет роль только при создании меша и анимации в 3D MAX. (т.е. специальный плагин по названию материала задает свойства граней меша).
Редактировать свойства граней меша можно в программе UNREALFX.EXE
импорт звуков.FILE – звуковой файл
NAME – имя звука в игре
GROUP – подраздел для звука (разделение по группам в браузере)
импорт шрифта из специальной картинки в формате pcx. Цвет индекс==0 – пустое место, цвет индекс==255 – разделительная сетка. Остальные – цвета символа. Ширина символов разная, высота – одна.
Не ясно как делается antialiasing. Возможно, определяется через индекс цвета как степень прозрачности.
Импорт шрифта из TTF.Шрифт состоит из набора 256x256 текстур, в которых размещены символы шрифта.
Взято из документа True-Type Font Importing in Unreal.
НЕПРИЯТНОСТЬ: нормально работает только в UT, при любом неправильном написании (с точки зрения формата команды) берет default-шрифт (что-то вроде Times).
Параметры:
NAME – имя шрифта в скриптах (Font’UnrFntName’).
FONTNAME – имя шрифта в Windows, не имя ttf-файла, а именно шрифта, который будет импортироваться.
Оригинал: For example "Comic Sans MS", "Arial" or "Earth Normal".
ПРИМЕЧАНИЕ: Название шрифта с пробелами не воспринимается, т.е. берется default вариант.HEIGHT – высота шрифта в точках.
ANTIALIAS – работает при трех специфических условиях, описанных в True-Type Font Importing in Unreal.
Оригинал: If AntiAlias is 1, the TTF importer requests an anti-aliased font from Windows with the ANTIALIASED_QUALITY flag to CreateFont(). If it is 0, I pass NONANTIALIASED_QUALITY. See below for limitations of importing fonts with anti-aliasing.CHARACTERSPERPAGE – количество символов на одной 256x256 техтуре шрифта.
Default == 64. Кратен 2.
Оригинал: The TTF importer will give you an error if it runs out of space when drawing characters on the font pages. If you get the error "Font vertical size exceeded maximum of 256", you should half the CharactersPerPage parameter.XPAD and YPAD – добавление дополнительного пустого места между символами.
Оригинал: add extra space between characters. These default to 1. Some fonts require extra space between characters, as Windows doesn't report their actual spacing requirement correctly.
Для автоматического создания текстурного package-файла с шрифтами можно использовать txt-файл, запускаемый на выполнение из log-окна редактора.Например файл “Fonts.txt” вида:
new TrueTypeFontFactory PACKAGE="Fonts001" Name=HUDFont10B FontName="Verbana" Height=10 AntiAlias=1 CharactersPerPage=256Запускается командой ‘exec Fonts.txt’ в log окне UnrealEd. Результат - файл Fonts001.utx с фонтами ( при неудаче - default-ными :) ).
new TrueTypeFontFactory PACKAGE="Fonts001" Name=HUDFont16B FontName="Verbana" Height=16 AntiAlias=1 CharactersPerPage=128
new TrueTypeFontFactory PACKAGE="Fonts001" Name=HUDFont20B FontName="Verbana" Height=20 AntiAlias=1 CharactersPerPage=128
new TrueTypeFontFactory PACKAGE="Fonts001" Name=HUDFont26B FontName="Verbana" Height=26 AntiAlias=1 CharactersPerPage=64
OBJ SAVEPACKAGE PACKAGE="Fonts001" FILE="..\Textures\Fonts001.utx"
ПРИМЕЧАНИЕ: сработало только для UT.