Adaptive Divisons of RBD Fracture Object in Houdini

来源:互联网 发布:程序员玩的游戏 编辑:程序博客网 时间:2024/06/06 19:21

RBD的SDF的精度自适应,适合有些场景里把collision volume的division方式设置成固定时小物体太浪费,设置成uniform时小物体太粗糙的情况下。

此表达式可以把division按大小控制在Min和Max之间。本来在注释间的语句可以自动查找OldMin和OldMax的,但是场景面数多的时候会很慢,所以改成了手动指定的。


使用方法:把以下代码放到RBD DOP的division的表达式里,并且把表达式格式改成Python。

微笑

Min = 30Max = 80OldMin = 10OldMax = 100def fitRange(value,oldmin,oldmax,min,max):    return float(hou.hscriptExpression('fit('+str(value)+','+str(oldmin)+','+str(oldmax)+','+str(min)+','+str(max)+')'))def sizeOfGroup(grp):    bbx = hou.BoundingBox()    for prim in grp.prims():        for v in prim.vertices():            bbx.enlargeToContain(v.point().position())    sizev = bbx.sizevec()    return max(sizev[0],sizev[1],sizev[2])sopnode = hou.node(hou.pwd().evalParm('soppath'))OBJ = int(hou.expandString('$OBJ'))# find the bbx range'''for grp in sopnode.geometry().primGroups():    size = sizeOfGroup(grp)    if minsize>size:        minsize = size    if maxsize<size:        maxsize = size'''    # fit currentsize = sizeOfGroup(sopnode.geometry().primGroups()[OBJ])r = fitRange(size,OldMin,OldMax,Min,Max)print ('obj['+str(OBJ)+']:\t'+str(r))return r 

原创粉丝点击