【DazStudio】MayaのPythonでdufファイルを読み込んでみる #1

前回、DazStudioのマテリアル・プリセットのdufファイルの中身を覗いてみたので、今回は有効に活用していきたいと思うます(*´∀`*)

と、いっても単純にリストデータ化するだけなら
import json
f = open('Material_test001.duf', 'r')
jsonData = json.load(f)
list = jsonData.values()[1]["animations"]
f.close()
 Twitterでも書きましたが、これで配列変数listに全マテリアル情報が格納されます。

前回、分析したとおりマテリアルの項目名は「url」実データは「keys」というキー・バリュー形式で格納されているので

url = list[n番目]["url"]
data = list[n番目]["keys"][0]

とやるとn番目のURLと実データを引っ張り出せます。
ここまでくればPythonでは便利なループ制御があるので
for item in xrange(list) :
    url = item["url"]
    data = item["keys"][0]
    #このあとに何か必要な処理を加える 
 こんな感じになるのかなあ。

変数urlに入ってきた文字列を切り分けて、マテリアル名(シェーディング・グループ名といったほうが正確かもしれない)とプロパティ名にしていきたいと思います。

こんな感じの関数をつくります。
import urllib
import urlparse
def dazURL_split(url0):
    url_data = urlparse.urlparse(url0)[5]
    url1 = url_data.replace(":","")
    url2 = urlparse.urlparse(url1)
    url3=["",""]
    delStr = "extra/studio_material_channels/channels/"
    url3[0] = url2[2].replace("materials/","")
    url3[1] = url2[4].replace(delStr,"")
    return url3
この関数は、まぁURLをパースする関数をつかって必要な部分だけ戻り値に使う配列に格納してるだけです。Python初心者なので、他にもっと高速でシンプルな記述があるかもです(;´Д`)

気になるのはURLの文字列が"name://@selection#materials/……"みたいな感じで始まってる感じなので、エクスポートの仕方によって「@selection」あたりが変わったりしそうです。そのへんもあってURLパース関数を使ってみたんですけれども。
for item in xrange(list) :
    url = dazURL_split(item["url"])
    data = item["keys"][0]
    #このあとに何か必要な処理を加える
さっきのループのところにこんな感じで関数呼び出しを組み込みます(太字部分)

ループ内の処理に
    print '-->', url[0],url[1],'key=',item["keys"][0]
でも加えるとコンソールに、ずらずらーーーっとマテリアル情報が表示されるんじゃないかと思います(*´∀`*)

とりあえず、今回はこのへんでー。次回は実際のマテリアルに接続していく部分をやっていきたいと思ってます。





…………Mayaじゃなくても動くタダのPythonコードで終わってしまった(*`ロ´ノ)ノ

コメント