i have experienced quite a huge speed difference on objects having color or colorscale enabled under a rigidbodycombiner versus having no color enabled. i wondered if that may be a “bug”.
test it using the below code by pressing the “t” button.
from pandac.PandaModules import *
loadPrcFileData('', 'show-frame-rate-meter #t')
loadPrcFileData('', 'sync-video #f')
from direct.directbase import DirectStart
import random
import math
from panda3d.core import *
base.disableMouse()
base.camera.setPos(50,50,180)
base.camera.lookAt(50,50,0)
rigidBodyCombiner = RigidBodyCombiner('rdbc')
rootNode = NodePath(rigidBodyCombiner)
rootNode.reparentTo(render)
cm = CardMaker('card')
cardList = list()
for i in xrange(1000):
card = rootNode.attachNewNode(cm.generate())
card.setPos(random.random()*100, random.random()*100, 0)
card.setHpr(0,-90,0)
card.setScale(random.random()*4+1)
if True: # enabling one of the settings halves the framerate
#card.setColorScale(Vec4(random.random()*4+1, random.random()*math.pi, 0, 1))
card.setColor(Vec4(random.random()*4+1, random.random()*math.pi, 0, 1))
card.setTransparency(True)
cardList.append(card)
rigidBodyCombiner.collect()
COLOR_ENABLED = True
def toggleColor():
global COLOR_ENABLED
COLOR_ENABLED = not COLOR_ENABLED
print 'toggle color '+['on','off'][COLOR_ENABLED]
if COLOR_ENABLED:
for card in cardList:
card.setColor(Vec4(random.random()*4+1, random.random()*math.pi, 0, 1), 1)
else:
for card in cardList:
card.setColorOff(1)
rigidBodyCombiner.collect()
base.accept('t', toggleColor)
while True:
taskMgr.step()
dt = globalClock.getDt()
for c in cardList:
c.setPos(c.getPos()+Vec3(random.random()-0.5, random.random()-0.5, 0)*2*dt)