如何在Sceneform和ARCore中将PBR材料用作图像贴图?

时间:2019-01-28 13:08:17

标签: augmented-reality arcore sceneform pbr

关于文章Custom Material Reference,我们可以传递NormalDiffuseRoughnessMetalness的值。

我想在Sceneform和ARCore中使用自定义PBR材质作为图像贴图(而不是值)。

示例地图:

enter image description here

2 个答案:

答案 0 :(得分:0)

OBJ Attributes

如果您使用的是obj文件,则需要制作自定义材料。 Here is an example custom material拥有您所需的一切。

FBX Attributes

如果您使用的是fbx文件,则默认情况下会提供这些文件:

  • baseColorMap
  • metallicMap
  • normalMap
  • roughnessMap

GLTF Attributes

如果您使用的是gltf文件,则需要将金属贴图和粗糙度贴图合并为一个。遮挡也可以打包到同一纹理贴图中。红色是咬合,绿色是粗糙的,蓝色是金属的。 sfa文件中为此的参数是:

metallicRoughness

答案 1 :(得分:0)

已更新:查看底部的 A_void_void 内容,以了解如何将Mars.sfa纹理分配给3D模型。

  

Sceneform提供了默认的材质定义(.png文件),使开发人员可以轻松获得美观的结果。希望深入定制资产外观方式的开发人员可以创建自己的物料定义(.sfm文件),然后通过在资产定义中指定source属性将其应用于资产。

材料定义格式是一种基于JSON的格式。在顶层,材质定义由3个使用JSON对象表示法的块组成。

.mat

以下代码清单显示了有效材料定义的示例:

material {
    // material properties
}
vertex {
    // vertex shader, THIS BLOCK CAN BE OPTIONAL
}
fragment {
    // fragment shader
}

或者片段部分可能是这样的:

material {
    name : "Textured material",
    parameters : [
        {
           type : sampler2d,
           name : texture
        },
        {
           type : float,
           name : metallic
        },
        {
            type : float,
            name : roughness
        }
    ],
    requires : [
        uv0
    ],
    shadingModel : lit,
    blending : opaque
}

fragment {
    void material(inout MaterialInputs material) {

        prepareMaterial(material);
        material.baseColor = texture(materialParams_texture, getUV0());
        material.metallic = materialParams.metallic;
        material.roughness = materialParams.roughness;
    }
}
  

或者例如,查看这个名为 fragment { void material(inout MaterialInputs material) { // fetch the normal in tangent space vec3 normal = texture(materialParams_normalMap, getUV0()).xyz; material.normal = normal * 2.0 - 1.0; // prepare the material prepareMaterial(material); // from now on, shading_normal, etc. can be accessed material.baseColor.rgb = vec3(1.0, 0.0, 0.0); material.metallic = 0.0; material.roughness = 1.0; } } 的示例文件:

Mars.sfa