이것 저것 개발하고 만들어보기
article thumbnail

 

 

 

 

 

흔히 Normal Map 이라는 적은 폴리곤을 가진 지오메트리에 스크래치나 나사 홈, 울퉁불퉁한 표면 디테일을 모델에 추가하는 데 사용할 수 있는 텍스쳐로 많이 알려져 있습니다.

 

 

3개의 점(Vertex)이 하나의 면(Face)를 이룰 때, 이 면의 수직 방향을 Normal(노말)이라고 합니다.

 

 

점이 3개 이어진 면은 양면을 렌더링하게 되지만, 노말의 방향만 렌더링을 하게 된다면, 양면이 아닌 한쪽의 면만 렌더링할 수 있게 되어 시간을 절약할 수 있습니다.

 

 

 

 

Normal Vector, Light Vector

 

 

 

Blender에서 Dispaly Normal 을 Face로 표시했을 경우.

 

 

노말 벡터(Normal Vector)는 한 평면이나 직선에 대하여 수직인 벡터를 뜻합니다.

 

 

법선 벡터라고도 하는 이 노말 벡터는 3D 그래픽스에선 Light Vector 라고 하는 조명과 상호작용하여 해당 폴리곤 표면의 밝기를 보여줍니다.

 

 

 

 

 

 

 

 

해당 사진처럼 폴리곤의 면에 수직으로 빛을 받는다고 가정한다면, 노말 벡터와 조명 벡터는 서로 수직으로 마주보게 됩니다.

 

 

이 때, 마주보는 해당 폴리곤의 표면이 밝아집니다.

 

 

3D 그래픽에서의 조명은 이런 방식으로 보이고 만들어지고 있습니다

 

 

 

 

 

 

 

 

또한 노말 벡터와 조명 벡터의 각도에 따라서 표면의 밝기가 달라집니다.

 

 

하지만 이 경우의 단점은 마주보는 조명이 표면을 밝게 만들어지기 때문에, 폴리곤에 굴곡이 있더라도 부드러운 곡면을 표현 할 수가 없습니다.

 

 

요즘의 노말 벡터는 부드러운 굴곡을 자연스럽게 표현하기 위해서 면(Face)에 노말이 있는것이 아니라 점(Vertex)이 노말을 가지고 있습니다.

 

 

 

 

 

 

 

 

이렇게 버텍스 기준으로 조명 연산을 한 뒤에, 버텍스 사이의 밝기 값을 보간(interpolation)하여 그림자를 표현합니다.

 

 

사진상의 파란 선들은 각 버텍스의 노말 방향을 표현합니다.

 

 

면이 아닌 버텍스가 밝아지며 그 사이에 있는 색상을 그라디에이션되어 보입니다.

 

 

조명 벡터와 노말 벡터의 각도가 점점 커짐에 따라 어두워지고, 이 버텍스 사이의 조명을 보간시켜 음영을 부드럽게 만들어 주는 것 입니다.

 

 

 

 

 

하지만 버텍스에 노말이 들어가 있다면, 적은 폴리곤으로 Hard Edge 를 표현하고 싶을 땐 어떻게 하는게 좋을까요?

 

 

 

좌측은 3DS MAX에서의 Normal, 우측은 Unity 에서의 Vertex의 갯수를 주목하자

 

 

 

바로 버텍스에 노말의 갯수를 늘려 어느 각도에서든 면의 노말 벡터들이 조명과 수직을 바라보게 만드는 것입니다.

 

 

즉, 같은 자리에 버텍스를 여러개 추가시켜 각진 면을 표현하는 것입니다.

 

 

우측 사진처럼 Cube의 Vertex 갯수가 실제 존재하는 점의 갯수보다 훨씬 많은 것을 확인할 수 있습니다.

 

 

 

 

 

 

Smoothing Group

 

 

 

 

 

 

버텍스에 존재하는 노말 벡터의 갯수에 따라 각진 면을 표현 할 수도, 부드러운 음영을 표현할 수도 있다는 것을 알면, 각 3D 툴에서 동작하는 Smoothing도 이해할 수 있습니다.

 

 

블렌더에서 Shade Smooth 을 선택하면, 면 기준의 노말 벡터가 아닌 버텍스 기준의 노말 벡터로써 오브젝트를 렌더합니다. 

 

 

일정한 각도를 가진 각 노말이 서로 보간되어 부드러운 음영을 가지게 합니다.

 

 

 

 

 

 

 

 

3DS MAX 나 Blender에서 일부 폴리곤만 Smooting 해줄 수 있습니다.

 

 

Smooting Groups 는 사실 3DS MAX에서만 쓰이는 용어인데, 일부 폴리곤을 그룹화 시켜준다고 해서 Smooting Groups 이라고 부릅니다.

 

 

 

 

 

 

 

 

이후 노말을 확인해보면, Smooting이 적용된 폴리곤이랑 적용되지 않은 폴리곤의 노말 벡터의 개수 차이를 알 수 있습니다.

 

 

이로써 노말 벡터와 라이트 벡터의 각도에 따라 빛이 어떻게 밝아지는지, 버텍스에 심어진 노말 벡터가 어떠한 방식으로 빛을 보간하는지를 알아보았습니다.

 

 

 

 

 

 

참고 : 유니티 쉐이더 스타트업 (저자 정종필)

 

 

 

 

 

 

 

 

 

 

 

 

 

'Theory > Graphics Theory' 카테고리의 다른 글

[3D 이론] 그래픽스에서의 계층구조, Hierarchy  (0) 2022.07.29
[3D 이론] 좌표계, Matrix  (0) 2022.07.29
profile

이것 저것 개발하고 만들어보기

@Tintana'k