创建材质
本教程将会教你从头开始一步一步地创建一个全新的材质,并创建材质的纹理文件。
Last updated
本教程将会教你从头开始一步一步地创建一个全新的材质,并创建材质的纹理文件。
Last updated
本教程将会教你从头开始一步一步地创建一个全新的材质,并创建材质的纹理文件。
任何图像文件都可以作为纹理,只要它的尺寸(高度和宽度)都是2的幂:2,4,8,16,32,64,128,256,512,1024,2048等等。要决定新建纹理的参数设置,请先检查在游戏中正在使用的对应纹理。更高的分辨率的纹理会降低性能,但当你近距离观察时,显示的图像会更清晰。
不同类型的对象拥有不同的标准分辨率(例如:角色模型的标准分辨率就非常高)。如果你不清楚的话请用 GCFScape 查看 source materials.gcf
中v社的标准设置
注解:纹理源文件应该保存为(例如TGA预编译)这种无损格式以防不必要的纹理质量损失
纹理必须转换为Valve Texture Format (VTF)格式才能让起源引擎使用。v设提供了VTEX作为转换工具。这是一个有很多限制的命令行工具,所以第三方工具VTFEdit是更好的选择: 它提供了一个图形用户界面,允许使用者直接更改纹理的属性而无需从头重新编译它,并兼容各种图像格式,还可以直接每个纹理创建脚本文件。当然,在一些情况下你还是需要使用VTEX的,但只有很少一部分(比如说一些动态纹理和spritesheet技术)。
此外,如果您有需要使用透明度的纹理,建议您在导入到VTFEdit之前保存为TIFF格式,因为PNG的透明度往往容易出现一些问题(有一些VTF插件可以让您直接从Photoshop、GIMP和Paint.net保存为vtf格式,但是本教程并不会介绍它们,因为不是每个人能够使用这些工具)。
要在VTFEdit中导入纹理, 请选择 File > Import
或者使用Ctrl+I快捷键。然后,选择你需要的图像,导入选项窗口就会弹出:
以下的这三个参数最为重要:
法线格式
如果纹理是不透明的,请使用颜色/压缩(color/compression)格式。
Alpha格式
如果纹理有alpha通道,应该使用颜色/压缩(color/compression)格式。
Mipmaps是纹理的低分辨率版本,当纹理表面远离相机时引擎会进行切换以节省资源。它们极大地减少了纹理所需调用的数量,提高了性能和图像质量。纹理 LOD需要Mips才能工作。
下列图片展示了各种在 VTFEdit可以使用的mipmap滤镜:
这些(mis-labelled) 设置允许你用你输入的图像自动生成一个凹凸贴图。你可能想用图像编辑功能来快速完成设计,但是自动生成选项只能生成一个非常基础的贴图。
当您点击OK时,输入的文件将会进行格式转换(越大的图像转换时间越长,需要使用者耐心等待大),转换完成后,对应的VTF将会出现。现在剩下要做的就是使用窗口左侧的复选框列表中的选项配置纹理。请参阅 Valve Texture Format image_flags 来获取进一步的信息。
最后,请把文件保存到你游戏或者mod下 \materials
文件夹的某一个位置。
起源引擎并不会直接访问纹理。所有的纹理都要通过一个材质进行配置之后才会被调用。
材料是可以在任何文本编辑器中创建的脚本文件,但建议您结合在编辑软件页面中用高亮语法规则列出的软件之一进行编辑。为了让你的材质被检测到, 你必须把它以.vmt
格式保存在你的游戏或mod下的 \materials
文件夹中 .
注解:如果你正在为一个现有的mod制作贴图材质或纹理,可以考虑使用BSPZIP\Packbsp\Pakrat\Compile Pal 等软件来将材质和纹理文件打包到贴图文件中。
一个材质文件的语法格式应该看起来像这样:
有很多的着色器可供选择,但是大多数的材质都会选择LightmappedGeneric
(笔刷),VertexLitGeneric
(模型)UnlitGeneric
(通常用于UI材料,偶尔用于工具材料)三者之一。
如果需要所有的着色器参数说明,请参照分类:着色器参数列表
选择一个着色器后,你将要调配参数(也称为命令)。材质参数有数百种选择,本文只讨论最常见的,或多或少被所有着色器所接受的的参数。它们是:
提示:如果需要在参数值中使用空格或制表符,则必须用"引号"将参数值括起来。您经常会看到所有的参数都是这样用引号括起来的,这样可以提高可读性—当然你可以选择不加,因为这不是必须的。
提示:你可以用控制台命令 mat_reloadallmaterials
来刷新材质在游戏中的预览,这会重加载游戏里的所有材质。这里建议使用这个命令来防止游戏被冻结和其他的一些奇怪现象发生: mat_reloadmaterial "vmt_name without .vmt"
。
例子:mat_reloadmaterial "monitor_screen"
。 Mat_reloadtextures的语法与这个相同。