as_polyFracture_v0-5h万能破碎

[复制链接]
将插件放入到对应我的文档maya插件中* ?5 H/ f' l8 f7 ^8 s- w" j
打开maya运行py:1 Q6 m* w2 S9 x, s) D
import as_polyFracture as pf3 o8 a7 F# l# q- }- f9 j4 v0 H) g
reload(pf)
/ r" d8 `8 t: E% F5 hpf.pub_polyVoronoi()
import VFR1 |* T3 P1 i& Y. D8 e7 ~9 j
VFR.initUI()

3 J& b' j9 ]$ O/ H. ]以下是另一个 随机破碎源码:直接复制代码到PY里面即可不过运行速度比如第一个块,会PY的可以在这个基础上做个窗口,这个目前就是开源没做任何窗口,只需要选择模型,运行PY就可以,破碎数量无限,最下面的数值是破碎数量。
4 S/ p" Y( h: c- [; X% ?* w+ s
import maya.cmds as cmds1 X; w! q! ~$ g1 W
import random- ]2 \0 x: Q% ~5 ?

6 g4 l3 Q& O' F! l: P+ ~( a  J" m6 pdef surfaceMaterial(obj, R, G, B):5 O- U$ N! t3 t
    name = (obj + '_shardMaterial')
. M  J+ b! z9 j5 n% d, h    if ( cmds.objExists(name) == 0 ):3 b2 |, e4 y/ w4 ^6 D1 J, k
        cmds.shadingNode( 'lambert', asShader = True, name = name )+ K- v  A* E/ X! @6 ~3 K$ f
        cmds.sets( renderable = True, noSurfaceShader = True, empty = True, name = (name + 'SG'))% J' f: A! M  X0 B3 |
        cmds.connectAttr( (name + '.outColor'), (name + 'SG.surfaceShader'), force = True)" v3 ]& l3 y, Q, {
        cmds.setAttr((name + '.color'), R, G, B, type = "double3")
7 _% h" y# m4 Q# k( ]    return name4 l& r7 E- c$ c3 f; P: B+ l  p
/ P$ c1 J4 y. y9 M+ M
def voroShatter(object, num):& ?3 {6 d% d! k6 f/ i: ]  j
    # Evaluate the bounding box points [minX, minY, minZ, maxX, maxY, maxZ], e8 b4 j7 t- x5 f
    bbPoints = cmds.exactWorldBoundingBox(object) 0 I/ D, }, h8 @7 z- |" b, ^
    print bbPoints
0 r! W: p' D) P- I    9 W* G+ X- F# r, H
    # Place the random points for polycut, based on the bounding box: T- Q, m- t- ]8 }1 J% p
    numPoints = num
' Q3 u/ r( @3 T; ]    voroX = [random.uniform(bbPoints[0], bbPoints[3]) for i in range(numPoints)]" W2 ^, S* l$ c- e1 w% h; p9 Q- c
    voroY = [random.uniform(bbPoints[1], bbPoints[4]) for i in range(numPoints)]7 V1 P7 z+ J4 S6 M$ u+ ^/ i6 T1 ]% C
    voroZ = [random.uniform(bbPoints[2], bbPoints[5]) for i in range(numPoints)]% S, r/ \' o, ^! t! V; K# l5 t
    voroPoints = zip(voroX, voroY, voroZ)
5 {4 P$ t5 P' K& d) N) I   
. K! z0 Y% D. O2 v    cmds.setAttr(object+'.visibility',0)5 x: |* l& y$ x4 i
    chunksGrp = cmds.group( em=True, name = object + '_chunks_1' )7 ]# L3 r4 I0 o0 U0 |# G/ S
    9 }* V/ U5 C1 d0 [! n; q
    cmds.progressWindow(title = "Voronoi Calculating", progress = 0, isInterruptable = True, maxValue = numPoints)
( k/ x$ R# |* @  n( o" t2 g$ }0 i    cmds.undoInfo(state = False)* U+ n* N" H' X
    cmds.setAttr( str(object) + '.visibility' , 0)
& m& b! X, Q  i. d- Q# Y8 |    step = 0
2 {6 k7 P  \- I3 J; W; \7 P* Q
7 @# @7 P5 u2 g% P  E    for voroFrom in voroPoints:8 j. l$ x7 k9 {% }4 y$ M' v
        if cmds.progressWindow(q=True, isCancelled=True ): break; U3 Y3 S! N: _/ k
        if cmds.progressWindow(q=True, progress=True ) >= numPoints: break4 e+ U! U8 V0 l6 f9 N( P) ?+ v( ~! J
        step = step + 1
3 d9 F3 m& _% L" K            
5 F  s% {! D- E+ `        cmds.progressWindow( edit=True, progress=step, status=("Shattering step %d of %d completed..." % (step, numPoints)) )
" W7 {- h: V* E        cmds.refresh(). o8 W2 `. Z) k: H  S2 S7 |1 G
        
) `) k8 v: \8 j5 {+ y! f        # Duplicate the object to cut as shatters
# h/ }9 z3 @# t- S; C        workingObj = cmds.duplicate(object)8 S  J4 I9 o+ O" n$ Z
        cmds.setAttr(str(workingObj[0])+'.visibility',1)! s$ T6 d. s4 n, r9 f
        cmds.parent(workingObj, chunksGrp)' {/ h( a# O1 D) c0 u
        9 {, K2 {+ V: j: ?
        for voroTo in voroPoints:
$ b* E8 N& J9 v/ x/ o9 w+ e            if voroFrom != voroTo:
& C) z" i, K2 P3 F& E# i. T8 |+ z                # Calculate the Perpendicular Bisector Plane- D! n- m: B% p3 Z
                aim = [(vec1-vec2) for (vec1,vec2) in zip(voroFrom,voroTo)]( K8 p1 P" c" p9 P! F
                voroCenter = [(vec1 + vec2)/2 for (vec1,vec2) in zip(voroTo,voroFrom)]/ L2 ?) D  n5 G6 s- D; O  G1 C
                planeAngle = cmds.angleBetween( euler=True, v1=[0,0,1], v2=aim )- j# A: _4 d2 U& D! _5 M
                # Bullet Shatter
% }' s# @& C# b                cmds.polyCut(workingObj[0], df=True, cutPlaneCenter = voroCenter, cutPlaneRotate = planeAngle)2 ]% G4 ^2 f8 w" @/ J( _4 P2 D/ r
                ) b0 C0 X. C# T' R. q/ |
                # Applying the material to the cut faces
( E% I' D# n, Z* k! s8 ~0 {                oriFaces = cmds.polyEvaluate(workingObj[0], face=True)# X" ~; M8 F# v3 e, L- J, q
                cmds.polyCloseBorder(workingObj[0], ch=False)! K; T; s* y7 K( ~$ u
                aftFaces = cmds.polyEvaluate(workingObj[0], face=True)' C5 p( a/ v1 e2 n$ M8 [
                newFaces = aftFaces - oriFaces
: V8 F5 O* T2 P" c                , M/ u' b! D, w$ J

  v6 e" `: y0 k! _6 |                cutFaces = ( '%s.f[ %d ]' % (workingObj[0], (aftFaces + newFaces - 1)))' L0 U  q1 V. o) }
                cmds.sets(cutFaces, forceElement = (surfaceMat + 'SG'), e=True)' w7 `# E; H6 F' N% O6 R2 P+ g4 D
                    
7 y6 x3 {; B8 r: W        
  a: A* F* I) v$ z. a        cmds.xform(workingObj, cp=True)# T. w2 C# a3 m( b) l3 g1 A8 K
        print str(workingObj)
' W" G. k2 N0 {6 l: t% i        
, B3 z. w) N! S% E8 w" r    cmds.xform(chunksGrp, cp=True)" h9 d/ v! Z9 k+ t8 b9 X5 W
    cmds.progressWindow(endProgress=1)- ~* n2 ^  J7 m: c
    cmds.undoInfo(state = True)
' E6 N' V5 g# M        
, x' v0 g; v# Fselected = cmds.ls(sl=True, transforms=True)
3 x+ ~7 G; G+ t# j" ^. Z! Wfor sel in selected:# f& k: F1 m3 Y; W( m: y
    surfaceMat = surfaceMaterial(sel, 0.5, 0.5, 1)! w8 _* r  r7 R" p/ c# Q4 ~
    voroShatter(sel, 10)
+ h: d4 b9 r" B  M* U  @* j5 U* [

  z8 H+ A' ~! H9 k( y$ V

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
2020-2-11 14:17:20
您需要登录后才可以回帖 登录 | 立即注册

精彩评论9

跳转到指定楼层
lastsave
Lv.1
谢谢,小霸王的实力装逼!
我要说一句 收起回复
2020-4-2 01:13:41
bingkuai
Lv.3
感谢分享
我要说一句 收起回复
2020-5-14 18:44:21
终于找到了,小霸王牛b。!!!1
我要说一句 收起回复
2020-5-14 22:58:54
蓝天
Lv.1
喜欢喜欢喜欢
我要说一句 收起回复
2020-5-19 14:39:56
lastsave
Lv.1
诶?不是。。。插件呢|?
收起回复
lastsave 2021-1-3 18:45
回复
呀………………找到了 额
2021-1-3 18:43:05
lastsave
Lv.1
# 错误: ImportError: file <maya console> line 2: No module named as_polyFracture     2019Maya  不行吗
我要说一句 收起回复
2021-1-3 18:57:29
suibin110
Lv.1
有点意思嘿! z- m# l. J, J2 j$ z
我要说一句 收起回复
2021-5-12 11:53:52
狗的粮
Lv.1
好好啊好
我要说一句 收起回复
2021-7-1 20:50:44
返回顶部
客服