2013년 6월 25일 화요일

상처받는 이유

"사람이 상처받는 이유는 자신이 컨트롤 할 수 없는 것을 바라기 때문이다."

김포프(2013/6/19)

2013년 6월 22일 토요일

잠을 제때 자지 않는 악순환


  • 잠을 제 때 자러 가지 않는다.
  • 그러면 충분한(7~8시간?) 수면을 취하지 못한다.
  • 그러면 다음날이 피곤하다.
  • 그러면 일의 능률이 오르지 않는다.
  • 그러면 뭔가 자신이 보잘것 없는거 같아 허무하다.
  • 집에와도 피곤하다.
  • 그러면 다른 일 할 맘이 안든다.
  • 그대신 술을마신다, 웹서핑을 한다, 아니면 그냥 넋놓고 시간만 낭비한다
  • 잘시간이 되도 잘 수 없다. 오늘을 알차게 보내지 못한거 같은 느낌에 내 자신이 쓸모없이 느껴진다.
  • 허무하다.
  • 그래서 또 악순환은 반복된다.



이걸 너무나 잘 알고 있는데도 요 몇 주 이 따위로 보내는거 보면... 일이 그닥 재미가 없거나....먼가 기분이 다운인거다... 내 집이면 좋겠다. 그럼 피아노 치며 놀텐데...

2013년 6월 16일 일요일

최고가 되는건 어렵지 않다.

"최고가 되는건 어렵지 않다. 하지만 본인이 최고라는 사실을 깨닫는게 되는 건 어렵다...  그 반대인 사람들은 그냥 자만할 뿐이다."

김포프(2013/05/28)

2013년 6월 15일 토요일

성공하는 마음가짐

"세상엔 자기보다 못한 사람도, 자기보다 잘난 사람도 있다. 어느쪽을 보고 어떤 마음가짐으로 살아가는지에 따라 내 10년 뒤의 모습이 바뀐다."

- 김포프 (2013/06/14)



2013년 6월 14일 금요일

[궁금증 리서치] 애완용 여우

오늘 어쩌다 애완 여우 비디오를 유투부에서 보게 되었습니다.



그래서 "응? 정말 여우를 애완용으로 키울 수 있는건가?"라는 생각이 들어서 좀 리서치를 했더니.. 가능은 하더군요.... 포퓰러 사이언스에 작년 10월에 기사가 실렸었습니다.

포퓰러사이언스 기사: Can I Have A Pet Fox?



이 기사를 대충 번역/요약 하면

  • 길들여진 야생동물이라 할때 영어로는 tamed와 domesticated라는 구분이 있음
  • tamed는 그냥 야생동물을 훈련시켜서 길들인것.. 어렸을 때부터 야생여우를 키우면 tamed는 가능. 주인을 물거나 하진 않지만.. 주인이 공 던지면 가서 물어오거나 배 만져달라고 발랑 눕고 꼬리치는 짓 등은 안함. 그리고 가장 중요한 점은 이런 길들여진 특성이 자식에게 물려지진 않음
  • domesticated는 수십대에 걸쳐 인간을 잘 따르는 놈들을 교배시킨 결과 사람을 아주 잘 따르고 꼬리도 치는 그런놈들. 한마디로 길들여진 유전자가 있기에 새끼들도 여전히 사람을 잘 따름
  • 소련(그리고 현재는 러시아)가 50년대부터 이런 교배를 해왔고 따라서 현재 애완용 여우는 러시아를 통해서만 살 수 있음
  • 가격은 한 600만원 정도
  • 한가지 재밌는 점은 이렇게 선택적으로 교배를 한 놈들은 모냥새가 원래의 야생 여우와 조금은 다르고 여기저기 개의 흔적이 보인다나...

그럼 실제 게임개발과 아무 상관이 없지만.. 궁금해서 찾아본 리서치를 마무리 합니다... (원래부터 궁금증이 많아서 궁금하면 무조건 찾아보는 성격이라..... 프로그래밍도 그렇게 배웠습니다.. -_-) 



2013년 6월 10일 월요일

밉맵 디테일 높이기

벌써 5년넘게 써오고 있는 방법인데 생각보다 모르시는 분들이 많은 것 같아 이방법을 공유합니다.

밉맵?

일단 밉맵이 뭔지는 다 아시리라 생각하고 굳이 밉맵에 대해서는 설명하지 않겠습니다.  모르시는 분들은 여길 참고하세요.

문제점 및 일반적인 해결책

밉맵을 사용하다보면 정말 카메라를 가까이 들이밀지 않는한 텍스처의 디테일이 흐릿해 보이는 경우가 흔히 발생합니다.  보통 다음과 같은 방법들로 해결합니다.

흔히 쓰는 해결법 1 - 텍스처 크기 늘리기

밉레벨이 낮아질수록 텍스처 크기가 절반씩 줄어드는 거니 젤 높은 디테일의 밉멥 텍스처크기를 크게 키워주면 그만큼 흐려지는 현상이 덜합니다. 하지만 메모리를 많이 잡아먹는다는 단점이 있어서 정 필요한 때만 제한적으로 사용하곤 합니다. (왜 흔히 라고 한거지 그럼 -_-)

흔히 쓰는 해결법 2 - 밉맵 바이어스 쓰기

이걸 고치기 위해 흔히 쓰는 해결법은 밉맵 bias를 조절하는 방법입니다. 샘플러스테이트에서 정해주는 방법도 있고 셰이더에서 해주는 법도 있습니다. 뭐든 나쁜 방법은 아니고 가장 널리 쓰는 방법인데 여러가지 단점이 있습니다


  1. 고디테일의 텍스처(크기가 큼)를 더 많이 쓰도록 bias를 주므로 텍스처 캐쉬의 성능저하 (그만큼 넣어야할 데이터가 많으니)
  2. 밉맵이 원래 해결하려고 하는 거리에 따른 애일리어싱 문제가 쉽게 더 생긴다.
  3. 모든 경우에 적당히 잘 동작하는 bias 값을 찾기가 쉽지 않다.

흔히 쓰는 해결법 3 - 밉맵 생성시 사용하는 필터 다르게 사용하기

보통 bilinear 필터를 사용해서 밉맵을 만드는게 일반적입니다. 그럼 그냥 주변에 있는 이웃 픽셀들 2x2개 모아다가 균등하게 혼합하는게 전부입니다. 이 외에 kaiser 필터 등을 사용하면 좀더 낫다고 해서 그렇게 하는 사람들을 봤지만... 개인적으로는 별 효과가 없다고 생각합니다.


제 해결법 - sharpening filter

생각보다 매우 간단합니다. 그냥 밉맵 텍스처에 sharpening 필터 한번 더 먹여주면 됩니다. -_- 사실 밉맵들이 흐릿해 보이는 이유가 bilinear 필터링만 쓰면 그냥 경계를 뭉게버린다는건데 여기다 sharpening 필터 한번 먹여주면 경계부분은 다시 적당히 또렷하게 살아나거든요... 

오프라인 프로세스라 게임성능에 지장도 없고... 흔히 쓰는 해결법 2에서 말씀드렸던 단점들도 없습니다.. 그냥 밉맵만드실때 이런순서로 만들어 주시면 됩니다.
  1. 밉맵 0으로부터 밉맵 1 생성 (bilinear filter)
  2. 밉맵 1에 sharpening filter 적용
  3. 2번 결과물로부터 밉맵 2 생성(bilinear filter)
  4. 밉맵 2에 sharpening filter 적용
  5. 밉맵 끝까지 만들때까지 반복...

이 방법을 대충 포토샵으로 흉내낸걸 보여드리면 대충 이렇습니다. 오른쪽이 제 방법입니다.










2013년 6월 7일 금요일

[방명록 답변] 렌더러가 될려면 미술실력이 좋아야 하는가?


얼마전에 블로그 방명록에 질문이 달린게 있는데... 똑같은걸 궁금해 하시는 분들이 계실거 같아. 여기다 재 포스팅합니다.

일단 질문은 다음과 같았습니다.

"포프님처럼 렌더러가 될려면 미술실력도 중요한가요? 북미취업하기 책 구입해서 여러번 정독했는데 이 부분에 대해선 확답이 없는거 같아서요.

제가 미술엔 전혀 인연이 없습니다 ㅠㅠ"


여기에 제가 달아드린 답변은 다음

별로 안중요합니다. 일단 제가 미술을 잘 못하고.... 색약도 있으며 -_-;;; 등등..

제 주변을 봐도 미술을 하는 렌더러는 못봤어요.. 단 사진 찍는걸 좋아하는 친구들은 몇몇 봤음..(전 아닙니다..) 렌더러라는게 결국 빛을 잘 이해하는게 중요하거든요. 그래서 사진 찍는거 좋아하는건 도움이 될거 같아요..(역시 전 아니지만..) 하지만 반드시 그걸 직접 하지 않아도 빛의 물리학적으로 이해하는건 문제가 없다고 생각합니다..

미술은 크게 문제가 안되니 걱정마시길...


여기다 추가로 다시 몇가지 말하면


  1. 저 어렸을때는 그대로 미술 아주 못하진 않았습니다. 중학교 때까지 연필로 스케치 하는건 그래도 줄곧 하곤 했는데.. 수채화만 들어갔다하면 밑에 칠한게 마르는걸 기다리지 못하고 위에 다른 색깔을 자꾸 칠해서 전부다 번져버리는 관계로... 많이 망쳤습니다. 고등학교때는 미술 거의 안한거 같고.. 지금 뭐 그리라고 하면 아마 못그릴거 같습니다.
  2. 미술을 잘하면 도움이 될 것 같긴 합니다. 단 못해도 렌더러를 하는데 문제가 된다고 생각하진 않습니다.
  3. 위에서 말씀드렸지만 많은 렌더러들이 사진을 찍는다고 말씀드렸습니다. 아무래도 사진을 찍는 테크닉을 배우다보면 빛을 연구하기 때문인거 같은데요. 전 그 나마도 안합니다.  가끔 빛으로 인해 발생하는 걸 보면 핸드폰 사진기로 찍어보는게 전부입니다. DSLR같은게 없단 거죠 ㅎㅎㅎ.
  4. 사진을 찍진 않아도 밖에서 걸어다니면서 이리저리 빛을 관찰하고는 다닙니다. 잔디밭에 서면 제 옷이 약간 녹색을 띄는거나... 노란색 후드티를 입으면 제 얼굴이 노랗게 되는것.. 등등... 저녁에 밖에 나가면 하늘의 푸르른 색이 제 팔에 보인다거나.. 반투명한 나뭇잎 뒤에 있는 물체들은 어떤 빛을 받는지.... 이런건 관찰을 하게 되더라구요...



마지막으로

어떤 직업이든 반드시 한가지의 정도만 있는건 아닙니다. 사실 저도 제 동료들에 비하면 매우 정도에서 벗어난 인간입니다. (제 동료들은 컴터 그래픽쪽으로 박사학위 있고... 저보다 훨씬 학문적으로 관심이 많아요... 전 그보단 실제로 적용하는거에 더 관심이 많고...) 그냥 자신이 가진 장점 중에 렌더러에 도움되는걸 잘 찾고.. 정말 단점이 있다면 적당한 수준으로만 올리시는게 성공의 지름길이라 생각합니다.


2013년 6월 5일 수요일

가슴뭉클해지는 책 리뷰

인터넷으로 가끔 검색해보면서 제 책의 리뷰들을 찾아보는데.. 오늘은 정말 마음이 뿌듯해지는 리뷰를 찾았습니다..

오늘은 평소와 다르게 약간 겸손모드라.. 제가 직접 텍스트를 긁어 붙이기엔 좀 낯이 간지러워서.. 링크 2개로 떼우겠습니다... -_-





p.s. 생각해보니 아직 나쁜 리뷰가 없네요. 1쇄에는 잘못된 내용도 몇개 발견되서 맘이 참 안좋았었는데 말이죠.. 다행히 제 판단이 틀리진 않았나봐요....^_^



2013년 6월 3일 월요일

C++ PIMPL 패턴.. 별로임 -_-;

생각해보니 개인적으로 PIMPL 패턴을 직접 구현해본적이 없다. 이런 패턴이 있다는걸 예전에 읽어본적은 있지만.. 그냥 '그닥 쓰고 싶은 생각이 안나는 놈?' 정도로 생각했다고 할까...

음 근데.. 지금 다루고 있는 코드베이스 안에는 PIMPL패턴이 아주 넘친다... 그래서 사용해본 뒤 소감이 어떻냐고? 안.좋.다. 게임 프로그래밍에서 이 패턴을 씀으로써 얻는 장점이 별로 없다고 생각한다. PIMPL 패턴의 장점이 뭘까? 다음 두가지 장점 정도가 아닐까?

  1. API 설계와 구현의 확연한 구분: 소프트웨어 아키텍트 마스터가 API를 멋지게 설계해두면 쫄개 프로그래머/코드 몽키들을 와라락 달려들어 잘 숨겨진 파일안에 구현을 함
  2. 헤더파일간의 의존성(dependency)가 적음 = 컴파일 시간이 빠름
일단 장점 1번이 게임 프로그래밍 업계에서 큰 의미가 있다고 생각하지 않는다. 어느 엔터테인먼트 업계에서도 그러듯이 게임의 요구사항은 끊임없이 변하며 그에따라 API도 수도없이 바뀐다. 즉, 마스터가 API를 멋지게 설계하는 일 자체가 별로 없단 이야기. 그리고 다른 프로그래머들로부터 구현파일을 숨긴다는거 자체도... 좀 웃기지 않나? 게임 프로그래머들은 전체 소스코드를 보는 걸 좋아한다. 라이브러리를 만들어서 파는 3rd party업체가 아닌이상... 정말 별 의미가 없음...

게임 프로그래머들이 PIMPL 패턴을 왜 쓰는 주 이유는 사실 2번이라고 생각한다. C++ 의 컴파일 속도는 매우 구려요 -_-;;; 하지만 PIMPL 패턴 보다 컴파일 속도를 향상시킬 수 있는 다른 방법이 존재한다. 물론 조홀라 비싼 incredibuild를 말하는 건 아니다. 여태까지 써본 방법중에 가장 빠른 건 이미 10년전부터 널리 애용되고 있는 유니티 빌드였다.. 물론 공짜 -_-v... 이에 대한 제대로된 한국말 설명은 다음의 슬라이드를 참고...


따라서 PIMPL의 장점이 그닥 중요하가 와닿지 않는 반면.. 단점은 아주 절절히 느껴지는게 문제....
  1. 코드 읽기가 더 귀찮아진다. 파일 여러개를 뛰어다녀야만 겨우 구현코드를 볼 수 있다는 단점....매조키스트 아닌 다음에야 이걸 좋아할리가...
  2. 듬성듬성한 메모리 할당: pimpl 개체를 만들기 위해 따로 new를 호출해줘야 한다. 메모리 파편화, cache 관리 등의 이유로 개인적으로 클래스의 모든 멤버가 한번에 메모리할당되는 걸 좋아하고, 그 외에도 어떤 개체의 크기를 쉽게 알아오기에도 한번에 할당되는게 좋다.
  3. 추가적인 포인터 참조 연산 = 아주 조금 더 느림.... 이정도 포인터 점프 한번 더 하는게 성능에 아주 큰 영향을 미치지는 않는다. 하지만 엔진쪽 프로그래밍 하는 사람으로써 이런 필요없는 포인터연산이 성능을 10프로 이상 떨어뜨리는 걸 수도없이 봤기에... 매우 까탈스러울수밖에 없다... 아마 실제로 이 포인터 참조에 걸리는건 CPU 사이클 4사이클 정도일 테지만... pimpl 개체의 메모리 위치가 떨어져 있을 수도 있으니 cache 관리까지 들어가면 더 느릴수 있다는 것.... 물론 메모리 할당 순서를 손수 잘 컨트롤 해주면 이런 문제를 피할수도 있겠지만... pimpl 패턴의 장점이 크게 없는 이상 왜 이런 쓸데없는 짓을 해야하나 생각까지 든다.
결론... 핌플 맘에 안듬.... -_- 아니면 내가 뭔가 놓치고 있는게 있나?


참고로 영어로 pimple은 뾰드락지를 말함 -_- 이런거...