In-House 개발...

"사진을 찍는다"라는 행위는 이전의 아날로그 시대에는 "사진을 찍어서->필름 현상"이었다. 따라서, 사진 찍는 사람의 기술이 거의 모든 것이었다. 하지만, 디지털 시대로 넘어오면서 사진은 "사진을 찍는다-> 후보정 -> 현상" 이라는 과정이 되었다. 즉, 사진을 찍는 사람의 기술도 중요하지만, 디지털 이미지를 수정하는 아트의 영역이 더 중요하게 되었다.

게임 엔진에서의 그래픽스 랜더러의 변화도 이와 마찬가지이다.

회사라는 곳에서 In-House 엔진이라는 것을 만든다고 한다면,

1. 기존에 개발 환경과 지금과는 너무나 많은 차이가 있다는 것을 알리고, 그 차이에 대해서 인식을 공유하는 것을 가장 먼저 하겠다.
    - 이야기를 해보면, 3~4년 전에 개발을 한 스타일로 지금도 할 수 있다고 생각하는 경우가 더러 있는 것 같은데, 너무나 많은 변화가 있었음을 우리는 알아야 한다.
2. 팀원들간의 기술적인 능력을 상향 평준화 시킨다.
    - 이전에는 한 명이 미친듯이 달려서, 일정 수준 이상의 그래픽 기능들을 구현했다면, 이제는 그럴 수 있는 수준이 아니라고 생각한다. 많은 사람들이 많은 고민을 해야 겨우 따라잡을 수 있고, 더 많은 생각을 해야지 그나마 괜찮은 결과를 얻을 수 있을 것이다.
3. 아티스트와 친해지기
    - 요즘 엔진의 그래픽은 아티스트의 몫이지, 엔지니어의 몫은 아닌 듯.

이 이야기를 하는 이유는 많은 사람들은 알겠지만, 의외로 환경은 변했는데, 변화된 환경에서 멀리 떨어져 있었던 사람들이 많은 것 같다는 생각을 했습니다. 만약 그 사람들이 변화된 환경 속에 가까워진다면, 환경에 대해서 먼저 이야기를 해주어야 하는 것이 맞다고 생각합니다.

만약 상용엔진을 구매한다면, 싫어도 저 변화의 소용돌이에 적응기간도 없이 휘말리게 되겠죠. ^^;;;

그냥 적고 싶은 말들이 마구 생각나서, 두서 없이 적어봄.... 결론은 열심히 해야 한다는 뜻...!!!!

-언차티드2를 보고서...



언차티드 2 동영상
by cagetu | 2009/10/25 19:11 | 개발 노트 | 트랙백 | 덧글(2)
2009 기아의 우승
이런 경기의 표를 구하지 못한 것이 너무 너무 아쉽다.

한국시리즈 7차전 9회말 5:5에서 끝내기 홈런이라니... 드라마가 이런 드라마가 없구나.

"곰들의 복수"가 실현되었어.. ㅎㅎ

개인적으로는 2경기를 잡아준 로페즈가 MVP가 되었어야 된다고 생각되는데...

아무튼 야구를 좋아하는 입장에서 이런 경기 두번 다시 보기 힘든 정말 재미있는 경기였음...

SK는 역시 강하더군...
 
내년에 다들 두고 보자고.. ^^


최훈님의 한국시리즈 정리
by cagetu | 2009/10/25 17:42 | 하루 하루 | 트랙백 | 덧글(1)
중간고사 기간
4학년 2학기 중간고사....

회사 일까지 곂쳐서, 공부도 잘 안되고, 몸은 무겁고, 잠도 부족해...
피곤해... 힘들어.. ㅡㅡ;;

내일까지만 힘내자!!!!!
by cagetu | 2009/10/20 21:43 | 하루 하루 | 트랙백 | 덧글(3)
팀장과 개발자의 경계....

저는 이제 막 팀장이 된지 6개월이된 초보 팀장입니다.
아직은 프로그래머의 껍질을 깨어나오지 못하고 있습니다.

얼마 전 팀장이란 무엇을 해야하는지에 대해서 간단히 맛(?)을 봤습니다.
이 문제를 해결하기 위해서, 너무 많은 고민을 했습니다. 혼자서는 답을 내릴 수가 없더군요.

또한 이전과 같이 저를 진짜로 도와줄 사람이 없다는 것을 조금씩 알게 되는 것 같습니다. 책임감이란 무엇인지를 점점 그 무게가 느껴집니다. 결국 "내가 결정하고, 선택하고, 내가 만들어 가야 하는구나...."

결국 솔직해지기로 합니다. 아직은 프로그래머라고... 팀장으로 성장을 하지 못했노라고...
그냥 제가 할 줄 아는 "일"을 해야겠습니다.

자신도 없었습니다. 하지만, 부인님은 여기서 앞으로 나갈 수 없으면, 결국 도망만 치게 된다고 이야기 합니다.
그렇습니다. 저는 도망자가 되고 싶지는 않습니다. 앞으로 달려볼 생각입니다.

앞에 무엇이 있는지를 예측할 수 있는 능력은 아직 없습니다만, 한발을 내딛는 건 저도 할 수 있습니다.

저는 역시 말보단 행동입니다. 긴장들 좀 합시다!!!

(개인적으로는 저는 아직 팀장직을 맡을 타이밍이 아니라고 생각합니다. 저는 프로그램질을 한 5년 정도는 더 해봐야 알 것 같거든요. 개인적으로 너무 이른 타이밍에 기회가 왔네요. 두 마리 토끼를 잡으려면, 더 많은 노력을 해야 겠죠?! ^^)

by cagetu | 2009/10/18 02:47 | 개발 노트 | 트랙백 | 덧글(5)
Tangent 공간 변환 행렬이 뭐가 문제가 있었다.(해결편)
Tangent 공간 변환 행렬이 뭐가 문제인 것이냐?!?! ㅡㅡ;;에서 CubeMap을 이용한 Reflection을 구현 중에, 내가 뭔가 탄젠트 계산을 잘못하고 있다는 것을 알게되었다.
굉장히 기초적인 부분이라고 생각하고, 별거 없을 것이다라고 해서, 가볍게 생각했는데, 하나 하나 뜯어보니까, 쉽지 않더라.. ㅡㅡ;
(맥스 익스포터에서 익스포트해서 사용하기 때문에, 덕분에 익스포터도 간만에 뜯어 고쳤다.. ㅡㅡ;; 더러운 맥스 작업 질.. 췟!!)

수정 결과는 다음과 같이 제대로 된 결과가 나오는데, 뭐가 잘못 되었을까?를 집어보자!!!

첫째, 익스포트할 때, 오타....
역시 인간이 문제였다.. 된장...

둘째, Tangent를 계산한 공식은
http://www.terathon.com/code/tangent.html를 사용했는데, ("3D 게임 프로그래밍 & 컴퓨터 그래픽을 위한 수학-제 2판"의 230page에 나와있다.)

분명히 최종 행렬은 "물체공간에서 접선 공간으로 변환"하는 행렬이라고 나와 있다. 그래서,

    float3x3 objToTangentSpace = float3x3(input.tangent, input.binormal, input.normal);
    tangentSpaceLightVec = mul(objToTangentSpace, lightVec);
과 normalMap에서 뽑은 normal과 계산. 즉, tangent 공간 상에서 계산을 했는데, 아래와 같이 위, 아래가 뒤집혀진 것과 같이 나왔다.

혼자서 별 짓을 다해보다가, 하도 이상해서, 정만님에게 도움을 요청했더니,

    float3x3 tangentFrame = float3x3(vTangent, vBinormal, vNormal);
    float3 tangentNormal = SampleNormal(bumpMapSampler, uv);
    return mul(tangentNormal, tangentFrame);

이런 식으로 normalMap에서 뽑은 normal을 객체의 공간으로 변환해서, 객체 공간에서 lightVec등과 계산을 하도록 적용했다고 한다.
결과는.....
잘 나온다.. 오홋.... -_-;;

아직도 솔직히 잘 이해를 못하겠다.
분명히 접선 공간으로 변환하는 행렬을 이용하여, 접선 공간의 normal과 접선 공간으로 변환된 벡터와의 계산이 의미적으로 맞을거라 생각했는데, 어째서 반대란 말인가?!?!

암튼 잘나오긴 한다.

참놔.... 나만 이것 때문에 고민한건가?! ㅡㅡ;;;

결과샷
by cagetu | 2009/10/15 22:53 | 개발 노트 | 트랙백 | 덧글(2)
< 이전페이지 다음페이지 >