36
2 番外編! Presented By Ritaro HomePage http://www.comtec.daikin.co.jp/DC/UsersNotes/ @DaikinComtec_CG @SI_UsersNotes Maya大人気!カスタム・グラフエディタと 便利ツールをPythonで!!

GTMF 2015: Autodesk Maya;大人気!カスタム・グラフエディタと便利ツールをPythonで!! | ダイキン工業株式会社

Embed Size (px)

Citation preview

Page 1: GTMF 2015: Autodesk Maya;大人気!カスタム・グラフエディタと便利ツールをPythonで!! | ダイキン工業株式会社

2

番外編!

Presented By Ritaro HomePage http://www.comtec.daikin.co.jp/DC/UsersNotes/

@DaikinComtec_CG @SI_UsersNotes

Maya; 大人気!カスタム・グラフエディタと

便利ツールをPythonで!!

Page 2: GTMF 2015: Autodesk Maya;大人気!カスタム・グラフエディタと便利ツールをPythonで!! | ダイキン工業株式会社

Agenda ● 最新カスタム・グラフエディタの紹介

使用ソフト; Maya 2016,MotionBuilder2016

● Pythonで実現した便利ツールの紹介 ● カスタム・ハイパーグラフの紹介 ● これまでの経緯と最新版で達成した機能

● Rig用ICONツール ● SynopticView(Softimage名);選択用GUI ● 表の作成と書き込み/読み込み

scriptTableコマンドとCSVファイル SynopticView機能考察と組み合わせて出来たものとは。。。

● おまけ

Page 3: GTMF 2015: Autodesk Maya;大人気!カスタム・グラフエディタと便利ツールをPythonで!! | ダイキン工業株式会社

● 最新カスタム・グラフエディタの紹介

● これまでの経緯と最新版で達成した機能

Page 4: GTMF 2015: Autodesk Maya;大人気!カスタム・グラフエディタと便利ツールをPythonで!! | ダイキン工業株式会社

■ カスタム・グラフエディタ

● 既存グラフエディタの一大要望と問題点 ● [一大要望] = タイムラインの表示

■ 現在は以下2点を解決している。

● [問題点] = パネルの取り扱い

http://www.comtec.daikin.co.jp/DC/UsersNotes/Ritaro/tutorial/maya_02/

GraphEditorのパネルタイプは scriptedPanel

これまでの経緯と最新版で達成した機能 1

~少しずつヒモ解いていった 初投稿 Version 1 は 2014年8月 からスタート

・メインウィンド下と連動してスクラブで動くキーフレーム変更GUI

・スクリプティングからのパネルの作成と管理

windowコマンド扱いにしたい、trearOffPanelは増殖し続ける MEL記述部分をなるべくPython記述にしてすっきりさせたい

カレントタイムスクラブ k ;Maya-SIHOTキー Alt+k

Page 5: GTMF 2015: Autodesk Maya;大人気!カスタム・グラフエディタと便利ツールをPythonで!! | ダイキン工業株式会社

これまでの経緯と最新版で達成した機能 2

● [一大要望] = タイムラインの表示 >> なんとかメインウィンドウ下のTimeLineを実現したい。

mel.eval('tearOffCopyItemCmd scriptedPanel graphEditor1;') の下に追記しただけ。

・intSliderGrp コマンド を Slider 表示

・intSliderGrp を GraphEditor 下に表示

★ ふと timePort コマンドを知る!! だが、マニュアルのPython記述だと表示しない > 縦横値が必要

cmds.timePort(enableBackground=True,bgc=[0.2,0.2,0.2],width=500,height=20 )

cmds.intSliderGrp('TimeSlider',field=True,・・・

・最初は QT Designer の Slider の試作から始まった。

■ カスタム・グラフエディタ

Page 6: GTMF 2015: Autodesk Maya;大人気!カスタム・グラフエディタと便利ツールをPythonで!! | ダイキン工業株式会社

これまでの経緯と最新版で達成した機能 3

● [問題点] = パネルの取り扱い >> なんとかMel記述からの脱却とWindow内表示で管理したい。1

・最初は Melコマンドのティアオフ 表示方法から始まった。

最初から複数表示で使うことを考えている

★ ふと window コマンド 内に scriptedPanel を表示する方法を知る!!

パネル名に連番を追記して、ボタンコマンドのユニーク名とした

grp_panel_no_a = str( len(cmds.getPanel( scriptType='graphEditor' )) + 1 ) panel_name = "GraphEditor" + grp_panel_no_a mel.eval('string $panel_name = "%s"' % panel_name) mel.eval('tearOffPanel $panel_name "graphEditor" true;')

この記述の下に記述することで、下に button や timePort を追加した

paneLayout コマンドを利用してフラグに horizontal2 を使う

■ カスタム・グラフエディタ

Page 7: GTMF 2015: Autodesk Maya;大人気!カスタム・グラフエディタと便利ツールをPythonで!! | ダイキン工業株式会社

これまでの経緯と最新版で達成した機能 3.5

● [問題点] = パネルの取り扱い

win1 = cmds.window('custom_graphEditor'+ grp_panel_no_a, title='New CustomGraphEditor'+ grp_panel_no_a, resizeToFitChildren=True, widthHeight=(1100, 450)) pane1 = cmds.paneLayout(configuration='horizontal2', paneSize=[2,1,1], parent=win1) graphmenu = 'graphEditor' + grp_panel_no_a cmds.scriptedPanel(graphmenu, label=graphmenu ,type='graphEditor', parent=pane1)

この記述で、windowを親とするパネルとしてグラフエディタを入れることが出来た

>> なんとかMel記述からの脱却とWindow内表示で管理したい。2

■ カスタム・グラフエディタ

Page 8: GTMF 2015: Autodesk Maya;大人気!カスタム・グラフエディタと便利ツールをPythonで!! | ダイキン工業株式会社

これまでの経緯と最新版で達成した機能 4

● [問題点] = パネルの取り扱い >> なんとか増殖し続けるパネルを整理したい。

★ ふと deleteUI コマンドのフラグで パネル を削除することを知る!! 表示していないパネルリストから、グラフエディタがあったら削除する

invis_panel = cmds.getPanel(invisiblePanels=True) graphpanels = cmds.getPanel(scriptType='graphEditor') graphpanels.remove('graphEditor1') for o_graphp in graphpanels: if o_graphp in invis_panel: cmds.deleteUI(o_graphp,panel=True)

★ 使用したパネルがドンドン溜まっていくのを防ぐことが出来た !!

ただし graphEditor1 は削除しない

■ カスタム・グラフエディタ

Page 9: GTMF 2015: Autodesk Maya;大人気!カスタム・グラフエディタと便利ツールをPythonで!! | ダイキン工業株式会社

これまでの経緯と最新版で達成した機能 5

● 最新バージョンの発表 ! = Outliner の設置 (未公開) >> なんとかノード選択機能を補いたい。

★ ふと paneLayout コマンド のフラグを vertical2 にする方法を知る!! pane1 = cmds.paneLayout(configuration='vertical2', paneSize=[1,20,1], parent=win1) in_panel = cmds.outlinerPanel() outliner = cmds.outlinerPanel(in_panel, query=True,outlinerEditor=True) cmds.outlinerEditor(outliner, edit=True,showDagOnly=True, transmitFilters=False,setFilter='DefaultPolygonObjectsFilter')

講演後公開予定お楽しみに・・・

CustomSideGraphEditor.py

■ カスタム・グラフエディタ

Page 10: GTMF 2015: Autodesk Maya;大人気!カスタム・グラフエディタと便利ツールをPythonで!! | ダイキン工業株式会社

● カスタム・ハイパーグラフの紹介

Page 11: GTMF 2015: Autodesk Maya;大人気!カスタム・グラフエディタと便利ツールをPythonで!! | ダイキン工業株式会社

■ カスタム・ハイパーグラフの紹介 1 http://www.comtec.daikin.co.jp/DC/UsersNotes/Ritaro/tutorial/maya_06/

●最新バージョン公開中 こちらも同じくWindow化と未使用パネル削除対応になっている。

invis_panel = cmds.getPanel(invisiblePanels=True) hyphpanels = cmds.getPanel(scriptType='hyperGraphPanel') hyphpanels.remove('hyperGraphPanel1') for o_hyphpanel in hyphpanels: if o_hyphpanel in invis_panel: cmds.deleteUI(o_hyphpanel,panel=True) hyper_panel_no_a = str( len(cmds.getPanel( scriptType='hyperGraphPanel' )) + 1 ) win1 = cmds.window('custom_HyperGraph'+ hyper_panel_no_a, title='New CustomHyperGraph'+ hyper_panel_no_a,resizeToFitChildren=True, widthHeight=(800, 500)) pane1 = cmds.paneLayout(configuration='horizontal2', paneSize=[2,1,1], parent=win1) hypergraphmenu = 'hyperGraphPanel' + hyper_panel_no_a cmds.scriptedPanel(hypergraphmenu, label=hypergraphmenu , type='hyperGraphPanel', parent=pane1)

Page 12: GTMF 2015: Autodesk Maya;大人気!カスタム・グラフエディタと便利ツールをPythonで!! | ダイキン工業株式会社

http://www.comtec.daikin.co.jp/DC/UsersNotes/Ritaro/tutorial/maya_06/

●最新バージョン公開中 階層表示方法設定子画面 [Setup],Softimage的SRT一致ツール、ちかんツール(置換ね)

■ カスタム・ハイパーグラフの紹介 2

Page 13: GTMF 2015: Autodesk Maya;大人気!カスタム・グラフエディタと便利ツールをPythonで!! | ダイキン工業株式会社

● Pythonで実現した便利ツールの紹介

● Rig用ICONツール

● SynopticView(Softimage名);選択用GUI

● 表の作成と書き込み/読み込み scriptTableコマンドとCSVファイル SynopticView機能と組み合わせて出来たものとは。。。

Page 14: GTMF 2015: Autodesk Maya;大人気!カスタム・グラフエディタと便利ツールをPythonで!! | ダイキン工業株式会社

● Pythonで実現した便利ツールの紹介

● Rig用ICONツール

Page 15: GTMF 2015: Autodesk Maya;大人気!カスタム・グラフエディタと便利ツールをPythonで!! | ダイキン工業株式会社

■ Pythonで実現した便利ツールの紹介 Rig用ICONツール 1

http://www.comtec.daikin.co.jp/DC/UsersNotes/Ritaro/tutorial/maya_07/

・キャラクター制御Rig用のICON集表示 + Tool GUI

★ 実は、最大の便利さは Scale にある HIKなどのRigはスケールが大きい。

中身は、作成したカーブをデータ化して

cmds.curve(name='curve1',d=3, p=[(-1.1112534999848538, 2.4959175586702926, 0.14370895922185412), (-0.9331233132338141, 2.563328364756063, 0.14413296666402145), ・・・・・ (-1.111253499984741, 2.4959175586700435, 0.14370895922183932)], k=[0.0, 0.0, 0.0, 1.0, 2.0, ・・・ 25.0, 26.0, 26.0, 26.0])

cmds.curve(name='作成されるカーブの名前',d=次数,p=ポイントの x、y、z の位置, k=ノットベクトルにあるノットの値)

リギング>コントロール>コントロールリグの作成>作成

スクリプトから生成している。

Page 16: GTMF 2015: Autodesk Maya;大人気!カスタム・グラフエディタと便利ツールをPythonで!! | ダイキン工業株式会社

http://www.comtec.daikin.co.jp/DC/UsersNotes/Ritaro/tutorial/maya_07/

★ 面白い点; カーブのShapeデータを別のノードの子供にして、

例えば、

cmds.parent(relative=True, shape=True)

ICON表示と同じく、回転軸に制限を設け ⇔の方向だけに回転するようにすれば 解りやすり Rig が作成が可能

■ Pythonで実現した便利ツールの紹介 Rig用ICONツール 2

選択用の表示物として移せる。

選択も出来る Joint などが作成出来る カーブ表示物が付いた

Page 17: GTMF 2015: Autodesk Maya;大人気!カスタム・グラフエディタと便利ツールをPythonで!! | ダイキン工業株式会社

● Pythonで実現した便利ツールの紹介

● SynopticView(Softimage名);選択用GUI

Page 18: GTMF 2015: Autodesk Maya;大人気!カスタム・グラフエディタと便利ツールをPythonで!! | ダイキン工業株式会社

■ Pythonで実現した便利ツールの紹介 SynopticView 1 (未公開)

・キャラクター制御Rig用の選択GUI + 選択性(Selectability) Softimageのコントロールリグ選択画面 (html+Script)

>> なんとか、自由に表示を変えられ、認識しやすく、 Rig選択が楽になるような GUIが作れないか

1) 表示ウィンドウ内にボタンを自由に配置する 2) クリックした時、そのノードに予定しているアニメーションの種類

(移動/回転/スケール) に変化する (選択性 = Selectability)

・既定表示マニュピレータ; 「マニュピレータの表示ツール」 にして選択する必要がある。

・キー>キーの設定; ◎現在のマニュピレータハンドル

Page 19: GTMF 2015: Autodesk Maya;大人気!カスタム・グラフエディタと便利ツールをPythonで!! | ダイキン工業株式会社

■ Pythonで実現した便利ツールの紹介 SynopticView 2 (未公開)

★ 1) 背景用の画像を表示する formLayout コマンド なら 選択ボタンを自由に配置出来る

cmds.window() window = cmds.window('synoptic_body', title=Synoptic Body HIK',sizeable=False, topLeftCorner=[200, 200], widthHeight=(356,443)) form = cmds.formLayout() bg1 = cmds.image( image= ’W:/Maya/Maya_GTMF2015/icons/sy_main00.png’ ) bot1 = cmds.button('b_body',label='Body HIK',bgc=[0.25,0.25,0.25], enable=False) cmds.formLayout( form, edit=True, attachForm=[ (bg1, 'left', 0), (bg1, 'top', 40),(bg1, 'right', 0),(bg1, 'bottom', 0), (bot1 'left', 10),(bot1, 'top', 60), ・・・・・・・ ]) cmds.showWindow(window)

Page 20: GTMF 2015: Autodesk Maya;大人気!カスタム・グラフエディタと便利ツールをPythonで!! | ダイキン工業株式会社

■ Pythonで実現した便利ツールの紹介 SynopticView 3 (未公開)

cmds.setToolTo( 'moveSuperContext' )

★ 2) 選択性(Selectability)は setToolTo コマンドを使って マニュピレーター自身を変化させる

cmds.setToolTo( 'Rotate' )

今選択しているツール・コンテキストの名前(マニュピレータ)を知るには cmds.currentCtx() を使う。

移動ツールは 'moveSuperContext'

if cmds.currentCtx() != 'moveSuperContext':cmds.setToolTo( 'moveSuperContext' )

回転ツールは 'RotateSuperContext'、 'Rotate' スケールツールは 'scaleSuperContext' 移動/回転/スケールツールは 'Transform' 既定のオブジェクト マニュピレータは 'ShowManips'

Page 21: GTMF 2015: Autodesk Maya;大人気!カスタム・グラフエディタと便利ツールをPythonで!! | ダイキン工業株式会社

■ Pythonで実現した便利ツールの紹介 SynopticView 4 (未公開)

★ 2.5) 選択性(Selectability)を マウスの中ボタン に持たせたい

head_eff = cmds.iconTextButton('b_head_eff',image1= 'mbutton15r.png',style='iconOnly', annotation='S_Ctrl_HeadEffector', command=lambda *args: select_lists('head_eff',sy_names_b), dragCallback=lambda *args: select_lists('r_head_eff',sy_names_b), dropCallback=select_lists_dropcallback)

ここでは単純に 回転ツールにしているだけ

dropCallback もダミー処理を用意して、キー受付処理を終わらせる

elif o_select == 'r_head_eff': if cmds.currentCtx() != 'Rotate':cmds.setToolTo( 'Rotate' )

実は buttonコマンドには 中ボタン用に dragCallback というフラグがある 本来の目的は dropCallback と対で使用して Drag&Drop機能 を実現させる

def select_lists_dropcallback(*args): pass

Page 22: GTMF 2015: Autodesk Maya;大人気!カスタム・グラフエディタと便利ツールをPythonで!! | ダイキン工業株式会社

■ Pythonで実現した便利ツールの紹介 SynopticView 5 (未公開)

★ 2.5) 選択性(Selectability)を マウスの中ボタン に持たせたい

def callbackName( dragControl, x, y, modifiers ):

実は dragCallback で中ボタンを押した時のキーの組み合わせまで取得出来る

def filter_rz( dragControl, x, y, modifiers ): # in CustomGraphEditor if modifiers == 0: # MMB コマンド1 elif modifiers == 1:# MMB + SHIFT コマンド2 elif modifiers == 2:# MMB + CTRL コマンド3

modifiers が 0 == 中ボタン + モディファイアなし、

3 == 中ボタン + CTRL + SHIFT、

1 == 中ボタン + SHIFT、 2 == 中ボタン + CTRL、

Page 23: GTMF 2015: Autodesk Maya;大人気!カスタム・グラフエディタと便利ツールをPythonで!! | ダイキン工業株式会社

■ Pythonで実現した便利ツールの紹介 SynopticView 6 (未公開)

実例 ; HIK コントロールリグ 選択GUIを作成

選択内容はコントロールリグと同等 だが、もっと解りやすく細かい。

ri_synoptic_body.py ri_synoptic_hand.py

Page 24: GTMF 2015: Autodesk Maya;大人気!カスタム・グラフエディタと便利ツールをPythonで!! | ダイキン工業株式会社

● Pythonで実現した便利ツールの紹介

● 表の作成と書き込み/読み込み scriptTableコマンドとCSVファイル

Page 25: GTMF 2015: Autodesk Maya;大人気!カスタム・グラフエディタと便利ツールをPythonで!! | ダイキン工業株式会社

■ Pythonで実現した便利ツールの紹介 表の作成と書き込み/読み込み1 (未公開)

・表のGUI作成は scriptTableコマンド で行う。 table1 = cmds.scriptTable('table',rows=3, columns=7,columnWidth=([1,135],[2,145],[3,70],[4,45],[5,40],[6,40],[7,40]), label=[(1,"SourceNodeName"), (2,"DestinationNodeName"), (3,"Constrain"), (4,"Offset"), (5,"X"), (6,"Y"), (7,"Z")], cellChangedCmd=edit_cell)

行末に行を追加したり、削除したり、選択行を削除したり、 選択行に値を入れたり出来る。

addButton = cmds.button(label="Add Row",command=add_row) deleteButton = cmds.button(label="Delete Row",command=delete_row) deleteSelRowButton = cmds.button(label="Delete Selected Row",command=delete_sel_row) def edit_cell(row, column, value): return 1 def add_row(*args): last_row_num = cmds.scriptTable('table', query=True, rows=True) cmds.scriptTable('table', edit=True,insertRow=last_row_num)

Page 26: GTMF 2015: Autodesk Maya;大人気!カスタム・グラフエディタと便利ツールをPythonで!! | ダイキン工業株式会社

■ Pythonで実現した便利ツールの紹介 表の作成と書き込み/読み込み2 (未公開)

・import csv で excel でも扱える ,(カンマ)で区切ったテキストファイルを

import csv cmds.textFieldButtonGrp('load_csv', edit=True, text=import_filename[0]) o_file = open(import_filename[0], 'r') reader = csv.reader(o_file) header = next(reader) o_file.close()

Maya上のGUI表で記入した値を CSVファイルに書き込んだり、

Pythonで 読み込み/書き込み できる。

外部CSVファイルをMaya上の表に記入したり出来る。

if not (cmds.file(csv_file,query=True, exists=True)): tmp_csv_file = open(csv_file, 'w' ,os.O_CREAT) else: tmp_csv_file = open(csv_file, 'w') writer = csv.writer(tmp_csv_file, lineterminator='¥n') writer.writerow(data_list) tmp_csv_file.close()

Page 27: GTMF 2015: Autodesk Maya;大人気!カスタム・グラフエディタと便利ツールをPythonで!! | ダイキン工業株式会社

■ Pythonで実現した便利ツールの紹介 表の作成と書き込み/読み込み3 (未公開)

実例;Rig作成に良く使用する コンストレイント表 を作成

ソースのノード,影響を受けるノード,コンストレイントの種類,オフセット設定の有無,独自設定値

表に基づき 複数種類のコンストレイント を一気に付ける。

table1 = cmds.scriptTable('table',rows=3, columns=7,columnWidth=([1,135],[2,145],[3,70],[4,45],[5,40],[6,40],[7,40]), label=[(1,"SourceNodeName"), (2,"DestinationNodeName"), (3,"Constrain"), (4,"Offset"), (5,"X"), (6,"Y"), (7,"Z")], cellChangedCmd=edit_cell)

ri_constraint_table.py

Page 28: GTMF 2015: Autodesk Maya;大人気!カスタム・グラフエディタと便利ツールをPythonで!! | ダイキン工業株式会社

● Pythonで実現した便利ツールの紹介

● 表の作成と書き込み/読み込み

SynopticView機能と組み合わせて出来たものとは。。。

Page 29: GTMF 2015: Autodesk Maya;大人気!カスタム・グラフエディタと便利ツールをPythonで!! | ダイキン工業株式会社

■ Pythonで実現した便利ツールの紹介 SynopticView機能考察1 (未公開)

1)背景絵を選択させて、大きさも目標物も自由なシノプティックを作成出来る

import maya.OpenMaya as OpenMaya w = OpenMaya.uIntPtr() h = OpenMaya.uIntPtr() img = OpenMaya.MImage() img.readFromFile(tmp_bg_file) img.getSize(w, h) window_w = w.value() window_h = h.value()

★ ActiveSynopticツール > シノプティックGUIを作成ツール

選択した画像からwindowの大きさを設定するには、 Mayaに読み込む時に画像の縦横値を取得する必要があるが、 それはOpenMayaを使う。

● やれる事

Page 30: GTMF 2015: Autodesk Maya;大人気!カスタム・グラフエディタと便利ツールをPythonで!! | ダイキン工業株式会社

■ Pythonで実現した便利ツールの紹介 SynopticView機能考察2 (未公開)

● やれる事 2)ボタンの配置する位置は 中マウスボタンクリック地点 を応用する

bg1 = cmds.image(image=tmp_bg_file,dragCallback=bg_pos ) def bg_pos( dragControl, x, y, modifiers ): sel_cell_list = cmds.scriptTable('table', query=True, selectedCells=True) selected_row = cmds.scriptTable('table', query=True, selectedRows=True)[0] cmds.scriptTable('table', edit=True, selectedCells=[selected_row,2]) cmds.scriptTable('table', cellIndex=(selected_row,2), edit=True, cellValue=str(x)) cmds.scriptTable('table', edit=True, selectedCells=[selected_row,3]) cmds.scriptTable('table', cellIndex=(selected_row,3), edit=True, cellValue=str(y)) cmds.scriptTable('table', edit=True, selectedRows=selected_row)

細かい値は後からでも表値で修正できる。

★ ActiveSynopticツール > シノプティックGUIを作成ツール

Page 31: GTMF 2015: Autodesk Maya;大人気!カスタム・グラフエディタと便利ツールをPythonで!! | ダイキン工業株式会社

■ Pythonで実現した便利ツールの紹介 SynopticView機能考察3 (未公開)

● やれる事 3)最終的にシノプティック用のPythonを書き出す時、

tmp_py_file = open(tmp_py_file, 'wb') writer = csv.writer(tmp_py_file, lineterminator='¥n') tmp_py_file.write( "# -*- coding: utf-8 -*-" + '¥n' "import maya.cmds as cmds" + '¥n' "import maya.mel as mel" + '¥n' "import maya.OpenMaya as OpenMaya" + '¥n' ・・・・・ if o_type == '' or o_type == "0": if o_sel == "0": tmp_py_file.write( " " + o_name + " = cmds.button('" + o_namespace + "_" + py_name + o_name +"',label=' '," + '¥n'

表の値に基づいて決まったパターンのPythonコマンド群を書き込んで行く。

★ ActiveSynopticツール > シノプティックGUIを作成ツール

Page 32: GTMF 2015: Autodesk Maya;大人気!カスタム・グラフエディタと便利ツールをPythonで!! | ダイキン工業株式会社

■ Pythonで実現した便利ツールの紹介 SynopticView機能考察4 (未公開)

最終出力された選択GUIは、通常のPython GUI なので 細かい設定がもっと必要なら追記が可能。

実例 ; ActiveSynopticツール ri_maya_active_synoptic.py

・ どんな形の Rig にも対応できる ・ 短時間で初期セットが完成する ・ csvファイルで再利用が可能 ・ ネームスペース名に対応できる

Page 33: GTMF 2015: Autodesk Maya;大人気!カスタム・グラフエディタと便利ツールをPythonで!! | ダイキン工業株式会社

● おまけ ● MotionBuilderのHIKとのリンク

時間があったら

簡単にモーションをMayaに持ってこれて、出力データに対応できる。

Page 34: GTMF 2015: Autodesk Maya;大人気!カスタム・グラフエディタと便利ツールをPythonで!! | ダイキン工業株式会社

35

番外編!

Presented By Ritaro HomePage http://www.comtec.daikin.co.jp/DC/UsersNotes/

@DaikinComtec_CG @SI_UsersNotes

ご静聴ありがとうございました。 おしまい!

Page 35: GTMF 2015: Autodesk Maya;大人気!カスタム・グラフエディタと便利ツールをPythonで!! | ダイキン工業株式会社

36

番外編!

Presented By Ritaro HomePage http://www.comtec.daikin.co.jp/DC/UsersNotes/

SUITE UsersNotes ページへの記事

★ アンケートの記入のおねがいです。

感想、リクエスト・・・、 なども ありましたら・・・・どうぞ!

Page 36: GTMF 2015: Autodesk Maya;大人気!カスタム・グラフエディタと便利ツールをPythonで!! | ダイキン工業株式会社