1. 본인이 이해한 Skyscraper는
“고층빌딩이 밀집한 도심에서 빠르고
최적화된 환경에서 총기 전투를 해야
하는 게임이다”
2. 목표로 하는 게임 그래픽의
방향성은 (1)AAA게임의 그것이 아닙니다.
단, 엣지 있는 도심 배경과 힙한
캐릭터 그래픽에 발목을 잡지 않는
선에서 상쾌한 게임 플레이 환경을
제공하는 것을 GOAL로 잡았습니다
(1) Unreal Engine 5도입의 반대:
개발 기간의 증가 및 필요 사양이 많이 올라감
Key Challenges
For Skyscraper Backgrounds
• 고층 건물들로 인한 그림자 컬링의 어려움
• 수 많은 부속품 사용으로 인한
Shadow Depth 처리 비용증가
• 컬링 비용의 증가
• 히치 발생으로 인한 쾌적한 FPS플레이의 방해
• 그냥 느림(많은 디테일을 가진 건물들의
집합체의
산물인 도시를 빠르게 렌더링 하겠다는 것이
욕심
고층빌딩으로 인한 그림자
때문에 Far Cascade도 사용해야
했습니다.
그래서 가장 먼저 한 작업은
Ghost Shadow mesh를 제작한
것입니다
기본 개념은 근거리에서도
사용가능한 그림자용
HLOD(=흡사한)입니다
사용과 관리가 간편하도록
플러그인으로 제작
Ghost Shadow Mesh Detail
• 도시의 건물들의 구성은 주로 리소스의
효율과 Draw Call 때문에
• 메쉬 인스턴싱의 조합으로 이루어져
있습니다.
하지만,이 방법이 그림자 패스 렌더링에
유리한 것은 아니므로
• 볼륨안의 메쉬들을 하나의 메쉬로
병합해서 메인 패스에 그리지 않는 하나의
메쉬로 만들어주고 원래 있던 메쉬들은
종류별로 인스턴싱 해줍니다
하이브리드 오클루젼
컬링 엔진
언리얼 엔진은 가시성 컬링,
디스턴스 컬링 볼륨 및 하드웨어 오클루젼(HW) 컬링으로
컬링 프로세스가 구성 됩니다
밀집도 높은 환경에서 HW컬링은 너무 많은 쿼리 요청으로
인해
GPU부하를 일으키고
RHI Commands 캐쉬의 Flushing을 일으킵니다
그에 따라 프레임 드랍 및 Hitch가 심해지는 결과가
나타납니다
PSO Caching
• The Pipeline State Object (PSO)
caching tools help reduce the time it
takes to reload an Unreal Engine 4
(UE4) level and it's content.
• 파이프라인 상태를 캐쉬로
만듦
• Hitch 방어에 큰 도움
• 8년 정도의
언리얼 엔진 개발 이력에
처음 시도해 봄
PSO Cache 프로세스
1. 패키징 빌드
2. 빌드 된 클라이언트로 –
logPSO를 첨부하여 녹화
3. 녹화된 .shk화일을
툴을 이용해 .CSV로 변환
4. 변환된 .CSV를 타겟 플랫폼의
PilelineCaches폴더에 넣고
재 빌드
언리얼 엔진 문서도 있고 하지만,해보면 잘 되지 않아서
되는 방법 위주로 컨플에 기술 했습니다
DLSS 2,FSR 2등
업스케일링 기술 추가
• Upscale들이 RHI Thread들을 건들기
때문에 셋팅 변경 등의 작업을 수행 할 시에
로딩등 민감한 작업을 하지 않아야 하는데
적용시에 많은 시행착오가 있었습니다
문서에 기술 되지 않은 내용들
• HLOD,Imposter,섹터 레벨 최적화 등
배경이나 TA의 수 많은 노력이 있었습니다
단, 현문서는 TD의 엔지니어링 측면만 다루다 보니 빠져 있습니다
다시한번 여러분의 노력에 감사합니다
최적화 기록
• 2022/08/22
• 30FPS언더,다수 Hitch 발생
• 2022/09/22
• 70~60FPS,Hitch 감소함
• 2022/11/17
• 110 FPS,Hitch 거의 없어짐
생산성 향상
Polygon Decal Plugin
• 디퍼드 데칼로는 해결되지 않는 갈증이
있으므로
• 디퍼드 데칼의 보조로 폴리곤 데칼을
제작했습니다
• 폴리곤 데칼은 말 그대로 대상 오브젝트의
폴리곤 정점을 따서 데칼을 만듭니다
• 사용되는 머터리얼은 스태틱 오브젝트와
마찬가지로 스태틱 오브젝트에 사용되는
머터리얼 종류를 동일하게 사용할 수
있습니다
Quality
• 언리얼 엔진 4의 한계와
• 고사양이 되는 문제 때문에
• DX12 Raytracing은
배제하고
DX12 Rasterize한도내의
ScreenSpace기반의 기술을
가지고 Try함에 있어,
허들이 많이 존재함
일반적인 품질 대비 코스트
위의 표는 상품 서비스에 대한 품질 대비 비용
도표이지만,
세상만사가 비슷해서 게임 그래픽도 크게 다르지
않다고 봅니다
NC같은 돈 많은 집안은 GOAL을
그래프의 끝을 더 잡는 것이고
적절한 점을 잡는 것은 전략적인 사고가 필요한
것 같습니다
Ambient Cubemap
• 엠비언트 큐브맵은
포스트 프로세스 볼륨에
가장 간단하게 환경광을 변화시킬 수
있지만
pre integrated skin에 영향을 주어
사용하기 어려워서
그 점(피부나 눈동자가 영향을 받지 않도록)을
수정했습니다
곧이어 이미지와 IBL색을 따로
조절할 수 있게 하여 보다
사용폭이 넓게 만들겠습니다
Ambient Cubemap
• Custom Parameter
• r.artmouse.AmbientCube.Enable
CustomParam
• r.artmouse.AmbientCube.HighRo
ughnessIntensity
• r.artmouse.AmbientCube.Rough
nessOffset
• r.artmouse.AmbientCube.Reflect
ionWeight
• 엠비언트 큐브맵 사용의 또 하나의 망설여지는 지점은
높은 러프니스를 가진 머터리얼에서도 원하지 않는
반사효과가 나타난다는 것입니다(사진 Intensity 1)
• 여러가지의 파라메터를 사용해
스카이라이트처럼 높은 러프니스를 가진 머터리얼에
엠비언트만 사용 할 수 있습니다
• 물론 큐브맵을 교체하면, 그 큐브맵의 색 반영
LPV(Light Propagation Volume)
• LPV는 만지기 까다로운 물건 입니다.
미 구현된 기능도 많고(UE5 루멘이 있어
영원히 미 구현),
가장 중요한 것은 피부에 영향을 미친다는 것입니다
(LPV의 개선사항은 많지만,
추가 메인 작업으로 하기에는 코스트만
계속 늘어날 것입니다.
Sub작업으로 Main작업이 지루할 때마다 보면 될 것 같습니다)
• 언리얼 엔진의 렌더링 파이프라인은
LPV를 처리한 후 pre-integrated Skin의 후처리 프로세스가 걸려
스킨 오브젝트가 나오면 LPV효과가 사라지는 것입니다
• LPV 합성 프로세스 부분을 파이프라인상에서 스킨 후처리 후로
변경했습니다.
그러나 LPV PostProcess가 스킨 후처리와 ADD가 되어 피부를
망칩니다
• 수정 된 LPV 파이프라인과 LPV의 내부 Shader에서
Scene의 SubSurfaceScattering의 마스크 영역을
만들어 피부와의 충돌 문제를 피했습니다
SSGI (GI)
• SSGI는 다시 GI와 AO로 나뉩니다.
• GI는
SSGI에서 좀 더 품질을 올리기 위해
엔진을 Modify 했습니다
• AO는
SSGI가 Enable이 되면 SSAO의
AO는 사라지고 SSGI의 AO가
표현됩니다
• 언리얼 엔진의 기본 SSGI입니다.
• 확산과 세부강도를 조절 할 수 있게
SSGI의 Shader를 수정 했습니다
• r.artmouse.SSGI.Power외
r.artmouse.SSGI.Intensity로
수정하고 셋팅 할 수 있습니다.
SSGI (AO)
• SSGI의 AO는 특히 문제가 많습니다,
AO때문에 사용을 고려해야 할 정도입니다.
품질은 SSAO에 비해 좋으나
화면에 붙어 있는 느낌이 전혀 없습니다.
특히 근거리에서 너무 심한데,
이것은 GI ColorBleed는 좀 넘어 갈 수도 있는 문제입니다만,
AO의 경우에는 마치 액체가 흐르는 느낌이 되어버려
보기 거북합니다.
• 기본 언리얼 엔진 SSGI의 AO
Skyscraper는 간단히
말해서 어떤 게임인가?
게임 디자이너가
아니더라도 자신이 만드는 게임이 무엇인지는 고민을
하고 바로 어떤 게임을 만들고 있는지 알고 있어야
개발 방향,전략,목표와 To-do 리스트를 작성할 수
있다고 생각합니다
마천루가 펼쳐지는
현대적인 도시 배경에서
HIP한 스타일들의 캐릭터가 나와,
익스트림 스포츠 비슷하게 이동 및 행동하고
게임 플레이의 템포는 하이퍼 스타일에
가까운데,
비주얼 스타일은 조금 더 리얼 베이스의
배틀 로얄 FPS/TPS게임이야
1. 밀집도 있는 도심의 컬링을 효과적으로 하는 것이
중요
2. 이동속도가 빠르고 화면 전환 및 높은 곳에서 도심
전경을 바라보는 일이 많아, LOD와 동적 화면
스케일링도 필요
3. 유리,거울,철제,플라스틱 합성의류가 다수
등장함에 띠리 반사가 중요,레이트레이싱을 사용 할
수는 없지만
반사의 트릭과 퀄러티가 중요함으로 추가 대책이
필요
4. 다수 멀티플레이의 다양한 동작으로 인해,
캐릭터 이동,애니메이션 최적화등이 필요함
캐릭터 최적화
5. 밀리터리 전장이 아니라 스트리트의 배경으로
원색이 잘 나오고 밝은 환경을 대비하기 위해
GI,Gamma,HDR등의 세밀한 사용이 중요
시장 진입을 위한
개발 전략
• 후발 주자이기 때문에
어쩔 수 없이 niche 전략으로 나갈 수 밖에 없는 것 같다.
• 유저 풀이 어느정도 목표치에 도달 시점에,
Mass 접근방식으로 방향을 선회해야 할 듯하다
(니치 전략은 한계가 있으므로)
• 우리가 할 수 있는 니치 전략으로는 두가지가 있는 것 같다
• 시장 나누기
• - 우리 게임만의 특성으로 비집고 들어가야.
• 시작 리더의 약 . 강점 이용
• 배그,에이펙스 레전드,포트나이트의 장 단점 리스트화
• 우리 게임의 단점보완
• - 예) 초반 파밍에서 TTK가 극히 짧음->
공중에 극히 기본적인 아이템 배치로 글라이딩을 하면서
획득 할 수 있게(기본으로 주어지는 것보다 파밍 느낌을
낼 수 있으면서도 초반 비무장상태에서 죽는 경험을 줄일 수
있지 않을까.)