Page 1 of 1

Procedural Universe Sim using OpenGL and OpenCL

Posted: June 12th, 2019, 1:22 pm
by JDB
Just another one of my random projects I thought I'd share here. Spent a couple of weeks creating the groundwork for a procedural universe game where you can actually travel to any star you can see and fly into the solar system. It uses an interesting mix of OpenGL and OpenCL for generating and rendering stars. It uses OpenCL to render the planets as analytical spheres (no mesh) using ray-tracing, but they don't have any textures yet. It's still in early stages of development has a few bugs such as crappy camera control, I need to switch over to using quaternions for rotation. A Windows release is available on GitHub if you want to try it out, although it may not work with all GPU's. I probably wont be able to work on this for a while so feel free to improve it.

Source: https://github.com/JacobBruce/CosmicVoid

Re: Procedural Universe Sim using OpenGL and OpenCL

Posted: June 12th, 2019, 5:51 pm
by albinopapa
however at some point the plan is to shift over to an RTX API for ray-tracing since AMD seems to be phasing out OpenCL.
I'm a bit confused on your reasoning here.

Perhaps look into something not proprietary and is still cross platform.

Re: Procedural Universe Sim using OpenGL and OpenCL

Posted: June 12th, 2019, 5:51 pm
by albinopapa
Oh, btw, the screen shot looks very nice.

Re: Procedural Universe Sim using OpenGL and OpenCL

Posted: June 12th, 2019, 9:22 pm
by JDB
albinopapa wrote:
June 12th, 2019, 5:51 pm
however at some point the plan is to shift over to an RTX API for ray-tracing since AMD seems to be phasing out OpenCL.
I'm a bit confused on your reasoning here.

Perhaps look into something not proprietary and is still cross platform.
Because it can provide ray-traced rendering which is on par with the speed of rasterization since it's hardware based, and also because I don't really see any other cross platform alternatives to OpenCL. AMD has Radeon-Rays which is built on top of OpenCL anyway and Nvidia has OptiX which is probably what I really want if it supports RTX cards. However I believe Vulkan does or will at some point have an RTX API, but Vulkan seems a bit too complicated for my liking. The ray-tracing stuff is actually a small fraction of the OpenCL kernel, what I really want is a general way to write algorithms for the GPU in the way OpenCL and CUDA allow, and also provide interoperability with the graphics pipeline. I think OpenGL has something called a "compute shader" which might provide another alternative solution but isn't as flexible as OpenCL.

Re: Procedural Universe Sim using OpenGL and OpenCL

Posted: June 12th, 2019, 10:05 pm
by albinopapa
Yeah, OpenCL and Cuda are the only two GPGPU languages/apis that I know of. Vulkan is really only used for graphics and from what I gather has limited but growing support for compute or gpgpu workloads. DirectX also has compute shaders, didn't know OpenGL did as well. Unfortunately, it seems that C++Amp development has come to a halt. It converted C++ code to DirectX HLSL compute shader 5.0 code to be run on gpu. Last time I checked it out, it's development stopped with C++14 support, which kind of sucks as C++17 has some stuff which I find very useful.

The Sycl project uses OpenCL in the back end, and all C++ for it's front end so again relying on OpenCL. DXR (DirectX Ray-tracing ) would be a good place to turn if you are strictly wanting ray-tracing stuff. The downside is you need a video card supporting those features, but since you want to move to RTX API anyway, you are still limiting your audience to those chose nVidia and the RTX line of graphics cores, which is more limiting than CUDA, at least CUDA will run using SSE and multi-threading I believe if you don't have an nVidia card.

Maybe one day, the C++ committee will eventually get their act together and bring those features to the language. It would be nice to be able to stick with C++ and just pass an execution model ( executor ) to an algorithm and it will use the gpu or distributed network without having to create special code sections of code.

Re: Procedural Universe Sim using OpenGL and OpenCL

Posted: June 13th, 2019, 10:27 am
by JDB
albinopapa wrote:
June 12th, 2019, 10:05 pm
Maybe one day, the C++ committee will eventually get their act together and bring those features to the language. It would be nice to be able to stick with C++ and just pass an execution model ( executor ) to an algorithm and it will use the gpu or distributed network without having to create special code sections of code.
I don't think this approach would be very fast, even OpenCL isn't that fast compared to a shader, but it operates at the GPU driver level so if you write code the right way it's still pretty fast, the restrictions and guidelines of OpenCL ensure you're writing code well suited for parallel computation. Shader code is even faster because glsl and hlsl are optimized for the GPU and the graphics drivers are optimized to make use of the hardware as effectively as possible.