언리얼 개발/이것저것 테스트

카툰 렌더링 메테리얼 연구 -2

WhNi 2024. 3. 27. 22:58

1. 카툰 렌더링은 일단 라이트 버퍼를 따로 추출해야 함

2. 원래 Gbuffer에 있는 RGB 색깔을 곱한 값을 Emissive Color의 결과값에 대입한다.

여기부터 다시 시작해야하지만 좀더 심화적인 이해를 위해서 처음 단계부터 다시 시작해 보자

 

처음에, 메테리얼을 제작하고, 포스트 프로세스라고 설정한 뒤에. Scenetexture의 postprocessinput의 컬러를 설정한다.

 

Desaturation ( 채도 감소 )을 통해서 채도를 낮추고, saturate( 값을 0과 1 사이로 제한하는 기능 ) 를 통해서 component Mask(특정 색상 채널 추출)에서 R 값만 추출해준다.

 

이를 바로 적용하면, 화면이 흑백으로 바뀌게 된다.

채도 값만 뺀 모습

 

여기서 툰쉐이딩의 핵심인, 빛과 그림자의 전환 영역을 단순하고 명확하게 표현해야 한다.

빛 과 그림자의 경계는 0~1 사이의 값을 가지는데, 조명 강도에 따라서 빛인지 그림자인지 표현된다.

 

threshold (임계값) 0.5 정도로 설정해 놓으면, 조명 강도가 50 이상이면 빛, 50 이하면 그림자로 구분된다는 뜻이다.

여기에 light shadow transition size를 0.2라고 설정해서 경계에 대한 비율을 조절할 껀데, 툰 쉐이딩의 경우는 많이 밝을 수록 부드럽게, 어두울수록 갑작스럽게 표현해야 한다. 그렇게 때문에 smoothstep(경계에 대한 보간)을 할때, 현재 채도에 대한 빛, 그림자 경계를 설정할때,  value는 현재 채도 값. min 의 경우는 threshold -1 . max의 경우 threshold + light shadow transition size를 더한값으로 해줘야 한다.

밝을수록 부드럽게, 어두울수록 갑작스럽게 표현하는게 중요함

즉) 70% 정도의 빛을 받을때는 빛으로 간주하되 50부터 70까지는 부드럽게 묘사되고,  -0.5 정도는 되어야 그림자가 보이는거고, 그 전까지는 어느정도 밝게 보이는 것이다. (솔직히 제대로 이해한건지 모르겠다.) 

추가적으로, 원래 Gbuffer에 있었던 baseColor의 원래 RGB 값을 다시 추출해서, 이 값과 곱해주면

채도 조절을 제외한 다른 부분들은 원래 Color로 돌아오는거 같다.

 

Light shadow 조절하니까 확 달리지긴 했다.

벌써 카툰 풍이 뭔가 느껴지는 거 같다. 

 

이제 light 와 shadow에 tint(색감)이 적용되도록 해줘야하는데, Shadow tint와 light tint라는 벡터 파라미터를 만들어서 선형보간해준 값을 출력값에 연결해주면 된다.

이때부터는 그림자와 빛에 색감이 적용이 된다.

 

이후에는 

씬 텍스쳐에서 BaseRenderBlend Amount 라는 값을 0.5로 정도로 설정하고, 서로 곱해서 BaseColor 에 component Mask(RGB)에 더해주면

 

멀어서 그림자 처리 되었던 부분도 RGB 컬러가 50% 정도 살아난 셈이다.

R 채널만 추출해서 안보였던 컬러들이 50% 살아나서 보여지게 된다.

 

이 메테리얼의 인스턴스를 만들어서 보면, 이제 global tint를 조절할 수 있게 되는데, 중요한건 하늘은 이 범위에서 제외해줘야 한다는 사실이다.

 

그래서

 

Sky box 부분은 tint 설정에서 제외되도록 설정해줘야 한다.

 

Scene Depth의 Max distance를 설정해주고, step( 임계값보다 작으면 0, 크면1) 로 하고,

postprocess component Mask(RGB)채널을 적용해주면, 멀리있는 하늘은 이 postprocess의 빛과 그림자 색감의 영향을 안받도록 설정된 것이다. 

 

정리하자면,

 

1. 카툰 렌더링은 일단 라이트 버퍼를 따로 추출해야 함

2. 원래 Gbuffer에 있는 RGB 색깔을 곱한 값을 Emissive Color의 결과값에 대입한다.(곱하기 전에 SceneTexture -Postprocessinput 에 BaseColorBlendAmount 값을 곱한값을 더해줘야 기존의 컬러가 나옴)

3.그림자와 빛의 tint가 적용되도록 해줘야함

4.하늘은 그림자와 빛의 tint의 영향을 안받게 조정해줘야함

 

여기까지 설정해놓은 것이다.

 

전체적으로 툰 쉐이딩을 적용하려면 이렇게 끝이나겠지만, 모든것을 툰 쉐이딩 하는것이 아니라 특정 객체만 하고 싶다면, 

Custom depth 설정을 따로 해줘야 한다.

 

Custom depth 설정은 다음 포스트에 진행할 예정이며, depth 가 끝나는 대로 Outline으로 넘어갈 예정이다.