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 件のコメント:
コメントを投稿