View in English

  • 메뉴 열기 메뉴 닫기
  • Apple Developer
검색
검색 닫기
  • Apple Developer
  • 뉴스
  • 둘러보기
  • 디자인
  • 개발
  • 배포
  • 지원
  • 계정
페이지에서만 검색

빠른 링크

5 빠른 링크

비디오

메뉴 열기 메뉴 닫기
  • 컬렉션
  • 주제
  • 전체 비디오
  • 소개

더 많은 비디오

  • 소개
  • 요약
  • 자막 전문
  • 코드
  • SceneKit 프로젝트를 RealityKit으로 가져오기

    SceneKit 지원 중단을 이해하고 Apple에서 권장하는 높은 수준의 3D 엔진인 RealityKit으로 3D 프로젝트를 전환하는 방법을 알아보세요. SceneKit 지원 중단이 프로젝트에 어떤 의미를 갖는지 명확히 설명하고, 두 엔진의 핵심 개념을 비교하며, 샘플 SceneKit 게임을 RealityKit으로 포팅하는 방법을 보여드립니다. 또한 지원되는 모든 플랫폼 전반에서 앱 및 게임으로 놀라운 3D 경험을 만드는 데 도움이 되는 RealityKit의 잠재력을 살펴보겠습니다.

    챕터

    • 0:00 - 시작
    • 5:03 - 핵심 차이점
    • 8:59 - 애셋 변환
    • 11:57 - 장면 구성
    • 15:21 - 애니메이션
    • 16:58 - 조명
    • 18:37 - 오디오
    • 21:19 - 시각 효과

    리소스

    • Bringing your SceneKit projects to RealityKit
      • HD 비디오
      • SD 비디오

    관련 비디오

    WWDC25

    • RealityKit의 새로운 기능

    WWDC24

    • Reality Composer Pro에서 대화식 3D 콘텐츠 만들기
    • RealityKit 오디오로 공간 컴퓨팅 앱 향상하기

    WWDC23

    • Reality Composer Pro 알아보기
  • 비디오 검색…

    오늘 세션에 오신 것을 환영합니다 저는 Apple 소프트웨어 엔지니어 Max Cobb입니다 세션을 시작하기에 앞서 과거를 잠깐 돌아볼까요 SceneKit 개발자라면 몇 년 전 Apple에서 공개한 재미있고 멋진 게임을 아실 수도 있을 텐데요 이 프로젝트에서는 Max라는 레서판다가 화산 지대에서 친구들을 구하기 위해 퍼즐을 풀고 적과 싸웁니다 이 샘플은 SceneKit이라는 프레임워크로 빌드되었습니다 개발자가 타사 게임 엔진 전체로 번들을 늘릴 필요 없이 네이티브 3D앱을 만들 수 있는 프레임워크입니다 SceneKit은 오랫동안 사용되었죠 OS X Mountain Lion 때부터, 즉 13년 전부터요 이후 Apple 개발자 에코시스템은 크게 변화했습니다 새 코딩 패러다임, 새 하드웨어, 새 플랫폼 등 앱을 빌드하고 앱과 상호작용하는 방식에 큰 변화가 있었습니다 SceneKit은 당시 매우 합리적인 아키텍처로 설계되었습니다 그러나 에코시스템이 변화하며 기존 3D 앱을 대대적으로 변경하지 않고 SceneKit을 최신으로 유지하기가 어려워졌습니다 그래서 올해 Apple은 공식적으로 모든 플랫폼에서 SceneKit 지원을 중단합니다

    하지만 기존 프로젝트에 어떤 의미일까요? 앱이 여전히 작동할까요? 코드를 다시 작성해야 할까요? 대체 제품은 무엇일까요? 지원 중단이 SceneKit 개발자에게 어떤 의미인지 살펴보겠습니다 첫째, 앱 코드를 다시 작성할 필요는 전혀 없습니다 소프트 지원 중단이므로 SceneKit을 사용하는 기존 앱은 계속 작동합니다 하지만 새 앱이나 대대적 업데이트를 계획한다면 SceneKit은 권장되지 않습니다

    둘째, SceneKit은 이제 유지 관리 모드로 전환됩니다 Apple은 심각한 버그만 수정하며 앞으로 새 기능 또는 최적화가 나오지 않습니다 현재 SceneKit의 하드 지원 중단 계획은 없습니다 변동이 있으면 Apple에서 개발자에게 충분히 통지합니다

    다만 Apple의 첨단 기술과 업계를 선도하는 하드웨어 및 소프트웨어 조합을 사용하려면 최고의 옵션은 RealityKit입니다

    RealityKit은 현대적인 범용 고수준 3D 엔진입니다 강력하면서도 접근하기 쉬워 산업 표준을 활용하고 아름답고 사실적인 렌더링을 만들 수 있습니다 앱을 빛내 주는 다양한 고급 기능이 있죠 버튼 하나만 탭하면 3D 모델을 미리 볼 수 있는 Mac의 Quick Look 등 여러 타사 앱과 시스템 기능을 구동하는 기술입니다 iOS 26의 새로운 App Store 태그는 앱을 더 쉽게 접할 수 있도록 하는 큰 변화 중 하나입니다 RealityKit으로 렌더링된 스타일화 3D 아이콘이 있죠 이것은 App Store에서 훌륭한 3D 그래픽 태그가 지정된 게임 목록을 표시한 예입니다 iOS의 새 기능인 Swift Charts는 RealityKit을 사용해 데이터 시각화에 세 번째 차원을 더합니다

    RealityKit은 visionOS에서 그저 사용되는 것이 아니라 이 플랫폼의 중추입니다 visionOS의 모든 기능은 RealityKit을 활용합니다 앱의 버튼과 이를 포함하는 윈도우 등이 예입니다 RealityKit을 통해 실제 환경에서 앱 콘텐츠의 생동감이 높아집니다

    RealityKit은 또한 SwiftUI를 전면에 두므로 SwiftUI 개발자가 편안하게 사용할 수 있습니다 visionOS, iOS, macOS, iPadOS에서 지원되며 올해는 신규 플랫폼 tvOS에서도 RealityKit이 지원되어 RealityKit으로 빌드된 앱과 기타 콘텐츠의 목적지가 새로 등장하죠 올해도 이 프레임워크는 흥미롭고 새로운 고급 기능으로 가득합니다 자세한 내용은 Lawrence Wong의 “RealityKit의 새로운 기능” 세션을 확인하세요 오늘 세션에서는 SceneKit과 비교해 RealityKit이 어떻게 작동하는지 안내하겠습니다 차이점, 새로운 가능성과 SceneKit을 뒤로하고 새롭게 시작하는 방법을 소개합니다 또 저는 제 게임을 더 현대화해 흥미로운 새 기능과 고려 중인 플랫폼에 대비하고자 합니다 세션을 진행하며 제가 취한 주요 단계를 설명하고 이 재미있는 SceneKit 게임을 RealityKit으로 이식합니다 이 프로젝트의 전체 샘플은 다운로드하여 살펴볼 수 있습니다 주제는 이러합니다 먼저 두 렌더링 엔진의 개념적 차이점과 상호작용 방법을 설명합니다 다음으로, 멋진 애셋이 없는 3D 게임은 없죠 기존 SceneKit 애셋을 원하는 RealityKit용 형식으로 변환하는 방법을 살펴봅니다 RealityKit 장면을 구성할 수 있는 도구를 소개하고 애니메이션부터 시작해 SceneKit과 RealityKit의 기능을 나란히 비교합니다 동적 조명, 몰입감과 개성, 맞춤형 오디오를 추가해 장면에 세련된 느낌을 연출하고 입자 후처리 등 시각적 효과로 멋지게 완성합니다 SceneKit에서 RealityKit으로 게임을 이식하기 위한 모든 것이죠 그럼 시작하겠습니다 개념 면에서 네 가지 핵심 영역에 집중하겠습니다 바로 아키텍처, 좌표계, 애셋, 보기입니다 아키텍처부터 보면 SceneKit은 노드 기반입니다 즉 장면의 모든 객체는 노드이며 노드에는 미리 정의된 동작이 속성의 형태로 존재합니다

    노드별로 기능에 대한 속성이 있고 지오메트리, 애니메이션, 오디오, 물리, 조명 등입니다

    예를 들어 빈 노드를 만들면 지오메트리나 특별한 속성 없이 상위 항목의 원점에 위치합니다

    게임에서 Max를 렌더링하려면 모델을 노드의 지오메트리 속성에 할당할 수 있습니다

    Max가 장면을 돌아다닐 때 앱은 노드에 애니메이션 플레이어를 할당하고 재생합니다

    플레이어가 듣는 발소리는 오디오 플레이어에서 나오는데 역시 같은 노드에 할당됩니다

    이것이 노드 기반 아키텍처의 작동 방식입니다 모든 것이 노드와 그 속성을 중심으로 움직입니다 반면 RealityKit은 엔티티 컴포넌트 시스템이라는 디자인 패턴을 사용하며 줄여서 ECS라고 합니다 즉 장면의 모든 객체는 엔티티이며 컴포넌트를 연결해 객체의 행동을 수정합니다 RealityKit의 모든 동작은 컴포넌트입니다

    변형부터 물리, 입자, 포털 등 고급 동작까지 RealityKit의 발전에 따라 컴포넌트 목록이 성장합니다 올해의 새로운 컴포넌트는 이미지 표현과 제스처 컴포넌트죠 지금까지 SceneKit 앱을 RealityKit으로 이식할 때 유의할 아키텍처상 차이점을 알아보았습니다 다음은 쉬운 내용입니다 새 렌더링 엔진을 사용할 때는 반드시 좌표계를 이해해야 하는데요

    좌표계는 SceneKit과 RealityKit 간에 쉽게 변환됩니다 서로 동일하니까요 두 시스템 모두 x축은 오른쪽을 가리키고 y축은 위쪽을 가리키며 z는 카메라를 직접 향합니다

    애셋의 경우 SceneKit은 허용하는 모델 형식이 유연하며 엔진은 이를 SCN 파일로 일련화합니다 편리하지만 업계 전반의 통합 표준은 아닙니다 대부분의 형식은 독점적이며 기능 지원이 서로 달라 자산 파이프라인에 복잡성을 더합니다

    RealityKit은 USD(Universal Scene Description)라는 오픈 산업 표준에 맞춰 설계되었습니다

    Pixar가 2012년에 도입한 형식으로 데이터 교환, 협업 등 애셋 생성 파이프라인의 몇몇 어려움을 해결하는 것이 목표였습니다 모든 플랫폼에서 Apple의 표준 선택지에 해당합니다 제 게임을 위해 일부 SCN 파일을 USD로 변환해야 합니다 잠시 후 세부 사항을 살펴보겠습니다 그 전에 제가 강조하고 싶은 마지막 핵심 차이점은 보기입니다 보기는 앱 사용자 인터페이스의 부분을 나타내는 기본 구성 요소입니다 SceneKit와 RealityKit의 경우 모두 3D 콘텐츠를 렌더링하는 뷰포트입니다

    SceneKit에서는 SCNView로 콘텐츠를 렌더링할 수 있습니다 SwiftUI를 사용하면 SceneView고요 ARSCNView도 있는데 ARKit으로 실제 세계에서 가상 객체를 렌더링할 수 있습니다 RealityKit에서는 경로가 간단한데 콘텐츠가 RealityView를 통해 렌더링됩니다 RealityView는 철저히 SwiftUI에서 익숙한 편의성을 위해 설계되었습니다 이 보기 하나로 실제 세계에서 완전 가상 장면을 렌더링하거나 객체를 배치할 수 있습니다 지원되는 모든 Apple 플랫폼에서 코드 변경 없이 이 콘텐츠가 배포되고 조정되며 visionOS에서 자동으로 입체 렌더링까지 수행합니다 이렇게 RealityKit으로 전환할 때 유의할 주요 핵심 개념을 살펴보았습니다 아키텍처, 좌표계, 애셋 지원, 보기였죠 다음으로, 훌륭한 게임이라면 훌륭한 애셋이 있어야 합니다 현재 제 게임에 무엇이 있는지 보겠습니다 아트 애셋 카탈로그 안에 3D 모델 컬렉션이 있습니다 모델은 SCN 파일 형식입니다 SceneKit 프로젝트에 적합하지만 이 모든 애셋을 USD로 변환해야 합니다 RealityKit에서 사용할 수 있게요 몇 가지 옵션을 보여 드리겠습니다 모델이 원래 형식이라면 그것이 가장 좋은 선택지입니다 디지털 콘텐츠 생성 도구(DCC)는 대개 USD를 문제없이 지원합니다 저는 Blender를 사용하므로 애셋을 이 형식으로 내보내면 되죠

    원본 파일이 없다면 기존 SCN 애셋을 USD로 바로 변환하는 데 다른 옵션이 있습니다 아마도 가장 쉬운 방법 한 가지는 Xcode에 있습니다 애셋을 선택해야 하는데 enemy1을 선택하겠습니다 그런 다음 File(파일), Export...(내보내기...)의 Export(내보내기) 옵션에서 Universal Scene Description Package를 선택합니다 압축된 USD 파일 형식입니다

    이 방법으로 내보낸 결과는 애셋마다 다를 수 있는데 제 게임에 있는 대부분의 모델에는 잘 작동합니다 별도의 SCN 파일에 애니메이션이 있을 수도 있죠 SceneKit에서는 흔합니다 예를 들어 제 SceneKit 게임에서 주인공의 걷기, 점프, 회전 같은 애니메이션은 각각 별도의 파일에 있고 지오메트리가 없습니다 이를 USD로 내보내고 지오메트리에 다시 적용하려면 어떻게 할까요? 다행히 Apple은 Xcode 26과 함께 제공되는 CLI를 업데이트했습니다 이 과정을 돕는 SCN 도구죠 사용 방법을 보여 드리겠습니다 xcrun scntool을 입력해 SCN 도구를 호출할 수 있습니다

    사용 가능한 옵션 목록이 표시되죠 변환하려면 xcrun scntool --convert를 입력해 max.scn 파일을 지정합니다 출력 유형은 --format usdz고요 이렇게 앞서 Xcode에서처럼 SCN 파일을 USD로 변환할 수 있습니다 애니메이션을 추가하려면 내보낼 각 SCN 애니메이션 파일에 --append-animation을 사용합니다 여기서는 max_spin이죠

    그리고 바탕 화면에 저장합니다

    변환된 파일을 볼까요

    좋습니다, 지오메트리에 USD 형식의 애니메이션 정보가 있네요 모든 애셋에 이 작업을 수행한 후 선호하는 작업 흐름에 맞는 방식으로 정리했습니다 이제 게임을 다시 합쳐 보겠습니다 다음 주제인 장면 구성이 관련 내용입니다 SceneKit 버전에서는 Xcode의 SceneKit 편집기로 모든 항목을 합칠 수 있습니다 RealityKit에도 이 작업을 위한 도구가 있습니다 바로 Reality Composer Pro입니다 Reality Composer Pro는 Xcode와 Blender, Maya 등 제가 원하는 DCC 사이에 있습니다 장면을 구성하고 엔티티에 컴포넌트를 추가하며 셰이더를 생성 및 수정하고 Xcode용 장면을 준비하는 데 사용할 수 있습니다 새로 생성한 모든 USD 애셋을 가져와 게임을 한데 합칠 수 있습니다 Reality Composer Pro는 Xcode와 함께 제공되는데 열어 보겠습니다

    PyroPanda라는 프로젝트를 만듭니다

    Reality Composer Pro에 콘텐츠 없는 기본 장면이 생성되죠 다음으로 새로 변환된 애셋을 프로젝트로 드래그합니다

    애셋을 장면에 추가하려면 마우스 오른쪽 버튼으로 Add to Scene(장면에 추가)을 선택하거나

    프로젝트 브라우저에서 Max 같은 애셋을 드래그해 뷰포트로 직접 가져옵니다

    이후 엔티티 재배치는 간단합니다 이 도구로 Max를 게임의 시작점에 놓을 수 있습니다 사실상 그렇죠 Reality Composer Pro는 장면의 시각적 구성에 유용한 도구입니다 머티리얼, 셰이더, 입자, 조명 등을 편집할 수 있습니다 Reality Composer Pro가 디지털 콘텐츠 생성 도구와 Xcode 사이에 있다고 말씀드렸죠? 이제 콘텐츠를 앱에 가져와야 합니다 이것이 다음 작업입니다 Reality Composer Pro 프로젝트는 Swift 패키지입니다 Xcode에서 로컬 종속성으로 추가할 수 있는데 여기 프로젝트 패키지 종속성으로 가서 Add Local...(로컬 추가) 클릭 후

    대상으로 앱을 선택합니다

    콘텐츠 보기 Swift 파일에서 RealityKit 및 새 패키지 PyroPanda를 가져와야 합니다 여기 상단에서요

    ContentView에서 RealityView를 추가하겠습니다

    다음으로 장면을 엔티티로 로드하여 패키지의 번들에서 왔음을 지정해야 합니다

    마지막으로 RealityView에 새 엔티티를 추가합니다

    결과 확인차 카메라 컨트롤도 추가하겠습니다

    앞서 Reality Composer Pro로 장면을 빌드했는데요 완전히 구성된 결과는 이렇습니다 나머지 모델을 추가하고 텍스처를 할당했으며 용암, 식물, 적에 대한 동적 셰이더를 생성해 화산 지대 환경에 한층 더 개성을 더해 주었습니다 전체 샘플 코드를 확인해 이 장면의 각 부분이 빌드된 방식을 검토할 수 있습니다 Reality Composer Pro로 할 수 있는 작업은 많습니다 자세한 내용은 이전 WWDC 중 이 두 세션을 확인해 보세요 점점 완성되어 가는군요 이제 애니메이션으로 Max에게 생동감을 불어넣겠습니다 앞서 Max를 변환할 때 애니메이션도 추가했죠 USD 파일에 애니메이션이 있으면 RealityKit이 AnimationLibraryComponent에서 노출합니다 따라서 엔티티에서 애니메이션 접근 및 재생이 쉽습니다 Reality Composer Pro에서 단일 USD 파일 “Max”의 다양한

    애니메이션을 모두 참조합니다 인스펙터에 모든 애니메이션에 대한 참조가 표시되고요

    이 컴포넌트의 지정된 이름으로 각 애니메이션을 트리거할 수 있죠

    SceneKit 버전에서는 이렇게 회전 애니메이션을 재생했습니다 먼저 장면에서 Max_rootNode를 찾고 spinAnimation을 별도 로드했고요 그런 다음 애니메이션 장면을 지나 SCN 애니메이션 플레이어를 찾고 이에 대한 참조를 저장했습니다 참조 “spin”으로 Max에 animationPlayer를 추가하고 노드에서 애니메이션을 재생했죠 RealityKit에서 AnimationLibraryComponent를 통해 애니메이션에 접근하면 매우 편리합니다 우선 이름인 “Max”로 Max 엔티티를 찾습니다 Max의 컴포넌트 세트에서 AnimationLibraryComponent를 찾아 원하는 애니메이션을 이름으로 선택합니다 마지막으로 엔티티에서 재생하죠 Max가 장면에서 움직일 때 완성된 앱은 움직임을 표현하는 다양한 애니메이션을 재생합니다 모두 어떻게 연결되는지 앱의 소스 코드를 확인해 보세요 장면에 사실감과 분위기를 더해 주는 요소는 조명입니다 잘 적용하면 밤과 낮의 차이가 날 수 있습니다 앱의 조명은 추가 코드 없이 Reality Composer Pro로 완벽히 구현할 수 있습니다 어떤 모습인지 보겠습니다 엔티티 계층 구조 하단의 이 삽입 아이콘을 탭하고 방향 조명을 선택해 조명을 추가할 수 있습니다

    방향 조명 컴포넌트만 있는 빈 엔티티입니다 이 조명 유형의 경우 장면의 다른 엔티티를 비추는 방식은 방향에 따라서만 달라지죠

    잘 보이도록 여기 배치하고 x축을 중심으로 회전해 보고요

    조명은 좋지만 뭔가 빠졌습니다 그림자가 없군요! 컴포넌트 목록에서 이 상자를 선택해 방향 조명 그림자 컴포넌트를 추가할 수도 있습니다

    시작 지점에서 이제 지형과 Max가 장면의 나머지 부분에 그림자를 드리우는 것을 볼 수 있습니다 코드로 동일한 작업을 수행할 때도 매우 유사합니다 SceneKit에서는 SCNLight를 만들고 유형을 directional로 설정하고 castShadow를 true로 할당합니다 새 노드를 만들고 노드의 조명 속성에 조명을 할당합니다

    RealityKit에서는 컴포넌트 두 개가 있는 엔티티를 만듭니다 방향 조명 컴포넌트와 방향 조명 그림자 컴포넌트입니다 방향 조명은 RealityKit에서 사용할 수 있는 조명 옵션입니다 포인트 조명, 스포트라이트, 이미지 기반 조명도 있는데 텍스처를 사용해 장면을 밝힙니다 제 게임이 이제 시각적으로 더 역동적으로 보입니다 다음으로 분위기를 살리기 위해 청각 요소를 추가하겠습니다 장면에서 계속 반복되는 주변 오디오 트랙을 살펴보면 SceneKit 프로젝트에서 먼저 주변 오디오 파일을 오디오 소스로 로드합니다 오디오 소스의 속성을 수정해 재생 방식을 변경할 수 있는데요 여기서는 반복되어야 하고 장면이나 공간의 위치와 무관해야 합니다 즉 메인 카메라와 소스 노드 간의 거리와 관계없이 오디오 재생 볼륨이 유지되어야 합니다 마지막으로 지형 노드에 오디오 플레이어를 추가해 재생을 시작합니다 RealityKit에서 애니메이션 접근 때처럼 컴포넌트를 통해 오디오 파일에 접근할 수 있습니다 이번 컴포넌트는 AudioLibraryComponent라고 합니다 앱의 런타임 대신 Reality Composer Pro에서 오디오 재생을 완전히 구성할 수 있습니다 어떤 모습인지 보겠습니다 이미 지형 엔티티에 AudioLibraryComponent를 연결했으며 주변 오디오 파일에 대한 참조가 있습니다 재생이 특정 소스에서 나오는 것처럼 들리지 않도록 동일한 엔티티에 주변 오디오 컴포넌트를 추가할 수 있습니다

    이 오디오 리소스는 매우 길며 RealityKit의 기본 동작은 런타임에 전체 트랙을 메모리에 미리 로드하는 것입니다 동작을 변경해 오디오 리소스를 재생과 동시에 스트리밍할 수 있죠

    트랙이 끝나면 처음부터 다시 재생되어야 하므로 Loop(반복) 체크박스를 선택합니다

    이제 모두 연결되어 오디오를 RealityKit에서 재생할 수 있고 방법은 두 가지입니다 하나는 AudioLibraryComponent를 통한 방법입니다

    지형의 컴포넌트 세트에서 AudioLibraryComponent를 가져와서 이름으로 주변 audioResource를 참조하고 동일한 지형 엔티티에서 다시 재생하는 것입니다 Reality Composer Pro로 추가한 설정을 RealityKit이 확인하고 자동으로 반복하여 주변 트랙으로 오디오를 스트리밍합니다 또는 PlayAudioAction이라는 내장 엔티티 동작으로 약간 요령을 쓸 수 있습니다

    이 방식에서 PlayAudioAction은 대상 엔티티의 AudioLibraryComponent를 보고 지정된 오디오 파일을 찾습니다

    이 동작을 애니메이션으로 변환해 동일한 지형 엔티티에서 재생하죠

    엔티티 작업은 앱의 실제 코드를 최소화하는데 매우 유용합니다

    저는 게임의 다양한 이벤트에 이 동작과 기타 동작을 사용합니다 예를 들어 주인공이 점프하거나 공격할 때 말이죠

    이 세션에서 다룰 마지막 단계로 제 게임에 포함된 시각적 효과를 살펴보겠습니다 시각적 효과는 3D 장면을 그저 정확한 경험에서 진정 감동적인 경험으로 바꿀 수 있습니다 입자부터 보면 Xcode의 SceneKit 편집기에서 바로 원래 게임에 매우 멋진 입자 효과를 연출했습니다 이러한 입자는 SCN 입자 파일로 저장됩니다 이 파일을 RealityKit과 호환되는 형태로 직접 변환하는 도구는 없지만 Reality Composer Pro를 통해 매우 비슷한 설정으로 입자 효과를 만들 수 있습니다 Reality Composer Pro로 가서 입자를 어떤 식으로 편집하는지 보겠습니다 저는 입자를 별도의 USD 파일로 보관하는 편입니다 Reality Composer Pro의 여기를 클릭해 새 파일을 추가할 수 있죠 volcano_smoke라고 하겠습니다

    이 파일의 루트 엔티티에 입자 에미터 컴포넌트를 추가합니다

    컴포넌트 위의 Play(재생) 버튼을 누르면 기본 입자가 나타나기 시작합니다

    선택할 수 있는 프리셋이 있는데 저는 Impact를 좋아합니다

    이 입자 프리셋은 연기에 적합한 텍스처라 이번 효과의 시작점으로 좋겠군요 SceneKit을 사용했다면 이러한 설정이 익숙할 수 있습니다 차이는 좀 있지만요

    Reality Composer Pro의 설정을 SceneKit의 원래 게임 입자 설정과 비교해 SceneKit 버전과 비슷한 RealityKit 화산 연기 효과를 만들었습니다

    완성되었으니 메인 장면으로 드래그해 다른 모델들 사이에서 어떻게 보이는지 확인해 보죠

    좋아요, 바로 제가 원하던 모습입니다 마지막 단계는 후처리입니다 렌더링한 출력을 앱에 올리기 전에 최종 확인해 마무리 작업을 하는 단계입니다

    원래 게임에서는 카메라에 강한 블룸 효과가 있어 밝은 조명이 장면의 나머지 부분에 스며들면서 부드럽고 환한 빛이 더해져 환상적인 분위기가 강화되었습니다

    장면의 활성 카메라에 있는 속성 몇 가지를 수정한 결과 가능했죠 편리하기는 하지만 개발자, 특히 게임 개발자는 흔히 이러한 효과를 철저히 통제하고자 합니다 성능과 예술적 선호도 면에서요

    하지만 RealityKit은 어떨까요?

    해당 효과를 내기 위한 간단한 속성은 의도적으로 RealityKit에서는 사용할 수 없지만 올해부터 대신 iOS, iPadOS, macOS, tvOS에서 RealityViews에 후처리 효과를 추가할 수 있습니다

    약간의 설정이 필요하지만 모든 Metal 셰이더를 처음부터 작성할 필요는 없습니다 Apple의 고도로 최적화된 Metal 성능 셰이더로 시작할 수 있습니다 후처리 API로 블룸 효과를 만들어 보겠습니다 게임에 추가할 수 있죠 게임의 원래 텍스처부터 시작합니다 하이라이트를 추출해 별도의 텍스처에 쓸 겁니다 이후 가장자리를 흐리게 처리하고 마지막으로 원본 위에 흐릿한 텍스처를 합성해 블룸 효과를 연출합니다

    앱에서 이 작업을 하려면 먼저 PostProcessEffect를 준수하는 BloomPostProcess 유형을 정의해야 합니다

    또 블룸 데이터 일부를 쓰기 위해 postProcess 메서드에서 임시 Metal 텍스처를 만듭니다 다음으로 성능 셰이더를 사용해 이미지의 가장 밝은 부분만 추출합니다 이것으로 블룸 효과를 내려고 합니다 가우시안 블러로 해당 영역을 흐리게 만들고 흐려진 이미지를 원래 텍스처 위에 배치합니다 이들 단계의 전체 코드는 다운로드에서 확인할 수 있습니다

    이 효과를 RealityView에 적용하려면 새 BloomPostProcess 클래스의 인스턴스를 만들고 렌더링 효과에 적용하면 됩니다

    마무리 작업으로 게임이 멋져졌습니다 환경이 더욱 생동감 있고 즐거운 플레이를 위한 경험이 되었습니다 RealityKit 덕분에 앱이 제대로 완성되었습니다 iOS, iPadOS, macOS, tvOS에서도 동일하게 실행됩니다 하나의 핵심 코드 베이스와 RealityKit 장면으로 지금 바로 이 모든 플랫폼에서 앱을 출시할 수 있습니다 컨트롤러 지원이 포함된 tvOS에서 이 게임이 어떻게 실행되는지 보여 드리겠습니다

    이제 집에서 Apple TV로 제 RealityKit 게임을 할 수 있죠

    visionOS에서는 더 특별한 것이 가능합니다 장면을 점진적 몰입형 보기 안에 배치해 PyroPanda 세계로 통하는 포털을 추가할 수 있습니다 눈앞에서 풀 3D로 렌더링되죠

    이러한 경험은 RealityKit과 visionOS로만 가능합니다

    오늘 다룬 내용을 살펴보겠습니다 SceneKit은 지원 중단됩니다 중대한 사실이기는 하지만 당장 기존 SceneKit 앱에 대해 걱정할 필요는 없습니다 앞으로 가장 좋은 선택지는 RealityKit으로, 앱 및 게임에 특별한 가능성을 선사합니다 개념 측면에서 핵심 차이점과 RealityKit 개발자가 사용할 수 있는 도구, 그리고 SceneKit에서 RealityKit로 게임을 마이그레이션하는 데 제가 취한 주요 단계를 논의했습니다

    RealityKit으로 멋진 앱과 게임을 만드는 여정에서 도움이 되는 이러한 세션을 확인해 보시기 바랍니다 물론 이전의 다른 세션과 RealityKit 문서도 유용합니다 이 샘플 앱의 다운로드에서 오늘 다루지 못한 부분에 대한 자세한 내용을 확인할 수 있습니다 카메라 모션, 캐릭터의 움직임 가동, 게임 컨트롤러 등이죠 기술은 항상 발전하고 있습니다 Apple은 개발자 여러분에게 SceneKit 지원 중단이 최대한 원활하게 이루어지기를 바랍니다 우리는 RealityKit의 미래, 그리고 SceneKit 개발자들이 다음으로 만들 작품을 기대합니다 시청해 주셔서 감사드리며 즐거운 컨퍼런스 되시길 바랍니다

    • 16:33 - Animations in RealityKit

      // RealityKit
      guard let max = scene.findEntity(named: "Max") else { return }
      
      guard let library = max.components[AnimationLibraryComponent.self],
            let spinAnimation = library.animations["spin"]
      else { return }
      
      max.playAnimation(spinAnimation)
    • 18:18 - Directional Light Component in RealityKit

      // RealityKit
      
      let lightEntity = Entity(components:
          DirectionalLightComponent(),
          DirectionalLightComponent.Shadow()
      )
    • 24:37 - Create Bloom effect using RealityKit Post processing API

      final class BloomPostProcess: PostProcessEffect {
      
          let bloomThreshold: Float = 0.5
          let bloomBlurRadius: Float = 15.0
      
          func postProcess(context: borrowing PostProcessEffectContext<any MTLCommandBuffer>) {
      
              // Create metal texture of the same format as 'context.sourceColorTexture'.
              var bloomTexture = ...
      
              // Write brightest parts of 'context.sourceColorTexture' to 'bloomTexture'
              // using 'MPSImageThresholdToZero'.
      
              // Blur 'bloomTexture' in-place using 'MPSImageGaussianBlur'.
      
              // Combine original 'context.sourceColorTexture' and 'bloomTexture'
              // using 'MPSImageAdd', and write to 'context.targetColorTexture'.
          }
      }
      
      // RealityKit
      
      content.renderingEffects.customPostProcessing = .effect(
          BloomPostProcess()
      )
    • 0:00 - 시작
    • Apple은 공식적으로 모든 플랫폼에서 SceneKit 지원을 중단합니다. 기존 SceneKit 앱과 게임은 계속 작동하지만, 앞으로는 중요한 버그 수정만 받게 됩니다. 개발자는 그 대신 SwiftUI를 활용하고 visionOS, iOS, macOS, iPadOS 그리고 이제는 tvOS에서 지원되는 현대적이고 강력한 3D 엔진인 RealityKit를 사용하는 것이 좋습니다.

    • 5:03 - 핵심 차이점
    • SceneKit 및 RealityKit은 Apple 3D 렌더링 엔진입니다. SceneKit은 노드 기반으로, 기하학, 애니메이션, 오디오, 물리, 조명에 대한 속성을 갖습니다. RealityKit은 엔티티가 구성 요소를 추가하여 수정되는 Entity Component System(ECS)을 사용합니다. 두 엔진 모두 동일한 오른손 좌표 시스템을 사용합니다. SceneKit은 독점 SCN 파일을 사용하는 반면, RealityKit은 개방형 산업 표준 USD를 채택합니다.

    • 8:59 - 애셋 변환
    • RealityKit으로 전환 시, 아키텍처, 좌표 시스템, 애셋 지원, 뷰를 고려하세요. 특히 3D 모델과 같은 애셋은 SCN에서 USD 형식으로 변환되어야 합니다. 가장 좋은 방법은 Blender와 같은 원래 DCC 도구에서 바로 내보내는 것입니다. 원본 파일을 사용할 수 없는 경우, Xcode에서 내보내기 기능을 사용할 수 있지만, 결과는 다를 수 있습니다. 별도의 SCN 파일에 있는 애니메이션의 경우, Xcode 26과 함께 제공되는 SCN 도구 CLI를 사용하여 애니메이션을 변환하고 USDZ 파일에 추가할 수 있습니다.

    • 11:57 - 장면 구성
    • Xcode에 포함된 툴인 Reality Composer Pro는 visionOS 프로젝트의 장면 구성을 용이하게 해줍니다. 이를 통해 사용자는 USD 애셋을 가져오고, 엔티티를 배열하며, 소재, 셰이더, 조명을 편집하고, Xcode를 위한 장면을 준비할 수 있습니다.

    • 15:21 - 애니메이션
    • RealityKit의 SceneKit에서 나온 3D 캐릭터인 Max를 애니메이션으로 만드는 방법을 살펴보세요. Max를 애니메이션이 포함된 USD 파일로 변환한 후, 이 예제에서는 Reality Composer Pro의 AnimationLibraryComponent를 통해 이러한 애니메이션에 액세스합니다. 이전 SceneKit 버전에서는 애니메이션을 별도로 로드하고 관리해야 했지만, 이 버전에선 프로세스가 간소화되었습니다. 이제 Max 엔티티를 쉽게 찾고 이름으로 원하는 애니메이션을 선택한 다음 앱에서 재생할 수 있습니다.

    • 16:58 - 조명
    • Reality Composer Pro의 조명은 장면의 사실감과 분위기를 크게 향상시킬 수 있는 강력한 툴입니다. 앱을 사용하면 방향성 조명을 쉽게 추가하고, 방향을 조정하며, 그림자를 활성화하여 심도 및 차원감을 만들 수 있습니다. SceneKit과 RealityKit은 프로세스가 비슷하고 RealityKit은 포인트 조명, 스포트라이트 조명, 이미지 기반 조명을 비롯하여 다양한 조명 유형을 제공합니다.

    • 18:37 - 오디오
    • SceneKit 프로젝트는 주변 오디오를 추가하여 게임의 몰입도를 높입니다. 오디오 파일을 소스로 로드하고, 비공간적으로 반복되도록 구성하여, 지형 노드에 연결합니다. RealityKit에서는 프로세스가 비슷합니다. 지형 엔티티에 AudioLibraryComponent를 연결하고 주변 오디오 구성 요소를 추가하여 위치 오디오를 비활성화합니다. 메모리 사용량을 최적화하려면 오디오를 스트리밍으로 설정하세요.

    • 21:19 - 시각 효과
    • 이번 마지막 섹션에서는 SceneKit 프로젝트를 가져올 때 RealityKit에서 시각 효과를 사용하는 방법에 대해 설명합니다. 이 예제는 ‘volcano_smoke’라는 USD 파일을 사용하여 Reality Composer Pro에서 입자 효과를 만드는 방법을 보여주는 것으로 시작합니다. 개발자는 Reality Composer Pro의 설정을 SceneKit의 설정과 비교하여 RealityKit에서 유사한 화산 연기 효과를 얻을 수 있었습니다. 그런 다음 예제는 렌더링된 출력에 마무리 작업을 추가하는 후반 작업으로 넘어갑니다. 원래 게임 SceneKit 버전에서는 밝은 조명 주위에 부드럽고 빛나는 빛을 만들기 위해 블룸 효과가 사용되었습니다. RealityKit에는 이 효과에 대한 간단한 속성이 없지만, 이제 후처리 API를 사용하여 RealityView에 후처리 효과를 추가할 수 있습니다. 이 예제에서는 하이라이트를 추출하고, 흐리게 처리하여, 원래 텍스처에 다시 합성하여 사용자 정의 블룸 효과를 만듭니다. 이 효과는 게임의 환경을 향상시켜 더욱 생생하게 만들어줍니다. 그러면 게임은 iOS, iPadOS, macOS, tvOS를 포함한 다양한 Apple 플랫폼에서 게임을 실행하는 모습을 시연하여 RealityKit의 크로스 플랫폼 기능을 보여 줍니다.

Developer Footer

  • 비디오
  • WWDC25
  • SceneKit 프로젝트를 RealityKit으로 가져오기
  • 메뉴 열기 메뉴 닫기
    • iOS
    • iPadOS
    • macOS
    • tvOS
    • visionOS
    • watchOS
    메뉴 열기 메뉴 닫기
    • Swift
    • SwiftUI
    • Swift Playground
    • TestFlight
    • Xcode
    • Xcode Cloud
    • SF Symbols
    메뉴 열기 메뉴 닫기
    • 손쉬운 사용
    • 액세서리
    • 앱 확장 프로그램
    • App Store
    • 오디오 및 비디오(영문)
    • 증강 현실
    • 디자인
    • 배포
    • 교육
    • 서체(영문)
    • 게임
    • 건강 및 피트니스
    • 앱 내 구입
    • 현지화
    • 지도 및 위치
    • 머신 러닝 및 AI
    • 오픈 소스(영문)
    • 보안
    • Safari 및 웹(영문)
    메뉴 열기 메뉴 닫기
    • 문서(영문)
    • 튜토리얼
    • 다운로드(영문)
    • 포럼(영문)
    • 비디오
    메뉴 열기 메뉴 닫기
    • 지원 문서
    • 문의하기
    • 버그 보고
    • 시스템 상태(영문)
    메뉴 열기 메뉴 닫기
    • Apple Developer
    • App Store Connect
    • 인증서, 식별자 및 프로파일(영문)
    • 피드백 지원
    메뉴 열기 메뉴 닫기
    • Apple Developer Program
    • Apple Developer Enterprise Program
    • App Store Small Business Program
    • MFi Program(영문)
    • News Partner Program(영문)
    • Video Partner Program(영문)
    • Security Bounty Program(영문)
    • Security Research Device Program(영문)
    메뉴 열기 메뉴 닫기
    • Apple과의 만남
    • Apple Developer Center
    • App Store 어워드(영문)
    • Apple 디자인 어워드
    • Apple Developer Academy(영문)
    • WWDC
    Apple Developer 앱 받기
    Copyright © 2025 Apple Inc. 모든 권리 보유.
    약관 개인정보 처리방침 계약 및 지침