Опубликовано: 17 февраля, 2017 В данном гайде речь пойдет о таком важном файле как *.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_env = { compressionAllowed = true, fileName = "c.tga", magFilter = "LINEAR", minFilter = "LINEAR", mipmapAlphaScale = 0, type = "CUBE_MAP", wrapS = "REPEAT", wrapT = "REPEAT", } map_op_1, operation_1, map_op_2, operation_2 - карта не контролируемой грязи и нормалей, подключаемая командой "_OP". Пишется все вместе, но можно разделить по индексу операций. Пример кода: map_op_1 = { compressionAllowed = true, fileName = "models/industry/overlay_textures/small_01.tga", -- Путь к штатной текстуре magFilter = "LINEAR", minFilter = "LINEAR_MIPMAP_LINEAR", mipmapAlphaScale = 0, type = "TWOD", wrapS = "REPEAT", -- Способ заливки зацикливание или разово (CLAMP_TO_EDGE) для данного типа лучше использовать повтор wrapT = "REPEAT", -- аналогично, но для другой оси }, operation_1 = { op = "OVERLAY", mode = "NORMAL", scale = { 1.0/8, 1.0/8 }, -- Контраст текстуры opacity = 0.6 -- Прозрачность }, map_op_2 = { compressionAllowed = true, fileName = "models/industry/overlay_textures/big_01.tga", magFilter = "LINEAR", minFilter = "LINEAR_MIPMAP_LINEAR", mipmapAlphaScale = 0, type = "TWOD", wrapS = "REPEAT", wrapT = "REPEAT", }, operation_2 = { op = "OVERLAY", mode = "NORMAL", scale = { 1.0/10, 1.0/10 }, opacity = 0.4 } А теперь я приведу весь файл mtl для Каскадии и в нем распишу, что за что отвечает function data() return { params = { color_blend = { -- Работает если прописана команда "_CBLEND". albedoScale = math.pow(1.37, 1.5), -- Жесткоть цветов, которые выбирает игрок. Можно просто писать 1 и выше }, dirt_rust = { -- Работает если прописана команда "_CBLEND". dirtColor = { 70/255, 63/255, 55/255 }, -- Цвет грязи, работает если прописана команда "_CBLEND" dirtOpacity = 5/100, -- Прозрачность грязи dirtScale = 100/12.5, -- Жесткость цвета грязи rustColor = { 83/255, 69/255, 42/255 }, -- Цвет ржавчины rustOpacity = 50/100, -- Прозрачность грязи rustScale = 100/34.77, -- Жесткость цвета ржавчины }, fade_out_range = { -- Дальность отрисовки текстур, по факту я не увидел результтат работы команды fadeOutEndDist = 20000, -- Конечная дистанция fadeOutStartDist = 10000, -- Начальная }, map_albedo_opacity = { -- Команда для основной текстуры. отсюда видно что включен шейдер "PSYH" compressionAllowed = true, -- Делать компресию или нет. Не актуально для dds формата fileName = "models/vehicle/truck/truck_frightliner_cascadia_2009_albedo_opacity.dds", -- Путь текстуры magFilter = "LINEAR", minFilter = "LINEAR_MIPMAP_LINEAR", mipmapAlphaScale = 0, type = "TWOD", wrapS = "CLAMP_TO_EDGE", wrapT = "CLAMP_TO_EDGE", }, map_cblend_dirt_rust = { -- Подключение карты грязи, ржавчины и перекраски игроком compressionAllowed = true, fileName = "models/vehicle/truck/truck_frightliner_cascadia_2009_cblend_dirt_rust.dds", magFilter = "LINEAR", minFilter = "LINEAR_MIPMAP_LINEAR", mipmapAlphaScale = 0, type = "TWOD", wrapS = "CLAMP_TO_EDGE", wrapT = "CLAMP_TO_EDGE", }, map_dirt = { -- подключение карты для грязи, работает только с командой "_CBLEND" compressionAllowed = true, fileName = "models/vehicle/dirt_albedo.dds", -- Можно использовать штатный текстуру magFilter = "LINEAR", minFilter = "LINEAR_MIPMAP_LINEAR", mipmapAlphaScale = 0, type = "TWOD", wrapS = "REPEAT", -- Гряз, нормаль для грязи, Ржавчина, нормаль для Ржавчины лучше зацикливать. Иначе могут появиться полосы. wrapT = "REPEAT", }, map_dirt_normal = { -- подключение карты нормалей для грязи, работает только с командой "_CBLEND" compressionAllowed = true, fileName = "models/vehicle/dirt_normal.dds", magFilter = "LINEAR", minFilter = "LINEAR_MIPMAP_LINEAR", mipmapAlphaScale = 0, type = "TWOD", wrapS = "REPEAT", wrapT = "REPEAT", }, map_metal_gloss_ao = { -- подключение карты блеска металла, стекла, амбиента compressionAllowed = true, fileName = "models/vehicle/truck/truck_frightliner_cascadia_2009_metal_gloss_ao.dds", magFilter = "LINEAR", minFilter = "LINEAR_MIPMAP_LINEAR", mipmapAlphaScale = 0, type = "TWOD", wrapS = "CLAMP_TO_EDGE", wrapT = "CLAMP_TO_EDGE", }, map_normal = { -- Подключени карты нормалей. Включается командой "_NRML_MAP" compressionAllowed = true, fileName = "models/vehicle/truck/truck_frightliner_cascadia_2009_normal.dds", magFilter = "LINEAR", minFilter = "LINEAR_MIPMAP_LINEAR", mipmapAlphaScale = 0, type = "TWOD", wrapS = "CLAMP_TO_EDGE", wrapT = "CLAMP_TO_EDGE", }, map_rust = { -- Подключение карты ржавчины compressionAllowed = true, fileName = "models/vehicle/rust_albedo.dds", -- также штатная текстура magFilter = "LINEAR", minFilter = "LINEAR_MIPMAP_LINEAR", mipmapAlphaScale = 0, type = "TWOD", wrapS = "REPEAT", wrapT = "REPEAT", }, map_rust_normal = { -- Нормаль для ржавчины compressionAllowed = true, fileName = "models/vehicle/rust_normal.dds", magFilter = "LINEAR", minFilter = "LINEAR_MIPMAP_LINEAR", mipmapAlphaScale = 0, type = "TWOD", wrapS = "REPEAT", wrapT = "REPEAT", }, polygon_offset = { factor = 0, units = 0, }, two_sided = { flipNormal = false, -- Так и не нашел действие команды twoSided = false, -- Если вы с одной стороны видите текстуру, а с другой нет, пишите "true" }, }, type = "PHYS_TRANSPARENT_NRML_MAP_CBLEND_DIRT", } end также отдельно можно добавить команду: props = { coeffs = { 1, 1, 0.25, 20 } } Играя изменением параметров, можно либо осветлить, либо затенить объект. А с шейдером "TRANSPARENT" светиться ------------ На данный момент это все, если узнаем что-то новое, то обязательно дополним гайд. 5 Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Опубликовано: 9 марта, 2017 В 17.02.2017 в 11:04, Vitaro сказал: scale = { 1.0/8, 1.0/8 }, -- Контраст текстуры а в какую сторону меняется контрастность? 1.0/8 и 1.0/128 что более контрастно? хотя не очень понятно почему контраст, когда scale - это масштаб. 0 Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Опубликовано: 9 марта, 2017 ну там не совсем контраст, больше резкость. На ржавчине в моделвьювере хорошо видно 0 Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Опубликовано: 11 мая, 2017 В 17.02.2017 в 10:04, Vitaro сказал: также отдельно можно добавить команду: props = { coeffs = { 1, 1, 0.25, 20 } } Играя изменением параметров, можно либо осветлить, либо затенить объект. А можно для нубов разжевать, какая цифра за что отвечает? Проблема такая: Имеется паровоз из TF (красивый цуко...), который в игре выглядит значительно темнее, чем на рендерах автора, и чем его текстура в редакторе. Кроме вышеуказанных параметров, не нашел больше ничего, что можно было бы "подкрутить", а осветлять саму текстуру - не комильфо... Заметил, что параметры эти стандартные для других модов из TF, но у большинства из них проблем с яркостью не замечается. Извиняюсь, если не совсем по теме... 0 Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Опубликовано: 11 мая, 2017 @gam0ver lля осветления это не совсем корректный способ, параметры скорее отвечают за "свечение" объектов. Поиграйтесь в Модельвьювере. А так они как-то работают по осям, толком я не смог разобраться 0 Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Опубликовано: 11 июля, 2017 (изменено) Так-с, для нубов) Собственно вопрос по свету. С текстурами более-менее разобраться не трудно, цвет поменять смогу или закрасить что-то Но вот со светом беда. так и не въехал. Есть допустим ТЭП60. У него в текстурах есть файлик tep60_light.hdr и в мтл валяется файл tep60_lights.mtl Собственно как баран на новые ворота пялюсь на текстурку и этот мтл. Как он привязан конкретно к самой модели? Вернее как игра понимает в какой точке применять этот свет и какую часть текстурки в конкретной точке. Вопрос возник-захотелось свет к М62 прикрутить и 2ТЭ25 с 2ТЭ116 по-возможности(2 разных секции, не намудрить-бы чего чтоб обе не заветились)) Но торможу люто. Небольшой гайд если будет по свету-буду благодарен Просто хотелось-бы закончить рихтовку моделей и выложить подправленные(с осями наконец нашел время, разобрался : теперь у М62, ТЭП70, 2ТЭ25 все колесные пары соосны буксам, остался свет) Изменено 11 июля, 2017 пользователем diver13 0 Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Опубликовано: 11 июля, 2017 hdr это обычная текстура. Свет на поезде тоже обычная 3д моделька. В msh ссылка на mtl, в mtl ссылка на hdr. Вот как Модельке размечена UV сетка, так она и будет браться из файла hdr. И да, там можно добавлять текстуру, тогда свет будет немного изменяться. 0 Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Опубликовано: 11 июля, 2017 (изменено) Т.е. надо не просто отредактировать текстуры, а еще лезть менять саму модель лока? Изменено 11 июля, 2017 пользователем diver13 0 Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Опубликовано: 11 июля, 2017 Нет, свет идет отдельной моделькой. Просто плоский кружочек или квадрат. 0 Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Опубликовано: 11 июля, 2017 (изменено) Т.е. метода сделать в рамках обычной модели нет, обязательно надо этот элемент смоделировать, затекстурировать и приклеить к готовой модели? Изменено 11 июля, 2017 пользователем diver13 0 Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Опубликовано: 11 июля, 2017 @diver13 а собственно зачем? Возьмете базовый msh, и просто в mtl для него пропишите другой путь до текстуры. Mtl и текстуру крутите как хотите. Самуже msh вы можете масштабировать как вам угодно. Для трансформации можете использовать этот код: transf = transf.scaleRotZYXTransl(vec3.new( 0.8, 0.8, 0.8 ), transf.degToRad(0, 0, 0), vec3.new(7.75, -9.2, -0.99)) шкала по осям поворот по осям координаты расположения в начале файла не забудьте прописать: local vec3 = require "vec3" local transf = require "transf" 0 Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Опубликовано: 12 июля, 2017 Немного торможу-т.е. можно прямо на "корпусе" указать место для света без доп моделек? Или я неправильно понял и имелось ввиду взять от любой модели и прикрепить куда надо? 0 Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Опубликовано: 12 июля, 2017 @diver13 Откройте любой поезд со светом. Там прописывается его msh. Разработчики даже часто перед ним пишут "Lights" или его вариации. Просто меняйте положение и масштаб и смотрите сразу результат во вьювере. Я уже не знаю как подробнее расжевать. Этот же msh копируйте себе и крутите как уже сами захотите. 0 Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Опубликовано: 12 июля, 2017 (изменено) нет, этот файл я видел. меня именно смутило что свет это отдельная моделька. А соотвественно для лока у которого его нет это может вызвать определенные проблемы. В общем шаги так понимаю простые: скопировать весь этот набор файлов, имеющий в названии "lights"(ну на примере ТЭП60 это все с таким названием) в соотвествующие папки лока без фонарей(ну допустим тот-же М62) Далее переименовываю, перепрописываю пути в файлах, а дальше можно играться с размером и позиционированием и никаких особых подводных камней там не обнаружится. вот суть вопроса. Изменено 12 июля, 2017 пользователем diver13 0 Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Опубликовано: 12 июля, 2017 @diver13 Да, эксперементируйте. Собственно так потраха игры и изучал. 1 Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Опубликовано: 12 июля, 2017 (изменено) Собственно это мне и было интересно) а то малоль там 3 фары просто треугольником с 3 "кружками" сделаны в модельке(ну у ТЭП60 3 фонаря) и тут никак к другому локу не приделаешь без 3Д редактора) А тут оказывается все попроще) Изменено 12 июля, 2017 пользователем diver13 0 Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Опубликовано: 12 июля, 2017 @diver13 всё так, но, если я правильно помню, у ТЭП60 как раз все 3 фонаря сделаны одной моделькой и на М62 они могут просто не поместиться на свои места. 0 Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Опубликовано: 12 июля, 2017 (изменено) Аааа, катастрофа ну в крайнем случае хотя-б от паровозов тогда главный прожектор скомунизжу, если с буферными все вцелом плохо окажется Но учитывая открывшуюся информацию-значит можно одну такую "накладку" по модели клонировать сколько угодно раз? разрабы ограничений не наложили? Изменено 12 июля, 2017 пользователем diver13 0 Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Опубликовано: 12 июля, 2017 @diver13 не наложили. Вы можете изменять размеры копируемого объекта. Как, я писал выше. 0 Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах