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)
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)
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))