2015年11月30日月曜日

uiConfigurationScriptNodeを作らせない

ぐぐたすから探し出すのが大変なのでブログへ再投稿。

global int $gUseSaveScenePanelConfig;
global int $gUseScenePanelConfig;
if( $gUseSaveScenePanelConfig ) $gUseSaveScenePanelConfig=0;
if( $gUseScenePanelConfig ) $gUseScenePanelConfig=0;


起動時に実行するようなスクリプトへ記入しておく。


uiConfigurationScriptNodeは読んで字の如く、mayaのUIを復元する為のスクリプトノード。
昔はそうでもなかったが、バージョン番号が年号になってからシーンファイル内における割合が極端に多くなったような気がする。
メインウィンドウだけの状態でも100KBくらいは行くんじゃないだろうか・・・。
しかもmayaBinaryで保存してもASCIIのままなので圧縮が掛からないという。

カスタムレイアウトなんか作ったりした日にゃ目も当てられない。

なぜシーンファイルに入れるのか謎なノード。


ちなみにドキュメントにも
ヒント:
リファレンス ファイルとして使用するオブジェクト/サブシーンを作成する場合は、このオプションを無効にしてください。既定では、Maya は開かれたすべてのエディタについてのあらゆる情報、すべてのシーン ファイル(.ma/.mb)の場所、サイズ、ウィンドウ固有のオプションなどを記憶しています。これは、uiConfigurationScriptNode という名前のスクリプト ノードにアトリビュートとして保存され、ノードの文字列型アトリビュートに追加された MEL コードとして表されます。
とあるし、作成仕様に作らないよう注意書きしても無視するしな。

素人さんはもとより職種によっては中級者くらいな人でも、平気でuiConfigurationScriptNodeの入ったsceneファイルを納品してくるのは、なんだかなぁ~。


---------------------
このノードを無効化するには、こちらを参考にしてみてください。

2015年11月17日火曜日

2つの画像を比較してみる【改】

前回、imconvert.exeを使って画像の差を数値化してみましたが、どうも、mayaのバージョンによってimconvert.exeの方にも差があるらしく希望の値を取得できないことが発覚。

しかもTruecolorだと、meanの値が使っている色によって偏ってしまうことも判明。

という事で、-compose differenceした画像をグレースケールに変換してから-identify -verboseを取得するようにしたらどうかと思い修正。

@echo off
title %~n0

set WORK_AREA=%~dp0
set MAYA_BIN=C:\Program Files\Autodesk\MayaLT2016\bin\


:: 比較する画像
set IMG_A=%1
set IMG_B=%2
:: 存在確認
if ""=="%IMG_A%" echo IMG_A is blank. & pause & exit /b
if ""=="%IMG_B%" echo IMG_B is blank. & pause & exit /b
if not exist "%IMG_A%" echo %IMG_A% not found. & pause & exit /b
if not exist "%IMG_B%" echo %IMG_B% not found. & pause & exit /b


:: imconvertの作業エリア作成
set IMCNV_TMP=%WORK_AREA%_tmp
if not exist "%IMCNV_TMP%" md "%IMCNV_TMP%"

:: 差分画像のファイル名
set OUT_IMG=%IMCNV_TMP%\out.png
:: ログファイル名
set VRBS_FILE=%IMCNV_TMP%\verbose
set MEAN_FILE=%IMCNV_TMP%\mean


:: imconvert実行
"%MAYA_BIN%imconvert.exe" -composite -compose difference "%IMG_A%" "%IMG_B%" "%OUT_IMG%"
"%MAYA_BIN%imconvert.exe" -depth 8 -type Grayscale "%OUT_IMG%" "%OUT_IMG%"
"%MAYA_BIN%imconvert.exe" -identify -verbose "%OUT_IMG%" "%OUT_IMG%">%VRBS_FILE%


:: 結果解析
find "mean:" %VRBS_FILE% | find "mean:">%MEAN_FILE%
set RESULT_MEAN=
for /F "tokens=1-3" %%A in (%MEAN_FILE%) do set RESULT_MEAN=%%B


:: 結果表示
echo %RESULT_MEAN%
pause



前のよりもソレっぽい値が出てきた!

2015年11月15日日曜日

2つの画像を比較してみる※mayaをインストールした人用

とある目的で、2つの画像を比較し、違いがどれくらいなのかを数値で表せられないかとネットで調べていたところ、ImageMagickで数値化できそうなことを発見。

しかしツールを新規にインストールするのは美学に反するので、今ある環境でどうにかします。


mayaをインストールするとmayaのbinフォルダ内に幾つかの.exeファイルを見つけることができます。
その中でimconvert.exeというのが、実はImageMagickであるというのは数年前から知っていたので、これを使います。

ただ、本家よりもかなり機能や使い方が変更されているのでなかなか難航。
imconvert.exe -hと本家のリファレンスを見比べつつ、必要なオプションを割り出していきます。


本家のほうには、
compare -metric PSNR

とすることで数値化できるっぽいのですがimconvertの方には見つからず・・・。
似たことができないかとimconvertのヘルプを読んでいると、-identify -verboseを使えば出来そうな予感。

実際、ログを見てみると欲しい情報のmean: ~を発見。
ただ、これだと2つの画像の比較が出来ず、ファイル情報を垂れ流すだけ。
もうひと手間必要。

ファイルの情報が取れるということは、差分の画像ファイルを作ることができれば、そのファイルの-identify -verbosを取ればよいということなので、今度は差分ファイルの作成方法を調べることに。


もともと、ImageMagickはファイル形式の変換や編集、合成をコマンドラインで行うツールのようなので、差分ファイルの作成方法は割と簡単に判明。
-composite -compose difference で作れるらしい。

@echo off

set WORK_AREA=%~dp0
set MAYA_BIN=C:\Program Files\Autodesk\MayaLT2016\bin\

:: 比較する画像
set IMG_A=%WORK_AREA%A.bmp
set IMG_B=%WORK_AREA%B.bmp

:: 結果画像
set OUT_IMG=%WORK_AREA%C.bmp


:: imconvert実行
"%MAYA_BIN%imconvert.exe" -composite -compose difference "%IMG_A%" "%IMG_B%" "%OUT_IMG%"

pause



 
A.bmp      B.bmp    C.bmp

この差分ファイルのC.bmpに対して-identify -verbose を使用する。
なんとなく欲しいデータが取れそう。

これを元にバッチファイルを作成。

@echo off
title %~n0

set WORK_AREA=%~dp0
set MAYA_BIN=C:\Program Files\Autodesk\MayaLT2016\bin\


:: 比較する画像
set IMG_A=%1
set IMG_B=%2
:: 存在確認
if ""=="%IMG_A%" echo IMG_A is blank. & pause & exit /b
if ""=="%IMG_B%" echo IMG_B is blank. & pause & exit /b
if not exist "%IMG_A%" echo %IMG_A% not found. & pause & exit /b
if not exist "%IMG_B%" echo %IMG_B% not found. & pause & exit /b


:: imconvertの作業エリア作成
set IMCNV_TMP=%WORK_AREA%_tmp
if not exist "%IMCNV_TMP%" md "%IMCNV_TMP%"

:: 差分画像のファイル名
set OUT_IMG=%IMCNV_TMP%\out.png
:: ログファイル名
set VRBS_FILE=%IMCNV_TMP%\verbose
set MEAN_FILE=%IMCNV_TMP%\mean


:: imconvert実行
"%MAYA_BIN%imconvert.exe" -composite -compose difference "%IMG_A%" "%IMG_B%" "%OUT_IMG%"
"%MAYA_BIN%imconvert.exe" -identify -verbose "%OUT_IMG%" "%OUT_IMG%">%VRBS_FILE%


:: 結果解析
find "mean:" %VRBS_FILE% | find "mean:">%MEAN_FILE%
set RESULT_MEAN=
for /F "tokens=1-3" %%A in (%MEAN_FILE%) do set RESULT_MEAN=%%B


:: 結果表示
echo %RESULT_MEAN%
pause


画像ファイルを2つ、このバッチファイルへドラッグ&ドロップすると違いの数値が出てくる。