딱히 필요한 기능이 생각날 때까지는 시퀀스용 언리얼 에디터 유틸리티 위젯 제작은 그만할 것 같고,
지금 하는 바이패드 리깅이 너무 오래걸려 심심하던 차
이전에 스터디하며 공부했던 쉐이더 관련 포스팅을 씁니다.
벤클라우드라는 쉐이더의 아주 기본부터 알려주시는 분의 유튜브 강의가 아주 좋습니다.
lerp 나 dot 등, 블루트린트 제작에도 가끔 쓰이는 ( 시퀀스용 툴 만들 땐 꽤 많이) 개념들도 나와서 같이 공부하기 좋습니다.
Shader Graph Basics Episode 의 Episode 6, 7부터 올리는데,
1~5는 쉐이더 그래픽 파이프라인과 언리얼에서 텍스쳐를 가져오고 머티리얼을 만드는 기본적인 강의입니다.
Announcing What's Next! - Shader Graph Basics - Episode 1 - YouTube
Shader Graph Basics Episode 6
Linear Interpolation

기본적으로 0-1의 값을 범위로 가지며, 값의 범위를 초과하는 값을 입력 시, clamp 되지 않고 초과한 값을 출력함
선형보간
기본적으로 0-1의 값을 범위로 가지며, 값의 범위를 초과하는 값을 입력시, clamp 되지 않고 초과한 값을 출력함
리니어 인터폴레이션은 두가지 텍스쳐를 선형 보강하는데 쓰이는 노드이다.
A, B 두 가지 텍스쳐(or 컬러 ) 인풋을 받으며, 보간정도는 Alpha로 조절한다.
0-1 값이 기본이며, 0으로 갈수록 A가 출력, 1로 갈수록 B가 출력된다.
0-1 값을 가진 텍스쳐도 사용가능하다.
0-1 값을 벗어난 범위의 값을 넣을 수 도 있다. ( 하지만 검게 나오거나 , 컬러가 비정상적으로 보일 수 있으니, 사용하지 말자 )
Shader Graph Basics Episode 7
DOT
두 벡터를 곱한다 , 두 벡터의 곱=내적, 값의 형식은 스칼라
내적인 것은 알았으니, dot 이 어떻게 쓰이는지 예제를 통해 알아보자.
1. 버텍스와 카메라와 거리를 구하여 밝기 정도를 조절하기.
→ 카메라에서 보이는 물체의 부분 중, 거리가 가까운 것은 1, 먼 것은 0 값을 가진
그레이스케일을 표현하고 싶다.

- 카메라 포지션에서 절대월드 포지션을 빼면, 벡터에서 카메라 쪽으로 뻗은 벡터를 구할 수 있다 정확히는 , 카메라 뒤쪽으로 상이 맺힌다.
- 여기에 노멀라이즈 과정을 통하여 벡터의 ‘길이’를 1로 만든다. 이 과정을 통하여 각 버텍스에서 카메라 쪽을 바라보는 벡터방향을 얻는다. ( 벡터는 방향과 크기가 있는 개념인데, 크기를 1로 만듬으로 방향값만 쓰기 위함. )
- 위에서 구한 벡터내적을 통해 벡터의 노멀이 얼마나 카메라 쪽으로 얼마나 기울었는가를 0~1의 값으로 구할 수 있다. ( cos0=1 cos90=0 , 버텍스노멀, 빗변(n)이 카메라방향(밑변)과 이루는 각도 (0~90)로 (1~0) 값을 얻는다.
- 위에서 구한 (1~0) 값을 base color에 입력하면, 버텍스노멀이 카메라방향과 가까울수록 1, 수직을 이룰수록 0 값을 가진 1D 그레이스케일 ( 내적 y: 스칼라 )을 얻을 수 있다.
- 반대개념을 적용한 것이 Fresnel이다. ( cos0=0, cos90=1 )

추가내용 :
카메라 포지션?
월드좌표에서 카메라가 가지는 포지션 XYZ 값을 나타낸다.
3D 벡터이기 때문에, base color에 해당 노드를 연결하면 RGB로 출력된다.
0,0,0 인 상태에서는 블랙이 출력되고
0,0,1000 인 상태에서는 블루가 출력되는 것을 확인할 수 있다.
( 아래 예시는 위치/ 2500을 하여 0, 0, 0.25 값의 blue 가 출력되는 상태이다.

절대 월드 좌표?
월드에서 각 버텍스가 위치한 좌표값을 나타낸다.
사용 예시로는 3축 프로젝션 매핑 쉐이더를 만들어, 물체 간 자연스럽게 이어지는 텍스쳐를 구현하는 데 사용한다.

노멀라이즈?
총 길이가 1을 가진 벡터이기 때문에 , 벡터의 ‘방향성’만 필요한 계산에 주로 사용한다.

2. 내적을 이용하여 RGB 텍스쳐를 그레이스케일 화 하기.

휘도란 , 이미지에서 반사되어 눈으로 들어오는 빛의 밝기이며, 이처럼 RGB에서 구한 휘도를 상대휘도(relative luminance)라고 한다.
인간이 ‘밝다’ 고 인식하는데 녹색이 많은 부분을 차지하기 때문에 G값이 높다.
위의 그림에서도, 모든 채널이 1,1,1 인 8의 색상이 가장 밝고, R과 G를 가진 3이 그다음, G만 가진 4가 그다음으로 밝다.
but.. 효율이 좋은지는 모르겠다.
Luminance? 상대 휘도?
휘도는 눈부심의 정도, 대상면에서 반사되는 빛의 양을 나타내며 단위는 ‘cd/㎡’이다.
그 자체가 발광하고 있는 광원뿐만 아니라, 다른 광원으로부터 반사되어 빛나는 2차적인 광원(가로등의 빛을 반사하여 2차 광원으로 작용하는 도로처럼)에 대해서도 밝기를 나타내는 양으로 쓴다. → 조명디자인, 차인호 저
보통 상대 휘도는 LR, LG, LB의 절댓값이 아니라 그 비 LR : LG : LB로 표시된다. 종래는 이것을 명도 계수라 했지만 현재는 상대 휘도라 한다. → 네이버 광용어사전
G값이 높은 이유는 = 녹색 빛은 인간이 인지하는 강도에 가장 많이 기여하고 파란색 빛은 가장 적습니다.
Wikipedia site:ko.isecosmetic.com

상대 휘도
《원자극》 3색 표색계(예컨대 RGB 표색계)의 3개의 원자극의 상대적인 휘도. 3색 표색계는 3개의 원자극을 등량가법혼색으로 하면 등(等)에너지 스펙트럼에 등색하도록 구성되어 있다. 3개의 원
terms.naver.com
3. 채널 마스크 기능
내적은 두 벡터의 각 채널 간 곱의 합이다.
따라서 마스크가 필요한 채널만 1, 나머지는 0으로 두면, 해당 채널의 그레이스케일 맵을 얻을 수 있다.

위에 살펴본 dot을 통한 예제들은 각각 Desaturation, mask라는 쉽고 간단한 노드가 이미 있지만, 내적을 어떻게 활용하는지를 공부한 것으로 의미를 둔다.
BenCloward 아저씨의 강의 중에, dot을 잘 활용한 강의가 하나 더 있는데,
그것은 바로 UE4 Materials 101의 섬유 쉐이딩강의.
Cloth Shading - UE4 Materials 101 - Episode 10


- 첫 번째, 카메라와 픽셀노멀의 내적값에 제곱과 곱을 사용하여 실크의 특성 ( 정면을 바라보는 표면의 스페큘러가 강한)을 살렸다.
- 제곱 = 스페큘러의 전체적인 범위를 조절한다.
- 곱 = 제곱으로 설정한 범위에서, 스페큘러의 falloff정도를 조절한다 (높을수록 더 적은 falloff)

- 외각부와 중심부 스페큘러를 조절하는 기능을 add 하여 총 4개의 파라미터를 가진 의류 머티리얼 쉐이더 템플릿을 만들었습니다. 이제 4개의 파라미터를 조절하여 사용하면 됩니다.


