본문 바로가기

프로그래밍/Unreal

[UE4] 메쉬 외곽선 효과



포스트 프로세스 매터리얼 작성


설정

Material - Material Domain : Post Process

Post Process Material - Blendable Location : Before Translucency




외곽선 설정


뷰의 픽셀 단위 크기, 텍셀 사이즈 얻기

ViewSize = ViewSize

TexelSize = TexelSize



외곽선 두께(1.5)적용 : 화면(view) 사이즈별로 두께가 조절될 필요가 없는 경우에는

ViewSize 처리없이 TexelSize * 1.5 만 해주면 된다.


Value = (( Clamp ( Ceil(ViewSize) ) ) * 1.5 ) * TexelSize





텍셀값 각각 마스킹해 해당 값 얻기

uv는 2차원 벡터 이므로, 0을 붙여 2차원 벡터를 만들고, 마스킹된 값을 +,- 값으로 총 4개 값으로 추출한다.

결국 R은 U, G는 V를 의미하며, U는 현재 픽셀의 좌우, V는 위아래를 의미한다.

R : right, left

G : top, bottom


Component Mask(R) <- Value

Component Mask(G) <- Value



마스킹값과 상수 0을 2차원 벡터로 확장

MaskingR = Append Vector

MaskingG = Append Vector



마스킹 벡터에 상수 -1 곱셈

MaskingReversR = MaskingR * -1

MaskingReversG = MaskingG * -1



UV 좌표

현재 스크린 포지션과 마스킹된 포지션을 더해 실제 UV 좌표를 얻는다

픽셀의 UV 좌표 얻기

ScreenPosition : Mapping 설정은 SceneTextureUV


해당 UV좌표를 R,G로 마스킹

MaskingScreen = Component Mask(R,G)


V1 = MaskingScreen + MaskingR

V2 = MaskingScreen + MaskingG

V3 = MaskingScreen + MaskingReversR

V4 = MaskingScreen + MaskingReversG




UV 좌표의 인접 픽셀의 색상 차 얻기

현재픽셀과 4곳의 깊이값을 가져와 차이가 있는지 검사한다.



ScenTexture :Scene Texture Id = Custom Depth



입력

Color1 <- 현재픽셀이므로 입력 없음

Color2 <- V1

Color3 <- V2

Color4 <- V3

Color5 <- V4



깊이차 계산 : Subtract , Add


Alpha = (( ((Color1 - Color2) + (Color1 - Color3)) + ((Color1 - Color4) +(Color1 - Color5)) ) / -100 ) -1

Alpha -> Clamp(Min=0)(Max=1)



Lerp

Linear Interpolate

A = SceneTexture : Scene Texture Id = PostProcessInput0

B = VectorParameter -> MakeFloat4

Alpha







캐릭터 블루프린트


카메라가 바라보는 위치의 오브젝트만 Custom Depth 활성화하기



오브젝트 타입 : static mesh component 레퍼런스 변수 생성


BeginPlay -> Set Timer by Function Name : 0.1초 간격 Trace 함수 호출



LineTraceByChannel

Trace -> LineTraceByChannel

 

Start : Camera -> GetWorldLocation

End : Camera->GetWorldLocation->Break Transform : Rotation -> Get Forward Vector -> * 10000 + Start


LineTraceByChannel Return Value 를 Branch

LineTraceByChannel Out Hit 구조체 중 HitComponent 를 static mesh component 로 형 변환


레버런스 변수에 해당 콤포넌트 저장


Set Render Custom Depth 함수 실행해 해당 메쉬의 bRenderCustomDepth 속성을 활성화

기존 메쉬는 bRenderCustomDepth를 해제 해줘야 함.






레벨에 Post Process Volume 을 배치

디테일 항목에서

Rendering Features

Post Process Materials

작성한 매터리얼 추가


Post Process Volume Settings

Unbound 체크







'프로그래밍 > Unreal' 카테고리의 다른 글

[UE4] 폰트  (0) 2017.09.26
[UE4] C++ 에셋, 오브젝트 레퍼런싱/객체생성  (1) 2017.09.25
[UE4] CSV 파일  (0) 2017.09.24
[UE4] unreal delegate  (0) 2017.09.24
[UE4] 마우스 입력  (0) 2017.09.17
[UE4] 아웃라인 : 스텐실  (0) 2017.09.16
[UE4] 언리얼 기본 예제 분석  (0) 2017.09.13
[UE4] Line Trace  (0) 2017.09.12
[UE4] 액터  (0) 2017.09.12
[UE4] C++ 기본 사항 노트  (0) 2017.09.06