22 - PostProcessing,

Overcle·2023년 3월 2일
0

학원

목록 보기
15/29

PostProcessing이란?

Gpt 답변.

Unreal Engine에서 Postprocessing은 렌더링된 화면에 대한 추가적인 효과를 적용하는 기술입니다. 
이를 통해 시각적으로 더 흥미로운 결과물을 만들어 낼 수 있습니다.

Postprocessing 효과 중 일부는 다음과 같습니다.

색상 보정 (Color Correction): 화면에 적용되는 특정 색조나 색상을 보정하는 기능입니다.
톤맵핑 (Tone Mapping): 너무 밝거나 어두운 영역을 더 잘 구별할 수 있도록 색상값을 매핑하는 기술입니다.
블룸 (Bloom): 빛이 화면을 비추는 것처럼 흰색 효과를 추가하여, 특정 표면이 빛을 반사할 때 생기는 반사광 효과를 연출합니다.
광도 (Lens Flare): 빛이 렌즈 안으로 들어오는 것처럼 특정 표면이 빛을 반사할 때 생기는 반사광 효과를 연출합니다.
모션 블러 (Motion Blur): 물체나 카메라의 움직임을 부드럽게 만들어줍니다.

이외에도 많은 Postprocessing 효과들이 있습니다. 
Unreal Engine에서 이러한 효과들을 구현하기 위해 Post Process Volume이라는 액터를 사용합니다. 
Post Process Volume은 특정 영역 안에서만 효과를 적용할 수 있도록 설정할 수 있습니다. 
또한 Postprocessing을 직접 구현할 수도 있으며, 
이를 위해서는 Material Editor를 사용하여 Postprocessing Material을 작성해야 합니다.

PostProcessing


그 말대로 후처리 효과 이며, 각 보정을 목적으로 사용한다.

새 오브젝트 추가 > 볼륨 > postprocess볼륨 드래그 해서 추가.

중요하게 봐야하는건 우선순위가 있으며, 우선순위가 높은 볼륨이 낮은 볼륨을 오버라이딩을 한다.

후처리 효과의 이벤트 트리거는. 해당 볼륨안에 카메라가 들어가야만 후처리가 진행된다.
하지만 언바운드를 체크를 하게 되면 카메라가 안에 있든 없든 후처리가 진행된다.

크기 설정

효과

언리얼에서 기본적인 효과는 지원하고있다.

Depth of Field : 뿌연 효과

Bloom : 어두운 곳은 어둡게 밝은곳은 밝게 해서 명암비를 뚜렷하게 만들어 실사에 가깝게 표현한다.

Exposure : 어두운곳에서 갑자기 밝은곳으로 가면 시야가 흐릿하다가 서서히 회복되는 효과.

Chromatic Aberration : 살짝 약빤거같은 효과같은?

Lens Flares : 카메라를 이용해서 빛나오는 부분을 봣을때 광원효과 발생, 거울 반사에도 적용

컬러 그레이딩 부분은 프로그래머가 건들일은 전혀 없다.
아트 분야 분들만 건들듯..?

Lumen 은 언리얼 5 업글 되면서 생긴 녀석이며.

5이전에는 리블레셔 할 때 간접광을 하기 위해 복잡하고 귀찮은 과정이 있지만 5부터는
Lumen으로 대체 되어 간편하게 되었다.

Motion Blur : 뒤에 잔상 효과를 표현.

PostProcess Material


1. 물체 외곽선 표현, OutLine.

모델링 안쪽에서 표현하는것이며, 바깥쪽에 설정하진 않는다.

매커니즘은. 카메라가 바라볼때. 픽셀마다 Depth값을 비교하며.
Depth값이 차이가 큰부분을 OutLine으로 인식을 하며 그부분을 색상 변경을 함으로써
OutLine을 구현한다.

[위의 사진처럼. 빨간 라인은 흰색 라인보다 Depth값이 더 크게 나올것이다. 그렇다면 OutLine으로 인식을 한다.]

우클릭 > 머터리얼 > "MTOutline" 생성

머터리얼 도메인을 PostProcess 로 변경

언바운드에서 아웃라인을 적용하면 전체가 적용되니. 원하는 대상만 적용되도록 설정해야함.

카메라의 하나하나 픽셀마다 정보가 들어오기 떄문에 필터링은 필수 이다.

뎁스 와 스텐스는, 한쌍이라고 생각하면 되며.
뎁스는 별도의 버퍼를 가진다.?
뎁스는 어쩃건 메모리를 더 사용하는 기능이기 때문에, 조금이라도 성능은 저하가 된다.
사용하기 위해서는 프로젝트 셋팅에서 아래의 값을 조절해줘야한다.

머터리얼 함수 생성 "MFOutline"

머터리얼 함수 생성 "MFComputeOutlineTexel"


위의 방식대로 8방향을 구현하며. 마지막 Result와 Output은 우선순위를 넣어 순위를 지정

MFOutline 에는

위의 방법처럼 8방향을 전부 지정한다.

모든걸 다 더한다 (ADD는 2개만 핀이 있어 저렇게 해야함. HLSL 코딩으로 하면 간편하게 할 수 있음)

위의 방법대로. 비교값을 넣어 차이를 식별한다




머터리얼 함수로 "MFOutlineColor"를 생성한다.

"MFLineColor" 생성

몬스터에 마우스를 포커싱 시 아웃라인 활성화


[Monster.h]

public:
	void OnRender(bool On);
[Monster.cpp]

void AMonster::OnRender(bool On)
{
	GetMesh()->SetRenderCustomDepth(On);
	GetMesh()->SetCustomDepthStencilValue(16);
}
[PlayerController.cpp]

void AUE11PlayerController::Tick(float DeltaTime)
{
	Super::Tick(DeltaTime);

	//마우스 포인터를 몬스터에게 가져다 대면 해당 몬스터 아웃라인 활성화.

	//몬스터만 블록되어있는 Trace Channel 구성 후 설정.
	FHitResult result;
	bool Hit = GetHitResultUnderCursor(ECollisionChannel::ECC_GameTraceChannel9, false, result);

	//해당 변수안에 탐지되어있는 값이 있다면?
	if (Hit)
	{
		//해당 Actor 가져오기.
		Monster = Cast<AMonster>(result.GetActor());
		//Monster의 아웃라인 활성화.
		Monster->OnRender(Hit);
	}
	else
	{
		//만약 Monster의 변수가 Null값이 아니라면? 탐지된적이 있다는 소리. 아웃라인 비활성화
		if (IsValid(Monster))
		{
			Monster->OnRender(Hit);
            Monster = nullptr;
		}
	}

}

결과 스샷.

profile
게임 프로그래머 지망생의 발자취

0개의 댓글