2013年5月27日月曜日

PhotoshopScript : 現在のレイヤーをラスタライズする

最近Photoshopの使用率がうなぎのぼりです。

Photoshopのスクリプトは作りにくくてしょうがないので
あまり手を出していなかったんですが。

もうどうにも、めんどくさいので手をだして見ました。

PhotoshopCS6にはレイヤーをラスタライズなんて
機能があるんですが、うちのcs5さんにはありません。
でも、レイヤースタイルがんがん使うよね・・・

というわけで、作ってみた


なんかまだ上手く動かない場合がある・・・。

Rasterization


//現在のレイヤーをラスタライズする
//
// 05 23 2013


function CreateNewLayer( in_Name ){
    newLay = activeDocument.artLayers.add()
    newLay.name = in_Name
    return newLay
    }


function Rasterization(){
    
    //現在のレイヤーを取得
    var Lays = activeDocument.artLayers
    var ActiveLayer = activeDocument.activeLayer

    var tempName = ActiveLayer.name
    ActiveLayer.name = "homhom"
    
    //新しいレイヤーを作成
    newLayer = CreateNewLayer( tempName )
    
    //新しいレイヤーをアクティブレイヤーの下に移動
    newLayer.move(ActiveLayer,ElementPlacement.PLACEAFTER)
    
    //二つのレイヤーをマージ
   activeDocument.activeLayer = ActiveLayer
   activeDocument.activeLayer.merge()

}


function main(){
   Rasterization()
}

main()


参考サイト


ねこまたや

雪待夜

Adobe サイト
LayerIDの取得(あまり役に立たなかったけど)


その他 機能拡張

カスタムパネルの作成
  Adobe Configurator 3.1.1

そらかぜ工場

うたげ カラーピッカー
  Photosopでカラーサークルが使えるプラグイン

2013年5月20日月曜日

Game : Guilty Gear Xrd -SIGN-



Unrealであまりにも理想的な影を出していたのでチェック
いったいどういった調整だろう。

2013年5月16日木曜日

LevelDesign : Modular Level Design for Skyrim



スカイリムのレベルデザイン

スカイリム面白かったです


参考になります! やっぱりパズルよね〜。
でも、自動生成装置を作って利用してると思うのよね

2013年5月15日水曜日

nDo2 : dDo : Tutorial

下書きのまま放置してた


nDo2を購入したが使い方が解らん
マニュアル無いの???

と言う訳でTutorialを調査

nDo2



nDo2 workflow (+udk) UDK



写真からの作成
Texture Creation using nDo2



dDo



本家の基本チュートリアル

dDo - Feature Overview



2時間超え・・・。 Complete dDo Breakdown

dDoチュートリアル

dDo : dDo 5.0

去年の年末のクリスマスセールで、
ToolBagとdDoを購入したのですが、
このたびめでたく、ご結婚なされました(ぉ

ということを3D人さんで知りました・・・Oh
Marmoset Skyshop – Quixel’s dDo 5.0と統合!
Unity3Dを採用したリアルタイムイメージベースドラインティングツール!Unity向けシェーダーもリリース予定!


ちょっと意外でしたが、
dDoのビューアーに Marmoset の SkyShop(未発売) を導入というのが正しいみたい


フローとしては、チェーンソウの詳しい
チュートリアルがございました
2時間でございます orz




とりあえずdDo4.5(購入時)を立ち上げたら、
アップデートで5.0になりました。
費用はかからなかったみたい ホッ

で、MAYAでやっていたように
dDoのマテリアルのプリセットfbxを
SI2014で読み込んでみました・・・。
かなり寂しいビューだったので
Hight Quarty Viewに!

パラメータを変えるたびに
コンパイルし待たされる・・・

Hight Quarty View
まだまだ仕事では使えないですね orz


正直、SIのVIewは使えないので、
AutoDeskさんが開発されているFBXViewer待ちですね。


せめてきれいなViewなMAXに持って行こうと思ったけど
SIから転送は出来ませんでした。
MAXさんからの一方通行なのね(Maxのシーンをアップデートはできる) orz

気を取り直して、MAXから送ろうかと思ったけど
今度はエラーで転送できなかった orz

何か設定が悪いのかな。

というわけで、検証までいたりませんでした
こんどこれを試してみます > リンク



チュートリアル2時間は長いよ orz
いや、詳しくてうれしいれす ;p


後日
再起動したら、無事にMAX > SIで来ました。
ただ、ショートカットはMAXになるし、MAXに持っていけるのはICEだけという
本当にSIをプラグインとして利用してました

AutoDeskさん、マジSIをプラグインとして扱ってマス orz
いいソフトなんだけど、値段と、この扱いで人に薦められません・・・ヨ

ユーザー減る一方なんだろうなぁ orz

2013年5月14日火曜日

Softimage Script : ZSortNumbering v0.1

ども、まだまだ修羅場中のTERAです。
あいかわらず、チラ裏スクリプトです
(整理とか、エラー処理とかしてません)


今回の背景はアルファオブジェクト(半透明)
を多用しています

ZSortの場合アルファオブジェクトは
描画順を指定してやらねばなりません、
※最近のIntelAPUでは、力づくで解決してるみたいだけど


まだまだ世の中はオールドテク万歳です。


で、奥から描画するとして、
命名規則で指定する事になりました

・・・数が・・・。
大量にアルファオブジェクトがあると、
めんどくさいのでスクリプト化します


ZSortNumbering


オブジェクト(複数)を選択して実行すると
奥から順に番号を降ってくれます

axxx_ObjectName
最後のナンバリングは消してます


現状PPG無し、カメラの指定は決めうち、など
Toolとして、体をなしてなく、
条件がたくさんですが
とりあえず乗っけておきます。


こういった事案が多数 or 要望があればTool化するかもしれません。


※拡張性として、以下のスイッチがあります
カメラ平面からの距離 <> カメラからの距離
オブジェクトのセンター <> オブジェクトのBBOXセンター
です。
あと、番号の始まりと、頭につける文字の変更とか。

#ZSortNumbering
#
# 選択したオブジェクトをZSort順に命名変更します
# a000_ObjectName
#
# v0.1 0510 2013 とりあえず動いた
#

from win32com.client import constants as c
app = Application; log = app.LogMessage
import re
p = re.compile("[0-9]")

#GlobalValue
PREFIX = "a"
STRRTINGNUMBER = 0
tempCAM ="Camera"
ZDEPTH = True #ZDEPTH or Distance
OBJECTCENTER = False # Switch BBOX

def vLog(v):
 log(str( v.X ) + " , " + str(v.Y) + " , " + str(v.Z) )


def aPosLog(aPos):
 for v in aPos:
  log(str( v.X ) + " , " + str(v.Y) + " , " + str(v.Z) )

#
# bNumDelete
#
def bNumDelete(in_str):
 oName = in_str
 for i in range( len( oName ) ):
  if p.match(oName[-1:]) != None:
   oName = oName[:-1]
  elif oName == "_":
   oName = oName[:-1]
  else:
   break
 return oName

#
# getNumbering
#
def getNumbering(in_digi,in_Start,in_Count):
 num = in_Count + in_Start
 num = str(num).rjust(in_digi,"0")
 return num


#
# getSelectMeshs
#
def getSelectMeshs():

 #-製作中-現在は選択したメッシュのみ
 col = XSIFactory.CreateObject("xsi.collection")
 oMeshs = XSIFactory.CreateObject("xsi.collection")
 col.Unique = True
 oMeshs.Unique = True
 
 oSels = app.Selection
 for oSel in oSels:
  if oSel.Type == "polymsh":
   oMeshs.Add(oSel)
   
 return oMeshs


#
# getCamera
#
def getCamera():
 #カメラ取得は仮
 oCam = app.Dictionary.GetObject(tempCAM)
 
 return oCam


#
# getObjectBBOXPositionArray
# 
def getObjectBBOXPositionArray(inObjects):
 aPos = []
 for oObj in inObjects:
  pos = XSIMath.CreateVector3()
  oTrans = oObj.Kinematics.Global.Transform
  oA = oObj.GetBoundingBox( oTrans );
  pos.Set( (oA[3] - oA[0]) *.5 + oA[0],
     (oA[4] - oA[1]) *.5 + oA[1],
     (oA[5] - oA[2]) *.5 + oA[2] )
  aPos.append(pos)
 return aPos


#
# getObjectPositionArray
#
def getObjectPositionArray(inObjects):
 aPos = []
 for oObj in inObjects:
  pos = XSIMath.CreateVector3()
  oTrans = oObj.Kinematics.Global.Transform
  oTrans.GetTranslation(pos)
  aPos.append(pos)
 return aPos


#
# getMeshZNumber
#
def getMeshZNumber(oCam, oMeshs):
 log("-----getMehsNumber-----")
 aDis = []
 aNum = []
 
 #ObjectPositionArray
 if OBJECTCENTER:
  aPos = getObjectPositionArray( oMeshs )
  
 else:
  aPos = getObjectBBOXPositionArray( oMeshs ) 
 
 #aPosLog(aPos) 
 
 #ZDepth or Distance
 camPos = XSIMath.CreateVector3()
 camAxis = XSIMath.CreateVector3()
 camRot = XSIMath.CreateRotation()
 m3 = XSIMath.CreateMatrix3()
 oCamTrans = oCam.Kinematics.Global.Transform
 oCamTrans.GetTranslation(camPos)
 oCamTrans.GetRotation(camRot)
 camRot.GetMatrix3(m3)
 aM3 = m3.Get2()
 camAxis.Set(aM3[6],aM3[7],aM3[8])
 
 log("")
 log("---camPos---")
 vLog(camPos)
 
 log("")
 log("---camAxis---") 
 vLog(camAxis)
 
 if(ZDEPTH):#ZDepthの場合
  log("-----ZDepth-----")
  d = camPos.Dot(camAxis) #PolyPlane = p・n - d
  #log(d)
  for oPos in aPos:
   dis = ( oPos.Dot(camAxis) - d ) * -1
   aDis.append(dis)
   log(dis)
 else:
  v = XSIMath.CreateVector3()
  for oPos in aPos:
   v.Sub(camPos,oPos)
   dis = v.Length()
   aDis.append(dis)
   log(dis)
 
 aTemp = []
 for i,d in enumerate(aDis):
  bTemp = [d,i]
  aTemp.append(bTemp)
  
 aTemp.sort()
 aTemp.reverse()
 
 log(str(aTemp))
 for i in aTemp:
  aNum.append(i[1])
   
 return aNum

#
# main
#
def main():
 log("-----ASortNumbering")
 
 #GetMeshObject
 oMeshs = getSelectMeshs()
 if oMeshs.Count == 0:
  log("Pls Select Meshs")
  return
  
 #Camera
 oCam = getCamera()
 
 #GetNumber From Depth
 aNum = getMeshZNumber(oCam,oMeshs)
 log(str(aNum))
 
 #Renema
 for i,num in enumerate(aNum):
  oObj = oMeshs(num)
  no = getNumbering(3,STRRTINGNUMBER,i)
  oName = PREFIX + str(no) + "_" + oObj.Name
  oObj.Name = bNumDelete(oName)
main()