Reddit의 CrimsonDesert 커뮤니티: Digital Foundry (Interview): "Crimson Desert: Pearl Abyss Answers Every Tech Question We C
CrimsonDesert 커뮤니티에서 이 게시물을 비롯한 다양한 콘텐츠를 살펴보세요
www.reddit.com
Digital Foundry:
매력적인 낮/밤 사이클을 가지고 있고, 간접 조명은 레이 트레이싱으로 구현된 것처럼 보인다.
게임에서 태양과 로컬 라이트에 대한 diffuse global illumination은 어떻게 구현되어 있나?
Pearl Abyss:
빛을 최대한 실제와 가까제 시뮬레이션하고자 했다.
정의된 강도(세기)를 바탕으로 우주 공간에서의 태양과 달의 휘도(luminance)를 계산한다.
(휘도에 대한 간단한 글이다.)
https://m.blog.naver.com/x-ritekorea/222059440380
조도, 휘도, 밝기에 대한 이해 <Illuminance,Luminance,Brightness>
<Posted August 07, 2020 by Kevin Aamodt, 번역 엑스라이트 팬톤 코리아> 보정된 디스플레이는 ...
blog.naver.com
그 다음 Pywel(파이웰)의 대기 안에서 태양빛과 달빛의 대기 산란을 계산한다. 살아남은 photon은 directional light의 광원이 되고, 산란되 photon은 sky light의 광원이 된다.
카메라 주변의 모든 메시들에 대한 Surfel을 생성하고, 그 Surfel들의 radiance를 오프스크린에서 갱신한다.
(화면에 보이든 안보이든, 카메라를 중심으로 주변 공간의 조명 정보를 미리 계산하고 있는다.)
어떤 표면의 irradiance를 계산할 때는 ray를 생성하고, 그 ray들의 hit정보를 추적한다.
ray가 표면에 hit하면, 해당 지점의 incident irradiance는 surfel 기반 radiance cache와 shadow map을 이용해 계산된 directional lighting 으로부터 얻을 수 있다. 반대로 ray가 아무것도 맞히지 않으면, incident irradiance는 cubmap형태의 sky lighting으로부터 얻는다.
태양과 달빛을 Surfel기반 Radiance cache에 포함하지 않는 이유는 directional light에 대한 indirect lighting 지연을 없애기 위함이다.
로컬 라이트의 경우, Light Hierachy라는 트리 구조를 만들고, 로컬 라이팅을 계산할 때 이 트리에서 광원을 샘플링합니다 .
이를 Many Lights Sampling이라고 부릅니다. 이론적으로 광원의 개수에 제한이 없지만 샘플링 비용과 메모리 사용량을 줄이기 위해 트리에 포함되는 광원의 수를 32767개로 제한합니다.
샘플링된 각 광원의 가시성은 Ray Tracing을 통해 검사합니다. 그 후 해당 광원에 대한 조명을 계산할 수 있습니다.
하지만 샘플링과 Ray Tracing에 사용할 수 있는 예산은 제한되어 있기 때문에 단산하게 계산한 조명 결과는 상당히 노이즈가 많습니다.
이 노이즈를 줄이기 위해 공간적으로 인접한 픽셀들의 샘플링 결과를 재사용하여 더 나은 샘플링 분포를 만들고, Diffuse Lighting 결과에는 간단한 Denoising을 적용합니다
Specular Lighting 결과는 별도의 Denoising 비용을 줄이고 조명 일관성을 유지하기 위해 Specular GI결과와 병합합니다
또한 Many Lights는 간접 조명을 제공하기 위해 Surfel 기반 Radiance Cache에도 샘플링됩니다. 다만 Ghosting을 피하기 위해 고주파 성격의 광원은 제외합니다.
(Radiance Cache는 매 프레임 완벽하게 새로 계산되는 게 아니다. 비용이 크기 때문에 보통 일부만 업데이트하거나, 이전 프레임 값을 재사용합니다. 그렇다면 고주파 광원은 광원이 사라졌거나 이동했는데도 이전 위치의 밝은 값이 캐시에 남을 수 있습니다. )
Digital Foundry:
Ray Tracing은 probe 방식인가요, 아니면 per-pixel 방식인가요?
짧은 screen-space ray와 결합해서 사용하나요? 몇 번의 bounce를 사용하나요? cache가 있나요? 가능한 한 세부적인 내용을 알고 싶습니다.
Pearl Abyss:
기본적으로 우리는 GI ray를 per-pixel로 쏜다. 다만 픽셀당 ray 수는 품질 설정에 따라 달라진다.
Diffuse GI와 Many Lights는 픽셀당 1/16(pixel 16개 당 1개의 ray)~1개 ray, Specular GI는 픽셀당 1/4(prixel 4개 당 1개의 ray)~1개 ray를 사용한다.
Diffuse GI ray를 쏘고 radiance를 평가한 뒤에는, 부족한 ray 수로 인해 발생하는 노이즈를 해결하기 위해 Tiled Radiance Cache를 구축한다. 이는 화면 기준으로 32x32 픽셀 단위의 tile 표현이다.
이후 Tiled Radiance Cache를 denoise하고, 화면상의 여러 depth layer를 처리하기 위해 Tiled Radiance Cache로부터 Clustered Radiance Cache도 구축한다.
(
Tiled Radiance Cache:
픽셀마다 부족하게 쏜 GI ray 결과를 바로 쓰지 않고, 화면을 tile 단위로 묶어서 radiance 값을 저장, 보정, 재사용하는 cache
Clustered Radiance Cache:
tile 내부를 depth 기준으로 여러 layer로 나누는 cache
)
ray 생성 자체는 single indirect bounce ray, 즉 간접광 bounce를 한 번만 추적한다. 하지만 radiance cache가 업데이트되는 과정이 feedback loop를 형성하기 때문에, 결과적으로는 pseudo-multiple bounce, 즉 가짜 다중 bounce처럼 동작한다.
픽셀에서 Tiled Radiance Cache를 샘플링할 때는, 해당 tile의 visibility를 추정하기 위해 screen-space ray를 사용한다. 또한 픽셀 단위의 occlusion detail을 보존하기 위해 SSAO(screen space ambient occulusion)도 사용한다.
ray가 hit한 지점의 radiance를 샘플링할 때는 앞서 설명한 Surfel-based Radiance Cache를 사용한다. 부족한 ray sample 수로 인해 발생하는 노이즈를 보완하기 위해 Ray Guiding과 ReSTIR GI 같은 시도도 하고 있다.
Digital Foundry:
게임의 BVH에는 어떤 오브젝트, 머티리얼, 텍스처가 포함되나요? 그리고 어느 거리까지 포함되나요?
Pearl Abyss:
풀과 매우 작은 오브젝트를 제외한 거의 모든 오브젝트가 ray tracing acceleration BVH에 포함됩니다. 여기에는 지형, 건물, props, 나무, 캐릭터 등이 포함된다.
하지만 메모리 예산과 ray tracing 성능의 한계 때문에, ray tracing BVH의 거리는 100~150m로 제한된다.
BVH 거리 밖의 오브젝트들은 약 2km까지 SDF를 사용해 표현한다.
ray tracing 성능에서 Hit Shader divergence가 매우 중요하기 때문에, 원래 머티리얼의 단순화된 표현을 사용한다. 캐릭터처럼 복잡한 multi-texturing을 사용하는 경우에는, 각 캐릭터마다 하나의 texture로 bake한다.
또한 emissive material도 indirect reflection을 표현하기 위해 ray tracing BVH에 포함되다.
( Ray tracing에서 ray가 물체에 맞으면 Hit Shader가 실행된다. 그런데 물체마다 머티리얼이 너무 다르면 GPU 성능이 크게 떨어지기 때문에, ray tracing용 머티리얼은 원본보다 단순하게 만든다는 뜻이다. )
Digital Foundry:
물, 갑옷 등의 indirect specular lighting은 어떻게 구현하나요?
Pearl Abyss:
Indirect specular lighting 역시 ray tracing을 사용해 계산한다. ray tracing을 지원하지 않는 시스템에서는 대신 SDF ray marching을 사용한다.
또한 ray tracing BVH의 거리 제한을 넘어서는 먼 거리 반사를 위해서도 SDF ray marching을 사용합니다. ray tracing 비용을 줄이고 더 정확한 reflection을 얻기 위해 screen-space ray도 함께 사용합니다.
rough surface의 경우에는 노이즈를 줄이고 ray tracing 비용을 아끼기 위해 Tiled Radiance Cache로 fallback합니다. 남은 노이즈는 간단한 denoiser로 처리합니다.
Digital Foundry:
나무가 매우 먼 거리까지 보이는데, 극단적인 LOD는 어떻게 구현하나요?
Pearl Abyss:
나무 mesh에는 SpeedTree asset을 사용합니다. 하지만 먼 거리의 나무를 표현하기 위해, 8x8 방향에서 렌더링한 3D imposter를 만듭니다.
이 tree imposter는 또한 월드를 표현하는 최종 LOD인 Proxy LOD로 bake됩니다. 권장 사양 이상의 시스템에서는 Proxy LOD에 거리 제한이 없기 때문에, tree imposter 역시 거리 제한 없이 유지됩니다.
Digital Foundry:
이 게임은 LOD나 컬링을 위해 메쉬 셰이딩을 활용하나요?
Pearl Abyss:
앞서 설명한 나무 임포스터는 지원되는 하드웨어에서 메쉬 셰이더를 사용해 구현되어 있습니다. 그 외에도 메쉬 셰이더를 활용하는 다른 기술들이 있습니다.
Digital Foundry:
플레이어, 원거리 오브젝트/나무, 지형에 대한 근거리 및 원거리 그림자는 어떻게 렌더링하나요?
Pearl Abyss:
광대한 오픈월드 환경을 표현하기 위해 여러 계층의 섀도우 맵을 사용한다.
첫 번째로, 정적 섀도우 맵은 두 개의 캐스케이드로 구성되어 있으며, 나무를 포함한 대부분의 원거리 오브젝트를 커버하기 위해 점진적으로 업데이트된다.
두 번째로, 지형 섀도우 맵은 하나의 캐스케이드로 구성되며, 매우 먼 지형 메시만 포함한다.
세 번째로, 동적 섀도우 맵은 두 개의 캐스케이드로 구성되며, 나무, 천, 캐릭터를 포함한 모든 근거리 오브젝트와 애니메이션 오브젝트를 표현하기 위해 매 프레임 업데이트된다.
마지막으로, 근거리 섀도우 맵은 하나의 캐스케이드로 구성되며, 세밀한 그림자 표현을 위해 가까운 캐릭터만 포함한다.
표면의 미세한 디테일은 screen space contact shadow를 사용해 표현한다.
Digital Foundry:
물 렌더링이 일반적으로 보는 표준 메시 디스플레이스먼트보다 훨씬 독특합니다. 물이 움푹 파인 영역을 다시 채우듯이 되돌아오는 것도 보이는데, 이것은 어떻게 구현한 건가요?
Pearl Abyss:
이는 얕은 물 방정식, 즉 Shallow Water Equation을 푸는 파티클 시뮬레이션입니다. 카메라 근처에서 최대 25만 개의 파티클을 시뮬레이션합니다.
파티클은 지형 높이와 해안선 SDF 같은 경계 조건과 충돌하며, 서로 간에도 충돌합니다. 파티클이 장애물과 충돌하면 그 사이의 압력이 증가하고, 이로 인해 위쪽 파티클이 상승합니다. 이후 이 파티클들은 중력에 의해 다시 아래로 떨어집니다.
Digital Foundry:
출시 시점에 어떤 업스케일러나 이미지 재구성 기술을 지원하나요?
Pearl Abyss:
PC에서는 FSR 3/4와 DLSS 4/4.5를 지원합니다. PS5 Pro에서는 PSSR을 지원하고, 기본 PS5와 Xbox Series S/X에서는 FSR 3를 지원합니다. 프레임 생성은 PC에서만 지원되며, FSR과 DLSS 프레임 생성 모두 지원합니다.
Digital Foundry:
AMD의 Ray Regeneration이나 Nvidia의 Ray Reconstruction을 지원하나요?
Pearl Abyss:
네, AMD FSR Ray Regeneration과 Nvidia DLSS Ray Reconstruction을 모두 지원합니다. 두 기술은 각각 뛰어난 결과를 보여주며, 자체 개발한 디노이저보다 더 선명한 간접 그림자를 제공합니다.
'ComputerGraphics' 카테고리의 다른 글
| [Physically Based Rendering] 2.1 Monte Carlo: Basics (0) | 2026.05.25 |
|---|---|
| [ComputerGraphcis] 붉은 사막 렌더링 기술 분석 (0) | 2026.05.24 |
| [크래프톤 테크랩] 테그랩 1기 최종 프로젝트 UE 플러그인 (5) | 2025.08.12 |
| [CG] Ray Marcing (6) | 2025.07.22 |
| [포스터논문] XR 환경 내 물리량 연동형 제스처 기반 실시간 특수효과 상호작용 시스템 (1) | 2025.07.16 |