2014-10-20 75 views
0

在Blender中導出Collada網格描述文件後,我注意到一個奇怪的問題。使用Collada導出器從Blender導出文件的奇怪行爲

讓我們來看看上下文:我已經在Blender上創建了一個非常簡單的項目,它可以在一個平面上應用簡單的紋理映射。

下面是一個輸出的屏幕:

enter image description here

這裏的材料構成的畫面:

enter image description here

正如你所看到的,材料發散分量都等於0.7(Kd 0.7 0.7 0.7)。

最後附着在材料質地:

enter image description here

它被命名爲 'floor_COLOR.jpg'。

現在,這裏從波前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> 

漫Phong濃淡方程如下:

diffuse_color = gl_LightSource.diffuse * gl_FrontMaterial.diffuse * dot(NormalDir, LightDir) 
diffuse_color *= fragment_color_from_diffuse_texture //Here 'floor_COLOR.jpg' (sampler2D) 

其中 'gl_FrontMaterial.diffuse' 是指擴散材料組分(KD )!

有了這個出口在我的印象公式應該是這樣的:

diffuse_color = gl_LightSource.diffuse * fragment_color_from_diffuse_texture * dot(NormalDir, LightDir) 

但它不正確!

那麼,爲什麼擴散材料組件已經消失?

非常感謝您的幫助!

回答

0

看來出口商是這樣設計的。這可能會或可能不匹配collada file specifications。 (我還沒有讀過)

在攪拌機中,您可以指定圖像紋理來影響漫反射顏色並控制圖像和漫反射顏色之間的混合量。導出到collada時,影響漫反射顏色的圖像總是作爲漫反射顏色的唯一來源導出。

如果這是有意的,您可能需要詢問其中一個developers that work on collada或者如果您認爲這是不正確的,請提交bug report

+0

謝謝。我會提交一個錯誤報告。 – user1364743 2014-10-25 16:57:57