Jump to content

Recommended Posts

Posted

Okay, the background panel is just covering the whole screen, so this will fix it:
ui->background->SetColor(0, 0, 0, 0);

My job is to make tools you love, with the features you want, and performance you can't live without.

Posted
7 minutes ago, Josh said:

Okay, the background panel is just covering the whole screen, so this will fix it:
ui->background->SetColor(0, 0, 0, 0);

That made it black but there doesn't seem to be any transparency.

Posted

You need both of these lines of code:

    uicam->SetClearMode(CLEAR_DEPTH);
    ui->background->SetColor(0, 0, 0, 0);

 

  • Thanks 1

My job is to make tools you love, with the features you want, and performance you can't live without.

Posted
4 minutes ago, Josh said:

You need both of these lines of code:


    uicam->SetClearMode(CLEAR_DEPTH);
    ui->background->SetColor(0, 0, 0, 0);

Ah CLEAR_DEPTH not CLEAR_COLOR.  That worked.  Thanks.

Posted

Another update is uploaded. This fixes some bugs in the GI code when the camera moves around. It's very stable now and should be working perfectly.

Untitled.thumb.jpg.85147c39784d9bdaf679e038b7fff19a.jpg

  • Like 1

My job is to make tools you love, with the features you want, and performance you can't live without.

Posted

Another update uploaded. This fixes some problems with GI voxelization when the camera gets far from the center. Test program:

main.cpp

My job is to make tools you love, with the features you want, and performance you can't live without.

Posted

That example really lags on my GTX 1050 with 4GB of VRAM. I also find the AO fading in and out very strange and distracting. Hopefully it just you didn't get that far.

Also noticed you have doubled the default voxel resolution. Setting this back to 64 helps but makes the AO fading more obvious.  Perhaps I should be running this on a stronger card, but this PC is just more convenient. 

Cyclone - Ultra Game System - Component PreprocessorTex2TGA - Darkness Awaits Template (Leadwerks)

If you like my work, consider supporting me on Patreon!

Posted

The 98% number is very good. That framerate is probably what you can expect on that card, but it's a lot better than what you would get with RTX on the same GPU. On a 1660, which has about twice as many cores, I'm getting 85 FPS.

The effect has a limited area around the camera, but the idea is to later add additional stages, so what you see now is the first stage, and then another volume around the camera is used for further away objects.

My job is to make tools you love, with the features you want, and performance you can't live without.

Posted

I got it up to 95 FPS with one small optimization I forgot about.

My job is to make tools you love, with the features you want, and performance you can't live without.

Posted

Yeah, that's what I expect. 

One idea for that can happen older GPUs we can do a generic cubemap builder and set it to the world's skybox. This way the reflections are as good as the ones in Leadwerks, but without complicating your current reflection system. I did this with Leadwerks years ago, and hopefully now we can do this without talking to the graphics api. 

The question is if you want to have this as an engine feature or have this done by somebody like me. I really think something like a world->BakeGlobalCubemap() function would be nice.

Cyclone - Ultra Game System - Component PreprocessorTex2TGA - Darkness Awaits Template (Leadwerks)

If you like my work, consider supporting me on Patreon!

Posted

With cube map reflections, I don't know if it is possible to come up with a general-purpose routine because the results will vary wildly depending on the camera near range and the geometry of the scene. For example, if you are inside a house looking out a window, all the objects outdoors would be reflecting the interior of the house...or all the objects inside the house would be reflecting the sky they can't see.

Leadwerks was effective at solving this problem, at the cost of requiring precise placement of volumes. (I think Doom 2016 also did something very similar.)

My job is to make tools you love, with the features you want, and performance you can't live without.

Posted
2 minutes ago, Josh said:

Leadwerks was effective at solving this problem, at the cost of requiring precise placement of volumes. (I think Doom 2016 also did something very similar.)

I don't see the addition of reflection volumes a bad thing really. If it can work with the current system, I wouldn't mind the finer control for things like that. 100% automation can only get you so far imo.

I'm not sure if you'd want to consider also doing a onetime GI raytrace within those volumes like Leadwerks, but I'm mostly concerned about the reflections at the moment.

Cyclone - Ultra Game System - Component PreprocessorTex2TGA - Darkness Awaits Template (Leadwerks)

If you like my work, consider supporting me on Patreon!

Posted

Small issue with a text field, the text changes colour when pressing the 2nd letter.

WidgetIssue.png.7fe38031033ccde24f7cb38c45db788e.png

#include "UltraEngine.h"
#include "ComponentSystem.h"


int main(int argc, const char* argv[])
{
    //Get the displays
    auto displays = GetDisplays();

    //Create a window
    auto window = CreateWindow("Ultra Engine", 0, 0, 1280 * displays[0]->scale, 720 * displays[0]->scale, 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);

    auto uicam = CreateCamera(world, PROJECTION_ORTHOGRAPHIC);
    uicam->SetClearMode(CLEAR_DEPTH);
    uicam->SetRenderLayers(RENDERLAYER_1);
    uicam->SetPosition(framebuffer->size.x / 2, framebuffer->size.y / 2);
    auto ui = CreateInterface(world, LoadFont("Fonts/arial.ttf"), framebuffer->size);
    ui->SetRenderLayers(RENDERLAYER_1);
    ui->background->SetColor(0, 0, 0, 0);

    auto text_Box = CreateTextField(0, 0, 200, 50, ui->root);

    //Create a light
    auto light = CreateLight(world, LIGHT_DIRECTIONAL);
    light->SetRotation(35, 45, 0);

    //Create a box
    auto box = CreateBox(world);

    //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())
        {
            ui->ProcessEvent(WaitEvent());
        }

        world->Update();
        world->Render(framebuffer);
    }
    return 0;
}

 

Posted

It seems like 0.25 is the biggest size you should use for voxels. It looks quite good at that resolution.

We can also conclude this is not for low-end cards. I am curious to see how this would perform on something like a 1080. This is a little awkward, because in every other area the engine provides such fast performance. All my performance gains in other areas were made by shifting more work to the GPU and preventing the CPU from forming a bottleneck, but this feature is 100% GPU-limited. I will need to think about this.

Untitled.thumb.jpg.a97e2a4e50273f5491241abf10dbde93.jpg

My job is to make tools you love, with the features you want, and performance you can't live without.

Posted
1 hour ago, SpiderPig said:

Small issue with a text field, the text changes colour when pressing the 2nd letter.

I was also seeing this with the Text areas too. 

 

58 minutes ago, Josh said:

We can also conclude this is not for low-end cards. I am curious to see how this would perform on something like a 1080. This is a little awkward, because in every other area the engine provides such fast performance. All my performance gains in other areas were made by shifting more work to the GPU and preventing the CPU from forming a bottleneck, but this feature is 100% GPU-limited. I will need to think about this.

I agree that Voxel Raytracing should only before hardware that supports it. However, there should be things we can do to make sure customers with lower end cards can still get decent results. If I have to go around placing GI probes everywhere, I wouldn't really mind although it kind of goes against your design goal a bit.

Cyclone - Ultra Game System - Component PreprocessorTex2TGA - Darkness Awaits Template (Leadwerks)

If you like my work, consider supporting me on Patreon!

Posted
7 hours ago, SpiderPig said:

Small issue with a text field, the text changes colour when pressing the 2nd letter.

This is a feature that simulates losing your vision because you are typing too much. :D

  • Haha 1

My job is to make tools you love, with the features you want, and performance you can't live without.

Posted

BTW, this is actually the code you want for pixel-perfect drawing:

uicam->SetPosition(float(framebuffer->size.x) * 0.5f, float(framebuffer->size.y) * 0.5f);

With integer division the border of the text field gets cut off. The height of the framebuffer must be an odd number.

  • Thanks 1

My job is to make tools you love, with the features you want, and performance you can't live without.

Posted

I now have used WinDbg to get more details about the annoying GUARD_PAGE error and this is more detailed:

(36c8.4f68): Guard page violation - code 80000001 (first chance)
First chance exceptions are reported before any exception handling.
This exception may be expected and handled.
*** WARNING: Unable to verify checksum for GUARD_ERROR_d.exe
VCRUNTIME140D!memcpy+0x27f:
00007ffa`d786156f c4a17e7f8c0900ffffff vmovdqu ymmword ptr [rcx+r9-100h],ymm1 ds:0000014c`f5828000=00

And the StackTrace:

VCRUNTIME140D!memcpy(void)+0x27f [D:\a\_work\1\s\src\vctools\crt\vcruntime\src\string\amd64\memcpy.asm @ 385] 
GUARD_ERROR_d!UltraRender::RenderContext::TransferData+0xcbd
GUARD_ERROR_d!UltraRender::RenderContext::Render+0x557
GUARD_ERROR_d!UltraRender::RenderContext::Render+0x1f7
GUARD_ERROR_d!UltraRender::RenderingThreadManager::Update+0x1d62
GUARD_ERROR_d!UltraCore::ThreadManager::EntryPoint+0xae
GUARD_ERROR_d!UltraEngine::Thread::thread_function+0xaa
ucrtbased!thread_start<unsigned int (void * parameter = 0x0000014c`db315fe0)+0xb0 [minkernel\crts\ucrt\src\appcrt\startup\thread.cpp @ 97] 
KERNEL32!BaseThreadInitThunk+0x14
ntdll!RtlUserThreadStart+0x21

If you need more info we can arrange a remote debug session for tomorrow, today i am to busy.

  • Windows 10 Pro 64-Bit-Version
  • NVIDIA Geforce 1080 TI
Guest
This topic is now closed to further replies.
×
×
  • Create New...