def __init__(self): # Load the default configuration.prc. This is recommended, as it # contains some important panda options loadPrcFile("../../Config/configuration.prc") # Init the showbase ShowBase.__init__(self) # Create a new pipeline instance self.renderPipeline = RenderingPipeline(self) # Set the base path for the pipeline. This is required as we are in # a subdirectory self.renderPipeline.getMountManager().setBasePath("../../") # Also set the write path self.renderPipeline.getMountManager().setWritePath("../../Temp/") # Load the default settings self.renderPipeline.loadSettings("../../Config/pipeline.ini") # Now create the pipeline self.renderPipeline.create() # Load the skybox self.skybox = self.renderPipeline.getDefaultSkybox() self.skybox.reparentTo(render) # Create the default movement controler self.controller = MovementController(self) self.controller.setInitialPositionHpr(Vec3(-2.5, -10.5, 7.5), Vec3(0, -14, 0)) self.controller.setup() # At this point we are done with the initialization. Now you want to # load your scene, and create the game logic. # Call this to tell the pipeline that the scene is done loading self.renderPipeline.onSceneInitialized()
def __init__(self): DebugObject.__init__(self, "Main") self.debug("Bit System =", 8 * struct.calcsize("P")) # Load engine configuration self.debug("Loading panda3d configuration from configuration.prc ..") loadPrcFile("../../Config/configuration.prc") # Init the showbase ShowBase.__init__(self) # Create the render pipeline self.debug("Creating pipeline") self.renderPipeline = RenderingPipeline(self) # Set a write directory, where the shader cache and so on is stored # self.renderPipeline.getMountManager().setWritePath(writeDirectory) self.renderPipeline.getMountManager().setBasePath("../../") self.renderPipeline.loadSettings("../../Config/pipeline.ini") # Create the pipeline, and enable scattering self.renderPipeline.create() self.renderPipeline.enableDefaultEarthScattering() # Load some demo source self.sceneSource = "Models/SmoothCube/Cube.bam" # Load scene from disk self.debug("Loading Scene '" + self.sceneSource + "'") self.model = self.loader.loadModel(self.sceneSource) self.scene = render.attachNewNode("Scene") self.model.reparentTo(self.scene) self.model.setZ(1.0) # Wheter to use a ground floor self.usePlane = True self.sceneWireframe = False # Flatten scene self.scene.flattenStrong() # Load ground plane if configured if self.usePlane: self.groundPlane = self.loader.loadModel( "Models/Plane/Model.egg.bam") self.groundPlane.setPos(0, 0, 0) self.groundPlane.setScale(2.0) self.groundPlane.setTwoSided(True) self.groundPlane.flattenStrong() self.groundPlane.reparentTo(self.scene) # Prepare textures with SRGB format self.prepareSRGB(self.scene) # Create movement controller (Freecam) self.controller = MovementController(self) self.controller.setInitialPosition(Vec3(0, -5, 5.0), Vec3(0, 0, 5)) self.controller.setup() # Hotkey for wireframe self.accept("f3", self.toggleSceneWireframe) # Hotkey to reload all shaders self.accept("r", self.setShaders) # Create a sun light dPos = Vec3(60, 30, 100) dirLight = DirectionalLight() dirLight.setDirection(dPos) dirLight.setShadowMapResolution(2048) dirLight.setAmbientColor(Vec3(0.0, 0.0, 0.0)) dirLight.setPos(dPos) dirLight.setColor(Vec3(3)) dirLight.setPssmTarget(base.cam, base.camLens) dirLight.setPssmDistance(50.0) dirLight.setCastsShadows(True) self.renderPipeline.addLight(dirLight) self.dirLight = dirLight sunPos = Vec3(56.7587, -31.3601, 189.196) self.dirLight.setPos(sunPos) self.dirLight.setDirection(sunPos) # Tell the GI which light casts the GI self.renderPipeline.setGILightSource(dirLight) # Slider to move the sun if self.renderPipeline.settings.displayOnscreenDebugger: self.renderPipeline.guiManager.demoSlider.node[ "command"] = self.setSunPos self.renderPipeline.guiManager.demoSlider.node["value"] = 20 self.lastSliderValue = 0.0 # Load skyboxn self.skybox = None self.loadSkybox() # Set default object shaders self.setShaders(refreshPipeline=False) self.createGUI()
def __init__(self): DebugObject.__init__(self, "Main") self.debug("Bit System =", 8 * struct.calcsize("P")) # Load engine configuration self.debug("Loading panda3d configuration from configuration.prc ..") loadPrcFile("Config/configuration.prc") # Init the showbase ShowBase.__init__(self) # Create the render pipeline self.debug("Creating pipeline") self.renderPipeline = RenderingPipeline(self) # Uncomment to use temp directory # writeDirectory = tempfile.mkdtemp(prefix='Shader-tmp') # writeDirectory = "Temp/" # Clear write directory when app exits # atexit.register(os.remove, writeDirectory) # Set a write directory, where the shader cache and so on is stored # self.renderPipeline.getMountManager().setWritePath(writeDirectory) self.renderPipeline.getMountManager().setBasePath(".") ####### END OF RENDER PIPELINE SETUP ####### # Load some demo source # self.sceneSource = "Demoscene.ignore/sponza.egg.bam" # self.sceneSource = "Demoscene.ignore/occlusionTest/Model.egg" # self.sceneSource = "Demoscene.ignore/lost-empire/Model.egg" # self.sceneSource = "Models/PSSMTest/Model.egg.bam" # self.sceneSource = "Demoscene.ignore/GITest/Model.egg" # self.sceneSource = "Demoscene.ignore/PSSMTest/Model.egg.bam" # self.sceneSource = "Demoscene.ignore/Room/LivingRoom.egg" # self.sceneSource = "Models/CornelBox/Model.egg" # self.sceneSource = "Models/HouseSet/Model.egg" self.sceneSource = "Toolkit/Blender Material Library/MaterialLibrary.egg" self.renderPipeline.loadSettings("Config/pipeline.ini") # Create the pipeline, and enable scattering self.renderPipeline.create() self.renderPipeline.enableDefaultEarthScattering() # Load scene from disk self.debug("Loading Scene '" + self.sceneSource + "'") self.scene = self.loader.loadModel(self.sceneSource) # Wheter to use a ground floor self.usePlane = False self.sceneWireframe = False # Flatten scene? self.scene.flattenStrong() self.scene.analyze() # Load ground plane if configured if self.usePlane: self.groundPlane = self.loader.loadModel( "Models/Plane/Model.egg.bam") self.groundPlane.setPos(0, 0, -0.01) self.groundPlane.setScale(2.0) self.groundPlane.setTwoSided(True) self.groundPlane.flattenStrong() self.groundPlane.reparentTo(self.scene) # Some artists really don't know about backface culling # self.scene.setTwoSided(True) # Required for tesselation # self.convertToPatches(self.scene) self.scene.reparentTo(self.render) # Prepare textures with SRGB format self.prepareSRGB(self.scene) # Create movement controller (Freecam)wwww self.controller = MovementController(self) self.controller.setInitialPosition(Vec3(0, -5, 5.0), Vec3(0, 0, 5)) self.controller.setup() # Hotkey for wireframe self.accept("f3", self.toggleSceneWireframe) # Hotkey to reload all shaders self.accept("r", self.setShaders) # for i in xrange(1): # pointLight = PointLight() # pointLight.setPos(Vec3( (i-1)*3, 0, 7)) # pointLight.setColor(Vec3(0.1)) # pointLight.setShadowMapResolution(1024) # pointLight.setRadius(50) # pointLight.setCastsShadows(True) # # pointLight.attachDebugNode(render) # self.renderPipeline.addLight(pointLight) # Create a sun light dPos = Vec3(60, 30, 100) dirLight = DirectionalLight() dirLight.setDirection(dPos) dirLight.setShadowMapResolution(2048) dirLight.setAmbientColor(Vec3(0.0, 0.0, 0.0)) dirLight.setPos(dPos) dirLight.setColor(Vec3(3)) dirLight.setPssmTarget(base.cam, base.camLens) dirLight.setCastsShadows(True) self.renderPipeline.addLight(dirLight) self.dirLight = dirLight sunPos = Vec3(56.7587, -31.3601, 189.196) self.dirLight.setPos(sunPos) self.dirLight.setDirection(sunPos) # Tell the GI which light casts the GI self.renderPipeline.setGILightSource(dirLight) # Slider to move the sun if self.renderPipeline.settings.displayOnscreenDebugger: self.renderPipeline.guiManager.demoSlider.node[ "command"] = self.setSunPos self.renderPipeline.guiManager.demoSlider.node["value"] = 20 self.lastSliderValue = 0.0 # Load skyboxn self.skybox = None self.loadSkybox() # Set default object shaders self.setShaders(refreshPipeline=False)
def __init__(self): DebugObject.__init__(self, "Main") self.debug("Bit System =", 8 * struct.calcsize("P")) # Load engine configuration self.debug("Loading panda3d configuration from configuration.prc ..") loadPrcFile("../../Config/configuration.prc") # Init the showbase ShowBase.__init__(self) # Create the render pipeline self.debug("Creating pipeline") self.renderPipeline = RenderingPipeline(self) # Set a write directory, where the shader cache and so on is stored # self.renderPipeline.getMountManager().setWritePath(writeDirectory) self.renderPipeline.getMountManager().setBasePath("../../") self.renderPipeline.loadSettings("../../Config/pipeline.ini") # Create the pipeline, and enable scattering self.renderPipeline.create() # Load some demo source # self.sceneSource = "Models/SmoothCube/Cube.bam" self.sceneSource = "Demoscene.ignore/Sphere/Scene.bam" # Load scene from disk self.scene = render.attachNewNode("Scene") self.debug("Loading Scene '" + self.sceneSource + "'") self.model = self.scene.attachNewNode("model") for metallic in xrange(2): for roughness in xrange(10): for specular in xrange(10): model = self.loader.loadModel(self.sceneSource) model.reparentTo(self.model) model.setZ(5.0) model.setX(metallic * 40.0 + roughness * 3.0) model.setY(specular * 3.0) model.setShaderInput("opt_roughness", roughness / 10.0) model.setShaderInput("opt_metallic", metallic) model.setShaderInput("opt_specular", specular / 10.0) ntex = loader.loadTexture("DemoNormalTex.png") ntex.setWrapU(Texture.WMRepeat) ntex.setWrapV(Texture.WMRepeat) ntex.setMinfilter(Texture.FTLinear) ntex.setMagfilter(Texture.FTLinear) self.model.setShaderInput("demoBumpTex", ntex) # Create some lights for i in xrange(10): continue pointLight = PointLight() xoffs = (i - 25) * 15.0 pointLight.setPos(xoffs, 0, 8) pointLight.setColor(Vec3(random(), random(), random()) * 1) pointLight.setRadius(15) self.renderPipeline.addLight(pointLight) # Wheter to use a ground floor self.usePlane = True self.sceneWireframe = False # Flatten scene self.scene.flattenStrong() # Load ground plane if configured if self.usePlane: self.groundPlane = self.loader.loadModel("Models/Plane/Plane.bam") self.groundPlane.setPos(0, 0, 0) self.groundPlane.setScale(2.0) self.groundPlane.setTwoSided(True) self.groundPlane.flattenStrong() self.groundPlane.reparentTo(self.scene) # Prepare textures with SRGB format self.prepareSRGB(self.scene) # Create movement controller (Freecam) self.controller = MovementController(self) self.controller.setInitialPosition(Vec3(0, -5, 5.0), Vec3(0, 0, 5)) self.controller.setup() # Hotkey for wireframe self.accept("f3", self.toggleSceneWireframe) # Create a sun light dPos = Vec3(60, 30, 100) dirLight = DirectionalLight() dirLight.setShadowMapResolution(1024) dirLight.setPos(dPos) dirLight.setColor(Vec3(1)) dirLight.setPssmTarget(base.cam, base.camLens) dirLight.setPssmDistance(180.0) dirLight.setCastsShadows(True) self.renderPipeline.addLight(dirLight) self.dirLight = dirLight sunPos = Vec3(56.7587, -31.3601, 189.196) self.dirLight.setPos(sunPos) self.renderPipeline.setScatteringSource(dirLight) # Slider to move the sun if self.renderPipeline.settings.displayOnscreenDebugger: self.renderPipeline.guiManager.demoSlider.node[ "command"] = self.setSunPos self.renderPipeline.guiManager.demoSlider.node["value"] = 20 self.lastSliderValue = 0.0 # Load skyboxn self.skybox = self.renderPipeline.getDefaultSkybox() self.skybox.reparentTo(render) self.renderPipeline.setEffect(self.model, "DynamicMaterial.effect") self.renderPipeline.onSceneInitialized() self.renderPipeline.fillTextureStages(render) self.createGUI()
def onScenePrepared(self, cb=None): """ Callback which gets called after the scene got prepared """ self.scene.reparentTo(self.render) # Prepare textures with SRGB format self.prepareSRGB(self.scene) # Load ground plane if configured if self.usePlane: self.groundPlane = self.loader.loadModel("Models/Plane/Plane.bam") # self.groundPlane.setPos(0, 0, -5.0) self.groundPlane.setTwoSided(True) self.groundPlane.flattenStrong() self.groundPlane.setName("GroundPlane") self.groundPlane.reparentTo(render) # Prepare Materials self.renderPipeline.fillTextureStages(render) # lerpTop = self.scene.posInterval(0.8, Vec3(0, 0, 7), startPos=Vec3(0,0,2)) # lerpBot = self.scene.posInterval(0.8, Vec3(0, 0, 2), startPos=Vec3(0,0,7)) # sequence = Sequence(lerpTop, lerpBot) # sequence.loop() # self.renderPipeline.setEffect(self.scene, "Effects/Default/Default.effect", { # "dynamic": True, # }) # Some artists really don't know about backface culling # self.scene.setTwoSided(True) # Create some ocean # self.water = ProjectedWaterGrid(self.renderPipeline) # self.water.setWaterLevel(-10) # if "sponza" in self.sceneSource: b1, b2 = self.scene.getTightBounds() c1 = loader.loadModel("Demoscene.ignore/CubeOpen/Scene.bam") c1.setPos(b1) c1.setScale(b2 - b1) c1.reparentTo(render) # Required for tesselation # self.convertToPatches(self.scene) # Hotkey for wireframe self.accept("f3", self.toggleSceneWireframe) # Hotkey to reload all shaders self.accept("r", self.setShaders) # For rdb self.accept("f12", self.screenshot) # Hotkeys to spawn / remove lights self.accept("u", self.addDemoLight) self.accept("i", self.removeDemoLight) # Create movement controller (Freecam) self.controller = MovementController(self) camPos = Vec3(-34.68, -2.88, 20.01) camHpr = Vec3(272.67, -5.55, 0.0) self.controller.setInitialPositionHpr(camPos, camHpr) self.controller.setup() # self.fpCamera = FirstPersonCamera(self, self.cam, self.render) # self.fpCamera.start() # Load skybox self.skybox = self.renderPipeline.getDefaultSkybox() self.skybox.reparentTo(render) # Set default object shaders self.setShaders(refreshPipeline=False) # Hide loading screen self.loadingScreen.hide() # self.toggleSceneWireframe() self.renderPipeline.onSceneInitialized()