Shatterもどき??
今日Twitterを通じてほろにがさんの記事を読んで、ふむふむ、前半はこういうことかな?
→http://www.dfx.co.jp/dftalk/?p=757
とSoftimage用のスクリプトで起こしてみました。
これを切り刻む分だけ繰り返せばいいのかな?
今回はVBSですが・・・w
Dim ret
Dim oCol, oSel
' オブジェクトを選択
Set oCol = GetValue("SelectionList")
for each oSel in oCol
Logmessage "Cutting : " & oSel
' 選択オブジェクトのバウンディングボックス座標を取得
GetBBox oSel, FALSE, xmin, ymin, zmin, xmax, ymax, zmax
' 選択オブジェクトのXYZそれぞれの長さを計算
Dim xLen, yLen, zLen
ret = Abs(xmax - xmin)
if ret = 0 then ret = 0.1
xLen = ret
ret = Abs(ymax - ymin)
if ret = 0 then ret = 0.1
yLen = ret
ret = Abs(zmax - zmin)
if ret = 0 then ret = 0.1
zLen = ret
Logmessage "BBoox : " & xmin&", "&ymin&", "&zmin&", "&xmax&", "&ymax&", "&zmax
' スライス用のGridを生成
Dim oSliceGrid
Set oSliceGrid = CreatePrim( "Grid", "MeshSurface" )
GetBBox oSliceGrid, FALSE, sxmin, symin, szmin, sxmax, symax, szmax
' スライス用のGridのサイズを計算して、選択オブジェクトのサイズより大きくなるようにする(2倍ぐらい?)
Dim sXlen, sYlen, sZlen, sclX, sclY, sclZ
ret = Abs(sxmax - sxmin)
if ret = 0 then ret = xLen
sXlen = ret
ret = Abs(symax - symin)
if ret = 0 then ret = yLen
sYlen = ret
ret = Abs(szmax - szmin)
if ret = 0 then ret = zLen
sZlen = ret
sclX = (xLen / sXlen) * 2
sclY = (yLen / sYlen) * 2
sclZ = (zLen / sZlen) * 2
Scale oSliceGrid ,sclX,sclY,sclZ, siRelative, siLocal, siObj, siXYZ, , , , , , , , 0
' ブーリアンを安定化するためにGridを三角形化
ApplyTopoOp "TriangulatePolygons", oSliceGrid, siUnspecified, siPersistentOperation
' Gridの頂点をランダマイズで波打たせ〜
Dim oP
Set oP = ApplyOp("Randomize", oSliceGrid, 3, siPersistentOperation, , 0)
Logmessage oP
SetValue oP & ".amply", 0.01
SetValue oP & ".amply", 1
SetValue oP & ".amplz", 1
' Gridを使って選択をブーリアン、法線を反転させ、ブーリアン
ApplyTopoOp "BooleanDifference", oSel & ";" & oSliceGrid, 3, siPersistentOperation
Set oDup = Duplicate( oSel, , 2, 1, 1, 0, 0, 1, 0, 1, , , , , , , , , , , 0 )
FreezeModeling oDup
ApplyTopoOp "Inverse", oSliceGrid, 3, siPersistentOperation
Set oDup = Duplicate( oSel, , 2, 1, 1, 0, 0, 1, 0, 1, , , , , , , , , , , 0 )
FreezeModeling oDup
next