DAZ スクリプトの導入・自作方法 【DAZ SCRIPT】

DAZスクリプトを使って、省力化したいなーと思ったので、ざっくり情報を集めてみた。

開発環境 IDEやVisual StudioでDAZ スクリプトの導入

IDE 統合開発環境

IDE(Integrated Development Environment)=統合開発環境。

スクリプトを打ち込んで、その場で実行できるものと考えておけばいいだろう。

DAZスクリプトは、QtScriptの拡張でDAZ StudioのAPIにアクセスすることで自動操作などをおこなえるそうだ。なんのこっちゃ。フィーリングはJavascriptに似ているっぽい。

DAZ StudioのWindow→Pane(tabs)→Script IDEから呼び出し可能。

デバッガがついていて、ソースコードをステップ・バイ・ステップで実行できる。(Debug→Debuggerまたは、Shift+F5でデバッガ起動)

サンプルスクリプトを1行づつ動かして、実際の画面の変化を確認して「このコードはこういう動きになるか…」って確認するのに役立ちそう。

Visual StudioでDAZスクリプトを開発

DAZ Script開発環境の構築方法[DAZ Studio] – Qiita

本気で長めのスクリプトを作りこむ場合は、こういう環境の方がいいのかも。

TypeScriptというJavascriptの親戚みたいなコードで記述してから変換、という形を取るのだそう。

TypeScript慣れしている人用なのかな。

DAZ スクリプトの自作方法

DAZスクリプトの自作方法

とりあえず、こんな感じで、 (function(){})(); でコードを囲っておけば動くっぽい。

この書き方をなんと呼ぶのかとか、そういうことは知らない。

(function(){
//ここにコードを書くと動く
})();

たとえば、選択状態のパーツから先端までを全て非表示にするスクリプトを当てはめてみる。

選択したパーツの子をすべて非表示にするサンプルスクリプト

参考)[DAZ] Script to hide all children nodes | F95zone ←メッチャエロ広告でるので注意

(function(){
  var startNode = Scene.getPrimarySelection();
  
  if ( startNode ) {
    var nodes = [ startNode ];
    nodes = nodes.concat( startNode.getNodeChildren( true ) );
    for ( var n = 0 ; n < nodes.length ; n++ ) {
      nodes[ n ].setVisible( false );
    }
  }
})();

 

これを、Script IDEにコピペして、Executeボタンをクリックすると動く。ファイル名.dsaでファイルに保存して、Content LibraryからダブルクリックしてもOK。

なお、setVisible( false )を、setVisible( true )に変更すると、指定パーツから先端までが表示状態に変更される。

設定したパーツのXRotateの最小値、最大値を設定するスクリプト

(function(){
  var Node = Scene.getPrimarySelection();
  control = Node.getXRotControl();
  control.setMin(-50.0);
  control.setMax(50.0);
})();

選択したパーツの、Xrotate(例えば手の場合はTwist)の最小値をー50、最大値を50に設定する。

値を表示するスクリプト

(function(){
  var val = 10;
  print( "val=", val );
})();

スクリプト、というのもおこがましいが値を表示するには、print()を使う。カンマで区切ると、文字列と値を連結して表示できる。(ただし、何故か間に半角空白が入る)

メニューやライブラリからDAZ スクリプトを実行

メニューやライブラリからDAZ スクリプトを実行

Content Libraryに登録してダブルクリック

スクリプトファイルを用意する。
Content Libraryの適当なフォルダにスクリプトをコピー。

※Content Libraryの指す実際のフォルダは、右クリックして「Browse to Folder Location」を選ぶとエクスプローラーが開く。

開いたフォルダにスクリプトをコピーして、Refresh(再描画)を選ぶと、スクリプトが表示される。

アイコンは「アイコン画像がないよ」みたいなのが割り当てられてカッコ悪いけど、コレを解消するのは超面倒くさいので、気にせず使おう。

画面上部メニューからスクリプトを呼び出せるようにする

毎回Content Libraryなんて、使ってらんねー!

フォルダの迷宮で迷子になるわ!

というあなたは、メニューにスクリプトを登録することも可能だ。

Content Libraryのアイコン上で右クリック→Create Custom Actionを選択

Create Custom Actionウインドウが表示されるので、Root MenuをScriptsにして、Acceptをクリック

なお、ここでSubmenuを選ぶと、メニューを階層構造にすることができる。

以下のメッセージが表示される。「指定したスクリプトのカスタムアクションが作成されました。Scriptsメニューから実行可能です」というような意味だ。

たしかに、画面上部のScriptsに、先ほどのスクリプトが登録されている。

登録済みのスクリプトをメニューから消す方法

Window→Workspace→Customizeを選択


▲DAZ Studioの日本語化を試していたので、表示が日本語になっているけど

Customize DAZ Studioウインドウが表示される。

ActionsタブのCustomから、追加したスクリプトを探して右クリック→Delete Custom Actionを選択

と、いつでも消せるので雑に追加して色々試そう。

DAZ スクリプトのマニュアルや拡張子・関連情報

DAZ スクリプトのマニュアル

DAZスクリプトマニュアル

Scripting [Documentation Center]

英語。最初にざっくり日本語翻訳しながら流し読みすればいけそう。

やっぱ流し読みには日本語がいいなぁ。

サンプルスクリプトも多数用意されてるので、チュートリアルがわりにIDEで動かしながらフィーリングをつかんでいきたい。

スクリプトの種別 dsa,dsb,dse

すごい種類ある。

File Extensions [Documentation Center]

DAZ Script2の拡張子に絞ると3つで、dsa、dsb、dseがある。

.dsaは、アスキー形式。テキストエディタで開いて読める。

.dsbは、バイナリ方式。読めない。アスキーに変換する方法もあるのか?

.dseは、encrypt(暗号化)された形式。

サンプルスクリプトやDAZスクリプトのソース公開サイト

DAZ Studioスクリプトはソースを見えなくする(.dse)ことも可能だが、.dsa形式だとソースが自由に見られてカスタマイズも可能。

ありがたいサンプルスクリプト配布サイトや、カスタマイズ例を紹介してみたい。

関節limit一覧表示などのスクリプト

自作DAZ Script | lps da DAZ Studio user

lps da DAZ Studio userさんによる、公開スクリプト。

  • フィギュアのパーツのリミット設定一覧表示
  • 選択ノードの表示・非表示(子階層ごと)

詳細なスクリプトの解説も掲載あり。

Github(無料で使えるソースコード管理サービス)に、各種スクリプトが公開されているので、ありがたく見させてもらおう。

lowpolysnow/DAZStudioScriptSet

ポーズコンバーター

無料ポーズコンバーター G1、G2、G3、G8対応 DAZフィギュア用
Genesis1、Genesis2、Genesis3、Genesis8のポーズデータを、世代間で使いまわせるようになるコンバーターを発見。 >Daz3d Pose Converter (Standalone) - Script - Shar...

旧フィギュア~最新フィギュア間でポーズコンバートができるスゴイやつ。

素晴らしい。

ランダムモーフ スクリプト

Daz3D Morphs Randomizer – Script – ShareCG

モーフパラメータをランダムに設定するスクリプト。実行するとパーツと、モーフのグループを指定するとランダムに値をセットしてくれる。

対象パーツを指定するコンフィグ画面と、ランダムモーフ実行用スクリプトの二本立て。

実際に動かしてみた例はこちら。軽いカスタマイズ例も。

DAZフィギュアのモーフランダマイザー
モーフランダマイザーと呼ばれる、モーフをランダムに指定するツールだ。 Daz3D Morphs Randomizer - Script - ShareCG 2年前に無料公開されているスクリプトだが、現在でも問題なく使える。 Morphs R...

アイテム表示・非表示 スクリプト

HIDE and SHOW – Daz Script(消滅してた!)

指定したアイテムが表示されてたら非表示、非表示だったら表示するスクリプト。透明度(Opacity)を変更するっぽい。

ランダム表情(Genesis) スクリプト

Genesis Expression Randomizer – Script – ShareCG

Genesis用のランダム表情。

大きな文字でパラメータパネル

DAZフォーラムに投稿されていたスクリプト。

「いつか、DAZ本体に実装されるといいんですけどねっ!」という希望と絶望の入り混じったコメント入りで公開されていた。

A script to control a selected Property, with large font size, and Preview buttons – Daz 3D Forums

mcasualsdazscripts7 スクリプト集

一風変わったスクリプトが大量。遅延アニメーションコピーや、電撃エフェクト、パーティクルシステムなど有料級が大量に。(でも、全部無料)

mcasualsdazscripts7

遅延アニメーションで子豚を踊らせてみた使用例はこちらの記事にまとめた。

DAZのタイムラインを遅延コピーするスクリプト
遅延コピーというのは、例えば5フレームだけズラしてコピーするということ。 こういう動きが可能になる。 #DAZStudio のアニメーションを別フィギュアに遅延コピーするという素晴らしいフリースクリプト。 作者は、長年に渡って面白いスクリプ...

インストールフォルダの.dsaファイル

  • C:\Program Files\DAZ 3D\DAZStudio4\resources

上記フォルダの.dsa(暗号化・バイナリ化されてないスクリプトファイル)を眺めているだけでも、ヒントになる…かも。

選択パーツのプロパティ(モーフ名など)の一覧を出力するスクリプト

Sceneタブで対象パーツを選んでから実行すると、対象パーツのプロパティをズラズラっと表示する。

/*********************************************************************/
// Array<DzProperty> :
function getGroupProperties( oGROUP, bTRAVERSE, bRECURSE ){
	var aProperties = new Array();
	if( !oGROUP ){ return aProperties; }
	else{
		const nPROPERTIES = oGROUP.getNumProperties();
		for( var i = 0; i < nPROPERTIES; i++ ){
			aProperties.push( oGROUP.getProperty( i ) );
		}
 
		if( bRECURSE ){ aProperties = aProperties.concat( getGroupProperties( oGROUP.getFirstChild(), bTRAVERSE, bRECURSE ) ); }
		if( bTRAVERSE ){ aProperties = aProperties.concat( getGroupProperties( oGROUP.getNextSibling(), bTRAVERSE, bRECURSE ) ); }
	}
 
	return aProperties;
}
 
/*********************************************************************/
// Array<DzProperty> :
function getNodeProperties( oNODE, bTRAVERSE, bRECURSE ){
	const oPROPERTY_GROUP_TREE = oNODE.getPropertyGroups();
	const oPROPERTY_GROUP = oPROPERTY_GROUP_TREE.getFirstChild();
 
	return getGroupProperties( oPROPERTY_GROUP, bTRAVERSE, bRECURSE );
}
 
/*********************************************************************/
const oNODE = Scene.getPrimarySelection();
if( oNODE ){
	const aPROPERTIES = getNodeProperties( oNODE, true, true );
	var oProperty, oOwner;
 
	for( var i = 0; i < aPROPERTIES.length; i++ ){
		oProperty = aPROPERTIES[ i ];
		oOwner = oProperty.getOwner();
		if( oOwner.inherits( 'DzNode' ) ){
			print( String( '%1 : %2 : %3' ).arg( oOwner.className() ).arg( oProperty.name ).arg( oProperty.getLabel() ) );
		}
		else{
			print( String( '%1 : %2 : %3' ).arg( oOwner.className() ).arg( oOwner.name ).arg( oProperty.getLabel() ) );
		}
	}
}

Getting the properties associated with a node. [Documentation Center]

出力例はこんな感じ。

Executing Script...
DzFigure : XTranslate : X Translate
DzFigure : YTranslate : Y Translate
DzFigure : ZTranslate : Z Translate
DzFigure : XRotate : X Rotate
DzFigure : YRotate : Y Rotate
DzFigure : ZRotate : Z Rotate
DzFigure : Scale : Scale
DzFigure : XScale : X Scale
DzFigure : YScale : Y Scale
DzFigure : ZScale : Z Scale
DzFigure : Point At : Point At
DzFigure : Disable Transform : Disable Transform
DzFigure : Fit to : Fit to
DzFigure : Fit to Mode : Fit to Mode
DzFigure : FID_Genesis8Female : Figure ID: Genesis8Female
DzObject : Genesis8Female : Geometry Switching
DzFigure : BaseJointCorrectives : Base Joint Correctives
DzFigure : BaseFlexions : Base Flexions
DzGraftingFigureShape : Genesis8Female : Resolution Level
DzGraftingFigureShape : Genesis8Female : SubDivision Level
DzGraftingFigureShape : Genesis8Female : Render SubD Level (Minimum)
DzGraftingFigureShape : Genesis8Female : SubDivision Algorithm
DzGraftingFigureShape : Genesis8Female : Edge Interpolation
DzGraftingFigureShape : Genesis8Female : SubDivision Normals
DzFigure : SCLArmsLength : Arms Length
DzMorph : PBMForearmsSize : Forearms Size
DzFigure : SCLShldrsScale : Shoulders Scale
DzMorph : PBMShouldersSize : Shoulders Size
DzFigure : SCLShldrsWidth : Shoulders Width
DzMorph : PBMUpperArmsSize : Upper Arms Size
DzFigure : xCTRLAllArmsLower : All Arms Lower
DzFigure : xCTRLAllArmsLowerAlt : All Arms Lower Alt
DzFigure : xCTRLAnconeus : Anconeus
DzMorph : xPBMAnconeusL : Anconeus Left
DzMorph : xPBMAnconeusR : Anconeus Right
DzFigure : xCTRLAnconeusAlt : Anconeus xAlt

DAZスクリプト厳選リンク

DAZスクリプト厳選リンク

DAZとPoserのスクリプトWiki

Software/Scripts – Poser and Daz Studio Free Resources Wiki

大量。すでにやりたいことがスクリプト化されて公開されているかも知れない。sharecgにはお宝スクリプトがゴロゴロしているのかも。

目についたスクリプトをピックアップしておこう。

ShareCGのScriptのページ

scripts Sharecg

ShareCGのDAZ Studio用ページ。

一部、dsa(テキストエディタで読める)形式のスクリプトが公開されている。

自作スクリプトへの第一歩 Geometry Shell生成サンプル

とりあえず、Geometry Shellの各パーツを自動で非表示にするスクリプトを作りたい。

Geometry Shellを生成するスクリプトをDAZ公式サイトで見つけたので、こいつをベースに作って行こうと思う。

Create Geometry Shell [Documentation Center]

関連)DAZ STUDIOの使い方