Josh Posted August 16, 2022 Author Share Posted August 16, 2022 Added UPX compression on release builds. As you can see, the changes to the Visual Studio project just slide right into your existing projects: 1 My job is to make tools you love, with the features you want, and performance you can't live without. Link to comment Share on other sites More sharing options...
Josh Posted August 16, 2022 Author Share Posted August 16, 2022 C++ project template is now updated to use the entity component system, which I have not used in a year but it seems to work perfectly: //Create a box auto box = CreateBox(world); //Entity component system auto actor = CreateActor(box); auto component = actor->AddComponent<Mover>(); component->rotation.y = 45; 1 1 My job is to make tools you love, with the features you want, and performance you can't live without. Link to comment Share on other sites More sharing options...
trashcanuseful Posted August 16, 2022 Share Posted August 16, 2022 My faith is stronger than ever, I start praying 1 My job is to make you see useful things in trash. Link to comment Share on other sites More sharing options...
reepblue Posted August 16, 2022 Share Posted August 16, 2022 I was pulling old code from previous alphas last night to see what still worked. I noticed the canvas system was stubbed out when I wanted to refresh myself how to add text to the screen. I'm under the impression that this will be unavailable until official early access release? I still have nvcompress and tga2dot for making textures until the official engine tools ship. I'm under the impression you've already made such tools and hopefully we can see those shortly. Still, I'm very happy to see the fruits of your labor again after so long. 1 Cyclone - Ultra Game System - Component Preprocessor - Tex2TGA - Darkness Awaits Template (Leadwerks) If you like my work, consider supporting me on Patreon! Link to comment Share on other sites More sharing options...
Josh Posted August 16, 2022 Author Share Posted August 16, 2022 Canvas system was thrown away. I realized as I added more and more 2D rendering features, I was really just recreating a limited version of the 3D pipeline. There are no 2D graphics in Ultra Engine. There's just orthographic cameras. If you want 2D graphics on top of 3D graphics, create a second camera, set the projection more to orthographic, and set the clear mode to only clear the depth buffer. There's a command called Entity::SetRenderLayer() that lets you control which camera can render which entity. So you can have all your entities in one world, with a the 2D camera set to only render entities with the RENDERLAYER2 flag. You can render post-processing effects on top of or underneath the 2D graphics, so for example your health bar doesn't need to show a bloom effect unless you want. This is something Leadwerks and earlier versions of Ultra could not handle. 2 My job is to make tools you love, with the features you want, and performance you can't live without. Link to comment Share on other sites More sharing options...
reepblue Posted August 16, 2022 Share Posted August 16, 2022 Very informative, but I just want to create a simple fps counter and plot 5 dots on the screen for the time being. (Which I assume is just 5 box models with the camera in orthographic view.) Does rendering widgets in the frame buffer work as of now? Some insight on that would be helpful but I'll be sure to look into it more tonight. Cyclone - Ultra Game System - Component Preprocessor - Tex2TGA - Darkness Awaits Template (Leadwerks) If you like my work, consider supporting me on Patreon! Link to comment Share on other sites More sharing options...
Josh Posted August 16, 2022 Author Share Posted August 16, 2022 You still have sprites. Sprites are just another entity, but they can be convenient for 2D stuff. If you just want FPS I recommend FRAPS. My job is to make tools you love, with the features you want, and performance you can't live without. Link to comment Share on other sites More sharing options...
Josh Posted August 16, 2022 Author Share Posted August 16, 2022 Sprites can be used for images or text: https://www.ultraengine.com/learn/CreateSprite?lang=cpp 1 My job is to make tools you love, with the features you want, and performance you can't live without. Link to comment Share on other sites More sharing options...
SpiderPig Posted August 16, 2022 Share Posted August 16, 2022 Will we be able to update the client app from with the app itself in the future? Link to comment Share on other sites More sharing options...
reepblue Posted August 17, 2022 Share Posted August 17, 2022 9 hours ago, Josh said: Canvas system was thrown away. I realized as I added more and more 2D rendering features, I was really just recreating a limited version of the 3D pipeline. There are no 2D graphics in Ultra Engine. There's just orthographic cameras. If you want 2D graphics on top of 3D graphics, create a second camera, set the projection more to orthographic, and set the clear mode to only clear the depth buffer. There's a command called Entity::SetRenderLayer() that lets you control which camera can render which entity. So you can have all your entities in one world, with a the 2D camera set to only render entities with the RENDERLAYER2 flag. You can render post-processing effects on top of or underneath the 2D graphics, so for example your health bar doesn't need to show a bloom effect unless you want. This is something Leadwerks and earlier versions of Ultra could not handle. No dice. #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", 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); camera->SetFreeLookMode(true); //Create a light auto light = CreateLight(world, LIGHT_DIRECTIONAL); light->SetRotation(35, 45, 0); //Create Interface (Crashes) //auto gui = CreateInterface(world, iVec2(framebuffer->size.x, framebuffer->size.y)); //auto panel = CreatePanel(0, 0, 100, 100, gui->GetBase()); //auto text = CreateLabel("Hello Ultra Engine!", 2, 2, 100, 32, panel); //Create HUD auto hud_camera = CreateCamera(world); hud_camera->SetProjectionMode(PROJECTION_ORTHOGRAPHIC); hud_camera->SetClearMode(CLEAR_DEPTH); hud_camera->SetRenderLayers(RENDERLAYER_2); auto font = LoadFont("Fonts/arial.ttf"); auto test_sprite = CreateSprite(world, font, "Hello Ultra Engine!", 1); test_sprite->SetRenderLayers(RENDERLAYER_2); //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_DELETE) == false) { world->Update(); camera->UpdateControls(window); world->Render(framebuffer); } return 0; } If I comment the SetRenderLayers call, the text doesn't render properly like I forgot to set the blend mode or something. Howver, no such call exists. Edit: Ok, I got it to render to the screen by setting the projection mode at creation. But the text is not drawing correctly. //Create HUD auto hud_camera = CreateCamera(world, PROJECTION_ORTHOGRAPHIC); hud_camera->SetRenderLayers(RENDERLAYER_2); //hud_camera->SetProjectionMode(PROJECTION_ORTHOGRAPHIC); hud_camera->SetClearMode(CLEAR_DEPTH); Cyclone - Ultra Game System - Component Preprocessor - Tex2TGA - Darkness Awaits Template (Leadwerks) If you like my work, consider supporting me on Patreon! Link to comment Share on other sites More sharing options...
reepblue Posted August 17, 2022 Share Posted August 17, 2022 12 hours ago, Josh said: C++ project template is now updated to use the entity component system, which I have not used in a year but it seems to work perfectly: //Create a box auto box = CreateBox(world); //Entity component system auto actor = CreateActor(box); auto component = actor->AddComponent<Mover>(); component->rotation.y = 45; Making custom components doesn't seem to work correctly. The solution doesn't call the preprocessor application and when it does, I get this error. Quote operable program or batch file. 1>C:\Program Files\Microsoft Visual Studio\2022\Community\MSBuild\Microsoft\VC\v170\Microsoft.CppCommon.targets(147,5): error MSB3073: The command "C:/Users/reepb/Documents/Ultra Engine/Client\\Tools\\preprocessor.exe 1>C:\Program Files\Microsoft Visual Studio\2022\Community\MSBuild\Microsoft\VC\v170\Microsoft.CppCommon.targets(147,5): error MSB3073: :VCEnd" exited with code 9009. Also, I have to include the ComponentSystem.h with my components, but for some reason, the Mover doesn't need to. Sorry for turning this thread into a bug report collection.. Cyclone - Ultra Game System - Component Preprocessor - Tex2TGA - Darkness Awaits Template (Leadwerks) If you like my work, consider supporting me on Patreon! Link to comment Share on other sites More sharing options...
Josh Posted August 17, 2022 Author Share Posted August 17, 2022 8 hours ago, SpiderPig said: Will we be able to update the client app from with the app itself in the future? I don't think so, but once it stabilizes updates will be very rare. 1 My job is to make tools you love, with the features you want, and performance you can't live without. Link to comment Share on other sites More sharing options...
Josh Posted August 17, 2022 Author Share Posted August 17, 2022 Here is an example of 3D + 2D, although the text transparency is not working for some reason: #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", 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); //Create a light auto light = CreateLight(world, LIGHT_DIRECTIONAL); light->SetRotation(35, 45, 0); //Create a box auto box = CreateBox(world); auto cam2 = CreateCamera(world); cam2->SetClearMode(CLEAR_DEPTH); cam2->SetProjectionMode(PROJECTION_ORTHOGRAPHIC); cam2->SetRenderLayers(RENDERLAYER_1); cam2->SetRange(-1, 1); auto font = LoadFont("Fonts/arial.ttf"); auto sprite = CreateSprite(world, font, "Hello world!", 48 * displays[0]->scale); sprite->SetRenderLayers(RENDERLAYER_1); //Main loop while (window->Closed() == false and window->KeyDown(KEY_ESCAPE) == false) { world->Update(); world->Render(framebuffer); } return 0; } 1 My job is to make tools you love, with the features you want, and performance you can't live without. Link to comment Share on other sites More sharing options...
klepto2 Posted August 17, 2022 Share Posted August 17, 2022 I get this when running the 2d sample. I get a bunch of shader module errors: Loading shader family "Shaders/PBR.json" Error: Failed to load shader module "Shaders/DepthPass.frag.spv" Error: Failed to load shader module "Shaders/DepthPass_Masked.vert.spv" Error: Failed to load shader module "Shaders/PBR_dynamic.vert.spv" Error: Failed to load shader module "Shaders/PBR_Animated_dynamic.vert.spv" Error: Failed to load shader module "Shaders/DepthPass_dynamic.vert.spv" Error: Failed to load shader module "Shaders/DepthPass_Animated_dynamic.vert.spv" Error: Failed to load shader module "Shaders/DepthPass_Masked_dynamic.vert.spv" Loading font "Fonts/arial.ttf" Loading shader family "Shaders/Unlit.json" Error: Failed to load shader module "Shaders/Unlit_transparency.frag.spv" Error: Failed to load shader module "Shaders/Unlit_Tess.frag.spv" Error: Failed to load shader module "Shaders/Unlit_Masked.frag.spv" Error: Failed to load shader module "Shaders/Unlit_Masked_Transparency.frag.spv" Error: Failed to load shader module "Shaders/Unlit_Tess_Masked.frag.spv" Error: Failed to load shader module "Shaders/Unlit_Tess_dynamic.frag.spv" Error: Failed to load shader module "Shaders/Unlit_Tess_Masked_dynamic.frag.spv" Windows 10 Pro 64-Bit-Version NVIDIA Geforce 1080 TI Link to comment Share on other sites More sharing options...
Josh Posted August 17, 2022 Author Share Posted August 17, 2022 That is correct. Something is wrong with the transparency right now. The shader families are HUGE and some combinations of shaders are currently missing. My job is to make tools you love, with the features you want, and performance you can't live without. Link to comment Share on other sites More sharing options...
aiaf Posted August 17, 2022 Share Posted August 17, 2022 I would like to help testing, but only linux i ditched windows completely. 1 I made this with Leadwerks/UAK: Structura | Stacky Desktop Edition Website: Binary Station Link to comment Share on other sites More sharing options...
Josh Posted August 17, 2022 Author Share Posted August 17, 2022 Here how compute shaders will work. You add a hook to the world for rendering with this command: virtual void AddHook(const HookID id, void Hook(const VkCommandBuffer, shared_ptr<Object>), shared_ptr<Object> extra); So your code will look like this: void func(VkCommandBuffer cbuffer, shared_ptr<Object> extra) { //Vulkan code } world->AddHook(HOOKID_RENDER, someobjectthatholdsallmy info); You can call Texture::GetHandle() and ShaderModule::GetHandle() to get the VkImage and VkShaderModule objects associated with these objects. These two GetHandle() methods MUST ONLY BE CALLED FROM WITHIN THE RENDER HOOK, which only gets called on the rendering thread. Any textures of shader modules you use in the rendering hook should be passed as member of the custom object you supply in the "extra" parameter. The engine will automatically bind the "extra" object at the time this is called, so it won't get deleted if it goes out of scope while the frame it is being used in is still rendering. So you will have access to the Vulkan command buffer that is currently being recorded, texture image handles, and the shader module handles. Is there anything else you need? 1 My job is to make tools you love, with the features you want, and performance you can't live without. Link to comment Share on other sites More sharing options...
Josh Posted August 17, 2022 Author Share Posted August 17, 2022 Also adding Texture::GetViewHandle() to get the imageview object. My job is to make tools you love, with the features you want, and performance you can't live without. Link to comment Share on other sites More sharing options...
klepto2 Posted August 17, 2022 Share Posted August 17, 2022 I will check it out and report back later Windows 10 Pro 64-Bit-Version NVIDIA Geforce 1080 TI Link to comment Share on other sites More sharing options...
reepblue Posted August 17, 2022 Share Posted August 17, 2022 Curious, can this render layering system work for view models if the viewmodel camera is parented to the main camera clearing the depth buffer? Since both the player and the model are in the same world and location, I don't see why this couldn't work with the lighting system. If lights are a problem, I could just instance every light in my scene to render on the viewmodel layer. I want the viewmodel on its own layer so the player can have their fov at 90 and not have the viewmodel distort. I'd have to give it a go tonight. Cyclone - Ultra Game System - Component Preprocessor - Tex2TGA - Darkness Awaits Template (Leadwerks) If you like my work, consider supporting me on Patreon! Link to comment Share on other sites More sharing options...
Josh Posted August 17, 2022 Author Share Posted August 17, 2022 12 minutes ago, reepblue said: Curious, can this render layering system work for view models if the viewmodel camera is parented to the main camera clearing the depth buffer? Since both the player and the model are in the same world and location, I don't see why this couldn't work with the lighting system. I'd have to give it a go tonight. Yes, that will work. That could be used to solve the issue of incomplete information for refraction in transparency, because the view model would get rendered after the transparency effect is drawn. 1 My job is to make tools you love, with the features you want, and performance you can't live without. Link to comment Share on other sites More sharing options...
Josh Posted August 17, 2022 Author Share Posted August 17, 2022 20 minutes ago, reepblue said: I want the viewmodel on its own layer so the player can have their fov at 90 and not have the viewmodel distort. That's kind of interesting. Is this a common practice? I always thought the visible gun scale/angles were kind of hard to replicate from what I saw in AAA games. https://totalcsgo.com/commands/fov-and-viewmodel#change-fov My job is to make tools you love, with the features you want, and performance you can't live without. Link to comment Share on other sites More sharing options...
reepblue Posted August 17, 2022 Share Posted August 17, 2022 I once followed a tutorial in a different engine where you could create a shader that repositions the vertices of the model to always reflect the preferred fov. By default it looks ugly and I hate that I spent hours getting the placement of the model just right for Cyclone only to see screenshots of it distorted because the player wanted their for at 90 like they were playing Quake Arena or TFC. This just looks really ugly, and IDK why people are ok with this trade off. I also think starting in Portal 2, Valve changed the pickup system in that game to have picked up props be rendered on the view model layer. So that's also something to look into. Cyclone - Ultra Game System - Component Preprocessor - Tex2TGA - Darkness Awaits Template (Leadwerks) If you like my work, consider supporting me on Patreon! Link to comment Share on other sites More sharing options...
Josh Posted August 17, 2022 Author Share Posted August 17, 2022 SDK is now updated with fixed basic transparency, so text rendering works, and the hook stuff for custom rendering. Note that Vulkan validation layers are currently disabled for a reason I don't want to explain in detail right now. 1 My job is to make tools you love, with the features you want, and performance you can't live without. Link to comment Share on other sites More sharing options...
Josh Posted August 17, 2022 Author Share Posted August 17, 2022 @reepblueIf you make the second camera for the weapon have a minimal far range it will prevent a lot of unneeded data from being uploaded to the GPU each frame. 1 My job is to make tools you love, with the features you want, and performance you can't live without. Link to comment Share on other sites More sharing options...
Recommended Posts