3DCGbook

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

移転のお知らせ

始めて2年くらいでしょうか…。
そろそろちゃんとしたサイトを作りたい…ということで以下に移転することにしました。

ちなみにこのサイトのアクセス数は別に高いわけではありません。
非常にニッチなアクセス数です。(笑)

別に規模が大きくなったというサクセスストーリーの為に変えるのではなく、
自分の自己啓発の為に変えたというのが理由でしょうか?

http://rigglog.com

サイト名は「リグログ!」にしました。
あくまで自分らしさは残しておきたいということで。

これからはここよりも更新を頑張りますので皆さま引き続きよろしくお願いします。

【まとめ】気になる記事 Mayaテクニカル #002

GREE Creators' Meetup 第3回

connpass.com

自分は行ってないですけど。

togetterまとめもありました。
「Cygames Tech Fes ~Cygames流!Unity × スマホ3Dゲーム開発のすべて!~」のツイートまとめ - Togetterまとめ


テクニカルアーティストがFlashToUnityという作ったみたいな話があったようですね。
このようなツール to ツールを作る人は、
どんなテクニカルアーティストに分類されるのでしょうね。

効率化系テクニカルアーティストと名付けましょう。僧侶系です。(?)


Cygames Tech Fes

atnd.org

これも自分は行ってないですけど。(笑)

アーティストのためのプログラマブルシェーダ講座は見やすく、興味深かったです。
Gcm#3 アーティストのためのプログラマブルシェーダ講座

こちらは描画系のテクニカルアーティストですかね。戦士系としましょう。(?)


どちらに関しても通じるものは、
テクニカルアーティストの重要性です。

こういうカンファレンスがある時には
必ずテクニカルアーティストのセッションがあったりしますね。

というか…ソーシャルが技術的にまた盛り上がってきてますね~。
個人的には良い流れだと思います。

ソーシャルゲーム開発をやったことで基礎から技術構築された。

様々なことが再認識できた。

よりよいゲーム開発が行われるようになった。

私個人はこんなイメージです。
開発していると上澄みばかり見てしまって基礎を忘れてしまうんですよね。

私も基礎から勉強し直している最中です。見習わなきゃ!



ゲームアプリの数学 Unityで学ぶ基礎からシェーダーまで
久富木 隆一
SBクリエイティブ
売り上げランキング: 45,497

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

かなり今更な感じですけど…。
アセンブラの勉強してたら、ビット演算面白いなーと思いまして。
今までは余りで判定してたんですけど、

最下位ビットでの判定はなんかお洒落!

と思っただけです。(笑)

num = 13

# 余り
if num % 2 == 1:
    print "uneven number"
else:
    print "even number"
    
# ビット演算
if num & 1:
    print "uneven number"
else:
    print "even 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 __rshift__(self,new_element):
        return cmds.connectAttr(self.node,new_element.node)

# インスタンスを作成
p1 = Node('pCube1')
p2 = Node('pCube2')

# connection
p1.tx >> p2.tx
p1.ty >> p2.ty
p1.tz >> p2.tz

Pythonクラスの特殊メソッドってそこまでしっかり使ったことないんですよね。

Pythonは根元をしっかり勉強してないので、
これを機にPythonマスターを目指していきたいところです。(笑)

# 参考
データモデル — Python 2.7ja1 documentation
9.9. operator — 関数形式の標準演算子 — Python 2.7ja1 documentation



初めてのPython 第3版
初めてのPython 第3版
posted with amazlet at 15.11.18
Mark Lutz
オライリージャパン
売り上げランキング: 41,257

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

Mayaで*、?等の記号はよく使いますでしょうか?
これらはノードの検索とかで非常によく使えます。
命名規則をしっかりしていればこれだけでなんとかなるものもたくさんあります。

これらは任意の文字列で検索したい時に使います。
正規表現のライト版?みたいな感じでMayaでは使えます。

* と ? の使い方は以下の画像で説明します。
f:id:blendcomp:20151117111054j:plain

* の使い方

これは有名ですね。
長さ0文字以上の任意の文字列にマッチします。
上記の例で*(アスタリスク)を使って選択してみましょう。

import maya.cmds as cmds
# "pSphere"までは固定、それ以降は任意の文字列にマッチ
cmds.select('pSphere*') #Shapeも含めて、全て選択されます。

# "pSphere2"までは固定、それ以降は任意の文字列にマッチ
cmds.select('pSphere2*')#pSphere2A,pSphere2AShape,pSphere2B,pSphere2BShape が選択されます。

# pSphre + 任意文字列 + A にマッチ
cmds.select('pSphere*A')#pSphere1A,pSphere1AShape,pSphere2A,pSphere2AShape が選択されます。

選択結果からお気づきだとは思いますが、これにはデメリットが存在します。
それは末尾に*を使った場合、Shapeも同時に選択されてしまいます。

これを回避する為に?を利用します。

?の使い方

こちらは任意の一文字にマッチします。

import maya.cmds as cmds
# "pSphere"までは固定、それ以降2文字をマッチ。
cmds.select('pSphere??')#pSphere1A,pSphere2A,pSphere1B,pSphere2Bを選択

# "pSphere2"までは固定、それ以降1文字をマッチ。
cmds.select('pSphere2?')#pSphere2A,pSphere2Bを選択

# pSphre + 任意の1文字 + A にマッチ
cmds.select('pSphere?A')#pSphere1A,pSphere2Aを選択

命名規則がしっかりしていれば非常にコントローラの選択が楽になります。
例えば、
・L_hairA_joint
・L_hairB_joint
・L_hairEnd_joint
・R_hairA_joint
・R_hairB_joint
・R_hairEnd_joint
というような規則があった場合に、
「Endがつくものは選択したくない!」
「Rだけ選択したいなぁ…」
とかの要求を簡単に、ココ↓から実現できます。
f:id:blendcomp:20151117114204j:plain

# の使い方

これはワイルドカードとは少し違うので少し違いますが…。
シーンに以下のノードが存在するとします。
f:id:blendcomp:20151117112727j:plain

以下のコマンドを使ってTransformノードを作るとどうなるでしょう?

import maya.cmds as cmds
cmds.createNode('transform',n='rivetSpace_#')

結果は以下になります。
f:id:blendcomp:20151117112908j:plain

要するに、
"rivetSpace_"までを検索しナンバリングして作成します。

末尾にナンバリングするような命名規則で作業している場合に
#を使うことは非常に便利ではないでしょうか?

細かいところで効率化を図っていきましょう~。
それでは。

もう一歩進んで、正規表現を勉強したい方はこちら。
非常にわかりやすいです。www.dfx.co.jp

さらに研究したい方は以下を購入して下さい。(笑)



詳説 正規表現 第3版
詳説 正規表現 第3版
posted with amazlet at 15.11.17
Jeffrey E.F. Friedl
オライリージャパン
売り上げランキング: 122,809

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

リグのコントローラを選択しやすくする為に、
ピッカーというのを容易することがあります。

要はコントローラを選択しやすくする為のGUIです。

1.命名規則を作ります。

・選択されるオブジェクトが pSphere1 とします。
・pSphere1を選択するピッカーの名前をpSphere1_gui とします。
選択されるオブジェクト + "_gui" という命名規則に設定しました。

以下のような感じで…。
f:id:blendcomp:20151116135252j:plain

2.pSphere2_gui を映すようなカメラを作成します。

カメラのZ方向(ドリー)は固定しといた方がいいかと。
f:id:blendcomp:20151116135721j:plain

3.ScriptJobを作成します。

ScriptJobとはMayaが何かしらの動作を行った際にスクリプトを実行してくれる超便利機能です。
以下のようなスクリプトを登録しておきます。

impport maya.cmds as cmds
def guiSelectToObjSelect(*args):
    nodes = cmds.ls(sl=True)
    objs = [node.replace('_gui','') for node in nodes if '_gui' in node]
    if len(objs) is not 0:
        cmds.select(objs,r=True)

# Jobを消す為にIDは取っておきましょう。
jobID = cmds.scriptJob(e=["SelectionChanged",guiSelectToObjSelect])

# 消す時はこんな感じで。
cmds.scriptJob(kill=jobID,force=True)

これで簡易ではありますがピッカーが作成されました。
あとは、
【選択されるオブジェクト + "_gui"】という命名規則さえ守ればどんどん追加することが可能です。

またscriptJobはMayaを開いている間は生き続けるので、
scriptJobはscriptNodeで管理する方が良いかもしれませんね。

※上記のスクリプトはあくまで例の為、シンプルに書きました。
 スクリプトジョブは場合によってはかなり危険な動作になるので十分に注意して使用して下さい。



PySide GUI Application Development
Packt Publishing (2013-10-15)

【MEL Tips】mag関数について

mag関数とは、ベクトルの長さを返す関数です。

以下の例で使ってみると、
f:id:blendcomp:20151115163408j:plain

vector $hypotenuse = <<10,5,0>>;
mag($hypotenuse);
// Result: 11.18034 //

ただmag関数を使わなくてもvector型をfloat型にキャストすれば同様の結果を得られます。

vector $hypotenuse = <<10,5,0>>;
float $hypotenuseLen = $hypotenuse;
// Result: 11.18034 //

どっちが軽いんでしょうかね…。
ということで微妙なTipsですがお試しあれ~。



MEL教科書―Mayaプログラミング入門
阿部 知弘
ボーンデジタル
売り上げランキング: 146,124