Scalability, 엔진 퀄리티 레퍼런스

Scalability, 엔진 퀄리티 옵션, 프로퍼티, 콘솔 변수입니다.

Windows
MacOS
Linux

엔진 퀄리티(Scalability) 세팅은 다양한 플랫폼과 하드웨어에서 게임에 최적의 퍼포먼스를 유지하기 위한 여러가지 퀄리티 세팅을 조절할 수 있는 기능입니다.

엔진 퀄리티 세팅

에디터에서 엔진 퀄리티 세팅은 툴바의 퀵 세팅 메뉴를 통해 열어볼 수 있습니다. 엔진 퀄리티 세팅 에는 BaseScalability.ini 파일에 정의된 세팅 중 가장 자주 사용되는 것들에 대한 바로가기가 모여있습니다. 반면 머티리얼 퀄리티 레벨 은 글로벌 머티리얼 퀄리티 세팅을 설정합니다.

해상도 스케일

언리얼 엔진 4 는 씬을 저해상도로 렌더링한 다음 이미지 스케일을 키워 목표 해상도에 맞출 수 있습니다. 2D 유저 인터페이스는 보통 퍼포먼스가 적게 들고 저해상도로 인한 피해가 크기 때문에, UI 에는 이 기법을 적용하지 않습니다. 샘플링을 키우는 데 미미한 비용이 있기는 하지만, 들일만한 가치는 있습니다.

SC_00007.png

왼쪽: AA 없이 50%, 가운데: AA 켜고 50%, 오른쪽: AA 켜고 100% (해상도 스케일 없음)

입력 이미지를 부드럽게 하면 샘플링을 키우는 단계에 도움이 됩니다. 즉 이 엔진 퀄리티 옵션은 다른 퀄리티 옵션: 안티에일리어싱 퀄리티의 수혜를 받는다는 뜻입니다.

이 세팅은 r.ScreenPercentage 콘솔 변수로 접근할 수 있습니다. 10 에서 100 사이의 값을 받으며, -1 역시 100% 와 같습니다.

뷰 거리

오브젝트는 뷰어와의 거리에 따라 컬링 가능합니다. 기본적으로 모든 오브젝트는 거리 컬링되지 않습니다 (Desired max draw distance 가 0 입니다). 디자이너가 지정하는 값 위에 배수처럼 작동하는 글로벌 엔진 퀄리티 세팅이 있습니다 (r.ViewDistanceScale). 여기서는 약간의 풀 오브젝트가 보입니다 (Desired max draw distance 1000):

SC_00006.png

_왼쪽: r.ViewDistanceScale 0.4, 가운데: r.ViewDistanceScale 0.7, 오른쪽: r.ViewDistanceScale 1.0 (default)_

안티에일리어싱

왼쪽에서부터: r.PostProcessAAQuality 0 부터 6 까지. 처음 셋은 뷰 -> 엔진 퀄리티 옵션 -> AA낮음, 중간, 높음, 에픽 으로 설정한 것입니다.

r.PostProcessAAQuality 콘솔 명령으로 안티에일리어싱 퀄리티 레벨을 조절하면, (FXAA 든 템포럴 AA 든) 사용중인 안티에일리어싱 메서드의 퀄리티가 조정됩니다. 어느 안티에일리어싱 메서드든, r.PostProcessAAQuality 에 0 값이 사용되면 이펙트를 끕니다. FXAA 의 경우 값이 2, 4, 6 인 경우 그 이펙트를 위 이미지에서 볼 수 있는데, 각진 변의 부드러운 정도가 나아지고 있습니다. 6 이상의 값은 효과가 없습니다.

템포럴 AA 의 경우, 높은 값을 사용할 수록 이펙트의 채우기 속도와 퀄리티에 반비례 관계가 있습니다. 템포럴 AA 로 r.PostProcessAAQuality 2 정도면 정착 속도가 빠르지만 이펙트로 생기는 지터링이 더욱 도드라집니다. r.PostProcessAAQuality 4 는 정착 속도가 느리지만 지터링은 없습니다.

포스트 프로세싱 - sg.PostProcessQuality

sg.PostProcessQuality 0 은 왼쪽, 3 은 오른쪽.

-> 엔진 퀄리티 세팅 -> 포스트 프로세싱 옵션은 [UE4_InstallPath]/Engine/Config 폴더에 위치한 BaseScalaiblity.ini 파일에서 찾을 수 있는 세팅에 맞춰 포스트 프로세싱 이펙트의 퀄리티를 조절합니다. 낮음 세팅은 sg.PostProcessQuality 0 에, 에픽 세팅은 sg.PostProcessQuality 3 에 해당합니다.

sg.PostProcessQuality 0

sg.PostProcessQuality 1

r.MotionBlurQuality=0
r.BlurGBuffer=0
r.AmbientOcclusionLevels=0
r.AmbientOcclusionRadiusScale=1.7
r.DepthOfFieldQuality=0
r.RenderTargetPoolMin=300
r.LensFlareQuality=0
r.SceneColorFringeQuality=0
r.EyeAdaptationQuality=0
r.BloomQuality=4
r.FastBlurThreshold=0
r.Upscale.Quality=1
r.Tonemapper.GrainQuantization=0
r.MotionBlurQuality=3
r.BlurGBuffer=0
r.AmbientOcclusionLevels=1
r.AmbientOcclusionRadiusScale=1.7
r.DepthOfFieldQuality=1
r.RenderTargetPoolMin=350
r.LensFlareQuality=0
r.SceneColorFringeQuality=0
r.EyeAdaptationQuality=0
r.BloomQuality=4
r.FastBlurThreshold=2
r.Upscale.Quality=2
r.Tonemapper.GrainQuantization=0

sg.PostProcessQuality 2

sg.PostProcessQuality 3

r.MotionBlurQuality=3
r.BlurGBuffer=-1
r.AmbientOcclusionLevels=2
r.AmbientOcclusionRadiusScale=1.5
r.DepthOfFieldQuality=2
r.RenderTargetPoolMin=400
r.LensFlareQuality=2
r.SceneColorFringeQuality=1
r.EyeAdaptationQuality=2
r.BloomQuality=5
r.FastBlurThreshold=3
r.Upscale.Quality=2
r.Tonemapper.GrainQuantization=1
r.MotionBlurQuality=4
r.BlurGBuffer=-1
r.AmbientOcclusionLevels=3
r.AmbientOcclusionRadiusScale=1.0
r.DepthOfFieldQuality=2
r.RenderTargetPoolMin=400
r.LensFlareQuality=2
r.SceneColorFringeQuality=1
r.EyeAdaptationQuality=2
r.BloomQuality=5
r.FastBlurThreshold=7
r.Upscale.Quality=3
r.Tonemapper.GrainQuantization=1

섀도 - sg.ShadowQuality

sg.ShadowQuality 0 은 왼쪽, 3 은 오른쪽.

-> 엔진 퀄리티 세팅 -> 섀도 옵션으로 [UE4_InstallPath]/Engine/Config 폴더에 위치한 BaseScalaiblity.ini 파일에서 찾을 수 있는 세팅에 맞게 다이내믹 섀도 퀄리티를 조절합니다. 낮음 세팅은 sg.ShadowQuality 0 에, 에픽sg.ShadowQuality 3 에 해당합니다.

sg.ShadowQuality 0

sg.ShadowQuality 1

r.LightFunctionQuality=0
r.ShadowQuality=0
r.Shadow.CSM.MaxCascades=1
r.Shadow.MaxResolution=512
r.Shadow.RadiusThreshold=0.06
r.Shadow.DistanceScale=0.6
r.Shadow.CSM.TransitionScale=0
r.LightFunctionQuality=1
r.ShadowQuality=2
r.Shadow.CSM.MaxCascades=1
r.Shadow.MaxResolution=1024
r.Shadow.RadiusThreshold=0.05
r.Shadow.DistanceScale=0.7
r.Shadow.CSM.TransitionScale=0.25

sg.ShadowQuality 2

sg.ShadowQuality 3

r.LightFunctionQuality=1
r.ShadowQuality=5
r.Shadow.CSM.MaxCascades=2
r.Shadow.MaxResolution=1024
r.Shadow.RadiusThreshold=0.04
r.Shadow.DistanceScale=0.85
r.Shadow.CSM.TransitionScale=0.8
r.LightFunctionQuality=1
r.ShadowQuality=5
r.Shadow.CSM.MaxCascades=4
r.Shadow.MaxResolution=1024
r.Shadow.RadiusThreshold=0.03
r.Shadow.DistanceScale=1.0
r.Shadow.CSM.TransitionScale=1.0

텍스처 - sg.TextureQuality

최근의 렌더링 엔진은 훨씬 만은 GPU 메모리를 요구합니다 (텍스처, 메시, GBUffer, 뎁스 버퍼, 섀도 맵). 이들 중 일부는 (GBuffer 처럼) 화면 해상도에 비례하는 것도 있고, (섀도 맵처럼) 특정 퀄리티 세팅에 비례하는 것도 있습니다. 스트리밍 시스템 관리를 좀 더 적극적으로 (풀 크기는 작게, 미사용 텍스처는 컬링)하거나, 밉 레벨 계산에서 디테일을 높이거나 낮출 수 있습니다. 이는 이미지 퀄리티, 텍스처 스트리밍 부작용 부각 정도, 게임 실행의 원활한 정도에 영향을 끼칠 수 있습니다 (업데이트는 메모리 전송 비용이 비싸게 듭니다). 그 결과는 (고속/저속 하드 드라이브 또는 SSD 등) 미디어에 따라 달라질 수 있습니다. DVD/블루레이에서의 스트리밍은 반응지연시간이 훨씬 더 오래 걸리니 피해야 할 것입니다.

텍스처 퀄리티는 텍스처 필터링 모드에도 (r.MaxAnisotropy) 영향을 끼칩니다. Anisotropy 샘플 수를 제한시키면 텍스처 대역폭이 줄지만, 텍스처 메모리가 절약되지는 않습니다.

sg.TextureQuality 0

sg.TextureQuality 1

r.Streaming.MipBias=2.5
r.MaxAnisotropy=0
r.Streaming.PoolSize=200
r.Streaming.MipBias=1
r.MaxAnisotropy=2
r.Streaming.PoolSize=400

sg.TextureQuality 2

sg.TextureQuality 3

r.Streaming.MipBias=0
r.MaxAnisotropy=4
r.Streaming.PoolSize=700
r.Streaming.MipBias=0
r.MaxAnisotropy=8
r.Streaming.PoolSize=1000

이 기능의 효과는 게임과 하드웨어에 따라 크게 달라집니다. 텍스처가 많지 않은 경우, 최대 해상도 밉맵을 로드하고 사용하는 시점까지는 언리얼 엔진 4 가 텍스처에 예약한 메모리 풀 전부를 사용하지 않아, 사실상 (Anisotropy 세팅 변화 말고는) 세팅 차이에 따른 효과를 확인할 수 없을 것입니다.

이펙트

-> 엔진 퀄리티 세팅 -> 이펙트 옵션은 [UE4_InstallPath]/Engine/Config 폴더의 BaseScalaiblity.ini 파일에서 찾을 수 있는 세팅에 맞춰 여러가지 이펙트의 퀄리티를 조절합니다. 낮음 세팅은 sg.EffectsQuality 0 에, 에픽 세팅은 sg.EffectsQuality 3 에 해당합니다.

sg.EffectsQuality 0

sg.EffectsQuality 1

r.TranslucencyLightingVolumeDim=24
r.RefractionQuality=0
r.SSR=0
r.SceneColorFormat=3
r.DetailMode=0
r.TranslucencyVolumeBlur=0
r.MaterialQualityLevel=0
r.TranslucencyLightingVolumeDim=32
r.RefractionQuality=0
r.SSR=0
r.SceneColorFormat=3
r.DetailMode=1
r.TranslucencyVolumeBlur=0
r.MaterialQualityLevel=1

sg.EffectsQuality 2

sg.EffectsQuality 3

r.TranslucencyLightingVolumeDim=48
r.RefractionQuality=2
r.SSR=0
r.SceneColorFormat=3
r.DetailMode=1
r.TranslucencyVolumeBlur=1
r.MaterialQualityLevel=1
r.TranslucencyLightingVolumeDim=64
r.RefractionQuality=2
r.SSR.Quality=1
r.SceneColorFormat=4
r.DetailMode=2
r.TranslucencyVolumeBlur=1
r.MaterialQualityLevel=1

디테일 모드

배치된 각 액터의 Rendering (렌더링) 카테고리에는 Detail Mode (디테일 모드) 프로퍼티가 있습니다. 본질적으로 이 세팅은 액터의 렌더링 최소 디테일 레벨을 정의합니다.

SC_00008.png

엔진 퀄리티 모드는 콘솔에서 변경 가능합니다:

r.DetailMode 1

r.DetailMode 0 = 낮음, r.DetailMode 1 = 중간, r.DetailMode 2 = 높음 디테일 모드입니다.

SC_00005.png

이 옵션을 사용해서 쉽게 데칼, 디테일 오브젝트, 라이트, 개발 파티클 이펙트를 끌 수 있습니다. 이 옵션은 게임플레이에 영향을 끼치지 않는 오브젝트에만 설정하도록 해야 하며, 그렇지 않고서는 네트워크 게임플레이, 세이브 게임, 일관성에 문제가 생길 것입니다.

Material Quality Level

ScaleR_ViewMatQual.png

머티리얼은 "Quality Switch" 표현식을 사용하여 최종 모양에는 효과가 미미하면서 비용은 비싼 머티리얼 부분을 끌 수 있습니다. 그 효과를 확인하기 위해서는 낮음 퀄리티 모드로 토글해야 합니다.

머티리얼 퀄리티 레벨 이 낮음 또는 높음으로 설정될 때마다, 이 머티리얼에 대해 (낮음 핀 또는 높음 핀) 어느 표현식을 구할지 결정합니다. 입력이 없는 경우 기본 핀은 높음 또는 낮음 (또는 양쪽)으로 채웁니다. 이 머티리얼은 높음으로 설정시 꽤나 비용이 많이 드는 펄린 노이즈 연산이 두 개 있습니다:

이 예제는 간단히 Material Switch Node 를 보여드리기 위함입니다. Noise 노드는 정말 비싸서 이 예제에 사용하기는 정말 좋지만, 실제로는 더욱 싼 비용으로 동일한 효과를 내는 방법이 있으니 아껴 사용해야 할 것입니다.

머티리얼 퀄리티 레벨 > 낮음

머티리얼 퀄리티 레벨 > 높음

위의 셰이더 복잡도 모드에서 녹색이 짙어질 수록 셰이더 비용이 많이 드는 것이므로, 높음 퀄리티 머티리얼이 다른 셰이더보다 비용이 높음을 보여줍니다.

퀄리티 스위치를 사용하면 더 많은 셰이더를 컴파일하게 됩니다 (셰이더 치환(permutation)).

이 기능은 퀄리티 레벨 둘을 동시에 가질 수 없기에 거리 LOD 용은 아닙니다. 이 기능으로 감소시킬 수 있는 것은 다음과 같습니다:

  • 셰이더 계산 (퍼지 레이어 끄기)

    • 셰이더 복잡도 (에디터에서 Alt+8) 모드와 인스트럭션 수를 통해 최적화를 확인합니다.

  • 텍스처 룩업 (디테일 범프맵 없음)

  • 메모리 대역폭 (텍스처 덜 사용)

    • 이 부분의 정확한 확인은 실제 하드웨어에서 프로파일링이 필요합니다.

대부분의 머티리얼 에디터 출력은 픽셀 셰이더에만 영향을 끼칩니다. 월드 포지션 오프셋과 모든 테셀레이션 출력은 다른 셰이더 유형에 영향을 끼칩니다. 픽셀 셰이더는 (스카이박스처럼) 화면의 많은 부분을 차지할 때만 비용이 많이 드는 반면, 다른 셰이더는 오브젝트가 컬링되지 (뷰 안에 있고, 불투명 오브젝트 뒤에 숨겨지지) 않은 경우에만 관련이 있습니다.

스켈레탈 메시 LOD Bias

SC_Skeletal.png

스켈레탈 메시는 정적인 레벨 오브 디테일 (LOD) 모델이 가능합니다. r.SkeletalMeshLODBias 콘솔 변수로 LOD 레벨을 글로벌하게 편향(bias)시켜 주는 것이 가능합니다. 첫째 또는 둘째 LOD 의 퀄리티에 따라 엔진 퀄리티 세팅에 이 옵션을 두는 것도 좋은 방법이 될 수 있습니다. 여기서는 거리 의존 LOD 인 경우 상단의 엔진 퀄리티 세팅을 확인할 수 있습니다.

그래스 및 폴리지 퀄리티 조절

-> 엔진 퀄리티 세팅 -> 폴리지 옵션으로 [UE4_InstallPath]/Engine/Config 폴더에 위치한 BaseScalaiblity.ini 파일에서 찾을 수 있는 세팅에 맞춰 한 번에 렌더링되는 폴리지 메시 갯수를 조절할 수 있습니다. 낮음 세팅은 FoliageQuality 0 에, 에픽 세팅은 FoliageQuality 3 에 해당합니다.

폴리지 스태틱 메시가 엔진 퀄리티 세팅에 연동되도록 하기 위해서는 Enable Density Scaling 옵션을 켜줘야 합니다. 이에 대한 상세 정보는 폴리지 툴 문서를 참고하세요.

FoliageQuality 0

FoliageQuality 1

[FoliageQuality@0]
foliage.DensityScale=0
grass.DensityScale=0
[FoliageQuality@1]
foliage.DensityScale=0.4
grass.DensityScale=0.4

FoliageQuality 2

FoliageQuality 3

[FoliageQuality@2]
foliage.DensityScale=0.8
grass.DensityScale=0.8
[FoliageQuality@3]
foliage.DensityScale=1.0
grass.DensityScale=1.0

슬라이더를 잡아 끌면 폴리지에 대한 엔진 퀄리티 세팅을 낮음, 중간, 높음, 에픽으로 했을 때 렌더링되는 폴리지 양에 어떤 변화가 일어나는지 보여줍니다.

엔진 퀄리티 세팅 커스터마이징

UE4 프로젝트에 사용되는 엔진 퀄리티(Scalability) 세팅은 어떤 것이든 커스터마이징 가능합니다. 다음 예제에서는 폴리지에 대한 엔진 퀄리티 세팅을 추가하고 변경해 볼텐데, 그 방법은 다음과 같습니다:

  1. 프로젝트 Config 폴더로 이동하여 DefaultScalability.ini 라는 파일을 새로 만듭니다.

    FGC_Config_Location.png

  2. 새로 생성된 DefaultScalability.ini 파일을 열고 다음 코드 줄을 추가합니다.

    [FoliageQuality@0]
    foliage.DensityScale=.25
    grass.DensityScale=.25
    
    [FoliageQuality@1]
    foliage.DensityScale=0.50
    grass.DensityScale=0.50
    
    [FoliageQuality@2]
    foliage.DensityScale=0.75
    grass.DensityScale=0.75
    
    [FoliageQuality@3]
    foliage.DensityScale=1.0
    grass.DensityScale=1.0

    완료되면 DefaultScalability.ini 파일 안의 정보는 다음 그림과 같을 것입니다. FGC_Config_Info.png

  3. 파일을 저장하면 이제 폴리지 의 엔진 퀄리티 세팅이 바뀔 때, 스폰되는 폴리지 및 랜드스케이프 그래스 스태틱 메시의 양이 선택된 세팅에 따라 늘거나 줄어듭니다.

태그
Select Skin
Light
Dark

새로운 언리얼 엔진 4 문서 사이트에 오신 것을 환영합니다!

문서 사이트에 대한 의견을 모을 수 있는 피드백 시스템을 포함해서 여러가지 새로운 기능을 준비하고 있습니다. 아래 Documentation Feedback 포럼(영문) 또는 언리얼 엔진 네이버 공식 카페(한글) 중 편하신 곳에 의견이나 문제점을 알려 주세요.

새 시스템이 준비되면 알려 드리겠습니다.

네이버 카페
공식 포럼