$envmap

来自Valve Developer Community
跳转至: 导航搜索
English (en)中文 (zh)
编辑
镜面反射

$envmap 是一个所有起源引擎游戏都可以使用的材质着色器参数。可以在光滑的表面产生镜面反射。镜面反射是通过定义一张「环境反射图」(具体而言是反射球)来实现的;反射通常由最近的env_cubemap实体决定。反射不是动态的。

起源引擎所支持的另一种反射为冯氏反射.

语法

$envmap env_cubemap

「env_cubemap」最为常用。当地图编译时,它将通知VBSP选择最近的env_cubemap实体。你也可以使用一个手动创建的静态反射图像充当反射。

Note.png注意:大多数反射材质在作为覆盖或印花材质时将不会呈现反射。原因不明。

创建一个自定义静态反射材质

有些情况下会用到自定义的反射材质,一些V社的模型中也有所使用。

在VTFLib中的使用方法

为了使反射球运行,你需要六个面的独立的纹理,且方向要正确,才能在起源引擎中正常显示。所以有些面要进行顺/逆时针旋转。在定向前每个面都要进行水平镜像。

Note.png注意:异形丛生 Alien Swarm 之前的游戏需要7个面才能使反射球运行。第七个面是一张圆形的纹理,用于$envmapsphere参数。

这里是所需要的方向

注释

  • FT=正面
  • BK=背面
  • RT=右
  • LF-左
  • UP=上
  • DN=下

  • CW = 顺时针
  • CCW = 逆时针

  • 00_00_00 示范. (customcubemap_00_00_00.tga)
  • 00_01_00 示范. (customcubemap_00_01_00.tga)
  • 00_02_00 示范. (customcubemap_00_02_00.tga)

8bdf7cc939de44cc.png

Blank image.png待完善: 修复图片链接

一旦你准备好了所有方向的图片,你便可以将他们放入VTFEDIT中,并选择"Environmetal Map"

421b61f2f977ef35.jpg

Blank image.png待完善: 修复图片链接

然后将他们保存为VTF格式,并在你的VMT文件中输入以下内容:

"$Envmap"             "models/cra0kalo/ct_swat/eyeglint_cubemap"    // Reflection environment map static

在VTEX中的使用方法

Vtex会自动反射并纠正贴图面的方向,你只需要提供正确的材质名称。每个文件名大概像这样:envmap001a*.tga, 你应将*替换为 BK, FT, LF, RT, UP, 或 DN。如果你在游戏中截取到了反射截图,那么本步骤就完成了,但为了使他们能在Vtex上正常工作,你必须使用HDRshop(但在此之前你应该将材质格式转换为BMP,因为HDRshop只能识别这种格式)并将他们转换为PFM格式。

Blank image.png待完善: (回忆)每个方向对应的轴线是什么?

pa7lnGk.jpg

创建一个和你的材质名相同的文本(示范:envmap001a.txt)。若你要渲染HDR,请输入以下内容,否则请留空:

pfm 1
pfmscale 1
nocompress 1

将这些文件放入materialsrc(文件夹)并拖拽TXT文件到vtex.exe中,然后你便能得到一个正常工作的反射贴图。HDR环境贴图的名字将会像envmap001a.hdr.vtf这样, 并依赖其工作。

参数与效果

$envmapmask <texture> | 纹理
$envmapmask。一个决定每个纹理元素反射率的VTF纹理。
$envmaptint <RGB矩阵>
控制反射率的红、绿、蓝通道。任何正数皆可使用。默认值为 "[1 1 1]",即100%强度。
Note.png注意:必须使用引号,因为值中含有空格。
Tip.png提示:这条命令常被用于降低镜面反射的亮度而无需修改$envmapmask
$envmapcontrast <单位浮点>
控制反射的对比度。0为自然对比度,1是完全平方的对比度(即颜色×颜色)。
Tip.png提示:使用高对比度能减少相对黑暗的区域,并增加「热点」。
Note.png注意:使用冯氏的时候本命令无效。
$envmapsaturation <单位浮点>
控制反射的饱和度。0为灰阶,1是自然饱和度。
Note.png注意:对模型使用冯氏的时候本命令无效。
$envmapframe <整数>
动态反射的起始帧。
$envmapmode <整数>  Obsolete
已作废。 
$basetexturenoenvmap $basetexture2noenvmap <boolean> | 布尔值  (DX9+)
用于双漫反射图的材质,使其中一个不反射。参见$basetexture$basetexture2
$envmapoptional <选项>
选择进行渲染的最老的DirectX版本。选项有:
  • 80 (DirectX 8)
  • 81 (DirectX 8.1)
  • 90 (DirectX 9)
  • 95 (DirectX 9使用Shader Model 3)
$envmapsphere <boolean> | 布尔值  Obsolete
已作废。  决定一个材质的反射是否为反射球(spheremap)而不是反射方块(cubemap)。设置为1则使用反射球。异形丛生以后无效。
$fresnelreflection <浮点> (存在于自 半衰期2:第一章 以来)  (DX9+)
添加菲涅尔效应。0为关闭,1为全开。高于1.0的值会使效果倍增。
Note.png注意:只能用于LightmappedGenericWorldVertexTransition
$envmapfresnel <浮点> (存在于自 半衰期2:第二章 以来)  (DX9+)
$fresnelreflection,用于VertexLitGeneric
$envmaplightscale <浮点> (存在于自 反恐精英:全球攻势 以来)
允许表面的光影贴图被用作反射的附加遮罩。0-1的数值决定了遮罩程度; 高于1的值也可以,但似乎会造成相反的影响。
$envmapanisotropy <boolean> | 布尔值 (存在于自 反恐精英:全球攻势 以来)
扭曲反射,把顶部「推」向下。
$envmapanisotropyscale <单位浮点> (存在于自 反恐精英:全球攻势 以来)
扭曲反射的量。

控制台命令

buildcubemaps

为材质创建反射。如何不运行这一命令,则会直接反射天空或显示错误材质,在EP1中为白色,在多人游戏中为紫黑格子。

r_showenvcubemap <布尔值>

一个展示所有动态物体在高强度反射下的状态的命令。本文开头的图片就是使用这一命令得到的。

参见