如何在使用光线投射时重新着色模型的所有部件? [英] How to recolor all model's parts when using raycasting?

查看:18
本文介绍了如何在使用光线投射时重新着色模型的所有部件?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的arViewReality Composer中有一个fanfare.reality模型。我按entity(at:location)进行光线投射,并启用对象的ModelDebugOptionsComponent(visualizationMode: .lightingDiffuse)命中,这会使对象的外观变为灰色。然而,我发现只有旗帜本身变灰了,旗帜上的旗帜根本没有变化。

我通过LoadAsync()加载fan fare.reality并打印返回值,如下所示。原因是国旗、星星和旗帜本身被分成3个ModelEntity。在RealityKit中,raycast搜索CollisionComponent的实体。只能添加到ModelComponent的实体。

因此,我的问题是,当我在屏幕上点击模型(通过光线投射)时,如何才能将整个现实模型变为灰色(华丽+旗帜+星形)。

推荐答案

分离部件模型方法

您可以轻松检索所有3个模型。但您必须指定整个漫长的分层路径:

let scene = try! Experience.loadFanfare()

// Fanfare – .children[0].children[0]
let fanfare = scene.children[0] ..... children[0].children[0] as! ModelEntity
fanfare.model?.materials[0] = UnlitMaterial(color: .darkGray)
    
// Flag – .children[1].children[0]
let flag = scene.children[0] ..... children[1].children[0] as! ModelEntity
flag.model?.materials[0] = UnlitMaterial(color: .darkGray)

// Star – .children[2].children[0]
let star = scene.children[0] ..... children[2].children[0] as! ModelEntity
star.model?.materials[0] = UnlitMaterial(color: .darkGray)
.rcproject.reality.usdz文件中检索模型实体时,我看不到有太大区别。根据打印的图,所有三个模型实体位于同一层次结构的同一级别,它们是同一实体的后代。if statement中的条件可以设置为其最简单的形式-如果射线击中fanfare或(||)flag或(||)starcollision shape,则所有三个模型都必须重新着色。

单一模型方法

通过光线投射与3D模型交互的最佳解决方案是单模型方法。单一模型是没有单独零件的实体3D对象-所有零件都组合成一个完整的模型。单色模型的纹理在UV编辑器中始终为mapped。这种单一模型可以在Maya或Blender等3D创作应用程序中制作。


附注

所有经验丰富的AR开发人员都知道哇!AR体验不是关于代码,而是关于3D内容。你应该明白,如果你的3D模型由很多部分组成,就没有什么灵丹妙药可以提供简单的解决方案。使用代码时,制作精良的AR模型成功率为75%

这篇关于如何在使用光线投射时重新着色模型的所有部件?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆