I am trying implement frustum culling in maya , where I am turning Level of Detail
to boundingbox
[cmds.setAttr(object + '.overrideLevelOfDetail',0)
] if they are not in the frustum of the selected camera : refer to the image for clear reference.
I have written this script till now, using this I can get the required result, but I want it to be dynamic, so if camera is moving it will set the display of objects depending upon their position as of now I need re run the script to be able to reflect the changes
Here is the code that I worked on till now : frustum culling maya
Any help would be appreciated
Thanks & Regards
EDIT :
You probably need to implement a event callback.. for example I changed your code a bit and added a timeChange callback. So when timeline moves it update proper.
def updateFrustum(arg):
skip_meshes = ['camera1', 'front', 'persp', 'side', 'top']
meshes = cmds.ls(type="transform")
req_meshes = list(set(meshes) - set(skip_meshes))
mesh_status = {}
selected_cam = "camera1"
for mesh in req_meshes:
flag = in_frustum(selected_cam, mesh)
if flag == 1:
mesh_status[mesh] = True
else:
mesh_status[mesh] = False
for key, value in mesh_status.items():
if mesh_status[key] == True:
cmds.setAttr(key + '.overrideEnabled', 1)
cmds.setAttr(key + '.overrideLevelOfDetail',0)
else:
cmds.setAttr(key + '.overrideEnabled', 1)
cmds.setAttr(key + '.overrideLevelOfDetail',1)
cmds.select(key)
cmds.select(cl=True)
callback = OpenMaya.MEventMessage().addEventCallback( 'timeChanged', updateFrustum )