The problem is that the text is exactly coplanar with the polygon behind it. Rendering coplanar polygons is always a bit problematic in a 3-d world, since the graphics card uses a depth buffer (sometimes called a Z-buffer) to decide which things are in front of other things–but when two polygons are exactly coplanar, they get the same Z-buffer value at each pixel, so they tend to shimmer when viewed from different angles (or, from some angles, it may be completely invisible, which is what happens when you view your text directly head-on).
Fortunately, Panda has code to handle this. It’s called a “Decal”, which is a special mode in which Panda sends a special sequence of graphics commands to render coplanar polygons correctly. (This is not to be confused with the “decal” multitexture mode. Panda’s “Decal” rendering effect is not presently documented in the manual.)
The DirectLabel, which isn’t really designed to be rendered in the 3-D world, doesn’t enable decalling by default. But you can do so. To do it, you should use the internal TextNode to generate the background card instead of using the FLAT relief (use text_bg to do this, and set relief=None). Then you need to get a handle to the internal TextNode and enable the decal rendering directly. It’s a bit clumsy, but it looks something like this:
chatBubble=DirectLabel(parent=render, text="Testing", text_wordwrap=10,
relief=None, text_scale=(.08,.08),
text_frame=(0,0,0,1),
text_bg=(1,1,1,1))
chatBubble.component('text0').textNode.setCardDecal(1)
chatBubble['text'] = 'Testing'
Note that you have to reset the text after you have set the decal effect, in order to force the new decal mode to be applied.
To make the text auto-rotate to face the camera, all you need is a billboard effect:
chatBubble.setBillboardAxis()
David