Материал для Модели
Введение
Модели в играх Source - будь то props, персонажи, viewmodels , и др. - требуют хотя бы 3 основных компонента: Ваш.MDL , Ваш.Material и Ваш.VTF .
К сожалению не очень точно говорить, что MDL это "каркас", VTF это "обложка" и VMT это "физика". На каждом этапе, ваша модель будет содержать по крайней мере два отдельных, но всегда ссылающихся друг на друга файла. Каждый этап компиляции требует информацию из части другого файла. Поэтому процедура должна проходить по строгой последовательности, и имена файлов и их расположение всегда также строго определенное.
Процесс создания этих файлов умещается в два общих шага:
- Первый этап это создание основной текстуры и размещение её на вашей сетке, в результате получиться пара "временных" файлов: Ваш.SMD и Ваш.TGA .
- На втором этапе, используя Ваш.SMD и Ваш.TGA компилируется Ваш.MDL , Ваш.VMT и Ваш.VTF в определенной папке Source game_directory.
Создание текстуры Ваш.SMD модели используя XSI
- Для создания текстуры для вашей модели в XSI:
- выберите свою созданную модель.
- выберите XSI's Render mode (вверху на левой боковой колонке).
- из Render>Get-Material выберите Blinn (закройте окно Material)
- из Render>Get-Texture выберите Image, чтобы открыть окно Image-Texture:
- в Image-Texture tab>Image нажмите "New", чтобы найти и импортировать ваш новый TGA файл текстуры.
- в Image-Texture tab>Texture Projection нажмите "New" и выберите Unique UVs (polymesh) (закройте окно Image)
- нажмите "Alt+7", чтобы открыть окно XSI Texture Editor .
- Если вы испортили своё размещение текстуры и хотите начать сначала:
- 1. Нажмите "8" чтобы открыть Scene Explorer, затем найдите Texture Projection как показано ниже:
-> Cube (ваш основной объект) --> Polygon Mesh ---> Clusters ----> Texture_Coordinates_Auto -----> Texture Projection (Explicit UVWs)
- 2. Теперь кликните ЛКМ на "Texture Projection (Explicit UVWs)" чтобы выбрать его, затем нажмите на клавишу "Delete", чтобы удалить это.
- 3. Перейдите в 3D вид (в режим 'textured'), убедитесь, что всё сделано правильно. Если нет, то нажмите "Ctrl+Z", чтобы отменить и попробовать ещё раз.
- Смотрите также урок XSI Texturing .
Предпросмотр
- Выводы о процессе текстурирования вашего персонажа могут быть сделаны непосредственно в движке Source, прежде чем идти дальше со своим материалом, экспортируйте его в .vtf, создайте .vmt, создайте .mdl и посмотреть на модель в игре. Работа над тонкостями и параметрами шейдеров может быть только после того, как вы увидите вашу модель в игре.
Временная текстура "checkerboard"("Шахматная доска")
- Использование текстуры шахматной доски хороший способ проверить ваши UV координаты; это позволит вам быстро увидеть наличие каких-либо искажений, полос или швов, которым требуется корректировка. Также, использование текстуры шахматной доски дает хороший способ измерить сколько элементов текстуры вам требуется на различных частях модели, поскольку вы определили UV координаты, некоторые элементы (таких как лицо) требуют немного больше плотности, но в целом вам следует стремиться к логичной плотности элементов текстуры на всей модели. Стандартный noicon.pic файл в XSI хороший выбор или вы можете использовать Checkerboard Starter Texture (клик ПКМ, сохранить как...) входящий в SDK.
Какой должен быть размер текстуры?
- Экспортируйте .VTF как можно раньше и загрузите просмотр вашей модели в игре, используя команду консоли mat_showmiplevel, проверьте что mip-уровни, you’re seeing at some of the most common encounters your character is going to have during gameplay (не могу адекватно перевести эту фразу). Хотя может казаться, что чем больше, тем лучше, но это не всегда так, mipmapping может заставить ваши большие текстуры уменьшиться, пока размытость не станет проблемой.
Многослойные текстуры
- Вам следует стараться использовать только одну основную текстуру, если материалу не требуется другого. Многослойная текстура может существенно повлиять на время визуализации. Если вам необходимо создать многослойную текстуру для модели, вы должны для начала выбрать полигоны, сгруппировать их, а затем применить материал и изображение к группе. Убедитесь, что в параметрах установлено "reload externally modified images on focus". Это перезагрузит текстуру, когда вы вернетесь при помощи alt-tab в XSI из другой программы, например Photoshop, что спасет вам немного времени.
Компиляция Ваш.VTF : Valve Texture Format
Любая Текстура, которая применена к модели (перед экспортом в Ваш.SMD из XSI) должна быть конвертирована из TGA в VTF файл, прежде чем это сможет использовать Source Engine. Имя VTF файла должно быть таким же как и у TGA файла, использованного в Вашем.SMD (например: Ваш.TGA -> Ваш.VTF) и VTF помещен в папку game_directory/materials/models
.
SourceSDK/bin
содержит Vtex .exe, приложение, используемое для компиляции в .VTF. Простейший способ использовать Vtex - это создать ярлык для vtex.exe на своём рабочем столе, и перетаскивать .TGA файлы на него. Это создаст .VTF файл, который будет иметь такое же имя как и ваш .TGA файл в директории материалов. Когда вы перетащили tga файл в Vtex, создастся .TXT файл в тойже директории, где расположен .TGA файл. В этом файле вы можете написать команды для Vtex, которые изменят способ компресии.
- Cannonfodder's StudioCompiler предоставит более дружелюбный интерфейс для Vtex (и Studiomdl). Это позволит компилировать/декомпилировать VTF, VMT и MDL файлы из/в TGA и SMD файлы.
Компиляция Вашего.VMT : Valve Material Type
Каждый Материал в Source engine определен .VMT файлом. Это специфическая модель освещения, основная текстура (VTF), и любая другая информация, которая вам может понадобиться: зеркальность, свечение, карты нормалей, прозрачность, полупрозрачность, и proxy shaders .
Для модели Ваш.VMT должен быть написан вручную (используя блокнот и т.п.) и размещен в папке game_directory/materials/models
где Ваш.MDL сможет найти их. $basetexture (Ваш.VTF) ссылается на Ваш.VMT, должен также быть в той же папке game_directory/materials/models
где Ваш.VMT сможет найти его.
Здесь пример VMT файла из HL2:
"VertexLitGeneric " { "$basetexture " "Models/Combine_soldier/Combine_elite" "$bumpmap " "models/combine_soldier/combine_elite_normal" "$envmap " "env_cubemap" "$normalmapalphaenvmapmask " 1 "$envmapcontrast " 1 "$model " 1 "$selfillum " 1 }
В этом примере материал использован для полигональной модели используя VertexLitGeneric шейдер.
$basetexture или diffusemap определена в "Models/Combine_soldier/Combine_elite"
$bumpmap или карта нормалей импортирована из "models/combine_soldier/combine_elite_normal".
$envmap или environmentmap установлена на "env_cubemap"
, что ссылает к cubemap entities размещенной на уровне; зеркальное отражение для этого персонажа всегда будет отражать мир вокруг - предполагается, что вы разместили cubemap entities на уровне. Вы можете использовать всместо этого другой cubemap, если хотите.
На следующей линии, "$normalmapalphaenvmapmask" 1
сообщает визуализатору что в этом материале есть маска зеркальности, и только некоторые её части отразят информацию из env_cubemap, расположенная в данном случае в альфа канале карты нормалей. Карта зеркальности может быть и в альфа канале основной текстуры "$basealphaenvmapmask 1"
или в файле маски зеркальности "$envmapmask" "models/modelname/mymask"
.
Команда "$envmapcontrast" 1
означает, что яркость отражений envmap умножается на себя один раз; для создания яркого освещения и глубоких теней.
Все модели требуют наличие команды "$model" 1
, которая сообщает визуализатору, о том, что материал используется для полигональной модели скомпилированой Studiomdl.exe.
Последняя линия "$selfillum" 1
сообщает визуализатору, что альфа канал $basetexture содержит информацию о самоизлучении, эти области альфа канала показывают светящиеся области модели.
Альфа-канал
Для создания материала с рабочим альфа-каналом вам необходимо ввести команду "$translucent " 1
в ваш VMT файл.
Иногда это приводит к ошибке визуализации модели (например theres convex 1 in the back of convex 2, but convex 2 gets hidden by convex 1 => Rendering error). Если это случается, используется команда "$alphatest " 1
вместо "$translucent" 1
, которая исправляет это.
Proxy shaders
Мощный компонент системы материалов в Source engine это Proxy shader system . Пример на что способны proxy shaders покажет карта shaderzoo входящая в sdk. Дальнейшая информация о их создании вы сможете найти в соответствующих разделах документации.