I am digging up this old thread as I am looking for a good solution to project volumetric light.
The Volumetric Lighting Filter built into Panda3D Common Image Filters works somehow weird, producing only a faded copy of the illuminated object, as in the screenshot below:
In the example above, I used code based on this post:
Meanwhile, I’m looking for something like this:
In this thread, I noticed a lot of work done with the new filters, including filters producing effects similar to what I am looking for. For example:
(and several more similar versions)
It seems there was even a concept of integrating new filters with the main Panda3D code, but as I understand it, this idea is dead?
I tried to download the latest version along with SSLRExample:
First of all, it looks like this is code still written for Python 2.7 (looking at the old print
form, for example), but I dealt with it and improved it. Still, after launching it, I get a lot of warnings/errors (I quote all of this at the end of my post) and the visual effect is very disappointing, as in the screenshot below:
One thing: I’m working on macOS and I know there are some shader restrictions with macOS (though generally
getSupportsBasicShaders()
shows me True
).Can anyone help me run this new filter code? Alternatively, is there any other solution to achieve the volumetric light effect I am looking for?
/Users/miklesz/PycharmProjects/Demo2023/venv/bin/python /Users/miklesz/PycharmProjects/Demo2023/CommonFilters190/SSLRExample.py
Using deprecated DirectStart interface.
Known pipe types:
CocoaGraphicsPipe
(all display modules loaded.)
Warning: pandac.PandaModules is deprecated, import from panda3d.core instead
:shader(warning): Shader::make() now requires an explicit shader language. Assuming Cg.
:shader(warning): Shader::make() now requires an explicit shader language. Assuming Cg.
:shader(warning): Shader::make() now requires an explicit shader language. Assuming Cg.
:shader(warning): Shader::make() now requires an explicit shader language. Assuming Cg.
:shader(warning): Shader::make() now requires an explicit shader language. Assuming Cg.
Caught exception while setting filter; details follow.
Traceback (most recent call last):
File "/Users/miklesz/PycharmProjects/Demo2023/CommonFilters190/SSLRExample.py", line 243, in <module>
t = SSLRExample()
File "/Users/miklesz/PycharmProjects/Demo2023/CommonFilters190/SSLRExample.py", line 118, in __init__
filterok = self.filters.setAmbientOcclusion()
File "/Users/miklesz/PycharmProjects/Demo2023/CommonFilters190/CommonFilters.py", line 76, in compatibilityGlue
args[0].reconfigure() # args[0] = self (CommonFilters)
File "/Users/miklesz/PycharmProjects/Demo2023/CommonFilters190/FilterPipeline.py", line 950, in reconfigure
self.stages[-1].reconfigure()
File "/Users/miklesz/PycharmProjects/Demo2023/CommonFilters190/FilterStage.py", line 635, in reconfigure
f.attachStage( filterStage=self )
File "/Users/miklesz/PycharmProjects/Demo2023/CommonFilters190/Filter.py", line 849, in attachStage
self.onAttachStage()
File "/Users/miklesz/PycharmProjects/Demo2023/CommonFilters190/AmbientOcclusion.py", line 146, in onAttachStage
self.interQuads.append(self.pipeline.manager.renderQuadInto(colortex=self.textures["ssao1"], div=2, align=2))
File "/Users/miklesz/PycharmProjects/Demo2023/CommonFilters190/FilterManager.py", line 246, in renderQuadInto
buffer = self.createBuffer("filter-stage", winx, winy, texgroup, depthbits)
File "/Users/miklesz/PycharmProjects/Demo2023/CommonFilters190/FilterManager.py", line 278, in createBuffer
winprops.setSize(xsize, ysize)
TypeError: 'float' object cannot be interpreted as an integer
Continuing.
:shader(warning): Shader::make() now requires an explicit shader language. Assuming Cg.
Caught exception while setting filter; details follow.
Traceback (most recent call last):
File "/Users/miklesz/PycharmProjects/Demo2023/CommonFilters190/SSLRExample.py", line 243, in <module>
t = SSLRExample()
File "/Users/miklesz/PycharmProjects/Demo2023/CommonFilters190/SSLRExample.py", line 119, in __init__
filterok = self.filters.setBloom(size="large")
File "/Users/miklesz/PycharmProjects/Demo2023/CommonFilters190/CommonFilters.py", line 76, in compatibilityGlue
args[0].reconfigure() # args[0] = self (CommonFilters)
File "/Users/miklesz/PycharmProjects/Demo2023/CommonFilters190/FilterPipeline.py", line 922, in reconfigure
stage.reconfigure()
File "/Users/miklesz/PycharmProjects/Demo2023/CommonFilters190/FilterStage.py", line 635, in reconfigure
f.attachStage( filterStage=self )
File "/Users/miklesz/PycharmProjects/Demo2023/CommonFilters190/Filter.py", line 849, in attachStage
self.onAttachStage()
File "/Users/miklesz/PycharmProjects/Demo2023/CommonFilters190/AmbientOcclusion.py", line 146, in onAttachStage
self.interQuads.append(self.pipeline.manager.renderQuadInto(colortex=self.textures["ssao1"], div=2, align=2))
File "/Users/miklesz/PycharmProjects/Demo2023/CommonFilters190/FilterManager.py", line 246, in renderQuadInto
buffer = self.createBuffer("filter-stage", winx, winy, texgroup, depthbits)
File "/Users/miklesz/PycharmProjects/Demo2023/CommonFilters190/FilterManager.py", line 278, in createBuffer
winprops.setSize(xsize, ysize)
TypeError: 'float' object cannot be interpreted as an integer
Continuing.
:shader(warning): Shader::make() now requires an explicit shader language. Assuming Cg.
Caught exception while setting filter; details follow.
Traceback (most recent call last):
File "/Users/miklesz/PycharmProjects/Demo2023/CommonFilters190/SSLRExample.py", line 243, in <module>
t = SSLRExample()
File "/Users/miklesz/PycharmProjects/Demo2023/CommonFilters190/SSLRExample.py", line 120, in __init__
filterok = self.filters.setCutout(shape="rectangle", boundingBox=(-0.1, 1.1, 0.1, 0.9), smoothingRadius=0.01, strength=0.75)
File "/Users/miklesz/PycharmProjects/Demo2023/CommonFilters190/CommonFilters.py", line 76, in compatibilityGlue
args[0].reconfigure() # args[0] = self (CommonFilters)
File "/Users/miklesz/PycharmProjects/Demo2023/CommonFilters190/FilterPipeline.py", line 922, in reconfigure
stage.reconfigure()
File "/Users/miklesz/PycharmProjects/Demo2023/CommonFilters190/FilterStage.py", line 635, in reconfigure
f.attachStage( filterStage=self )
File "/Users/miklesz/PycharmProjects/Demo2023/CommonFilters190/Filter.py", line 849, in attachStage
self.onAttachStage()
File "/Users/miklesz/PycharmProjects/Demo2023/CommonFilters190/AmbientOcclusion.py", line 146, in onAttachStage
self.interQuads.append(self.pipeline.manager.renderQuadInto(colortex=self.textures["ssao1"], div=2, align=2))
File "/Users/miklesz/PycharmProjects/Demo2023/CommonFilters190/FilterManager.py", line 246, in renderQuadInto
buffer = self.createBuffer("filter-stage", winx, winy, texgroup, depthbits)
File "/Users/miklesz/PycharmProjects/Demo2023/CommonFilters190/FilterManager.py", line 278, in createBuffer
winprops.setSize(xsize, ysize)
TypeError: 'float' object cannot be interpreted as an integer
Continuing.
:shader(warning): Shader::make() now requires an explicit shader language. Assuming Cg.
Caught exception while setting filter; details follow.
Traceback (most recent call last):
File "/Users/miklesz/PycharmProjects/Demo2023/CommonFilters190/SSLRExample.py", line 243, in <module>
t = SSLRExample()
File "/Users/miklesz/PycharmProjects/Demo2023/CommonFilters190/SSLRExample.py", line 152, in __init__
filterok = self.filters.setDesaturation(mode="bandpass", tintColor=finalTintColor, strength=0.95)
File "/Users/miklesz/PycharmProjects/Demo2023/CommonFilters190/CommonFilters.py", line 76, in compatibilityGlue
args[0].reconfigure() # args[0] = self (CommonFilters)
File "/Users/miklesz/PycharmProjects/Demo2023/CommonFilters190/FilterPipeline.py", line 922, in reconfigure
stage.reconfigure()
File "/Users/miklesz/PycharmProjects/Demo2023/CommonFilters190/FilterStage.py", line 635, in reconfigure
f.attachStage( filterStage=self )
File "/Users/miklesz/PycharmProjects/Demo2023/CommonFilters190/Filter.py", line 849, in attachStage
self.onAttachStage()
File "/Users/miklesz/PycharmProjects/Demo2023/CommonFilters190/LocalReflection.py", line 564, in onAttachStage
self.interQuads.append(self.pipeline.manager.renderQuadInto(colortex=self.textures["sslr1"], div=2, align=2))
File "/Users/miklesz/PycharmProjects/Demo2023/CommonFilters190/FilterManager.py", line 246, in renderQuadInto
buffer = self.createBuffer("filter-stage", winx, winy, texgroup, depthbits)
File "/Users/miklesz/PycharmProjects/Demo2023/CommonFilters190/FilterManager.py", line 278, in createBuffer
winprops.setSize(xsize, ysize)
TypeError: 'float' object cannot be interpreted as an integer
Continuing.
Process finished with exit code 0