psファイルというのです。
まあ、説明はいろいろ省いてw
イラストレターに使われるベクターデータも記述できるファイルと思ってOKだと思う。
ベクターだけだと、写真張れないジャン、ってことで、
画像を埋め込めるようになった拡張がepsファイル。
ちょっと昔のPhotoshop Illustrator共通の保存形式ですな。
※現在はさらに拡張されて、おなじみのPDFとなっております。
Softimage StampUV
SoftimageのUVの画像書き出しStampUVなのですがチェック模様のバックから書き出そうとすると
グレーで選択、出力出来ませんでした
これ、既存のテクスチャがないと、
UV描けない仕様なんだよね~弱
PostScript 記述
最近UVのプラグインを続けてたので、UVの座標が扱えるならば、そのポストスクリプトを直接書き出せればいいんじゃね?
と思い立ち調べてみた。DTPの仕事と重なるので、損はなかろう
ということでサンプル
ポストスクリプトはこんな記述みたい
newpath
0 0 moveto
200 0 lineto
100 200 lineto
closepath
fill
コレをポリゴンごとにやれば出来るかもね~
以下後記
実作業をやっていてやはり、UVが簡単に書き出せないのは痛い。
めんどくさい。
メンドクサイがメンドクサイを上回ったときがToolを作る時w
ちょっと昼休みにPythonで組んでみた
多少制限があるものの,思った以上にすんなりできた
ExportUV2EPS
プラグインにするには、まだ足りないのだけど
いろいろ多忙になり、拡張する暇がなさそうなので
コードをさらしておきます
思ったより反響があったので折を見て、
プラグイン化するかもしれません
それまでに使いたい人がありましたら、ご自身の責任でどぞ~。
ExportUV2EPS v0.1
※現状の制限
・書き出しは固定 R:\ExportUV.eps
・解像度は1024、アスペクト比は固定(ベクターデーターなので依存するのは塗りだし)
・塗りだしサイズは 2pix (解像度、アスペクト比に依存)
・マテリアル周りの検証が不完全だと思われる
#ExportUV2EPS # #UVをEPSファイルで書き出します # #グローバル変数 解像度と、出力先を指定 pictSize = 1024 path = "R:\ExportUV.eps" app = Application; log = app.LogMessage import re #------------------------------------------------- # getCurrentTextureEditer #------------------------------------------------- def getCurrentTextureEditer(): ly = app.Desktop.ActiveLayout views = ly.Views TextureEditerView = False #vmだった場合の処理 for view in views: if view.name == "vm": for vmView in view.views: if vmView.Type == "Texture Editor": TextureEditerView = vmView #フローティングパレットを精査 上書き for view in views: if view.Type == "Texture Editor": TextureEditerView = view return TextureEditerView #------------------------------------------------- # x() 倍率設定 #------------------------------------------------- def x(var): return pictSize * var #------------------------------------------------- # writeHeader() epsのヘッダー #------------------------------------------------- def writeHeader(f): f.write( "%!PS-Adobe-3.0 EPSF-3.0\n" + "%%BoundingBox: 0 0 " + str(pictSize) + " " + str(pictSize) + "\n\n" + "newpath" + "\n" + str(x(0)) + " " + str(x(0)) + " " + "moveto" + "\n" + str(x(1)) + " " + str(x(0)) + " " + "lineto" + "\n" + str(x(1)) + " " + str(x(1)) + " " + "lineto" + "\n" + str(x(0)) + " " + str(x(1)) + " " + "lineto" + "\n" + "closepath 0.0 setlinewidth stroke\n\n" ) return #------------------------------------------------- # writeLine() 通常の lineto #------------------------------------------------- def writeLine(u,v): return str(x(u)) + " " + str(x(v)) + " " + "lineto" + "\n" #------------------------------------------------- # fwriteLine() 最初の書き込み moveto #------------------------------------------------- def fwriteLine(u,v): return str(x(u)) + " " + str(x(v)) + " " + "moveto" + "\n" #------------------------------------------------- # writePS(inPolygon,in_aUV,f) #------------------------------------------------- def writePS(inPolygon,in_aUV,f,oColor): #始まり f.write("\n" + "newpath\n") #サンプルの数だけ繰り返す oSamples = inPolygon.Samples oSampleCount = oSamples.Count u = in_aUV[0][oSamples[0].Index] v = in_aUV[1][oSamples[0].Index] f.write(fwriteLine(u,v)) for i in range(oSampleCount): if (i != 0): u = in_aUV[0][oSamples[i].Index] v = in_aUV[1][oSamples[i].Index] f.write(writeLine(u,v)) #Color if oColor != None: r = oColor.Parameters("red").Value g = oColor.Parameters("green").Value b = oColor.Parameters("blue").Value else : r = g = b = 0 f.write(str(r) + " " + str(g) + " " + str(b) + " setrgbcolor\n" ) f.write("closepath\n") f.write("gsave\n") f.write("fill\n") f.write("grestore\n") f.write("4.0 setlinewidth stroke\n") return #------------------------------------------------- # main() #------------------------------------------------- def main(): f = open( path ,"w") writeHeader(f) #TextureEditerを取得 TE = getCurrentTextureEditer() if TE == False: log("Not Found TextureEditer") return #プロジェクション名を取得 aStrProjection = TE.GetAttributeValue("allprojectionnames") if (aStrProjection == None): log("Not Found UV") return lStrProjection = aStrProjection.split(",") for strProjection in lStrProjection: oProjection = app.Dictionary.GetObject(strProjection) aUV = oProjection.Elements.Array oObj = oProjection.Parent3DObject oGeo = oObj.ActivePrimitive.Geometry oPolys = oGeo.Polygons oMat = oObj.Material oShaders = oMat.GetAllShaders() for oShader in oShaders: #log(oShader.ProgID) if oShader.ProgID == "Softimage.material-phong.1.0": oColor = oShader.parameters("Diffuse") elif oShader.ProgID == "Softimage.material-lambert.1.0": oColor = oShader.parameters("Diffuse") elif oShader.ProgID == "Softimage.material-blinn.1.0": oColor = oShader.parameters("Diffuse") elif oShader.ProgID == "Softimage.material-constant.1.0": oColor = oShader.parameters("Color") elif oShader.ProgID == "Softimage.sitoon_paint.1.0": oColor = oShader.parameters("Color") else: oColor = None for oPoly in oPolys: writePS(oPoly,aUV,f,oColor) f.close() log("----- Export Eps!!! -----") main()
今後の拡張
・PPGに対応・出力先のダイアログの設定
・線の描画のON OFF
・オフセットのON OFF
・Plugin化 ・0-1以上に対応するかの ON OFF
・アスペクト比の対応
うお、けっこうありやがりますよ !
0 件のコメント:
コメントを投稿