图4.21 为火焰制作的实体及位置设置
将此多面物体中心点对齐世界原点并导出,配置此多面物体的DT物体信息如下:
...
//火焰DT物体
[DTMod8]
texnum = 11
mtl=model\LearnW3D\Chapter1\DT\huo\mod.mtl
mod=model\LearnW3D\Chapter1\DT\huo\mod.obj
tex1=model\LearnW3D\Chapter1\DT\huo\1.bmp
tex2=model\LearnW3D\Chapter1\DT\huo\2.bmp
tex3=model\LearnW3D\Chapter1\DT\huo\3.bmp
tex4=model\LearnW3D\Chapter1\DT\huo\4.bmp
tex5=model\LearnW3D\Chapter1\DT\huo\5.bmp
tex6=model\LearnW3D\Chapter1\DT\huo\6.bmp
tex7=model\LearnW3D\Chapter1\DT\huo\7.bmp
tex8=model\LearnW3D\Chapter1\DT\huo\8.bmp
tex9=model\LearnW3D\Chapter1\DT\huo\9.bmp
tex10=model\LearnW3D\Chapter1\DT\huo\10.bmp
tex11=model\LearnW3D\Chapter1\DT\huo\11.bmp
...
再配置火焰DT物体对应的PT物体,配置信息如下:
...
//火焰PT物体
7x=129.911
7y=682.781
7z=-748.033
7ShowTip=0
7type=8
7SelMode=0
7ShowOnGV=0
...
此配置信息中,x、y和z为3dsmax中的火焰位置。这里没有设置AbsPos配置项(此项默认为0),即位置不是绝对位置,而是加上场景偏移后的位置。注意:一般情况下除动态物理物体控制物体,其他PT物体的位置都不应该是绝对位置,因此有可能场景偏移存在。如果场景偏移不存在,是否指定都没有影响。type指定此PT物体对应的DT物体编号,火焰DT物体为8号。
这样火焰就模型可以在场景中渲染出来了,但是在4.16节中,我们已经知道在默认情况下RealOnGV为1即默认是不透明渲染,所以我们应显式地指定RealOnGV=0,这样就可以以透明方式进行渲染。随后通过4.16节中提到的透明物体基础颜色设置我们想要的透明颜色缩放和透明度,添加设置项如下,这里设置透明颜色的缩放为1.0,即不缩放保持原始颜色,设置透明度为0.95,即5%的透明度,这样火焰将呈现轻微的透明。
...
7DTModVirtualColR=1.0
7DTModVirtualColG=1.0
7DTModVirtualColB=1.0
7DTModVirtualColA=0.95
...
在设置完透明参数后,我们还需要了解三个重要配置项:
- DTModVirtualCol:用于指定是否使用指定的透明参数,默认为1,即使用。当为1时,使用DTModVirtualColR、DTModVirtualColG、DTModVirtualColB和DTModVirtualColA设置此物体的透明参数。当为0时,只使用引擎系统默认的透明参数(为0的情况很少使用)。
- DTModMode:用于指定此物体的透明方式,默认为1即黑色透明模式。引擎支持三种透明模式:
0号模式-普通透明模式。在这种方式下此透明物体将通过自身的透明度和后面物体的透明度进行混合,DTModVirtualColA用于控制总体透明度。
1号模式-黑色透明模式。在这种方式下,此透明物体的颜色直接与后面物体的颜色相加进行混合,那么此物体颜色越黑的区域透明度越高,DTModVirtualColA用于控制总体透明度。
2号模式-灰度透明模式。在这种方式下,此透明物体贴图的每个像素的灰度值将作为此像素的透明度,并通过此透明度和后面物体的透明度进行混合,DTModVirtualColA用于控制总体透明度。
引擎还支持使用PBR材质中的透明贴图。透明贴图是一种专门用于控制像素透明度的贴图,用于进行表面精细化的透明处理。我们将在高级篇进行PBR材质的介绍。
- DTModSpeed:用于指定此物体的多贴图切换速度(或间隔时间),以毫秒ms为单位,默认间隔为50ms。若texnum字段指定了多个贴图时,引擎会为此DT物体自动切换贴图,使用此配置项控制切换速度(间隔)。在本例中,此项设置越大,火苗变化越慢,反之越快,这里我们使用默认的50ms切换速度,因为无需显性指定此配置项。
图4.22 三种不同透明模式的透明表现
图4.22从左到右的竖列依次展示了普通透明、黑色透明和灰度透明的对比效果,上排是DTModVirtualColA为1.0的效果,下排是DTModVirtualColA为0.5的效果。通过运用不同的透明模式,可以满足灵活度更高的透明需求。通过图上三种透明形式的展示,我们就会知道若要将图4.21中火焰旁的黑色区域完全透明掉,首先需要黑色区域”足够黑”,可以简单通过PS实现,第二黑色区域的灰度也是最低的,因为火焰的透明形式可以选黑色透明或灰度透明,而黑色透明会将后面物体的颜色也加上,因此火焰会显得更亮一些,最终我们选择黑色透明方式(读者也可以改变为灰度透明模式以对比效果差异),刚好也是DTModVirtualCol的默认方式,因此无需额外显式声明DTModVirtualCol。运行程序后的雕塑和火焰效果如下所示:
图4.23 雕塑和火焰变化效果
本节演示视频
通过网盘分享的文件:W3D引擎游戏开发学习资料
链接: https://pan.baidu.com/s/1mm5f9nDzkT3KlFYQscJBoQ?pwd=1234 提取码: 1234
公众号:W3D引擎