Zh/Creating a Material: Difference between revisions

From Valve Developer Community
< Zh
Jump to navigation Jump to search
m (Nesciuse moved page Creating a Material/zh to Zh/Creating a Material over redirect: Language prefixes)
m (-Using L template for links)
Line 3: Line 3:
{{toc-right}}
{{toc-right}}


本篇教程将一步步教你如何创建全新的[[material|材质(Material)]],包括材质[[texture|纹理(Texture)]]的创建。
本篇教程将一步步教你如何创建全新的{{L|material|材质(Material)}},包括材质{{L|texture|纹理(Texture)}}的创建。


== 创建纹理 ==
== 创建纹理 ==
Line 9: Line 9:
只要满足以下条件,任何图片文件都能作为纹理使用:它的尺寸(高度和宽度)必须是2的乘方,2、4、8、16、32、64、128、256、512、1024、2048...以此类推。如果不清楚该用哪一种尺寸,可以参考现有的同类型纹理。高分辨图片会降低性能,但在近距离下更清晰。
只要满足以下条件,任何图片文件都能作为纹理使用:它的尺寸(高度和宽度)必须是2的乘方,2、4、8、16、32、64、128、256、512、1024、2048...以此类推。如果不清楚该用哪一种尺寸,可以参考现有的同类型纹理。高分辨图片会降低性能,但在近距离下更清晰。


不同类型的物体有不同标准的分辨率(例如人物模型的纹理分辨率非常高)。如果感到困惑,可以使用[[GCFScape]]从 <code>source materials.gcf</code> 中提取纹理,看看Valve是怎么做的。
不同类型的物体有不同标准的分辨率(例如人物模型的纹理分辨率非常高)。如果感到困惑,可以使用{{L|GCFScape}}从 <code>source materials.gcf</code> 中提取纹理,看看Valve是怎么做的。


{{note|纹理源文件应当使用无损格式保存,例如[[Wikipedia:Truevision TGA|TGA]],以避免图片质量的损失。}}
{{note|纹理源文件应当使用无损格式保存,例如[[Wikipedia:Truevision TGA|TGA]],以避免图片质量的损失。}}
Line 15: Line 15:
=== 转换纹理 ===
=== 转换纹理 ===


为了给起源引擎使用,纹理必须先转换为 [[Valve Texture Format]] 格式。Valve提供的工具是[[Vtex (Source 1)|VTEX]]。它是个[[command line|命令行]]工具,使用起来相当不便,因此推荐使用第三方工具[[VTFEdit]]:它提供了图形用户界面,能让你无需重新编译就能修改纹理属性,支持大多数图片格式,也不需要每个纹理都创建一遍脚本文件。当然有些情况下还是不得不用回VTEX工具...但也仅限于那部分情况。此外,在使用带透明通道的纹理时,它会建议你先转为TIFF格式保存,因为PNG的透明度容易导致问题。
为了给起源引擎使用,纹理必须先转换为 {{L|Valve Texture Format}} 格式。Valve提供的工具是{{L|Vtex (Source 1)|VTEX}}。它是个{{L|command line|命令行}}工具,使用起来相当不便,因此推荐使用第三方工具{{L|VTFEdit}}:它提供了图形用户界面,能让你无需重新编译就能修改纹理属性,支持大多数图片格式,也不需要每个纹理都创建一遍脚本文件。当然有些情况下还是不得不用回VTEX工具...但也仅限于那部分情况。此外,在使用带透明通道的纹理时,它会建议你先转为TIFF格式保存,因为PNG的透明度容易导致问题。


(部分图片软件如[http://nemesis.thewavelength.net/index.php?p=39 Photoshop]、[http://code.google.com/p/gimp-vtf/ GIMP]和[http://nemesis.thewavelength.net/index.php?p=50 Paint.NET]在安装了VTF插件后,能直接保存为VTF格式文件。但本篇教程不做讲解,因为并非每个人都使用上述工具。)
(部分图片软件如[http://nemesis.thewavelength.net/index.php?p=39 Photoshop]、[http://code.google.com/p/gimp-vtf/ GIMP]和[http://nemesis.thewavelength.net/index.php?p=50 Paint.NET]在安装了VTF插件后,能直接保存为VTF格式文件。但本篇教程不做讲解,因为并非每个人都使用上述工具。)
Line 38: Line 38:
==== Mipmap设置 ====
==== Mipmap设置 ====


[[MIP Mapping|Mipmaps]]是当纹理距离镜头相当远时,自动切换成的低清版纹理。它的使用减少的不必要的图片缩放,增加了性能与图片显示质量。[[mat_picmip|纹理细节层次]]需要Mipmap才能正常使用。
{{L|MIP Mapping|Mipmaps}}是当纹理距离镜头相当远时,自动切换成的低清版纹理。它的使用减少的不必要的图片缩放,增加了性能与图片显示质量。{{L|mat_picmip|纹理细节层次}}需要Mipmap才能正常使用。


{{tip|在3D世界中使用的纹理才需要mipmap。为了节约内存,只是用在2D界面的图片不应有mipmap。}}
{{tip|在3D世界中使用的纹理才需要mipmap。为了节约内存,只是用在2D界面的图片不应有mipmap。}}
Line 54: Line 54:
==== 法线贴图设置 ====
==== 法线贴图设置 ====


这些(打错标签的)设置能够让你从输入的图片中生成一张[[bump map|法线贴图]]。你可能希望使用图片编辑器制作一张更好的法线贴图,但提供的自动选项能够快速生成法线贴图,可以在它的基础上进行修改。
这些(打错标签的)设置能够让你从输入的图片中生成一张{{L|bump map|法线贴图}}。你可能希望使用图片编辑器制作一张更好的法线贴图,但提供的自动选项能够快速生成法线贴图,可以在它的基础上进行修改。


=== 配置与保存 ===
=== 配置与保存 ===
Line 64: Line 64:
== 创建材质 ==
== 创建材质 ==


起源引擎无法直接使用纹理文件。所有的纹理都需要通过 '''[[material|材质]]'''文件访问。
起源引擎无法直接使用纹理文件。所有的纹理都需要通过 '''{{L|material|材质}}'''文件访问。


材质是可以用任何文本编辑器处理的脚本文件。但推荐使用[http://notepad-plus.sourceforge.net/ Notepad++],并安装社区制作的[[Notepad++ VDF languages|语法高亮]]插件。 要让材质能够被检测到,'''它必须被保存在游戏本体或MOD中的 <code>\materials</code> 文件夹下,后缀名是<code>.vmt</code>'''
材质是可以用任何文本编辑器处理的脚本文件。但推荐使用[http://notepad-plus.sourceforge.net/ Notepad++],并安装社区制作的{{L|Notepad++ VDF languages|语法高亮}}插件。 要让材质能够被检测到,'''它必须被保存在游戏本体或MOD中的 <code>\materials</code> 文件夹下,后缀名是<code>.vmt</code>'''


{{note|如果是专门为地图或是已有mod制作的材质,可以考虑使用[[BSPZIP]]\[[Packbsp]]\[[Pakrat]]\[[Compile Pal]]将材质打包到地图文件中。可以完全杜绝材质丢失的问题。}}
{{note|如果是专门为地图或是已有mod制作的材质,可以考虑使用{{L|BSPZIP}}\{{L|Packbsp}}\{{L|Pakrat}}\{{L|Compile Pal}}将材质打包到地图文件中。可以完全杜绝材质丢失的问题。}}


=== 语法 ===
=== 语法 ===
Line 74: Line 74:
材质文件的格式如下:
材质文件的格式如下:


  <[[shader|渲染器(shader)]]>
  <{{L|shader|渲染器(shader)}}>
  {
  {
  <参数> <取值>
  <参数> <取值>
Line 86: Line 86:
  }
  }


有很多[[shader|渲染器]]可以选择,但大多数材质使用的是 <code>[[LightmappedGeneric]]</code>(用于[[brush|笔刷]]) 或是 <code>[[VertexLitGeneric]]</code> (用于[[model|模型]])。第三常用的渲染器是 <code>[[UnlitGeneric]]</code>,用于 [[VGUI2|UI]] 材质或用于少见的[[tool texture|工具纹理]]
有很多{{L|shader|渲染器}}可以选择,但大多数材质使用的是 <code>{{L|LightmappedGeneric}}</code>(用于{{L|brush|笔刷}}) 或是 <code>{{L|VertexLitGeneric}}</code> (用于{{L|model|模型}})。第三常用的渲染器是 <code>{{L|UnlitGeneric}}</code>,用于 {{L|VGUI2|UI}} 材质或用于少见的{{L|tool texture|工具纹理}}


===参数===
===参数===


:''在[[:Category:List of Shader Parameters|渲染器参数列表]]中,查看完整的渲染器参数列表文档''
:''在{{LCategory|List of Shader Parameters|渲染器参数列表}}中,查看完整的渲染器参数列表文档''


选择了渲染器后,下一步需要配置参数(也叫命令)。材质文件中有数百个可选的参数,因此本文只介绍其中常见的几个。它们在绝大多数的渲染器中是通用的。如下:
选择了渲染器后,下一步需要配置参数(也叫命令)。材质文件中有数百个可选的参数,因此本文只介绍其中常见的几个。它们在绝大多数的渲染器中是通用的。如下:


*<code>[[$basetexture]]</code>
*<code>{{L|$basetexture}}</code>
*<code>[[$surfaceprop]]</code>
*<code>{{L|$surfaceprop}}</code>
*<code>[[$envmap]]</code>
*<code>{{L|$envmap}}</code>
*<code>[[$bumpmap]]</code>
*<code>{{L|$bumpmap}}</code>
*<code>[[$detail]]</code>
*<code>{{L|$detail}}</code>
*<code>[[$selfillum]]</code>
*<code>{{L|$selfillum}}</code>
*<code>[[$model (VMT)|$model]]</code>
*<code>{{L|$model (VMT)|$model}}</code>


{{tip|如果在参数值中需要使用空格或Tab,必须使用"双引号"把整个值括起来。你经常会看到所有的值都用双引号括起来了——其实可以不用这样,因为它不是必要的。}}
{{tip|如果在参数值中需要使用空格或Tab,必须使用"双引号"把整个值括起来。你经常会看到所有的值都用双引号括起来了——其实可以不用这样,因为它不是必要的。}}
Line 109: Line 109:
* {{en}} [[Material Editor|材质编辑器]]
* {{en}} [[Material Editor|材质编辑器]]
* {{en}} [[Creating Reflective Materials|创建带反光的材质]]
* {{en}} [[Creating Reflective Materials|创建带反光的材质]]
* [[:Category:List of Shader Parameters:zh-cn|渲染器参数列表]]
* {{LCategory|List of Shader Parameters|渲染器参数列表}}

Revision as of 09:46, 11 July 2024

English (en)Español (es)Français (fr)日本語 (ja)한국어 (ko)Português do Brasil (pt-br)Русский (ru)中文 (zh)Translate (Translate)

本简体中文页面由 Gloria 汉化。

本篇教程将一步步教你如何创建全新的材质(Material)(en),包括材质纹理(Texture)(en)的创建。

创建纹理

只要满足以下条件,任何图片文件都能作为纹理使用:它的尺寸(高度和宽度)必须是2的乘方,2、4、8、16、32、64、128、256、512、1024、2048...以此类推。如果不清楚该用哪一种尺寸,可以参考现有的同类型纹理。高分辨图片会降低性能,但在近距离下更清晰。

不同类型的物体有不同标准的分辨率(例如人物模型的纹理分辨率非常高)。如果感到困惑,可以使用GCFScape(en)source materials.gcf 中提取纹理,看看Valve是怎么做的。

Note.png注意:纹理源文件应当使用无损格式保存,例如TGA,以避免图片质量的损失。

转换纹理

为了给起源引擎使用,纹理必须先转换为 Valve Texture Format(en) 格式。Valve提供的工具是VTEX(en)。它是个命令行(en)工具,使用起来相当不便,因此推荐使用第三方工具VTFEdit(en):它提供了图形用户界面,能让你无需重新编译就能修改纹理属性,支持大多数图片格式,也不需要每个纹理都创建一遍脚本文件。当然有些情况下还是不得不用回VTEX工具...但也仅限于那部分情况。此外,在使用带透明通道的纹理时,它会建议你先转为TIFF格式保存,因为PNG的透明度容易导致问题。

(部分图片软件如PhotoshopGIMPPaint.NET在安装了VTF插件后,能直接保存为VTF格式文件。但本篇教程不做讲解,因为并非每个人都使用上述工具。)

如何将自定义图片导入VTFEdit:菜单 File > Import 或者快捷键 Ctrl+I,选择图片后将会弹出“导入”对话框:

VTFEdit的“导入”对话框

通用设置

设置是最关键的。以下是其中三个:

Normal format/普通模式
不透明纹理使用的色彩/压缩格式。
Alpha format/透明通道模式
带透明通道的纹理使用的色彩/压缩格式。
Texture type/纹理类型
在导入了多张图片时使用,具体类型取决于它是(animation frames(动画帧)/cubemap faces(立方体贴图表面)/depth slices(深度切片))。

如果你制作的是普通、简单的纹理,上面的选项无需修改。但如果制作的是高清的细节图片,则需要选择无损的压缩模式.

Mipmap设置

Mipmaps(en)是当纹理距离镜头相当远时,自动切换成的低清版纹理。它的使用减少的不必要的图片缩放,增加了性能与图片显示质量。纹理细节层次(en)需要Mipmap才能正常使用。

Tip.png提示:在3D世界中使用的纹理才需要mipmap。为了节约内存,只是用在2D界面的图片不应有mipmap。

下列图片展示了VTFEdit中各类不同的mipmap过滤器:

法线贴图设置

这些(打错标签的)设置能够让你从输入的图片中生成一张法线贴图(en)。你可能希望使用图片编辑器制作一张更好的法线贴图,但提供的自动选项能够快速生成法线贴图,可以在它的基础上进行修改。

配置与保存

点击OK按钮后,导入的图片转换完成(文件过大时会有较大的延迟),并生成一个VTF文件。接下来要做的只剩下在左侧的选项列表中对纹理进行配置了。Valve Texture Format#Image_flags中有每个选项的说明。

最后,在你的游戏本体或MOD中的 \materials 文件夹下保存纹理文件。

创建材质

起源引擎无法直接使用纹理文件。所有的纹理都需要通过 材质(en)文件访问。

材质是可以用任何文本编辑器处理的脚本文件。但推荐使用Notepad++,并安装社区制作的语法高亮(en)插件。 要让材质能够被检测到,它必须被保存在游戏本体或MOD中的 \materials 文件夹下,后缀名是.vmt

Note.png注意:如果是专门为地图或是已有mod制作的材质,可以考虑使用BSPZIP(en)\Packbsp(en)\Pakrat(en)\Compile Pal(en)将材质打包到地图文件中。可以完全杜绝材质丢失的问题。

语法

材质文件的格式如下:

<渲染器(shader)(en)>
{
	<参数> <取值>
	...
}
LightmappedGeneric
{
	$basetexture coast\shingle_01
	$surfaceprop gravel
}

有很多渲染器(en)可以选择,但大多数材质使用的是 LightmappedGeneric(en)(用于笔刷(en)) 或是 VertexLitGeneric(en) (用于模型(en))。第三常用的渲染器是 UnlitGeneric(en),用于 UI(en) 材质或用于少见的工具纹理(en)

参数

渲染器参数列表(en)中,查看完整的渲染器参数列表文档

选择了渲染器后,下一步需要配置参数(也叫命令)。材质文件中有数百个可选的参数,因此本文只介绍其中常见的几个。它们在绝大多数的渲染器中是通用的。如下:

Tip.png提示:如果在参数值中需要使用空格或Tab,必须使用"双引号"把整个值括起来。你经常会看到所有的值都用双引号括起来了——其实可以不用这样,因为它不是必要的。

另见