Announcements

Between mid-October and November, the content on AREA will be relocated to the Autodesk Community M&E Hub and the Autodesk Community Gallery. Learn more HERE.

How to create wave solvers & influences (BOSS) with python?

How to create wave solvers & influences (BOSS) with python?

Anonymous
Not applicable
932 Views
1 Reply
Message 1 of 2

How to create wave solvers & influences (BOSS) with python?

Anonymous
Not applicable

Hello,


I'm trying to model an ocean setting only using python on Maya.

But I can't find the MEL/python command that allows me to create BOSS' (Bifröst Ocean Simulation System) wave solvers and influences.

Do such command exists ? If not, are there other methods to achieve my goal ?

 

Thank you.

0 Likes
Accepted solutions (1)
933 Views
1 Reply
Reply (1)
Message 2 of 2

Anonymous
Not applicable
Accepted solution

So I found a way to do what I wanted:

 

I simply saved a scene containing  everything I wanted as a Maya ASCII file, then opened it, then removed all the useless MEL commands and translated the remaining in python.

 

In the end I just recreate all the nodes, set their attributes and connect them to each other

 

This is what I got:

 

def initOcean(pSizeSea, pNbSubDiv, pWaveHeight, pWindSpeed, pWindDir, pWindFetchDist, pResX, pResZ):

    cmds.requires( "Boss", "1.0", nodeType= ["BossBlender", "BossSpectralWave"] )    #MEL command. Useless ?
    cmds.createNode( 'transform', n='pPlane1') # "n=" useless ?
    cmds.setAttr('pPlane1.v', False)
    
    cmds.createNode('mesh', n='pPlaneShape1', p='pPlane1') 

    cmds.setAttr( "pPlaneShape1.v", k=False)
    cmds.setAttr( "pPlaneShape1.vir", True)
    cmds.setAttr( "pPlaneShape1.vif", True)
    cmds.setAttr( "pPlaneShape1.uvst[0].uvsn", "map1", type="string")
    cmds.setAttr( "pPlaneShape1.cuvs", "map1", type="string")
    cmds.setAttr( "pPlaneShape1.dcc", "Ambient+Diffuse", type="string")
    cmds.setAttr( "pPlaneShape1.covm[0]",  0, 1, 1)
    cmds.setAttr( "pPlaneShape1.cdvm[0]",  0, 1, 1)
    
    cmds.createNode('transform', n="BossOutput") 

    bossNode = cmds.createNode('mesh', n="BossOutputShape", p="BossOutput")
    cmds.setAttr("BossOutputShape.v", k=False)
    cmds.setAttr("BossOutputShape.vir", True )
    cmds.setAttr("BossOutputShape.vif", True)
    cmds.setAttr("BossOutputShape.uvst[0].uvsn", "map1", type="string")
    cmds.setAttr("BossOutputShape.cuvs", "map1", type="string")
    cmds.setAttr("BossOutputShape.dcc", "Ambient+Diffuse", type="string")
    cmds.setAttr("BossOutputShape.covm[0]",  0, 1, 1)
    cmds.setAttr("BossOutputShape.cdvm[0]",  0, 1, 1)
    
    cmds.createNode('polyPlane', n="polyPlane1")
    cmds.setAttr("polyPlane1.w", pSizeSea)
    cmds.setAttr("polyPlane1.h", pSizeSea)
    cmds.setAttr("polyPlane1.sw", pNbSubDiv)
    cmds.setAttr("polyPlane1.sh", pNbSubDiv)
    cmds.setAttr("polyPlane1.cuv", 2)
    
    #It is possible to add more wave layers
    BossSpectralWave = cmds.createNode('BossSpectralWave', n="BossSpectralWave" )
    cmds.setAttr(BossSpectralWave + ".startFrame", 1 )
    cmds.setAttr(BossSpectralWave + ".waveHeight", pWaveHeight )
    cmds.setAttr(BossSpectralWave + ".windSpeed", pWindSpeed )
    cmds.setAttr(BossSpectralWave + ".windDirection", pWindDir )
    cmds.setAttr(BossSpectralWave + ".windFetch", pWindFetchDist )
    cmds.setAttr(BossSpectralWave + ".resolutionX", pResX )
    cmds.setAttr(BossSpectralWave + ".resolutionZ", pResZ )
    cmds.setAttr(BossSpectralWave + ".patchSizeX", pSizeSea ) #We put patch size = SizeSea to avoid useless computing
    cmds.setAttr(BossSpectralWave + ".patchSizeZ", pSizeSea )
    #cmds.setAttr("BossSpectralWave1.freqSpectra", 6) 
    #cmds.setAttr("BossSpectralWave1.dirSpectra", 2)
    
    cmds.createNode('BossBlender', n="BossBlender1")
    
    cmds.select(":initialShadingGroup", ne=True)
    cmds.setAttr(":initialShadingGroup.dsm", s=2 )
    cmds.setAttr(":initialShadingGroup.ro", True)
    
    # Connecting attributes
    
    cmds.connectAttr("polyPlane1.out", "pPlaneShape1.i")
    cmds.connectAttr("BossBlender1.outMesh", "BossOutputShape.i")
    cmds.connectAttr("pPlaneShape1.pm", BossSpectralWave + ".parentMatrix")
    cmds.connectAttr("pPlaneShape1.bb", BossSpectralWave + ".boundingBox")
    cmds.connectAttr(":time1.o", BossSpectralWave + ".time")
    cmds.connectAttr("pPlaneShape1.w", "BossBlender1.inMesh")
    cmds.connectAttr(":time1.o", "BossBlender1.time")
    cmds.connectAttr(BossSpectralWave + ".blender", "BossBlender1.solvers", na=True)
    cmds.connectAttr(BossSpectralWave + ".outWave", "BossBlender1.inwave", na=True)
    cmds.connectAttr("pPlaneShape1.iog", ":initialShadingGroup.dsm", na=True)
    cmds.connectAttr("BossOutputShape.iog", ":initialShadingGroup.dsm", na=True)

    return(bossNode)

There was a function that did all this in the maya/bifrost files but it was too much trouble to make it work.