gpt4 book ai didi

swift - AR 与 iOS : putting a light in the scene makes everything black?

转载 作者:搜寻专家 更新时间:2023-10-31 08:29:54 26 4
gpt4 key购买 nike

好的,当我在 Swift/Xcode 中添加到我的 ARScene 时,我正在拼命地尝试在我的对象上实现这种温暖的照明 - 温暖的照明和周围的小发光灯:

enter image description here

需要说明的是,我不希望我添加到场景中的对象看起来像是属于周围的房间。我希望它们脱颖而出/看起来温暖而发光。ARKit 上的所有教程都教您如何模仿实际房间的照明。

Xcode 有几个照明选项,从相机收集的周围环境中提取,因为:

if let lightEstimate = session.currentFrame?.lightEstimate

我可以打印出暖度、强度等。而且我目前还设置了这些属性以匹配房间的光线:

sceneView.automaticallyUpdatesLighting = true
extension ARSCNView {

func setup() { //SCENE SETUP
antialiasingMode = .multisampling4X
autoenablesDefaultLighting = true
preferredFramesPerSecond = 60
contentScaleFactor = 1.3

if let camera = pointOfView?.camera {
camera.wantsHDR = true
camera.wantsExposureAdaptation = true
camera.exposureOffset = -1
camera.minimumExposure = -1
camera.maximumExposure = 3
}
}
}

我已经尝试提高对象纹理和所有内容的自发光,但没有任何效果。添加光只会使对象变黑/无颜色。

这里有什么问题吗?

最佳答案

要在 ARKit 中创建这种发光的红色 NEON 效果。您可以执行以下操作。

enter image description here

您需要创建一个 reactor.scnp(scenekit 粒子系统文件)并进行以下更改以创建发光的红色光晕。这应该与文件 spark.png 一起放在 playground 的 Resources 目录中

这些是从默认 react 器类型更改的设置。保留所有其他设置。

  1. 将图像动画颜色更改为红色/橙色/红色/黑色

  2. 速度因子 = 0.1

  3. 选中启用照明

  4. 发射器形状 = 球体

  5. 图片大小 = 0.5

  6. 图像强度 = 0.1

  7. 模拟速度因子 = 0.1

注意:下面的代码是我用于测试目的的 Playground 应用程序。您只需点击任意位置即可将 NEON 添加到场景中。您可以放置​​任意数量的 NEON 。

import ARKit
import SceneKit
import PlaygroundSupport
import SceneKit.ModelIO

class ViewController: NSObject {

var sceneView: ARSCNView
init(sceneView: ARSCNView) {
self.sceneView = sceneView

super.init()

self.setupWorldTracking()
self.sceneView.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(ViewController.handleTap(_:))))
}

private func setupWorldTracking() {
if ARWorldTrackingConfiguration.isSupported {
let configuration = ARWorldTrackingConfiguration()
configuration.planeDetection = .horizontal
configuration.isLightEstimationEnabled = true
self.sceneView.session.run(configuration, options: [])
}
}

@objc func handleTap(_ gesture: UITapGestureRecognizer) {
let results = self.sceneView.hitTest(gesture.location(in: gesture.view), types: ARHitTestResult.ResultType.featurePoint)
guard let result: ARHitTestResult = results.first else {
return
}
let cylinder = SCNCylinder(radius: 0.05, height: 1)
cylinder.firstMaterial?.emission.contents = UIColor.red
cylinder.firstMaterial?.emission.intensity = 1


let spotLight = SCNNode()
spotLight.light = SCNLight()
spotLight.scale = SCNVector3(1,1,1)
spotLight.light?.intensity = 1000
spotLight.castsShadow = true
spotLight.position = SCNVector3Zero
spotLight.light?.type = SCNLight.LightType.directional
spotLight.light?.color = UIColor.white

let particleSystem = SCNParticleSystem(named: "reactor", inDirectory: nil)
let systemNode = SCNNode()
systemNode.addParticleSystem(particleSystem!)


let node = SCNNode(geometry: cylinder)

let position = SCNVector3Make(result.worldTransform.columns.3.x, result.worldTransform.columns.3.y, result.worldTransform.columns.3.z)

systemNode.position = position
node.position = position

self.sceneView.scene.rootNode.addChildNode(spotLight)
self.sceneView.scene.rootNode.addChildNode(node)
self.sceneView.scene.rootNode.addChildNode(systemNode)
}
}

let sceneView = ARSCNView()

let viewController = ViewController(sceneView: sceneView)
sceneView.autoenablesDefaultLighting = false
PlaygroundPage.current.needsIndefiniteExecution = true
PlaygroundPage.current.liveView = viewController.sceneView

关于swift - AR 与 iOS : putting a light in the scene makes everything black?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47986542/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com