Difference between revisions of "$envmap:zh-cn"

From Valve Developer Community
Jump to: navigation, search
(Some sync to English version)
m
 
Line 1: Line 1:
{{lang}}
+
{{lang
 +
|$envmap
 +
|title=$envmap
 +
}}
 
[[File:Specular.jpg|thumb|250px|镜面反射]]
 
[[File:Specular.jpg|thumb|250px|镜面反射]]
  
Line 84: Line 87:
 
{{note:zh-cn|对模型使用[[Phong|冯氏]]的时候本命令无效。}}
 
{{note:zh-cn|对模型使用[[Phong|冯氏]]的时候本命令无效。}}
 
{{MatParam:zh-cn|$envmapframe|整数|动态反射的起始帧。}}  
 
{{MatParam:zh-cn|$envmapframe|整数|动态反射的起始帧。}}  
{{MatParam:zh-cn|$envmapmode|整数|已作废。MATERIAL_VAR_ENVMAPMODE = (1 << 25)|deprecated=1}}  
+
{{MatParam:zh-cn|$envmapmode|整数|MATERIAL_VAR_ENVMAPMODE = (1 << 25)|deprecated=1}}  
 
{{MatParam:zh-cn|$basetexturenoenvmap|and=$basetexture2noenvmap|布尔值|用于双[[albedo|漫反射图]]的材质,使其中一个不反射。参见{{ent|$basetexture}}和{{ent|$basetexture2}}</code>。|dx9=1}}
 
{{MatParam:zh-cn|$basetexturenoenvmap|and=$basetexture2noenvmap|布尔值|用于双[[albedo|漫反射图]]的材质,使其中一个不反射。参见{{ent|$basetexture}}和{{ent|$basetexture2}}</code>。|dx9=1}}
 
{{MatParam:zh-cn|$envmapoptional|选项|选择进行渲染的最老的[[DirectX Version|DirectX版本]]。选项有:
 
{{MatParam:zh-cn|$envmapoptional|选项|选择进行渲染的最老的[[DirectX Version|DirectX版本]]。选项有:
Line 91: Line 94:
 
*<code>90</code> (DirectX 9)
 
*<code>90</code> (DirectX 9)
 
*<code>95</code> (DirectX 9使用Shader Model 3)}}  
 
*<code>95</code> (DirectX 9使用Shader Model 3)}}  
{{MatParam:zh-cn|$envmapsphere|布尔值|已作废。决定一个材质的反射是否为反射球(spheremap)而不是反射方块(cubemap)。设置为1则使用反射球。{{As}}以后无效。|deprecated=1}}  
+
{{MatParam:zh-cn|$envmapsphere|布尔值|决定一个材质的反射是否为反射球(spheremap)而不是反射方块(cubemap)。设置为1则使用反射球。{{As}}以后无效。|deprecated=1}}  
 
{{MatParam:zh-cn|$fresnelreflection|浮点|添加菲涅尔效应。0为关闭,1为全开。高于1.0的值会使效果倍增。|since=EP1|dx9=1}}  
 
{{MatParam:zh-cn|$fresnelreflection|浮点|添加菲涅尔效应。0为关闭,1为全开。高于1.0的值会使效果倍增。|since=EP1|dx9=1}}  
 
{{note:zh-cn|只能用于<code>LightmappedGeneric</code>和<code>WorldVertexTransition</code>。}}
 
{{note:zh-cn|只能用于<code>LightmappedGeneric</code>和<code>WorldVertexTransition</code>。}}

Latest revision as of 14:23, 27 August 2019

English
镜面反射

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

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

语法

$envmap env_cubemap

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

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

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

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

在VTFLib中的使用方法

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

注意:
<Alien Swarm> 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 去做: 修复图片链接

一旦你准备好了所有方向的图片,你便可以将他们放入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格式。

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

pa7lnGk.jpg

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

pfm 1
pfmscale 1
nocompress 1

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

参数与效果

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

控制台命令

buildcubemaps

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

r_showenvcubemap <布尔值>

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

参见