ARKit에서 오클루전
오클루전이란?
오클루전이란 앞에 있는 물체가 뒤에 있는 물체를 숨겨 보이지 않게 하는 상태입니다.
현실 세계에서는 뒤에 있는 물체가 앞에 있는 물체에 숨기는 것은 당연합니다만, AR의 세계에서는 물체의 표시를 잘 컨트롤하지 않으면 전후 관계를 잘 표현할 수 없습니다.
다음은 오클루전의 예입니다.
나이언틱의 예
우선은 나이언틱 동영상입니다. 가상의 피카츄가 현실의 사람의 그림자에 숨어 있습니다.
htps: //같다. 베 / 7ZrmPTPgY3
테크 테크 테크 테크의 예
이 전 내가 테크 테크 테크 테크 을 외원전에서 사용했을 때 찍은 이하의 이미지도 오클루전 하고 있습니다.
ARKit에서 오클루전
ARKit에서도 평면에 관해서라면 렌더링을 고안하면 할 수 있습니다.
결정은 renderingOrder입니다.
renderingOrder
SCNNode의 매개 변수 renderingOrder를 만지면 오클루전이 가능합니다.
평면 검출에 대해서는, [iOS 11][ARKit] 평면 감지 정보 #WWDC2017 당의 기사를 읽어 주신 다음에, 다음과 같은 정해진 패턴의 planeAnchor 의 취득으로부터 평면의 Node를 두는 코드를 봐 갑시다.
extension ViewController: ARSCNViewDelegate {
func renderer(_ renderer: SCNSceneRenderer, didAdd node: SCNNode, for anchor: ARAnchor) {
guard let planeAnchor = anchor as? ARPlaneAnchor else {
return
}
let extent = planeAnchor.extent
let plane = SCNPlane(width: CGFloat(extent.x), height: CGFloat(extent.z))
let planeNode = SCNNode(geometry: plane)
planeNode.name = "arPlane"
planeNode.renderingOrder = -1
planeNode.eulerAngles.x = -.pi/2
node.addChildNode(planeNode)
}
}
주목해야 할 것은
planeNode.renderingOrder = -1
이렇게 하면 planeNode를 그리는 순서가 가장 먼저 됩니다. 왜냐하면 SCNNode의 renderingOrder의 기본값은 0이기 때문입니다.
0보다 -1 쪽이 작기 때문에 반드시 먼저 평면이 그려져, 그 결과, 이하의 빨간색 BoxNode는 평면과 겹칠 때에 숨겨집니다.
따로 -1이 아니어도 좋지만, -1을 사용하면 다른 Node에는 0이 들어 있으므로 빠르네요.
이 renderingOrder를 제어하면 예를 들어 SceneKit의 SCNNode 렌더링 순서로 어디서나 문을 표현합니다.과 같은 것도 가능합니다.
요약
ARKit에서도 평면에 관해서라면 렌더링을 고안하면 할 수 있습니다.
결정은 renderingOrder입니다.
renderingOrder
SCNNode의 매개 변수 renderingOrder를 만지면 오클루전이 가능합니다.
평면 검출에 대해서는, [iOS 11][ARKit] 평면 감지 정보 #WWDC2017 당의 기사를 읽어 주신 다음에, 다음과 같은 정해진 패턴의 planeAnchor 의 취득으로부터 평면의 Node를 두는 코드를 봐 갑시다.
extension ViewController: ARSCNViewDelegate {
func renderer(_ renderer: SCNSceneRenderer, didAdd node: SCNNode, for anchor: ARAnchor) {
guard let planeAnchor = anchor as? ARPlaneAnchor else {
return
}
let extent = planeAnchor.extent
let plane = SCNPlane(width: CGFloat(extent.x), height: CGFloat(extent.z))
let planeNode = SCNNode(geometry: plane)
planeNode.name = "arPlane"
planeNode.renderingOrder = -1
planeNode.eulerAngles.x = -.pi/2
node.addChildNode(planeNode)
}
}
주목해야 할 것은
planeNode.renderingOrder = -1
이렇게 하면 planeNode를 그리는 순서가 가장 먼저 됩니다. 왜냐하면 SCNNode의 renderingOrder의 기본값은 0이기 때문입니다.
0보다 -1 쪽이 작기 때문에 반드시 먼저 평면이 그려져, 그 결과, 이하의 빨간색 BoxNode는 평면과 겹칠 때에 숨겨집니다.
따로 -1이 아니어도 좋지만, -1을 사용하면 다른 Node에는 0이 들어 있으므로 빠르네요.
이 renderingOrder를 제어하면 예를 들어 SceneKit의 SCNNode 렌더링 순서로 어디서나 문을 표현합니다.과 같은 것도 가능합니다.
요약
Reference
이 문제에 관하여(ARKit에서 오클루전), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/kboy/items/cc069ded466c414a1b80텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)