2017/08/06-07

by - 8:23 AM

2주차 스터디 준비

출처 및 참고블로그

http://rapapa.net/?p=2419
http://chulin28ho.egloos.com/3536109
https://www.slideshare.net/jpcorp/2-10318886 (텍스쳐 포맷)
http://blog.naver.com/kite3h/220698890024

Normal

노말의 기본 개념


세개의 점은 하나의 면을 만들고 이 면에 수직방향이 바로 normal 방향이다.

1.normal의 방향과 rendering
하나의 기울기 값이라는 것 역시 노말이 가진 속성이다.
이말은 즉 오브젝트에 빛을 라이팅할때 빛의 방향과 기울기의 값의 차이로 인해 오브젝트의 밝고 어두운 부분이 표현되는데 이때 사용하는 "기울기"라는 것이 노말이다.
노말의 방향은 다시 말해 각 면의 기울기 값을 대표한다.

노말의 방향과 라이팅이 서로 마주보고 있다면 이 부분이 가장 밝은 부분이 되며, 90도 이상 차이가 나면 전혀 빛을 받지 못하게 되는 것이다.

그렇다면 앞에서 설명한 대로 라면 어떤식으로 랜더링이 되었을까?




바로 오른쪽이다.
왜냐면 노말방향은 한 면에 하나 뿐이며, 그 면은 모두 같은 밝기로 랜더링이 되어야 하기때문이다. 예전의 게임들을 보면 면과 면사이의 엣지를 부드럽게 음영을 처리하는 기술이 없었기 때문에 노말방향은 각각의 면에 한개 뿐이였기 때문이다.


2. soft edge과 normal의 값.
이후에 왼쪽의 구처럼 같은 오브젝트라고 하더라도 부드럽게 처리하는 렌더링 기술이 사용되었는데 ,이것이 soft edge라는 개념이다.
soft edge를 사용하게 되면 각각의 면은 버텍스 별로 노말 값을 가지게 된다.
이 버텍스부분이 랜더링의 중심값이 되며 이로 부터 다음 버텍스까지는 중간값을 이용하여
처리하게 되는 것이다.








인접한 폴리건들의 노말을 평균 값을 내어 normal vector를 구한다.




음영 계산

음영의 표현 1(하얀색)~0(검은색)

Light vector와 normal vector를 이용하여 연산한다.
라이트 벡터와 노말 벡터를 dot(내적)연산하면 두 벡터가 이루는 각을 얻을 수 있다.
내적의 값의 코사인 값이 난반사광의 양이 된다.


즉 라이트 벡터와 노말벡터의 사이의 값이 0도면 1, 90이면 0의 값이 나온다.
1=하얀색 0은 검은색 즉 빛과 노말의 방향으로 음영을 표현 할 수 있다.



http://babylonjsguide.github.io/advanced/Normals


Bump Map
흑백 이미지를 이용하여 나오고 들어오는 부분을 만든다. 밝은 부분은 튀어나오게 어두운 부분은 들어가게 하는 것이 기본 원리. 범프값은 자체의 음영과 라이트의 기울기를 기준으로만 계산하여 다양한 모양을 만들어 낼 수도 없으며 카메라와의 기울기등 또한 고려되지 않으며 쉐도우도 적용되지 않는다.즉 높낮이=,Bump라는 것.

Normal Bump Map
노말맵은 범프맵과는 다르게 3개의 채널을 이용한다. 비트맵 이미지에서는 R,G,B이지만 실제로 쓰이는 의미는 x,y,z(수평,수직,깊이)축으로 값을 표현한 것이다.
범프맵과의 차이를 말하자면 범프맵은 단순한 깊이의 값만 있다면 노말맵은 각 채널 값에 각 축의 기울기를 나타낸 것이다.메쉬상의 한 점은 최종적으로 x,y,z축의 기울기를 가지게 되는 것.


하나의 라이트에 대한 각각의 면의 기울기 값은, 각기 다른 명함을 만들어 내는데, 이러한 라이트를 위/아래/좌/우/앞/뒤/로 총 6방향에서 빛을 쏘아 이것을 하나의 맵으로 만드는 것이다.positive light는 각기 다른 채널의 0~127계조를 담당하게 되며, negative는 나머지 128~255까지의 계조를 담당한다. 즉 하나의 채널은 두개의 라이트 값으 가지게 되는 것.
이러한 방식을 사용하여 면에서 떨어진 라이팅의 값을 텍스쳐로 변환하게 되면, 모든 위치점은 RGB값을 가지게 된다.






Tangent Normal Map
Tengent는 면과 평행하는 벡터,

앞에서 말한 노말맵과 탄젠트 노말의 가장 큰 차이점은 z축이다.
탄젠트 노말은 각각의 면을 기준으로 RGB값을 산출하는데, 하나의 면에서 뒤쪽면을 고려할 필요가 없기 때문에 B채널(앞뒤정보)는 반쪽만 쓰기게 된다. 그러한 이유로 탄젠트 맵이 파란색을 띄고 있는 이유.

You May Also Like

0 comments