3DCGbook

映像プロダクションに所属しています。主に毎日のアウトプットを配信していこうと思います。

Python

【Python】今更感!偶数か奇数の判定

かなり今更な感じですけど…。 アセンブラの勉強してたら、ビット演算面白いなーと思いまして。 今までは余りで判定してたんですけど、 最下位ビットでの判定はなんかお洒落! と思っただけです。(笑) num = 13 # 余り if num % 2 == 1: print "uneven number…

【Python】クラスを使ったPyMel風なコネクション

こんな感じ? import maya.cmds as cmds class Node(object): def __init__(self,node): self.node = node def __getattr__(self,attrname): return Node('%s.%s' %(self.node,attrname)) def __repr__(self): return 'Node("%s")' %(self.node) def __rshif…

【Maya Tips】*、?、#で作業効率アップ!

Mayaで*、?等の記号はよく使いますでしょうか? これらはノードの検索とかで非常によく使えます。 命名規則をしっかりしていればこれだけでなんとかなるものもたくさんあります。これらは任意の文字列で検索したい時に使います。 正規表現のライト版?みた…

【Maya Tips】お手軽なピッカーの作り方

リグのコントローラを選択しやすくする為に、 ピッカーというのを容易することがあります。要はコントローラを選択しやすくする為のGUIです。 1.命名規則を作ります。 ・選択されるオブジェクトが pSphere1 とします。 ・pSphere1を選択するピッカーの名前を…

【Python】ノードベースな関数!のススメ

まずは例を、 ''' 例1 ''' # for等を関数の中に入れる(全部入り) def selectionLockTranslate(): sl = cmds.ls(sl=True,type='transform') for node in sl: cmds.setAttr('%s.translate' %node,l=True) allTranslateLock() ''' 例2 ''' def lockTranslate(no…

PythonらしいTranslate、Rotate、Scaleのコネクション

こんな感じはどうでしょう… というだけ。(笑) import maya.cmds as cmds # 元オブジェクトとターゲットオブジェクトを指定 src = 'pCube1' dst = 'pCube2' # コネクション for compound in 'trs': for leaf in 'xyz': cmds.connectAttr('%s.%s%s' %(src,comp…

可変長引数でsetAttr

compoundアトリビュートのsetAttrって地味に面倒くさいですよね。 何故ならlistでそのままsetできない!要するに、 translate = (1,2,3) cmds.setAttr('pSphere1.translate',translate) ができないってことです。これをやるには、 tx,ty,tz = (1,2,3) cmds.s…

アート型とテクニカル型とロジカル型とエモーショナル型

自分の考え方としては、 ありとあらゆるものを想定した結果、大丈夫だったら開発を進める…という考え方。 なのでテクニカル&ロジカルになると思うのですが…。アート的、かつエモーショナルな動きをしたいとも 思いつつなかなか価値観を変えるのは難しい。Py…

Mayaでの"スクリプト力"を向上させる提案

今日、飲み会でふと聞かれたことなので、 自分なりのスキルアップ方法をまとめてみます。 あくまで自分なりのです。僕の場合は、 ・よく使うコマンドを同じように使わない、フラグの意味は全て理解する ・別の方法で同じことができないかどうかを考えてみる …

配布するスクリプトのロック、保証について

スクリプトを配布する場合を考えてみます。 スクリプトを配布というのはいろいろなパターンがあります。 ・個人で配布する ・会社で配布するなどなど。 もちろん共有した方が効率的に作業が可能になるとは思いますが…。 独自に時間をかけて開発したものを渡…

fileノードって割と情報取れるよね

最近はブログの題名に迷います。 fileノードってお題にして、いきなりMayaの話か~! ってわかる人もそんないないのかなぁ…と思ったり。理由としてはPythonってお題となると様々な業種の方がいるんですよね。 むしろMaya限定でPythonを使う方が少ないと思い…

パフォーマンステストからわかるPyMELの重さ

前回に引き続き、パフォーマンステストブームなので…。 今回は3000個のpolySphereの法線をチェックする場合の時間を計ってみました。 結果 ライブラリ 時間(秒) maya.cmds 14.5990002155 pymel.core 47.5500001907 Python API 1.0 0.258000135422 Python API…

MayaでのgetAttr...文字列連結でのパフォーマンス

ものすごーくマニアックです。 パフォーマンスを調べるのが最近のブームなので…笑 計測お題 polygonSphereを3000作成し、 ・translateX ・translateY ・translateZ ・rotateX ・rotateX ・rotateX ・scaleX ・scaleY ・scaleZ ・visibility を取得する場合に…

MayaでPySide始めてみました。

家のメインのMayaを2015にしたので、 せっかくだからPySideを使ってWebブラウザを作ってみました。というよりはブラウザ以外はPySideで作りたいものがないという現実もあるのですが…。 理由としてはMayaのウインドウって割と優秀なんですよね。相当複雑なこ…

かっこつけてsetDrivenKeyframeを作成する

リガーやコード書きにとって、 いかにワークフローをかっこつけられるか!も大事です。 むしろ僕はこれしか頑張ってません。無駄に頑張ってます。無駄に。 例:joint_driver で joint_driven をdriveしたい。 1. 使うフラグをまとめたcsvファイルを用意しま…

弧度法と度数法

自分がゲーム業界にいた頃にプログラマに「ラジアン単位で…」とか言われて、 「は?んだそれ?」となったのを今でも覚えています。さて、Mayaと何が関係あるか…ということから。 まずMayaのデフォルトは度数法(degrees)です。 もう一つ弧度法(radians)があり…

Maya Python API 2.0 のMatrix計算が便利

Maya Python API 2.0、凄く便利ではまってます。Maya Python API 1.0だと、MScriptUtilェ…な問題が発生してたのですが…。 お手軽にmatrix計算ができるので勉強になります。例えば、 import maya.cmds as cmds import maya.api.OpenMaya as om2 """ # DAG pSp…

環境依存と学力、技術の関係

最近よく考えるのがこれ。手紙があり、メールがあり、LINEがあり…。 LINEがなくなると手紙に戻ることは難しいわけです。 世の中は一方通行で、常に人はより便利なものを求める。 その結果、学力、技術低下を招くのでは…そんなことを考える面倒くさい男です。…

addAttrのcompoundを使うと夢が広がる

overrideEnabledやoverrideDisplayType… これらは現場で働く人なら必ずしもよく触れると思います。私の場合はsetsを作りそこにoverrideEnabled等を追加して、 TransformノードやShapeにコネクトしていました。 CompoundではなくLeafでコネクトしてたというこ…

いつのまにか10000アクセス超え!

いやー、ありがたいことです。 更新をかなり怠った時期も多々ありますがそれでも来てくれる方がいると励みになります。なので今年はブログをもっと更新する!というのも頑張り…たいなー。そういえば今日は仕事をしてて思ったのですが、 Python for Mayaを視…

PyMEL使うの(ほぼ)やめました。

去年の半ばくらいからはほぼ使わなくなりました。使わなくなったといっても即時実行系ではたまに使います。 VectorやMatrix計算では便利なのでそういう点では利用します。 ただもともとメインをPyMELにしてたのをmaya.cmdsに変えただけですね。理由としては……

pycの利用

pythonコードを配布する場合、 「使うのはいいけど見せるのはちょっと…」っていうものがある。その理由のほとんどはコメントも書いてないし汚いから!であり、 究極的に素晴らしい天才的なコードの為見せられない!というわけではない。そんな時に使うのがpy…

3DCGデザイナーがコーディングができた方がいい?

・できた方がいい ・できない方がいいこの二択だったら当然できた方がいい。3DのMayaを例にして書いてくことにしよう。 MayaではMELやPython、C++と選択肢がある。私はこれらの言語を使って効率化することはできた方がいい…とは思わない。 いや、もちろんで…

左側のDrivenKeyの数値をコピーして右側へ

例えば、「右ひじのDrivenKeyFrameを左ひじのDrivenKeyFrameの数値と同じにする。」 といったスクリプトを作ってみた。条件としては、 既に右ひじと左ひじにはDrivenKeyFrameが設定してあるということ。 要するにanimCurveUAが繋がっている状態である。とい…

ノード名の管理はどうしてる?(Maya編)

仕事になるとどうしても出てくるのがノード名をどう管理するか? という問題。リガーとなるとここは徹底して管理したいと思っている。そもそもノードに名前をつける理由を知ることが重要。 ノードに名前をつけるというのはファイルに名前をつけるということ…

【今日のPython for Maya】 Create Parent Joints

jointの上にOffset用のjointと何かに操作されるJoint... DrivenJointと言えばいいんでしょうかね。 これらを指定数作ります。Mayaはワールド座標から継承しまくって最終的な座標出されます。 全てワールド座標だと重たいですしね。Offset用jointを作るのは、…

Wrap…

Wrapを自動化とかしたいんだけどうまくいかない… 自動化している人はどうやっているんでしょうか? ちょっと気になる…。例えばだけどこんな感じでしかできないのかなー。 っていうので簡単に作ってみると… import pymel.core as pm def createWrapReturn(): …

工業製品こそスクリプトでモデリング!

買っちゃいました自転車。 カラミータのDUEってバイクです。ロードレーサー…というか自転車は素人なので、 見た目重視で買ったらギアの構造がWレバー方式っていうやつでした。あれギア変えられないなぁ…。 「ツークリックや!!」と弱虫ペダルばりにやろうと…

create annotation along root hierarchy.

ふと考えたんです。 3Dでモデルの仕様書を作るときにどうやるのが楽ちんかなーって。 私の場合はリグに関するのを作るのが多いかも…ということでこんなのを作ってみました。rootノードを選んで実行するとrootからAnnotationを作っていきます。 要するにroot…

OpenMaya 勉強中 その6 [LocatorNode]

さすがにこれは無駄に長いので書きはしないけど… 本当、OpenGLの勉強すればいろいろできそうですね! これはキューブなんだけど…これだけでも結構感動しました。なのでちょっとOpenGLの勉強しようかなーという気持ちになれてます(^^)