UE5
-
[week6] LightUE5 2025. 4. 12. 00:44
Texutre Normal Map 기존의 normal mapping과정은 vertex의 normal값을 가져와서 pixel shader로 넘길 때,래스터라이제이션 과정에서 정점마다 넘긴 값을 기준으로 삼각형 내부의 픽셀마다 선형 보간(interpolation)을 자동으로 해줌 이 보간은 삼각형 단위로 이루어지기 때문에, 삼각형이 화면에 차지하는 비율이 늘어날 수록 보간이 거칠어져서 빛 표현이 부정확해진다. -> Per-Pixel Lighting이 필요한 이유! 저번 주차에서 lighting을 구현할 때, Deferred-shading + Per-pixel Lighting으로 조명을 구현하긴 했다.그런데 normal은 vertex에만 존재하고, 이를 pixel 각각에 적용하기 위해서 GPU에서 자동으로 픽..
-
[week5] PixelShader - FogUE5 2025. 4. 4. 22:18
학습 목표Pixel Shader의 동작을 이해한다.후처리 (Post Process) Pass 구현을 통해 Multi-Pass Rendering에 대해 이해한다. FogFog는 Post Process에서 구현할 수 있지만, 제대로 하려면 Main-pass에서 처리하는 게 맞다. 왜 메인 패스에서 Fog를 처리하는가?1. 픽셀이 “생성될 때” 안개를 적용해야, 물리적으로 맞는 색이 나온다픽셀이 생길 때는:조명 계산머티리얼 색상그림자 여부이때 안개가 존재하면, → 빛의 감쇠, 색 번짐, 환경 색과의 혼합 같은 걸 고려해서 최종 색상을 결정함.👉 즉, Fog는 그냥 “화면 위에 덮는 투명 레이어”가 아니야.빛이 대기 속을 통과하면서 감쇠되는 걸 모델링하는 과정이야.2. 깊이별/고도별 안개량이 오브젝트별로 다르..
-
[week2] Texture RenderingUE5 2025. 3. 20. 23:31
# DirectX 11 렌더링 파이프라인 (함수 호출 기반 정리)## CPU 준비 단계 (함수 단위)1. **디바이스 및 스왑 체인 생성** - `D3D11CreateDeviceAndSwapChain()`2. **렌더 타겟 및 뎁스 스텐실 준비** - `SwapChain->GetBuffer()` - `Device->CreateRenderTargetView()` - `Device->CreateDepthStencilView()`3. **자원(Resource) 준비** - 정점 버퍼: `Device->CreateBuffer()` - 인덱스 버퍼: `Device->CreateBuffer()` - 셰이더 컴파일: `D3DCompileFromFile()` - 셰이더 생성: `Device..
-
[UE5] GameFeatureUE5/Lyra Clone Coding 2025. 2. 7. 01:03
GameFeature GameFeature 시스템은 Unreal Engine의 Modular Gameplay 시스템에서 제공하는 기능 중 하나로, 게임의 특정 기능이나 콘텐츠를 동적으로 로드하고 관리할 수 있도록 도와주는 시스템이야. 이를 활용하면 게임의 핵심 로직을 독립적인 모듈로 구성하고, 필요할 때 활성화하거나 비활성화할 수 있다. GameFeature는 언리얼에서 추구하는 모듈화의 끝판왕이라고 볼 수 있다. 핵심 개념 독립적인 기능 모듈특정 게임 기능(예: 새로운 무기 시스템, UI 확장, 캐릭터 능력 추가 등)을 별도의 모듈로 제작 가능.기능을 독립적으로 개발하고 관리할 수 있음.동적 로드 가능특정 상황에서만 로드하거나, DLC처럼 선택적으로 활성화 가능.예를 들어, PvP 모드는 멀티플레이어 ..
-
[UE5] CommonUserUE5/Lyra Clone Coding 2025. 2. 6. 20:37
Portal을 통과할 때 맵을 이동할 수 있도록, 즉 Experince를 변경할 수 있도록 설정해보자. Lyra에서는 이를 CommonUser라는 플러그인을 만들어서 진행하고 있다. CommonUser 플러그인은 Lyra에서 사용자 계정과 설정 관리를 담당하는 핵심적인 플러그인인데, 멀티 환경을 감안하여 플러그인으로 설정되어 있다. 우리는 이중에서 싱글플레이에서 사용하는 부분만 들고와서 사용할 것이다. SubSystem CommonSessionSubsystem은 GameInstanceSubsystem을 상속받아서 만드는데, 일단 이 SubSystem이란 무엇일까? 게임의 전역적인 기능이나 서비스 로직을 관리하기 위해 설계된 모듈화된 시스템인데, 게임의 어디서나 쉽게 접근할 수 있는 매니저 역할을 한다...
-
[UE5] CameraUE5/Lyra Clone Coding 2025. 2. 5. 18:04
Lyra의 Camera의 궁극적인 목표는 결국 Camera Component의 모듈화이다.CameraManager(CameraManager 상속), CameraComponent(CameraComponent 상속), CameraMode(UObject 상속)를 생성하는 것으로 시작한다. CameraManager CameraManager에서는 FOV(시야각), PITCH_MAX, PITCH_MIN(상하로 회전하는 각도)의 기본값을 설정해준다.AZSPlayerCameraManager::AZSPlayerCameraManager(const FObjectInitializer& ObjectInitializer) : Super(ObjectInitializer){ DefaultFOV = ZS_CAMERA_DEFAULT_..
-
[UE5] PawnExtension(2) - 구성 요소 분석UE5/Lyra Clone Coding 2025. 2. 3. 19:24
PawnExtensionComponent의 구성 요소를 하나하나 분석해보도록 하자. const FName UZSPawnExtensionComponent::NAME_ActorFeatureName("PawnExtension");이 문자열은 Feature Name으로 사용되며, 주로 초기화 상태 등록(Init State Feature Registration)이나 기능 구현 등록 시 식별자로 활용된다.virtual FName GetFeatureName() const final { return NAME_ActorFeatureName; }헤더 파일에서 GetFeatureName함수는 위와 같이 override되는데, 이 때문에 RegisterInitStateFeature 함수가 호출되면 GetFeatureName이..
-
[UE5] PawnExtensionUE5/Lyra Clone Coding 2025. 1. 31. 23:12
Pawn의 생성을 위해 먼저 Pawn의 초기화를 담당하는 컴포넌트를 만들어야 한다. Lyra Experience의 특징은 추상화 레벨이 매우 높다는 것에 있다. 예를 들어, 보통 기존에는 Character의 입력을 위해 Character.cpp 파일의 SetupPlyaerInputComponent에서 캐릭터의 입력을 지정해주는 일을 했다. 그러나 이는 입력이 캐릭터에 종속이 된다는 것을 의미한다. 따라서 컴포넌트를 활용해서 부착하는 형식으로 항상 갈아낄 수 있도록 구조를 만들어 준다. 컴포넌트 초기화에 있어 순서 또한 중요한데, 생성 시에 이 순서가 보장되지 않는다. 따라서 GameplayTag를 활용해 순서를 지정해주어야한다.void UZSGameInstance::Init(){ Super::Init()..