안티 에일리어싱 모범 사례
Qt Quick 3D 에는 3D 모델을 렌더링하는 동안 에일리어싱(가장자리가 들쭉날쭉한 현상)을 방지하는 여러 가지 방법이 있습니다. 각 기법에는 고유한 장점과 한계가 있습니다. 여러 기술을 결합할 수 있지만 성능 비용이 추가로 발생합니다.
일반적인 에일리어싱
앨리어싱은 화면의 픽셀로 표현할 수 있는 것보다 원본에 더 많은 정보가 있을 때 발생합니다. 앤티 앨리어싱 기법은 세 가지 범주로 나뉩니다:
- 단일 픽셀에 대한 추가 정보를 찾아서 동시에 모두 표현하는 기술.
- 이미지가 좋지 않게 보이는 부분을 찾아서 그 문제를 카펫 밑으로 감추는 이미지 효과.
- 아티스트가 한계를 극복하기 위해 사용하는 기법.
앤티 앨리어싱은 그래픽 렌더링에 유용한 도구이지만 현명하게 사용하지 않으면 애플리케이션의 성능에 영향을 줄 수 있습니다. 다음 섹션에서는 선택할 수 있는 몇 가지 다양한 앤티 앨리어싱 기법에 대해 설명합니다. 문제에 가장 적합한 기법을 이해하면 시각적 품질과 충분한 렌더링 속도의 균형을 맞추는 데 도움이 됩니다.
지오메트리 앨리어싱
기본적으로 모든 지오메트리는 한 번에 한 픽셀씩 화면에 렌더링됩니다. 아래 이미지의 왼쪽에서 볼 수 있듯이, 이로 인해 대비가 높은 경우 가장자리가 거칠어져 흑백에서 쉽게 눈에 띄게 됩니다.
지오메트리의 에일리어싱을 줄이는 효과적인 기법
이 문제를 해결하는 가장 올바른 방법은 필요한 만큼만 지오메트리 디테일을 수집하는 다중 샘플 앤티 앨리어싱을 사용하는 것입니다. 템포럴 앤티 앨리어싱 또는 프로그레시브 앤티 앨 리어싱을 사용하는 것도 올바른 방법으로 문제를 완화할 수 있습니다.
마지막으로, 경우에 따라 실루엣 불투명도 맵을 사용하여 지오메트리의 가장자리를 부드럽게 할 수 있습니다.
텍스처 에일리어싱
텍스처가 하위 샘플링되면 원본보다 적은 수의 픽셀이 표시되므로 선택한 픽셀에 따라 원하지 않는 아티팩트가 발생합니다. 이 효과는 모델이 움직일 때 다른 픽셀이 다른 시간에 선택되기 때문에 더욱 악화됩니다. 아래 이미지에서 E3과 F3 사이의 선이 사라지고, G3과 H3 사이에 강하게 존재하다가 다음 5개 열에서 사라지는 등의 현상을 확인할 수 있습니다.
텍스처의 에일리어싱을 줄이는 효과적인 기법
이 문제를 해결하는 가장 간단한(그리고 아마도 가장 좋은) 방법은 이미지 텍스처 자체에 밉매핑을 사용하는 것입니다. 다른 해결 방법으로는 텍스처에서 더 많은 정보를 수집하기 위해 템포럴 AA 또는 프로그레시브 AA를 사용하는 방법이 있습니다.
멀티샘플 앤티 앨리어싱을 사용하면 이 문제가 해결되지 않습니다.
반사 앨리어싱
텍스처 앨리어싱과 마찬가지로 환경을 반사하는 머티리얼이 이미지를 하위 샘플링합니다. 아래 이미지의 왼쪽에서 볼 수 있듯이 경우에 따라 미세한 디테일이 건너뛰는 것이 분명해집니다.
리플렉션 에일리어싱을 줄이는 효과적인 기법
이 경우 가장 올바른 해결책은 템포럴 AA 또는 프로그레시브 AA를 사용하여 추가 정보를 찾는 것입니다.
허용 가능한 간단한 대체 솔루션은 머티리얼의 광택을 줄이고 거칠게 만드는 것입니다. 이 경우 환경의 저해상도 밉맵이 자동으로 사용되어 선명한 디테일을 함께 블렌딩합니다.
앤티 앨리어싱 기법 Qt Quick 3D
참고: 앤티앨리어싱 예제와 씬 이펙트 예제를 확인하여 이러한 기능 중 일부를 실시간으로 실습해 보세요. 하지만 최신 윈도우 시스템은 고해상도 화면이 연결된 상태에서 높은 DPI 스케일링을 수행하도록 구성되는 경우가 많다는 점에 유의하세요. 즉, 화면에 표시되는 창의 콘텐츠가 더 높은 해상도로 렌더링된 다음 시스템 컴포저 또는 플랫폼의 다른 구성 요소에 의해 축소됩니다. 이는 사실상 슈퍼샘플 안티앨리어싱의 한 형태입니다. Qt Quick 3D 에서 안티앨리어싱 기술을 활성화하면 윈도우잉 시스템의 자동 스케일링에 의해 이미 앨리어싱이 어느 정도 제거되기 때문에 개선 효과가 더 작거나 눈에 잘 띄지 않을 수 있습니다. 그러나 동일한 애플리케이션을 다른 시스템에 배포할 때 특정 시스템이 이러한 스케일링이 없는 플랫폼이나 화면을 사용하므로 에일리어싱과 들쭉날쭉한 가장자리가 더 잘 보일 수 있습니다. 개발자는 대상 환경에 높은 DPI 스케일링이 있는지 또는 없는지를 고려하고 이를 염두에 두고 앤티앨리어싱 설정을 실험하고 조정하는 것이 좋습니다.
아래는 일부 앤티 앨리어싱 메서드를 활성화한 스폰자 씬의 렌더링 예시입니다. 스크린샷은 창에 시스템 스케일링을 적용하지 않은 상태에서 촬영한 것이므로 다양한 방법의 효과가 더 뚜렷하게 드러납니다(높은 DPI 스케일링 없음).
사용된 AA | 결과 |
---|---|
AA 없음 | |
슈퍼샘플 AA, 높음(1.5배) | |
멀티샘플 AA, 높음(4x) | |
FXAA | |
템포럴 AA, 기본 강도(0.3) |
멀티샘플 안티 에일리어싱
멀티샘플 AA(MSAA)는 View3D 항목의 색상 버퍼(기본값)에서 작동하거나 Offscreen
이외의 renderMode 을 사용하는 경우 전체 Qt Quick 창(QQuickWindow, QQuickView, Window, ApplicationWindow)에서 작동합니다.
지오메트리의 가장자리가 슈퍼 샘플링되어 실루엣이 더 부드러워집니다. 그러나 이 기법은 지오메트리 내부의 재질에는 영향을 미치지 않습니다.
- 장점: 에일리어싱이 가장 두드러지는 지오메트리 실루엣에서 좋은 결과를 얻을 수 있습니다. 빠른 애니메이션에서도 문제 없이 작동합니다. 많은 최신 GPU가 성능 문제 없이 2배 또는 4배 MSAA를 지원합니다.
- 단점: 특히 구형 모바일 및 임베디드 하드웨어에서 사용 시 비용이 많이 들 수 있습니다. 텍스처나 리플렉션 문제에는 도움이 되지 않습니다.
View3D 에서 Offscreen
의 기본값 renderMode 을 사용하는 경우 View3D 자체에서 멀티샘플 안티앨리어싱을 완전히 제어합니다. 애플리케이션은 View3D 과 연결된 환경의 antialiasingMode 및 antialiasingQuality 속성(SceneEnvironment 또는 ExtendedSceneEnvironment)을 통해 이를 구성할 수 있습니다.
다음 예제에서는 안티앨리어싱 품질 기본값이 SceneEnvironment.High
이므로 일반적으로 사용되는 4x MSAA를 요청합니다.
View3D { environment: SceneEnvironment { antialiasingMode: SceneEnvironment.MSAA } }
MSAA는 Qt 자체에서 구현하는 것이 아니라 기본 3D API에 의해 수행됩니다. 따라서 성능과 품질은 하드웨어와 3D API 구현에 따라 다를 수 있습니다.
템포럴 안티 에일리어싱
템포럴 AA는 View3D 의 컬러 버퍼에서 작동합니다. 카메라는 프레임 간에 아주 미세하게 흔들리고 각각의 새 프레임의 결과는 이전 프레임과 블렌딩됩니다.
- 장점: 카메라가 흔들리기 때문에 다른 방법으로는 놓칠 수 있는 디테일을 찾아냅니다. 성능에 미치는 영향이 적습니다.
- 단점: 빠르게 움직이는 물체는 한 프레임 고스트 현상을 일으킵니다.
템포럴 AA는 멀티샘플 AA와 함께 사용하면 효과가 없습니다. 하지만 프로그레시브 AA와 결합할 수 있습니다.
템포럴 안티앨리어싱을 제어하려면 환경의 temporalAAEnabled 및 temporalAAStrength 프로퍼티를 사용합니다.
View3D { environment: SceneEnvironment { temporalAAEnabled: true } }
프로그레시브 안티 에일리어싱
프로그레시브 AA는 View3D 의 컬러 버퍼에서 작동합니다. View3D 에 의해 렌더링된 장면의 모든 콘텐츠가 움직이지 않으면 프레임 간에 카메라가 아주 미세하게 흔들리고 각각의 새 프레임의 결과가 이전 프레임과 블렌딩됩니다. 더 많은 프레임이 누적될수록 결과가 더 좋아집니다.
- 장점: 성능 비용 없이 상세한 정적 이미지를 제공합니다.
- 단점: 시각적 변화가 발생하면 적용되지 않습니다. 8배 PAA는 렌더링을 완료하는 데 8분의 1초(60fps 기준)가 걸리므로 눈에 띄게 느려질 수 있습니다.
View3D { environment: SceneEnvironment { antialiasingMode: SceneEnvironment.ProgressiveAA } }
antialiasingQuality 에서 혼합되는 프레임 수(2, 4 또는 8)를 제어할 수 있습니다.
슈퍼샘플 앤티 앨리어싱
슈퍼샘플 AA는 View3D 의 컬러 버퍼에서 작동합니다. 여기에는 정상 크기보다 큰 컬러 버퍼(텍스처)를 생성한 다음 다운샘플링하는 작업이 포함됩니다. 따라서 리소스 사용량이 증가하며 크기가 큰 경우 스케일링 작업에 많은 비용이 발생할 수 있습니다.
- 장점: 애니메이션에 제한 없이 전체 장면 안티앨리어싱을 제공합니다.
- 단점: 그래픽 시스템, 특히 구형 모바일 및 임베디드 하드웨어의 채우기 속도에 의해 씬이 이미 제한되어 있는 경우 성능이 크게 저하될 수 있습니다.
View3D { environment: SceneEnvironment { antialiasingMode: SceneEnvironment.SSAA } }
antialiasingQuality 을 사용하여 크기 배율(1.2, 1.5 또는 2.0)을 제어하세요.
밉맵
밉맵은 텍스처를 미리 계산된 저해상도 버전과 함께 저장합니다. 텍스처가 더 작은 크기로 표시될 때마다 렌더링 시스템은 이러한 저해상도 이미지(많은 디테일을 더 적은 픽셀로 결합)를 자동으로 사용합니다.
- 장점: 성능에 미치는 영향이 적습니다. 텍스처의 이미지 품질이 크게 향상됩니다.
- 단점: 밉맵 체인을 생성하거나 일부 이미지 컨테이너 형식의 경우 이미지 자산 자체에서 밉맵 이미지를 미리 생성해야 하므로 비용이 많이 듭니다. 밉맵이 없는 동일한 이미지보다 33% 더 많은 그래픽 메모리를 사용합니다.
Qt가 Texture 에 대한 밉맵을 생성하고 그래픽 셰이더에서 텍스처 샘플링을 수행할 때 밉맵 체인을 사용하도록 하려면 mipFilter 및 generateMipmaps 프로퍼티를 설정합니다.
Texture { source: "image.png" mipFilter: Texture.Linear generateMipmaps: true }
스페큘러 안티 에일리어싱
스페큘러 안티 에일리어싱을 활성화하면 스페큘러 조명 기여로 인한 아티팩트를 줄일 수 있습니다. 이러한 아티팩트는 일반적으로 밝은 점으로 나타나며 깜빡이는 것처럼 보일 수 있습니다.
스페큘러 AA 비활성화 | 스페큘러 AA 활성화 |
---|---|
View3D { environment: SceneEnvironment { specularAAEnabled: true } }
참고: 매우 매끄러운 외관을 가진 머티리얼은 스페큘러 AA를 활성화하면 마치 표면이 more rough 있는 것처럼 보일 수 있습니다. 이는 기본 조명 계산의 결과입니다.
빠른 근사 안티 에일리어싱
ExtendedSceneEnvironment 는 포스트 프로세싱 효과의 형태로 또 다른 안티 에일리어싱 방법을 제공합니다. FXAA를 활성화하려면 fxaaEnabled 을 true로 설정합니다.
import QtQuick3D.Helpers View3D { environment: ExtendedSceneEnvironment { fxaaEnabled: true } }
아티스트 고용 치트
실루엣 오파시티 맵
모델의 실루엣이 일관된 경우 지오메트리의 바깥쪽 가장자리를 투명하게 만드는 불투명도 맵을 적용할 수 있습니다. 불투명도에 그라데이션을 사용하면 오브젝트의 가장자리가 부드럽게 사라집니다. 그러나 불투명도 맵이 한 픽셀의 공간에 걸쳐 완전 불투명에서 완전 투명으로 바로 전환되더라도 위의 예에서 볼 수 있듯이 결과물은 여전히 앤티 앨리어싱된 가장자리를 제공합니다. 이는 불투명도 맵을 포함한 이미지 맵이 이중 선형 보간을 사용하기 때문입니다.
- 장점: 일반 AA보다 부드러운 전환을 표시할 수 있습니다. 레이어 단위가 아닌 모델 단위로 적용할 수 있습니다.
- 단점: 오브젝트의 실루엣이 변경되는 경우에는 사용할 수 없습니다. 투명도를 사용하는 여러 개의 겹치는 모델은 채우기 속도 성능을 소모하므로 성능이 저하되는 경우가 많습니다.
머티리얼 또는 지오메트리 수정
위의 반사 앨리어싱 이미지에서 볼 수 있듯이 때로는 아트웍을 변경하는 것이 가장 간단한 문제 해결 방법일 수 있습니다. 모델 모서리에 산만하게 반짝이는 스페큘러가 있다면 스스로에게 물어보세요: 머티리얼을 더 부드럽게 만들 수 있을까요? 지오메트리를 수정하여 부드럽게 하거나 반사 각도를 변경할 수 있나요? 환경 맵을 편집하여 날카로운 전환을 줄일 수 있나요?
© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.