我有一个网格(带有一些修改器的平面),在Blender中为它指定了一个材质,材质的纹理使用半透明的PNG图像。
导出到 POD 文件时,网格在 PVRShaman 中仍然看起来像在Blender中那样半透明,但是当我在 Cocos3D中导入>时strong> as CC3DPODMeshNode 它显示为图像本身仍然是半透明的,但它背后也有蓝色。
知道为什么会这样吗?
Blender中的设置似乎没问题,因为我可以在导出后正确显示它,但 Cocos3D 方面有什么问题?
答案 0 :(得分:1)
你可能正在处理预乘的alpha。为了提高效率, Xcode (以及iOS图像加载器)假设alpha要预先乘以每个纹理中的颜色,并在app打包和纹理加载过程中实际修改纹理。这是 Xcode 和iOS的众所周知的问题。
尝试更改PNG文件的名称,为其提供ppng
文件扩展名。这将导致Xcode在构建时跳过文件操作,并导致 Cocos3D 为图像使用非Apple文件加载器。
有关详情,请参阅CC3Texture
课程的说明或texture
或CC3Material
的{{1}}属性。
[编辑]:
这结果是包含透明度的两个节点的渲染顺序的问题。蓝色的颜色来自场景背景,它位于天空盒后面。感兴趣的对象在天空盒之前呈现,天空盒也具有包含透明度的纹理。通常, Cocos3D 将首先自动渲染不透明对象,然后以与摄像机相距的相反顺序自动渲染半透明对象。在这种情况下,天空盒包含透明度(具有alpha通道),并且在感兴趣的对象之后呈现。通常的做法是确保用于天空盒的纹理是不透明的,并且不包含透明度。
也可以通过将其CC3MeshNode
属性设置为正值(默认为零)来强制首先渲染天空盒(甚至是半透明天空盒)。 zOrder
属性可用于修复透明对象的呈现顺序。对完全不透明的物体不需要(也没有效果)。