def setupPostFx(self): self.filterMan = FilterManager(self.win, self.cam) colorTex = Texture() finalQuad = self.filterMan.renderSceneInto(colortex=colorTex) finalQuad.setShader(loader.loadShader("color.cg")) finalQuad.setShaderInput("color", colorTex)
class Application(ShowBase): def __init__(self): ShowBase.__init__(self) self.setupScene() self.setupPostFx() def setupScene(self): self.panda = Actor("panda", {"walk": "panda-walk"}) self.panda.reparentTo(render) self.panda.loop("walk") cm = CardMaker("plane") cm.setFrame(-10, 10, -10, 10) plane = render.attachNewNode(cm.generate()) plane.setP(270) self.cam.setPos(0, -40, 6) ambLight = AmbientLight("ambient") ambLight.setColor(Vec4(0.2, 0.1, 0.1, 1.0)) ambNode = render.attachNewNode(ambLight) render.setLight(ambNode) dirLight = DirectionalLight("directional") dirLight.setColor(Vec4(0.1, 0.4, 0.1, 1.0)) dirNode = render.attachNewNode(dirLight) dirNode.setHpr(60, 0, 90) render.setLight(dirNode) pntLight = PointLight("point") pntLight.setColor(Vec4(0.8, 0.8, 0.8, 1.0)) pntNode = render.attachNewNode(pntLight) pntNode.setPos(0, 0, 15) self.panda.setLight(pntNode) sptLight = Spotlight("spot") sptLens = PerspectiveLens() sptLight.setLens(sptLens) sptLight.setColor(Vec4(1.0, 1.0, 1.0, 1.0)) sptLight.setShadowCaster(True) sptNode = render.attachNewNode(sptLight) sptNode.setPos(-10, -10, 20) sptNode.lookAt(self.panda) render.setLight(sptNode) render.setShaderAuto() def setupPostFx(self): self.filterMan = FilterManager(self.win, self.cam) colorTex = Texture() finalQuad = self.filterMan.renderSceneInto(colortex = colorTex) finalTex = Texture() interQuad = self.filterMan.renderQuadInto(colortex = finalTex, div = 8) interQuad.setShader(loader.loadShader("filter.cg")) interQuad.setShaderInput("color", colorTex) finalQuad.setShader(loader.loadShader("pass.cg")) finalQuad.setShaderInput("color", finalTex)
def setupPostFx(self): self.filterMan = FilterManager(self.win, self.cam) colorTex = Texture() blurTex = Texture() depthTex = Texture() finalQuad = self.filterMan.renderSceneInto(colortex=colorTex, depthtex=depthTex) blurQuad = self.filterMan.renderQuadInto(colortex=blurTex, div=4) blurQuad.setShader(loader.loadShader("blur.cg")) blurQuad.setShaderInput("color", colorTex) finalQuad.setShader(loader.loadShader("depth.cg")) finalQuad.setShaderInput("color", colorTex) finalQuad.setShaderInput("blur", blurTex) finalQuad.setShaderInput("depth", depthTex)
def setupPostFx(self): self.gbufMan = FilterManager(self.win, self.cam) self.lightMan = FilterManager(self.win, self.lightCam) albedo = Texture() depth = Texture() normal = Texture() final = Texture() self.gbufMan.renderSceneInto(colortex=albedo, depthtex=depth, auxtex=normal, auxbits=AuxBitplaneAttrib.ABOAuxNormal) lightQuad = self.lightMan.renderSceneInto(colortex=final) lightQuad.setShader(loader.loadShader("pass.cg")) lightQuad.setShaderInput("color", final) self.ambient.setShader(loader.loadShader("ambient.cg")) self.ambient.setShaderInput("albedo", albedo) self.ambient.setAttrib( ColorBlendAttrib.make(ColorBlendAttrib.MAdd, ColorBlendAttrib.OOne, ColorBlendAttrib.OOne)) self.ambient.setAttrib(DepthWriteAttrib.make(DepthWriteAttrib.MOff)) self.lights.setShader(loader.loadShader("light.cg")) self.lights.setShaderInput("albedo", albedo) self.lights.setShaderInput("depth", depth) self.lights.setShaderInput("normal", normal) self.lights.setAttrib( ColorBlendAttrib.make(ColorBlendAttrib.MAdd, ColorBlendAttrib.OOne, ColorBlendAttrib.OOne)) self.lights.setAttrib( CullFaceAttrib.make(CullFaceAttrib.MCullCounterClockwise)) self.lights.setAttrib(DepthWriteAttrib.make(DepthWriteAttrib.MOff))
class Application(ShowBase): def __init__(self): ShowBase.__init__(self) self.setupScene() self.setupLight() self.setupPostFx() def setupScene(self): self.panda = Actor("panda", {"walk": "panda-walk"}) self.panda.reparentTo(render) self.panda.loop("walk") smiley = loader.loadModel("smiley") smiley.reparentTo(render) smiley.setPos(5, -15, 10) smiley = loader.loadModel("smiley") smiley.reparentTo(render) smiley.setPos(5, 0, 10) smiley = loader.loadModel("smiley") smiley.reparentTo(render) smiley.setPos(5, 20, 10) self.world = loader.loadModel("environment") self.world.reparentTo(render) self.world.setScale(0.5) self.world.setPos(-8, 80, 0) self.cam.setPos(0, -40, 6) self.cam.node().getLens().setNearFar(1.0, 300.0) def setupLight(self): ambLight = AmbientLight("ambient") ambLight.setColor(Vec4(0.2, 0.1, 0.1, 1.0)) ambNode = render.attachNewNode(ambLight) render.setLight(ambNode) dirLight = DirectionalLight("directional") dirLight.setColor(Vec4(0.1, 0.4, 0.1, 1.0)) dirNode = render.attachNewNode(dirLight) dirNode.setHpr(60, 0, 90) render.setLight(dirNode) pntLight = PointLight("point") pntLight.setColor(Vec4(0.8, 0.8, 0.8, 1.0)) pntNode = render.attachNewNode(pntLight) pntNode.setPos(0, 0, 15) self.panda.setLight(pntNode) sptLight = Spotlight("spot") sptLens = PerspectiveLens() sptLight.setLens(sptLens) sptLight.setColor(Vec4(1.0, 1.0, 1.0, 1.0)) sptLight.setShadowCaster(True) sptNode = render.attachNewNode(sptLight) sptNode.setPos(-10, -10, 50) sptNode.lookAt(self.panda) render.setLight(sptNode) render.setShaderAuto() def setupPostFx(self): self.filterMan = FilterManager(self.win, self.cam) colorTex = Texture() blurTex = Texture() depthTex = Texture() finalQuad = self.filterMan.renderSceneInto(colortex=colorTex, depthtex=depthTex) blurQuad = self.filterMan.renderQuadInto(colortex=blurTex, div=4) blurQuad.setShader(loader.loadShader("blur.cg")) blurQuad.setShaderInput("color", colorTex) finalQuad.setShader(loader.loadShader("depth.cg")) finalQuad.setShaderInput("color", colorTex) finalQuad.setShaderInput("blur", blurTex) finalQuad.setShaderInput("depth", depthTex)
def __init__(self, _base, world, buffer_system): self.power = Vec3(1,1,0) self.world = world self._base = _base #self.activate_gui() self.bias2 = 1 self.blur = 0.5 self.aperture = 0.1 self.focus = 0.5 self.near = 0.1 self.far = 0.8 self.focal = 0.5 self.exposure = 0.5 self.bloomfactor = 0.1 self.bool_fxaa = 0 self.last_map = None self.filterMan = FilterManager(base.win, base.cam) self.card = CardMaker('Compositing quad') self.card.setFrameFullscreenQuad() self.finalQuad = render2d.attachNewNode(self.card.generate()) self.resolution_x = 1024 self.resolution_y = 768 self.make_initial_pass() self.original_map = buffer_system.light_map self.last_map = self.original_map # Particles pass if(PARTICLES): particles_comp_map = Texture() quad = self.filterMan.renderQuadInto(colortex = particles_comp_map) quad.setShader(loader.loadShader("particles_comp.cg")) quad.setShaderInput("color", self.last_map) #quad.setShaderInput("camera", self.world.buffer_system.transparency_cam ) quad.setShaderInput("particles", buffer_system.transparency_map) quad.setShaderInput("particles_depth", buffer_system.transparency_depth_map) quad.setShaderInput("scene_depth", buffer_system.depth_map) self.last_map = particles_comp_map # Linearize depth pass if(DOF or COLOR_CORRECTION): self.lineardepth_map = Texture() quad = self.filterMan.renderQuadInto(div=1,mul=1,align=1,colortex = self.lineardepth_map) quad.setShader(loader.loadShader("shaders/depth_linear.cg")) quad.setShaderInput("depthnonlinear", buffer_system.depth_map) quad.setShaderInput("clipplanes", Vec3(NEAR_CLIP,FAR_CLIP,0)) quad.setShaderInput("camera", buffer_system.light_cam) self.lindepthmap = quad # Bloom filter if(BLOOM): # Create emit map emit_map = Texture() quad = self.filterMan.renderQuadInto(div=1,mul=1,align=1,colortex = emit_map) quad.setShader(loader.loadShader("shaders/create_emit.cg")) quad.setShaderInput("emitmap", buffer_system.misc_map) quad.setShaderInput("albedomap", buffer_system.albedo_map) # Horizontal blur pass hblur_map = Texture() quad = self.filterMan.renderQuadInto(div=1,mul=1,align=1,colortex = hblur_map) quad.setShader(loader.loadShader("shaders/hblur.cg")) quad.setShaderInput("color", emit_map) # Vertical blur pass vblur_map = Texture() quad = self.filterMan.renderQuadInto(div=1,mul=1,align=1,colortex = vblur_map) quad.setShader(loader.loadShader("shaders/vblur.cg")) quad.setShaderInput("color", hblur_map) # Bloom pass hdr_map = Texture() quad = self.filterMan.renderQuadInto(div=1,mul=1,align=1,colortex = hdr_map) quad.setShader(loader.loadShader("shaders/hdr.cg")) quad.setShaderInput("color", self.last_map) quad.setShaderInput("bloom_map", vblur_map) quad.setShaderInput("hdr_params", Vec3(0.5,0.5,0)) self.hdr = quad self.last_map = hdr_map # DOF filter if(DOF): dof_map = Texture() quad = self.filterMan.renderQuadInto(div=1,mul=1,align=1,colortex = dof_map) quad.setShader(loader.loadShader("shaders/dof.cg")) quad.setShaderInput("color", self.last_map) quad.setShaderInput("depth", buffer_system.depth_map) quad.setShaderInput("preblurmap", self.last_map) quad.setShaderInput("camera", buffer_system.light_cam) quad.setShaderInput("clipplanes", Vec3(50,500,0)) self.dof = quad self.last_map = dof_map # Color perspective filter # if(COLOR_CORRECTION): colpersp_map = Texture() quad = self.filterMan.renderQuadInto(div=1,mul=1,align=1,colortex = colpersp_map) quad.setShader(loader.loadShader("shaders/col_persp.cg")) quad.setShaderInput("lineardepth", self.lineardepth_map) quad.setShaderInput("originalmap", self.last_map) quad.setShaderInput("fogcolor", FOG_COLOR) quad.setShaderInput("power", FOG_POWER) self.last_map = colpersp_map # FXAA filter if(FXAA): self.fxaa_map = Texture() quad = self.filterMan.renderQuadInto(div=1,mul=1,align=1,colortex = self.fxaa_map) quad.setShader(loader.loadShader("shaders/fxaa.cg")) quad.setShaderInput("color", self.last_map) self.last_map = self.fxaa_map self.make_final_pass() taskMgr.add(self.update,"update")
class FilterSystem(): def __init__(self, _base, world, buffer_system): self.power = Vec3(1,1,0) self.world = world self._base = _base #self.activate_gui() self.bias2 = 1 self.blur = 0.5 self.aperture = 0.1 self.focus = 0.5 self.near = 0.1 self.far = 0.8 self.focal = 0.5 self.exposure = 0.5 self.bloomfactor = 0.1 self.bool_fxaa = 0 self.last_map = None self.filterMan = FilterManager(base.win, base.cam) self.card = CardMaker('Compositing quad') self.card.setFrameFullscreenQuad() self.finalQuad = render2d.attachNewNode(self.card.generate()) self.resolution_x = 1024 self.resolution_y = 768 self.make_initial_pass() self.original_map = buffer_system.light_map self.last_map = self.original_map # Particles pass if(PARTICLES): particles_comp_map = Texture() quad = self.filterMan.renderQuadInto(colortex = particles_comp_map) quad.setShader(loader.loadShader("particles_comp.cg")) quad.setShaderInput("color", self.last_map) #quad.setShaderInput("camera", self.world.buffer_system.transparency_cam ) quad.setShaderInput("particles", buffer_system.transparency_map) quad.setShaderInput("particles_depth", buffer_system.transparency_depth_map) quad.setShaderInput("scene_depth", buffer_system.depth_map) self.last_map = particles_comp_map # Linearize depth pass if(DOF or COLOR_CORRECTION): self.lineardepth_map = Texture() quad = self.filterMan.renderQuadInto(div=1,mul=1,align=1,colortex = self.lineardepth_map) quad.setShader(loader.loadShader("shaders/depth_linear.cg")) quad.setShaderInput("depthnonlinear", buffer_system.depth_map) quad.setShaderInput("clipplanes", Vec3(NEAR_CLIP,FAR_CLIP,0)) quad.setShaderInput("camera", buffer_system.light_cam) self.lindepthmap = quad # Bloom filter if(BLOOM): # Create emit map emit_map = Texture() quad = self.filterMan.renderQuadInto(div=1,mul=1,align=1,colortex = emit_map) quad.setShader(loader.loadShader("shaders/create_emit.cg")) quad.setShaderInput("emitmap", buffer_system.misc_map) quad.setShaderInput("albedomap", buffer_system.albedo_map) # Horizontal blur pass hblur_map = Texture() quad = self.filterMan.renderQuadInto(div=1,mul=1,align=1,colortex = hblur_map) quad.setShader(loader.loadShader("shaders/hblur.cg")) quad.setShaderInput("color", emit_map) # Vertical blur pass vblur_map = Texture() quad = self.filterMan.renderQuadInto(div=1,mul=1,align=1,colortex = vblur_map) quad.setShader(loader.loadShader("shaders/vblur.cg")) quad.setShaderInput("color", hblur_map) # Bloom pass hdr_map = Texture() quad = self.filterMan.renderQuadInto(div=1,mul=1,align=1,colortex = hdr_map) quad.setShader(loader.loadShader("shaders/hdr.cg")) quad.setShaderInput("color", self.last_map) quad.setShaderInput("bloom_map", vblur_map) quad.setShaderInput("hdr_params", Vec3(0.5,0.5,0)) self.hdr = quad self.last_map = hdr_map # DOF filter if(DOF): dof_map = Texture() quad = self.filterMan.renderQuadInto(div=1,mul=1,align=1,colortex = dof_map) quad.setShader(loader.loadShader("shaders/dof.cg")) quad.setShaderInput("color", self.last_map) quad.setShaderInput("depth", buffer_system.depth_map) quad.setShaderInput("preblurmap", self.last_map) quad.setShaderInput("camera", buffer_system.light_cam) quad.setShaderInput("clipplanes", Vec3(50,500,0)) self.dof = quad self.last_map = dof_map # Color perspective filter # if(COLOR_CORRECTION): colpersp_map = Texture() quad = self.filterMan.renderQuadInto(div=1,mul=1,align=1,colortex = colpersp_map) quad.setShader(loader.loadShader("shaders/col_persp.cg")) quad.setShaderInput("lineardepth", self.lineardepth_map) quad.setShaderInput("originalmap", self.last_map) quad.setShaderInput("fogcolor", FOG_COLOR) quad.setShaderInput("power", FOG_POWER) self.last_map = colpersp_map # FXAA filter if(FXAA): self.fxaa_map = Texture() quad = self.filterMan.renderQuadInto(div=1,mul=1,align=1,colortex = self.fxaa_map) quad.setShader(loader.loadShader("shaders/fxaa.cg")) quad.setShaderInput("color", self.last_map) self.last_map = self.fxaa_map self.make_final_pass() taskMgr.add(self.update,"update") def make_initial_pass(self): self.map_A = Texture() self.map_B = Texture() def make_final_pass(self): self.finalQuad.setShader(loader.loadShader("composite.cg")) self.finalQuad.setShaderInput("mapA", self.last_map) self.finalQuad.setShaderInput("mapB", self.last_map) self.finalQuad.setShaderInput("power", self.power) #def setBias(self): self.bias2 = self.bias_slider['value'] def setAperture(self): self.aperture = self.aperture_slider['value'] def setBlur(self): self.blur = self.blur_slider['value'] def setFocus(self): self.focus = self.focus_slider['value'] def setExposure(self): self.exposure = self.exposure_slider['value'] def setBloomfactor(self): self.bloomfactor = self.bloomfactor_slider['value'] def setBrightmax(self): self.world.brightmax = self.brightmax_slider['value'] def setNear(self): self.near = self.near_slider['value'] def setFar(self): self.far = self.far_slider['value'] def setFocal(self): self.focal = self.focal_slider['value'] def setFxaa(self,status): if status: self.bool_fxaa = 1 else: self.bool_fxaa = 0 def update(self, task): RENDER_NODES['LIGHTS'].setShaderInput("dofparams", Vec4(self.near,self.focal,self.far, self.blur)) #print(self.blur) if(DOF): self.dof.setShaderInput("params", Vec3(self.exposure,self.aperture,self.focus)) self.dof.setShaderInput("resolution", Vec3(1024, 768,0)) if(DOF or COLOR_CORRECTION): self.lindepthmap.setShaderInput("dofparams", Vec4(self.near,self.focal,self.far, self.blur)) if(BLOOM): self.hdr.setShaderInput("hdr_params", Vec3(0.5,0.5,0)) return task.cont ### GUI tout pourri ### def activate_gui(self): self.near_slider = DirectSlider(range = (0,1), value = 0.1, pageSize=0.1, text = "shadows", text_scale = 0.1,command = self.setNear) self.near_slider.setPos(0.7,0,0.9) self.near_slider.setScale(0.5) self.focal_slider = DirectSlider(range = (0,10), value = 0.5, pageSize=0.1, text = "ambiant", text_scale = 0.1,command = self.setFocal) self.focal_slider.setPos(0.7,0,0.7) self.focal_slider.setScale(0.5) self.far_slider = DirectSlider(range = (0,1), value = 0.8, pageSize=0.1, text = "ward", text_scale = 0.1,command = self.setFar) self.far_slider.setPos(0.7,0,0.5) self.far_slider.setScale(0.5) self.blur_slider = DirectSlider(range = (0,1), value = 0.1, pageSize=0.1, text = "reflection", text_scale = 0.1,command = self.setBlur) self.blur_slider.setPos(-0.7,0,0.9) self.blur_slider.setScale(0.5) self.aperture_slider = DirectSlider(range = (0,1), value = 0.2, pageSize=0.1, text = "aperture", text_scale = 0.1,command = self.setAperture) self.aperture_slider.setPos(-0.7,0,0.8) self.aperture_slider.setScale(0.5) self.focus_slider = DirectSlider(range = (0,1), value = 0, pageSize=0.1, text = "focus", text_scale = 0.1,command = self.setFocus) self.focus_slider.setPos(-0.7,0,0.6) self.focus_slider.setScale(0.5) self.exposure_slider = DirectSlider(range = (0.0,0.5), value = 0.8, pageSize=0.1, text = "blur", text_scale = 0.1,command = self.setExposure) self.exposure_slider.setPos(-0.7,0,0.4) self.exposure_slider.setScale(0.5) self.bloomfactor_slider = DirectSlider(range = (0.0,5), value = 0.1, pageSize=0.1, text = "bloomfactor", text_scale = 0.1,command = self.setBloomfactor) self.bloomfactor_slider.setPos(-0.7,0,0.2) self.bloomfactor_slider.setScale(0.5) self.brightmax_slider = DirectSlider(range = (0.000002,1), value = 0, pageSize=0.1, text = "bias", text_scale = 0.1,command = self.setBrightmax) self.brightmax_slider.setPos(-0.7,0,0.0) self.brightmax_slider.setScale(0.5) b = DirectCheckButton(text = "Fxaa" ,scale=.05,command=self.setFxaa) b.setPos(-1.0,-1.0,-0.6) self.a = self.aperture_slider self.b = self.focus_slider self.c = self.exposure_slider self.d = self.bloomfactor_slider self.e = self.brightmax_slider self.i = self.blur_slider self.j = b #self.k = self.bias_slider self.sliders_list = [self.near_slider, self.focal_slider, self.far_slider, self.blur_slider, self.aperture_slider, self.focus_slider, self.exposure_slider, self.bloomfactor_slider, self.brightmax_slider, b]
class Application(ShowBase): def __init__(self): ShowBase.__init__(self) self.setupScene() self.setupLight() self.setupCams() self.setupPostFx() def setupScene(self): self.scene = render.attachNewNode("scene") self.panda = Actor("panda", {"walk": "panda-walk"}) self.panda.reparentTo(self.scene) self.panda.loop("walk") self.world = loader.loadModel("environment") self.world.reparentTo(self.scene) self.world.setScale(0.5) self.world.setPos(-8, 80, 0) self.scene.setShaderAuto() def setupCams(self): self.lightCam = self.makeCamera(self.win) self.lightCam.reparentTo(self.cam) sceneMask = BitMask32(1) lightMask = BitMask32(2) self.cam.node().setCameraMask(sceneMask) self.lightCam.node().setCameraMask(lightMask) self.lights.hide(sceneMask) self.ambient.hide(sceneMask) self.scene.hide(lightMask) self.cam.node().getDisplayRegion(0).setSort(1) self.lightCam.node().getDisplayRegion(0).setSort(2) self.win.setSort(3) self.lightCam.node().getDisplayRegion(0).setClearColor(Vec4( 0, 0, 0, 1)) self.lightCam.node().getDisplayRegion(0).setClearColorActive(1) self.cam.setPos(0, -40, 6) def setupLight(self): self.lights = render.attachNewNode("lights") self.sphere = loader.loadModel("misc/sphere") for i in range(400): light = self.lights.attachNewNode("light") light.setPos(random.uniform(-15, 15), random.uniform(-5, 50), random.uniform(0, 15)) light.setColor(random.random(), random.random(), random.random()) light.setScale(5) self.sphere.instanceTo(light) vlight = self.scene.attachNewNode("vlight") vlight.setPos(light.getPos()) vlight.setColor(light.getColor()) vlight.setScale(0.1) self.sphere.instanceTo(vlight) cm = CardMaker("ambient") cm.setFrame(-100, 100, -100, 100) self.ambient = render.attachNewNode("ambient") self.ambient.attachNewNode(cm.generate()) self.ambient.setColor(0.1, 0.1, 0.1, 1) self.ambient.reparentTo(self.cam) self.ambient.setPos(0, 5, 0) def setupPostFx(self): self.gbufMan = FilterManager(self.win, self.cam) self.lightMan = FilterManager(self.win, self.lightCam) albedo = Texture() depth = Texture() normal = Texture() final = Texture() self.gbufMan.renderSceneInto(colortex=albedo, depthtex=depth, auxtex=normal, auxbits=AuxBitplaneAttrib.ABOAuxNormal) lightQuad = self.lightMan.renderSceneInto(colortex=final) lightQuad.setShader(loader.loadShader("pass.cg")) lightQuad.setShaderInput("color", final) self.ambient.setShader(loader.loadShader("ambient.cg")) self.ambient.setShaderInput("albedo", albedo) self.ambient.setAttrib( ColorBlendAttrib.make(ColorBlendAttrib.MAdd, ColorBlendAttrib.OOne, ColorBlendAttrib.OOne)) self.ambient.setAttrib(DepthWriteAttrib.make(DepthWriteAttrib.MOff)) self.lights.setShader(loader.loadShader("light.cg")) self.lights.setShaderInput("albedo", albedo) self.lights.setShaderInput("depth", depth) self.lights.setShaderInput("normal", normal) self.lights.setAttrib( ColorBlendAttrib.make(ColorBlendAttrib.MAdd, ColorBlendAttrib.OOne, ColorBlendAttrib.OOne)) self.lights.setAttrib( CullFaceAttrib.make(CullFaceAttrib.MCullCounterClockwise)) self.lights.setAttrib(DepthWriteAttrib.make(DepthWriteAttrib.MOff))