我在Blender中输出Collada网格描述文件后发现了一个奇怪的问题。
让我们检查一下背景:我在Blender上创建了一个非常简单的项目,在平面上应用简单的纹理映射。
这是输出屏幕:
这是材料配置的图片:
如您所见,材料漫反射成分均等于0.7(Kd 0.7 0.7 0.7)。
最后贴在材质上的纹理:
它名为' floor_COLOR.jpg'。
现在,首先来自Wavefront OBJ加载器(材料部分)的输出文件:
# Blender MTL File: 'bumped_plane.blend'
# Material Count: 1
newmtl PlaneMtl
Ns 96.078431
Ka 0.000000 0.000000 0.000000
Kd 0.70000 0.70000 0.70000 //Material diffuse components
Ks 0.889474 0.889474 0.889474
Ni 1.000000
d 1.000000
illum 2
map_Kd floor_COLOR.jpg
正如您所看到的那样,所有材质数据都在纹理级别得到尊重:我们将漫反射材质组件都等于0.7,并将漫反射贴图称为' floor_COLOR.jpg'。
现在让我们看看Collada导出器导出文件的一段代码,但是第一次没有纹理(让我们专注于漫反射材质组件):
[...]
<diffuse>
<color sid="diffuse">0.7 0.7 0.7 1</color>
</diffuse>
[...]
如您所见,我已正确恢复了所有漫反射材料数据。
但是知道如果我使用纹理映射导出我的文件,我会得到以下结果:
[...]
<image id="floor_COLOR_jpg" name="floor_COLOR_jpg">
<init_from>floor_COLOR.jpg</init_from>
</image>
[...]
<diffuse>
<texture texture="floor_COLOR_jpg-sampler" texcoord="UVMap"/>
</diffuse>
[...]
好的,我恢复了纹理的路径和类型,但漫反射材质成分在哪里?
对我来说,结果应该是这样的:
<diffuse>
<texture texture="floor_COLOR_jpg-sampler" texcoord="UVMap"/>
<color sid="diffuse">0.7 0.7 0.7 1</color>
</diffuse>
漫反射阴影方程式如下:
diffuse_color = gl_LightSource.diffuse * gl_FrontMaterial.diffuse * dot(NormalDir, LightDir)
diffuse_color *= fragment_color_from_diffuse_texture //Here 'floor_COLOR.jpg' (sampler2D)
其中&#39; gl_FrontMaterial.diffuse&#39;指漫射材料成分(Kd)!
通过这种输出,我得到的结论应该是:
diffuse_color = gl_LightSource.diffuse * fragment_color_from_diffuse_texture * dot(NormalDir, LightDir)
但这不正确!
那么,为什么漫反射材料成分消失了?!
非常感谢您的帮助!
答案 0 :(得分:0)
出口商似乎就是这样设计的。这可能与collada file specifications匹配,也可能不匹配。 (我还没读过)
在混合器中,您可以指定图像纹理以影响漫反射颜色,并控制图像和漫反射颜色之间的混合量。导出到collada时,影响任何数量的漫反射颜色的图像始终作为漫反射颜色的唯一来源导出。
如果您认为有意,可以询问其中一个developers that work on collada,如果您认为不正确,可以提交bug report。