株式会社デジタル・フロンティア-Digital Frontier

Header

Main

  • TOP
  • DF TALK
  • バグを招く4個の習慣 – スクリプト入門者のあなたへ –

バグを招く4個の習慣 – スクリプト入門者のあなたへ –

2011/5/23

Tag: ,,,,,,

はじめまして、DFで唯一「迷惑」を担当している ATD @pepe_k7です。

まだ入社したばかりの自分は、皆さんに見せられる技などは持っていません。しかし、たまには未熟者が書いた記事もあったほうが読む楽しみにもなると思い、恥ずかしながら書かせて頂きました。

さて、今日の主題はこちら

「バグを招く100(2)個の習慣  — スクリプト入門者のあなたへ –」

です。

自分の経験談ですが、学生時代友達に頼まれて書いたスクリプトがありました。内容としては凄く単純で、二つ以上のポリゴンオブジェクトのサイズを比較して、それにあわせUV Mapのサイズを変更するというスクリプトでしたが、計算の処理がかなり遅かったので作業中眠いとき手が開いてる時、ちょこちょこと書き直していました。ある程度完成したと思い、またその友達にテストしてもらうためメールで送ろうと見直したら、完成バージョンに古いバージョンを上書きしていたのです。一瞬パニックでしたが、すぐに落ち着いて
「大丈夫、アルゴリズムなら既にこの優秀な頭(== FDD 5.25 inch )の中にあるはず、簡単に古いバージョンから直してやる」
でも、たった3日程前に書いたのに、見ても見ても複雑でさっぱり分かりませんでした。
「マジでこれ私が書いたの~私凄いじゃん~」・・・・・;

結局、最初から書き直すことにしました。

でも友達にはメールで送るよって言っちゃったから時間がない。(バグで遅くなったと言うのは恥ずかしい!)今回は同じミスをしないよう意識しながら2時間程で何とか書きました。
完成してみたら前のとはかなり違う形になり、いくつか自分の悪い習慣を見直すことができました。

その悪い習慣と言うのは

<悪い習慣その1> 保存はいつも上書き,File名はいつも適当

<筆者の実際の例>


<さらに、失敗し続けた時の例>

<悪い習慣その2>変数や関数などの名前が意味不明
  ex1) a, b, c, this, that, it, etc, test1, test2, test3, i1, i2, i3, i4 …..
  ex2) lalaLa, nemui, ikemen, hensuMei, kansuMei……

<悪い習慣その3>一つの関数に週類の違うデータや処理を詰め込みすぎる
 ◆ 一つの関数にAll-in-Oneするエコーてきなスタイル ⇒ 修正に掛かる作業量が増える。関数の再活用が難しい

<悪い習慣その4>注釈をつけない
 ◆ 誰かに渡す時はもちろん、優秀な頭(== FDD 5.25 inch)があるからきっと大丈夫だと思ってしまうが自分のためにも注釈をつけておくことは重要

など、全部当然なことばかりですが、皆さんもこういう習慣はありませんか。きれいに整理しながら、書いていくだけでも想像以上に効率は上がります。

最後に上で紹介したスクリプトを添付します。

二つ以上のポリゴンオブジェクトのフェース面積かバウンディングボックスの体積を比較し、一番目のオブジェクト基準としUV Mapを比率に合わせサイズ調整するツールです。

まず、添付したファイルをダウンロードし、My Document内の\maya\20??-x??\scriptsの中に入れてください。その後以下のスクリプトを実行してください。

import maya.cmds as mc
import UVRateSource as uvRate
reload(uvRate)
uvRateTool = uvRate.UVScalinToolUI()
uvRateTool.makeIt()

★ 使用例


すべてのパーツが同じサイズのUVになっています。


基準になるオブジェクトのUVサイズを決めます。


実行!(ただ、配置は手動です)

あまり良いものではありませんが、少しでも役に立てば幸いです。

UVRateSource

※注意※ このスクリプトを使用したことによって引き起こるいかなる損害も当方は一切責任を負いかねます。自己責任でご使用ください。

—————————————————————————————————————————-

처음뵙겠습니다. 디지털 프론티어에서 민폐만 끼치고 있는 어시스턴트 테크니컬 디렉터 @pepe_k7입니다. 아직 입사한지 몇개월 지나지 않은 제가 여러분께 보여드릴 테크닉 같은건 없지만, 가끔은 못하는 사람도 나와줘야 보는 재미가 있는 법이라고 생각합니다.

오늘의 주제는

“ 버그를 부르는 악습관

스크립트 초심자인 당신에게.. ”

입니다.

아직 학교에 다니던 때(라고 해봐야 작년) 같은 반 친구에게 부탁을 받아  스크립트를 쓴적이 있습니다. 단순하게 두개 이상의 폴리곤 오브젝트의 크기를 비교해서 UVmap의사이즈도 맞춰준다는 내용으로, 당시 계산 처리 방식이 꽤나 느렸기때문에 회사작업 도중 손이 비거나 하는 시간에 조금씩 고쳐 쓰고 있었습니다.

어느정도 완성인가 싶어 그 친구에게 테스트를 부탁하려 메일을 보내려고 보니 구 버젼을 최신버젼 위에 덮어쓰기 하고 있었습니다.

“괜찮아. 알고리즘은 전부 머리속에 있으니, 금방 다시 고쳐 써주지.”

하지만  3일정도 전에 쓴 내용임에도 불구하고 본인이 쓴게 맞나 싶을 정도로 전혀 감이 오질 않아, 결국 처음부터 다시 쓰게 되었습니다.

대신 이번에는 좀더 정리에 신경을 쓰며 조금은 더 계획적으로 고쳐쓰며,  자신이 많이 하는 실수를 정리해 보았습니다.

1.다른이름으로 저장을 쓰지 않는것. 파일명을 대충 짓는것

2.변수나 함수의 이름이 의미불명

3.한개의 함수가 복수의 기능 / 데이터를 가지고 있음

4.주석을 첨부하지 않는것

너무나도 당연한 것들이지만, 혹시 읽고 계신 여러분들도 비슷한 버릇이 있진 않습니까?스크립트 작성시 정리하는 습관 만으로도 상상 이상으로 효율은 좋아집니다.

끝으로 스크립트를 첨부합니다.

두개 이상의 폴리곤 오브젝트의 페이스 면적이나, 바운딩박스 부피를 비교해서첫번째 오브젝트를 기준으로 나머지 오브젝트의 UV의 사이즈를 조정하는 스크립트 입니다.

비록 좋은 툴은 아니지만, 여러분의 작업에 조금이라도 도움이 되면 기쁘겠습니다.
사용법은 첨부한 파일을 자신의 내문서 폴더내의 \maya\20??-x??\scripts폴더안에 넣은뒤 아래의 스크립트를 실행하면 됩니다.

import maya.cmds as mc
import UVRateSource as uvRate
reload(uvRate)
uvRateTool = uvRate.UVScalinToolUI()
uvRateTool.makeIt()

UVRateSource

※ 단, 스크립트의 사용 또는 변경등에 의해서 발생하는  문제등에 대해서 책임을 지지 않습니다. 사용시에는 주의를 부탁드립니다.

끝으로 디지털 프론티어에는 현재 우수한 한국인들이 근무하고 있습니다. 해외 영상 프로덕션에 관심이 있는 여러분들의 많은 도전을 기다립니다.

Pocket

コメント

コメントはありません

コメントフォーム

コメントは承認制ですので、即時に反映されません。ご了承ください。

*