2020. 7. 29. 11:38ㆍunreal/Unreal ETC
팀내 클라이언트 인력이 부족해
언리얼에서 제공하는 기능을 이용해 게임 그래픽 옵션을 구현했다
언리얼에서 코드를 직접 구현하지 않고 제어할수 있는 그래픽 옵션 기능은
2종류가 있다
1. 게임옵션기능을 사용하는 방법
2. 콘솔 명령어를 사용해서 제어하는 방법
위 이미지와 아래 콘솔 명령어(`키로 호출)는 같은 기능이다
결론은 언리얼 엔진 폴더에 있는 BaseScalability.ini 와 DefaultScalability.ini 파일의 내용을 게임에 불러오는 방식의
차이일뿐 같은 내용을 쓰게된다
요청받은 내용은 아래와 같다
1. 일반적인 그래픽 옵션 필요
2. 게임 모델에 맞는 최적화 성능 필요
3. 일반적인 그래픽 옵션을 조절하더라도 연출시 효과가 어느정도 유지될수 있도록
4. 아주 좋지 않은 컴퓨터에서도 실행은 가능하도록 - 그래픽 퀄 유지보다는 실행을 위주로
5. 컴퓨터 성능관련 자동 체크 기능 필요
위 조건을 고려해 제공하려한 그래픽 옵션을 세부 내용적으로 정리했다
-
더보기게임옵션
- 화면 해상도
- 해상도
- 수직동기화
- 커서잠금(창모드시)
- 최대 fps 제한(30 / 60 / 무제한)
- 레터박스(옵션으로 제공안함 기본적용)
- 커서잠금(창모드시)
- 화면 밝기 조절
- 감마(슬라이드)
- 대비(슬라이드)
- 감마(슬라이드)
- 최대 가시거리 - 3단계 적용최대 가시거리 - 3단계 적용
- 케릭터 표현
- 케릭터 표현 수(상중하) / 실루엣 표현안함 옵션 별도 재공(체크박스)
- 상-가시거리내 전체표현
- 중-아군및 파티원만 표현 나무지는 실루엣으로
- 하-내케릭터만 표현 나머지는 실루엣으로
- 실루엣 표현안함 체크시 아예 그리지 않음
- 케릭터 표현 퀄리티
- 상 - 텍스쳐 full, 머터리얼 상, 모델링 상, 라이팅 풀, 애니매이션 풀
- 중 - 텍스쳐 full, 머터리얼 중, 모델링 중, 라이팅 풀, 애니매이션 75% 업데이트
- 하 - 텍스쳐 half, 머터리얼 하, 모델링 상, 케릭터 전용 라이팅 끔, 애니매이션 50 업데이트
- 상-가시거리내 전체표현
- 케릭터 표현 수(상중하) / 실루엣 표현안함 옵션 별도 재공(체크박스)
- 배경 표현
- 배경 표현 퀄리티(상중하없음)
- 상-멀리 떨어진 지면 사물도 높은 밀도로 표현 / 최대 lod 감소율 기본 지정값
- 중-적당히 떨어진 지면 사물을 중간 밀도로 표현 / 최대 lod 감소율 50%
- 하-가까이 있는 지면 사물을 낮은 밀도로 표현 / 최대 lod 감소율 75%
- 메쉬 lod 옵션에서 일괄적용
- 배경 효과 퀄리티(상중하없음)
- 상-반사 최고 퀄리티/ 블룸 및 포그 최대 / 기후 이펙트 최대
- 중-반사 중간 퀄리티 / 불룸 및 포그중간 / 기후 이펙트 최소
- 하-반사 없음 / 블룸 및 포그하 / 기후이펙트 없음
- 없음-화면 효과 (포스트 프로세서) 없음 / 기후 이펙트 없음
- 상-멀리 떨어진 지면 사물도 높은 밀도로 표현 / 최대 lod 감소율 기본 지정값
- 배경 표현 퀄리티(상중하없음)
- 이펙트 표현
- 이펙트 퀄리티(상중하 이펙트 끔)
- 상 - 텍스쳐 full / 머터리얼 상 / 파티클 갯수full
- 중 - 텍스쳐 full / 머터리얼 상 / 파티클 갯수half
- 하 - 텍스쳐 half / 머터리얼 하 / 파티클 개수quarter
- 끔 - 모든 이펙트 끔
- 이펙트 표현 수(나만 / 아군만 / 전부)
- 이펙트 표현 거리(슬라이드로 1-3)
- 이펙트 퀄리티(상중하 이펙트 끔)
- 화면품질(포스트프로세서퀄리티세팅)
- 그림자 품질(쉐도우 퀄리티)
- 특수효과
- 비네트
- 모션블러
- 전투ui 표현(켬끔)전투ui 표현(켬끔)
- 아군 에너지 바아군 에너지 바
- 적에너지 바적에너지 바
- 다른 플레이어 이름다른 플레이어 이름
- 피격 효과(크리티컬 방어등 ui)피격 효과(크리티컬 방어등 ui)
- 피격 데미지(데미지 숫자 ui)피격 데미지(데미지 숫자 ui)
- 타격효과(크리티컬, miss 등 ui)타격효과(크리티컬, miss 등 ui)
- 타격데미지(데미지 숫자 ui)타격데미지(데미지 숫자 ui)
- 드롭 아이템 이름드롭 아이템 이름
- 화면 해상도
위 내용중 붉은 글씨로 표현된 부분은 게임 코드로 제어해야할 부분으로 미리 제외했음
그리고 기본적인 scalability 파일에 포함할수 없는 내용들을 제어하기위해 콘솔 명령어를 섞어서 사용하고 싶으나
우선순위 정렬이슈가 있어 같이 사용할수 없습니다.
IConsoleManager.h 를 보면
// lowest priority (default after console variable creation)
ECVF_SetByConstructor = 0x00000000,
// from Scalability.ini
ECVF_SetByScalability = 0x01000000,
// (in game UI or from file)
ECVF_SetByGameSetting = 0x02000000,
// project settings
ECVF_SetByProjectSetting = 0x03000000,
// per device setting
ECVF_SetByDeviceProfile = 0x04000000,
// per project setting
ECVF_SetBySystemSettingsIni = 0x05000000,
// consolevariables.ini (for multiple projects)
ECVF_SetByConsoleVariablesIni = 0x06000000,
// a minus command e.g. -VSync
ECVF_SetByCommandline = 0x07000000,
// least useful, likely a hack, maybe better to find the correct SetBy...
ECVF_SetByCode = 0x08000000,
// editor UI or console in game or editor ECVF_SetByConsole = 0x09000000,
실제로 게임 코드로 제작하게되면 모두 같은 우선순위를 갖고있기에 세부옵션 조절등이 수월하나
현재 그부분을 만족시킬수 없어서 별도로 조절해야하는 부분중에 파일안에 포함할 수 있는 부분은 포함하고
별도로 제어 가능한 부분은 제어하도록 변경했습니다.
기본적인 옵션만 설정 가능하게 제작한 샘플 ui 입니다.
블루프린트 부분은 실제로 매우 간단하며 2-3종류로 나뉘게 됩니다.
그래픽 퀄리티 세팅 블루프린트
그래픽 관련 블루프린트는 그래픽 세팅에 맞춰 퀄리티 세팅에 숫자만 맞춰서 넣어주고(실제 게임에 사용될거라면 저렇게 하지 않겟지만.. 샘플이니)게임유저 세팅에 적용해주면됩니다.
이렇게 버튼 클릭시 바로 적용이 아니라 한번에 세팅하고 적용 버튼을 눌러서 작동시키는 방식을 구현하실거면
하단부에 게임유저세팅에 적용하는 apply setting부분을 버튼이벤트에 물려주시면 됩니다.
비그래픽(해상도 관련)세팅
해상도
창모드
등등 대부분 이런형식으로 언리얼에서 대부분 제공해주는 api들이니 자기의 프로젝트에 맞는 옵션들을 찾아보면 더욱 많은 조절기능을 제공할 수 있습니다.(이 글은 블루프린트제장을 설명하지 않습니다)
별도 세팅
하드웨어 자동 체크 및 적용
자동체크는 무조건 필요하다는 요청이 있어 이 기능을 사용하기위해 콘솔 명령어 세트로 제작하려던 방법을 폐기했습니다. 처음에는 c++쪽으로 다 옮겨서 제작할까 하다 추후에 클라분들이 어차피 재작업 해야할거같아서..
현재 하드웨어의 성능을 벤치마크해서 옵션 파일에서 설정한 값에 맞춰 세팅을 해줍니다.
실제 하드웨어에 맞게 모든것을 바꿔주는게 아니고 하드웨어의 성능만을체크해서 scalability파일의 퀄리티 레벨을 변경해주는것이므로
scalability.ini 파일 수정이 가장 큰 영향을 줍니다.
이 블로그의 목적또한 엄청 애매한 scalability.ini 파일의 무수한 항목을 조금이나마 쉽게 풀어서 설명하는것이 목적입니다.
그리고 글 처음에 썻듯이
정말 최소의 하드웨어 스펙이라도 실행이 되게 해주면 좋겟다. 라고 요청이 있었습니다.
언리얼엔진에서 제공하는 옵션수는 5개로 0-4가 있습니다.
하지만 수동으로 설정 가능한 옵션은 퀄리티 레벨 1 부터 3까지고 (4레벨은 사용하지 않았습니다)
0레벨은 자동 세팅에서만 적용되어 매우 안좋은 피씨에서는 대부분의 화면효과를 끄고 실행되도록 해두었습니다.
모션블러 온오프
그외에 scalability 파일에 넣기 애매하거나 안들어가는 명령어들은 이렇게 직접 콘솔명령어 실행노드로 실행해줍니다
위 이미지는 모션블러 강도를 조절하는 콘솔 명령어를 이용해 본인 프로젝트에 맞는 적당한 값을 적용해줍니다
위 콘솔명령어(execute console command) 로 지정한 항목들은 위에 apply setting 노드들로 오버라이드가 되지 않기때문에
실행전에 기본값으로 돌려두거나
이런식으로 자동세팅 완료후 세팅된 퀄리티 레벨을 기반으로 다시 수동으로 적용해주어야 합니다(블루프린트로 개발시)
전체적인 옵션들은 대부분 이런식으로 적용하고 불가능한 기능들(렌더링 갯수 제한등등)은 추후 클라팀에 개발시 진행요청을 하였습니다.
실제로 소규모 프로젝트에서 직접 이 블루프린트로 상당 부분 만들어야할 경우는 이렇게 클릭시 바로바로 적용되게 만들기 보다는 위에 블러세팅하듯이 실제 퀄리티 레벨의 int만 지정하고 한번에 apply settins 를 적용해주는것이 더욱 수월합니다(수정하는것도 작업하는것도 포함)
Scalability.ini
언리얼프로젝트에는 scalability 파일이 두곳에 있습니다.(디바이스마다 생성할수도 있지만 이건 제외하겠습니다)
언리얼 엔진에 1개 프로젝트 폴더에 1개
위치는 둘다 congfig폴더에 있습니다. 엔진 파일은 BaseScalability.ini 이며 프로젝트에는 DefaultScalability.ini 입니다(다른 세팅파일들도 대부분 이러한 형식을따릅니다)
엔진의 파일을 먼저 적용하고 프로젝트의 파일을 덮어씌워서 실행합니다.
혹시라도 scalability 파일내의 항목을 제거하거나 옮기려면 엔진파일과 프로젝트 파일전부 적용해줘야 합니다.
저도 쉐이더 변경+텍스쳐 변경을 동시에 하기위해 materialquility 세팅을 이펙트 파트에서 제외하고 옮겼습니다.
그리고 몇몇 r. 로 시작하는 콘솔 커맨드는 scalability 파일에서 실행되지 않는 경우가 있습니다.
이런부분은 본인이 필요한 기능을 추가해보고 안되면 제외하고 콘솔 커맨드쪽으로 옮겨주면 되겠습니다.(모션블러 참고)
일단 엔진쪽의 파일을 카피해서 프로젝트 내에 아래의 이름으로 붙여 두고 필요한 내용을 수정하시면 됩니다.
; 아래 파일은 제가 저의 프로젝트에 맞게 수정한 수치들입니다.
엔진에서 주는 기본값은 0-1-2를 주로 설정하게 되있어서 1-2-3을 사용하게 되어 수정을 상당히 많이 한 편입니다.
;퀄리티 레벨 0은 대부분의 기능을 껏기에 설명은 퀄리티레벨 1로 진행하도록 하겠습니다
defaultScalability.ini
;
; Base scalability settings
; =========================
;
; The definitions here affect the console variables starting with "sg." and define the user quality levels (game/editor video settings)
; To override a specific platform use DeviceProfile.ini (whach out for the different syntax).
;
;-----------------------------------------------------------------------------------------------------------------
; Note: [ResolutionQuality] isn't using the usual 0/1/2/3 quality levels, the value directly maps to r.ScreenPercentage.
; This is because we want custom scaling aligned with the screen/window resolution with more fine grained control
;
;-----------------------------------------------------------------------------------------------------------------
[ScalabilitySettings]
; PerfIndexThresholds는 각 그룹에 대해 자동 감지 된 품질을 결정하는 임계 값을 정의합니다.
; 성능을 자동으로 감지하면 시스템에서 CPUIndex와 GPUIndex가 모두 계산됩니다.
; 콘솔 명령 "scalability auto"를 사용하여 머신에 대한이 값을 인쇄하십시오.
; 그룹의 품질을 결정하는 데 사용되는 perfindex의 유형은 GPU, CPU 또는 Min입니다.
; GPU는 품질이 그래픽 카드의 속도를 기반으로한다는 것을 의미합니다. CPU는 품질이 프로세서를 기반으로하고 Min은 그룹 품질이 CPU 또는 GPU를 느리게 기반으로한다는 것을 의미합니다.
; 각 그룹에는 유형과 3 개의 숫자가 있습니다.
; 첫 번째 숫자는 품질을 0에서 1로 변경하는 perfindex 임계 값입니다. 두 번째는 1에서 2까지의 임계 값이며, 세 번째는 2에서 3의 임계 값입니다.
; PerfIndexThresholds_ResolutionQuality = "GPU 18 42115"
PerfIndexThresholds_ViewDistanceQuality = "Min 18 42105"
PerfIndexThresholds_AntiAliasingQuality = "GPU 18 42115"
PerfIndexThresholds_ShadowQuality = "최소 18 42105"
PerfIndexThresholds_PostProcessQuality = "GPU 18 42115"
PerfIndexThresholds_TextureQuality = "GPU 18 42115"
PerfIndexThresholds_EffectsQuality = "Min 18 42105"
PerfIndexThresholds_FoliageQuality = "GPU 18 42115"
;단순히 설명하자면 위 숫자와 글자들은 각 퀄리티 레벨을 자동세팅으로 설정했을때 어느정도 퍼포먼스가 나오면 퀄리티 레벨을 변하게 할것인지에대한 내용입니다. 대충 기본값으로 두고 쓰셔도되는걱같습니다.
; 25 % 픽셀, 50 % 픽셀, 75 % 픽셀 및 100 % 픽셀에 해당하는 해상도 품질의 화면 비율입니다.
; PerfIndexValues_ResolutionQuality = "80100100100100"
; 업 샘플링과정 적용
[AntiAliasingQuality@0]
r.PostProcessAAQuality=1
r.ScreenPercentage=50
r.Upscale.Quality=1 ; 가장 가벼움 저퀄리티 전용
[AntiAliasingQuality@1];이 대괄호 안에 있는 내용은 엔진에서 실행하는 묶음 내용입니다. 안티알리아싱퀄리티 레벨1로 세팅하면 하단에 4줄의 명령어가 실행되는 구조입니다.
r.PostProcessAAQuality=2 ;포스트 프로세서 세팅 퀄리티 수가 올라가면 말그대로 포스트계산을 정밀하게 해줍니다
r.ScreenPercentage=75 ;화면 렌더링 퍼센테이지 입니다. 75프로만 렌더링해서 크게 확대(업샘플링) 해줍니다.
;r.TemporalAA.Upsampling=1 ; 템포럴 업샘플링 활성화;이 기능은 scalability 안에서 실행이 되지 않습니다. 콘솔에 따로 빼줘야 하며 구지 100프로 이상일때는 업샘플링을 할 필요 없어서 꺼주는등의 효과를 내줍니다.
r.Upscale.Quality=2 ; 기본값;업스케일링 퀄리티를 설정해주는데 퀄리티 레벨에 맞는 계산식이 별도로 존재하며 퍼포먼스에 영향을 상당히 많이 주는 항목입니다.
[AntiAliasingQuality@2]
r.PostProcessAAQuality=4
r.ScreenPercentage=85
;r.TemporalAA.Upsampling=1 ; 템포럴 업샘플링 활성화
r.Upscale.Quality=4 ; 기본업샘플링
[AntiAliasingQuality@3]
r.PostProcessAAQuality=6
r.ScreenPercentage=100
;r.TemporalAA.Upsampling=0 ; 템포럴 업샘플링 비 활성화
r.Upscale.Quality=6 ; 비싼 업샘플링
[AntiAliasingQuality@Cine]
r.PostProcessAAQuality=6
;-----------------------------------------------------------------------------------------------------------------
[ViewDistanceQuality@0]
r.SkeletalMeshLODBias=1
r.ViewDistanceScale=0.5 ;
r.StaticMeshLODDistanceScale=2
[ViewDistanceQuality@1]
r.SkeletalMeshLODBias=0;스켈레탈 메쉬 lod 강제 설정할 수 있습니다. 이 값이 1이 되면 모든 스켈레탈 메쉬는 lod1번이 기본값이 됩니다.
r.ViewDistanceScale=0.7 ;현재엔진에설정된viewdistancecull이나 r.follagedistance scale 등등 디스턴스 관련된 옵션들의 값을 증가합니다. 1이면 원래 값
r.StaticMeshLODDistanceScale=1.5 ;메쉬 lod 값을 증가 시킵니다. 값이 늘면 점점더 가까이서 메쉬lod가 시작됩니다.
[ViewDistanceQuality@2]
r.SkeletalMeshLODBias=0
r.ViewDistanceScale=1
r.StaticMeshLODDistanceScale=1.2
[ViewDistanceQuality@3]
r.SkeletalMeshLODBias=0
r.ViewDistanceScale=1
r.StaticMeshLODDistanceScale=1
[ViewDistanceQuality@Cine]
r.SkeletalMeshLODBias=0
r.ViewDistanceScale=10.0
;-----------------------------------------------------------------------------------------------------------------
[ShadowQuality@0]
r.LightFunctionQuality=0
r.ShadowQuality=0
r.Shadow.CSM.MaxCascades=0
r.Shadow.MaxResolution=128
r.Shadow.MaxCSMResolution=12
r.Shadow.RadiusThreshold=0.06
r.Shadow.DistanceScale=0.4
r.Shadow.CSM.TransitionScale=0
r.Shadow.PreShadowResolutionFactor=0.5
r.DistanceFieldShadowing=0
r.DistanceFieldAO=0
r.VolumetricFog=0
r.LightMaxDrawDistanceScale=0
[ShadowQuality@1] ;게임 퍼포먼스에 가장 영향을 많이주는 기능들이 포함되있습니다.(저의 프로젝트는 실시간 라이트를 사용하는 프로젝트입니다)
r.LightFunctionQuality=1 ;라이트 펑션 커스텀 라이트 함수 관련된 퀄리티입니다 기능을 사용하지 않더라도 기본값은 유지가 되는것이 좋습니다.
r.ShadowQuality=2 ;그림자 퀄리티를 제어하며 이 숫자와 아래라인의 숫자가 서로 매우 민감하게 반응합니다.;단순히 숫자를 높이면 그림자 퀄리티가 높아지는것이 아니라 퀄리티와 maxcascade가 높고 maxcsmresolurtion이 낮다면 매우 뭉게진 그림자가 나오게 됩니다.
;일단 게임 퀄리티에 맞춰 해상도를 할당하고( r.Shadow.MaxCSMResolution)그해상도에 맞춰퀄리티와 캐스케이드 숫자를 조절하는게더빠른것같습니다/
r.Shadow.CSM.MaxCascades=3 ;그림자를 그리는 캐스케이드 수며 퍼포먼스에 영향을 많이 줍니다. 이수치보다 다른수치를 조절해서 원하는 그림자의 퀄리티가 나오게된다면 최저치를 유지하는것이 좋습니다.
저의 프로젝트의 경우는 폴리지 실시간 쉐이딩을 하기위해 어쩔수 없이 3이상을 사용하였습니다.
r.Shadow.MaxResolution=256 ;csm쉐도우를 사용하기때문에 변경해도 상관없습니다 그림자의 해상도를 결정합니다.
r.Shadow.MaxCSMResolution=1024 ;csm 쉐도의 해상도 설정 렌더타겟 텍스쳐의 사이즈이므로 퍼포먼스에 영향을 많이줌 최소한의 수치를 유지할수 있으면 해주는것이 좋습니다.
실제로 저 3개의 수치가 매우매우 중요하고 일반적인 스태틱메쉬는 라이트맵을 사용하고 케릭터만 실시간을 쓰는 프로젝트라면 퀄리티를 좀 높이고 3정도 캐스케이드랑 레졸루션을 낮추는것으로 상당히 저렴한 실시간 그림자를 사용할 수 있습니다.
r.Shadow.RadiusThreshold=0.05
r.Shadow.DistanceScale=0.75 ;그림자 그리는 거리입니다. 거리관련된 항목은 모두 다 곱계산으로 처리되므로 직접 설정하고 화면에서 확인하셔야 합니다.
r.Shadow.CSM.TransitionScale=0.5
r.Shadow.PreShadowResolutionFactor=0.5
r.DistanceFieldShadowing=0
r.DistanceFieldAO=0
r.VolumetricFog=1 ; 볼륨포그를 끄진 않음 최저치 유지
r.VolumetricFog.GridPixelSize=32 ;볼륨 포그의 1그리드의 픽셀사이즈인데 간단히 볼륨 포그를 사용할때 얼마나 정밀하게 그릴것인가 하는겁니다.
특정 씬에서 볼륨포그로 연출 시 이 값이 낮으면(현재 매우 낮음) 볼륨 포그가 제대로 나오지 않습니다.
전체적으로 물안개정도로 정밀도가 낮은 볼륨포그만을 쓰고 특정 레벨에서만 고해상도를 쓰게된다면
레벨및 이벤트트리거시 이 값을 변경해서 적용해주면됩니다.(숫자가 낮아지면 정밀해집니다. 2가 최소치)
r.VolumetricFog.GridSizeZ=32 ;볼륨 포그의 깊이 뎊스의 해상도를 설정합니다 복셀 연출을 사용할때 중요한 수치이며 복셀 연출을 사용하지 않는다면 최소치를 유지해줍시다(값이 높아지면 정밀해집니다.)
r.VolumetricFog.HistoryMissSupersampleCount=1
r.LightMaxDrawDistanceScale=.5
[ShadowQuality@2]
r.LightFunctionQuality=1
r.ShadowQuality=3
r.Shadow.CSM.MaxCascades=3 ; 그림자 선명도 연관 퀄리티가 3이고 캐스캐이드가 4이상일때 그림자가 또렷해지면서 지저분해지지 않음
r.Shadow.MaxResolution=512
r.Shadow.MaxCSMResolution=2048
r.Shadow.RadiusThreshold=0.03
r.Shadow.DistanceScale=1
r.Shadow.CSM.TransitionScale=0.8
r.Shadow.PreShadowResolutionFactor=0.5
r.DistanceFieldShadowing=1
r.DistanceFieldAO=1
r.AOQuality=1
r.VolumetricFog=1
r.VolumetricFog.GridPixelSize=16
r.VolumetricFog.GridSizeZ=64
r.VolumetricFog.HistoryMissSupersampleCount=4
r.LightMaxDrawDistanceScale=1
[ShadowQuality@3]
r.LightFunctionQuality=1
r.ShadowQuality=3 ; 그림자 선명도 연관 퀄리티가 3이고 캐스캐이드가 4이상일때 그림자가 또렷해지면서 지저분해지지 않음 해상도도 어느정도 지원되야함
r.Shadow.CSM.MaxCascades=4
r.Shadow.MaxResolution=2048
r.Shadow.MaxCSMResolution=4096
r.Shadow.RadiusThreshold=0.02
r.Shadow.DistanceScale=1.2
r.Shadow.CSM.TransitionScale=1.0
r.Shadow.PreShadowResolutionFactor=1.0
r.DistanceFieldShadowing=1
r.DistanceFieldAO=1
r.AOQuality=2
r.VolumetricFog=1
r.VolumetricFog.GridPixelSize=8
r.VolumetricFog.GridSizeZ=128
r.VolumetricFog.HistoryMissSupersampleCount=4
r.LightMaxDrawDistanceScale=1
[ShadowQuality@Cine]
r.LightFunctionQuality=1
r.ShadowQuality=5
r.Shadow.CSM.MaxCascades=10
r.Shadow.MaxResolution=4096
r.Shadow.MaxCSMResolution=4096
r.Shadow.RadiusThreshold=0
r.Shadow.DistanceScale=1.0
r.Shadow.CSM.TransitionScale=1.0
r.Shadow.PreShadowResolutionFactor=1.0
r.DistanceFieldShadowing=1
r.DistanceFieldAO=1
r.AOQuality=2
r.VolumetricFog=1
r.VolumetricFog.GridPixelSize=4
r.VolumetricFog.GridSizeZ=128
r.VolumetricFog.HistoryMissSupersampleCount=16
r.LightMaxDrawDistanceScale=1
r.CapsuleShadows=1
;-----------------------------------------------------------------------------------------------------------------
;포스트 관련 옵션은 정지화면으로는 크게 차이가 안날수 있으니(dof / motion blur / ao 등) 하나식 적용해가며 확인 해보는것이 좋습니다. 옵션수치는 참고용
실제 언리얼 문서에서 자세하고 많은 내용을 참고할 수 있습니다.
http://ue4.su/ru/Engine/Rendering/PostProcessEffects/index.html
[PostProcessQuality@0]
r.MotionBlurQuality=0
r.DepthOfFieldQuality=0
r.BloomQuality=1
r.LightShaftQuality=0.0
r.Tonemapper.Quality=0.5
r.LensFlareQuality=0
r.AmbientOcclusionMipLevelFactor=0.0
r.AmbientOcclusionMaxQuality=45
r.AmbientOcclusionLevels=-1
r.AmbientOcclusionRadiusScale=1.8
r.RenderTargetPoolMin=350
r.SceneColorFringeQuality=0.5
r.EyeAdaptationQuality=0.5
r.FastBlurThreshold=50
r.Upscale.Quality=1
r.Tonemapper.GrainQuantization=0
r.Filter.SizeScale=0.5
[PostProcessQuality@1]
;포스트 프로세서 관련된 세팅입니다. 포스트프로레서에서는 끄게되면 화면에 직접 적으로 보이는 부분이 많이 차이가 나므로 퀄리티 유지를 위해서 필요한 부분을 직접 찾아서 세팅을 해주는것이 좋습니다.
특히 불룸이나 ao등은 모든 퀄리티에서 유지시켜줘야 게임의 분위기를 해치지 않습니다.
r.MotionBlurQuality=0 ;모션블러 퀄리티 세팅 0이면 꺼집니다. 퍼포먼스에 영향을 많이 주는 편입니다.
r.DepthOfFieldQuality=0
r.BloomQuality=1 ;불룸퀄리티입니다. 0으로 갈경우 꺼지지만 퀄리티 저하가 심하므로 최저치를 유지하고 세부내용을 조절해주는 편이 좋습니다.
r.LightShaftQuality=0.35 ;볼류메트릭 라이트닝 샤프트(빛줄기) 퀄리티를 조절하며 숲지역 안개지역등 특히 필요한 부분은 레벨 시작시 수정해서 가산치를 줘서 표현해주는것이 좋습니다.
r.Tonemapper.Quality=1
r.LensFlareQuality=0
r.AmbientOcclusionMipLevelFactor=0.0
r.AmbientOcclusionMaxQuality=45
r.AmbientOcclusionLevels=-1
r.AmbientOcclusionRadiusScale=1.8 ;포스트에서 제공하는 ao 거리스케일입니다. 값을 키우면 스케일이 늘어나서 계산이 줄어들게됩니다. 너무 키우면 전체적으로 화면이 어두워지게됩니다.
r.RenderTargetPoolMin=350
r.SceneColorFringeQuality=0.5
r.EyeAdaptationQuality=0.5
r.FastBlurThreshold=50
r.Upscale.Quality=2
r.Tonemapper.GrainQuantization=0
r.Filter.SizeScale=0.5
; DOF settings.
r.DOF.Gather.AccumulatorQuality=0 ; lower gathering accumulator quality
r.DOF.Gather.PostfilterMethod=2 ; Max3x3 postfilering method
r.DOF.Gather.EnableBokehSettings=0 ; no bokeh simulation when gathering
r.DOF.Gather.RingCount=3 ; low number of samples when gathering
r.DOF.Scatter.ForegroundCompositing=0 ; no foreground scattering
r.DOF.Scatter.BackgroundCompositing=0 ; no foreground scattering
r.DOF.Recombine.Quality=0 ; no slight out of focus
r.DOF.TemporalAAQuality=0 ; faster temporal accumulation
r.DOF.Kernel.MaxForegroundRadius=0.006 ; required because low gathering and no scattering and not looking great at 1080p
r.DOF.Kernel.MaxBackgroundRadius=0.006 ; required because low gathering and no scattering and not looking great at 1080p
[PostProcessQuality@2]
r.MotionBlurQuality=1
r.LensFlareQuality=0
r.DepthOfFieldQuality=2
r.BloomQuality=2
r.LightShaftQuality=0.75
r.Tonemapper.Quality=2
r.AmbientOcclusionMipLevelFactor=0.2
r.AmbientOcclusionMaxQuality=65
r.AmbientOcclusionLevels=-1
r.AmbientOcclusionRadiusScale=1.2
r.RenderTargetPoolMin=700
r.SceneColorFringeQuality=1
r.EyeAdaptationQuality=1
r.FastBlurThreshold=100
r.Upscale.Quality=4
r.Tonemapper.GrainQuantization=0.75
r.Filter.SizeScale=0.75
; DOF settings.
r.DOF.Gather.AccumulatorQuality=0 ; lower gathering accumulator quality
r.DOF.Gather.PostfilterMethod=2 ; Max3x3 postfilering method
r.DOF.Gather.EnableBokehSettings=0 ; no bokeh simulation when gathering
r.DOF.Gather.RingCount=4 ; medium number of samples when gathering
r.DOF.Scatter.ForegroundCompositing=1 ; additive foreground scattering
r.DOF.Scatter.BackgroundCompositing=1 ; no background occlusion
r.DOF.Scatter.EnableBokehSettings=0 ; no bokeh simulation when scattering
r.DOF.Scatter.MaxSpriteRatio=0.04 ; only a maximum of 4% of scattered bokeh
r.DOF.Recombine.Quality=0 ; no slight out of focus
r.DOF.TemporalAAQuality=0 ; faster temporal accumulation
r.DOF.Kernel.MaxForegroundRadius=0.012 ; required because of AccumulatorQuality=0
r.DOF.Kernel.MaxBackgroundRadius=0.012 ; required because of AccumulatorQuality=0
[PostProcessQuality@3]
r.MotionBlurQuality=4
r.DepthOfFieldQuality=4
r.LensFlareQuality=3
r.BloomQuality=5
r.LightShaftQuality=1
r.Tonemapper.Quality=5
r.AmbientOcclusionMipLevelFactor=0.4
r.AmbientOcclusionMaxQuality=100
r.AmbientOcclusionLevels=-1
r.AmbientOcclusionRadiusScale=1.0
r.RenderTargetPoolMin=1000
r.SceneColorFringeQuality=1
r.EyeAdaptationQuality=2
r.FastBlurThreshold=100
r.Upscale.Quality=6
r.Tonemapper.GrainQuantization=1
r.Filter.SizeScale=1
; DOF settings.
r.DOF.Gather.AccumulatorQuality=1 ; higher gathering accumulator quality
r.DOF.Gather.PostfilterMethod=1 ; Median3x3 postfilering method
r.DOF.Gather.EnableBokehSettings=0 ; no bokeh simulation when gathering
r.DOF.Gather.RingCount=4 ; medium number of samples when gathering
r.DOF.Scatter.ForegroundCompositing=1 ; additive foreground scattering
r.DOF.Scatter.BackgroundCompositing=2 ; additive background scattering
r.DOF.Scatter.EnableBokehSettings=1 ; bokeh simulation when scattering
r.DOF.Scatter.MaxSpriteRatio=0.1 ; only a maximum of 10% of scattered bokeh
r.DOF.Recombine.Quality=1 ; cheap slight out of focus
r.DOF.Recombine.EnableBokehSettings=0 ; no bokeh simulation on slight out of focus
r.DOF.TemporalAAQuality=1 ; more stable temporal accumulation
r.DOF.Kernel.MaxForegroundRadius=0.025
r.DOF.Kernel.MaxBackgroundRadius=0.025
[PostProcessQuality@Cine]
r.MotionBlurQuality=4
r.AmbientOcclusionMipLevelFactor=0.4
r.AmbientOcclusionMaxQuality=100
r.AmbientOcclusionLevels=-1
r.AmbientOcclusionRadiusScale=1.0
r.DepthOfFieldQuality=4
r.RenderTargetPoolMin=1000
r.LensFlareQuality=3
r.SceneColorFringeQuality=1
r.EyeAdaptationQuality=2
r.BloomQuality=5
r.FastBlurThreshold=100
r.Upscale.Quality=4
r.Tonemapper.GrainQuantization=1
r.LightShaftQuality=1
r.Filter.SizeScale=1
r.Tonemapper.Quality=5
; DOF settings.
r.DOF.Gather.AccumulatorQuality=1 ; higher gathering accumulator quality
r.DOF.Gather.PostfilterMethod=1 ; Median3x3 postfilering method
r.DOF.Gather.EnableBokehSettings=0 ; no bokeh simulation when gathering
r.DOF.Gather.RingCount=4 ; medium number of samples when gathering
r.DOF.Scatter.ForegroundCompositing=1 ; additive foreground scattering
r.DOF.Scatter.BackgroundCompositing=2 ; additive background scattering
r.DOF.Scatter.EnableBokehSettings=1 ; bokeh simulation when scattering
r.DOF.Scatter.MaxSpriteRatio=0.1 ; only a maximum of 10% of scattered bokeh
r.DOF.Recombine.Quality=1 ; cheap slight out of focus
r.DOF.Recombine.EnableBokehSettings=0 ; no bokeh simulation on slight out of focus
r.DOF.TemporalAAQuality=1 ; more stable temporal accumulation
r.DOF.Kernel.MaxForegroundRadius=0.025
r.DOF.Kernel.MaxBackgroundRadius=0.025
;-----------------------------------------------------------------------------------------------------------------
[TextureQuality@0]
;텍스쳐 관련 메모리나 사이즈 설정을 할 수 있습니다.
그냥 직관적으로 알 수 있는 내용이니 따로 설명은 하지 않겠습니다.
저의 프로젝트에서는 텍스쳐 옵션이랑 머터리얼 옵션을 동시에 조절하기위해 머터리얼 퀄리티레벨만 이쪽으로 옮겼습니다.
r.MaterialQualityLevel=0 ;// 마테리얼 퀄리티레벨 낮음
r.Streaming.MipBias=0
r.MaxAnisotropy=0
r.Streaming.LimitPoolSizeToVRAM=1
r.Streaming.PoolSize=500
r.Streaming.MaxEffectiveScreenSize=0
[TextureQuality@1]
r.MaterialQualityLevel=0 ;// 마테리얼 퀄리티레벨 낮음
r.MaxAnisotropy=2
r.Streaming.LimitPoolSizeToVRAM=1
r.Streaming.PoolSize=1000
r.Streaming.MaxEffectiveScreenSize=0
[TextureQuality@2]
r.MaterialQualityLevel=2 ;// 마테리얼 퀄리티레벨 중간
r.Streaming.MipBias=1
r.MaxAnisotropy=4
r.Streaming.LimitPoolSizeToVRAM=1
r.Streaming.PoolSize=2000 ;
r.Streaming.MaxEffectiveScreenSize=0
[TextureQuality@3]
r.MaterialQualityLevel=1 ;// 마테리얼 퀄리티레벨 높음
r.Streaming.MipBias=0
r.MaxAnisotropy=8
r.Streaming.LimitPoolSizeToVRAM=0
r.Streaming.PoolSize=0 ; 무제한
r.Streaming.MaxEffectiveScreenSize=0
[TextureQuality@Cine]
r.MaterialQualityLevel=3
r.Streaming.MipBias=0
r.MaxAnisotropy=8
r.Streaming.LimitPoolSizeToVRAM=0
r.Streaming.PoolSize=5000
r.Streaming.MaxEffectiveScreenSize=0
;-----------------------------------------------------------------------------------------------------------------
;이펙트 관련 세팅입니다.
이펙트 최적화는 scalability 에서 할수 있는 부분이 적은편입니다.
실제 게임에서 자주 사용되는 내 이펙트만 표현 파티원만 표현등등은 테그를 활용해 실제 재생을 하지 않는식으로 구현을 진행하기에 이 세팅파일에서 중요하게 다룰부분은
캐스케이드를 사용하는 이펙트 내부에서 디테일모드 설정을 진행하고 거리에따른 디테일 모드 변화등을 직접 적용해주는등의 작업이 필요합니다.
[EffectsQuality@0]
r.TranslucencyLightingVolumeDim=24
r.RefractionQuality=0
r.SSR.Quality=0
r.SceneColorFormat=1
r.DetailMode=0
r.TranslucencyVolumeBlur=0
r.SSS.Scale=0
r.SSS.SampleSet=0
r.SSS.Quality=0
r.SSS.HalfRes=1
r.EmitterSpawnRateScale=0.125
r.ParticleLightQuality=0
[EffectsQuality@1]
r.TranslucencyLightingVolumeDim=24
r.RefractionQuality=0
r.SSR.Quality=0 ;스크린스페이스 리플렉션입니다. 리플렉션 퀄리티와 연동되며 퍼포먼스영향이 어느정도 있습니다.
r.SceneColorFormat=2 ;씬 컬러 포맷을 설정합니다. 정확한 옵션문서를 찾지는 못했지만 2이상이
*sss등의 스크린스페이스 기능을 사용가능한것 같음(엔진 기본값은 3-4 입니다)
r.DetailMode=0 ;캐스케이드 디테일 모드 설정입니다.
r.TranslucencyVolumeBlur=0
r.SSS.Scale=0
r.SSS.SampleSet=0
r.SSS.Quality=0 ;sss기능을 강제로 끕니다 관련된 기능들은 작동하지 않습니다.
r.SSS.HalfRes=1
r.EmitterSpawnRateScale=0.25 ;에미터의 생성빈도수 조절
r.ParticleLightQuality=0
[EffectsQuality@2]
r.TranslucencyLightingVolumeDim=32
r.RefractionQuality=1
r.SSR.Quality=0
r.SceneColorFormat=2
r.DetailMode=1
r.TranslucencyVolumeBlur=0
r.SSS.Scale=1
r.SSS.SampleSet=1
r.SSS.Quality=0
r.SSS.HalfRes=1
r.EmitterSpawnRateScale=0.5
r.ParticleLightQuality=0.5
[EffectsQuality@3]
r.TranslucencyLightingVolumeDim=64
r.RefractionQuality=2
r.SSR.Quality=1
r.SceneColorFormat=2
r.DetailMode=2
r.TranslucencyVolumeBlur=1
r.SSS.Scale=2
r.SSS.SampleSet=2
r.SSS.Quality=1
r.SSS.HalfRes=1
r.EmitterSpawnRateScale=1
r.ParticleLightQuality=1
[EffectsQuality@Cine]
r.TranslucencyLightingVolumeDim=64
r.RefractionQuality=2
r.SSR.Quality=4
r.SceneColorFormat=4
r.DetailMode=2
r.TranslucencyVolumeBlur=1
r.SSS.Scale=1
r.SSS.SampleSet=2
r.SSS.Quality=1
r.SSS.HalfRes=0
r.EmitterSpawnRateScale=1.0
r.ParticleLightQuality=2
;-----------------------------------------------------------------------------------------------------------------
[FoliageQuality@0]
;폴리지 관련 퀄리티 세팅입니다 그래스기능을 사용하기면 그래스도 켜주시면됩니다.
거리에따른 컬링은 뷰 디스턴스에 영향을 받으니 이쪽에서는 그 외에 거 위주로 세팅해주시면됩니다.
foliage.DensityScale=0.3
grass.DensityScale=0.3
;foliage.DiscardDataOnLoad=1 ; having this enabled will reduce ram use but will require reloading the level when changing FoliageQuality setting
;grass.DiscardDataOnLoad=1 ; having this enabled will reduce ram use but will require reloading the level when changing FoliageQuality setting
[FoliageQuality@1]
foliage.DensityScale=0.3 ;폴리지 밀도 곱연산입니다. 1이면 원래상태 유지 입니다.
grass.DensityScale=0.3
;foliage.DiscardDataOnLoad=1 ; having this enabled will reduce ram use but will require reloading the level when changing FoliageQuality setting
;grass.DiscardDataOnLoad=1 ; having this enabled will reduce ram use but will require reloading the level when changing FoliageQuality setting
[FoliageQuality@2]
foliage.DensityScale=0.75
grass.DensityScale=0.75
;foliage.DiscardDataOnLoad=0
;grass.DiscardDataOnLoad=0
[FoliageQuality@3]
foliage.DensityScale=1.0
grass.DensityScale=1.0
;foliage.DiscardDataOnLoad=0
;grass.DiscardDataOnLoad=0
[FoliageQuality@Cine]
foliage.DensityScale=1.0
grass.DensityScale=1.0
;foliage.DiscardDataOnLoad=0
;grass.DiscardDataOnLoad=0
;-----------------------------------------------------------------------------------------------------------------
;어느정도 네이밍들이 직관적이고 대부분이 문서에 나와있는 내용들이나
쉽게 값을 찾기 어렵고(기본값으론 프레임저하가 너무 심한편이라..)
프로젝트에 맞춰 눈에 많이 띄고중요한 부분만 남기고 큰영향이 없는부분들은 과감하게 제거해주면서 퀄리티와 퍼포먼스 두곳의 중간점을 찾아주는식의 작업을 진행하면 좀더 빠르게 프로젝트에 맞는 그래픽 퀄리티를 찾아줄 수 있습니다.
'unreal > Unreal ETC' 카테고리의 다른 글
[Unreal4]언리얼 반응형 물 제작 / Interactive water (0) | 2020.07.31 |
---|