본문 바로가기

전체 글275

레벨 스트리밍(Level Streaming)으로 컷 씬 부하 최적화 레벨 스트리밍(Level Streaming)으로 컷 씬 부하 최적화오늘은 프로파일링을 통해 색출한 급격한 부하를 일으키는 구간 최적화를 진행해보겠습니다. 이번 최적화에서는 불필요한 Tick 제거 및 레벨 스트리밍을 활용합니다.부하 발생 및 문제점 파악테스트 플레이를 하던 도중, 보스 컷 씬에서 급격한 부하가 발생하는 현상을 발견했습니다. 부하의 원인을 더 정확히 파악하기 위해 프로파일링 툴 " Unreal Insight "를 활용해 더 자세히 살펴보겠습니다.언리얼 인사이트를 활용한 부하 분석튀는 구간을 확대하여 살펴보니, 주로 렌더링과 관련된 부분에서 부하의 대부분을 차지하고 있었습니다. Tick을 구성하는 부하의 핵심요소를 더 자세히 살펴보겠습니다. AllocUpdateResource : GPU 리소스.. 2026. 2. 18.
나이아가라(Niagara) 이펙트 최적화 나이아가라(Niagara) 이펙트 최적화오늘은 나이아가라 시스템의 이펙트(VFX)를 최적화 해보겠습니다. 저는 기존에 보스 몬스터의 패턴을 비헤이비어 트리(Behavior Tree)로 설계하여 각 패턴에 맞는 스킬 이펙트를 애니메이션과 함께 실행하도록 구현해 놓았습니다. 이미지를 보면 애니메이션과 함께 원형 고리 형태의 물줄기 나이아가라 이펙트(NS_WaterPulse)가 실행되는 것을 확인할 수 있습니다.실행에는 전혀 문제가 없었지만, 게임 플레이 시 해당 패턴이 실행될 때마다 상당한 부하를 잡아먹는 문제가 있었습니다. 조금 더 정확하게 프로파일링하여 문제 상황을 확인하기 위해 "stat unitgraph" 명령어와 "Unreal Insight" 툴을 활용해 병목을 확인해보겠습니다.병목 확인이 이미지.. 2026. 1. 13.
카오스 디스트럭션(Chaos Destruction) 최적화 카오스 디스트럭션(Chaos Destruction) 최적화오늘은 카오스 디스트럭션의 최적화에 대해 알아보겠습니다. 저는 이전에 카오스 디스트럭션을 학습하기 위해 매우 간단한 형태로 구현했습니다. 이미지에 보이는 트리거에 플레이어가 닿으면 카오스 디스트럭션이 실행되어 바위가 부서지는 로직으로 되어 있었습니다.캐시 매니저를 통한 캐싱위 이미지를 보시면 카오스 캐시 매니저(ChaosCache Manager)를 사용하여 만들어진 모습을 확인할 수 있습니다. 이는 카오스 디스트럭션을 캐싱하여 사용하기 위한 방법 입니다. AChaosCacheManager를 상속 받아 ChaosRock을 구성했으며, 이를 통해 레벨에 있는 지오메트리 컬렉션을 컨트롤하도록 하기 위해 이렇게 구성했습니다. 레벨에 배치된 카오스 디스트럭.. 2026. 1. 12.
<카툰렌더링> 모든 액터에 적용되는 툰 쉐이더 구현 모든 액터에 적용되는 툰 쉐이더 구현[목표]소스코드를 통해 모든 레벨에 존재하는 액터에 툰 쉐이더 적용시키기[의도]이전에 시도했던 포스트 프로세스 볼륨을 통해 적용하는 방법은 의도한 대로 작동되지 않았고, 성능적으로도 좋지 않은 방식소스코드를 통해 최적화 된 방식으로 적용시키고자 함 [소스코드]// Default#include "DSCelShaderApplier.h"// UE#include "Engine/World.h"#include "Engine/Level.h"#include "GameFramework/Actor.h"#include "Components/MeshComponent.h"#include "Materials/MaterialInstance.h"#include "UObject/Constructor.. 2026. 1. 2.
<카툰렌더링> 카메라 거리에 따라 조절되는 캐릭터 외곽선 구현 카메라 거리에 따라 조절되는 캐릭터 외곽선 구현[목표]카툰 렌더링 캐릭터에 자주 사용되는 외곽선 만들어보기 디테일 설정에서 블렌드 모드를 Masked, 셰이딩 모델을 Unlit, 양면을 체크 표시 원근 투영 행렬을 통해 깊이 값을 가져온 뒤에 지정 비율을 곱해 외곽선의 크기 지정특정 값 이상으로 범위가 늘어나거나 줄어들지 못하도록 범위 고정커스텀 노드 : mul(float4(In.xyz, 1),LWCToFloat(ResolvedView.WorldToClip))출력 타입 : CMOT Float4로 지정, 입력 이름 : In으로 설정 커스텀 노드에 대한 추가적인 설명언리얼 엔진 5의 머티리얼 에디터에서 사용되는 HLSL 코드입력받은 3D 월드 좌표(In)를 카메라의 클립 공간(화면 좌표)으로 변환하는 코드.. 2025. 12. 26.
<카툰렌더링> 레벨 전체에 적용되는 툰 쉐이더 구현 레벨 전체에 적용되는 툰 쉐이더 구현[목표]이전에 활용한 방법들은 각 액터에 있는 머티리얼을 통해 일일이 적용시켜야 하므로, 상당히 번거롭고 파편화 되어 있음하나의 큰 쉐이더로 모두 적용시키는 방법을 구현 새로운 머티리얼을 생성하고, 도메인을 PostProcess로 변경 아래 과정을 따라 노드를 연결하여 PPNode 생성SceneTexture(PostProcessinput0) : 렌더된 화면 전체 색상을 가져오는 입력SceneTexture → DotProduct(RGB, (0.3, 0.59, 0.11)) : 밝기(Luminance)를 계산하는 표준 방식Multiply(,4) : 밴드 수를 조절Floor : 잘라내기Divide : 0~1 로 정규화Multiply : 정규화된 밝기 단계 값과 원래 색상을 곱.. 2025. 12. 22.
<카툰렌더링> 밴드 쉐이딩 기법 구현 밴드 쉐이딩 기법 구현[목표]더 자연스럽고 카툰스러운 분위기를 위한 여러 개의 띠로 구성된 그림자를 만드는 밴드 쉐이딩을 구현 기존과 동일한 방식으로 하프 램버트 생성 하프 램버트를 saturate와 연결한 뒤, multiply를 통해 밴드를 생성floor를 통해 소수점을 버리고 Divide를 통해 0~1로 정규화 된 단계적 밝기 생성 생성한 밴드 셰이드 노드를 이전과 같은 방식으로 Lerp(Alpha)에 연결 및 그림자 색상 지정(회색) 디렉셔널 라이트의 방향에 따른 흰색부터 회색까지 총 4개의 밴드로 색이 구성되어 있는 모습을 확인할 수 있음 생성된 머티리얼을 샘플 예제 캐릭터인 Quinn에 적용 디렉셔널 라이트에 따라 자연스럽게 단계 별 카툰 형식의 그림자 쉐이더가 적용됨마무리오늘은 간단하게 밴드쉐.. 2025. 12. 19.
<카툰렌더링> 카툰 렌더링 그림자 쉐이딩 구현 카툰 렌더링 그림자 쉐이딩 구현이전까지는 이득우 교수님의 강의 영상을 통해 개념적인 내용을 학습했습니다. 이제는 학습한 내용을 바탕으로 직접 카툰 렌더링 쉐이더를 구현해보도록 하겠습니다. [목표]학습한 하프램버트를 활용하여 카툰 형식으로 표현되는 그림자를 구현 구현한 쉐이더의 시각적인 효과를 명확하게 볼 수 있도록 다양한 색과 각진 형태의 액터를 활용 1. 빛 벡터(L)과 노말 벡터(N)을 가져오기2. 두 벡터를 내적한 값을 만들기 3. 내적한 값(NoL)을 0.5만큼 곱 연산하고 0.5만큼 더해서 하프 램버트 생성4. 생성된 하프 램버트에 step을 통해 그림자의 범위 설정 (0.2만큼의 범위를 가지는 그림자 생성) 5. Lerp함수를 통해 그림자의 색상(초록색) A와 밝은 색(흰색) B를 연결하고 A.. 2025. 12. 17.
<카툰렌더링> 카툰 렌더링으로 특수 재질을 표현하는 방법 카툰 렌더링으로 특수 재질을 표현하는 방법이득우 교수님의 7강 영상 탄젠트 공간 알아보기 노멀 벡터를 중심으로 3차원 공간을 지정한 것노멀 벡터 값은 물체 표면에 구성하는 모든 픽셀마다 다르게 지정되기에 탄젠트 공간은 표면마다 다르게 지정된다탄젠트 공간은 “노멀 매핑”이라 부르는 게임 렌더링의 중요한 기법에 사용됨 탄젠트 공간을 만드는 방법노멀 벡터를 중심으로 3차원 공간 지정, 노멀 벡터 방향으로 향하는 하나의 2차원 평면을 설계하는 것에 비유할 수 있음평면의 방향을 지정하면 이를 기준으로 준비된 텍스처를 부착 → 지정된 결을 따라 표면을 도배하는 것과 동일왼쪽 그림과 같이 하나의 노멀 벡터만 가지고는 텍스처를 도배할 수 있는 경우의 수가 무한함그래서 탄젠트 벡터라고 하는 도배할 방향 정보를 추가로 넣.. 2025. 12. 8.
<카툰렌더링> 얼굴 SDF 툰 쉐이딩을 구현하는 방법 얼굴 SDF 툰 쉐이딩을 구현하는 방법이득우 교수님의 6강 영상 얼굴 SDF 그림자 기법 카툰 렌더링에서는 왼쪽과 같은 형태를 선호함 의도적으로 얼굴을 구성하는 노멀의 정점을 조정카툰 렌더링에서는 효과적인 방법 일일이 정점 노멀을 수정하는 것은 번거로움SDF 텍스처를 활용하여 동일한 효과를 내는 방법이 요즘 사용됨SDF란 무엇인가?SDF : Sgined Distance Field → 부호화된 거리 장 → 거리값으로 채워진 영역 데이터+와 - 부호를 가진 거리 값을 사용한다 → 거리는 음수가 존재하지 않지만, 무언가를 구분하기 위해 음의 부호를 추가로 사용왼쪽 원을 SDF로 표현하면 오른쪽 처럼 구성됨원의 중심은 -1, 경계선을 기준으로 안과 밖을 양수와 음수로 구분확대해도 정확하게 표현 가능, 일종의 벡.. 2025. 12. 7.
<카툰렌더링> 프레넬과 환경반사 프레넬과 환경반사이득우 교수님의 5강 영상 실사렌더링의 BRDF 대부분의 재질은 절연체와 금속으로 나뉨절연체는 디퓨즈와 스페큘러 두 가지 특성을 가지고 있음금속은 흡수 없이 바로 빛을 반사하는 스페큘러의 성질만 가짐 쿡 토런스 BRDF 러프니스가 큼 → 스페큘러 로브가 커짐 → 스페큘러의 세기가 약해짐 지형 감쇄 함수 G : 러프니스가 클수록 G값도 작아짐 → 스페큘러를 더 약하게 만든다 러프니스가 강할수록 스페큘러 반사상도 흐릿해짐F : 프레넬의 약자프레넬 현상 : 빛이 다른 매질을 통과할 때 발생하는 반사와 굴절 현상디퓨즈 → 프레넬 현상에서의 굴절, 스페큘러 → 프레넬 현상에서의 반사 프레넬 반사의 구현 빛이 다른 매질에 진입할 때, 비스듬히 닿을 수록 강하게 반사가 일어나는 현상예시 이미지 : .. 2025. 12. 6.
<카툰렌더링> 카툰 외곽선을 만드는 다양한 방법 카툰 외곽선을 만드는 다양한 방법이득우 교수님의 4강 영상 외곽선 그리기 개요 각 방식의 장단점[두 번 그리는 방식]장점 : 정확한 외곽선의 표현과 응용, 구조가 단순하다면 빠르게 처리 가능, 외곽선 효과 줄 수 있음단점 : 메시가 복잡하면 처리 속도가 느려짐 [포스트 프로세싱 방식]장점 : 다양한 이미지 필터 효과의 적용, 메시가 많아도 처리 속도에는 큰 차이가 없음단점 : 포스트 프로세싱 방식 자체가 부하가 큼, 탐지 기반이라 엉뚱하게 그릴 수 있음 가급적 부하가 적은 방식을 소개할 예정 ⇒ 왼쪽 방식(두 번 그리는 방식)을 알아보자 외곽선을 그리는 방법 벡터의 내적을 통해 앞 뒷면을 구분할 수 있음최적화를 위해 의도적으로 뒷면을 그리지 않는 백페이스 컬링 위 원리를 이용하여 외곽선을 그릴 수 있다뒷.. 2025. 12. 4.