본문 바로가기
RealityKit & ARKit

RealityKit - 기본 구조와 기본 Object 생성

by ARpple 2023. 7. 24.
기본 구조와 기본 Object 생성하기

WWDC의 가장 기초적인 설명

 

 

Building Apps with RealityKit - WWDC19 - Videos - Apple Developer

Gain a practical understanding of RealityKit capabilities by developing a game using its easy-to-learn API. Learn the recommended...

developer.apple.com

ARView → Scene → Anchor → Entity의 구조

기초적인 AR 가상 객체 생성 흐름

  1. ARView를 생성한다 (Scene이 내부 속성{ 클래스 }에 존재함)
    • scene 내부에는 anchors가 인스턴스가 존재함
  2. anchor를 설정한다 ⇒ AnchorEntity라는 클래스를 생성
  3. Model (AR에서 볼 가상 오브젝트)를 생성한다.
  4. anchor에 Model을 추가한다.
  5. arView 내부 scene 내부 anchors에 생성한 anchor를 추가한다.
func makeUIView(context: Context) -> ARView {
        let arView = ARView(frame: .zero) // class 인스턴스
        let anchor = AnchorEntity(plane: .horizontal) // class 인스턴스
        let text = ModelEntity(mesh: MeshResource.generateText("Hello world!!",extrusionDepth: 0.1),
                               materials: [material])
        text.position = simd_make_float3(0.0, 0.2, 0.0)
        anchor.addChild(text)
        arView.scene.anchors.append(anchor)
        return arView
    }

기초 컴포넌트 정리

    1. ARView
 UIKit 혹은 SwiftUI에서 RealityKit(3D Render 화면과 카메라 접근)을 연결하기 위한 Wrapper 
  1. 3D Rendering 옵선을 설정하고, 플랫폼에 맞는 (아이폰, 아이패드) 상호작용 처리
  2. 주어진 뷰에서의 Entity 찾기
  3. 디버깅 시각화에 도움
주요 구성 속성들
      • scene: Scene → AR 객체들을 관리하는 컨테이너 Class instance
      • session: ARSession → 뷰 렌더링 설정하는 Class instance
      • environment: ARView.Environment → 뷰의 배경, 조명, 음향 속성을 관리하는 구조체 instance
      • cameraMode: Enum → 카메라를 켤지 말지 구성되어있는 열거형 instance
      • cameraTransform: Transform → 카메라의 각도나 배율 등의 정보를 getter 할 수 있는 instance
    1. Entity

RealityKit Scene에 포함되는 모든 요소들이 갖는 기본적인 컴포넌트 Unity의 GameObject와 비슷하다.
💡 ModelEntity와 AnchorEntity는 파생된 하위 클래스, 하지만 RealityKit 구조에선 상위 계층에 속함
  1. AnchorEntity
    • Scene에서 카메라가 인식한 현실의 타겟 (테이블, 바닥면)을 기준점으로 설정하게 만드는 컴포넌트
      => 이 기준점 아래에 다른 Entity들을 배치시킨다.
  2. ModelEntity
    • 3D 모델들을 RealityKit에 맞게 설정하게 도와주는 컴포넌트 (클래스)
주요 속성들
  • var model: ModelComponent? → 3D 모델링 객체와 관련된 Structure Instance
        ⇒ ModelComponent 내부의 주요 속성들
    • mesh: MeshResource
    • materials: [Material]
  • jointNames: [String] → Model이 갖고 있는 관절들의 이름들 (Getter)
  • jointTransforms: [Transform] → Model이 갖고 있는 관절들의 Transform들 정보 ⚠️ 변경가능
  • var collision: CollisionComponent? → 충돌을 감지하는데 도와주는 Structure Instance
  • var physicsBody: PhysicsBodyComponent? → 물리 동작을 정의하는 Structure Instance
    ⇒ 객체가 다른 객체와 상호작용하는 데 필요한 물리적 특성을 정의하는 데 사용
    ⇒ 물체의 질량, 모멘트, 속도 등을 설정
    • var physicsMotion: PhysicsMotionComponent? → 물리 움직임을 정의하는 Structure Instance
      ⇒ 사용자 입력에 따라 객체를 움직이게 하거나, 애니메이션과 상호작용해 운동을 조작하는 데 사용
  1. Mesh → 3D 모델의 실제 모델링 + 와이어프레임, 애니메이션(동작) 을 구성한 속성
    ⇒ 점성 (슬라임 같은 물리 속성을 갖는지 설정되어있음)
    ⇒ usdz 파일, obj파일 같은 것들
  2. Material → 3D 개체의 외관을 결정하는 속성
    • ⇒ 빛 반사율, 빛 투과율, 매트한 느낌, 금속 재질 등을 포함한다.
    • ⇒ 텍스쳐는 안에 포함되어 있는 구성요소 중 하나이다.
    • Textrue < Material
    • 나무 테이블을 만들려 할 때:
      • 텍스쳐는 나무의 패턴과 이미지
      • 머터리얼의 속성에 따라 유광으로 칠한 느낌을 줄 수 있다.

댓글