Zh/$envmap: Difference between revisions

From Valve Developer Community
< Zh
Jump to navigation Jump to search
m ((Hopefully) fixed syntax highlighting errors)
(Various wording and formatting cleanup; some sync to English version)
Line 4: Line 4:
[[File:Specular.jpg|thumb|250px|镜面反射]]
[[File:Specular.jpg|thumb|250px|镜面反射]]


'''<code>$envmap</code>''' [[VMT]]可以在光滑的表面产生[[wikipedia:specular reflection|镜面反射]].镜面反射由"环境反射" (特别是([[cubemap|反射球]]));反射将由最近的[[env_cubemap]]实体决定.反射不是动态(实时)的!
'''<code>$envmap</code>''' 是一个所有起源引擎游戏都可以使用的[[Material|材质]][[Shader|着色器]]参数。可以在光滑的表面产生[[wikipedia:specular reflection|镜面反射]]。镜面反射是通过定义一张「环境反射图」(具体而言是[[cubemap|反射球]])来实现的;反射通常由最近的[[env_cubemap]]实体决定。反射不是动态的。


另一种引擎支持的反射为[[$phong|漫反射]].
起源引擎所支持的另一种反射为[[$phong|冯氏反射]].


==语法/结构==
== 语法 ==
<pre>
<pre>
$envmap env_cubemap
$envmap env_cubemap
</pre>
</pre>


"env_cubemap"是一个常用的实体, 当地图编译时,它将通知[[VBSP]]选择最近的[[env_cubemap]]实体. 你也可以使用一个已被手动渲染好的静态反射图像充当
「env_cubemap」最为常用。当地图编译时,它将通知[[VBSP]]选择最近的[[env_cubemap]]实体。你也可以使用一个手动创建的静态反射图像充当反射。
反射。
{{note|大多数反射材质在作为屏幕覆盖材质或海报喷漆时将不会呈现反射。原因不明。}}


==创建一个自定义静态反射材质==
{{note:zh-cn|大多数反射材质在作为覆盖或印花材质时将不会呈现反射。原因不明。}}


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


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


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


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


'''这里是所需要的方向'''
'''这里是所需要的方向'''


{{BoxOut|float=right|width=22em|
{{BoxOut|float=right|width=22em|1=<strong style="font-size:1.2em;color:#fff;">注释</strong>
1=<strong style="font-size:1.2em;color:#fff;">注释</strong>


* FT=正面
* FT=正面
* BK=背面
* BK=背面
*RT=右
* RT=右
* LF-左
* LF-左
* UP=上
* UP=上
Line 45: Line 43:
* 00_02_00 示范. (customcubemap_00_02_00.tga)
* 00_02_00 示范. (customcubemap_00_02_00.tga)
}}
}}
http://i1.tietuku.com/8bdf7cc939de44cc.png


http://i1.tietuku.com/8bdf7cc939de44cc.png {{todo:zh-cn|修复图片链接}}


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


http://i1.tietuku.com/421b61f2f977ef35.jpg
http://i1.tietuku.com/421b61f2f977ef35.jpg {{todo:zh-cn|修复图片链接}}


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


<pre>
<pre>
Line 58: Line 56:
</pre>
</pre>


===在VTEX中的使用方法===
=== 在VTEX中的使用方法 ===


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


{{todo|(回忆)每个方向对应的轴线是什么?}}
{{todo:zh-cn|(回忆)每个方向对应的轴线是什么?}}


http://i.imgur.com/pa7lnGk.jpg
http://i.imgur.com/pa7lnGk.jpg


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


<code>'''pfm 1'''<br /></code>
<code>'''pfm 1'''<br /></code>
Line 72: Line 70:
<code>'''nocompress 1'''<br /></code>
<code>'''nocompress 1'''<br /></code>


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


== 附加参数 ==
== 参数与效果 ==


; <code>$envmapmask <材质></code>
{{MatParam|$envmapmask|纹理|见<code>[[$envmapmask]]</code>。一个决定每个[[texel|纹理元素]]反射率的[[VTF]]纹理。}}
: 查阅 <code>[[$envmapmask]]</code>. 一个决定每个[[texel|纹理元素]]反射率的[[VTF]]文件.
{{MatParam|$envmaptint|[[RGB]][[Matrix|矩阵]]|控制反射率的[[RGB|红、绿、蓝]]频道。任何正数皆可使用。默认值为 <code>"[1 1 1]"</code>,即100%强度。}}
; <code>$envmaptint "[红色[[float|浮点]]> <绿色浮点> <蓝色浮点>]"</code>
{{note:zh-cn|你''必须''使用引号,因为值中含有空格。}}
:控制反射率的[[RGB|红,绿,蓝]]颜色波长.任何正数皆可被使用.默认数值为 <code>"[1 1 1]"</code>,意思是100%强度. {{note|你''必须''使用引号,因为这是波段的特征值.}} {{tip|这条命令常被使用于在没有使用<code>$envmapmask</code>的情况下调整镜面反射的亮度.}}
{{tip:zh-cn|这条命令常被用于降低镜面反射的亮度而无需修改<code>$envmapmask</code>}}
; <code>$envmapcontrast <[[normal|正常]]></code>
{{MatParam|$envmapcontrast|[[Normal|单位浮点]]|控制反射的[[Wikipedia:Contrast (vision)|对比度]]。0为自然对比度,1是完全平方的对比度(即颜色×颜色)。}}
: 控制反射的[[Wikipedia:Contrast (vision)|对比度]].0为自然对比度,而1是颜色使用高对比,以减少和增加相对较深的地区。  (即 color*color).
{{tip:zh-cn|使用高对比度能减少相对黑暗的区域,并增加「热点」。}}
: {{tip|使用高对比度能从相当程度上减少黑暗区域,并增加 "热点".}}{{note|[[Phong|漫反射]]启用时本命令无效.}}
{{note:zh-cn|使用[[Phong|冯氏]]的时候本命令无效。}}
; <code>$envmapsaturation <正常></code>
{{MatParam|$envmapsaturation|[[Normal|单位浮点]]|控制反射的饱和度。0为灰阶,1是自然饱和度。}}
: 控制反射的颜色饱和度. 0为灰色调,而1是自然饱和度.{{note|[[Phong|漫反射]]启用时本命令无效.}}
{{note:zh-cn|使用[[Phong|冯氏]]的时候本命令无效。}}
; <code>$envmapframe <[[int|整数]]></code>
{{MatParam|$envmapframe|[[Integer|整数]]|动态反射的起始帧。}}
: 启动动态反射的帧数.
{{MatParam|$envmapmode|[[Integer|整数]]|已作废。MATERIAL_VAR_ENVMAPMODE = (1 << 25)|deprecated=1}}
; <code>$envmapmode <整数?></code>
{{MatParam|$basetexturenoenvmap|[[Boolean|布尔值]]||dx9=1}}
: 可忽视  MATERIAL_VAR_ENVMAPMODE  = (1 << 25), // 已作废
{{MatParam|$basetexture2noenvmap|[[Boolean|布尔值]]|用于双[[albedo|漫反射图]]的材质,使其中一个不反射。参见<code>[[$basetexture]]</code><code>[[$basetexture2]]</code>。|dx9=1}}
; <code>$basetexturenoenvmap <[[bool|布尔值(即on/off)]]></code>
{{MatParam|$envmapoptional|选项|选择进行渲染的最老的DirectX版本。选项有:
; <code>$basetexture2noenvmap <布尔值(即on/off)></code>
*<code>80</code> (DirectX 8)
: 可用于双[[albedo|反射率]]的材质, 使其中一个弯曲. 需要 DirectX 9; 还可查阅 <code>[[$basetexture]]</code> 以及 <code>[[$basetexture2]]</code>.
*<code>81</code> (DirectX 8.1)
;<code>$envmapoptional <可选></code>
*<code>90</code> (DirectX 9)
: 使最老的DX版本也能绘制渲染. 可以选择以下:
*<code>95</code> (DirectX 9使用Shader Model 3)}}
:*<code>80</code> (DirectX 8)
{{MatParam|$envmapsphere|[[Boolean|布尔值]]|已作废。决定一个材质的反射是否为反射球(spheremap)而不是反射方块(cubemap)。设置为1则使用反射球。|deprecated=1}}
:*<code>81</code> (DirectX 8.1)
{{MatParam|$envmapfresnel|[[Float|浮点]]|添加菲涅尔效应。高于1.0的值会使效果倍增。|since=EP2|dx9=1}}  
:*<code>90</code> (DirectX 9)
{{note:zh-cn|只能用于<code>VertexLitGeneric</code>。对于<code>LightmappedGeneric</code>,请用$fresnelreflection。}}
:*<code>95</code> (使用Shader Model3的DirectX 9)
; <code>$envmapsphere <布尔值(即on/off)></code>
: 决定一个材质的反射是否为球体反射 (存疑) 而不是立方反射. 设置为1则使用球体反射.
; <code>$envmapfresnel <浮点></code> ([[Left 4 Dead 2]]和[[Source Filmmaker]]可用)
: 增加菲对反射的影响. 面对观察者的表面的反射比侧面少.取决于[[Phong|漫反射]]的菲范围.影响将会随着数值高于1.0而增加.
{{todo|确认其他引擎分支的环境反射菲幅.}}
; <code>$envmapanisotropy <布尔值(即on/off></code> {{CSGO add}}
; <code>$envmapanisotropyscale <浮点></code> {{CSGO add}}
: 弯曲反射, "推挤" 顶部向下.
; <code>$envmaplightmapscale</code> {{CSGO add}}
: 允许表面的光影贴图被用作反射的附加遮罩 0-1的数值决定了遮罩程度; 高于1的数值也是可以的,但似乎会造成相反的影响.


==控制台命令==
{{MatParam|$envmaplightscale|[[Float|浮点]]|允许表面的光影贴图被用作反射的附加遮罩。0-1的数值决定了遮罩程度; 高于1的值也可以,但似乎会造成相反的影响。|since=CSGO}}
{{MatParam|$envmapanisotropy|[[Boolean|布尔值]]|扭曲反射,把顶部「推」向下。|since=CSGO}}
{{MatParam|$envmapanisotropyscale|[[Normal|单位浮点]]|扭曲反射的量。|since=CSGO}}


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


==相关信息==
<code>[[buildcubemaps]]</code>
:为材质创建反射。如何不运行这一命令,则会直接反射天空或显示错误材质,在EP1中为白色,在多人游戏中为紫黑格子。
<code>r_showenvcubemap <布尔值></code>
:一个展示所有动态物体在高强度反射下的状态的命令。本文开头的图片就是使用这一命令得到的。


* [[$envmapmask]] (反射遮罩)
== 参见 ==
* [[$phong]] (漫反射)
 
* [[$envmapmask]](镜面反射遮罩)
* [[$phong]](漫反射)
* [[Cubemap]]
* [[Cubemap]]


[[Category:List of Shader Parameters|E]]
[[Category:List of Shader Parameters|E]]
[[Category:VMT Reflections]]
[[Category:VMT Reflections]]

Revision as of 02:52, 31 July 2019

Template:Otherlang2

镜面反射

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

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

语法

$envmap env_cubemap

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

Template:Note:zh-cn

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

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

在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)

http://i1.tietuku.com/8bdf7cc939de44cc.png Template:Todo:zh-cn

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

http://i1.tietuku.com/421b61f2f977ef35.jpg Template:Todo:zh-cn

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

Template:Todo:zh-cn

http://i.imgur.com/pa7lnGk.jpg

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

pfm 1
pfmscale 1
nocompress 1

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

参数与效果

$envmapmask $envmaptint Template:Note:zh-cn Template:Tip:zh-cn $envmapcontrast Template:Tip:zh-cn Template:Note:zh-cn $envmapsaturation Template:Note:zh-cn $envmapframe $envmapmode $basetexturenoenvmap $basetexture2noenvmap $envmapoptional $envmapsphere $envmapfresnel Template:Note:zh-cn

$envmaplightscale $envmapanisotropy $envmapanisotropyscale

控制台命令

buildcubemaps

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

r_showenvcubemap <布尔值>

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

参见