------------------------------------2----------------------------------------
시네 카메라
슈팅게임에서 데미지를 입었을 때 화면 가장자리를 붉게 만들기

포스트 프로세스 볼륨
오픈 월드 게임에서 월드 전체에 포스트 프로세스 효과를 추가하고 싶을 때 

영화적 기법
그레인 : 옛날 영화 필름효과 주기
비네팅 : 주변 어둡게
색수차 : 3색 분리 - 안티 앨리어싱의 효과로 사용 가능

bloom : 가우시안 블러 이용
렌즈 플레어 : 텍스처를 사용하는 이미지 기반 기법 화면 눈부시게 하는 효과

포스트 프로세스 머터리얼을 이용한 공포 영화 박동 효과 구현하기

포스트 프로세스 : 안티앨리어싱 함수 프로젝트 세팅에서 선택
-------------------------3--------------------------------------------
마스크 텍스처를 사용하여 하나의 머터리얼에 여러 재질을 표현하기

컬러 마스크

머터리얼 인스턴스 애셋 생성하여 적용해보기
ㄴ 기본 머터리얼 그래프가 같을 때 색상 러프니스 텍스처와 같은 것들을 변경하고 싶을 때
ㄴ 다이내믹 머터리얼 인스턴스를 사용하여 실행 중에 머터리얼 매개변수를 변경하기

작은 물체에 텍스처링하기
ㄴ Cheap Contrast, Custom Rotator 노드

모바일 플랫폼의 텍스처
ㄴ 최대크기 2K, 이미지의 변의 길이가 2의 승수이거나 크기가 정방형이어야 한다.
ㄴ 텍스처 Compression 속성을 Default나 Normal Map 옵션으로 설정 (메모리 사용량 줄이기)

플라스틱 질감의 천 표현하기
ㄴ Fresnel 노드
ㄴ Detail Texturing 노드 (엔진 컨텐츠 함수) (머터리얼의 질감을 향상시키기 위해 두 가지 다른 텍스처를 사용하는 노드)
ㄴ Texture Object 노드

반자동 절차적 머터리얼 생성하기
ㄴ 랜덤 패턴으로 둘 이상의 텍스처를 혼합하여 타일링이 덜 도드라져 보이게 한다.
ㄴ 최대한 다른 마스크를 사용
ㄴ Noise 노드 (앱의 성능 저하, 완전 자동 절차적 머터리얼, 무작위 패턴 생성)

머터리얼을 텍스처로 굽기
ㄴ 복잡한 원본 머터리얼 그래프의 결과를 단순한 텍스처에 구워서 원본
머터리얼 그래프의 복잡도를 제거하기
ㄴ Actor 블루프린트 (BP_MaterialBaker)-> DrawMaterialToRenderTarget 함수
ㄴ 베이킹할 머터리얼의 셰이딩 모델을 Unlit으로 변경하고 렌더 타겟에 그리기
ㄴ 렌더 타겟으로 텍스처 생성하기

+ 머터리얼의 성능문제 해결방법
ㄴ 1. 렌더 타겟의 해상도 조절로 해결
ㄴ 2. Merge Actors 툴을 활용하여 머터리얼을 단순한 버전으로 만들기

거리 기반 텍스처 혼합
ㄴ 머터리얼 그래프에서 카메라 위치와 정점 위치 거리를 이용하여
두 텍스처의 블렌드 알파 값을 계산
----------------------------------------4-----------------------------------------------
UV 채널 여러개?
SSR ( Screen Space Reflection ) 실시간 반사 효과
ㄴ 화면 공간 밖의 구역은 기하연산하지 못하다는 단점, 스크린 스페이스 바깥의 
물체는 반사하지 못하기 때문에 그런 부분들에 fade out 기법을 사용할 수 있다.
ㄴ Ray Marching을 사용한다. 레이 트레이싱에 비해 가볍지만, 현실적인 그래픽
ㄴ 여러가지 버퍼를 사용해 GPU에서 연산, 화면 내부에 있는 정보로만 표현

SSAO ( Screen Space Ambient Occlusion)

Subsurface scattering 머터리얼(SSS) (빛이 반투명한 물체 표면에 투과되어 내부로 퍼져나간 후 다른 위치로 빠져나가는 현상)
왁스 재질 (사람 피부, 촛불)
머터리얼의 셰이딩 모델을 Subsurface Profile로 설정
Opacity -> 투명도가 아닌 서브서피스 효과의 강도를 나타냄
Metallic -> 사용하면 안됨
Subsurface Profile 애셋 필요
귓볼같은거

+ 서브서피스 효과를 가능하게 하는 셰이딩 모델
Standard Subsurface 모델
Preintegrated Skin 모델
Subsurface Profile 모델
ㄴ 스크린 공간 기법 (더 좋은 품질 제공 (비용 증가))
Two Sided Foliage 모델

완전한 투명 유리 재질 만들기
셰이딩 모델 Translucent + Default Lit
프레넬 값을 사용하여
Refraction (굴절) - 1. 굴절 지수, 2. 굴절모드 Pixel Normal Offset로 설정하기
Opacity (투명도)
Reflection (반사) 값들 보간

홀로그램 - (투명, 텍스처 애니메이션, 이미션)
셰이딩 모델 Translucent + UnLit (빛과 머터리얼이 상호작용하지 않음)

이미시브 입력을 상요하는 머터리얼을 설정하는 것이 조명을 대신할 수 있다.
ㄴ 디테일 -> Use Emissive for Static Lighting

실사같은 반사 표현하기
1. SSR
2. Reflection Capture

3. planar Reflections
ㄴ 프로젝트 세팅 > Support global clip for Planar Reflections
ㄴ Planar Reflection 액터를 사용 > 장면을 두번 렌더링 하기 때문에 기본적으로
 비용이 많이 든다 대신 씬 캡처 기법

4. 씬 캡처 기법 (캡처링 리플렉션)
ㄴ 장면을 텍스처에 구워서 반사하는 물체에 제공
ㄴ Scene Capture Cube 액터를 사용 (카메라와 같음), 
ㄴ 렌더 타깃은 씬 캡처 큐브에서 바라보는 장면을 저장하는 텍스처
ㄴ 거울 머터리얼이 렌더 타겟을 텍스처로 사용하면 됨

풀장의 물 표현하기
Translucent 셰이더 모델
ㄴ Depth Fade 노드 ( 깊이가 깊어질 수록 투과율이 떨어짐 ) - 투명도 설정에 사용
스크린 공간 계산에 의존하는 기법이기 때문에 뷰포트를 통해만 효과를 확인할 수 있다.
ㄴ Panner 노드 ( 좌표계, 시간, 속도 입력으로 받음)
+ Pixel Depth 함수, Scene Depth 함수

물 화선 표현
라이트 함수를 사용해 화선 효과를 표현
라이팅 채널 : 특정 표면에만 영향을 주는 특수한 효과를 만들고 싶을 때
물이 담긴 욕조 메시의 라이팅 채널을 수정
스포트 라이트에 머터리얼(라이트 함수)을 할당

애니메이션되는 바다 셰이더 만들기 (큰 규모의 표면)
Motion_4WayChaos_Normal 함수 ( 노말 텍스처를 기반으로 무작위 애니메이션 동작을 생성하는 함수)

----------------------------------------------5----------------------------------------------

레벨에 조명으로 에미시브 머터리얼 사용하기
ㄴ 조명 계산에 포함됨
ㄴ == 스태틱 조명 (동적 그림자 생성 X, 조명 빌드 필요)
ㄴ 월드 세팅 라이트매스 속성 조절
ㄴ 레벨에서 에미시브 머터리얼이 블룸에 영향을 주는 방법
1. 레벨 > Post Process Volume > Bloom 세기 조절
2. 머터리얼의 Emissive Boost 속성 조절

화면에 인터넷에서 받은 비디오 재생하기
미디어 플레이어 애셋
미디어 텍스쳐 애셋
스트림 미디어 소스 에셋

CCTV 카메라 만들기
액터(웹캠) 추가
static mesh 루트 컴포넌트로 만들고 하위에 SceneCaptureComponent2D 지정, 렌더 타깃 생성
이벤트 그래프에서 Timeline 노드 사용해서 static mesh 주기적으로 회전하게 만들기

게임에서 상호작용 가능한 물체 하이라이팅하기
포스트 프로세스 머터리얼
포스트 프로세싱 파이프라인에서 포스트 프로세스 머터리얼이 적용될 단계는 Before Tonemapping
합성곱 연산을 사용해 외곽선 판별을 수행한다.
Scene Texture : CustomDepth = 어떤 메시를 보고 싶은지 결정할 수 있도록 레벨에 있는 각 모델마다 활성화할 수 있는 속성
ㄴ Rendering 카테고리의 Render Custom Depth Pass 속성

Scene Depth = 카메라에 보이는 픽셀과 카메라 사이의 거리
모든 픽셀은 Scene Depth와 Custom Depth를 가진다. Custom Depth는 따로 설정하지 않으면 무한대의 값

게임 속 나침반 만들기
배그 0 ~ 360
머터리얼 블렌드 모드 Masked > Alpha 채널을 사용해 보이는 것과 보이지 않는 것을 조절할 수 있다.
UI 이벤트 그래프 > Tick > 이미지의 Dyanmic Material Get > PlayerRotation 파라미터에 값 설정

미니맵 만들기
오버레이 위젯

--------------------------------------------------6-----------------------------------------
정점 칠하기 기능으로 메시 칠하기
ㄴ 물체에 특정 효과를 텍스처에 직접 칠하지 않고 적용하고 싶을 때
Mesh Paint Mode로 메시 정점에 브러시로 색을 칠할 수 있다.
Vertex Color 노드에서 정점의 색을 딸 수 있다.
거대한 크기의 표면에서 종종 나타나는 반복 패턴을 제거하는데 사용
+ 텍스처 칠하기도 사용한다.

데칼 사용해 레벨에 세밀함 추가하기
1. 표준 디퍼드 데칼
2. 메시 데칼 - 프로젝트 세팅 필요 Rendering > Lighting > DBuffer Decals
데칼 처리과정
1. 머터리얼 구현
2. 머터리얼 투영

1. 디퍼드 데칼
ㄴ Material Domain Deferred Decal로 설정
ㄴ Decal Blend Mode Translucent
2. 메시 데칼
ㄴ CameraDirection Vector 노드를 사용하여  World Position Offset 조절
ㄴ 단순한 평면이 아니라 어떤 메시 위에도 텍스처를 투영할 수 있다.

시차 차폐 매핑을 사용한 벽돌 벽 표현하기
ㄴ 기하 셰이딩 같은 거? 실제로 픽셀을 위, 아래로 움직여서 노멀 맵으로 표현할 수 없는 진짜 3D 효과를 만들 수 있다.
ㄴ Parallax Occlusion Mapping 노드
ㄴ DitherTemporalAA 노드
ㄴ HeightMap?
ㄴ Pixel Depth Offset

디스플레이스먼트를 사용한 벽돌 벽

메시 디스턴스 필드를 사용한 거리 기반 마스킹
ㄴ 레벨에 있는 폴리곤 사이의 거리에 따라 머터리얼의 질감을 바꾸기
ㄴ 프로젝트 세팅 > 엔진 > 렌더링 > Lighting > Generate Mesh Distance Fields
ㄴ 동적이기 때문에 레벨에서 물체가 움직이면 효과가 자동으로 갱신된다.

-----------------------------------------7---------------------------------------
머터리얼 레이어링을 사용한 물체 위에 눈이 쌓인 효과
ㄴ 실험적인 기능, 기능 활성화 필요 (프로젝트 세팅 > 렌더링 > Support Material Layers)
ㄴ 추가적인 픽셀 셰이더 명령어가 필요 없어 성능 향상이 있다.
ㄴ Material Layer 에셋 사용, Make Material Attribute 노드
ㄴ 두개의 머터리얼 레이어 사용, 머터리얼 레이어를 사용하는 머터리얼
ㄴ 머터리얼에 Material Attribute 노드 추가 > 레이어, 백그라운드 레이어, 블렌드 에셋 (WorldAlignedBlend 노드는 어디에 입힐지 결정)
ㄴ 캐릭터 피부의 색상 스키마

커브 아틀라스를 통한 빠른 계절 변화
ㄴ Material Parameter Collection 에셋 
ㄴ Curve Linear Color, Curve Atlas 에셋
ㄴ DeSaturation 노드, CurveAtlasRowParameter 노드, Blend_Overlay 노드
ㄴ 레벨 블루프린트에서 CreateDynamicMaterialInstance, SetScalarParameterValue, Delay 노드로
주기적으로 파라미터 (CurveAtlasRowParameter의 입력) 값을 바꿔준다. (0 ~ 1 사이)

랜드스케이프 머터리얼 혼합하기
ㄴ Landscape Layer Blend 노드 (랜드스케이프 모드에서 텍스처나 머터리얼을 레이어로 사용할 수 있다)

UV 커스터마이징
ㄴ 메인 노드의 CustomizedV UV0 속성
ㄴ 머터리얼 타일링과 애니메이션 구현에 좋음

----------------------------------------8-----------------------------------------
모바일 플랫폼 머터리얼 만들기
ㄴ 머터리얼 노드 > Fully Rough 체크하면 사용하는 명령어 개수 줄어듬
ㄴ Float 연산 정확도를 Full로 하면 비용이 많이 들기 때문에 
ㄴ Use Lightmap Directionality 속성 : 노멀 맵 사용시 효과가 명확하게 보이기 위해 비용을 사용한다.
ㄴ Forward Shading 카테고리의 High Quality Reflections 속성 비활성화하기
반사를 표시하는데 사용할 큐브맵을 사용하지 않는다.
ㄴ 되도록 Default와 Unlit Shading 모델을 사용하고 투명이나 마스크 셰이딩 모델은 계산적인 측면에서 비싸므로
사용하는 머터리얼 수를 제한해야 한다.

Forward Shading과 Deferred Shading?
ㄴ 디퍼드 셰이딩은 고퀄리티 리플렉션, 다수의 다이내믹 라이트, 릿 데칼(lit decal), 그리고 모바일용 디폴트 포워드 렌더링 모드에서는
대체로 사용할 수 없는 다른 고급 라이팅 기능을 지원한다.

셰이딩 렌더러를 사용한 VR 개발하기
ㄴ Forward Rendering 설정에서 활성화 (언리얼 엔진은 기본적으로 디퍼드 렌더러를 사용)
ㄴ 안티 앨리어싱 MSAA로 변경
디퍼드 렌더링은 VR 소프트웨어를 실행하는데 적합하지 않다. 성능 때문에

텍스처 아틀라스(= 스프라이트 시트)를 이용해 최적화하기
ㄴ 작은 이미지를 한곳에 모아 놓은 한 장으 ㅣ이미지
ㄴ TexCoord 노드의 UTiling과 VTiling 속성으로 이미지를 줌인 줌아웃하고 Add 노드로 오프셋을 조정

3D 모델이 적용된 머터리얼을 텍스처로 굽기
ㄴ 여러 머터리얼이 적용된 스태틱 메시가 레벨에 많으면 비용이 많이 들기 때문에 
하나의 물체에 하나의 머터리얼만 사용하여 한번의 드로우 콜만 일어나도록 셰이딩 결과를 텍스처로
구워서 복잡도를 낮출 수 있다.
액터 병합 툴 이용하기
ㄴ Tools > Merge Actor > Merge Materials 체크
ㄴ 텍스처 사이즈를 2048x2048로 설정하여 원본과 비슷하게 만들 수 있다.

HLOD 도구로 여러 메시 결합하기 
ㄴ 레벨에 개별적으로 배치된 스태틱 물체를 가져다가 하나의 메시로 결합해 드로우 콜을 줄일 수 있게 해준다.
ㄴ World Settings의 HLOD System 카테고리에서 레벨을 추가할 수 있다.
ㄴ HLOD Outliner 툴을 사용해 레벨에 존재하는 메시들을 클러스터로 그룹화한다. 프록시 메시를 빌드할 수 있다.
ㄴ 멀어질수록 = 레벨이 높을수록 더 많은 액터들이 합쳐진다. 합쳐지는 물체들을 둘러싼 구체의 크기가 크다.

HLOD를 사용혀려면 모든 레벨에서 활성화해야 한다. (월드 세팅)
HLOD는 스태틱 메시에만 사용할 수 있다.

일반적인 머터리얼 최적화 기법
ㄴ 머터리얼 퀄리티 레벨 시스템 사용하기
ㄴ 머터리얼 Quality Switch 노드
ㄴ 장치의 기능 레벨에 따라 특정 동작을 하게 하는 머터리얼을 만들 수 있다. (낮은 사양의 그래픽
카드를 탑재한 장치에서도 동작하게 할 때 셰이더에서 덜 복잡한 수학적 연산을 사용하도록)

------------------------------------------9----------------------------------------
동일한 모델에 무작위성 추가하기
ㄴ 모델의 인스턴스에 약간의 변화를 추가하여 보이는 방식을 변경하고 싶을 때
ㄴ Instanced Static Mesh 컴포넌트에 머터리얼 할당하고 Instance 배열에 요소 추가
ㄴ 머터리얼에 Per Instance Random 노드를 사용하여 인스턴스마다 다른 부동소수점 값을 사용할 수 있다..
ㄴ Camera Depth Fade 노드를 Opacity Mask에 연결 (카메라에 너무 가까운 물체를 숨김)
ㄴ Per Instanced Fade Amount 노드를 카메라에서 가까이 있는 모델 대신에 멀리 있는 모델을 숨기는 데 사용할 수 있다.
(카메라에서 인스턴스의 자체 위치에 따라서 값을 제공)

+ HISM (Hierarchical Instanced Static Mesh) 컴포넌트도 비슷한 상황에서 성능을 향상시키는데 사용되는 컴포넌트이다.
일반 스태틱 메시에 다른 레벨 오브 디테일을 생성해 인스턴싱함

차폐된 영역에 먼지 추가하기
ㄴ 조명 빌드가 선행되어야 한다 (라이트 맵이 필요) (레벨에 배치된 조명이 Stationary나 Static으로 설정되어 있어야 한다.)
ㄴ 월드 세팅 > Lightmass > Generate Ambient Occlusion 속성 켜기
ㄴ PrecomputedAOMask 노드 : 머터리얼에서 조명데이터를 이용하여 질감을 계산하도록 돕는 노드

+ 무버블 조명을 사용할 때는 다른 기법을 사용할 수 있다. 외부 소프트웨어에서 AO 텍스처를 생성하거나 Distance To Nearest Surface 노드와
같은 유사한 노드를 사용할 수 있다.

여러 메시를 가로지르는 텍스처 좌표 일치시키기
ㄴ 하나의 텍스처가 여러개의 메시에 자연스럽게 이어지며 입혀지도록 하는 방법
ㄴ 물체의 UV 좌표 대신 월드 좌표계에서의 각 픽셀 위치를 활용하여 텍스처를 입힌다.
ㄴ Absolute world Position노드와 PixelNormalWS 노드를 활용한다.

퀄리티 스위치를 통한 머터리얼 복잡도 조절하기 (UE4)
ㄴ Quality Swith 노드, Feature Level Switch 노드 (ue5는 메인 머터리얼 노드에 테셀레이션 멀티플라이어 입력이 없다..)
UE4에서 UE5로 넘어가면서 테셀레이션 관련 설정은 나나이트로 대체되었다. 메인 머터리얼 노드의 World Displacement 속성과
Tesselation Multiplier 속성이 없다.
+ 모바일 셰이더 모델 : ES2 ES3_1
PC : SM5 SM6

인테리어 큐브맵 사용해 건물 내부 텍스처링하기 (건물 내부를 실제적으로 보이게 하는 기법)
ㄴ Interior Cubemap 노드, 마스크 텍스처 사용하여 마스크된 영역에 큐브맵을 적용
ㄴ 큐브맵 생성은 큐브맵 도구를 사용해서 만들어야 한다.
https://docs.unrealengine.com/4.26/ko/RenderingAndGraphics/Textures/Cubemaps/CubemapTools/

완전 절차적 Noise 패턴 사용하기
ㄴ 비용이 상당하기 때문에 다른 애셋을 생성하는 수단으로 이 기법을 사용하는 것이 좋다.
ㄴ 다양한, 반복패턴이 없는 텍스처 제작에 사용
ㄴ Noise 노드가 사용됨
ㄴ Scale 속성 : (커질수록 노이즈가 작아짐)
ㄴ Quality 속성 : (높을수록 전이가 일어나는 부분이 부드러워짐)
ㄴ Function 속성 : 패턴을 생성하는 로직을 제어
+ Function은 종류에 따라 명령어의 개수가 다르고, 특정 효과를 표현하는데 특화된 경우가 많아 신경 써서 알아두면 좋다.

+ Recent posts