« ただいま復旧作業中 | トップページ | 3Dテキストを作る »

フィギュアのロードと同時にマテリアルを適用する方法

Newbunny1

ブログのほう、少々放置気味になってしまってすみません。最近はレンダリングした画像をPixivのほうに投稿したりして遊んでます。(;´∀`)

DAZで購入した商品でD|S対応となっているもののうち、インストーラーがPoser用のものと共通になっているものがあります。そういう商品はほとんどの場合、D|S用のマテリアル設定スクリプト(.dsa)がPoser用ライブラリのPoseフォルダに同時にインストールされるわけですが、中にはフィギュア(Charactersフォルダ)にdsaが入っているもの(D|Sスクリプトのアイコン付き)があります。

このタイプのフィギュアはロードと同時にD|SのMATポーズが適用されるため、手間がかからなくて大変便利なのですが、残念ながらこれに対応しているものはまだ少ないようです。

「無いならば作ってしまおう」ということで、今回は上記のようにPoser用のCR2をロードするのと同時にD|S用のマテリアルを設定させるスクリプトを作る方法をご紹介します。

まず、スクリプトの仕掛けを調べてみます。今回は以前DAZの無料配布でゲットした「Clockwork familiar」を参考にします。このフィギュアはロードと同時にD|S用のマテリアルを適用してくれるので、とても楽に使うことができます。


Collectnodes

ClockworkFamiliar.dsaをテキストエディタで見てみます。注目すべきは404行目から始まる関数「collectNodes」です。412行目で、

App.getImportMgr.readFile()

を呼び出しています。この関数がミソで、ここで本来のCR2をロードしているわけです。

次に、自分で作って保存しておいたマテリアルプリセットファイルを開いて、同様の部分を見てみることにします。


Collectnodes3

なんと、collectNodes関数が存在しません。そのかわり、g_oSceneHelperという組み込みクラス(DzSceneHelper)のcollectNodesを呼び出しています。当然ながらDzSceneHelper
のcollectNodesはノード情報を収集するだけで、フィギュアをロードする機能はありません。従って、ClockworkFamiliarからcollectNodes関数を持ってきてしまいます。


Collectnodes2

次に、DzSceneHelperのcollectNodesではなく、自分自身のcollectNodes関数を呼び出すようにbegin関数の該当部分を書き換えます。
「g_oSceneHelper」という部分を「this」に書き換えてしまいましょう。

以上で変更は完了です。cr2と同じ名前で拡張子だけを.dsaに変更し、cr2と同じフォルダに保存してしまいます。


Collectnodes4

D|Sから見てみると、このようにアイコンの左上にスクリプトのマークがついています。アイコンをダブルクリックしてフィギュアがロードできれば成功です。ロード後に自動でD|S用のマテリアルが設定されていると思います。


Collectnodes5

以上、意外と簡単に実現できました。ヽ(´ー`)ノ
今まではCR2をロードしてからD|S用のMATポーズを一つ一つ適用するという、とても面倒なことになっていましたが、この方法を使えばMATポーズを適用する必要がないので、手間が半分以下になりますね。(´∀`*)

|

« ただいま復旧作業中 | トップページ | 3Dテキストを作る »

DAZ Studio Tips」カテゴリの記事

コメント

遅いよ 待ちくたびれちゃいましたよ ブログの更新

と、いいつつ、D|Sは使ってないので、記事へのコメントは何もありませんですいませんです

ではでは

投稿: DAD | 2010年11月16日 (火) 22時01分

DADさん、コメントありがとうございます。
いやー、ずいぶん長いことサボってました。ネタ探しに疲れたというのもありますが。(;´▽`A``
私の使用頻度から、どうしてもD|Sの情報がメインになってしまいますが、Poserと共通の情報も取り上げていきますのでマッタリとお待ちください。(;´∀`)

投稿: とうふ | 2010年11月16日 (火) 22時32分

復帰おめでとうございます^^
これは、単一マテリアルしか付属していない服に便利ですね!こんな事ができるとは目からウロコです。
追加する関数は「***** DsActions Prototype *****」の前に挿入したんですけど、このあたりでいいのでしょうか?

ネタ探しが大変だということですが、ラベル(内部名ではなく、cr2ファイルのname記述)だけを比較してフィギュアのモーフ値に着衣のそれを合わせるスクリプトなんてどうでしょうか?
Poserで言うD3DさんのCopy Morphsみたいな。
スクリプトのことは余り知識がないので、すごく難しいことだったらゴメンナサイ

投稿: Kotozone | 2010年11月17日 (水) 23時00分

kotozoneさん、コメントありがとうございます。
追加する場所は関数の区切りの位置ならどこでも良いのですが、私は
DsActions.prototype.begin = function()
の前に挿入しました。collectNodesの修正位置に近かったもので。(;´∀`)

CopyMorphsを実現するのはそれほど難しくないと思いますが、D|Sの場合はフィギュアと同じ名前のコントロールパラメータを準備してERCリンクを設定するだけで勝手に連動してしまいますので、スクリプトで組むというのもちょっと微妙かも知れません。(;´▽`A``

投稿: とうふ | 2010年11月17日 (水) 23時56分

ERCリンクを設定するという事は、BODYのモーフチャンネルに
valueOpDeltaAdd
Figure
BODY
FBMYoung
deltaAddDelta 1
という風に書き加えていくということですか?確かに、MorphFollowerとの兼ね合いも考えると、cr2ファイルから修正していった方がいいかもしれませんね。
レンダロ販売の衣服で内部名にFBMなどが付いていなくてモーフが連動しないものを手軽にフィットできたらいいなと思ったんです。

投稿: Kotozone | 2010年11月18日 (木) 19時14分

なるほど、そういわれてみると確かにモーフが連動しないものがありますよね。(;´∀`)
しかしモーフ名が異なるものを連動させるには、結局は人手による対応付けが必要になるので、実装方法に工夫が必要かも知れません。機械的に処理できれば良いのですが・・・(´・ω・`)

投稿: とうふ | 2010年11月20日 (土) 01時34分

はじめましてこんばんは
確かにフィギアにMATを適用するの面倒ですよね、フォルダも離れてますし
私はフィギアのフォルダに(フィギアのファイル名).pz2の空ファイルつくってそこにdazのMATファイルを置いてました
こうするとフィギアファイルの横にdazのMATファイルが並ぶから便利だったんですがいかんせんなんか汚い
面倒だし
この方法だと一発でロード出来るようになるのがスマートで良いですね
試してみます^^

投稿: sasayaki | 2010年12月13日 (月) 07時58分

sasayakiさん、はじめまして。コメントありがとうございます。
D|S用のMATはPoseフォルダに入っていることが多いので、適用するのが面倒なんですよね。(;´Д`)
特にこの方法はPropにも使えるので私も重宝してます。(PropはMAT1種類しかないのが多いですし。)
ぜひお試しください。ヽ(´ー`)ノ

投稿: とうふ | 2010年12月13日 (月) 19時21分

ですねぇ
poseフォルダに入ってるならまだいいんですけど、ちょっと前のスタッフの場合
例えば服だと、content直下のContent/People/Victoria4/○○/
みたいなよく分からないフォルダに入ってるのがキーってなりますね^^;
最初まで戻ってdaz用のコンテンツフォルダ選んでーみたいな

ところでとうふさんのブログを拝見させていただき、
最近Dazを使い始めた身としてはとても綺麗な絵ばかりで感心するばかりです
とうふさんのようなCGを作りたいと思いまして、調べても分からなかった背景素材を教えて頂きたいのですが

まずこのエントリの背景画像というのはどのへんの素材なのでしょう?
町並みと海がとても綺麗なので使ってみたいです^^

それと
http://tofusan.cocolog-nifty.com/blog/2009/07/uberenvironment.html
にある水中の体などがぐにゃぐにゃと屈折してる質感などはどうやって出せばいいのでしょうか?
Realityで出来るようなのですが、それとは違うみたいですし

稚拙な質問ですみません、答えて頂ければ幸いです

投稿: sasayaki | 2010年12月22日 (水) 18時55分

sasayakiさん、コメントありがとうございます。
ブログを見ていただいてありがとうございます。コツがわかってくると、D|Sはとても楽しくなりますよね。

この記事で使っている背景画像はsIBL Archiveさんで配布されているフリーの球体マップ用JPEGファイルを使用しています。この画像は"Grand Canyon C"です。IBL用のHDRIも同梱されているので、かなり便利ですよ。ヽ(´ー`)ノ
http://www.hdrlabs.com/sibl/archive.html

水の屈折の表現方法ですが、マテリアルのRefractionにある「Index of Refraction」を1.3に設定すると水と同じ屈折率になります。Refraction Strengthは100%に設定、光沢を乗せるためにはMultiply Through OpacityをOFFに設定します。

たしかあの画像の水面はShaderMixerで波を作ったり、いろいろ小細工をしてたような気がします。手軽に水面を作るには以下の記事が参考になるかも知れません。(;´∀`)
http://tofusan.cocolog-nifty.com/blog/2009/10/post-fed9.html

投稿: とうふ | 2010年12月22日 (水) 22時01分

これはご丁寧に^^
sIBL Archiveさんはこのブログでも何回か紹介されていたサイトですね!
球体マップを初めてつかってみたんですがとても綺麗でした
これがフリーだなんて!
あと写っていたGrand Canyonは、よく見たら町並みと海じゃなくて岩の地層と森でしたね・・・はははお恥ずかしい・・・

IBL用のhdrをHDRShopでtifにしてIBLに設定してみたのですが、
例えばGrand Canyonみたいに青空のIBLだと、白系のものが真っ青になっちゃいますね
D|Sには対応してないのでしょうか
だとしたら残念^^;

水の屈折はおかげ様で上手くいきました!
反射とかもきれいで本物の水面みたいです
豆腐さんのおかげでD|Sがより楽しくなってきました
本当にありがとうございます!

投稿: sasayaki | 2010年12月28日 (火) 00時06分

sasayakiさん、コメントありがとうございます。
ご参考になったようで、ほっとしました。
Grand Canyon付属のHDR画像の件ですが、これはD|Sだからそうなるというわけではなくて、IBLの構造上、そういう色になってしまうので、いわば宿命みたいなものです。Saturationの調整でIBLの発色を抑えたり、IBLの明るさやコントラストを調整することで問題なく使えるようになります。ぜひ試してみてください。ヽ(´ー`)ノ

IBLの仕組みについては、以下の記事が参考になるかも知れません。
http://tofusan.cocolog-nifty.com/blog/2010/07/ibl-c71a.html

投稿: とうふ | 2010年12月28日 (火) 19時16分

コメントを書く



(ウェブ上には掲載しません)




« ただいま復旧作業中 | トップページ | 3Dテキストを作る »