Header

  1. View current page

    잔물결 ~스프링노트 지부~

Profile_img_60x60_01
1

맥스 스크립트

 다음 글은 학과 까페에 올린 맥스 스크립트 활용에 대한 이야기입니다.

사실 완벽하게 사용했다 까지는 말하기 어렵습니다. 100% 알고 했다기 보다는

몰랐기 때문에 처음부터 시작해 본거지요. 그나마 루아스크립트라도 배워 놓은게 다행이었습니다.; (감사합니다. 심현보 교수님 ㅠㅠ)

 

 

Book1.csv

Object_Collect.ms

 


안녕하세요. 이번에 졸업한 유승환입니다. 사실 오래전에 졸작에 대한 이야기로 여러분께 이야기 하려고 했는데 이런저런 핑계만 스스로에게 늘어 놓았군요.


 대단한 작품을 만든 것도 아니고, 그렇다고 후배분들에게 아주 으스댈 만한 제작 기법이나, 노하우를 가지고 있는 것은 아닙니다. 단지 여러분께 당당하게 말할 수 있다는 것은 아무것도 모르는 사람들이 모여서 하나의 완성품을 만들었다는 것이겠죠.


 모르겠습니다. 올해 지스타에서도 무슨 말들이 오갈지는. 그저 여러분께 바라는 것이 있다라면 지금 현재 여러분들이 만들어가는 여러분만의 "자식"을 만들어 가는데에 보람을 느꼈으면 하는 바램입니다.


 사설이 매우 길었군요. 자 그럼 설명 하도록 하죠.


 사실 설명할 것도 없습니다. 순전히 "제로"부터 만들어 나간 것은 아니라서요. 레퍼런스를 참조 한 것이 다소 많기 때문이죠. 하지만 이런 방법도 있구나 하는 것만 이해 하신다면, 제가 말하는 게 무엇이었나만 이해 하신다면 좋겠습니다.


 저희 GGRG 팀에서는 이러저러해서 외부에서 맵의 좌표를 가진 파일을 파싱하여서 쓰는 방식을 채용했습니다. (프로그래밍 인 루아 "파일 입출력 참조") 쉽게 설명해서, 좌표를 입력한 텍스트 파일을 루아에서 읽어들여서 클라이언트로 보내주어 해당 좌표에 오브젝트를 뿌려 주는 것이지요.


 그런데 여기서 문제가 발생 했습니다. 오브젝트가 굉장히 늘어남에 따라 이를 일일이 수기로 입력하는 기획파트에서도 혼선이 발생하는 것입니다. 물론 해당 좌표에 대한 문서는 보관이 되어 있지만 어디서 에러가 발생하는지 그런 것은 파악하기가 힘들었습니다. 즉 완전무결성에서는 참 힘든 일이 발생했던 것이죠.


 게다가 일일이 수기로하니 몇번의 작업을 더 해야 했었고, 이에따라 다른 파트도 일이 늦어지게 되었습니다.


안되겠다 싶었죠.


 자 여러분은 여기서 어떻게 하시겠습니까? 그냥 수기로 계속 하시겠습니까? 혹은 다른 서드파티 툴을 이용하던가. 촉박한 시간에 한정된 인원에서 프로그래밍 파트를 조여서라도 맵툴을 만드시겠습니까?

 물론 모두 가능한 이야기입니다. 심지어 규모를 줄이는 것도 가능한 이야기입니다. 어떤 선택을 하시는지 간에, 훌륭한 선택을 하시는 겁니다. 포기 하시는 거라고요?


포기 하지 마십시요. 포기는 적절한 선택이 될 수 없습니다.


 전 조금 다른 생각을 해보았습니다. 적절한 선택은 아니였고, 조금은 위험한 방법이었죠. 프로그래밍에 "프"도 모르고, 이론이라고 조금알며, 루아 스크립트 조금 다루어 본 기억밖에 없는 제가 선택한 방법은


맥스 스크립트를 이용하는 것이었습니다.


맥스 스크립트가 뭐지? 라고 하시는 분은 모르셔도 상관이 없습니다. 그냥 넘어가셔도 됩니다. 기획 파트에게 꼬옥 필요한 부분은 아닌 거죠.

 혹시 지금 어떤 3D 포맷을 이용하지? 하면서 연구 하시는 분들은 "MAX2XML"이라는 것을 아실지도 모릅니다. GPG 스터디에서는 초반에 이 것을 많이 추천하시더군요. 저희는 1학기 동안 형석형님이 끙끙거리다가 버그때문에 급하게 "X"파일로 바꾸었습니다.


(사설이지만...혹시 공부로서 꼭 파고 싶지 않은 분은 그냥 X 파일로 진행하시길 바랍니다. 물론 X파일이 좋다거나 버그가 없는 완전 무결이라는 것은 아닙니다. 메모리 누수도 많고, 버그도 있습니다. 단지 다이렉트 X에서 바로 쓰기 좋고, 또한 익스포터도 구하기 쉽습니다. 추천하는 익스포터는 판다 x 익스포터를 추천합니다. 사용하는 방법은 물어보시면 답해드리겠습니다.)


제가 말한 저 익스포터를 메모장으로 열어보시면 텍스트 형식의 스크립트로 되어 있습니다. 바로 맥스 스크립트를 이용해서 현재 작업하고 있는 작업물에 대한 좌표값이나, 이벤트값등을 XML 형식의 텍스트로 저장해주게됩니다.

 

이해 하셨나요? 맥스 스크립트는 간단히 말해 맥스안에 끼어있는 확장된 기능이라고 생각하시면 됩니다. 레퍼런스에서 명령어만 알면 루아를 배운 기획 분들도 쉽게 이해 하시리라 생각되며, 프로그래밍을 공부하시는 분들에게도 자신만의 구조로 된 파일을 만들어서 파싱 하실 수 있으리라 생각됩니다.

 

(최근에는 맥스 안에 들어있는 SDK를 이용해서 프로그래밍해서 만들더군요. iGameExport부분에

나와 있습니다. 사설로 제가 초반에 익스포터 구한답시고 저걸 컴파일해서 강제로 박아 넣을려고 그랬죠. -_-; 그러지 마세요 XML의 장점은 여러분이 맘대로 규정을 만들 수 있지만 반대로 정해진 최소한의 규정을 빼고는 서로 다르답니다;)

 

제가 생각 했던 것은 다음과 같습니다.

 

MAX -> 좌표를 가진 데이터  -> 좌표를 출력 -> 편집이 용이한 텍스트 형식 파일.

 

이런 방식은 한시간 안에 후딱 만들 수 있었습니다. 조금 익숙해 지는 군요.

 

MAX -> Position -> Write -> CSV

 

 그래서 조금 바꿨습니다. 루아를 담당하던 이재근 군과 대화를 하고 ,로 각 구문을 구분하는 파일로 전달 하면 서로 편하도록 말이죠.

 그래서 각 부분을 ","로 구분하는 즉, CSV의 형식의 파일로 출력 하도록 했습니다.

해당 파일에 대해서는 자식까지 찾아 넘기는 네이버 지식인에서 찾아 보시고, 간단하게 데이터베이스를 저장하는 파일 형식이라고 생각하시면 됩니다.

 이것의 장점이 엑셀에서 편집할 수 있다는 것이죠. 에디트플러스 같은 문서편집기에서 데이터를 편집한다는 것과, 엑셀에서 편집이 가능하다는 것은 천지차이입니다. 5시간동안 해야 할 일을 1시간 아니 10분에 끝낼 수 있다는 것이죠.

 

맥스를 켜서, 오브젝트를 막 깔아 둔 상태에서, 해당 스크립트를 돌리면 아무 일도 안일어 난거 같습니다만, 버젓히 파일이 생성되어 있습니다. 실력이 부족해서 툴처럼은 못많들었네요. 시간도 여유로웠으면 비쥬얼한 맥스 플러그인을 만들 었을 텐데요. 그럼 여러분께 도움도 되었을 텐데 아쉽습니다.

 

자 부족한 부분은 엑셀로 편집하고 이걸 저희 프로젝트에 집어 넣으면 해당 좌표에 오브젝트가 출력됩니다. 생각 보다 쉽죠. (사실 오브젝트의 회전 값까지 해볼려다가 시간 부족 및 연구 부족으로 하다하다 안되서 그것은 수기로 했습니다. -_- 불편함이 많은 플러그인인건 확실 합니다.)

 

스크립트 구문에 대해서는 설명하지는 않습니다. 이런 방법이 있구나 하고 보시라고 올리는 거고요. 저도 사실 2시간 동안 하면서 만든거라, 가르치기 적절하지도 않네요.

혹자는 이럴지도 모르지요.

 

"기획에서 이 정도까지 해야해?"

 

아닙니다.

 

"기획에서 이것밖에 못해?"

 

가 맞습니다. 이번 프로젝트에서 그래픽 보조도 해보고, 맵도 만들고, 인터페이스도 만들고, 구성도하고 했지만, "와 나 정말 많이 했어" 생각 들면서도 막상 떠올려보면 "더 할 수 있지 않을까" 라고 생각도 듭니다.

 

문서만 쓴다고, 아이디어만 낸다고 기획이 아닙니다. 문제점이 뭔지. 어떻게 해결해 나갈건지에 대해서 고민도 하고 서로 의견을 내어 결과로 이끌어 가는 것이 기획이라고 생각합니다.

 

 기껏 아마추어 게임 한번 만들어 보고 별 말을 많이 하네요. 저도. ㅎㅎ

 

 당부 드릴것은, 지금 바로 앞에 있는 것 만이 방법은 아닙니다. 찾아보면 여러분이 생각지도 못한 방법이 많고, 그 방법은 교수님들께서 도시락 싸들고 다니면서 숟가락으로 퍼 먹여 주신다고 생각 하지 말았으면 하는 바램입니다. 방법은 자신이 찾는 것이 정말 현명한 사람입니다.

 

그럼 졸작 잘 하시고요. 정말 좋은 결과 기대하고 기다립니다. 화이팅

 

//파일 포함했습니다.

//밑에는 해당 파일에 대한 설명입니다.

 

----------------------------------------------
-----2007.10.22, 유승환
-----GGRG 팀 전용 MAX 2 CSV
-----김용준 님 맥스 스크립트 메뉴얼과 맥스 스크립트 레퍼런스를 참조해서 만든 조약한 스크립트입니다.
-----저희 팀 전용으로 사용됩니다.
-----앞으로 이후 졸작 팀에서도 맥스 스크립트를 유용해서 좋은 결과가 있었으면 하는 바램으로 시도해 봅니다.
-----스크립트 학습 2시간만에 만든 0.5 버젼입니다.
-----inthefate@hotmail.com
-----본 스크립트를 실행하면 루트 폴더에 CSV 파일이 생성됩니다.
-----엑셀로 편집하셔서 사용하시면 됩니다.
      
      
       ff = "c:\object pos.CSV"
 
-- 파일 명


   f = createFile ff

 

-- ff의 이름으로 파일을 생성하라고 지시합니다. ff는 앞에 나온 파일명이라는 변수로 지정되어 있습니다.

 

       format "Max 2 CSV,\n" to:f

 

-- "$"이라는 스트링을 받아서 출력합니다.  이때 to:f 를 이용 f로 보내라고 지시합니다.
-- 위의 구문은 print 문으로 할 경우에는 맥스 스크립트 리스너로 출력되더군요. (기록쪽은 모르겠습니다.)
-- to:f 를 지시하지 않을 경우에는 맥스 스크립트 리스너로 출력됩니다. 확인하세요.

 

              format "NAME,%,\n" maxFileName to:f

 

-- maxFileName에서 파일 이름을 얻어 온 후에 %에서 받습니다. 이후 과정은 위와 같습니다.
--% 경우 뒤에 순서대로 받게 되니 갯수가 뒤에 변수와 같지 않을 경우 에러를 뱉게 되더군요.

 

              format "OBJECTCOUNT,%,\n" objects.count to:f

 

-- objects라는 속성을 가진 것들의 count 수를 구해서 보내줍니다.

 

         select $

 

-- 여기서 조금했갈렸는데...간단합니다. $는 선택한 것이라는 것이니 선택한 것을 선택한다고 이해 하면 됩니다.
-- 전부다 변환하고 싶으시면 $*으로 해주세요. 전 처음에 그렇게 했다가 필요한 메쉬만을 선택하기 위해서 풀어 놓은 상태입니다.
-- 이 외에도 폴리 상태나 혹은 여타 이름만을 선택 하는 방법도 가능하고요. 자세한 것은 맥스 스크립트 레퍼런스에 더 잘나와 있습니다.

 

         objs = $

 

-- $위에 구문과 같이 설명 해야 하는 건데..objs를 $로 지정해 주는 것입니다.

 

         for o in objs do
  
             (
    --pos.n //n좌표로 출력
    format "type,%,%,%,%,1,0\n" o.name"  o.pos.x o.pos.z o.pos.y to:f
    
  )


-- 하나하나 오브젝트에 대한 내용을 모두 돌려야 겠죠?
-- 그래서 for 문을 사용합니다. 저도 정확하게 구문을 이해 하고 있는 것이 아니라서 뭐라고 말씀을 못드리지만
-- objs를 o로 지정한 후에 돌리는 듯 합니다.
-- (대상).pos 는 해당 대상의 좌표를 뽑아 오는 것으로서 응용방법으로는 버텍스 좌표나, 엣지, 페이스 좌표도 뽑아 올수 있습니다.
-- 저는 필요 했던 것이 오브젝트의 x,y,z 좌표였기 때문에  o.pos.x 등으로 지정했습니다.(어디에도 안나왔길래 그냥 해보니 되더군요...)


         close f

 

-- f의 행동을닫아줍니다. 그럼 종료 되는 것입니다.

 

=======================================================================================

ps.  계속 공모전 결과가 뒤로 미루어지네요. 뭐가 되었든 간에 빨리 연락이 왔으면 좋겠는데 ㅎㅎ

History

Last edited on 07/18/2008 23:20 by 루안제로

Comments (0)

You must log in to leave a comment. Please sign in.