$envmap:zh-cn

From Valve Developer Community
Jump to: navigation, search
English
镜面反射

$envmap VMT可以在光滑的表面产生镜面反射.镜面反射由"环境反射" (特别是(反射球));反射将由最近的env_cubemap实体决定.反射不是动态(实时)的!

另一种引擎支持的反射为漫反射.

语法/结构

$envmap env_cubemap

"env_cubemap"是一个常用的实体, 当地图编译时,它将通知VBSP选择最近的env_cubemap实体. 你也可以使用一个已被手动渲染好的静态反射图像充当 反射。

Note:大多数反射材质在作为屏幕覆盖材质或海报喷漆时将不会呈现反射。原因不明。

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

有些时候,在有的模型中或其他情况下都会用到自定义的反射材质,所以要学会如何创建一个自定义反射材质

在VTFLib中的使用方法

为了材质能正常工作,你需要六个面的个体材质,且方向要正确,才可正常在引擎中显示. 所以有些面要正/逆时针旋转. 在定向前每个面都要水平反射.


这里是所需要的方向

注释

  • 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


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

421b61f2f977ef35.jpg

然后将他们保存为.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格式.

To do: (回忆)每个方向对应的轴线是什么?

pa7lnGk.jpg

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

pfm 1
pfmscale 1
nocompress 1

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

附加参数

$envmapmask <材质>
查阅 $envmapmask. 一个决定每个纹理元素反射率的VTF文件.
$envmaptint "[红色浮点> <绿色浮点> <蓝色浮点>]"
控制反射率的红,绿,蓝颜色波长.任何正数皆可被使用.默认数值为 "[1 1 1]",意思是100%强度.
Note:必须使用引号,因为这是波段的特征值.
Tip:这条命令常被使用于在没有使用$envmapmask的情况下调整镜面反射的亮度.
$envmapcontrast <正常>
控制反射的对比度.0为自然对比度,而1是颜色使用高对比,以减少和增加相对较深的地区。 (即 color*color).
Tip:使用高对比度能从相当程度上减少黑暗区域,并增加 "热点".
Note:漫反射启用时本命令无效.
$envmapsaturation <正常>
控制反射的颜色饱和度. 0为灰色调,而1是自然饱和度.
Note:漫反射启用时本命令无效.
$envmapframe <整数>
启动动态反射的帧数.
$envmapmode <整数?>
可忽视 MATERIAL_VAR_ENVMAPMODE = (1 << 25), // 已作废
$basetexturenoenvmap <布尔值(即on/off)>
$basetexture2noenvmap <布尔值(即on/off)>
可用于双反射率的材质, 使其中一个弯曲. 需要 DirectX 9; 还可查阅 $basetexture 以及 $basetexture2.
$envmapoptional <可选>
使最老的DX版本也能绘制渲染. 可以选择以下:
  • 80 (DirectX 8)
  • 81 (DirectX 8.1)
  • 90 (DirectX 9)
  • 95 (使用Shader Model3的DirectX 9)
$envmapsphere <布尔值(即on/off)>
决定一个材质的反射是否为球体反射 (存疑) 而不是立方反射. 设置为1则使用球体反射.
$envmapfresnel <浮点> (Left 4 Dead 2Source Filmmaker可用)
增加菲对反射的影响. 面对观察者的表面的反射比侧面少.取决于漫反射的菲范围.影响将会随着数值高于1.0而增加.

To do: 确认其他引擎分支的环境反射菲幅.

$envmapanisotropy <布尔值(即on/off> (New with Counter-Strike: Global Offensive)
$envmapanisotropyscale <浮点> (New with Counter-Strike: Global Offensive)
弯曲反射, "推挤" 顶部向下.
$envmaplightmapscale (New with Counter-Strike: Global Offensive)
允许表面的光影贴图被用作反射的附加遮罩 0-1的数值决定了遮罩程度; 高于1的数值也是可以的,但似乎会造成相反的影响.

控制台命令

buildcubemaps
为材质创建反射.如何创建失败,则会直接反射天空或显示错误材质,错误在EP1中是白色的,在其他游戏为花格.
r_showenvcubemap <布尔值>
一个展示所有动态物体在高强度反射下的状态的命令。通常会在物体起点创造一个镜像(?对此句翻译尚有疑问)(It was used to create the image at the start of this article.)

相关信息