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 スクリプトの自作方法
とりあえず、こんな感じで、 (function(){ と })(); でコードを囲っておけば動くっぽい。
この書き方をなんと呼ぶのかとか、そういうことは知らない。
1 2 3 | (function(){ //ここにコードを書くと動く })(); |
たとえば、選択状態のパーツから先端までを全て非表示にするスクリプトを当てはめてみる。
選択したパーツの子をすべて非表示にするサンプルスクリプト
参考)[DAZ] Script to hide all children nodes | F95zone ←メッチャエロ広告でるので注意
1 2 3 4 5 6 7 8 9 10 11 | (function(){ varstartNode=Scene.getPrimarySelection(); if(startNode){ varnodes=[startNode]; nodes=nodes.concat(startNode.getNodeChildren(true)); for(varn=0;n<nodes.length;n++){ nodes[n].setVisible(false); } } })(); |
これを、Script IDEにコピペして、Executeボタンをクリックすると動く。ファイル名.dsaでファイルに保存して、Content LibraryからダブルクリックしてもOK。
なお、setVisible( false )を、setVisible( true )に変更すると、指定パーツから先端までが表示状態に変更される。
設定したパーツのXRotateの最小値、最大値を設定するスクリプト
1 2 3 4 5 6 | (function(){ varNode=Scene.getPrimarySelection(); control=Node.getXRotControl(); control.setMin(-50.0); control.setMax(50.0); })(); |
選択したパーツの、Xrotate(例えば手の場合はTwist)の最小値をー50、最大値を50に設定する。
値を表示するスクリプト
1 2 3 4 | (function(){ varval=10; print("val=",val); })(); |
スクリプト、というのもおこがましいが値を表示するには、print()を使う。カンマで区切ると、文字列と値を連結して表示できる。(ただし、何故か間に半角空白が入る)
メニューやライブラリからDAZ スクリプトを実行
Content Libraryに登録してダブルクリック
※Content Libraryの指す実際のフォルダは、右クリックして「Browse to Folder Location」を選ぶとエクスプローラーが開く。
開いたフォルダにスクリプトをコピーして、Refresh(再描画)を選ぶと、スクリプトが表示される。
アイコンは「アイコン画像がないよ」みたいなのが割り当てられてカッコ悪いけど、コレを解消するのは超面倒くさいので、気にせず使おう。
画面上部メニューからスクリプトを呼び出せるようにする
毎回Content Libraryなんて、使ってらんねー!
フォルダの迷宮で迷子になるわ!
というあなたは、メニューにスクリプトを登録することも可能だ。
なお、ここでSubmenuを選ぶと、メニューを階層構造にすることができる。
以下のメッセージが表示される。「指定したスクリプトのカスタムアクションが作成されました。Scriptsメニューから実行可能です」というような意味だ。
たしかに、画面上部のScriptsに、先ほどのスクリプトが登録されている。
登録済みのスクリプトをメニューから消す方法
▲DAZ STUDIOの日本語化を試していたので、表示が日本語になっているけど
Customize DAZ Studioウインドウが表示される。
と、いつでも消せるので雑に追加して色々試そう。
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
ポーズコンバーター

旧フィギュア~最新フィギュア間でポーズコンバートができるスゴイやつ。
素晴らしい。
ランダムモーフ スクリプト
Daz3D Morphs Randomizer – Script – ShareCG
モーフパラメータをランダムに設定するスクリプト。実行するとパーツと、モーフのグループを指定するとランダムに値をセットしてくれる。
対象パーツを指定するコンフィグ画面と、ランダムモーフ実行用スクリプトの二本立て。
実際に動かしてみた例はこちら。軽いカスタマイズ例も。

アイテム表示・非表示 スクリプト
指定したアイテムが表示されてたら非表示、非表示だったら表示するスクリプト。透明度(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 スクリプト集
一風変わったスクリプトが大量。遅延アニメーションコピーや、電撃エフェクト、パーティクルシステムなど有料級が大量に。(でも、全部無料)
遅延アニメーションで子豚を踊らせてみた使用例はこちらの記事にまとめた。

インストールフォルダの.dsaファイル
- C:\Program Files\DAZ 3D\DAZStudio4\resources
上記フォルダの.dsa(暗号化・バイナリ化されてないスクリプトファイル)を眺めているだけでも、ヒントになる…かも。
選択パーツのプロパティ(モーフ名など)の一覧を出力するスクリプト
Sceneタブで対象パーツを選んでから実行すると、対象パーツのプロパティをズラズラっと表示する。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | /*********************************************************************/ // Array<DzProperty> : functiongetGroupProperties(oGROUP,bTRAVERSE,bRECURSE){ varaProperties=newArray(); if(!oGROUP){returnaProperties;} else{ constnPROPERTIES=oGROUP.getNumProperties(); for(vari=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));} } returnaProperties; } /*********************************************************************/ // Array<DzProperty> : functiongetNodeProperties(oNODE,bTRAVERSE,bRECURSE){ constoPROPERTY_GROUP_TREE=oNODE.getPropertyGroups(); constoPROPERTY_GROUP=oPROPERTY_GROUP_TREE.getFirstChild(); returngetGroupProperties(oPROPERTY_GROUP,bTRAVERSE,bRECURSE); } /*********************************************************************/ constoNODE=Scene.getPrimarySelection(); if(oNODE){ constaPROPERTIES=getNodeProperties(oNODE,true,true); varoProperty,oOwner; for(vari=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]
出力例はこんな感じ。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | ExecutingScript... DzFigure:XTranslate:XTranslate DzFigure:YTranslate:YTranslate DzFigure:ZTranslate:ZTranslate DzFigure:XRotate:XRotate DzFigure:YRotate:YRotate DzFigure:ZRotate:ZRotate DzFigure:Scale:Scale DzFigure:XScale:XScale DzFigure:YScale:YScale DzFigure:ZScale:ZScale DzFigure:PointAt:PointAt DzFigure:DisableTransform:DisableTransform DzFigure:Fitto:Fitto DzFigure:FittoMode:FittoMode DzFigure:FID_Genesis8Female:FigureID:Genesis8Female DzObject:Genesis8Female:GeometrySwitching DzFigure:BaseJointCorrectives:BaseJointCorrectives DzFigure:BaseFlexions:BaseFlexions DzGraftingFigureShape:Genesis8Female:ResolutionLevel DzGraftingFigureShape:Genesis8Female:SubDivisionLevel DzGraftingFigureShape:Genesis8Female:RenderSubDLevel(Minimum) DzGraftingFigureShape:Genesis8Female:SubDivisionAlgorithm DzGraftingFigureShape:Genesis8Female:EdgeInterpolation DzGraftingFigureShape:Genesis8Female:SubDivisionNormals DzFigure:SCLArmsLength:ArmsLength DzMorph:PBMForearmsSize:ForearmsSize DzFigure:SCLShldrsScale:ShouldersScale DzMorph:PBMShouldersSize:ShouldersSize DzFigure:SCLShldrsWidth:ShouldersWidth DzMorph:PBMUpperArmsSize:UpperArmsSize DzFigure:xCTRLAllArmsLower:AllArmsLower DzFigure:xCTRLAllArmsLowerAlt:AllArmsLowerAlt DzFigure:xCTRLAnconeus:Anconeus DzMorph:xPBMAnconeusL:AnconeusLeft DzMorph:xPBMAnconeusR:AnconeusRight DzFigure:xCTRLAnconeusAlt:AnconeusxAlt |
DAZスクリプト厳選リンク
DAZとPoserのスクリプトWiki
Software/Scripts – Poser and Daz Studio Free Resources Wiki
大量。すでにやりたいことがスクリプト化されて公開されているかも知れない。sharecgにはお宝スクリプトがゴロゴロしているのかも。
目についたスクリプトをピックアップしておこう。
ShareCGのScriptのページ
ShareCGのDAZ Studio用ページ。
一部、dsa(テキストエディタで読める)形式のスクリプトが公開されている。
自作スクリプトへの第一歩 Geometry Shell生成サンプル
とりあえず、Geometry Shellの各パーツを自動で非表示にするスクリプトを作りたい。
Geometry Shellを生成するスクリプトをDAZ公式サイトで見つけたので、こいつをベースに作って行こうと思う。