2016年12月29日木曜日

Python奉行

初めてPyCharmを使ってみました、PEP8でのコーディング規約チェックが有効になってますが、すごいおせっかいなんですね。メンバ名は全て小文字だとか、コンマのあとは空白を入れろとか、インスタンス変数は__init__内で初期化しろとか、、、


メンバの命名がだいたいアウト
従いながら書いてたら全然はかどらない。かといってこの機能を全部オフってしまうとなんか他人にコードを見られた時ちょい恥ずかしい。

PEP8が他の言語にも共通した規約なら従いますけどね。

にしてもPyCharmは優秀!

2016年12月21日水曜日

Maya Asciiファイルをパースしてみた

そして一覧できるようにして見た。


Maxのシーンファイルの中からオブジェクト選択して読み込みと同じく、maファイルから欲しいものだけ選択して読み込み&上書きみたいな事ができれば良いなと考えています。

DAG階層をたどるのは難しい事では無いですが、DGをトラバースするのは厄介ですね。またアトリビュートが規定値の場合、maファイルにはそのアトリビュートは記述されないので、ちょっと一手間必要になりそうです。

2016年12月14日水曜日

Mac版Maya:Pysideで作成したウィンドウがメインウィンドウの後ろに隠れてしまう

Mac版のMayaではPySideで作成したウィンドウは「MayaQWidgetBaseMixin」をミックスインしていても、フォーカスが外れるとメインウィンドウの後ろに送られてしまいます。

隠れる!

self.setWindowFlags(Qt.Window | Qt. WindowStaysOnTopHint)
self.setWindowFlags(Qt.Tool)
などで、常に前面にすることも可能ですが、Melで作成されたウィンドウとのフォーカス処理がうまく機能しません。

さんざん探し回った結果ですが、ウィンドウへobjectNameを設定し、ウィンドウ設定の保存を許可するだけで良いみたいです。先日の例でいうと、以下の様に2行追記です。
class HtSetOutlinerColorDialog(MayaQWidgetBaseMixin,QWidget):
 def __init__(self, *args, **kwargs):
  super(HtSetOutlinerColorDialog, self).__init__(*args, **kwargs)
  self.closeOtherInstance()
  self.setAttribute(Qt.WA_DeleteOnClose, True)
  self.setObjectName("HtSetOutlinerColorDialog") #<- objectNameを設定
  self.setProperty("saveWindowPref", True) #<- ウィンドウ設定の保存を許可
  self.initUI()
objectNameを設定しないと「MayaQWidgetBaseMixin」によって「クラス名_UUID」というobjectNameが自動的に設定され、その名前が「windowPrefs.mel」へ保存されてしまいます。モジュールをインポートするたびにUUIDは変化するため、ゴミデータが「windowPrefs.mel」へ溜まることになりますので必ず設定します。

Windows版で開発していてると気づきませんが一般に配布するには気をつける必要ありですね。

問題の解決には「http://python_inside_maya.narkive.com/LwPxvddq/maya-python-qt-tool」を参考にしました。ちなみに行き着く為の検索ワードは「mac maya pyside window behind maya main window」です。

2016年12月13日火曜日

Mac OS SierraでMayaを英語で起動する

Macはバージョンが上がるたびに環境変数の設定方法が変更されますね、以前はlaunchd.confあたりで設定したような気がしますが、Mac OS Sierraではlaunchctlを使用して環境変数を読み込むようです。

で本題、Mayaを英語起動するための設定です。
「~/Library/LaunchAgents/」の中にテキストファイル「setenv.MAYA_UI_LANGUAGE.plist」を作成します。内容は以下になります。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
  <plist version="1.0">
  <dict>
  <key>Label</key>
  <string>setenv.MAYA_UI_LANGUAGE</string>
  <key>ProgramArguments</key>
  <array>
    <string>/bin/launchctl</string>
    <string>setenv</string>
    <string>MAYA_UI_LANGUAGE</string>
    <string>en_US</string>
  </array>
  <key>RunAtLoad</key>
  <true/>
  <key>ServiceIPC</key>
  <false/>
</dict>
</plist>;
読み込みは、
launchctl load ~/Library/LaunchAgents/setenv.MAYA_UI_LANGUAGE.plist
変更があった場合は一度アンロードしてから再度ロードします。
launchctl unload ~/Library/LaunchAgents/setenv.MAYA_UI_LANGUAGE.plist
launchctl load ~/Library/LaunchAgents/setenv.MAYA_UI_LANGUAGE.plist
ひとまずこれでMayaは英語で起動するはずです。

他にも英語で起動する方法として
#!/bin/bash -f
export MAYA_UI_LANGUAGE="en_US"
/Applications/Autodesk/maya2017/Maya.app/Contents/bin/maya
を実行することでも可能です。

2016年12月12日月曜日

Maya PySide.QWidgetへ標準UIを追加する

PySideでのUI作成はわかりやすくていいんですが、スライダと一体になったMayaのUIなども捨てがたく両方とも使いたい場合。


例としてアウトライナでの表示色を設定するダイアログです。下段のボタン3つはQPushButtonです。上段はColorSliderGrpでMayaの標準のUIです。PySideとMaya標準UIが混在しています。ベースはQWidgetを使って作成&レイアウトされたウィンドウになります。

厳密には両方同じQtなので「混在」ではありませんが、それはさておき、、、

2016年9月27日火曜日

macOS Sierra

「Javaがサポートされなくなる云々~」のあいまいな前情報は知っていて、Sierraへのアップグレードは躊躇していましたが、詳しくは「Java6」のサポートがEl Capitanを以って打ち切られるだけのようです。

現在の環境でその影響を受けるのは「Abobe Flash Builder 4.7」のみで、Macではテスト用にインストールしていただけなのでSierraへのアップグレードをしてみました。MacBook Pro (Retina, 15-inch, Late 2013)です。

Sierraへアップグレード後、動かなくなりました

アップグレード完了後は恒例のSpotlightのインデックス作成(mdworkerプロセス)が始まります。あいかわらず待たされます。

で、アップグレードした感想ですが見た目はDockにSiriが追加されただけで、それ以外なーんにも変わらず。FlashBuilderを除いて起動しなくなるようなアプリケーションはなし。Office2016、Adobe CC、Modo902SP3、AbletonLive9、etc...。Processing3はJava8を使用しているのでこれも問題なしでした。FlashBuilderも再度Java6をインストールすることにより起動もすることができるようです、サポートはされませんが。

今回のアップグレードの目玉だと思っていた「ユニバーサルクリップボード」はMacからiOSへはペースト出来るものの、iOSからMacへは出来ず。謎です。

あと「Macのストレージを最適化」する機能はオフ!。MacbookのSSDの空きが心もとないのは確かですが、iCloud Driveは無料の5GBで同じアカウントで使用しているiPhone、Mac miniもこれを使うとなるとクラウドのストレージの空きの方が気になりますからね。
空き領域がもっと欲しい。そんな時は最適化されたストレージが、それほど頻繁に使わない書類、メールの添付ファイル、写真、観終わったiTunesの映画をクラウド上に保存して必要な容量を確保します。最近使ったファイルは最適なバージョンの写真と一緒に、あなたのMac上にあります。すべてのファイルはあなたが保存した場所で簡単に見つかり、開くだけでオリジナルのバージョンをダウンロードできます。まるで、ずっとその場所にあったような感覚です。
http://www.apple.com/jp/macos/sierra/からの引用です。シンボリックリンクのようなファイルがローカル上に残るんでしょうか?そもそもクラウド上にしかないデータとどちらにもあるデータの区別がつくのかな?TimeMachineへのバックアップは?とか、疑問だらけです。

何が起こるやら、、、


ピクチャインピクチャはSafariで再生されているHTML5の動画のみでChromeで再生しているYouTubeは不可。単純に任意のウィンドウを前面にピン留めするだけの機能でいいのに。

FlashBuilderを犠牲にした割に、アップグレードした恩恵が少ないな。今回は10GB程度ローカルストレージの空きが増えただけで良しとしますか。

2016年9月8日木曜日

AfterEffects - レイヤーのPropertyObjectのリスト

ずっーと以前に中途半端に書いた記事の続き(7年越し!!)です。

作った経緯を忘れましたが、とあるプロパティのMatchNameが知りたかっただけで再帰処理の無いスクリプトでした。以下がレイヤーに適用したエフェクトのプロパティも含め全てリストするスクリプトです。ESTKへコピーしAfterEffects側でレイヤーを一つ選択してから実行します。

(function(){
    var activeComp = app.project.activeItem;
    var selected = activeComp.selectedLayers[0];
    $.writeln("Layer Name:" + selected.name);

    function listProperties(obj,depth){
        for(var i=1; i<=obj.numProperties; i++){
            var indent = ""
            for(var j = 1; j <= depth;j++) indent += "\t";
            $.write(indent + i +":"+obj.property(i).name+":"+obj.property(i).matchName+"\n") ;
            listProperties (obj.property(i),depth+1);
        }
    }    

    listProperties (selected,0);
}());

結果は、ESTKのコンソールへ出力されます。


昨日投稿したスクリプトの改良をしていて気付きましたが、レイヤーの親子関係で親を知る事はレイヤーオブジェクトのparentアトリビュートから出来ますが、子のレイヤーへの参照は無いんです。

もしかしてプロパティオブジェクトに入ってるかなと思って上のスクリプトを書きましたが見つからず、、、

いやビックリ。全てのレイヤーのparentアトリビュートを調査して逆からたどるとかするの?
シーングラフ的なもの無いのか、、、

2016年9月7日水曜日

AfterEffects - グリッド状にレイヤーを複製

スクリプトを作成中。

オフセットの数値を入力するのではなく、矩形の始点(左上)と終点(右下)を選択して実行すると、始点として選択したレイヤーが複製される感じ。

ひとまず動くのは出来ましたが、位置アニメーションしているレイヤーへの対応が出来ていない。あと子をもつレイヤーの扱いとか。アニメーション対応は結構大変そう。仕事に必要な部分だけ実装してひとまず満足状態なので、機能を追加しておいおい公開する事にします。探せば似たような機能を持つものはどこかにあるでしょうけどね。


久しぶりにAEのスクリプトを書きましたが、数年前からまったく新しい機能が追加されていない?アイテムの選択変化でコールバックとかいまだに実装されないのは何で?

にしてもJavascriptはなんかとっつきにくい。動的型付けだったり、プロトタイプベースとか、thisのスコープが、とか。TypeScriptのAfterEffects用型定義ファイルが存在するようなので、TypeScriptで開発する方がいいかな。

2016年9月6日火曜日

PICO-8

PICO-8、レトロゲーム機のバーチャルマシンとでも言いましょうか。3DSのプチコンと同じですがこちらのほうがもっとオープンです。


公開されているカートリッジをダウンロードすれば遊ぶことはもちろん、コードを開いてお勉強、改良することもできます。


ダウンロード出来る中にはゲームでは無くデモシーンや作りかけのものも含まれますが。よく練られたゲームもあります。

このドット絵をプレイヤーの想像力でお迎えにいって得られる臨場感や、雑なメッセージ、ルールを読み解いてクリアした時の達成感は今時のゲームには無いものがありますね。

と、書いてみたところでやっぱり、回顧か懐古か、、、まぁそんなところかも。

2016年7月25日月曜日

Animation Nodes - FlipFace

ポリゴンをパタパタするやつ。

変形後のデータを同じトポロジーを持つオブジェクトデータにコピーするってところ、ちょっとメンドい。モディファイア感覚では使えないようです。

filpFace.blend(Blender2.77a+AnimationNodes1.6.0)

ところで組んだノードグラフを使いまわすにはいったいどうすれば、、、そもそも標準のMaterialやCompositeのノードグラフも書き出す方法が無いよーな。

Appendで他のblendファイルから持ってくるにしても「Interpolation from Curve Mapping」ノードが再現されません。同じファイル内であればグラフ全体をコピペ可能です。

あと仕様なのかCyclesのリアルタイムプレビューを使用すると、AnimationNodesの変更がリアルタイムでアップデートされなくなりますね。

2016年7月22日金曜日

Animation Nodes - Loops

先のAnimation nodesアドオン使ってみました。MaxのMCGもそうですが、やっぱり繰り返しのロジックをヴィジュアルプログラミングで表すのは難しいし把握し辛い。

Animation nodesはリストを作成しイテレータとして使用する事が明確に分かるので、MCGより把握しやすい。

ringCopy.blend

うっかりLoop InputとInvoke Subprogramの間で値を使いまわしたいがためにノードを共有すると評価できなくなるので注意。Loop InputでParameterを追加(New Parameter)して共有する必要があります。

copyOnMeshVertices.blend


普通、「プログラム言語の知識なしでも」ってのがヴィジュアルプログラミングの売りの一つだと思うんですが、イテレータとか言われてもねぇ。

(.blendファイルはBlender Ver.2.77a と AnimationNodes1.6.0で作成)

2016年7月17日日曜日

Animation Nodes

Blenderの調べもんをしてたらこんなのを発見!!もう1年近く前のものですが、MaxのMCG、MayaのMASHにも劣らない感じ。


業務に使うかはともかく、ちょっと真剣にBlenderの勉強しよっかな。

2016年7月16日土曜日

Blender Smoke Simulation

BlenderがOpenVDBのキャッシュを書き出せるようになったと言うことでちょっとテスト。

Mayaのショートカットやマウス操作を似せることが出来るようになってるんですね。でも切り替えてしまうと、チュートリアル動画等とまったくかみ合わなくなってしまうのは困ったもんです。


流体の扱いは3年ほど前から出来ていたらしいのですが、フリーのソフトがここまでできるようになったかと改めて感心。

残念ながらキャッシュしたOpenVDBファイルがModoで読み込めず。シミュレーションフィールド名がBlenderとModoで違ったりするのかな。

煙のレンダリング結果に多少満足して、追試験はまた後日〜。

Modoが手っ取り早い

ちょっとしたものを作りたい時、MayaよりMaxよりもまずModoを開いてサクッと作る習慣が染み付きつつあります。


上は随分前にMaxで制作したものですが続きをMaxで作業する気になれず。ついついModoへインポートして作業中です。何故だかよく手になじむ。Modoではレイアウトを切り替えながらの作業になりますし、売りであるほどUIやワークフローが考えられているようにも思えないし、Maya/Maxよりも機能面でも劣るし、、、それでも作業しやすい。何故だ!


まだ902を使っており、v10.1のプロシージャルモデリングが魅力的ですが、個人で支払っている毎年のアップデート費用がねぇ。

2016年7月14日木曜日

MCG積み上げグラフ

Max Creation Graphで積み上げグラフ(Stacked Bar Chart)の作成。


入力できるデータは5つまでのなんとも融通の利かないものになってしまっています。「Parameter: IArray<Single>」を用いて可変長の配列を入力出来ますがそれだとアニメーションができなくなってしまうので不採用。


半年ほど前に作成したので中身を今見返すとなんのこっちゃな状態。

あらかじめ用意されているオペレータノードが豊富でどれを使用するか、または希望の機能を持つノードがあるのかを把握するだけでも結構大変ですね。

パッケージしていない状態ですので改変はご自由に。Max2016 Extention2 SP3 v2 で動作確認済み。htS5BChart.zip

2016年7月5日火曜日

Random space filling

空間を充填するつーのはすごく難しい問題らしい。

球体で埋める場合は「アポロニウスのギャスケット」というものを使えば出来そうですけど、それ以外はランダムに位置を決めてみて、重なってれば「偽」、はまれば「真」と、繰り返していくしかなさそうです。

で、これが、

2016年6月29日水曜日

Max jitterを少々

お勉強を始めました。


ランダムにポイントを打つだけ。
Processingなら何行でしょう?ここまでして覚えるに足るかは、さて、、、

以下コード

2016年6月25日土曜日

Stella in a box

Blogger投稿試験を兼ねて、AEのPlexusのよーなやーつ。



Processingソースコード StellaInABox-150828a.zip

動かすには他に「Toxiclibs」とProcesing IDEからインストールできるライブラリ「Peasycam」が必要です。

WordpressからBloggerへお引越し

旧ブログ(http://private.canplaize.com/~htaka/wordpress)から引越してきました。

Wordpressでの記事は復元できましたが、非公開状態になっています。ファイルや画像のリンクが旧ドメインのままなので、、、

折りを見て復活させていきます。