def __init__(self, parent=None, x=0, y=0, chbCallback=None, chbArgs=None, chbChecked=True, text="", textSize=15, radio=False, textColor=None): if chbArgs is None: chbArgs = [] if textColor is None: textColor = Vec3(1) self.checkbox = BetterCheckbox(parent=parent, x=x, y=y, callback=chbCallback, extraArgs=chbArgs, checked=chbChecked, radio=radio) self.text = BetterOnscreenText(x=x + 20, y=y + 7 + textSize / 3, text=text, align="left", parent=parent, size=textSize, color=textColor)
def render(self): """ Inits the loading screen, creating the gui """ self.node = self.showbase.pixel2dp.attachNewNode("Loading Screen") self.node.setBin("fixed", 10) self.node.setDepthTest(False) self.showbase.setFrameRateMeter(False) w, h = self.showbase.win.getXSize(), self.showbase.win.getYSize() self.bgFrame = DirectFrame(parent=self.node, frameColor=(0.9, 0.9, 0.9, 1.0), frameSize=(0, w, -h, 0)) self.font = loader.loadFont("Data/Font/Multicolore.otf") xOffs = (w - 1920) / 2.0 yOffs = (h - 1080) / 2.0 self.bgImage = BetterOnscreenImage(image="Data/GUI/LoadingScreen.png", parent=self.node, w=1920, h=1080, x=xOffs, y=yOffs) cr = 212 self.circlePart1 = BetterOnscreenImage(image="Data/GUI/LoadingCirclePart.png", parent=self.node, w=cr, h=cr, x=(w-cr) / 2, y = (h-cr) / 2 - 50) self.circlePart2 = BetterOnscreenImage(image="Data/GUI/LoadingCirclePart.png", parent=self.node, w=cr, h=cr, x=(w-cr) / 2, y = (h-cr) / 2 - 50) self.circlePart3 = BetterOnscreenImage(image="Data/GUI/LoadingCirclePart.png", parent=self.node, w=cr, h=cr, x=(w-cr) / 2, y = (h-cr) / 2 - 50) self.circlePart4 = BetterOnscreenImage(image="Data/GUI/LoadingCirclePart.png", parent=self.node, w=cr, h=cr, x=(w-cr) / 2, y = (h-cr) / 2 - 50) self.circleBg = BetterOnscreenImage(image="Data/GUI/LoadingCircleBg.png", parent=self.node, w=180, h=180, x=(w-180) / 2, y = (h-180) / 2 - 50) self.logoImage = BetterOnscreenImage(image="Data/GUI/RPIcon.png", parent=self.node, w=316, h=316, x=(w - 316) /2, y = (h-316) / 2 - 50) self.loadingText = BetterOnscreenText(text="Compiling Shaders ...", parent=self.node, x=w/2, y=h - 50, size=25, align="center", color=Vec4(0.9,0.9,0.9,0.5), mayChange=True, font=self.font) self.circlePart2._node.setR(180) self.circlePart3._node.setR(90) self.circlePart4._node.setR(-90) # self.circlePart1._node.setColorScale(Vec4(103/255.0,167/255.0,53/255.0,1.0)) self.circlePart1._node.setColorScale(Vec4(0.5,1.0,1.0,0.5)) self.circlePart2._node.setColorScale(Vec4(1.0,0.5,1.0,0.5)) self.circlePart3._node.setColorScale(Vec4(1.0,1.0,0.5,0.5)) self.circlePart4._node.setColorScale(Vec4(0.5,0.5,1.0,0.5)) interval1 = self.circlePart1.hprInterval(1.1, Vec3(0,0,360)) interval1.loop() interval2 = self.circlePart2.hprInterval(1.3, Vec3(0,0,-180)) interval2.loop() interval3 = self.circlePart3.hprInterval(1.5, Vec3(0,0,-270)) interval3.loop() interval4 = self.circlePart4.hprInterval(1.7, Vec3(0,0,270)) interval4.loop() self.showbase.graphicsEngine.renderFrame()
def __init__(self, title, w=100, h=100, parent=None): DebugObject.__init__(self, "UIWindow") if parent is None: parent = Globals.base.pixel2d self.node = parent.attachNewNode("Window-" + title) self.parent = parent self.bgFrame = DirectFrame(parent=self.node, frameColor=(0.2, 0.2, 0.2, 0.9), frameSize=(0, w, -h, 0)) # state=DGG.NORMAL self.titleFrame = DirectFrame(parent=self.node, frameColor=(0.35, 0.56, 0.19, 0.9), frameSize=(0, w, -40, 0)) self.titleText = BetterOnscreenText(text=title, x=10, y=25, parent=self.titleFrame, color=Vec3(1), size=15) self.contentNode = self.node.attachNewNode("Content") self.contentNode.setPos(0, 0, -60)
def render(self): """ Inits the loading screen, creating the gui """ self.node = self.showbase.pixel2dp.attachNewNode("Loading Screen") self.node.setBin("fixed", 10) self.node.setDepthTest(False) self.showbase.setFrameRateMeter(False) w, h = base.win.getXSize(), base.win.getYSize() scaleX = w / 2560.0 scaleY = h / 1440.0 imageScale = max(scaleX, scaleY) imageW = 2560 * imageScale imageH = 1440 * imageScale self.bgFrame = DirectFrame(parent=self.node, frameColor=(0.9, 0.9, 0.9, 1.0), frameSize=(0, w, -h, 0)) self.font = loader.loadFont("Data/Font/Roboto-Light.ttf") self.fontHighRes = loader.loadFont("Data/Font/Roboto-Thin.ttf") self.fontHighRes.setPixelsPerUnit(120) xOffs = (w - imageW) / 2.0 yOffs = (h - imageH) / 2.0 self.bgImage = BetterOnscreenImage( image="Data/GUI/LoadingScreen.png", parent=self.node, w=imageW, h=imageH, x=xOffs, y=yOffs ) self.points = [] self.pointAngles = [10, 25, 40, 51, 80, 103, 130, 152, 170, 198, 210, 231, 250, 274, 290, 310, 328, 352] random.seed(491) for angle in self.pointAngles: scale = 180.0 point = BetterOnscreenImage( image="Data/GUI/LoadingScreenPoint.png", parent=self.node, w=scale, h=scale, x=(w - scale) / 2, y=(h - scale) / 2, nearFilter=False, ) point._node.setR(angle) scaleZ = scale * (1.0 + random.random() * 1.2) * (1.0 + 0.6 * abs(math.cos(angle / 180.0 * math.pi))) point._node.setScale(scaleZ, scale, scale) sFrom, sTo = 0.7, 1.2 seq = Sequence( point._node.scaleInterval( 2.0 + random.random(), Vec3(scaleZ * sFrom, scale, scale), startScale=Vec3(scaleZ * sTo, scale, scale), blendType="easeInOut", ), point._node.scaleInterval( 2.0 + random.random(), Vec3(scaleZ * sTo, scale, scale), startScale=Vec3(scaleZ * sFrom, scale, scale), blendType="easeInOut", ), ) seq.loop() self.points.append(point) cr = 212 ct = 0 self.circlePart1 = BetterOnscreenImage( image="Data/GUI/LoadingCirclePart.png", parent=self.node, w=cr, h=cr, x=(w - cr) / 2, y=(h - cr) / 2 - ct ) self.circlePart2 = BetterOnscreenImage( image="Data/GUI/LoadingCirclePart.png", parent=self.node, w=cr, h=cr, x=(w - cr) / 2, y=(h - cr) / 2 - ct ) self.circlePart3 = BetterOnscreenImage( image="Data/GUI/LoadingCirclePart.png", parent=self.node, w=cr, h=cr, x=(w - cr) / 2, y=(h - cr) / 2 - ct ) self.circlePart4 = BetterOnscreenImage( image="Data/GUI/LoadingCirclePart.png", parent=self.node, w=cr, h=cr, x=(w - cr) / 2, y=(h - cr) / 2 - ct ) self.circleBg = BetterOnscreenImage( image="Data/GUI/LoadingCircleBgBlack.png", parent=self.node, w=180, h=180, x=(w - 180) / 2, y=(h - 180) / 2 - ct, ) self.logoImage = BetterOnscreenImage( image="Data/GUI/RPIcon.png", parent=self.node, w=316, h=316, x=(w - 316) / 2, y=(h - 316) / 2 - ct ) self.loadingDescText = BetterOnscreenText( text="50%".upper(), parent=self.node, x=w - 50, y=h - 95, size=90, align="right", color=Vec4(0.9, 0.9, 0.9, 0.5), mayChange=True, font=self.fontHighRes, ) self.loadingText = BetterOnscreenText( text="Compiling Shaders".upper(), parent=self.node, x=w - 50, y=h - 65, size=18, align="right", color=Vec4(117 / 255.0, 175 / 255.0, 65 / 255.0, 0.2), mayChange=True, font=self.font, ) self.versionText = BetterOnscreenText( text="Rendering Pipeline 1.0.1".upper(), parent=self.node, x=50, y=80, size=30, align="left", color=Vec4(0.9, 0.9, 0.9, 0.5), mayChange=False, font=self.font, ) self.linkText = BetterOnscreenText( text="github.com/tobspr/renderpipeline".upper(), parent=self.node, x=50, y=105, size=18, align="left", color=Vec4(117 / 255.0, 175 / 255.0, 65 / 255.0, 0.2), mayChange=False, font=self.font, ) self.loadingBarBG = DirectFrame( parent=self.node, frameColor=Vec4(0.2, 0.2, 0.2, 0.8), frameSize=(0, w, -3, 0), pos=(0, 0, -h + 30) ) self.loadingBar = DirectFrame( parent=self.node, frameColor=Vec4(117 / 255.0, 175 / 255.0, 65 / 255.0, 0.8), frameSize=(0, w, -3, 0), pos=(0, 0, -h + 30), ) self.circlePart2._node.setR(180) self.circlePart3._node.setR(90) self.circlePart4._node.setR(-90) # self.circlePart1._node.setColorScale(Vec4(103/255.0,167/255.0,53/255.0,1.0)) self.circlePart1._node.setColorScale(Vec4(0.5, 1.0, 1.0, 0.5)) self.circlePart2._node.setColorScale(Vec4(1.0, 0.5, 1.0, 0.5)) self.circlePart3._node.setColorScale(Vec4(1.0, 1.0, 0.5, 0.5)) self.circlePart4._node.setColorScale(Vec4(0.5, 0.5, 1.0, 0.5)) self.circlePart1.hide() self.circlePart2.hide() self.circlePart3.hide() self.circlePart4.hide() interval1 = self.circlePart1.hprInterval(2.1, Vec3(0, 0, 360)) interval1.loop() interval2 = self.circlePart2.hprInterval(2.3, Vec3(0, 0, -180)) interval2.loop() interval3 = self.circlePart3.hprInterval(2.5, Vec3(0, 0, -270)) interval3.loop() interval4 = self.circlePart4.hprInterval(2.7, Vec3(0, 0, 270)) interval4.loop() # Hide render till we're done render.hide() self.showbase.graphicsEngine.renderFrame() self.setStatus("Initializing", 5)
class PipelineLoadingScreen: """ Simple loading screen which shows the pipeline logo while loading """ def __init__(self, showbase): self.showbase = showbase self.active = False def render(self): """ Inits the loading screen, creating the gui """ self.node = self.showbase.pixel2dp.attachNewNode("Loading Screen") self.node.setBin("fixed", 10) self.node.setDepthTest(False) self.showbase.setFrameRateMeter(False) w, h = self.showbase.win.getXSize(), self.showbase.win.getYSize() scaleX = w / 2560.0 scaleY = h / 1440.0 imageScale = max(scaleX, scaleY) imageW = 2560 * imageScale imageH = 1440 * imageScale self.bgFrame = DirectFrame(parent=self.node, frameColor=(0.9, 0.9, 0.9, 1.0), frameSize=(0, w, -h, 0)) self.font = loader.loadFont("Data/Font/Multicolore.otf") xOffs = (w - imageW) / 2.0 yOffs = (h - imageH) / 2.0 self.bgImage = BetterOnscreenImage(image="Data/GUI/LoadingScreen.png", parent=self.node, w=imageW, h=imageH, x=xOffs, y=yOffs) cr = 212 self.circlePart1 = BetterOnscreenImage(image="Data/GUI/LoadingCirclePart.png", parent=self.node, w=cr, h=cr, x=(w-cr) / 2, y = (h-cr) / 2 - 50) self.circlePart2 = BetterOnscreenImage(image="Data/GUI/LoadingCirclePart.png", parent=self.node, w=cr, h=cr, x=(w-cr) / 2, y = (h-cr) / 2 - 50) self.circlePart3 = BetterOnscreenImage(image="Data/GUI/LoadingCirclePart.png", parent=self.node, w=cr, h=cr, x=(w-cr) / 2, y = (h-cr) / 2 - 50) self.circlePart4 = BetterOnscreenImage(image="Data/GUI/LoadingCirclePart.png", parent=self.node, w=cr, h=cr, x=(w-cr) / 2, y = (h-cr) / 2 - 50) self.circleBg = BetterOnscreenImage(image="Data/GUI/LoadingCircleBg.png", parent=self.node, w=180, h=180, x=(w-180) / 2, y = (h-180) / 2 - 50) self.logoImage = BetterOnscreenImage(image="Data/GUI/RPIcon.png", parent=self.node, w=316, h=316, x=(w - 316) /2, y = (h-316) / 2 - 50) self.loadingText = BetterOnscreenText(text="Compiling Shaders ...", parent=self.node, x=w/2, y=h - 50, size=25, align="center", color=Vec4(0.9,0.9,0.9,0.5), mayChange=True, font=self.font) self.circlePart2._node.setR(180) self.circlePart3._node.setR(90) self.circlePart4._node.setR(-90) # self.circlePart1._node.setColorScale(Vec4(103/255.0,167/255.0,53/255.0,1.0)) self.circlePart1._node.setColorScale(Vec4(0.5,1.0,1.0,0.5)) self.circlePart2._node.setColorScale(Vec4(1.0,0.5,1.0,0.5)) self.circlePart3._node.setColorScale(Vec4(1.0,1.0,0.5,0.5)) self.circlePart4._node.setColorScale(Vec4(0.5,0.5,1.0,0.5)) interval1 = self.circlePart1.hprInterval(1.1, Vec3(0,0,360)) interval1.loop() interval2 = self.circlePart2.hprInterval(1.3, Vec3(0,0,-180)) interval2.loop() interval3 = self.circlePart3.hprInterval(1.5, Vec3(0,0,-270)) interval3.loop() interval4 = self.circlePart4.hprInterval(1.7, Vec3(0,0,270)) interval4.loop() self.showbase.graphicsEngine.renderFrame() def setStatus(self, status): """ Sets the current loading status """ self.loadingText.setText(status) self.showbase.graphicsEngine.renderFrame() def _cleanup(self, task): """ Internal method to remove the loading screen """ self.node.removeNode() self.showbase.setFrameRateMeter(True) def update(self, task): if self.active: return task.cont def hide(self): """ Tells the loading screen to hide as soon as possible """ self.showbase.taskMgr.doMethodLater(0.0, self._cleanup, "cleanupLoadingScreen")
def _initSettings(self): currentY = 10 # Render Modes self.renderModes = CheckboxCollection() # Handle to the settings s = self.pipeline.settings modes = [] features = [] register_mode = lambda name, mid: modes.append((name, mid)) register_feature = lambda name, fid: features.append((name, fid)) register_mode("Default", "rm_Default") register_mode("Metallic", "rm_Metallic") register_mode("BaseColor", "rm_BaseColor") register_mode("Roughness", "rm_Roughness") register_mode("Specular", "rm_Specular") register_mode("Normal", "rm_Normal") if s.occlusionTechnique != "None": register_mode("Occlusion", "rm_Occlusion") register_feature("Occlusion", "ft_OCCLUSION") register_feature("Blur Occlusion", "ft_BLUR_OCCLUSION") register_mode("Lighting", "rm_Lighting") register_mode("Raw-Lighting", "rm_Diffuse_Lighting") if s.enableScattering: register_mode("Scattering", "rm_Scattering") register_feature("Scattering", "ft_SCATTERING") if s.enableGlobalIllumination: register_mode("G-Illum", "rm_GI") register_mode("GI-Reflections", "rm_Reflections") register_feature("G-Illum", "ft_GI") register_feature("Update GI", "update_gi") register_mode("Ambient", "rm_Ambient") register_feature("Ambient", "ft_AMBIENT") if s.motionBlurEnabled: register_feature("Motion Blur", "ft_MOTIONBLUR") if s.antialiasingTechnique != "None": register_feature("Anti-Aliasing", "ft_ANTIALIASING") register_feature("Shadows", "ft_SHADOWS") register_feature("Color Correction", "ft_COLOR_CORRECTION") if s.renderShadows: register_mode("PSSM Splits", "rm_PSSM_SPLITS") register_mode("Shadowing", "rm_SHADOWS") register_feature("PCSS", "ft_PCSS") register_feature("PCF", "ft_PCF") register_feature("Env. Filtering", "ft_FILTER_ENVIRONMENT") self.renderModesTitle = BetterOnscreenText(text="Render Mode", x=20, y=currentY, parent=self.debuggerContent, color=Vec3(1), size=15) currentY += 80 isLeft = True for modeName, modeID in modes: box = CheckboxWithLabel(parent=self.debuggerParent, x=20 if isLeft else 158, y=currentY, chbCallback=self._updateSetting, chbArgs=[modeID, False], radio=True, textSize=14, text=modeName, textColor=Vec3(0.6), chbChecked=modeID == "rm_Default") self.renderModes.add(box.getCheckbox()) isLeft = not isLeft if isLeft: currentY += 25 self.featuresTitle = BetterOnscreenText(text="Toggle Features", x=20, y=currentY, parent=self.debuggerContent, color=Vec3(1), size=15) currentY += 80 isLeft = True for featureName, featureID in features: box = CheckboxWithLabel(parent=self.debuggerParent, x=20 if isLeft else 158, y=currentY, chbCallback=self._updateSetting, chbArgs=[featureID, True], textSize=14, text=featureName, textColor=Vec3(0.6), chbChecked=True) isLeft = not isLeft if isLeft: currentY += 25 self.demoSlider = BetterSlider(x=20, y=currentY + 20, size=230, parent=self.debuggerContent) self.demoText = BetterOnscreenText(x=20, y=currentY, text="Sun Position", align="left", parent=self.debuggerContent, size=15, color=Vec3(1.0)) currentY += 70 if s.enableGlobalIllumination: self.slider_opts = { "ao_cone_height": { "name": "AO Cone Height", "min": 0.0001, "max": 4.0, "default": 0.5, }, "ao_step_ratio": { "name": "AO Step Ratio", "min": 1.0, "max": 2.5, "default": 1.1, }, "ao_cone_ratio": { "name": "AO Cone Ratio", "min": 0.00001, "max": 2.5, "default": 1.1, }, "ao_start_distance": { "name": "AO Start Offset", "min": -2.0, "max": 2.0, "default": 0.5, }, "ao_initial_radius": { "name": "AO Initial Cone Radius", "min": 0.0001, "max": 5.0, "default": 1.2, }, } for name, opts in self.slider_opts.items(): opts["slider"] = BetterSlider(x=20, y=currentY + 20, size=230, minValue=opts["min"], maxValue=opts["max"], value=opts["default"], parent=self.debuggerContent, callback=self._optsChanged) opts["label"] = BetterOnscreenText(x=20, y=currentY, text=opts["name"], align="left", parent=self.debuggerContent, size=15, color=Vec3(1.0)) opts["value_label"] = BetterOnscreenText( x=250, y=currentY, text=str(opts["default"]), align="right", parent=self.debuggerContent, size=15, color=Vec3(0.6), mayChange=True) currentY += 50 self.initialized = True
def render(self): """ Inits the loading screen, creating the gui """ self.node = self.showbase.pixel2dp.attachNewNode("Loading Screen") self.node.setBin("fixed", 10) self.node.setDepthTest(False) self.showbase.setFrameRateMeter(False) w, h = base.win.getXSize(), base.win.getYSize() scaleX = w / 2560.0 scaleY = h / 1440.0 imageScale = max(scaleX, scaleY) imageW = 2560 * imageScale imageH = 1440 * imageScale self.bgFrame = DirectFrame(parent=self.node, frameColor=(0.9, 0.9, 0.9, 1.0), frameSize=(0, w, -h, 0)) self.font = loader.loadFont("Data/Font/Roboto-Light.ttf") self.fontHighRes = loader.loadFont("Data/Font/Roboto-Thin.ttf") self.fontHighRes.setPixelsPerUnit(120) xOffs = (w - imageW) / 2.0 yOffs = (h - imageH) / 2.0 self.bgImage = BetterOnscreenImage(image="Data/GUI/LoadingScreen.png", parent=self.node, w=imageW, h=imageH, x=xOffs, y=yOffs) self.points = [] self.pointAngles = [ 10, 25, 40, 51, 80, 103, 130, 152, 170, 198, 210, 231, 250, 274, 290, 310, 328, 352 ] random.seed(491) for angle in self.pointAngles: scale = 180.0 point = BetterOnscreenImage( image="Data/GUI/LoadingScreenPoint.png", parent=self.node, w=scale, h=scale, x=(w - scale) / 2, y=(h - scale) / 2, nearFilter=False) point._node.setR(angle) scaleZ = scale * (1.0 + random.random() * 1.2) * ( 1.0 + 0.6 * abs(math.cos(angle / 180.0 * math.pi))) point._node.setScale(scaleZ, scale, scale) sFrom, sTo = 0.7, 1.2 seq = Sequence( point._node.scaleInterval(2.0 + random.random(), Vec3(scaleZ * sFrom, scale, scale), startScale=Vec3( scaleZ * sTo, scale, scale), blendType="easeInOut"), point._node.scaleInterval(2.0 + random.random(), Vec3(scaleZ * sTo, scale, scale), startScale=Vec3( scaleZ * sFrom, scale, scale), blendType="easeInOut"), ) seq.loop() self.points.append(point) cr = 212 ct = 0 self.circlePart1 = BetterOnscreenImage( image="Data/GUI/LoadingCirclePart.png", parent=self.node, w=cr, h=cr, x=(w - cr) / 2, y=(h - cr) / 2 - ct) self.circlePart2 = BetterOnscreenImage( image="Data/GUI/LoadingCirclePart.png", parent=self.node, w=cr, h=cr, x=(w - cr) / 2, y=(h - cr) / 2 - ct) self.circlePart3 = BetterOnscreenImage( image="Data/GUI/LoadingCirclePart.png", parent=self.node, w=cr, h=cr, x=(w - cr) / 2, y=(h - cr) / 2 - ct) self.circlePart4 = BetterOnscreenImage( image="Data/GUI/LoadingCirclePart.png", parent=self.node, w=cr, h=cr, x=(w - cr) / 2, y=(h - cr) / 2 - ct) self.circleBg = BetterOnscreenImage( image="Data/GUI/LoadingCircleBgBlack.png", parent=self.node, w=180, h=180, x=(w - 180) / 2, y=(h - 180) / 2 - ct) self.logoImage = BetterOnscreenImage(image="Data/GUI/RPIcon.png", parent=self.node, w=316, h=316, x=(w - 316) / 2, y=(h - 316) / 2 - ct) self.loadingDescText = BetterOnscreenText(text="50%".upper(), parent=self.node, x=w - 50, y=h - 95, size=90, align="right", color=Vec4( 0.9, 0.9, 0.9, 0.5), mayChange=True, font=self.fontHighRes) self.loadingText = BetterOnscreenText(text="Compiling Shaders".upper(), parent=self.node, x=w - 50, y=h - 65, size=18, align="right", color=Vec4( 117 / 255.0, 175 / 255.0, 65 / 255.0, 0.2), mayChange=True, font=self.font) self.versionText = BetterOnscreenText( text="Rendering Pipeline 1.0.1".upper(), parent=self.node, x=50, y=80, size=30, align="left", color=Vec4(0.9, 0.9, 0.9, 0.5), mayChange=False, font=self.font) self.linkText = BetterOnscreenText( text="github.com/tobspr/renderpipeline".upper(), parent=self.node, x=50, y=105, size=18, align="left", color=Vec4(117 / 255.0, 175 / 255.0, 65 / 255.0, 0.2), mayChange=False, font=self.font) self.loadingBarBG = DirectFrame(parent=self.node, frameColor=Vec4(0.2, 0.2, 0.2, 0.8), frameSize=(0, w, -3, 0), pos=(0, 0, -h + 30)) self.loadingBar = DirectFrame(parent=self.node, frameColor=Vec4(117 / 255.0, 175 / 255.0, 65 / 255.0, 0.8), frameSize=(0, w, -3, 0), pos=(0, 0, -h + 30)) self.circlePart2._node.setR(180) self.circlePart3._node.setR(90) self.circlePart4._node.setR(-90) # self.circlePart1._node.setColorScale(Vec4(103/255.0,167/255.0,53/255.0,1.0)) self.circlePart1._node.setColorScale(Vec4(0.5, 1.0, 1.0, 0.5)) self.circlePart2._node.setColorScale(Vec4(1.0, 0.5, 1.0, 0.5)) self.circlePart3._node.setColorScale(Vec4(1.0, 1.0, 0.5, 0.5)) self.circlePart4._node.setColorScale(Vec4(0.5, 0.5, 1.0, 0.5)) self.circlePart1.hide() self.circlePart2.hide() self.circlePart3.hide() self.circlePart4.hide() interval1 = self.circlePart1.hprInterval(2.1, Vec3(0, 0, 360)) interval1.loop() interval2 = self.circlePart2.hprInterval(2.3, Vec3(0, 0, -180)) interval2.loop() interval3 = self.circlePart3.hprInterval(2.5, Vec3(0, 0, -270)) interval3.loop() interval4 = self.circlePart4.hprInterval(2.7, Vec3(0, 0, 270)) interval4.loop() # Hide render till we're done render.hide() self.showbase.graphicsEngine.renderFrame() self.setStatus("Initializing", 5)
def renderBuffers(self): self.buffersParent.node().removeAllChildren() posX = 0 posY = 0 for name in self.bufferOrder: target = self.buffers[name] for targetType in RenderTargetType.All: if not target.hasTarget(targetType): continue tex = target.getTexture(targetType) sizeStr = str(tex.getXSize()) + " x " + str(tex.getYSize()) if tex.getZSize() != 1: sizeStr += " x " + str(tex.getZSize()) node = DirectFrame( parent=self.buffersParent, frameColor=(1, 1, 1, 0.2), frameSize=(-self.innerPadding, self.texWidth + self.innerPadding, -self.texHeight - 30 - self.innerPadding, self.innerPadding + 15), state=DGG.NORMAL) node.setPos( 20 + posX * (self.texWidth + self.texPadding), 0, -self.paddingTop - 22 - posY * (self.texHeight + self.texPadding + 44)) node.bind(DGG.ENTER, partial(self.onMouseOver, node)) node.bind(DGG.EXIT, partial(self.onMouseOut, node)) node.bind(DGG.B1RELEASE, partial(self.showDetail, tex)) aspect = tex.getYSize() / float(tex.getXSize()) computedWidth = self.texWidth computedHeight = self.texWidth * aspect if computedHeight > self.texHeight: # have to scale tex width instead computedHeight = self.texHeight computedWidth = tex.getXSize() / float(tex.getYSize()) * \ self.texHeight img = BetterOnscreenImage(image=tex, parent=node, x=0, y=30, w=computedWidth, h=computedHeight, transparent=False, nearFilter=False, anyFilter=False) txtName = BetterOnscreenText(text=name, x=0, y=0, size=15, parent=node) txtSizeFormat = BetterOnscreenText(text=sizeStr, x=0, y=20, size=15, parent=node, color=Vec3(0.2)) txtTarget = BetterOnscreenText(text=str(targetType), align="right", x=self.texWidth, y=20, size=15, parent=node, color=Vec3(0.2)) posX += 1 if posX > self.pageSize: posY += 1 posX = 0
def _initSettings(self): """ Inits all debugging settings """ currentY = 10 # Render Modes self.renderModes = CheckboxCollection() # Handle to the settings s = self.pipeline.settings modes = [] features = [] register_mode = lambda name, mid: modes.append((name, mid)) register_feature = lambda name, fid: features.append((name, fid)) register_mode("Default", "rm_Default") register_mode("Metallic", "rm_Metallic") register_mode("BaseColor", "rm_BaseColor") register_mode("Roughness", "rm_Roughness") register_mode("Specular", "rm_Specular") register_mode("Normal", "rm_Normal") register_mode("Velocity", "rm_Velocity") if s.occlusionTechnique != "None": register_mode("Occlusion", "rm_Occlusion") register_feature("Occlusion", "ft_OCCLUSION") register_feature("Upscale Blur", "ft_UPSCALE_BLUR") register_mode("Lighting", "rm_Lighting") register_mode("Raw-Lighting", "rm_Diffuse_Lighting") if s.enableScattering: register_mode("Scattering", "rm_Scattering") register_feature("Scattering", "ft_SCATTERING") if s.enableGlobalIllumination: register_mode("GI-Diffuse", "rm_GI_DIFFUSE") register_mode("GI-Specular", "rm_GI_REFLECTIONS") register_feature("G-Illum", "ft_GI") register_mode("Ambient", "rm_Ambient") register_feature("Ambient", "ft_AMBIENT") if s.enableMotionBlur: register_feature("Motion Blur", "ft_MOTIONBLUR") if s.antialiasingTechnique != "None": register_feature("Anti-Aliasing", "ft_ANTIALIASING") register_feature("Shadows", "ft_SHADOWS") register_feature("Correct color", "ft_COLOR_CORRECTION") if s.renderShadows: register_mode("PSSM Splits", "rm_PSSM_SPLITS") register_mode("Shadowing", "rm_SHADOWS") if s.usePCSS: register_feature("PCSS", "ft_PCSS") register_feature("PCF", "ft_PCF") register_feature("Env. Filtering", "ft_FILTER_ENVIRONMENT") register_feature("PBS", "ft_COMPLEX_LIGHTING") if s.enableSSLR: register_mode("SSLR", "rm_SSLR") register_feature("SSLR", "ft_SSLR") if s.enableBloom: register_mode("Bloom", "rm_BLOOM") register_feature("Bloom", "ft_BLOOM") if s.useTransparency: register_feature("Transparency", "ft_TRANSPARENCY") if s.useDiffuseAntialiasing: register_feature("Diffuse AA", "ft_DIFFUSE_AA") # register_mode("Shadow Load", "rm_SHADOW_COMPUTATIONS") # register_mode("Lights Load", "rm_LIGHT_COMPUTATIONS") self.renderModesTitle = BetterOnscreenText(text="Render Mode", x=20, y=currentY, parent=self.debuggerContent, color=Vec3(1), size=15) currentY += 80 isLeft = True for modeName, modeID in modes: box = CheckboxWithLabel(parent=self.debuggerParent, x=20 if isLeft else 158, y=currentY, chbCallback=self._updateSetting, chbArgs=[modeID, False], radio=True, textSize=14, text=modeName, textColor=Vec3(0.6), chbChecked=modeID == "rm_Default") self.renderModes.add(box.getCheckbox()) isLeft = not isLeft if isLeft: currentY += 25 self.featuresTitle = BetterOnscreenText(text="Toggle Features", x=20, y=currentY, parent=self.debuggerContent, color=Vec3(1), size=15) currentY += 80 isLeft = True for featureName, featureID in features: box = CheckboxWithLabel(parent=self.debuggerParent, x=20 if isLeft else 158, y=currentY, chbCallback=self._updateSetting, chbArgs=[featureID, True], textSize=14, text=featureName, textColor=Vec3(0.6), chbChecked=True) isLeft = not isLeft if isLeft: currentY += 25 self.demoSlider = BetterSlider(x=20, y=currentY + 20, size=230, parent=self.debuggerContent) self.demoText = BetterOnscreenText(x=20, y=currentY, text="Sun Position", align="left", parent=self.debuggerContent, size=15, color=Vec3(1.0)) currentY += 70 if s.enableGlobalIllumination and self.enableGISliders: self.slider_opts = { "mip_multiplier": { "name": "Mip Multiplier", "min": 1.0, "max": 3.0, "default": 1.0, }, "step_multiplier": { "name": "Step Multiplier", "min": 1.0, "max": 3.0, "default": 1.0, }, } for name, opts in self.slider_opts.iteritems(): opts["slider"] = BetterSlider(x=20, y=currentY + 20, size=230, minValue=opts["min"], maxValue=opts["max"], value=opts["default"], parent=self.debuggerContent, callback=self._optsChanged) opts["label"] = BetterOnscreenText(x=20, y=currentY, text=opts["name"], align="left", parent=self.debuggerContent, size=15, color=Vec3(1.0)) opts["value_label"] = BetterOnscreenText( x=250, y=currentY, text=str(opts["default"]), align="right", parent=self.debuggerContent, size=15, color=Vec3(0.6), mayChange=True) currentY += 50 self.initialized = True