В данном гайде речь пойдет о таком важном файле как *.mtl и немного о текстурах
Mtl - файл настройки текстур. В нем прописано в какой роли они будут использоваться и как обрабатываться.
Прежде всего стоит ознакомится с данными материалами. Там указано как нужно конвертировать сами текстуры. Игра понимает только два формата: TGA и DDS.
У обоих форматов есть свои преимущества, но по факту лучше использовать dds.
Плюсы и минусы разных форматов (все это из личных наблюдений и все очень субъективно): TGA:
+ легкость редактирования, чуть более лучшее качество по сравнению с dds;
- размер файлов. если будут использоваться множество текстур, размер мода может значительно вырасти в объемах. Как на таковой производительности это ни как не сказывается. Игра сама производит компрессию текстур, единожды, пока не увидит изменений. Разница только в скорости загрузки игры. DDS:
+ размер файлов
- очень капризен при конвертировании (нужно быть внимательным при конвертации). Во время перевода в dds, не значительно падает качество изображения в игре.
Самое важное с текстурами - должна соблюдаться кратность размеров.
для основных текстур и нормалей кратность должна быть равна 8
для карты окрасок и металл-глоса кратность должна быть равна 4
размер 700х704 будет работать не корректно (700 / 8 = 87.5)
704х704 будут работать правильно ( 704 / 8 = 88)
На картах от NVidea это ни как не проявляется, а вот от ATI текстуры просто могут не отрисоваться и будут фиолетовыми.
-------------------------------
И так перейдем к mtl. Прежде всего стоит определиться какие шейдеры вы будете использовать. Обычно пишутся снизу и имеют формат:
type = "PHYSICAL_NRML_MAP",
Есть несколько разных типов: PHYSICAL (PHYS) - используется чаще всего. Его можно увидеть на всем подвижном транспорте.
PHYS используется на транспорте, в котором нужно нарисовать стекла, об этом ниже. Он не просвечивается сквозь воду. Основная текстура пишется как:
map_albedo_opacity
PHYSICAL просвечивает сквозь воду, но стекла к нему добавить нельзя. Тут текстура прописывается как:
map_albedo
Единственный шейдер, который может работать с расширением dds.
REFLECTIVE - чаще всего используется на статичных объектах, которым не нужно рисовать металлический отблекс. Работает к картой нормалей. Также можно прописать карту грязи. Основная текстура имеет команду:
map_color_reflect
Не понимает dds формат, только tga.
Можно прописать карту грязи кодом:
map_env = {
compressionAllowed = true,
fileName = "c.tga",
magFilter = "LINEAR",
minFilter = "LINEAR",
mipmapAlphaScale = 0,
type = "CUBE_MAP",
wrapS = "REPEAT",
wrapT = "REPEAT",
}
О том что тут все означает я напишу ниже.
TRANSPARENT шейдер прозрачности, используется как отдельно, так и с шейдером PHYS.
работает только с одной текстурой, которая прописывается как:
map_color_alpha
Используется в игре для знаков миссий (восклицательный и вопросительный знаки), а также для деревьев и травы (полупрозрачные листья).
EMISSIVE шейдер создающий светящиеся объекты, к примеру фонари
текстура пишется:
map_emissive
Свечение также можно создать и с шейдером "TRANSPARENT"
-------------------------
Теперь перейдем к командам, которые можно прописать шейдерам.
команды приписываются подобным образом: REFLECTIVE_NRML_MAP
Где "REFLECTIVE" название шейдера, "_NRML_MAP" подключение карты нормалей.
Список команд:
"_NRML_MAP" подключение карты нормалей. Работает с "REFLECTIVE", "TRANSPARENT", "PHYSICAL" и "PHYS"
"_CBLEND_DIRT" подключение карты грязи и карты перекраски. Работает с "PHYSICAL" и "PHYS"
"_TRANSPARENT" - подключает прозрачность на стеклах. Работает только с "PHYS" или самостоятельно.
"_OP" - нанесение на объект не контролируемой карты грязи. Работает с "REFLECTIVE", "TRANSPARENT" и "PHYSICAL"
"_ALPHA" - подключение прозрачности. К сожалению про эту команду мало что могу сказать, мы её ещё не изучали. Со временем может я дополню гайд. При подключении, команду текстуры нужно писать уже "map_albedo_alpha" для "PHYSICAL". Команду встречал только с этим шейдером, про совместимость с другими ничего написать не могу.
----------------------
Далее рассмотрим сам состав mtl, что там можно прописать.
map_albedo = { -- Тип обрабатываемой текстуры
compressionAllowed = true, -- Разрешить игре сжатие текстур
fileName = "models/asset/ground/tipi_001_albedo_opacity.dds", -- Путь к файлу текстуры
magFilter = "LINEAR",
minFilter = "LINEAR_MIPMAP_LINEAR",
mipmapAlphaScale = 0, -- Жесткость альфы, работает только с командой "_ALPHA"
type = "TWOD",
wrapS = "CLAMP_TO_EDGE", -- Зациклить текстуру (REPEAT) или использовать один раз для оси Х
wrapT = "CLAMP_TO_EDGE", -- Зациклить текстуру (REPEAT) или использовать один раз для оси У
}
Какие есть типы текстур: map_albedo - основной файл текстуры для шейдера "PHYSICAL" map_emissive - основной файл текстуры для "EMISSIVE" map_color_alpha - основной файл текстуры для "TRANSPARENT" map_color_reflect - основной файл текстуры для "REFLECTIVE" map_albedo_opacity - основной файл текстуры для "PHYS" map_metal_gloss_ao - карта металлического блеска, отражения стекла и амбиента, работает только с шейдарами "PHYSICAL", "PHYS" map_normal - карта нормалей. Команда включения "_NRML_MAP" map_cblend_dirt_rust - подключение карты перекраски, грязи и ржавчины. Включается командой "_CBLEND_DIRT" map_env - работает только с "REFLECTIVE", команды для включения писать не нужно. Можно использовать штатную текстуру:
map_op_1, operation_1, map_op_2, operation_2 - карта не контролируемой грязи и нормалей, подключаемая командой "_OP". Пишется все вместе, но можно разделить по индексу операций. Пример кода:
А теперь я приведу весь файл mtl для Каскадии и в нем распишу, что за что отвечает
также отдельно можно добавить команду:
props = {
coeffs = {
1, 1, 0.25, 20
}
}
Играя изменением параметров, можно либо осветлить, либо затенить объект. А с шейдером "TRANSPARENT" светиться
------------
На данный момент это все, если узнаем что-то новое, то обязательно дополним гайд.