3D 게임을 만들고 앱에 3D 콘텐츠를 추가하고 애니메이션, 물리 시뮬레이션, 파티클 효과 및 사실적인 물리 기반 렌더링을 쉽게 추가할 수 있습니다.
class SCNScene SCNScene 클래스
표시 가능한 3D 씬을 구성하는 노드 계층 구조 및 전역 프로퍼티를 위한 컨테이너입니다.
class SCNView SCNView 클래스
3D SceneKit 콘텐츠를 표시하기 위한 뷰입니다.
class SCNNode SCNNode 클래스
지오메트리, 조명, 카메라 또는 기타 표시 가능한 콘텐츠를 첨부할 수 있는 3D 좌표 공간의 위치와 변환을 나타내는 씬 그래프의 구조적 요소입니다.
Organizing a Scene with Nodes 노드로 씬 구성하기 : 노드를 사용하여 씬의 구조를 정의합니다.
SceneKit은 콘텐츠를 노드의 계층적 트리 구조(씬 그래프라고도 함)로 구현합니다. 씬은 씬의 월드 좌표 공간을 정의하는 루트 노드와 보이는 콘텐츠로 월드를 채우는 다른 노드로 구성됩니다.
SceneKit은 아래 그림과 같이 기본적으로 뷰 방향이 음의 z축을 따르는 오른손 좌표계를 사용합니다.
SCN노드
지오메트리, 조명, 카메라 또는 기타 표시 가능한 콘텐츠를 첨부할 수 있는 3D 좌표 공간의 위치와 트랜스폼을 나타내는 장면 그래프의 구조적 요소입니다.
SCN노드 객체 자체는 해당 객체가 포함된 씬이 렌더링될 때 표시되는 콘텐츠가 없으며 부모 노드를 기준으로 좌표 공간 변환(위치, 방향, 배율)만 나타냅니다. 씬을 구성하려면 노드 계층 구조를 사용하여 구조를 만든 다음 조명, 카메라 및 지오메트리를 노드에 추가하여 표시되는 콘텐츠를 만듭니다.
노드는 씬의 구조를 결정합니다. SceneKit을 사용하여 프로그래밍 방식으로 노드 계층 구조를 만들거나, 3D 제작 툴을 사용하여 만든 파일에서 계층 구조를 로드하거나, 두 가지 방법을 결합할 수 있습니다
노드의 어태치먼트가 시각적 콘텐츠와 동작을 정의합니다.노드 계층 구조는 씬의 공간적, 논리적 구조를 결정하지만 보이는 콘텐츠는 결정하지 않습니다.
class SCNReferenceNodeSCNReferenceNode 클래스
별도의 씬 파일에서 로드할 콘텐츠의 플레이스홀더 역할을 하는 씬 그래프 노드입니다.
참조 노드(SCNReferenceNode) 에 콘텐츠를 로드하도록 지시하면 SceneKit은 참조된 파일(referenced scene file)을 로드하고 파일의 루트 노드의 자식(scene file’s root node)을 참조 노드의 자식(children of the reference node.)이 되게 합니다.
rootNode 루트 노드 : 씬 그래프의 루트 노드var rootNode: [SCNNode](https://developer.apple.com/documentation/scenekit/scnnode) { get }
모든 씬 콘텐츠(노드, 지오메트리 및 해당 머티리얼, 조명, 카메라 및 관련 오브젝트)는 하나의 공통 루트 노드가 있는 노드 계층 구조로 구성됩니다.
이어서 , SceneKit 의 핵심요소 세가지, SCNView, SCNScene 과 SCNNode에 대해 설명하는 부분이 이어집니다.
표시 가능한 3D 씬을 구성하는 노드 계층구조와 글로벌 프로퍼티를 위한 컨테이너입니다.
SceneKit으로 3D 콘텐츠를 표시하려면 시각적 요소를 함께 나타내는 노드 및 속성의 계층 구조가 포함된 장면을 만듭니다.
씬을 표시하려면 씬을 로드한 다음 SCNView의 씬 프로퍼티로 설정해야 합니다:
guard let myScene = SCNScene(named: "MyScene")
else { fatalError("Unable to load scene file.") }scnView.scene = myScene // Your app's SCNView
환경에 놓인 오브젝트와 관련하여 디바이스의 위치를 추적하는 구성입니다.
ARWorldTrackingConfiguration 클래스는 3개의 회전 축(롤, 피치, 요)과 3개의 이동 축(x, y, z 방향의 움직임)의 6자유도(6DOF)로 디바이스의 움직임을 추적합니다.
이러한 트래킹을 통해 몰입감 넘치는 AR 환경을 만들 수 있습니다: 사용자가 디바이스를 기울여 물체의 위나 아래를 보거나 디바이스를 움직여 물체의 측면과 뒷면을 보더라도 가상 물체는 현실 세계와 동일한 위치에 있는 것처럼 보일 수 있습니다.
후면 카메라를 사용하여 AR 환경을 표시하는 앱을 실행할때 해당 구성에 따라 세가지 옵션이 가능합니다.
월드 트래킹 세션이 카메라에 보이는 실제 장면의 요소를 인식하거나 상호 작용하는 방법
증강 현실 세션을 구성하는 방법에 대한 정보가 포함된 기본 객체입니다.
ARConfiguration은 AR 경험에서 구성할 수 있는 다양한 옵션에 대한 기본 클래스를 정의합니다. 앱에서 가상 콘텐츠와 라이브 카메라 이미지를 혼합하면 사용자는 가상 콘텐츠가 실제 세계의 일부인 것처럼 착각하게 됩니다.
구성의 프레임 시맨틱에 personSegmentationWithDepth 옵션을 추가합니다.
if let config = mySession.configuration as? ARWorldTrackingConfiguration { config.frameSemantics.insert(.personSegmentationWithDepth) // Run the configuration to effect a frame semantics change. mySession.run(config)}
장면에서 사람의 깊이와 관계없이 앱의 가상 콘텐츠에 사람이 겹쳐야 함을 나타내려면 대신 personSegmentation 프레임 시맨틱을 사용합니다. 이 옵션은 특히 그린 스크린 시나리오에 적합합니다.
3D SceneKit 콘텐츠를 표시하기 위한 뷰입니다.
macOS에서 SCNView는 NSView의 서브클래스입니다. iOS 및 tvOS에서 SCNView는 UIView의 서브클래스입니다. 두 운영 체제의 뷰 계층 구조의 일부인 SCNView 오브젝트는 앱의 사용자 인터페이스에서 SceneKit 콘텐츠를 위한 공간을 제공합니다. SceneKit 보기에 콘텐츠를 제공하려면 해당 씬 프로퍼티에 SCNScene 객체를 할당합니다.
SceneKit 뷰 작업에 대한 추가 중요 메서드 및 속성은 SCNSceneRenderer 프로토콜을 참조하십시오. (SCNRenderer 클래스를 사용하여 SceneKit 콘텐츠를 임의의 Metal 명령 대기열 또는 OpenGL 컨텍스트에 렌더링하거나 SCNLayer 클래스를 사용하여 macOS에서 코어 애니메이션 레이어로 렌더링할 수도 있습니다. SCNSceneRenderer 프로토콜은 세 가지 SceneKit 렌더링 클래스 모두에 공통된 기능을 정의합니다.)
var scene: SCNScene?
뷰에 표시할 장면입니다.
지오메트리, 조명, 카메라 또는 기타 표시 가능한 콘텐츠를 첨부할 수 있는 3D 좌표 공간의 위치와 트랜스폼을 나타내는 장면 그래프의 구조적 요소입니다.
SCN노드 오브젝트는 그 자체가 포함된 씬이 렌더링될 때 보이는 콘텐츠가 없으며, 부모 노드를 기준으로 좌표 공간 변환(위치, 방향 및 크기)만 나타냅니다. 씬을 구성하려면 노드 계층 구조를 사용하여 구조를 만든 다음 조명, 카메라 및 지오메트리를 노드에 추가하여 표시되는 콘텐츠를 만듭니다.
씬의 루트노드 오브젝트 rootNode 는 SceneKit에서 렌더링되는 월드의 좌표계를 정의합니다. 이 루트 노드에 추가하는 각 자식 노드는 자체 좌표계를 생성하며, 이 좌표계는 차례로 자식 노드에 상속됩니다. 노드의 위치, 회전 및 배율 속성 position, rotation, and scale 을 사용하여(또는 트랜스폼 속성 transform을 직접 사용하여) 좌표계 간의 변환을 결정합니다.
노드 계층 구조는 씬의 공간적, 논리적 구조를 결정하지만 보이는 콘텐츠는 결정하지 않습니다. 노드에 SCNGeometry SCNGeometry오브젝트를 첨부하여 씬에 2D 및 3D 오브젝트를 추가할 수 있습니다. (지오메트리는 차례로 모양을 결정하는 SCNMaterial SCNMaterial 오브젝트를 첨부합니다.)