본문 바로가기

언리얼/머티리얼

2024 언리얼 엔진 실무 기반 교육 과정 21일차

  • 투명재질 - Trnas lit, Tran sunlit, Trans Advance, Trans Fast, Trans Dither, Refraction, REflect Refract, Ice, SL water
  • 착시 질감 - Wpo, Parallax, Bump offset
  • Dissolve
  • 움직이는 커튼

<투명재질>

 

Translit

- 머티리얼 생성

- 베이스 컬러에 흰색 연결

- 블렌드 모드 Translucent로 변경

* Default Lit - 기본 빛을 받겠다는 뜻

- 오파시티 연결

= 반투명재질

 

* 뎁스 테스트

- disable 검색

> 오브젝트로 가려도 물체가 보인다

 

Transunlit

- 머티리얼 생성

- 셰이딩 모델을 Unlit으로 변경

* Unlit - 재질 자체로 띄워놓겠다, 빛을 안받겠다

- 블렌드 모드를 Translucent로 변경

* 너무 어두워지지 않기 위해 이미시브 컬러를 연결

= 영향 안받는 반투명재질

 

* 투명 재질이 겹칠수록 복잡도가 높아진다

   > 눈속임을 하거나, 최대한 투명한 물체를 겹치지 않도록 한다

  > 언릿을 사용한 투명재질이 더 가볍다

 

TransAdvance

* 가장 복잡도가 높은 투명재질

- 머티리얼 생성 

- 블렌드 모드 Translucent로 변경

- Translucency의 스크린 스페이스 리플렉션을 체크

- 라이팅 모드를 Surface ForwardShading으로 변경

- 수치값들을 연결해준다

= 반사가 있는 투명재질 완성

 

Transfast

- 머티리얼 생성, 블렌드 모드를 Translucent로 변경

- Translucency > 라이팅 모드를 Volumetric PerVertex Directional로 변경

- 노드 연결

= 버텍스를 기준으로 라인이 생긴다.

 

* Translucency > 라이팅 모드를 Volumetric PerVertex NonDirectional로 변경

    > 자기 마음대로 면을 계산한다

 

Mask

- 머티리얼 생성

- 블렌드 모드를 Masked로 변경

- 텍스쳐 노드 연결

- 복잡도를 확인했을때 불필요한 부분이 모두 사라진 모습을 볼 수 있다

   > 가장 가벼운 방법

 

TransDither

- 머티리얼 생성

- 블렌드 모드 Masked 연결

- Dither Temporal AA를 생성 후 오파시티 마스크에 연결

- 다른 노드 연결

= 픽셀화가 됨

   > 구멍이 뚤려 투명하게 보임 / 가장 가벼운 페이크

 

Refraction

- 머티리얼 생성

- 셰이딩 모델 > Unlit으로 변경

- 블렌드 모드 > Translucent로 변경

- 리프랙션 > 리프랙션 메서드를 Index Of Refraction으로 변경

- 오브젝트 끝에 맺히는 굴절을 위해 Fresnel 생성 후 Refraction에 연결

= 끝에 굴절이 맺히는 투명재질

   * 노말을 넣으면 노말 굴곡에 맞춰 굴절이 생김

 

Reflect Refract - 반사와 굴절을 둘 다 사용

- Vertex normal WS를 생성 후 베이스 컬러에 연결

- Reflection Vector WS노드를 생성 후 사이에 끼워 베이스컬러에 연결

- HDRI를 불러와서 연결

 

- Refract 생성 후 Ray Direction에서 핀을 뽑아 Camera Direction Vectror을 연결

- Surface Noraml에 Vertex Normal WS를 연결한다.

- Refractive index Origin에 1, Refractive Index Target에 1.52를 각각 연결해준다

- HDRI 텍스처에 연결

- Reflect와 Refract의 노드를 각각 분리

- Lerp로 연결 후, Fresnel을 알파값에 연결해준다.

- Lerp를 베이스 컬러와 이미시브 컬러에 연결

= 반사와 굴절이 모두 일어나는 재질

 

Ice

- 머티리얼 생성

- Camera Vector WS 생성 후 핀을 뽑아 TransformVector 생성

   > 공간을 계산하는 정보를 다른 공간을 계산하는 백터 값으로 변경

      > 좌표계를 해당 선택지 좌표계에 맞도록 바꿔준다 (ex. XYZ를 ZYX로 변경)

게임이펙트-언리얼엔진3-Material-탄젠트.. : 네이버블로그 (naver.com)

* 언리얼 4 이펙트 게시글도 있는듯 함..

- Transform Vector의 소스를 World Space로 바꾼다

- Transform Vector의 대상을 Tangent Space로 바꾼다

- CustomReflection Vector 생성

- 기본 Normal에 연결되어있는 것을 CameraVector에 연결

- Normal엔 노말맵을 연결해준다

- Reflection 에 Mask를 두개 연결, 하나엔 Multiply를 연결해준다.

- 다른 하나의 마스크는 B값만 설정해주고  ABS를 연결해준다.

ABS

* 나오는 값을 모두 양수로 만드는 노드

- Abs에 Divide를 연결하고, Param을 생성하여 연결해준다

*해당 노드들은 z값의 깊이를 설정해준다

노말이 표면, 노이즈맵이 내부에 있는 모습

- 첫번째 Mask에 연결해둔 Multiply에 모두 연결해준다

- Multiply에 Multiply에 연결하고 B에 Divide를 연결

- Divide에 1과 512(텍스쳐 크기) 연결

* 해상도 조절 노드

- 노이즈 텍스쳐 불러오기

- Add를 생성하여 Multiply와 Texcoord를 더해준다

- 텍스쳐에 연결

 

* 텍스쳐를 복사하여 R 값을 Multiply를 연결해 Z값 깊이 노드의 Divide에 연결

= 색에 따라 깊이감이 다른 질감

- 베이스컬러 텍스쳐에 Lerp와 Multiply를 연결

- Lerp에 각각 색을 연결하고 Alpha값에 텍스쳐 RGB를 연결

- Multiply에는 0.3을 곱한다

- Lerp는 베이스 컬러에 연결

- Mulriply에는 Power를 연결하여 러프니스에 연결해준다.

= 반사까지 되는 얼음 재질

 

SLwater

- 머티리얼 생성

- 셰이딩 모델을 Single Layer Water로 변경 

* Single Layer Water 노드가 되면 Single Layer Water Material 노드를 생성할 수 있음

- 노드 기본 연결

- 노드 디테일에서 리프랙션 메서드를 Index Of Refraction으로 변경

- 3 콘스탄트와 1파라미터를 만들어 Multiply에 연결

   > Murkiness = 탁함의 정도

- Divide를 만들어 Multiply와 파라미터를 만들어 한번 더 연결

  > Divide를 사용하는 노드는 섬세한 수치값이 필요한 경우이다

- Single layer Water Material의 Absorption Coefficients에 연결

= 물 속을 들여다보는 것 같은 재질

 

Scatterign - 확산

- Absorption Coefficients에 연결한 노드를 복사 한다

- water Murkiness의 이름을 water scattering으로 변경

- Scattering Coefficients에 연결

- 색상을 가져갈 수 있도록 3 콘스탄트를 파라미터로 변환

 

물 노말 연결

- Texcoord에 Panner연결하고 노말맵도 연결한다

- Tex coord의 UV를 각각 3, 3 적어준다

- 그대로 복사해서 나란히 두고 Panner X에 0.1, 아래 패널은 Y에 0.1을 적는다

- Blend Angle Corrected Normals 노드를 가져와 각각 연결

- Blend Angle Corrected Normals를 노말에 연결한다.

= 물 질감 추가

 

* 프로젝트 세팅 > 엔진 > 렌더링 > 루멘

   > 사용 가능한 경우 / 하드웨어 레이 트레이싱 사용 활성화 해주면 좋음

 

<Post Process Volume>

Reflection

- 모두 켜주기

   > 키고 안키고의 차이가 있음


<착시효과>

 

Wpo

- 머티리얼 생성 후 기본 베이스 텍스쳐와 노말맵 연결

- 텍스쳐에 Multiply로 40을 곱하고 Multiply를 한번 더 연결한 뒤 VertexNormal WS를 곱한다

- Multiply를 월드 포지셩 오프셋에 연결

 

= 기본 Plan과 SM_plan, SM_plan_Very Dense에 연결한 모습

    > 버텍스가 많을수록 노말맵과 비슷하게 올라온다

 

Parallax

- 머티리얼 생성

- Parallax Occlusion Mapping 노드 생성

- 베이스 컬러와 노말맵 기본 연결

- 텍스쳐를 텍스쳐 오브젝트로 변경해 Parallax Occlusion Mapping의 Hightmap Texture에 연결

- 파라미터를 생성해 Height Ratio에 연결

- Hight map channel에 4콘스탄트 연결

= 올라와보이는 이미지

 

바운드

- 오브젝트 선택 후 디테일에 Bound 검색

- 바운드 스케일을 2로 올려주면 뷰포트 주변에 걸렸을때 깜빡거리지 않음

 

Bumpoffset

- 월드 포지션을 생성하고 Mask, Divide, 텍스쳐 순서대로 연결한다.

   > Divide의 B를 500으로 설정한다 (확대)

= 이미지는 그대로 있고 오브젝트만 움직이는 모습

- BumpOffset 노드 생성

- Bump Offset의 Height에 파라미터 연결

- Bump Offset에 텍스쳐를 연결하고, 각 텍스쳐에 1-x를 연결

- Bump Offset과 연결된 텍스쳐에 Multiply를 연결하고 0.3을 곱한다

- Max를 생성하여 A에는 1-x를, B에는 Multiply를 연결

- 베이스컬러에 Max 연결

 

= 안에 깊이가 있는 것 같은 착시 효과

 

* 텍스쳐 연결

- Height 텍스쳐에 Multiply로 Bump offset height 파라미터를 곱해준다

- Multiply의 값을 Bump Offset의 Height 에 연결  

- Bump Offset의 값을 베이스 컬러와 노말에 각각 연결해준다

= 올라온 모습

   > 수치값을 너무 올리거나 내리면 텍스쳐가 이상해짐 주의


<Dissolve>

- 머티리얼 생성

- 머티리얼 함수 생성

- 머티리얼 함수에 들어가서 World position을 생성

   > 월드 포지션을 사용하면 불규칙한 텍스쳐를 얻을 수 있다

- XYZ에서 핀을 뽑아 Noise 노드 달아준다

- Noise 노드에 Add를 달아준다. B값에 -2를 써준다.

   > 완전한 검정을 만들어주는 역할

- Add에 Add를 한번 더 더해주고 B에 Mulfiply 연결

-  연결한 Multiply의 A값에 Function Input을 연결해주고 B엔 4를 적어준다

   > -2부터 2까지 4개의 값에 4를 곱하면서 0~1로 동기화를 해줌

- Add에 연결

- Saturate 생성

> 값을 고정

- Frac 생성

  > 정수를 없애고 소수점 밑의 값만 사용

- Subtract를 생성하고 B에 0.5를 써준다

- Sign을 연결

- Saturate에 1-x를 연결 후 Funtion Output연결

- Sign에 Multiply를 연결하고 Function Input을 생성하고 연결

* Input이 vector 3인지 확인

- Output outline에 Multiply를 연결해준다

- 함수 디테일 창에서 라이브러리에 노출 활성

* noise 노드 대신 텍스처 사용 가능

- Dissolve 머티리얼로 가서 결과노드 > 머티리얼 > 블렌드 모드를 Masked로 변경

- 베이스컬러에 회색 연결 후 만든 함수를 불러온다

- outline에 색상 파라미터 연결

- Fade에 파라미터 생성 후 연결

- Opacity > 오파시티 마스크 연결

- Outline > 이미시브 컬러 연결

- 머티리얼 인스턴스 생성

- Global Scalar Parameter Values > 머티리얼 사라짐 정도

- Global Vector Parameter Values > 이미시브 컬러

   > 색상 지정 후 V값을 올려 빛나게 만들어 줄 수 있다

= 빛나며 사라지는 머티리얼


<움직이는 커튼>

- 머티리얼 생성

- Time 생성하고 Multiply를 생성해 연결한다. B에는 파라미터 연결

- Multiply를 하나 더 연결하고 Panner의 time과 연결해준다.

* panner의 Y값을 -0.1로 만들어줘야 움직임

- panner를 노말맵과 연결

- Multiply를 생성해 VertexNormal WS와 노말맵에 연결해준다.

- Add에 3백터를 생성해 연결하고 Multiply도 함께 연결한다.

   > 3백터가 움직이는 방향 설정

- Multiply를 하나 더 생성 후 A에 Add를 연결하고, 노말맵 G값을 B에 연결한다

- Multiply를 하나 더 연결하고 월드 포지션 오프셋으로 연결

- 커튼의 위쪽 움직임을 멈추기 위해 Vertex Color와 Clamp를 생성해 Multiply B에 연결해준다

 

* 중간 노드 정리

- 메시페인트 모드에서 RGB채널로 펄럭임 강도 칠해주기

   * 페인트 컬러에 따라 강도가 달라짐

= 울렁울렁 커튼

 

살랑살랑 흔들리는 바람 만들기

- Rotator를 달아 Panner의 Coordinate에 연결

- Texcoord를 만들고 Multiply를 만들어 연결

- 파라미터를 만들고 B에 연결

   > wave size의 값은 -0.08로 설정

- Rotator의 Time에 Add 연결

- Time 노드 생성 후 Multiply도 생성. 파라미터를 만들어  Rotator speed라고 이름을 분류한다

- sine 노드 연결 후, Multiply 하나더 생성하고, Rotator direction Jiggle 파라미터를 만들어 함께 연결한다

- Add를 만들고 A에 Multiply를 B에 Rotator direction wave 파라미터를 연결한다

- Rotator에 Texcoord와 연결된 Multiply를 연결한다

= 살랑살랑 흔들리는 커튼

* 흔들리는 방향 고정하기

> 방향을 돌리면 흔들리는 방향도 바뀌는 상태임

- 마지막 Multiply에 Transform(Vector)를 연결하여 월드 포지션 오프셋에 연결해주면 된다.

 


셰이더 복잡도

- 재질이 부하를 얼마나 잡아먹고 있는지 볼 수 있다

 

FPS 표시

- 옆에 프레임이 뜬다

- 30프레임 밑으로 떨어지면 안됨. 60으로 유지하면 좋다. (40~50정도도 허용범위)

 

메시 페인트 복사

- 칠한 메시를 선택 후 복사하기를 누른 뒤 다른 메시를 선택하여 붙여넣기 하면 된다.