사용자 삽입 이미지


근래에Kickstarter에서 Sprite DLight라는 녀석을 알게되었는데
단순 이미지에서 노멀맵을 추출해주는 보조 프로그램으로
출력되는 노멀맵을 보면 상당히 괜찮게 나오는것같습니다.
라이트 버전은 $25 프로버전은 $40로 보통 유니티 에셋과 가격대네요.

차후에 프로젝트를 진행하면서 쓸일은 없겠지만 개인 프로젝트때 쓰게되면 상당히 좋은 연출을 줄수있을것같아서 노멀맵 추출하는 작업을 직접 한번 도전해보았습니다.

사용자 삽입 이미지

사용자 삽입 이미지

사용자 삽입 이미지

Art and sprites from the Dragon’s Crown (ドラゴンズクラウン, for PS3 and PS Vita) http://dragons-crown.com/

테스트 동영상



생각보다 원하는 퀄리티가 나오지않아서 Sprite Dlight의 동영상을 보니 노멀맵추출하는 알고리즘이
상당히 잘되어있다는 것을 깨달았습니다.

저는 단순히 edge추출해서 해당 엣지에 단순히 bump효과를 준거였는데 비하여
이 프로그램에서는 음영(gradient)을 검출해서(sobel algorithm) shape를 검출해주고
이의 볼륨감을 조정해줄수있게 되어있는데 전체볼륨과 디테일볼륨을 따로 조절할수있고
선명도 조정이라던지 단순히 이미지에서 추출하는 노멀맵이라 하기엔
상당히 좋은 퀄리티를 뽑아낼수있는것같습니다.

사용자 삽입 이미지



1.Original sprite by AlbertoV (DYA Games)
2.Normal map created by the GIMP plugin (same as PS plugin)
3.Normal map created by a common normal map generator with the original
sprite used as height map, followed by shape enhancement
4.Normal map created by Sprite DLight in one click
3. is the best result you can achieve with current automatic normal
map generators combined with clever techniques, although the result
is still pretty poor, it's more of a bevel effect, which is randomly
concave or convex, particularly at the edges of the shape.

결론은 좋은게 나와있으면 구입해서 사용해봅시다.
Posted by 랜스.

Leave your greetings here.

웹캠 업데이트 로직
 if( !m_cap.isOpened() )
 {
  return;
 }
 cv::Mat frame;
 m_cap >> frame;
 D3DLOCKED_RECT lr;
 ZeroMemory( &lr, sizeof(D3DLOCKED_RECT));
 LPDIRECT3DSURFACE9 suf = NULL;
 g_pTexture->GetSurfaceLevel( 0, &suf);
 D3DSURFACE_DESC sr;
 ZeroMemory( &sr, sizeof(D3DSURFACE_DESC));
 suf->GetDesc( &sr );
 suf->LockRect( &lr, 0, 0 );
 BYTE *surfPtr = (BYTE*)(lr.pBits);
 cv::Mat     m_image;
 frame.copyTo(m_image);
 unsigned char *pSurfPtr = static_cast<unsigned char*>(lr.pBits);
 if( frame.empty() )
  return;
 IplImage p_image = m_image;
 BYTE* pBufferData;
 for(UINT h = 0; h < sr.Height; h++)
 {
  for(UINT w = 0; w < sr.Width; w++) 
  {
   pBufferData = (BYTE*)lr.pBits + (h * (lr.Pitch)) + w * 4;
   pBufferData[0] = (BYTE)(p_image.imageData[h * p_image.widthStep + w * 3 + 0]);
   pBufferData[1] = (BYTE)(p_image.imageData[h * p_image.widthStep + w * 3 + 1]);
   pBufferData[2] = (BYTE)(p_image.imageData[h * p_image.widthStep + w * 3 + 2]);
   pBufferData[3] = (BYTE)255;
  }
 }
 suf->UnlockRect( );

코드에서 외부변수는 OpenCV에서 디바이스에서 영상을 지속적으로 입력받는cv::VideoCapture 의 m_cap 과 화면상에 렌더링해줄 g_pTexture밖에 없으니 기존 D3D를 하실줄 아는 분이 OpenCV의 Video관련 샘플을 한번 본다면 쉽게 자신이 원하는 대로 수정해서 사용할수있을거라고 생각합니다.



Posted by 랜스.

Leave your greetings here.

 한동안 포스팅을 않했었는데 하드정리겸 작업했던것들을 하나하나 정리해볼까..하는 생각에 뿌지직...  

 작년 봄쯤 프리랜서(백수) 로 지내던때 작업은 작업대로 해야되고 여자친구는 여자친구 나름 잘챙겨줘야하는데 전화는 그렇다치고 문자하려면 컴퓨터를 하다 문자가오면 키보드에서 손을땐뒤 핸드폰을 가지고와서 문자를 입력하고 키보드를 다시잡아야하는 귀찮음에 매우 힘들어하던 찰나...

http://lab.gamecodi.com/board/zboard.php?id=GAMECODILAB_Lecture&no=4&z=26

그 당시 이 글을 본뒤 몇가지 방법중 호스팅업체에서의 SMS충전방식으로 하기로한뒤 작업을 시작하였습니다. 이런거에 많은돈을 투자하고 싶지않았던 그당시의 저는 업체중에서 발송건당 가장싼곳에서 5000건을 결제를 하였답니다.( 이것이 가장 큰 실수야 실수... )

 그 뒤 업체에서 PHP로 제공해주는 API를 이용해 패킷분석을 끝마친뒤 C++로 컨버팅한뒤
3분요리처럼 빠르게 툴을 제작할수있다는 MFC를 이용하여 테스트하니 잘작동한다.

때마침 온 문자 이제 실전이다.

여자친구 의문자  : "아침밥먹었냐??"

(이때다 !! 배달소녀여 나의 문자를 보내다오!! )
...1..2...3.... 전송완료!

한 20분이 흘렀을까... 여자친구에게 오는전화...

여자친구 : "야 않자면서 답장을 왜않해?"
나 : "답장했는데?"



 여자친구는 이때 문자가 오지 않았다했고 몇차례 더 시도했지만 문자는 정상적으로 도착하지않았다.
몇시간뒤 여자친구를 만나 데이트를 하는 도중 거의 반나절 전에 작업하였던것으로 보냈던 문자들이
도착하는것을 보고는 "넌 나의 신뢰를 잃었어 아사달....."

 이러한 이유로 외장하드에 쳐박혀 있던것을 최근에 다시 정리하다가 키고 테스트해봤는데 않되더라...
이유는 New21에서 아사달로 바뀐지 몇년이 흐른 지금 데몬서버의 도메인이 변경되었고 sms를 보내는
API도 수정이되었기때문...

 아무생각없이 문자 전송이 느렸던것을 잊고는 다시 작업하고 배포를 생각해 문서화까지 해두었는데...
아사달서버의 문자전송 속도는 랜덤한것 을다시한번 느끼고는 봉인해버렸다...


Posted by 랜스.

Leave your greetings here.

  1. Comment RSS : http://lancekun.com/tc/rss/comment/165
  2. 끼로 2011/05/17 12:23  Modify/Delete  Reply  Address

    네이트온쓰면 문자 와도 키보드로 보낼 수 있자나

    • 랜스 2011/05/19 00:35  Modify/Delete  Address

      SHOW는 않되지않나여?? 저거 말고도 그냥 이것저것에 다 갖다 붙여서 쓸려했는데 쓸모없..

  3. 나그네 2012/01/11 12:22  Modify/Delete  Reply  Address

    하지 않는 것은 안 하는 것입니다.

    하지 않는 것은 않 하는 것이 아닙니다^^

SVN 받는 곳   :  다운로드 
아파치 받는곳 :  다운로드

설치순서 : 아파치 -> SVN

프로젝트 생성
svnadmin create <프로젝트명>

암호설정
..\bin\htpasswd –c htpasswd <사용자명>

그외 프로젝트원들은
TortoiseSVN 를 사용하여 익스포트 임포트한다
Posted by 랜스.

Leave your greetings here.

  1. Comment RSS : http://lancekun.com/tc/rss/comment/129
  2. GGotbo 2009/09/20 16:12  Modify/Delete  Reply  Address

    SVN 좋지 나도 좋아해.

  3. bluestruggle 2009/09/26 21:49  Modify/Delete  Reply  Address

    svn 좋더군요. putty랑 완소.

오래전 글인데 상당히 정리가 깔끔히 되어있어서 보기 좋은것같습니다.
완역하신분 감사합니다.


Posted by 랜스.

Leave your greetings here.



ASE에관련되서 정리가 잘된 파일을 발견해서 업로드합니다.
출처가 않적혀있네요 =_=... 흠 하여튼 요즘 공부하는데 있어서 좋은자료!!

[다운받기]

Posted by 랜스.
TAGS ,

Leave your greetings here.

  1. Comment RSS : http://lancekun.com/tc/rss/comment/122
  2. 깐따삐야 2010/06/07 16:55  Modify/Delete  Reply  Address

    ase파일에 대해 이것저것 찾아보다가 왔는데 출처를 모른다고 올리신 자료가 있길래
    출처를 알려드리고저.......댓글까지 쓰네요 ㅡ.ㅡ;;
    네이버 카페 게임 개발자 네트워크 - 사향(mujige77) 님께서 올리신 자료군요..ㅋㅋ
    랜스님 개발자 네트워크에서도 좋은 정보 많이 주셨는데 블로그도 자료가 넘쳐 나는군요.
    잘 보고 갑니다^^

MS의 매직 디버깅 숫자들의 의미...
ABABABAB HeapAlloc으로 메모리 할당 후 가드 바이트에 채워진 값
CCCCCCCC 초기화 되지 않은 스택 메모리
CDCDCDCD 메모리 할당 후 초기화 되지 않은 힙 메모리
BAADF00D LocalAlloc(LMEM_FIXED)으로 메모리 할당된 후 초기화 되지 않은 값
FDFDFDFD 할당된 메모리의 전후 가드용 바이트에 채워지는 값
FEEEFEEE 힙 메모리를 해제한 후 채워지는 값

[##_kaAmo_##]
Posted by 랜스.

Leave your greetings here.

  1. Comment RSS : http://lancekun.com/tc/rss/comment/66
  2. 0xdddddddd 2009/06/19 10:42  Modify/Delete  Reply  Address

    0xdddddddd 같은경우 delete 후 채워지는 값도있습니다.

Zlib에 대해 아시는가요?
오늘은 Zlib와 서로 인사를 나누는 시간을 가져봅시다....
일단 Zlib가 무엇인가에 대해 알아봅시다.
간단히 제가아는 범위내에선 리소스패킹시나 용량조금 쭐일때쓰는정도 밖에모르네요..
자세한 설명은 Wikipedia 에 나와있는 Zlib  을 한번 참고해보시면 좋을듯합니다.
Zlib 사이트 <-링크
사용자 삽입 이미지
<