프로그래밍 언어 입문서가 아닌 프로그래밍 기초 개념 입문서
문과생, 비전공자를 위한 프로그래밍 입문책입니다.
jobGuid 꽃미남 프로그래머 "Pope Kim"님의 이론이나 수학에 치우치지 않고 실무에 곧바로 쓸 수 있는 실용적인 셰이더 프로그래밍 입문서 #겁나친절 jobGuid "1판의내용"에 "새로바뀐북미게임업계분위기"와 "비자관련정보", "1판을 기반으로 북미취업에 성공하신 분들의 생생한 경험담"을 담았습니다.
Posted by 대마왕J

안녕하세요 호주갔다온 대마왕입니다 이힛.
짧지만 일에 방해되기는 충분히 긴 정도로 갔다왔기 때문에 역시 이번에도 내용은 짧습니다.
요샌 이래저래 일이 겹쳐서 - 한 일주일 앓아 눕기도 하고 - 여유시간을 내기가 쉽지가 않아요
더 얘기하면 만수무강 기원하는 글이 좌르륵 달릴거기 때문에 여기서 끝.

 호주의 Light 는 참 ... 대단하더군요.

 

오늘은 이전 시간에 이은 라이트 얘기를 마무리하도록 해 보지요.
세부적으로 꼼꼼하게 따지면 더 많지만, 일단은 '이정도만 알아두어도 프로그래머가 무시하지는 못한다' 수준의 지식을 목표로 정리해 보고 있습니다. [각주:1] 저도 아는게 쥐뿔만큼이라는게 문제

지난 번 11강에서 배웠던 내용을 한 마디로 정리해 보면 일단 이거지요 이거.

빛이랑 직각이 되는 부분이 가장 밝다

 

네네. 이거 뭐 주어도 없는 글입니다만 일단 이정도로 알아두도록 합시다.

이걸 말하려고, '멀리 떨어진 오브젝트가 더 밝다' 라는 상식에서 벗어난 주장으로 환기효과를 노려 보았습니다. 굉장히 중요한 진리 뭐 그런거 아니예요. 그러니까 11강은 사실 낚시  

11강에서 말한 것 처럼 멀면 더 밝아지는 3d 의 빛에서는 함정이 하나 있죠.
그 함정은 'Point light 일 때만" 이라는 것입니다.[각주:2]  (spot 라이트도 point와 같은 종류의 라이트라고 할 수 있지요. )

그럼 다른 라이트가 또 무엇이 있었지요?
넹 바로 Direct light 입니다.[각주:3]

 

이 라이트는 성격이 좀 달라요. 그리고 3DMAX에 있는 녀석은 게임안에 있는 조명과도 좀 많이 다릅니다. 다른 조명보다도요. 일단 이 Direct light 란 녀석을 알아보도록 하지요. 이 light는 꽤 중요한 light예요.

일단 , 3Dmax 에서는 이렇게 생겼지요.

 

원통이네요.

원통이예요.

원통이군요.

원통하군요.

네 그냥 원통이지요. 그래서 그런지, 그래픽 아티스트들은 다이렉트 라이트를 이 '원통' 모양이라고 생각하는 사람들이 많습니다. 시작점이 있고, 넓이가 있지요. 끝 점도 있 (...다고 느껴집니다만 사실 써보면 끝은 없습니다) 어 보이구요.

그림으로 표현하자면, 이런 모양의 빛 덩어리가 다이렉트 라이트라고 그래픽 아티스트들은 느끼게 됩니다.

두둥

이건 좀 이해해 줘야 해요. 맥스 라이트가 저렇게 생겨먹었잖아요. 그림을 보고 배우는 아티스트들에게 저런 그림을 보여줬으니까 당연하지요. 그래서 그냥 3D max로 배운 초보 그래픽 아티스트들은 Direct light가 저렇게 생긴줄 알고 있는 경우가 많습니다.

그런데 라이트를 좀 사용해본 그래픽 아티스트들은, 맥스에서 다이렉트 라이트가 사실은 이렇다는걸 느끼게 됩니다. 생각이 좀 바뀌게 되는 거지요.

 

끝이 없지요.

 네, 뭐 이건 어쩔 수 없습니다. 태어나서 처음 만져본 3D 프로그램의 라이트가 진짜 저렇게 생겼고 저렇게 작동하니까요.
당연히 이게 전부다라고 생각하는건 너무나도 당연합니다. 심지어 3D max 교재에서도 저런식으로 라이트를 설명합니다.
시작 지점이 있고, 넓이가 있습니다.

 

 

그렇지만 프로그래머들이 배우는,  게임에서 쓰는 다이렉트 라이트는 위와 다른 개념으로 설명하곤 합니다. 
프로그래머들의 책에서는 보통 이렇게 표시해요.

 

 읭?

화살푭니다. 저건 아무리 봐도 화살표잖아요.
혹은 이렇게 표시하기도 합니다.

 

 

의의읭?

 

화살표가 늘었습니다. 이게 뭘까요? [각주:4]

이게 프로그래머들이 인식하는 "Direct light"입니다 뭘까요? 뭐가 다른 걸까요?

사실 그림으로 설명하기 힘든 개념인건 사실입니다. 저건 벡터(Vector) 를 나타내는 표시로,
게임에서의 Direct light는 - 프로그래머들이 이해하는 Direct light는 - 위에서 설명한 그래픽 아티스트의 Direct light와 개념이 좀 다릅니다. 뭐가 다르냐고요?

1. 시작점의 개념이 없습니다.

말그대로 시작점이 없습니다. 끝 점도 없구요. 무한대에서 시작해서 무한대로 끝나는 빛입니다.

2. 범위의 개념이 없습니다.

이것도 말그대로입니다. 원통형? 그런거 없습니다. 넓이도 무한대입니다.[각주:5]

3. 그러므로 빛의 방향과 크기만이 있습니다. 다른건 없어요.

크기도 사실은 단위벡터 처리하는 경우가 대부분이라... 사실 사용할때에는 빛의 방향밖에 없습니다. 그게 정보의 전부입니다. 범위나 시작점 모두 Max에서 '추가적으로' 만든 기능일 뿐입니다.  

시작도 없고 끝도 없으시며 그 넓이도 존재하지 않으시고,
오직 한 방향만 존재하실 뿐이어다.

 

지저스돋네

 

그리고 추가적으로 여기서 알 수 있는 이 '위엄있는' Direct light에 대한 정보는 다음과 같습니다.

1. 가벼운 Light이다.

공식적으로 '가장 가벼운' light는 Ambient light입니다. 그렇지만 Ambient light는 이걸 과연 light라고 불러도 될 것인가 싶을 정도로 light같지 않은 light여서, 사실상 공식적으로 조명처럼 사용되는 light중 가장 가벼운 것은 Direct light라고 말해도 과언이 아닐 정도입니다. [각주:6]

생각해 보세요. 
Point light는 시작점이 어디인지 알고 있어야 하고, 그 점에서 내 위치가 어디인지를 알아야 빛의 각도가 나옵니다. 알아야 할 데이터가 많아요.  

Spot light는요? Point light의 데이터에다가 이번에는 제한되는 빛의 각도 정보까지 있어야 해요! 얼마나 정보가 많겠어요?

그치만 Direct light는 시작점도 없고 끝도 없고 어딜가도 같은 방향의 빛이 조사되기 때문에, 매우 계산하기 간편한 조명입니다. 그래서 그림자들이 생길 때에도 주로 Direct light 기반에서만 생기곤 하죠.

2. 태양 빛을 표현할때 많이 쓴다.

'태양은 Point light잖아요? 그럼 Point light를 써야지 왜 Direct light를 씀? ' 이라고 물으실 분도 계시겠지만...
네 , 맞습니다. 태양은 엄밀히 얘기하면 point light예요. 그치만.

 

 

크기차가 이래서야 ... 태양이 쏘는 빛이 Point light 보다는 Direct light처럼 오겠지요. 거리도 좀 머나요 ... 그럼 더 당연하죠. 그래서 Direct light로 대충 표현해도 별 상관 없는 것입니다.  

무시하면 안됩니다.

 

3. Direct light는 오브젝트가 어디에 있건 똑같은 밝기이다.

네.. 제가 맨 위에서 말하고 싶던 부분이 이것입니다.
당연하지요! 모든 빛이 모든 부분에서 같은 각도로 조사되는데, 가까이 있던 멀리 있던 상관 없잖아요? 빛이 확산되거나 감쇄되지 않는 완전한 '이상적인' 상태라면, 오브젝트는 어디에 있어도 똑같은 빛을 받을 수 밖에 없습니다! Point light와는 다르다는 거지요 !! [각주:7]

 

포인트 라이트 다이렉트 라이트

일단 이렇게 거리가 무시되구요.

 

구석에 놓아도 OK

이렇게 구석에 놓아도 상관 없습니다.
3D 게임의 맵에디터를 사용하신 분이라면 아실텐데요. Direct light는 정말 맵 구석에다가 대충 박아 놓아도 아무 문제 없습니다. (조작성때문에 가운데에 놓으시겠지만)

4. 대신 기울어지면 밝기가 떨어진다.

이건 뭐 상식적으로도 당연하게 알고 계신 것이지만, 한번 써 봤습니다.
이제 이 단순한 개념을 직접 만들어 보셔야 하거든요 우후후 :)

 

그리고 프로그래머들은 이 개념으로 처음부터 배운 거지요.
여기서 우리 그래픽 아티스트들의 Direct light에 대한 개념의 괴리가 생깁니다.
자, 이제 다음 시간부터는 '직접' 이 라이트의 계산을 만들어 보면서, 프로그래머가 생각하는 Light의 개념을 몸으로 익혀 봅시다!! 우리 그래픽 아티스트들은 몸으로 익히는데 능하니까요!!!

 

예고 (두둥)

 

  1. 요샌 그런 프로그래머가 거의 없어졌지만, 옛날엔 지식 부족하다고 경멸의 눈으로 아티스트를 바라보던 프로그래머도 있었지요 [본문으로]
  2. 실은 'point light와 spot light일때' 입니다만, spot 라이트는 point light에서 빛의 한계각도를 제한한 것 뿐이기 때문에 거론하지 않았습니다. [본문으로]
  3. 다이렉트 라이트, 혹은 디렉셔널 라이트라고 부르기도 합니다. 저도 막 섞어 부를지도 모릅니다... [본문으로]
  4. 다시 말씀드리자면 이 강의는 그래픽 아티스트 입장에서 본 강연입니다. [본문으로]
  5. Max 를 좀 깊게 다뤄보신 분은 max의 Direct light에 "Overshoot" 라고 하는 체크박스가 있는걸 찾으실 수 있습니다. 이걸 켜면, 범위가 무한대가 됩니다. [본문으로]
  6. SH(Spherical Harmonics) 라이트 같은건 뺍시다 (...) 너무 깊이 들어가면 그래픽 아티스트들 마음이 다쳐요 ... [본문으로]
  7. 물론 이런 거리에 따른 감쇄(attenuation)을 계산하여 시뮬레이트 해주면 거리에 따라 연하게 만들어 줄 수도 있습니다 당연히. 그렇지만 여기는 원천적인 기술을 얘기하므로 그 얘기는 하지 않았습니다. [본문으로]

댓글을 달아 주세요

  1. Favicon of http://bluekms21.blog.me 크로스 2012.06.03 19:21  댓글주소  수정/삭제  댓글쓰기

    한때 KOCCA에서 김용준교수님 강의를 들을때 교수님이 얇은 노트를 손에 드시더니
    빔 프로젝터를 마주보고 서시며
    "cos(0)이 1이란말야? 그래서 빛을 전부 반사하고 각도가 점점점 커져서 cos(90)으로 갈 수록 값이 0이되어 반사되는 빛의 양이 줄어들지."
    라고 말씀하시며 얇은 노트를 옆으로 회전시키시는 모습을 보여주신 적이 있는데
    그 전까진 수식으로는 알아도 마음속에 와닿지 못했던 내용이었습니다만 그때 제대로 깨우치게 되었지요...
    오늘 강좌는 갑자기 그랬던 일이 떠오르네요..ㅎ

  2. 2012.06.04 17:37  댓글주소  수정/삭제  댓글쓰기

    좋은 강좌 잘 보았습니다. 대마왕님~ 기다린 보람이 있어요~ 매번 공으로 얻어가네요. ㅠㅠ

  3. 대규 2012.08.23 16:39  댓글주소  수정/삭제  댓글쓰기

    아 빛의 개념 잘봤습니다. ^^