역자의 말: 원글이 포스팅 된 년도를 보니까 2021년도 였더군요. 뭐 그당시에도 역시나 포워드 기반의 모바일 게임을 만들고 있어서 가변비율셰이딩 등에 대해서 뭐 찾아보고 한 적이 없던 것으로 기억이 납니다. 다른 토픽에서 본 적이 있었지만 딱히 관심을 갖지 않았더라구요. 암튼... 모바일에서의 가변비율셰이딩에 대한 간략한 소개가 퀄컴으로부터 올라와 있더군요. 어떤 이득이 있는 것인지 같이 읽어 봅시다. ( 번역 하다가 보니 이 포스트에서 언급 한 넷이즈에서 개발 된 천유 모바일... 제가 만든거였네요... ;;;; )
때때로 너무 좋아서 사실이 아닐 수도 있다고 생각되는 기능이 있습니다. 가변 속도 셰이딩(VRS)의 경우, 정말 중요한 기능입니다! VRS는 게임의 시각적 품질을 손상시키지 않으면서도 엄청난 성능과 전력 이점을 얻을 수 있는 기능입니다.
셰이딩은 화면에서 각 픽셀의 결과 색상을 계산하는 프로세스입니다. 이 과정은 프래그먼트 셰이더를 통해 이루어집니다.셰이더는 게임 개발자가 커스텀 코드를 실행하여 GPU의 성능을 최대한 활용할 수 있도록 해주는 프로그래밍 가능한 그래픽 파이프라인의 강력한 툴입니다 . 가장 중요한 셰이더 유형 중 하나는 아마도 GPU가 지오메트리를 래스터화한 후 실행되는 프라그먼트 셰이더(일명 픽셀 셰이더)일 것이며 텍스처, 노멀, 수학 연산 등과 같은 입력을 사용하여 주어진 픽셀에 대한 최종 색상을 생성합니다. 고퀄리티의 물리 기반 그래픽에 대한 수요가 증가함에 따라 조각 셰이더는 수년에 걸쳐 복잡성과 크기가 커졌으며 게임에서 장면을 렌더링할 때 GPU가 수행하는 대부분의 무거운 작업을 담당하고 있습니다.
VRS는 조각 셰이더를 완전히 새로운 차원으로 끌어올렸습니다. 간단히 말해 VRS를 사용하면 조각 셰이더가 한 번에 하나 이상의 픽셀에 색을 입힐 수 있습니다(여기서 조각은 하나의 픽셀 또는 픽셀 그룹을 나타낼 수 있습니다). VRS는안티앨리어싱 기법이 해결해야 하는 반대의 문제를 해결한다고 생각할 수 있습니다. 앤티 앨리어싱 기술은 각 픽셀을 더 자주 샘플링하여 변화가 심한 콘텐츠를 부드럽게 처리함으로써 에일리어싱과 들쭉날쭉한 가장자리를 피하려고 합니다. 그러나 렌더링할 표면의 색상 변화가 크지 않거나 후속 패스에서 흐릿해질 경우(예: 모션 블러 사용) 1:1 단위(즉, 한 픽셀당 한 번의 셰이딩 작업)로 셰이딩 작업을 수행하는 것은 비효율적일 수 있습니다.
VRS를 사용하면 개발자가 한 조각에 대해 하나의 셰이더 연산만 수행하고 그 결과 연산을 지정된 픽셀 그룹 구성에 적용하는 셰이딩 속도를 지정할 수 있습니다. 올바르게 사용하면 시각적 품질 저하가 발생하지 않으면서 프레임을 렌더링하는 GPU의 작업을 크게 완화하여 전력을 절약하고 성능을 향상시킬 수 있습니다. 스냅드래곤 모바일 플랫폼과 내장된퀄컴 아드레노 GPU로 구동되는 디바이스처럼 고해상도 모바일 디바이스가 시중에 다수 출시되면서 렌더링되는 모든 표면에 대해 모든 픽셀을 셰이딩할 필요성이 줄어들었습니다.
가변 비율 셰이딩 데모의 다음 스크린샷(그림 1)은 매우 디테일한 영역에는 높은 비율(즉, 픽셀당) 셰이딩을 사용하고, 디테일이 낮은 영역에는 낮은 비율(즉, 픽셀 그룹으로 구성된 셰이딩 조각)을 사용하는 방법을 보여줍니다.
가변 비율 셰이딩은 어떻게 작동하나요?
GPU가 오브젝트를 렌더링하고 표면으로 래스터화할 때는 픽셀당 하나의 샘플 속도로 렌더링합니다(멀티 샘플링을 사용하지 않는다고 가정하지만 이 개념은 멀티 샘플링에도 적용될 수 있습니다). 개발자는 그래픽 API 확장을 통해 그림 2와 같이 주어진 표면의 셰이딩 비율을 픽셀보다 더 거칠게 수정할 수 있습니다.
유니티는 OpenGL ES용QCOM_shading_rate 익스텐션과 Vulkan용VK_KHR_fragment_shading_rate 익스텐션을 통해 모바일용 VRS를 노출했습니다. OpenGL ES 확장에는 다양한 프래그먼트 크기를 제어하기 위한 여러 열거형(예: GL_SHADING_RATE_1X1_PIXELS_QCOM, GL_SHADING_RATE_1X2_PIXELS_QCOM 등)이 포함되어 있습니다. 이 확장 기능의 데모는우리의 새로운 Adreno GPU OpenGL ES 코드 샘플 프레임워크에서 확인할 수 있습니다.
벌칸의 VK_KHR_fragment_shading_rate는 개발자가 원하는 조각 크기의 폭과 높이를 지정하는 VkExtent2D 구조체를 받습니다. 스냅드래곤 모바일 플랫폼에서 VK_KHR_fragment_shading_rate에 대한 지원은 곧 제공될 예정입니다 .
음영률을 효과적으로 수정하는 방법
이러한 확장 기능을 사용하면 다음과 같이 조각 바인딩이 많은 드로우 호출의 성능을 향상시킬 수 있습니다:
- 색상 편차가 작은 표면.
- 픽셀 단위 셰이딩 정확도가 필요하지 않은 표면 영역. 모션 블러를 통해 스케일이 축소되고 속도 필드에 큰 변화가 있는 색상 타깃이 될 수 있습니다. 피사계 심도를 사용하면 초점 포인트 외부의 영역이 흐리게 처리됩니다.
- 씬의 일부는 전체 셰이딩 속도로 처리하고 일부는 셰이딩 속도를 낮춰 처리할 수 있는 모션 볼류메트릭 렌더링과 같은 효과입니다.
셰이딩 비율을 낮추면 부적절하게 사용하면 렌더링된 오브젝트의 시각적 품질에 영향을 줄 수 있습니다. 성능과 전력이 밀접하게 연관된 모바일 디바이스에서 코스 셰이딩 비율을 사용하면 전력 소비를 개선하고 게임의 열 프로파일을 줄여 궁극적으로 사용자의 플레이 시간을 늘릴 수 있습니다.
VRS in practice
유니티 팀은넷이즈와 협력하여 넷이즈의 게임에 스냅드래곤 엘리트 게이밍 기능을 제공했습니다. Netease는 출시 예정인 게임에 VRS를 구현했습니다: Revelation Mobile(천유)에 도입했습니다.( 역자가 개발에 참여 ) 이 협업과 VRS의 개선을 통해 이 게임은 전력 효율이 30% 이상, 프레임 속도가 38% 이상 향상되었습니다.
여기에서 게임을 다운로드하여 VRS가 실제로 작동하는 모습을 확인할 수 있습니다!
스냅드래곤용 게임 및 그래픽 집약적인 앱을 개발하는 데 관심이 있는 개발자는 에서 제공되는 하드웨어 개발 키트(HDK) 중 일부를 확인해 보세요.스냅드래곤 888 모바일 HDK 및 스냅드래곤 865 모바일 HDK를 포함한 퀄컴 개발자 네트워크에서 사용할 수 있습니다.
OpenGL ES의 아드레노 셰이더 지원에 대한 자세한 내용은아드레노 SDK를 다운로드하고 SDK에 포함된 스냅드래곤 OpenCL 일반 프로그래밍 및 최적화 및 아드레노 OpenGL ES 개발자 가이드를 확인하세요.
원문.
'TECH.ART.FLOW.IO' 카테고리의 다른 글
[공유] 검은신화오공 3D 오공 어셋. (0) | 2024.09.13 |
---|---|
[번역] 유니티 Shader Warmup에 대하여 (6) | 2024.09.12 |
[소식] Rider 2024.2 의 언리얼 게임 개발 업데이트. (3) | 2024.09.09 |
[번역] Software VRS with Visibility Buffer Rendering by J.Hable (1) | 2024.09.09 |
[번역] Visibility Buffer Rendering with Material Graphs by J.Hable (3) | 2024.09.05 |