본문 바로가기
대학생활/수업

콘텐츠프로그래밍2 10주차 - 헤어 스페큘러

by se.jeon 2024. 11. 20.
728x90
반응형

디렉토리 규칙을 지켜 링크가 깨지지 않도록 할 것.

M_TangentTest 머티리얼 제작

 

 

하프 램버트를 제작한다.

 

 

Sets the preview mesh based on the current content browser selection 기능을 통해

브라우저에서 선택한 모델링에 머티리얼을 적용한 프리뷰를 볼 수 있다.

 

버텍스 간격이 넓은 경우 Vertex Normal과 Pixel Normal 차이가 발생한다.

Pixel Normal은 픽셀들의 정보를 계산 해 줌.

멀리서 보았을 때는 모를 수 있지만, 가까이서 보면 차이가 많이 발생한다.

 

Vertex Normal

 

 

Pixel Normal

 

 

버텍스 간격이 픽셀보다 커지면 노말을 어떤 것을 사용하는지 계산해야 하는데,

서로 간의 거리를 보고 적당하게 중간값 노말을 만들어서 쉐이딩하면 부드럽게 된다. 보정을 해 준다는 차이를 가진다.

Interpolation, 보간을 해 주는 것이 Pixel Normal이다.

 

PixelNormal을 사용하는 것이 더 정확하긴 하지만, 원리를 알기 위해서 수업 시간에서는 VertexNormal을 사용한다.

 

 

하프 램버트로 하니 다소 밝아서 램버트로 진행한다. 

L키 + 마우스로 라이팅을 조정할 수 있다.

 

Hair Specular는 일반적인 Specular를 사용하지 않는다.

머리의 표면을 따라 움직인다. 이러한 방식을 비등방성 필터링이라고 한다.

따라서 머리쪽 머티리얼은 분리를 해야 한다.

 

표면이 흐르는대로 구성하려면 표면 정보를 알아야 한다.

 

 

Show > Normal을 통해 노말값을 확인할 수 있다.

텍스쳐를 붙일 때 노말을 기준으로 장판을 붙이듯이 붙인다.

텍스쳐는 2차원, 기저벡터가 2개가 있다.

 

 

Tangent와 Binormal을 사용한다.

바이노말(파란색)은 아래쪽, 탄젠트(빨간색)은 오른쪽을 향한다. 이를 탄젠트 공간이라고 한다.

노말, 탄젠트, 바이노말을 가지고 벡터 공간을 만들 수 있다.

 

 

UV를 살펴보자. 텍스쳐는 모델링 mesh에 부착되는 도배장판과 같다.

언리얼 엔진에서 UV는 좌상단이 0,0/ 우하단이 1,1이다. 유니티는 좌하단이 0,0인 차이가 있다.

서로 UV 공간이 다르기 때문에 뒤집어주는 작업을 했던 것.

 

U측이 왼쪽 > 오른쪽

V축이 위쪽 > 아래쪽

 

X, Y는 수학에서 쓰는 좌표이기 때문에 헷갈리지 않게 월드와 무관한 U, V를 사용한다.

탄젠트는 U축에 해당하고, 바이노멀은 V축에 해당한다.

대부분의 모델링의 기본 규칙 : 탄젠트가 U축, 바이노멀이 V축으로 가도록 설정하는 것이 일반적이다.

 

모든 좌표, 버텍스마다 각 벡터가 심어져 있다.

탄젠트 정보를 빼게 되면 (Vertex Tangent WS 사용) 빛에 무관하게 라이팅이 왼쪽에서 오른쪽으로 지게 된다.

 

 

 

둘의 방향이 같기 때문에 Dot Product의 값이 1이 된다.

뒷면으로 가면 시커멓게(0) 나온다.

 

탄젠트에 대한 이해를 해야 헤어 스페큘러를 이해할 수 있다.

 

버텍스에서 바이노말을 불러오는 노드가 없는 이유

노말과 탄젠트의 외적으로 바이노말값을 구할 수 있기 때문에

데이터 용량을 줄이기 위해 바이노말은 값을 저장하지 않는다.

 

 

바이노말과 바이탄젠트 중 바이노말이 언리얼 엔진에서 주로 사용되는 방식.

블린퐁이 훨씬 단순하기 때문에, 블린퐁을 많이 사용한다.

 

 

abs를 사용하여 반전을 시키면 반대쪽 방향이 하얗게 된다.

 

 

1-x를 사용하여 반대로 강조 해 준다.

power 연산을 활용하여 강도를 조절한다.

 

 

셰이더를 사용하려면 기본적으로 모델링이 잘 되어있어야 한다.

그래서 모델러도 관련 내용을 이해하는 것이 좋다.

 

 

물이나 폭포 표현에 tangent나 binormal을 많이 쓴다.

 

 

지난번에 했던 EllenJoe base를 복사하여 Mari를 제작.

 

 

Hair Specular를 넣어 볼 예정.

Maribase에 Hair Specular 옵션을 추가 해 주고, 4번 머티리얼에 스페큘러를 추가한다.

 

 

 

위에서 아래로 말려 내려오는 쉐이딩을 제작 해 준다.

 

 

절대값을 취해서 반전 해 준다. 헤어링을 제작한다.

 

 

SmoothStep을 사용 해 주어도 된다.

 

 

VertexHairSpecular로 네임드를 제작 해준다.

 

 

Add로 연결 해 준다.

 

 

동작은 하지만, 머릿결을 따라가지 않는 문제가 있다. 모델링이 잘못되었기 때문.

 

 

텍스쳐를 확인 해 보면, 머리가 세로로 되어있음을 확인할 수 있다. 머릿결이 U가 아니라 V로 되어있는 것.

용량을 줄이려고 해도, 방향은 서로 맞춰야 한다.

헤어 스페큘러의 vertex tangent를 써 줘서 해결할 수 있다.

 

 

 

 

노드 정보를 복사하고, 텍스쳐 샘플에 텍스쳐를 넣는다.

 

 

결합하여 교란된 형태로 제작할 수 있다.

 

 

수식을 통해 제곱하고, 뒤집어주고, 제곱근을 구한다.

Power를 통해 증폭을 시켜주고, 0과 1을 벗어나지 않도록 Saturate 처리를 해 준다.

 

 

제작된 결과물은 Kajiya Kay hair specular 공식을 반영한 것이다.

 

 

다시 말하지만, 모델링을 잘 해야 한다.

728x90
반응형