如何在场景套件中显示金属质感

问题描述 投票:0回答:1

我是SceneKit中的超级傻瓜,我在SceneKit中的外观(金属质感)有问题,我使用此代码进行显示。

 let glassesFrame = contentNode!.childNode(withName: "Metallic_Part",
                                                            recursively: true)

        glassesFrame?.geometry?.firstMaterial?.lightingModel = .physicallyBased
         glassesFrame?.geometry?.firstMaterial?.metalness.contents = 0.8
         glassesFrame?.geometry?.firstMaterial?.roughness.contents = 0.2

但是问题是(金属度,粗糙度)的值会影响颜色的变暗(金属的值[greater,颜色的darker)。

这里是一个示例,用于进一步说明:

金属度:0.2粗糙度:0.8here is the result

金属度:0.8粗糙度:0.2here is the result

并且当我将“ 1”设置为金属度的值时,颜色变为黑色,here is the result

这是我使用的模型:Sketchfab中的模型:https://skfb.ly/6QVTQ

我如何使金属看起来自然(镜面般。)>这是完整的代码:

class BlendShapeCharacter: NSObject, VirtualContentController {

    var contentNode: SCNNode?

    private var originalJawY: Float = 0

    private lazy var jawNode = contentNode!


    private lazy var jawHeight: Float = {
        let (min, max) = jawNode.boundingBox
        return max.y - min.y
    }()

    func renderer(_ renderer: SCNSceneRenderer, nodeFor anchor: ARAnchor) -> SCNNode? {
        guard anchor is ARFaceAnchor else { return nil }

        contentNode = SCNReferenceNode(named: "Glasses")
        let glassesFrame = contentNode!.childNode(withName: "Metallic_Part",
                                                            recursively: true)

        glassesFrame?.geometry?.firstMaterial?.lightingModel = .physicallyBased
         glassesFrame?.geometry?.firstMaterial?.metalness.contents = 0.8
         glassesFrame?.geometry?.firstMaterial?.roughness.contents = 0.2


        let lens1 = contentNode!.childNode(withName: "Glass_Part",
                                                     recursively: true)

        let material = SCNMaterial()
        material.lightingModel = .phong
        material.diffuse.contents = UIColor(white: 0.2,
                                            alpha: 1)
        material.diffuse.intensity = 0.9
        material.specular.contents = UIColor(white: 1,
                                             alpha: 1)
        material.specular.intensity = 1.0
        material.reflective.contents = UIImage(named:"Models.scnassets/texture.png")
        material.reflective.intensity = 2.0
        material.transparencyMode = .dualLayer
        material.fresnelExponent = 2.2
        material.isDoubleSided = true
        material.blendMode = .alpha
        material.shininess = 100
        material.transparency.native = 0.4
        material.cullMode = .back

        lens1?.geometry?.firstMaterial = material

        originalJawY = jawNode.position.y
        return contentNode
    }

提前谢谢您

我是sceneKit的超级傻瓜,我在SceneKit中的外观(金属质感)有问题,我使用此代码进行显示。让GlassesFrame = contentNode!.childNode(withName:“ ...

xcode scenekit
1个回答
0
投票

environmentTexturing的值是否设置为environmentTexturingAREnvironmentTexturingManual

© www.soinside.com 2019 - 2024. All rights reserved.