Jump to content

reepblue

Developers
  • Posts

    2,510
  • Joined

  • Last visited

Posts posted by reepblue

  1. You know, that makes most of the buttons on the left side redundant. Just have one for CSG edit and another one for models. 

    CSG should be static and for level creation while making models is good for actors and components. This could save a collapsing step of the brush has an actor assigned to it. But when it comes to collision clips and triggers, I think the CSG tools are better suited.

    • Like 1
  2. 12 hours ago, Josh said:

    There is a program called "Trenchbroom" that is popular in Quake modding now. It has some nice ideas for 3D CSG editing.

    What ideas are you interested in? I still prefer the Hammer way of doing things but I know people will argue with me. Might be the best to adopt the best of two worlds.

  3. This is really awesome. There's virtually no need to pull up materials for models now. 

    image.thumb.png.44ed1528b3d49aff58c02979ae378941.png

    I Love the drop down to select new materials, but I found that loading in a lot of new textures and materials save within the session and can get a bit busy. I assume one the assets used are saved, and by instinct, right clicked on the material I wanted to delete only to find no functionality was present. I stumbled between switching to the mesh and material modes, but I think I'll get used to it.

    I really adore the smooth scrolling, but it only seems to happen when the right mouse button is down. Please fix. Other than that, you don't need A and B anymore, this is so much better. 

    • Like 1
  4. Understandable, but that would be wonderful if that gets added. I really don't want to touch Vulkan shaders for simple effects.

    Speaking of which, do you still have texture scrolling and rotation in the shader? Options for that should be in the material editor too.

    If I were to make Cyclone on Ultra, I would need material variants and texture scrolling and rotation. The cyclones themselves are tricky because I rotate 2 sheets at a different rate so that would need a custom shader unless I were to animate them in the DDS texture. This is how Valve did their portals before adopting the current look as each texture was 200mb animating at 30 fps, and it needed to run on the Xbox 360. If I were to animate my cyclones, I probably would try to compress it to basis, or simply not worry about it. 

  5. Hey, would it be possible for a gltf to support multiple diffuse textures or multiple sets without copying the model? Like you have a barrel model but you have a texture where it's blue but another one that's red with a fire icon on it  It would be nice to have one model with all the variations. 

    Another example: Portal 2 has multiple skins for it's weighted storage cube. There's a clean skin, clean activated, dirty, dirty activated, etc. Having this support would also make it easier to change emission colors without a shader edit like I had to do in Cyclone. Since shaders are more complicated in Ultra, I would like to just change one or more texture sheets for that instance of the model.

  6. 1 hour ago, Josh said:

    This can actually get rid of the need for prefabs because every engine property can be embedded in the glTF. However, if the model is resaved in another program those properties will probably be lost.

    Not liking this idea since I used prefabs for rooms,  gameplay elements and light fixtures.

    Actually, if you can just load multiple scenes into the world as groups keeping all actor logic, that would be great.

  7. I think having multiple windows is better than tabs. I easily loose what I'm working on and like you said, is annoying to see changes. You currently have no functionality to delete or rearrange the tabs so it's even more annoying. Removing it will also save you work for the time being.

  8. Since there wasn't a thread created for this, might as well start one.

     

    Base Window:

    First bug: the splash screen doesn't display correctly.

    image.thumb.png.db6a714e545b82541b1ab9089823559f.png

    Second, the window position isn't being saved correctly. The window's position increases by 31 on both the x and y values when first setting it to 0 by modifying the Settings.json file. This will eventually create the window off screen, 

     

    Missing the + icon here.

    image.png.0246218e92997813229eae421faeb102.png

     

    Some images and icons will be drawn upside down. 

    image.thumb.png.b33656b69d721f92b26f71ddb6cc6953.png

    image.thumb.png.22ed37cf38899d9e131033af16240472.png

    When browsing through packages, folders are included as blank files. 

    image.thumb.png.8a551535f90604fa5cef59a6f2b64f30.png

    Files from here don't draw correctly.

    image.thumb.png.5f6e546dc71865b55469614ba2043800.png

    There's no preview thumbnail for .tex files. I think this is because Windows Explorer doesn't make one, but it's still a bummer. Opening them seem to work fine, but I did have one texture (Beam01.tex) that caused an Assert error.

    image.thumb.png.e519c0034b7f3abc10a649501877d6e0.png

    Model Editor:

    Models load and program acts as expected, However, when interacting with the UI, the model stops drawing until the viewport is selected again.

    image.thumb.png.78b351095543caf45d84073c62cc4959.png

    image.thumb.png.1992dfc7157db68a6ccc901c8c140487.png

    This is also missing a collision shape builder/importer, but that's probably on the to-do list. 

    Material Browser:

    The sphere's UVs aren't correct, and the viewport suffers the same issue as the model viewer.

    image.thumb.png.c22f2995438ad886276815057672c6fe.png

    Also, a horizonal slider would be nice. And please add back in Zoom in the material browser like you had in Leadwerks.

    The big bugs are the window positioning and the issues with the 3D viewport. Other than that, this seems usable in its current state. 

    • Like 3
    • Thanks 1
  9. Running through old samples we were testing during the beta and noticed that this example doesn't have the framebuffer fill the window anymore after it's been "resized".

    #include "UltraEngine.h"
    #include "ComponentSystem.h"
    
    using namespace UltraEngine;
    
    int main(int argc, const char* argv[])
    {
        //Get the displays
        auto displays = GetDisplays();
    
        //Create a window
        auto window = CreateWindow("Ultra Engine - Normal", 0, 0, 1280, 720, displays[0], WINDOW_CENTER | WINDOW_TITLEBAR);
    
        //Create a world
        auto world = CreateWorld();
    
        //Create a framebuffer
        auto framebuffer = CreateFramebuffer(window);
    
        //Create a camera
        auto camera = CreateCamera(world);
        camera->SetClearColor(0.125);
        camera->SetFov(70);
        camera->SetPosition(0, 0, -3);
        camera->SetViewport(200, 0, framebuffer->size.x - 200, framebuffer->size.y);
    
        auto uiCamera = CreateCamera(world, PROJECTION_ORTHOGRAPHIC);
        uiCamera->SetRenderLayers(2);
        uiCamera->SetClearMode(CLEAR_DEPTH);
        uiCamera->SetPosition((float)framebuffer->size.x * 0.5f, (float)framebuffer->size.y * 0.5f, 0);
        auto ui = CreateInterface(world, LoadFont("Fonts/arial.ttf"), iVec2(200, framebuffer->size.y));
        ui->SetRenderLayers(2);
    
        auto sz = ui->root->ClientSize();
        auto listbox = CreateListBox(5, 5, sz.x - 10, 200, ui->root, LISTBOX_DEFAULT)->As<ListBox>();
        auto tabber = CreateTabber(5, 205, sz.x - 10, sz.y - 205, ui->root)->As<Tabber>();
        tabber->AddItem("Settings", true);
        tabber->AddItem("Output");
        tabber->SetLayout(1, 0, 1, 1);
    
        for (int i = 0; i < 100; i++)
        {
            listbox->AddItem("Item " + String(i));
        }
    
        //Create a light
        auto light = CreateBoxLight(world);
        light->SetRotation(35, 45, 0);
        light->SetRange(-10, 10);
    
        //Create a box
        auto box = CreateBox(world);
        box->SetColor(0, 0, 1);
    
        //Entity component system
        auto actor = CreateActor(box);
        auto component = actor->AddComponent<Mover>();
        component->rotation.y = 45;
    
        //Main loop
        while (window->Closed() == false and window->KeyDown(KEY_ESCAPE) == false)
        {
            while (PeekEvent())
            {
                auto ev = WaitEvent();
                ui->ProcessEvent(ev);
    
                switch (ev.id)
                {
                case UltraEngine::EVENT_WINDOWCLOSE:
                    if (ev.source == window) exit(0);
                    break;
    
                default:
                    break;
                }
            }
    
            // Rebuild the window.
            if (window->KeyDown(KEY_SPACE))
            {
                static bool bSwapped = false;
                framebuffer = NULL;
                window = NULL;
    
                if (!bSwapped)
                {
                    // Make it a tad bigger
                    window = CreateWindow("Ultra Engine - Resized", 0, 0, 1400, 800, displays[0], WINDOW_CENTER | WINDOW_TITLEBAR);
                    framebuffer = CreateFramebuffer(window);
                }
                else
                {
                    window = CreateWindow("Ultra Engine - Normal", 0, 0, 1280, 720, displays[0], WINDOW_CENTER | WINDOW_TITLEBAR);
                    framebuffer = CreateFramebuffer(window);
                }
    
                // Reposition the camera.
                uiCamera->SetPosition((float)framebuffer->size.x * 0.5f, (float)framebuffer->size.y * 0.5f, 0);
    
                //Resize the interface
                ui->SetSize(iVec2(200, framebuffer->size.y));
    
                bSwapped = !bSwapped;
            }
    
            world->Update();
            if (framebuffer) world->Render(framebuffer);
        }
        return 0;
    }

    image.thumb.png.00856ff6ef0c22651ece6ec8e43a446a.png

  10. 8 hours ago, Josh said:

    I also use Ultra App Kit for simple programs that don't need 3D.

    While this will cut compile times down, it'll go against the idea of the applications using the same cpp files. UAK changed some functions and has several old bugs that have been fixed in the engine. I'm also sure UAK will not load the most recent plugins. 

    8 hours ago, Josh said:

    Another thing you can do is just make a program act different based on command line params. I think I am going to make the editor call launch its own executable to generate thumbnail images. This saves me from having to include two large EXEs.

    Thought of that, but I can see it becoming a mess if you wish to build more than a few applications. I also have a remote console that sends commands to the game application with enet and I'd like that to be its own application. 

    I guess what I can do is make any tool that is just a simple main.cpp (Like an image converter) a default Ultra Project. Anything that has to interact or needs to reference a system (Like the input system) will be code shared in the game project made with premake. I can probably get away with the action mapper application being the same application as the game, but the remote console needs to be a standalone application. I'll just put it in the engine's "Tools" folder instead of my game's folder. 

    My input library will just be merged into the game code using the engine's polling for input. For sound, I might not continue using FMOD unless I can get events and raw sounds to play correctly together without calling OpenAL. Although having a daw interface for games was really nice, the sound implementation is much better in Ultra so I don't think I need a replacement. Also, the less decencies, the better.

  11. Ok, this is what I came up with fitting the existing mold. 

    I created a new directory called "Premake" in the Project root's folder. This holds Premake and the lua scripts for each project. While each script is literally the same thing minus the name of the code project due to limitations, I guess it's good if you want to add custom defines to one project. 

    Premake builds the Visual Studio projects and solution under "Projects" like Leadwerks had it set up. I didn't divide project types by platform as that would take more code and I don't think it's necessary. The build objects and the hidden .vs folder will also be created under the Projects directory making it really easy to omit when committing to git and svn repositories. 

    All source code will still remain under "Source". I'm still thinking about how to arrange shared files and project specific ones. Right now, I have it so files like the cpp needed for the precompiled header and the needed for macOS under the root directory and each separate project will have its own private folder.

    I didn't battle test this yet, but it looks promising so far.  

  12. I was poking around in the engine headers and noticed that headers for the Hub (Client) and Editor are in the include folder with the rest of the engine. It got me thinking if there was a better way of handling multiple applications within the same project. 

    For Cyclone, I use premake to build everything and have it set up like Source. Every product has it's own folder minus the public folder which has shared headers and code.

    image.png.fe98e55c93c5f7542fe0eed5119b82ea.png

    This works in the Cyclone repo, as only the game links with Leadwerks, and I use UAK for the action mapper application since I needed a Win32 binary.  The rest rely on the standard library and WinAPI. However, when I translated this workflow to with Ultra Engine in-mind, everything was going great until Ultra Engine was introduced. 

    It became hard to decipher what was using the engine library and what wasn't. I also wanted to create functions and classes that can be used by multiple applications without it being hpp files and preprocessor locks to prevent code from compiling if it's ever built by a non-Ultra application. There's now a lot more of redundant code with my core library and the engine having the same quality of life methods as the engine, plus I no longer need to build ZipLib as the engine has it already.

    The only thing I would need to merge is my input library to be compatible with the Engine's enum values. but that should be really easy to do. Plus, the code will be more C++ friendly as it'll not be a dynamic library, 

    What I'm asking is if there's a good workflow (Such has how the Hub and Editor co-exist) to have multiple applications share one Ultra Engine Project. I don't want to have multiple projects to keep up to date, nor I want to copy and paste code across. 

    I know I could just copy the Visual Studio project but that's a pain in the butt and my root directory will just be filled with IDE Projects. Maybe we should go back to dedicated Projects directories like how we had it in Leadwerks? 

  13. 9 minutes ago, Josh said:

    I am talking more about image processing. It can remove the lighting from some photographs and gives you a look that is closer to the true color of a surface. I think it is done by first applying a Guassian blur and then some other operation.

    Ahh ok. It's just that the black splotches went away from what look like are from gaps made by the point light radius values. 

×
×
  • Create New...