Exemple #1
0
    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()
Exemple #3
0
    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
Exemple #9
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