Problem with texture

我已经为visionOS创建了一个应用程序,并在Reality Composer Pro中打开了Packages/RealityKitContent/package个文件. 我点击右上角的+按钮,将Material Library/Generic/Metal/ScratchedMetallicPaint种material 添加到默认球体中. 我可以看到右下角的金属纹理.

然后,每当用户在选取器Picker中 Select 新的material 时,我在我的代码中使用如下material .挑库后的物料newValue的值为ScratchedMetallicPaint

 var dynamicMateriala = try await ShaderGraphMaterial(named: "/Root/\(newValue)",
                           from: "Scene.usda",
                           in: realityKitContentBundle)
                            
// setting UV scale parameter did not help 
 try! dynamicMateriala.setParameter(name: "UV_Scale", value:  .simd2Float(SIMD2<Float>(repeating: 20)))
viewModel.dynamicMaterial = dynamicMateriala

在RealityView更新关闭中:

let font = UIFont(name: "Arial", size: 0.07)
let resource: MeshResource = .generateText(message, extrusionDepth: 0.01, font: font)

if viewModel.dynamicMaterial != nil {
        let fontEntity = ModelEntity(mesh: resource, materials: [viewModel.dynamicMaterial!])
 }

Problem:个 ViewModel是ObservableObject并正确传递material .问题是,从Reality Compose Pro传递的material 只有color个基础,纹理是not个.

我找到了类似问题的答案:similar,但不确定如何解决.

基于这个答案,我try 了以下方法,即我们需要首先将material 分配给RealityComposerPro中的实体,但甚至第一次打印都没有记录下来.

enter image description here

 if let scene = try? await Entity(named: "Root", in: realityKitContentBundle){
                            
                            print("In Root")
                            if let box = scene.findEntity(named: "Cube") as? ModelEntity {
                                print("In Cube")
                                
                                let materials = box.model?.materials
                                print("In Materials \(materials)")
                              
                            }
                        }

Does anybody know what might be the problem?
Thanks!

推荐答案

在MaterialX中控制参数

问题在于参数UV_Scale的值不正确-该值越大(代码中的值为20),material 的颗粒越细,也就是说,越难区分其纹理(无论是汽车油漆还是皮革).若要查看纹理细节,应减小UV比例值(默认为1.0),而不是增加该值.

import SwiftUI
import RealityKit
import RealityKitContent

struct ContentView: View {
    var body: some View {
        RealityView { content in
            var matX = try! await ShaderGraphMaterial(named: "/Root/Leather", 
                                                      from: "Scene.usda",
                                                      in: realityKitContentBundle)
                                 
            try! matX.setParameter(name: "UV_Scale",
                                  value: .simd2Float(.init(x: 0.7, y: 0.7)))
            
            let text = ModelEntity(mesh: .generateText("MaterialX",
                         extrusionDepth: 0,
                                   font: .systemFont(ofSize: 0.5, weight: .black)))

            text.model?.materials = [matX]
            content.add(text)
        }
    }
}

enter image description here

Swift相关问答推荐

如何使用RxSwift根据数据数绘制UICollectionView单元格

是否有一个Kotlin等价的Swift s @ AddendableReport注释'

如何取消正在视图修改器中运行的任务

更改正在进行的异步任务的完成(SWIFT并发)(&q;)?

按变换zoom 在UIView中不起作用

通常从数组调用的SWIFT静态协议函数

从SwiftUI使用UIPageView时,同一页面连续显示两次的问题

调度组是否阻止iOS中的主线程?

在SwiftUI中如何预览嵌套的ScrollView,以避免触发可刷新修饰符

@Binding 在@StateObject 和 View 上被发布了两次?

如何打印出此 struct 中的数据?

SwiftUI Preview 不适用于 Core Data

临时添加到视图层次 struct 后,Weak view引用不会被释放

Xcode 13.3 将函数调用更改为属性访问

如何快速截取 UIView 的屏幕截图?

快速在 LLDB 中使用 po

Swift:如何从函数返回类类型

如何在 Swift 中使用 Crashlytics 登录?

如何在 SwiftUI Segmented Picker 中更改选定的段 colored颜色

Switch 语句中的字符串:String不符合协议IntervalType