SharkyUK
ClioSport Club Member
I don't know if there are many coders/programmers/software engineers on here but I thought I'd stick up a thread where said people might be interested in sharing stuff they are working on at home. I have seen similar threads on other forums and thought I'd try it here.
Anyone? Anything interesting to share? Any tech stack goes, projects big or small.
I'll kick things off with a project I started on a month or two ago. With time currently on my hands I decided to make a prototype framework and application for command and control, tactical/mission planning, wargaming, modelling & simulation, situational awareness, and some other bits. It's a very early prototype and - naturally - I started on the fun bit (the renderer) once I had laid down the architecture for the core system.
It's a Windows desktop application and the application framework is C# (.NET10) and the UI uses WinUI3 (WindowsAppSDK). Everything else (rendering, streaming, geo-processing, entity processing, etc.) is C++ for optimal performance.
The 3D (and 2D) map views are fully and accurately geo-located, support various projects/datums and ellipsoid model conversions, and render on a dedicated render thread (so as not to block the UI and/or worker threads). It runs a DirectX12 renderer at present, although the system will be renderer agnostic. I have a Vulkan renderer in the pipeline but that will take a little while because Vulkan is a pain in the ass. The renderer supports map data layering and elevation data layering. I also implemented atmospheric scattering and aerial perspective to model atmosphere/particulate interaction; basically to make things look pretty. As the sun moves through the sky, it creates nice sunsets and sunrises as we see courtesy of real-world phenomena.
I inadvertently ended up with a full planet renderer!
I can fly from outer space down to the ground with millimetre accuracy (although the rendered view fidelity very much depends on the resolution of the layered map and elevation data available). Map data (elevation and imagery) is streamed on demand and intelligently cached. The streaming, loading, and conversion of data is handled by separate worker threads that do not impact on the renderer or UI threads. Once the workers have prepared the data, they make it available for consumption by the renderer/GPU. All this is done with balancing and level-of-detail taken into account.
I have a coarse worldwide data set in use for elevation data and imagery, but higher fidelity data sets for the UK. At present, I am using ~1m per pixel resolution LIDAR derived elevation data across the UK, and various imagery sets of different resolutions draped over the terrain (down to 1m street level in some cases). I am limited to what is freely available in the public domain.
The renderer can happily handle hundreds of thousands of entities displayed on the map, although that many is overkill in terms of real world use.
More recently, I have started to add the text/glyph rendering. A vector font is rendered into a high-resolution bitmap mask and a distance field computed. I can then render text/glyphs using a signed distance field texture on the GPU.
Performance is solid and the technique keeps vector-like edges nice and crisp and text anti-aliased at arbitrary scales.
The prototype is designed so as not to be reliant on an Internet connection, and needs to be quickly deployable, scalable and flexible. Right now I am keeping everything running within an ~8ms frame time (120 FPS) but don't expect that to remain the case.
EDIT: All the APP-6 symbols are correctly built and rendered based on NATO Joint Military Symbology standards.
Anyone? Anything interesting to share? Any tech stack goes, projects big or small.
I'll kick things off with a project I started on a month or two ago. With time currently on my hands I decided to make a prototype framework and application for command and control, tactical/mission planning, wargaming, modelling & simulation, situational awareness, and some other bits. It's a very early prototype and - naturally - I started on the fun bit (the renderer) once I had laid down the architecture for the core system.
It's a Windows desktop application and the application framework is C# (.NET10) and the UI uses WinUI3 (WindowsAppSDK). Everything else (rendering, streaming, geo-processing, entity processing, etc.) is C++ for optimal performance.
The 3D (and 2D) map views are fully and accurately geo-located, support various projects/datums and ellipsoid model conversions, and render on a dedicated render thread (so as not to block the UI and/or worker threads). It runs a DirectX12 renderer at present, although the system will be renderer agnostic. I have a Vulkan renderer in the pipeline but that will take a little while because Vulkan is a pain in the ass. The renderer supports map data layering and elevation data layering. I also implemented atmospheric scattering and aerial perspective to model atmosphere/particulate interaction; basically to make things look pretty. As the sun moves through the sky, it creates nice sunsets and sunrises as we see courtesy of real-world phenomena.
I inadvertently ended up with a full planet renderer!
I have a coarse worldwide data set in use for elevation data and imagery, but higher fidelity data sets for the UK. At present, I am using ~1m per pixel resolution LIDAR derived elevation data across the UK, and various imagery sets of different resolutions draped over the terrain (down to 1m street level in some cases). I am limited to what is freely available in the public domain.
The renderer can happily handle hundreds of thousands of entities displayed on the map, although that many is overkill in terms of real world use.
More recently, I have started to add the text/glyph rendering. A vector font is rendered into a high-resolution bitmap mask and a distance field computed. I can then render text/glyphs using a signed distance field texture on the GPU.
Performance is solid and the technique keeps vector-like edges nice and crisp and text anti-aliased at arbitrary scales.
The prototype is designed so as not to be reliant on an Internet connection, and needs to be quickly deployable, scalable and flexible. Right now I am keeping everything running within an ~8ms frame time (120 FPS) but don't expect that to remain the case.
EDIT: All the APP-6 symbols are correctly built and rendered based on NATO Joint Military Symbology standards.