
Diablo Immortal은 블리자드 엔터테인먼트와 NetEase가 공동으로 개발한 무료 멀티플레이어 액션 롤플레잉 게임 (ARPG)입니다. 2022년에 출시된 Diablo 시리즈의 새로운 챕터인 Diablo Immortal 이 게임은 디아블로 2와 디아블로 3 사이의 스토리 공백을 메우고 월드 스톤의 파편을 둘러싼 새로운 모험을 펼칩니다. 플레이어는 성역 대륙을 탐험하며 악마와 타락한 세력에 맞서 싸웁니다.
모바일 GPU 아키텍처의 혁신과 하드웨어 가속 기능의 획기적인 발전으로 레이 트레이싱 기술이 데스크톱에서 휴대기기로 점진적으로 이전되어 고화질 그래픽 렌더링의 핵심 드라이버 중 하나가 되었습니다. 물리적으로 사실적인 동적 반사광을 계산하는 것은 계산적으로 부담이 되지만 전원이 제한된 모바일 플랫폼에서는 전용 하드웨어 장치를 통해 이를 실행할 수 있습니다. 이 기술은 장면을 통과하는 빛의 전파 경로를 실시간으로 추적하여 거울, 금속, 액체와 같은 복잡한 표면의 반사 동작을 정확하게 시뮬레이션합니다. 레이 트레이싱은 기존의 래스터화 스킴의 공간적 제한과 근사 오류를 극복하고 동적 광원, 화면 외부 객체, 다중 수준 반사의 전 세계 일관된 표현을 지원합니다.
휴대기기의 하드웨어 레이 트레이싱
하드웨어 레이 트레이싱 기술에는 주로 두 가지 구현 패러다임인 레이 트레이싱 파이프라인과 레이 쿼리가 포함됩니다.
레이 트레이싱 파이프라인은 전용 셰이더 단계(레이 생성 / 교차 / 가장 가까운 히트 셰이더)를 통해 전체 파이프라인을 빌드합니다. 정확한 광선 상호작용 제어를 실행할 수 있지만 레이 트레이싱 파이프라인에는 독립적인 파이프라인 구성이 필요하므로 개발 복잡성이 증가합니다.
반면 레이 쿼리를 사용하면 기존 컴퓨팅 또는 프래그먼트 셰이더에서 직접 레이 쿼리를 시작할 수 있으므로 모바일 레이 트레이싱의 핵심 기술이 됩니다. 별도의 파이프라인이 필요하지 않으므로 레이 쿼리는 개발 프로세스를 크게 단순화할 뿐만 아니라 다음과 같은 세 가지 주요 이점이 있습니다.
- 이질적인 컴퓨팅 환경 및 불완전한 레이 트레이싱 하드웨어와의 호환성을 제공합니다.
- 모든 음영 처리 단계에서 레이 트레이싱의 주문형 호출을 지원합니다.
- 리소스 사용량을 줄여 모바일 플랫폼의 대역폭 및 전원 제약 조건을 충족하고 모바일 게임에서 동적 글로벌 일루미네이션 및 실시간 반사와 같은 고급 효과를 위한 실행 가능한 기반을 제공합니다.
Diablo Immortal은 Vulkan을 사용하여 GPU의 하드웨어 레이 트레이싱 기능을 활용합니다. 게임은 장면을 통과하는 광선의 경로를 실시간으로 계산하고 복잡한 물질 속성을 고려하여 Android 기기에서 획기적인 실시간 반사 효과를 구현합니다.


가속 구조
가속 구조는 하드웨어 레이 트레이싱의 핵심입니다. 가속 구조는 계층적 데이터 구성을 통해 레이 교차 테스트의 효율성을 크게 개선합니다.
시스템은 일반적으로 최상위 가속 구조 (TLAS)와 하위 가속 구조 (BLAS)라는 두 가지 수준으로 구성됩니다.
- TLAS는 장면 관리자 역할을 합니다. 모든 BLAS 인스턴스의 공간 변환 행렬 (위치, 회전, 크기 포함)을 기록하여 TLAS는 동적 장면의 전역 구성을 실현합니다. 예를 들어 TLAS를 사용하면 개발자가 동일한 나무 모델의 수백 개 인스턴스를 장면의 다양한 위치와 포즈에 배포할 수 있습니다. 따라서 개발자는 도형을 재구성하는 대신 각 프레임에서 움직이는 물체의 변환 행렬만 업데이트하면 됩니다.
- 기본 단위로서 BLAS: 단일 3D 객체의 기하학적 세부정보를 효율적으로 인코딩하는 BLAS는 경계 볼륨 계층 구조 (BVH) 알고리즘을 통해 공간 색인 구조를 설정하여 광선 탐지 중에 관련 없는 영역을 빠르게 건너뛸 수 있습니다.
이 계층적 설계를 통해 레이 트레이싱 파이프라인은 ray ==> TLAS (대략적인 체 객체 인스턴스) ==> BLAS (정확한 교차)의 효율적인 감지 체인을 형성할 수 있습니다.
동적 모델과 정적 모델을 분리하는 것이 가속 구조 생성 비용을 최소화하는 데 중요합니다.
- 정적 모델: BLAS는 초기화 단계에서 한 번만 빌드하면 되며 후속 장면 로드에서 직접 재사용할 수 있습니다. 대규모 장면의 로드 지연을 방지하기 위해 프레이밍의 비동기 사전 구성 기술을 사용하여 BLAS 구성 작업을 여러 프레임에 분산할 수 있습니다.
- 동적 모델
- 스켈레톤 애니메이션 기반: 스킨이 적용된 정점 데이터는 프레임마다 컴퓨팅 셰이더에 의해 동시에 계산되어 새 정점 버퍼를 생성한 다음 해당 BLAS의 증분 업데이트를 트리거해야 합니다. 이렇게 하면 전체 재구성이 방지되어 성능이 개선됩니다.
- 강체 변환 - 변환/회전/확대/축소 변환만 관련된 경우 BLAS를 수정할 필요가 없습니다. TLAS에서 월드 변환 행렬을 업데이트한 다음 TLAS 빠른 업데이트 프로세스를 트리거하면 됩니다.
주기적 재구성은 레이 트레이싱 동적 장면에서 가속 구조 효율성을 유지하는 데 필수적입니다. 동적 객체가 변형이나 대규모 정점 변위와 같은 기하학적 토폴로지에서 큰 변화를 겪으면 원래 공간 분할이 실패하여 광선 탐색 중에 충돌 감지 성능이 저하될 수 있습니다. 따라서 매우 동적 BLAS/TLAS의 증분 업데이트가 아닌 전체 재구성이 N프레임마다 트리거되어야 합니다.
마지막으로 레이 트레이싱 렌더링의 성능을 최적화하려면 캐릭터의 표시 영역을 기반으로 동적 TLAS 구성 전략을 채택합니다. 캐릭터의 활성 반경 기준점 내 모델만 TLAS에 포함되어 광선 교차 계산의 핵심 오버헤드를 줄입니다.
레이 트레이스 반사
레이 트레이스 반사에는 화면 공간 반사 (SSR) 및 평면 반사(1차원에서 장면을 투사하는 단순한 표면)와 같은 기존 기법에 비해 몇 가지 이점이 있습니다. 레이 트레이스 반사는 빛의 경로를 물리적으로 시뮬레이션하고, 장면 안팎의 동적 물체를 정확하게 캡처하며, 곡선 및 비평면 표면의 자연스러운 반사를 지원하고, 거울과 같은 여러 빛 반사 효과를 사용 설정합니다. 반면 SSR은 화면에 표시되는 정보로 제한되며 평면 반사광은 복잡한 장면에서 시각적 오류나 왜곡이 발생하기 쉽습니다.


레이 트레이스 반사는 원칙적으로 기존 SSR과 유사합니다. 레이 트레이스 반사는 픽셀 단위로 가시선 반사 방향으로 광선을 내보내고 광선과 장면 객체의 교차점을 계산합니다. ray query API에서 반환하는 교차점에는 기하학적 정보 (인스턴스 ID, 도형 색인, 원시 색인 포함)와 삼각형 수준의 래스터화 매개변수 (중심 좌표)가 포함되지만, 픽셀 색상 데이터는 포함되지 않습니다. 일반적인 솔루션은 바인드리스 리소스 바인딩 기술을 사용하여 장면의 모든 텍스처 및 재료 매개변수를 글로벌 색인 배열로 사전 컴파일합니다. 광선 쿼리에서 반환된 기하학적 식별자를 사용하여 해당 재료의 물리적 속성 (예: 노멀 맵 및 거칠기)을 조회한 후 중점 좌표 보간과 결합하여 표면 음영 정보를 계산하고, 교차점의 실제 색상 값을 래스터화를 통해 재구성할 수 있습니다.
하지만 구현 과정에서 Diablo Immortal팀은 두 가지 중요한 기술적 문제를 발견했습니다.
- 조명 모델이 강제로 통합되어 프로젝트 기록에 누적된 다양한 음영 시스템과 충돌하고 반사 물질과 원래 물질 간에 불일치가 발생했습니다.
- 다양한 정점 형식으로 인해 래스터화 단계에서 명령어 브랜치 효율이 저하되며, 이는 휴대기기의 빡빡한 성능 예산에서 주요 문제입니다.
Diablo Immortal팀은 노출 버퍼를 혁신적으로 도입하여 도형 처리를 음영 계산과 분리했습니다.
- 레이 트레이싱 단계: 레이 쿼리를 통해 픽셀 수준의 레이 히트 정보가 실시간으로 캡처됩니다. 교차점의 3D 공간 식별자 (
PrimitiveIndex
가 있는InstanceID
)는 간단한 가시성 ID로 인코딩되어 화면 공간 버퍼에 쓰여집니다. - 색상 지정 단계: 정점 및 픽셀 셰이더에서 실행하는 작업과 마찬가지로 가시성 버퍼의 기하학적 식별자가 동적으로 파싱되고, 정점 속성 (예: UV 및 법선)과 원본 모델의 물리 기반 재료 맵이 가져오며, 재료 유형과 연결된 음영 처리 계산이 최종적으로 실행됩니다.
이 솔루션을 사용하면 정점 형식이나 셰이더를 수정하지 않고도 아트 애셋을 레이 트레이스 반사 시스템에 연결할 수 있습니다.
특정 렌더링 단계
레이 쿼리 패스
레이 트레이싱 단계에 해당하며 화면 공간 반사의 공개 상태 버퍼를 생성합니다.
- Color0
- 형식: R32G32UInt
- R = TriangleID,G = Barycentrics

- 깊이:
- 형식: Depth32F
- D = EncodeAsFloat(InstanceIdx, GeometryIdx)
- 교차점의 재료 식별자는 32비트 부동 소수점으로 인코딩되고 재료의 깊이 코딩 일치 감지 기법의 다음 단계를 위해 깊이 버퍼에 쓰여집니다.

컴퓨팅 셰이더와 비교할 때, 픽셀 셰이더의 레이 쿼리는 다음과 같은 이점이 있습니다.
- 파이프라인 통합: 파이프라인이 기존의 포워드/지연 렌더링 파이프라인에 직접 삽입되어 렌더링 파이프라인 상태 연속성을 유지합니다.
- 모바일 대역폭 최적화: 모바일 타일 기반 아키텍처의 경우 레이 히트 데이터가
RenderTarget
에 쓰여질 때 온칩 무손실 압축이 트리거될 수 있으므로 기존 컴퓨팅 셰이더 출력 대비 메모리 대역폭 소비가 줄어듭니다. - 레이 수량 제어: 스텐실 테스트와 함께 사전 계산 단계를 사용하여 비반사 영역을 표시하고 거부할 수 있습니다.
패스 해결
색상 지정 단계 (레이 트레이스 반사 참고)에서 Diablo Immortal팀은 깊이 테스트 하드웨어 장치를 사용하고 연속 배치로 재료의 색상을 지정하여 빠른 식별 일치를 달성했습니다.
각 재료에 대해 전체 화면 그리기 패스가 실행됩니다. 정점 셰이더는 현재 재료의 인코딩된 식별자를 동적으로 재구성합니다. 깊이 등식 테스트를 사용하여 식별자는 깊이 버퍼의 인코딩된 값과 비교되며, 인코딩된 값이 정확하게 일치하는 픽셀, 즉 현재 재료 인스턴스에 속한 픽셀만 유지됩니다. 유지된 픽셀은 상응하는 재료 셰이더를 실행합니다.
다음으로 고정밀 재료 재현이 픽셀 셰이더에 구현됩니다.
- 도형 데이터 디코딩: 노출 버퍼에서 삼각형 식별자 (
MeshID
+PrimitiveID
) 및 중점 좌표를 추출하고, 이에 상응하는 삼각형의 정점 속성 (위치, UV, 법선 등)을 정점 버퍼에서 동적으로 로드합니다. 각 모델은 독립적인 재료로 음영 처리되므로 결합과 같은 고급 기능은 필요하지 않습니다. - 표면 매개변수 재구성: 중점 좌표 보간을 사용하여 교차점의 UV 좌표를 계산합니다. 보간된 UV를 기반으로 맵을 샘플링하기 위해 소프트웨어 래스터화가 실행됩니다.
- 음영 처리 계산 재사용: 기존 셰이더 코드를 직접 재사용하여 기본 렌더링 파이프라인과 동일한 재료 로직을 유지합니다.

마지막으로 반사 계산에 실제로 참여하는 모델은 장면의 아주 작은 부분만 차지합니다. GPU에서 반환된 반사 모델 식별 데이터를 비동기식으로 읽어 반사에 참여하지 않는 모델/재료를 제거하여 셰이딩 단계에서의 그리기 호출 수를 효과적으로 줄일 수 있습니다 (그리기 호출은 재료와 메시지가 그리기를 위해 GPU에 제출될 때 발생함).
물리 기반 스펙큘러 리플렉션
고화질 반사를 달성하기 위해 반사 표면은 거칠기에 따라 다음 세 가지 유형 중 하나로 분류됩니다.
- 반사 없음: 이러한 노출 영역의 반사 계산을 건너뛰어 리소스를 절약할 수 있습니다. 표면이 매우 거칠면 반사가 흐릿하고 희미해져 기여도가 분명하지 않습니다.
- 거울 반사: 매끄러운 거울처럼 반사된 이미지가 선명하고 흐릿하지 않습니다. 시선에서 반사되는 방향으로 선을 직접 촬영합니다.
- 광택 반사 — 계산 효율성과 물리적 정확성을 모두 고려할 수 있는 GGX 중요도 샘플링을 기반으로 특정 표면 거칠기의 반사가 시뮬레이션됩니다. 선이 방출될 때 반사가 스펙트럴 반사의 기본 방향으로 벗어나므로 강조 표시 영역의 샘플링 효율이 개선됩니다.
Diablo Immortal팀은 제한된 전력 소모로 사용 가능한 이미지 품질을 달성하기 위해 1SPP+Denoiser 솔루션을 채택했습니다. 즉, Diablo Immortal팀은 픽셀당 샘플 1개를 가져온 후 시간적/공간적 노이즈 감소 알고리즘을 사용하여 낮은 샘플링 레이트로 인해 발생하는 다량의 노이즈를 제거합니다.
Diablo Immortal팀은 레이 트레이스 반사 및 화면 공간 반사에 최적화된 고성능 노이즈 제거기인 AMD FidelityFX Denoiser의 Reflection Denoiser를 선택했습니다. 반사 노이즈 제거기의 핵심 이점은 노이즈 제거기의 시공간 하이브리드 노이즈 감소 알고리즘입니다. 반사 노이즈 제거기는 현재 프레임과 이전 프레임 데이터 (모션 보상을 기반으로 함)를 융합하고 공간 필터링 기법 (예: 분산 가이드형 가장자리 유지 필터링)을 결합하여 노이즈를 효율적으로 제거하고 매우 낮은 샘플링으로 부드러운 반사 효과를 출력합니다.
자체 개발 렌더링 파이프라인의 특성에 맞추고 모바일의 엄격한 성능 제약조건을 충족하기 위해 Diablo Immortal팀은 AMD FidelityFX Reflection Denoiser를 통합할 때 타겟팅된 간소화 및 아키텍처 조정을 구현했습니다.
Vulkan을 사용한 고화질 레이 트레이싱
Diablo Immortal은 Diablo Immortal팀이 혁신적인 GPU 하드웨어 레이 트레이싱 기능을 활용한 다양한 Vulkan 지원 Android 기기에서 실행됩니다. Vulkan을 사용하면 개발 오버헤드와 불편함이 줄어들어 Android 사용자에게 고품질 Diablo Immortal 콘텐츠와 게임플레이를 제공할 수 있었습니다.