No announcement yet.

Linux Game Development and a Qt Developers Rage

  • Filter
  • Time
  • Show
Clear All
new posts

  • Linux Game Development and a Qt Developers Rage

    This is in response to

    Originally posted by uid313
    What is that?
    Where can I find more information about it?

    First off I have been a Linux developer for as long as it has publicly existed Gtk "8 years" and Qt "to date" I am only pointing
    this out for when you ask your self is this possible to pull off?

    So what is this LiquidPixel thing!!!! Well its a Software Development Toolkit used to build applications like ..

    Photoshop or Gimp, Illustrator or Inkscape, Premiere, Audacity, Unity 3D,
    AfterEffects or NukeX, Mudbox or Mari, MotionBuilder, Milkshape 3D

    Using Qt.

    I know what your thinking GTFO not possible. Just hold on there and let me explain for a minute....

    The thing is not only is this possible but has been for quite a few years now, the only thing thats blocking us from having the type of
    application I just described is "Politics" and "Compromise" in the Linux community. We could literally end Microsoft, Apple, Oracle,
    Autodesk, The Foundry, Adobe, Unity3D ... In a years time "IF....IF" we would all just work together. But we are not going to and we
    won't do purely to "Politics" and "Compromise".

    The reason this thing is in toolkit form is because it seriously violates the GPL in a big way as a single application.

    The solution was to build it in toolkit form, with each plugin implementing a particular feature, none of which on there own would
    land me in any legal trouble. The application you see below is what you get, other than that you have to download all plugins via
    its embedded bittorrent client, thats setup to look kinda like an app store.

    Consequently I ended up in a "KISS", "Make Small Incremental Improvements/Commit Frequently" and "Do one thing and do it well" type situation.

    The 3D view you see below is code forked from an old Qt MilkeShape 3D clone called "Misfit Model 3D" that was abandoned years and years ago, we got the application to
    compile under Qt 4.8 and then ripped it piece by piece into Plugin form.

    So what you get is a Milkshape 3d plugin that can talk to and interact with every other plugin installed. "Note" We are using Embedded Lua in this Demo"

    Image Editing Filters The first place I started was with GraphicsMagick (MagickCore and Magick++) as it was the easiest to start with,
    combined with what apis I had there I also read the ImageMagick "scripting" page? And was able to figure out what functions I could combine to create
    other cool filters and effects. Naturally I ended up with just about every filter and effect both photoshop and gimp offered out of the box. But in plugin form!! Yaaaa.

    The cool thing is all you have to do is expose whatever library your wanting to implement as a plugin, and then using PythonQt add in the logic or you could just use C++

    Plane Qt Widget Example

    C++ Code
        PythonQtObjectPtr mainModule = PythonQt::self()->getMainModule();
        mainModule.addObject("minSatSlider", ui->minSatSlider);
    Python Code ""
    I took the Milkeshape 3D clone plugin and started working on adding OpenMesh for working with triangles. Here is what OpenMesh can do for "subdivision"
    Note: Only OpenMesh standard demos are shown.

    From there I started working on Projection Painting using a makehuman model... Note this is using Ptex and wouldnt for for Games

    Last edited by zester; 05-14-2013, 10:40 PM.

  • #2
    Lastly In regards to a Game Development Plugin we have "Horde3D, Bullet, Fmod, ..." Note at the time I used Lua for scripting I have to
    move this to Python but the Qt Widget/Plugin it done for the Renderer.

    Here is what the Lua code looked like
    -- Create Window Object
    win = Window()
    win:openWindow(800, 600, 8, 8, 8, 8, 24, 0, 0) -- Open Window, Set Max Colors, Alpha, Depth, Stencel 
    win:setWindowTitle("Hydra Example v0.0.1a") -- Set Window Title
    win:clearColor(0.50, 0.0, 0.0, 1.0) -- Set Window RGBA background color
    -- Create GraphicsEngine Object
    graphics = GraphicsEngine()
    graphics:setOption(7, 1)
    graphics:setOption(5, 0)
    graphics:setOption(8, 0)
    graphics:setOption(4, 4)
    graphics:setOption(9, 2048)
    forwardPipeRes = graphics:addResource(9, "pipelines/forward.pipeline.xml", 0)
    knightres = graphics:addResource(1, "models/knight/knight.scene.xml", 0)
    logoMatRes = graphics:addResource(4,  "overlays/logo.material.xml", 0) 
    lightMatRes = graphics:addResource(4,  "materials/light.material.xml", 0) 
    envRes = graphics:addResource(1,  "models/platform/platform.scene.xml", 0) 
    skyBoxRes = graphics:addResource(1,  "models/skybox/skybox.scene.xml", 0) 
    cam = graphics:addCameraNode(1, "Camera", forwardPipeRes)
    graphics:setNodeTransform( cam, 10, 50, 200, 0, 0, 0, 1, 1, 1 )
    env = graphics:addNodes(1, envRes)
    graphics:setNodeTransform(env, 0, 0, 0, 0, 0, 0, 5, 5, 5)
    sky = graphics:addNodes(1, skyBoxRes)
    graphics:setNodeTransform(sky, 0, 0, 0, 2, 2, 2, 500, 500, 500)
    graphics:setNodeFlags( sky, 2, true )
    knight = graphics:addNodes(1, knightres )
    graphics:setNodeTransform( knight,  0, 0, 40, 0, 0, 0, 1, 1, 1 )
    light = graphics:addLightNode(1, "Light1", lightMatRes, "LIGHTING", "SHADOWMAP" )
    graphics:setNodeTransform( light, 0, 100, 50, -30, 0, 0, 10, 10, 10 )
    graphics:setNodeParamF( light, 501, 0, 200 )
    graphics:setNodeParamF( light, 502, 0, 90 )
    graphics:setNodeParamI( light, 505, 3 )
    graphics:setNodeParamF( light, 506, 0, 0.9 )
    graphics:setNodeParamF( light, 507, 0, 0.001 )
    graphics:setNodeParamF( light, 503, 0, 0.9 )
    graphics:setNodeParamF( light, 503, 1, 0.7 )
    graphics:setNodeParamF( light, 503, 2, 0.75 )
    graphics:setNodeParamI( cam, 609, 0 );
    graphics:setNodeParamI( cam, 610, 0 );
    graphics:setNodeParamI( cam, 611, 800 );
    graphics:setNodeParamI( cam, 612, 600 );
    graphics:setupCameraView(cam, 45.0, 800 / 600, 0.5, 2048.0);
    graphics:resizePipelineBuffers( forwardPipeRes, 800, 600 );
    -- Create 3D Sound Object
    sound = Sound()
    sound:init() -- Initalize it
    sound:createSound("../content/sounds/Scoldt-From_My_Guts.mp3") -- Load Music File
    sound:setMode(0) -- Set Mode
    sound:play() -- Play Music
    sound:upDateSystem() -- Update Sound System
    -- Create Network Client Object
    networkClient = NetworkClient()
    networkClient:init("testgame","1") -- Initalize it
    networkClient:setAddress("") -- Set Network Address
    -- Start Game Loop
    i = 0
    while i == 0 do
    	win:clear(0) -- Clear Window
    	i = win:getKey(257) or win:getWindowParam(0) -- Get ESC and Window Close Button Click
    	-- Rendering code goes here --
    	graphics:render( cam )
    	win:swapBuffers() -- Swap Graphic Buffers
    Here is a screenshot of the above lua script running.

    Here are some screenshots of General Horde3D, Bullet Physics and Terrain Plugins. For those who have never seen Horde3D before


    • #3
      Certainly looks interesting.

      Hit me up if you ever need any help. I've got time on my hands.

      Maybe a demo is in order?


      • #4
        Originally posted by johnc View Post
        Certainly looks interesting.

        Hit me up if you ever need any help. I've got time on my hands.

        Maybe a demo is in order?
        Sure I just have to clean it up, right now i am have a nameing situation going on ...

        mainModule.addObject("checkbox", ui->checkBox);
        mainModule.addObject("nextButton", ui->nextButton);
        mainModule.addObject("backButton", ui->backButton);
        mainModule.addObject("stackedWidget", ui->stackedWidget);

        etc except 100 times worse lol.


        • #5
          Now another plugin I want to add, this might be above my capabilities but being this thing is designed to eat plugins to add capabilities, even if I get primitives and shaders working someone else might be able to add in a sculpting tool or two or 10. Or some seriously Houdini like particle effects. Anyways ....

          Voxel Sculpting

          These are not dense at all but it show what Point Clouds are.

          Checkout 3DCoat to see what I am talking about

          I wonder if Point Clouds, FFTW, Bullet and some shaders would be a good start for a RealFlow like Plugin?
          Last edited by zester; 05-14-2013, 10:58 PM.


          • #6
            Where are you hosting your code at?

            What is the website for your liquid pixels?


            • #7
              Originally posted by halfmanhalfamazing View Post
              What is the website for your liquid pixels?
              I don't have one yet its code base needs to be cleaned up and I have to group the plugins as there are some that implement a particular feature but are useless without
              its relating plugins "NLE Video Editing in Particular" parts of the "3D Game Modeler" etc so I will have to group the ones that are ready and offer some form of complete functionality
              and then store the ones that need companion plugins on github.

              Ill let you know, just need to do some cleaning, as of right now its a mess. The point really wasn't the Application it self but the plugins, because they can be taken and used to
              develop other standalone Qt projects and easily maintained and extended.

              Here is a video we made of an animated wallpaper for an experimental QML based desktop environment a couple of years ago using the same Swirl plugin.

              I like this particular plugin, because if you were making a movie with a space scene, I think this plugin would be good for some kind of crazy space distortion.
              or even water swirling down a drain effect?

              Example: This is a gwenview clone done in Qt only we are using the GraphicsMagick swirl plugin.


              Here is one of the Swirl then Wave plugins Note: Sorry for small pic, its a older screenshot and this was the thumbnail the larger one was removed from tinypic for some reason.
              Last edited by zester; 05-15-2013, 12:18 AM.


              • #8
                In regards to Voxel Sculpting (3DCoat)

                I forgot all about a project called PolyVox

                This would be a good start, then you would retop your voxel sculpture. Projection painting (Diffuse, Bump, Specular, ...) could
                add in that extra detail. I am wondering what the limitations of PolyVox is and how small those voxels could go or if there is a
                count limit.


                • #9
                  Pacepalm ok this thing supports 99% of the things needed for voxel sculpting out of the box and it supports Qt.

                  Ok say for example you develop a "Primary Voxel Sculpting" plugin its purpose is to combine all addition related plugins. Not saying it has to be done like this.
                  This is just a theoretical example on how development could be done in a simple manner that would allow someone to build up to a complete application. Or use
                  particular combinations of plugins.

                  You might make this piece of code into its own independent plugin that would show up as an "option" in the preference panel for
                  the voxel sculpting application.

                  QGLWidget derived
                  	// Convert a Surface Mesh to OpenGL index/vertex buffers with a Low Level Of Detail?
                  	void OpenGLWidget::setSurfaceMeshToRenderLowLOD(const PolyVox::SurfaceMesh<PolyVox::PositionMaterialNormal>& surfaceMesh);
                  Not sure if this applies to the whole scene or one selected object in particular. I would have to investigate this more and really read the docs, This was just an example. Note also this library uses
                  alot of Templated code, so in order to enable Python scripting inside LiquidPixel, a well planned abstraction layer might be needed.
                  Last edited by zester; 05-15-2013, 01:00 AM.


                  • #10
                    I literally love your approach. Your working around GPL limitations is very practical. If a plugin can easily live on its own then the application utilizing the plugin is hardly derivative work and merely a loader like a shell calling exec. I gather you already have some basic vector image manipulation plugin, how would you say it compares to inkscape performance-wise? I love inkscape but it's such a pain in the ass sometimes. The startup can take up several seconds (loading fonts ..) and manipulating complex paths takes ages. Add some filters to it and you can make a coffee between operations... I would love to build and test your stuff on vector drawing and if usable improve upon it. Oh!! I fell in love in your work for you are developing it on a black theme! Too many applications break using black themes so I am glad this one would have prime support. Where is your Paypal donate button?


                    • #11
                      Wow, this looks very promising. I wish you best luck!


                      • #12
                        Awesome. Sounds like an idea I've had for a software for a long time. Would love to look at the source code sometime. Please keep us posted on the progress.


                        • #13
                          Really cool work! Hope you put up a website and host the code on GitHub or somewhere else. This would really help out with Linux Game development!


                          • #14
                            Originally posted by gururise View Post
                            Really cool work! Hope you put up a website and host the code on GitHub or somewhere else. This would really help out with Linux Game development!
                            Thanks, and I most certainly plan on it, Hint"Linux Game Development and a Qt Developers Rage" Github for sure.

                            Ok while I am cleaning my code up, I am working on that as fast as I can but Note: I have three kids 2-6 years of age so ...... anyways.

                            I wanted to point out, in regards to image editing algorithms, there are times when particular Blur filters are more suitable than others. Alot of people make this mistake because they
                            fail to read the docs or have a basic understanding in regards to image editing.

                            Example: Adaptive Blur "Adaptively blur pixels, with decreasing effect near edges."

                            Time: Less than 1/2 a sec

                            Time: Just over 1 Sec

                            Time: Almost 60 Sec's

                            See the problem? The third screenshot's sigma is to high, now you might want to actually blur your image to this degree but read the description
                            "Adaptively blur pixels, with decreasing effect near edges."

                            We should have used the "Standard Blur Filter" if we wanted this amount of blur. And if we would have our "Time would have been less than 1/2 a sec

                            Now a note on High Dynamic Range(RAW Images), Effects, Non-Destructive Editing ..... I forked a Qt program called photivo a month back, I had
                            planed on just fixing some bugs and adjusting its ui mainly because it is another great piece of code that was abandoned.

                            But what I quickly realized was the vast treasure trove of code that I could use.

                            This is what my fork looks like.

                            Scaled the image up and down, apply effects, remove them, doesn’t matter in the end the image will retain its original quality.

                            What I wanted from this image was a bump map of his "Pores", "Wrinkles" and possibly his beard.

                            A couple of features of Photivo:

                            16-bit internal processing, color managed with LCMS2.
                            Gimp workflow integration (import and export)
                            Works with RAWs and Bitmaps (8 bit bitmaps are transformed and processed with 16 bit, which usually gives better results).
                            CA correction, Green equilibration, line denoise, badpixel reduction, wavelet denoise, median filters on RAW data.
                            Perspective correction (tilt and turn), distorsion and geometry (also defish) correction
                            Demosaicing: Bilinear, VNG, VNG4, PPG, AHD, DCB, mod. AHD, VCD, LMMSE, AMaZE (needs work!).
                            RGB, R, G, B, L*, a*, b*, Texture, Detail, Denoise, Hue, Saturation, L* by Hue, Base curve.
                            Tonemapping (Reinhard 05 (RGB Brighten), Fattal et al. (Dynamic range compress)).
                            Several local contrast filters (HiRaLoAm (Local contrast), texture contrast, local contrast stretch).
                            Sharpen (Edge avoiding wavlets, USM, Highpass, Inverse diffusion, Wiener filter, Gradient sharpen).
                            Denoise, seperately on Luminance and Color (Edge avoiding wavelets, GreyCStoration, Wavelet, Masked bilateral, Pyramid) and via a hue or luminance sensitive denoise curve.
                            Adaptive saturation.
                            Film grain simulation.
                            Black and white conversion.
                            (Split) Toning.
                            Cross processing.
                            Gradual overlay (like Cokin(R) GND filters).
                            Softglow / Orton.
                            Texture overlay (external texture)
                            Fake tilt/shift, toy effect
                            Batch mode

                            If your familiar with Qt's capability’s, combined with GraphicsMagick(MagickCore & Magick++) in addition to what code photivo gives us. You might see where we just kicked Adobe in the balls, and Pimp slapped Gimp(No disrespect intended to Gimp)
                            Last edited by zester; 05-15-2013, 03:05 PM.


                            • #15
                              Originally posted by zester View Post
                              See the problem?

                              It looks like the default Ubuntu desktop wallpaper.