研究过程
首先我用替换贴图和材质的方式,确定了问题出在贴图上,即游戏认为相应的贴图内容是全
透明的。(原来的「alpha通道丢失」的说法不准确,因为如果alpha通道完全丢失,灯影
应该显示为全黑。同时自制图中风扇的网罩由于采用了同样格式的贴图,也应因为alpha通
道丢失而变成完全不透明。这些与观测到的结果不符。)
然后尝试调节Texture Setup中的Desired Video Format(该贴图在显卡中的通道存储格
式),发现已为能使该贴图正常显示的32 bits ARGB 8888。但是将其调为16 bits
ARGB 1555或者Compressed DXT1(实质上与ARGB 1555相同,只是在显存中以压缩形式存
储)时,渲染结果与ballance中一致。于是高度怀疑游戏中使用了错误的通道存储格式。
接着在Ballance的CK2_3D.ini配置文件中发现了贴图使用的存储格式字段,且其默认值即
为_16_ARGB_1555。将其改为_32_ARGB_8888后,游戏中能够正常显示灯影和柱子渐变。
为了试探是否能够覆盖CK2_3D.ini中的贴图存储格式设定,我恢复了CK2_3D.ini的默认设
置,在Gameplay.nmo中球出生后的脚本中插入了一段改变相应贴图的通道存储格式的脚本。
发现此后游戏中也可以正常地显示这些部件。
至此说明自制图和修改图中的Desired Video Format可能根本没有被存储在文件中,或者
存储了但由于某种原因没有被游戏正确识别。
后来 飘逸冷星 猜测问题原因与Virtools的General settings有关。为了证实或这否认
这个猜测,我又做了以下试验:
Virtools的general settings保存在dev.ini中,注意到其中也有CK2_3D段,并且其中也
有TextureVideoFormat键,默认值为32 bits ARGB 8888,一种合理的推测是Virtools
在保存时发现贴图设定中的该值与此选项的设定值相同,于是在保存的文件中省略了这个域。
下面是试验的过程:
1、将ballance的CK2_3D.ini中TextureVideoFormat设定为_DXT5(相当于带压缩的
ARGB_8888格式),发现修改图中渐变能正常显示。
2、将ballance的CK2_3D.ini中TextureVideoFormat设定还原为_16_ARGB1555,在关卡文件
中将desired video format设定为Compressed DXT5(对应上面的_DXT5,并且与Virtools
设定的ARGB 8888不同,以保证这个设定会出现在保存的文件中),发现渐变又不能正常显示。
这否认了这个猜测。
于是目前唯一合理的解释即为Virtools 3.5保存的文档格式与Virtools 2.1所用的文档格式
略有区别,导致贴图的Desired Video Format选项无法被Virtools 2.1正确识别;所以游戏
使用了默认的_16_ARGB1555格式。
下面附上一个模拟图:左边部分为_32_ARGB8888中柱子渐变的贴图,右半部分为转换为
_16_ARGB1555格式后的贴图。可以推测现有workaround即为将右侧贴图透明度突变附近的部
分拉伸至整个模型,利用渲染过程中的插值过程产生渐变效果。但是这样会导致贴图的水平
纹理丢失,所以也不是完美的解决方案。

由于ARGB_1555格式中,透明通道只能表示两种值:全不透明和全透明。原格式则能表示256
种不同的透明度。所以0~127的值全部被当作全透明处理,以上的值全部被当作不透明。
这也是为什么风扇网罩能够正常显示(风扇网罩的alpha通道本身就是很接近仅有全透明——全
不透明的图像)的原因。