android - ARCore 和 Sceneform - 将法线贴图添加到规范的面部网格纹理
问题描述
我正在使用 ARCore Sceneform 开发 AR 应用程序。我试图将法线贴图添加到面部网格纹理。但是没有可用的文档或演示。
Texture.builder()
.setSource(this, R.drawable.cartoon)
.setUsage(Texture.Usage.COLOR)
.build()
.thenAccept(texture -> faceMeshTexture = texture);
addOnUpdateListener:
for (AugmentedFace face: faceList) {
if (!faceNodeMap.containsKey(face)) {
AugmentedFaceNode faceNode = new AugmentedFaceNode(face);
faceNode.setParent(scene);
// faceNode.setFaceRegionsRenderable(faceRegionsRenderable);
faceNode.setFaceMeshTexture(faceMeshTexture);
faceNodeMap.put(face, faceNode);
}
}
解决方案
Sceneform 框架为您提供了一个默认材质定义,允许开发人员获得看似合理的材质。因此,您可以使用文件中的 ish 代码normal map
为您的规范面部网格添加一个。JSON
.sfa
.mat
在 GitHub 上查看这个示例。
这是代码片段:
{
materials: [
{
name: 'Planet_Mat',
parameters: [
{ baseColorFactor: [ 1, 1, 1, 1, ], },
{ baseColor: 'Planet_Mat_baseColor', },
{ normal: 'Planet_Mat_normal', },
{ metallicFactor: 1, },
{ metallicRoughness: 'Planet_Mat_occlusionRoughnessMetallic', },
{ emissiveFactor: [ 0, 0, 0, 1, ], },
],
source: 'build/sceneform_sdk/default_materials/gltf_material.sfm',
},
],
model: {
attributes: [
'Position',
'TexCoord',
'Orientation',
],
collision: {},
file: 'sampledata/models/Planet/Planet.gltf',
name: 'Planet',
recenter: true,
scale: 0.5,
},
samplers: [
{
file: 'sampledata/models/Planet/Planet_Mat_baseColor.png',
name: 'Planet_Mat_baseColor',
pipeline_name: 'Planet_Mat_baseColor.png',
},
{
file: 'sampledata/models/Planet/Planet_Mat_normal.png',
name: 'Planet_Mat_normal',
params: {
usage_type: 'Normal',
},
pipeline_name: 'Planet_Mat_normal.png',
},
],
}
推荐阅读
- sql - Informatica PowerCenter 中的平面文件
- python - 如何在 Pytest 参数化功能中调用对象的属性
- java - jOOQ 与 java 15:org.jooq 中的接口 org.jooq.Record 和 java.lang 中的类 java.lang.Record 匹配
- css - 如何使用字体 svg 图标
- twitter-bootstrap - 如何添加相同高度的 Bootstrap 列?
- r - R split:重用向量中的第 i 个元素使拆分相等
- javascript - 在反应中使用treebeard动态添加孩子
- python - argv vs bash 扩展/命令替换/python
- pandas - scipy.optimize 是否有方程限制?
- javascript - axios:数据应该是字符串,Buffer或者Uint8Array