
-
Metal 4 살펴보기
기존 Metal 앱에서 Metal 4의 강력한 새로운 기능을 활용하는 방법을 알아보세요. Metal을 통해 Apple Silicon을 최대한 활용하고 하드웨어를 보다 효율적으로 프로그래밍하는 방법을 설명합니다. 또한 Metal 4가 Metal 코드에 머신 러닝을 통합하는 새로운 기능을 제공하는 방법도 확인할 수도 있습니다.
챕터
- 0:00 - 서론
- 1:44 - 명령 인코딩하기
- 4:03 - 리소스 관리하기
- 10:43 - 셰이더 컴파일하기
- 13:52 - 머신 러닝 통합하기
- 17:26 - MetalFX로 최적화하기
- 19:22 - Metal 4 도입 시작하기
- 23:08 - 다음 단계
리소스
- Processing a texture in a compute function
- Understanding the Metal 4 core API
- Using a render pipeline to render primitives
- Using the Metal 4 compilation API
관련 비디오
WWDC25
-
비디오 검색…
안녕하세요 저는 Aaron이고 Metal API의 대규모 업데이트에 대한 세부 정보를 공유하게 되어 기쁩니다 Metal은 Apple의 하위 수준 그래픽 및 컴퓨팅 API입니다 Metal은 사이버펑크 2077 등 최신 게임을 비롯해 강력한 전문가용 앱까지 여러 세대에 걸친 복잡한 애플리케이션을 구동해 왔습니다 Metal은 Apple 플랫폼서 렌더링, 컴퓨팅 작업 설계 시, 개발자들이 가장 중요시 여기는 기반이 되었죠 10년 이상의 경험을 바탕으로 Metal 4는 API를 한 단계 끌어올려 개발자들이 가장 까다로운 게임과 전문가용 앱을 구현할 수 있게 합니다 Metal 4는 차세대 게임 그래픽, 컴퓨팅 앱을 염두에 두고 설계되었습니다 Apple Silicon의 성능을 최대한 끌어내는 한편 DirectX 같은 다른 그래픽 또는 컴퓨팅 API를 사용하던 개발자도 익숙하고 접근하기 쉽게 설계되었습니다 Metal 4는 이미 앱에 포함되어 있을 수 있는 동일한 Metal 프레임워크의 일부이며 Apple M1 이후 칩과 A14 Bionic 이후 칩이 탑재된 기기에서 지원됩니다 Metal 4는 완전히 새로운 명령 구조와 명시적 메모리 관리로 시작하며 더 풍부하고 복잡한 비주얼을 실현하기 위해 리소스 관리 방식을 변화시켰습니다 셰이더 컴파일이 더 빠르고 다양한 옵션을 제공해 앱에서 중복 컴파일링을 줄일 수 있으며 머신 러닝도 Metal 앱과 원활하게 통합할 수 있게 되었습니다 MetalFX로 앱 성능을 높이는 새로운 내장 솔루션도 제공됩니다 Metal 4 시작 방법도 안내해 드리겠습니다 먼저 앱이 명령을 인코딩하고 제출하는 방식입니다 Metal은 시스템에서 Metal 기기로 표현되며 OS가 이를 앱에 제공합니다 Metal 기기를 확보하면 하드웨어로 작업을 전송할 명령 대기열을 생성할 수 있습니다 그리고 작업 내용을 담아 보낼 명령 버퍼도 생성할 수 있죠 명령 인코더는 명령을 해당 명령 버퍼에 인코딩합니다 지금 앱에서 쓰는 MTLDevice로 Metal 4를 바로 쓸 수 있습니다 Metal 4는 새롭지만 익숙하게 명령을 처리하고 관련 객체들도 새 버전으로 업데이트했습니다 MTLDevice로 얻는 새 MTL4CommandQueue부터 변화가 시작됩니다 Metal 4는 명령 버퍼를 명령 대기열과 분리합니다 그래서 앱은 기기에서 MTL4CommandBuffer도 요청하죠 명령 버퍼는 서로 독립적이라 앱에서 병렬로 인코딩하기 쉽습니다 앱은 드로우, 디스패치, 블릿 가속 스트럭처 구축 등 다양한 명령에 인코더를 활용합니다 Metal 4는 기존 명령 인코더를 통합합니다 새로운 통합 컴퓨트 인코더로 앱에서 블릿과 가속 스트럭처 명령 인코딩도 관리할 수 있습니다 이렇게 하면 필요한 인코더의 총 수가 줄어듭니다 새로운 MTL4RenderCommandEncoder도 있죠 앱에서 셰이더 출력과 실제 색상 연결 지점을 매핑할 수 있는 부착 맵이 새로 추가되었습니다 앱에서는 하나의 렌더 인코더에 필요한 모든 색상 부착 지점을 설정하고 실행 중에도 바로 전환할 수 있죠 이렇게 하면 렌더 인코더를 추가로 만들 필요가 없어서 메모리도 아끼고 불필요한 코드도 줄일 수 있습니다 앱은 사용 가능한 인코더 유형을 자유롭게 조합해 명령 버퍼에 명령을 인코딩할 수 있습니다 명령 버퍼는 메모리에 의해 백업됩니다 앱에서 명령 인코딩 시 데이터가 메모리에 기록되죠 Metal 4에선 Metal 4 명령 할당자가 관리합니다 기기를 사용해 명령 할당자를 만들면 앱의 명령 버퍼 메모리 사용을 직접 제어할 수 있죠 메모리 관리는 최신 앱이 제한된 시스템 리소스 안에서 최대한 많은 작업을 수행하는 데 필수적입니다 요즘 앱들은 그 어느 때보다 더 많은 리소스를 사용합니다 Metal 4에선 앱의 리소스 관리 방식이 달라집니다 Metal은 두 가지 기본적인 유형의 리소스를 사용합니다 Metal 버퍼는 앱이 구성한 일반 데이터를 저장하고 Metal 텍스처는 이미지 형식의 데이터를 저장합니다 예전에는 애플리케이션이 리소스를 적게 사용해서 객체당 하나의 버퍼나 텍스처를 쓰는 경우도 많았습니다 표면 디테일을 높이려 더 많은 텍스처를 사용하게 됐죠 렌더링에 더 다양한 변화를 주기 위해 더 많은 지오메트리를 추가했습니다 최신 애플리케이션은 이 흐름에 이어 새롭고 복잡한 사용 사례 지원을 위해 점점 더 많은 리소스를 끌어들였죠 리소스가 늘어났지만 API는 각 드로우나 디스패치에 사용할 리소스를 지정할 고정된 바인드 포인트만 제공했습니다 과거엔 각 드로우 작업이 보통 몇 개의 리소스만 사용했습니다 이 토끼는 지오메트리와 텍스처 하나씩만을 사용합니다 그리고 각 드로우 작업마다 객체는 지오메트리와 텍스처를 변경하여 표면 모양을 바꿀 수 있습니다 하지만 드로우 호출 수가 늘어나고 셰이더가 복잡해지면서 드로우마다 바인드 포인트를 관리하는 작업이 CPU 시간을 더 많이 소모하게 되었고 애플리케이션은 바인드리스 방식으로 바뀌었습니다 바인딩된 리소스를 다른 버퍼로 옮겨 저장하는 방법이죠 이렇게 앱은 객체별로 혹은 전체 장면에 대해 단 하나의 인수 버퍼만 바인딩하면 됩니다 덕분에 필요한 바인드 포인트 수를 크게 줄일 수 있습니다 앱이 불필요한 바인드 포인트 비용을 줄일 수 있도록 Metal 4는 앱에서 필요한 바인딩 포인트를 저장하는 새 Metal 4 인수 테이블 타입을 제공합니다 인수 테이블은 인코더의 각 단계별로 지정하지만 여러 단계에서 공유할 수 있습니다 앱에서 필요한 바인드 포인트로 인수 테이블 크기를 생성하죠 예를 들어 바인드리스 방식에서는 인수 테이블에 버퍼 바인딩 하나만 있으면 됩니다 GPU도 이 모든 리소스에 접근할 수 있어야 합니다 이때 레지던시 개념이 중요해집니다 Apple Silicon은 큰 통합 메모리 공간을 제공하죠 앱의 모든 리소스 저장에 사용할 수 있지만 Metal은 레지던시 상태로 만들 리소스를 알아야 합니다 Metal 4에서는 앱이 레지던시 세트를 사용해 Metal이 상주해야 하는 리소스를 지정합니다 하드웨어가 리소스에 접근할 수 있도록 하기 위한 것이죠 레지던시 세트는 프레임별 명령 버퍼 인코딩과 커밋 과정에 쉽게 통합할 수 있습니다 커밋하는 명령 버퍼에 필요한 모든 리소스가 레지던시 세트에 포함되어 있는지만 확인하면 됩니다 하지만 레지던시 세트 내용은 거의 변하지 않기 때문에 앱 시작 시 레지던시 세트를 채워 놓으면 됩니다 생성 완료 후, Metal 4 명령 대기열에 추가할 수 있죠 대기열에 커밋된 모든 명령 버퍼엔 해당 리소스가 포함되죠 업데이트가 필요할 때에도 실행 시 비용은 훨씬 적게 듭니다 리소스를 별도 스레드에서 스트리밍하는 애플리케이션은 레지던시 세트 업데이트 비용을 해당 스레드로 옮겨 인코딩과 병렬로 레지던시 세트를 업데이트할 수 있습니다 레지던시 세트 덕분에 큰 이점을 본 게임은 Control Ultimate Edition입니다 Remedy Entertainment 기술 출판 책임자 Tuukka Taipalvesi는 말하죠 이 게임은 레지던시 세트를 쉽게 통합했습니다 리소스를 용도에 따라 여러 레지던시 세트로 분리하고 리소스 레지던시를 백그라운드 스레드에서 관리하며 레지던시 관리 오버헤드가 줄고 레이 트레이싱이 꺼졌을 때 메모리 사용량도 낮아지는 것을 확인했습니다
이러한 게임을 제공하려면 더 많은 리소스가 필요합니다 특히 다양한 기기를 대상으로 할 땐 사용 가능한 것보다 더 많은 메모리가 필요할 수도 있죠 사용 가능한 메모리를 최대한 활용하려면 리소스의 메모리 사용 방식을 앱에서 동적으로 제어해야 합니다 한번에 모든 리소스가 필요한 건 아니기 때문에 리소스의 메모리 할당 방식을 세밀하게 제어해야 합니다 앱은 레지던트 세부 수준을 조절해 품질을 조정함으로써 더 다양한 기기에서 동일한 콘텐츠를 지원할 수 있습니다 앱에서 플레이스먼트 스파스 리소스로 구현할 수 있죠
Metal 4는 스파스 리소스로 할당된 버퍼, 텍스처를 지원하죠 이러한 리소스는 데이터를 저장할 페이지 없이 할당됩니다 스파스 리소스에서는 페이지가 플레이스먼트 힙에서 제공됩니다 앱은 플레이스먼트 힙에서 페이지를 할당해 리소스 콘텐츠를 저장할 공간을 제공합니다 Metal 4는 기본적으로 동시성에 중점을 두기 때문에 리소스 업데이트 시, 반드시 동기화가 이뤄져야 합니다 동기화를 단순화하기 위해 Metal 4는 낮은 오버헤드로 스테이지 간 동기화를 제공하는 배리어 API를 도입해 다른 API의 배리어 개념과도 잘 호환됩니다 Metal 4 샘플서 '컴퓨트 함수에서 텍스처 처리' 작업 중 장애물이 작동하는 모습을 볼 수 있습니다 앱은 컬러 이미지로 시작해 컴퓨트 셰이더를 적용하여 흑백으로 변환한 후 변환된 텍스처를 화면에 렌더링합니다 이 단계들은 공유 리소스인 텍스처 처리 결과물에 대한 의존성을 가지고 있습니다 샘플은 Metal 4 배리어를 사용하여 리소스 쓰기와 읽기가 올바른 순서로 이루어지도록 보장합니다 동기화 없이 이 단계는 임의의 순서로 실행될 수 있으며 잘못된 텍스처 내용을 사용하거나 더 심한 경우 두 단계가 겹쳐져 출력이 손상될 수 있습니다 올바른 순서를 정하기 위해 앱은 배리어를 사용합니다 배리어는 단계적으로 작용합니다 따라서 인코더 단계에 따라 각 작업이 실행되는 단계를 고려해야 합니다
텍스처 처리는 컴퓨트 명령 인코더에서 디스패치 단계 작업으로 실행됩니다 렌더링은 렌더 명령 인코더의 일부가 되며 여기서 텍스처를 프래그먼트 작업에서 읽습니다 필요한 배리어는 디스패치에서 프래그먼트 배리어로 프래그먼트 작업 시작 전에 디스패치 단계 작업이 완료될 때까지 기다립니다 효과적인 배리어 활용은 특히 많은 리소스를 다룰 때 앱에서 최고의 성능을 낼 때 중요합니다
리소스 외, 최신 앱은 엄청난 수의 셰이더도 관리합니다 셰이더는 앱을 위한 렌더링과 연산을 위해 하드웨어로 전송되기 전 컴파일되어야 합니다 셰이더는 Metal 셰이딩 언어로 작성되며 Metal IR로 낮아집니다 IR은 하드웨어에서 직접 실행 가능한 GPU 바이너리로 컴파일됩니다 개발자는 셰이더 컴파일이 언제 발생할지 제어할 수 있습니다 Metal 기기는 셰이더를 CPU가 컴파일할 수 있도록 OS에 전달하는 인터페이스를 제공합니다 Metal 4는 전용 컴파일 맥락으로 컴파일을 관리합니다 새 MTL4Compiler 인터페이스는 기기와 분리되었죠 앱은 기기를 사용하여 컴파일러 인터페이스를 할당합니다 인터페이스는 앱이 CPU에서 컴파일 수행 시점을 명확하고 명시적으로 제어할 수 있게 합니다 MTL4 컴파일러를 활용하여 셰이더 컴파일 스택의 스케줄링 개선점을 활용할 수 있죠 MTL4 컴파일러는 컴파일을 요청하는 스레드에 할당된 서비스 품질 클래스를 상속 받습니다 여러 스레드가 동시에 컴파일할 때 OS는 우선순위가 높은 스레드의 요청을 먼저 처리하여 앱에서 가장 중요한 셰이더가 먼저 컴파일된 후 다른 컴파일로 넘어가도록 합니다 셰이더 컴파일에 대한 명확한 제어는 현대 앱이 그 어느 때보다 많은 셰이더를 가지고 있기 때문에 중요합니다 파이프라인 상태 생성 중에는 GPU 작업이 진행되기 전에 앱이 각 셰이더를 처음 컴파일해야 합니다 때론 파이프라인이 공통 Metal IR을 공유하죠 예를 들어, 앱은 서로 다른 투명도로 렌더링하기 위해 다양한 색상 상태를 적용할 수 있습니다 동일한 상황이 다른 파이프라인 세트에도 적용될 수 있습니다 Metal 4에서는 이러한 경우를 최적화해 셰이더 컴파일 시간을 단축할 수 있습니다 이제 렌더 파이프라인은 유연한 렌더 파이프라인 상태를 사용해 공통 Metal IR을 한 번만 생성할 수 있습니다 이렇게 하면 특화되지 않은 파이프라인이 생성됩니다 앱은 이후 의도한 색상 상태에 맞게 파이프라인을 특화합니다 Metal은 컴파일된 Metal IR을 재사용하여 효율적으로 특화된 파이프라인을 생성해 실행합니다 유연한 렌더 파이프라인 상태는 셰이더 파이프라인 간에 Metal IR을 재사용할 때 컴파일 시간을 절약합니다 앱은 필요한 각 색상 상태에 맞게 특화하기 전에 특화되지 않은 파이프라인을 한 번 생성합니다 Metal IR을 공유하는 다른 파이프라인에서도 반복되며 각 파이프라인의 컴파일 결과를 공유해 앱이 셰이더 컴파일에 소요하는 시간을 줄일 수 있습니다 온디바이스 컴파일은 여전히 CPU 시간을 소모합니다 최적의 성능을 내는 방법은 온디바이스 컴파일 삭제죠 Metal 4는 파이프라인 구성 수집을 간소화합니다 Metal 4의 컴파일 워크플로 활용법과 명령 인코딩에 관한 자세한 내용은 Metal 4 게임 알아보기를 참고하세요 Metal 4로 머신 러닝 통합이 그 어느 때보다 쉬워져 앱에 완전히 새로운 가능성을 열어줍니다 업스케일링, 애셋 압축 애니메이션 블렌딩, 신경 셰이딩 등 렌더링 기법은 각 머신 러닝의 맞춤형 적용을 활용합니다 이러한 기법을 효율적으로 적용하려면 앱이 복잡한 데이터 세트와 구조를 다룰 수 있어야 합니다 버퍼는 유연하지만 대부분의 무거운 작업을 앱에 맡기며 텍스처는 적합하지 않습니다 Metal 4는 모든 맥락에서 지원되는 기본적인 머신 러닝 리소스 유형인 텐서를 지원합니다 Metal 텐서는 다차원 데이터 컨테이너입니다 텐서는 2차원을 훨씬 넘어 확장 가능하며 실용적인 머신 러닝 사용에 필요한 데이터 레이아웃을 유연하게 표현할 수 있습니다 Metal 4는 API와 Metal 셰이딩 언어에 텐서를 직접 통합합니다 텐서는 다차원 데이터의 복잡한 인덱싱 작업을 대신 처리해 Metal 4 앱이 이를 활용해 새로운 방식으로 머신 러닝을 적용하는 데 집중할 수 있도록 합니다 Metal 4는 지원하는 명령 인코더 확장으로 더 쉽게 하죠 새로운 머신 러닝 명령 인코더를 통해 Metal 앱 내에서 대규모 네트워크를 직접 실행할 수 있습니다 머신 러닝 인코더는 기존 Metal 인코더 유형과 유사한 방식으로 작동합니다 텐서는 인수 테이블에 매핑된 리소스로 사용됩니다 인코딩은 동일한 Metal 4 명령 버퍼에서 수행되며 다른 Metal 4 인코더와의 동기화를 위한 배리어를 지원하죠 Metal 4 머신 러닝 인코더는 기존 CoreML 패키지 형식으로 표현된 네트워크와 호환됩니다 Metal 툴체인을 사용해 Metal 패키지로 변환한 후 네트워크를 직접 인코더에 전달하세요 새 머신 러닝 인코더는 나머지 Metal 앱과 명령 수준에서 교차 실행이 필요한 대규모 네트워크에 적합하죠 네트워크가 작으면 Metal 4는 기존 셰이더 파이프라인에 직접 통합할 수 있는 유연성도 제공합니다 예를 들어 신경망 기반 소재 평가는 기존의 텍스처 대신 잠재 텍스처 데이터를 사용합니다 앱은 해당 잠재 텍스처를 샘플링해 입력 텐서를 생성하고 샘플링된 값을 사용해 추론을 수행하며 최종 출력을 사용해 셰이딩을 수행합니다 각 단계를 따로 파이프라인으로 나누는 것은 텐서를 매번 동기화하고 처리한 뒤 다시 동기화해야 하므로 비효율적입니다 최적의 성능을 위해 앱은 각 단계를 하나의 셰이더 디스패치로 결합하여 각각이 공통 스레드 메모리를 공유할 수 있도록 해야 하죠 추론 구현은 복잡한 작업이지만 Metal 4는 Metal 성능 기본 기능으로 지원하죠 Metal 성능 기본 기능은 복잡한 계산을 실행하도록 설계된 셰이더 기본 기능으로 텐서를 기본으로 처리할 수 있습니다 Apple Silicon에서 빠르게 실행되도록 최적화됐죠 텐서 연산은 작은 네트워크의 셰이더 내장에 적합합니다 앱에선 Metal 셰이딩 언어의 일부로 활용할 수 있고 그렇게 하면 운영체제 셰이더 컴파일러가 사용 중인 기기에 최적화된 셰이더 코드를 직접 셰이더에 인라인합니다 Metal의 새로운 머신 러닝 기능 사용법을 더 알아보려면 Metal 4 머신 러닝과 그래픽 결합하기를 시청하세요 Metal 4는 최첨단 머신 러닝 기술을 통합하는 데 필요한 모든 도구를 제공합니다 MetalFX에 내장된 프로덕션에 바로 사용 가능한 솔루션도 활용할 수 있습니다 Apple 기기의 화면은 놀라운 게임을 선보이기에 완벽합니다 MetalFX는 앱이 사실적인 반사로 복잡한 장면 렌더링 시 더욱 빠른 주사율로 고해상도를 제공하죠
고해상도 이미지를 렌더링하면 GPU가 상당한 기간 동안 소모될 수 있습니다 대신 앱을 저해상도 이미지로 렌더링하고 MetalFX를 사용하여 업스케일링할 수 있습니다 최종 이미지를 렌더링하는 데 걸리는 시간이 단축되어 앱이 렌더링하는 각 프레임의 시간을 절약할 수 있습니다 시간을 절약해 다음 프레임을 더 빨리 렌더링할 수 있죠 품질을 낮추지 않고 최고 주사율을 달성하고 싶다면 MetalFX에 훌륭한 솔루션이 있습니다 올해 MetalFX는 Frame Interpolation 지원을 추가했죠 앱은 각 프레임을 처음부터 렌더링하는 데 걸리는 시간보다 훨씬 짧은 시간 안에 중간 프레임을 생성할 수 있죠 중간 프레임으로 높은 프레임 속도를 달성할 수 있습니다 레이 트레이싱은 카메라에서 광원으로 광선을 추적하여 현실적인 렌더링 결과를 얻기 위해 앱이 사용하는 또 다른 기술입니다 그러나 광선이 너무 적게 투사되면 이미지의 노이즈가 심해서 사용할 수 없습니다 MetalFX는 업스케일 프로세스 동안 노이즈 제거를 지원해 앱은 더 적은 광선으로 렌더링된 이미지에서 노이즈를 제거할 수 있고 실제 크기의 결과를 제공합니다 MetalFX는 플레이어가 좋아할 고품질 결과물을 더 높은 주사율로 만들어내도록 합니다 게임에서 Metal 4 레이 트레이싱을 결합하면 놀라운 결과가 나타나죠 'Metal 4 게임 심화 기능 알아보기'에서 이 기능의 사용 방법을 자세히 배울 수 있습니다 앱은 이러한 기능들을 결합하여 놀라운 일을 해낼 수 있습니다 Metal 4는 접근성과 모듈성을 갖춘 포팅을 위해 설계됐죠 앱은 다음을 포함한 여러 가지 핵심 기능 범주로 구성됩니다 셰이더를 어떻게 컴파일하는지 하드웨어에 명령을 어떻게 인코딩하고 제출하는지 리소스 관리는 어떻게 하는지 설명하죠 각각 고유한 단계로 별도로 접근 가능합니다 컴파일은 아마도 가장 쉬운 첫 번째 단계일 것입니다 Metal 4 컴파일러를 할당하여 앱의 컴파일 과정에 삽입하면 서비스 품질이 향상됩니다 새로운 컴파일 인터페이스를 채택한 후 앱은 유연한 렌더링 파이프라인을 통합하여 렌더링 파이프라인 컴파일 속도를 높이거나 개선 사항을 수집하여 컴파일 시간을 앞당길 수 있습니다 새 컴파일러 채택과 상관없이 앱에서 Metal 4로 명령을 생성하는 이점을 누릴 수 있죠 Metal 4의 명령 인코딩 및 생성 모델을 사용하면 메모리 할당 제어력을 더 높일 수 있습니다 인코더 유형 전반에 걸쳐 기본 병렬 인코딩을 활용하여 인코딩을 더 빠르게 완료할 수도 있습니다 Metal 4의 완전히 새로운 머신 러닝 기능 세트는 렌더링 파이프라인의 새로운 가능성을 열어 줍니다 앱은 통합하려는 네트워크를 기반으로 머신 러닝 인코더 또는 셰이더 ML을 채택할 수 있습니다 Metal 4의 리소스 관리와 함께 더 발전할 수 있죠 레지던시 세트는 쉽게 얻을 수 있습니다 이를 통합하여 레지던시 관리 프로세스를 단순화합니다 배리어를 통해 앱은 다양한 경로에서 리소스 액세스를 효율적으로 동기화할 수 있습니다 그리고 플레이스먼트 스파스 리소스로 Metal 앱에 리소스 스트리밍을 구축할 수 있습니다 개발자인 당신은 앱을 더 잘 만드는 방법을 판단할 수 있는 최적의 위치에 있습니다 또한 Metal 4를 사용하면 가장 필요한 곳에 새로운 기능을 유연하게 도입할 수 있죠 플레이스먼트 스파스는 특정 사용 사례를 지원합니다 기존 Metal 앱에 통합하는 방법은 이렇습니다 Metal 앱은 이미 기존 Metal 명령 대기열로 작업을 수행하고 있으며 스파스 매핑 작업을 수행하려면 Metal 4 명령 대기열이 필요합니다 MTLEvent를 사용하여 앱의 Metal 명령 대기열과 Metal 4 명령 대기열 간 작업을 동기화할 수 있죠 첫 번째 신호 이벤트 호출은 MTL4CommandQueue 차단을 풀어 플레이스먼트 스파스 매핑을 업데이트합니다 두 번째 신호 이벤트 호출은 앱에 플레이스먼트 스파스 리소스로 렌더링 작업을 계속하라는 알림을 보냅니다 이전에 사용했던 동일한 MTLEvent를 사용할 수 있죠 이벤트 대기 전, 리소스에 의존하지 않는 작업을 제출해 하드웨어가 완전히 활용될 수 있도록 해야 합니다 Metal은 Metal 앱을 디버깅, 최적화할 수 있는 고급 개발자 도구 세트와 함께 제공됩니다 그리고 올해, 동일한 도구가 Metal 4를 지원하죠 API와 셰이더 검증은 일반적인 문제를 식별하여 귀중한 시간을 절약해 줍니다 포괄적인 Metal 디버거로 Metal 4 사용을 자세히 볼 수 있죠 Metal 성능 HUD는 앱의 성능을 모니터링하기 위한 실시간 오버레이를 제공하며 Metal 시스템 추적으로 앱 성능을 추적해 살펴볼 수 있죠 이 모든 도구에 대해 알아보고 Apple 개발자 웹사이트에서 설명서를 볼 수 있습니다 또한, 게임 디버깅 및 최적화 기술을 위해 '게임 수준 높이기'를 확인해 보세요 Xcode 26에는 새 Metal 4 템플릿도 내장되어 있죠 게임 기술로 Metal 4를 선택하기 전 새 프로젝트를 시작하고 게임 템플릿을 선택하세요 내장된 Xcode 템플릿을 사용하여 기본 렌더링과 Metal 4 여정을 시작하세요 이제 Metal 4가 무엇을 할 수 있는지 알게 되었으니 이제 앱의 필요에 맞게 적용하는 방법을 배워 보세요 게임을 개발하고 있다면 Metal 4의 새로운 명령 인코딩 및 컴파일 기능을 사용하는 방법을 자세히 살펴볼 수 있습니다 그 후에는 MetalFX로 게임을 발전 및 최적화하는 방법을 배우고 Metal 4 레이 트레이싱 활용 방법을 확인할 수 있죠 또는 Metal 앱에서 Metal 4를 사용하여 머신 러닝과 그래픽을 결합하는 방법을 배울 수 있습니다 Metal 4는 훌륭한 기능의 차세대 앱과 게임을 지원합니다 이제 막 기초적인 토대를 쌓았을 뿐입니다 다가오는 개발자 베타 버전에서는 새 앱이나 기존 앱에서 Metal 4를 사용할 수 있죠 샘플 코드는 Metal 4 도입 시작에 좋습니다 현재 사용 가능합니다 시청해 주셔서 감사합니다!
-
-
- 0:00 - 서론
Apple의 Metal API는 차세대 게임, 그래픽, 컴퓨팅을 염두에 두고 제작된 Metal 4를 통해 대대적으로 업그레이드됩니다. 명시적 메모리 관리, 보다 강력한 리소스 관리, 더 빠른 셰이더 컴파일, 원활한 ML 통합, 새로운 MetalFX 성능 기능을 제공합니다. Metal 4는 M1(및 이후 버전) 및 A14 Bionic(및 이후 버전) Apple 칩과 호환되며 기존 Metal 프레임워크를 기반으로 합니다.
- 1:44 - 명령 인코딩하기
현재 앱에서 사용하는 것과 동일한 MTLDevice를 사용하여 Metal 4의 이점을 활용할 수 있습니다. Metal 4는 명령 버퍼 메모리를 직접 제어하기 위한 ・・MTL4CommandAllocator・・ 및 논리적 셰이더 출력을 물리적인 색상 첨부에 매핑하는 첨부 맵이 있는 ・・MTL4RenderCommandEncoder・・ 등 더 큰 유연성을 위한 새로운 객체를 도입했습니다. 앱은 단일 렌더 인코더를 사용하여 색상 첨부 파일을 구성하고 교체하여 메모리와 코드를 절약할 수 있습니다.
- 4:03 - 리소스 관리하기
Metal 4는 이전보다 훨씬 많은 버퍼와 텍스처를 사용하는 최신 애플리케이션에 대한 리소스 관리를 최적화합니다. 새로운 MTL4ArgumentTable 유형을 사용하면 앱에 필요한 리소스에 대한 바인딩 포인트를 저장할 수 있습니다. 레지던시 세트를 사용하여 Metal이 GPU에 상주해야 하는 리소스를 지정합니다. 레지던시 세트를 채우는 작업은 앱 시작 시에 수행할 수 있고 이후 업데이트에서는 CPU 비용이 최소화됩니다. Metal 4 버퍼와 텍스처는 배치 스파스 리소스로 할당되어 해당 리소스에 메모리를 할당하는 방식을 세부적으로 제어할 수 있습니다. Metal 4는 또한 리소스의 단계별 동기화를 위해 낮은 오버헤드 장벽 API를 도입합니다.
- 10:43 - 셰이더 컴파일하기
Metal 4에서는 새로운 MTL4Compiler 인터페이스가 도입되어 앱이 CPU에서 셰이더 컴파일을 수행하는 시점을 명시적으로 제어할 수 있습니다. 새롭고 유연한 렌더 파이프라인 상태를 사용하면 공통 Metal IR을 다른 색상 상태에 재사용하여 특수화할 수 있는 비특수화 파이프라인을 만들 수 있어 앱이 셰이더를 컴파일하는 데 소요되는 시간을 줄일 수 있습니다.
- 13:52 - 머신 러닝 통합하기
Metal 4를 사용하면 그 어느 때보다 쉽게 머신 러닝을 앱 및 게임에 통합할 수 있습니다. 업스케일링, 애셋 압축, 애니메이션 블렌딩, 신경 셰이딩과 같은 렌더링 기술에서 모든 이점을 누리게 됩니다. Metal 4는 텐서, 머신 러닝을 위해 특별히 고안된 다차원 데이터 컨테이너, 텐서를 Metal 셰이딩 언어뿐만 아니라 API에 직접 지원합니다.
- 17:26 - MetalFX로 최적화하기
MetalFX를 사용하면 앱이 사실적인 반사 기능이 있는 복잡한 장면을 렌더링할 때 더욱 높은 해상도와 재생률을 제공할 수 있습니다. 앱은 저해상도 이미지를 렌더링할 수 있고 MetalFX는 이를 업스케일합니다. MetalFX는 또한 프레임 보간에 대한 지원을 추가해 앱은 이를 사용하여 처음부터 생성하는 것보다 훨씬 빠르게 중간 프레임을 생성할 수 있어 더 높은 프레임 속도를 달성할 수 있습니다. 레이 트레이싱 장면의 경우, MetalFX는 이제 업스케일 프로세스를 진행하는 동안 노이즈 제거를 지원하기 때문에 앱은 더 적은 레이로 렌더링된 이미지에서 전체 크기 결과를 제공할 수 있습니다.
- 19:22 - Metal 4 도입 시작하기
Metal 4는 접근성과 모듈성을 모두 갖춘 포팅을 위해 설계되었습니다. 모듈식 접근 방식을 사용하여 기존 Metal 앱 또는 게임에 적용할 수 있습니다. 셰이더를 컴파일하는 방법, 하드웨어에 명령을 인코딩하고 제출하는 방법, 리소스 관리 등 가장 큰 영향을 미칠 분야에 집중하세요. 대다수의 경우, 레지던시 세트는 쉽게 확보할 수 있습니다. 배치 스파스는 특정 사용 사례를 활성화하는 기능의 훌륭한 예가 되기도 하며 기존 Metal 앱에 통합하기 쉽습니다. 이 과정에서 Metal 4를 지원하는 Metal의 고급 개발자 툴 세트를 사용하여 Metal 앱을 디버깅하고 최적화하는 데 도움을 받으세요. Metal 4는 컴파일 외에도 메모리 할당에 대한 더 큰 제어 기능을 제공하고, 네이티브 병렬 인코딩을 활성화하며, 렌더링 파이프라인을 최적화하기 위한 머신 러닝 기능을 도입하는 명령 인코딩 및 생성 모델을 제공합니다. Metal 4의 리소스 관리 또한 레지던시 세트, 장벽, 배치 스파스 리소스와 같은 기능을 통해 간소화되어 효율적인 리소스 스트리밍이 가능합니다. Metal 4에는 디버깅, 최적화, 성능 모니터링을 위한 고급 개발자 툴 세트가 함께 제공됩니다. Xcode 26에는 새로운 Metal 4 템플릿이 포함되어 있어 Metal 4 앱 빌드 및 최적화를 쉽게 시작할 수 있습니다.
- 23:08 - 다음 단계
Metal 4는 놀라운 기능 세트를 갖춘 차세대 앱과 게임을 지원합니다. 샘플 코드는 Metal 4 도입을 시작하는 방법에 대한 좋은 예로, 현재 이용 가능합니다.