Project Skybolt Client Development

Max-Q

99 40
Addon Developer
Joined
Jul 5, 2021
Messages
314
Reaction score
398
Points
63
Location
Cislunar Space
Website
www.orbithangar.com
Volumetric clouds coming in X-Plane 12 as well. Plus 3D waves, trees that move in the wind, and raindrops on cockpit windows.
(I am very excited about XP12)
 

n72.75

Addon Developer
Addon Developer
Tutorial Publisher
Donator
Joined
Mar 21, 2008
Messages
2,205
Reaction score
707
Points
128
Location
Biddeford ME
Website
mwhume.space
Preferred Pronouns
he/him
Everyone read the same paper?

Didn't something similar happen with realistic atmospheric scattering circa 2010-2012?
 

GLS

Well-known member
Orbiter Contributor
Addon Developer
Joined
Mar 22, 2008
Messages
4,768
Reaction score
1,241
Points
138
Volumetric clouds coming in X-Plane 12 as well. Plus 3D waves, trees that move in the wind, and raindrops on cockpit windows.
(I am very excited about XP12)
Oh, that's going to cause damage to the tiles on the Shuttle... :LOL:
 

Gondos

Member
Joined
Apr 18, 2022
Messages
25
Reaction score
34
Points
13
Location
On my chair
This is outstanding:hailprobe:
A couple of questions :
  • What is the OpenGL version requirement ? I see you're instancing a 4.x context, is it a strict requirement or would it be possible to have it work on a 3.3 context ?
  • Does the Skybolt engine work under linux environment? (I just cloned the repo to give it a shot but I'm having dependencies issues with cmake/conan at the moment:confused:)
Keep up the good work(y)
 

MattR

Member
Joined
Aug 5, 2021
Messages
24
Reaction score
67
Points
13
Location
Melbourne
What is the OpenGL version requirement ? I see you're instancing a 4.x context, is it a strict requirement or would it be possible to have it work on a 3.3 context ?
OpenGL 4.x is required because tessellation shaders are used for rendering terrain.
Does the Skybolt engine work under linux environment?
Yes, it works on linux. The skybolt github CI build uses linux, I do most of my development on windows however.
 

Gondos

Member
Joined
Apr 18, 2022
Messages
25
Reaction score
34
Points
13
Location
On my chair
OpenGL 4.x is required because tessellation shaders are used for rendering terrain.

Yes, it works on linux. The skybolt github CI build uses linux, I do most of my development on windows however.
Too bad, the old 9800GTX won't cut it then😅
I was hoping to use it for a linux build instead of my piece of crap attempt of an OpenGL client, I guess it will have to wait till I do an upgrade.
Just for the heck of it, I tried it anyway😁
Here is the feedback in case somebody wants to try something similar :
Had some minor issues compiling it (checked out from your v1.2 branch), it required a few modifications :
Code:
-#ifdef unix
+#if defined(unix) || defined(__linux__)
std::sqrtf is not recognized by the compiler (g++ 9.4.0 in c++17 mode) for some reason.
The FFT ocean module also gave some trouble, looks like xsimd is not geared toward backward compatibility...
Hacked in some code but I don't know if it works properly because I don't have a windows box to test it with.
Code:
-typedef xsimd::batch<float, 4> Simd4;
+typedef xsimd::make_sized_batch_t<float, 4> Simd4;
Code:
-                       for (int i = 0; i < 4; ++i)
-                       {
-                               ht0._Val[0][i] = mHt0[index + i]._Val[0];
-                               ht0._Val[1][i] = mHt0[index + i]._Val[1];
-                               ht0Conj._Val[0][i] = mHt0Conj[index + i]._Val[0];
-                               ht0Conj._Val[1][i] = mHt0Conj[index + i]._Val[1];
-                       }
+                       Simd4 re{mHt0[index + 0].real(), mHt0[index + 1].real(), mHt0[index + 2].real(), mHt0[index + 3].real()};
+                       Simd4 im{mHt0[index + 0].imag(), mHt0[index + 1].imag(), mHt0[index + 2].imag(), mHt0[index + 3].imag()};
+                       ht0 = complex_type_simd4(re, im);
+
+                       Simd4 rec{mHt0Conj[index + 0].real(), mHt0Conj[index + 1].real(), mHt0Conj[index + 2].real(), mHt0Conj[index + 3].real()};
+                       Simd4 imc{mHt0Conj[index + 0].imag(), mHt0Conj[index + 1].imag(), mHt0Conj[index + 2].imag(), mHt0Conj[index + 3].imag()};
+                       ht0Conj = complex_type_simd4(rec, imc);
GLuint toSrgbInternalFormat(GLuint format) complained about GL_COMPRESSED_RGBA_S3TC_DXT3_EXT not supported, I blindly added this :
Code:
+       case GL_COMPRESSED_RGBA_S3TC_DXT3_EXT:
+               return GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT;
After juggling with dependencies, switching from GLEW to glad, hooking in glfw and imgui (and thanking the gods for the glCopyImageSubDataNV extension), I could get this result, but with lots of "Texture::getCompressedSize(...) : cannot compute correct size of compressed format (35916) returning 0" warnings that may or may not explain such colorful ISS😂
SkyboltEngine.png
SkyboltEngine2.png
There are some weird black regions that follow the earth around, and what looks like some depth issue between models and clouds.
There are probably driver bugs on top of the hacked in way to make it work on outdated hardware...
Anyway, keep up the good work, the clouds and atmosphere are stunning ; this could be a solid alternative to D3D clients for us folks out there with no windows boxen🤓
 

MattR

Member
Joined
Aug 5, 2021
Messages
24
Reaction score
67
Points
13
Location
Melbourne
Nice work making it that far at least. Are you running that on your 9800GTX? If so, did you create an OpenGL 3.x or 4.x context?

std::sqrtf is not recognized by the compiler (g++ 9.4.0 in c++17 mode) for some reason.
I'll investigate, it should be an easy fix.

The FFT ocean module also gave some trouble, looks like xsimd is not geared toward backward compatibility...
You can disable the FFT ocean plugin in CMake/conan since it's not a strict requirement. If the plugin is not present it will fallback to a flat ocean.
GLuint toSrgbInternalFormat(GLuint format) complained about GL_COMPRESSED_RGBA_S3TC_DXT3_EXT not supported
Yeah, that's a know limitation of the OSG 3.6.5 in the main repo, SRGB formats for DDS texture are not supported which means the textures won't load. I have a patch on my OSG fork which fixes the issue, but it hasn't been merged into the main repo yet (looks like no PRs have been merged in 6 months!).

Did you get the dependencies with conan? I'm conan-ifying my forked OSG as we speak, so once I roll that out (hopefully tomorrow) you'll be able to more easily build with the correct OSG. If you're not using conan, just checkout the branch in my OSG fork linked above and rebuild OSG.

There are some weird black regions that follow the earth around, and what looks like some depth issue between models and clouds.
I haven't seen that before, it looks an issue with culling or missing planet shaders. Did you get any shader errors in the orbiter log?
 

Gondos

Member
Joined
Apr 18, 2022
Messages
25
Reaction score
34
Points
13
Location
On my chair
Nice work making it that far at least. Are you running that on your 9800GTX? If so, did you create an OpenGL 3.x or 4.x context?
Yep, a trusty old 9800GTX+ that does not support 4.x, only 3.3 (tried 4.0 but context creation failed for obvious reasons)
I'll investigate, it should be an easy fix.


You can disable the FFT ocean plugin in CMake/conan since it's not a strict requirement. If the plugin is not present it will fallback to a flat ocean.

Yeah, that's a know limitation of the OSG 3.6.5 in the main repo, SRGB formats for DDS texture are not supported which means the textures won't load. I have a patch on my OSG fork which fixes the issue, but it hasn't been merged into the main repo yet (looks like no PRs have been merged in 6 months!).
That did the trick, no more warnings and I think I can see some ground tiles now.
Did you get the dependencies with conan? I'm conan-ifying my forked OSG as we speak, so once I roll that out (hopefully tomorrow) you'll be able to more easily build with the correct OSG. If you're not using conan, just checkout the branch in my OSG fork linked above and rebuild OSG.
No, I'm an old fart and completely lost with all this conan/cmake stuff😅
I rigged a quick and dirty makefile to have it compile.
Maybe I'll try to make a docker image for compiling all that in a clean environment and get proper experience with the tools...
I haven't seen that before, it looks an issue with culling or missing planet shaders. Did you get any shader errors in the orbiter log?
That is correct, without the noise from the warnings I can see some shaders issues because of 4.0+ textureQueryLod :
Code:
0(2) : warning C7568: #version 440 not fully supported on current GPU target profile
0(2662) : error C1115: unable to find compatible overloaded function "textureQueryLod(sampler2D, vec2)"
 

MattR

Member
Joined
Aug 5, 2021
Messages
24
Reaction score
67
Points
13
Location
Melbourne
@Gondos I pushed some updates:
  • updates to the Skybolt v1.2 branch to fix which fix the FFT ocean compilation errors, as well as some bug fixes
  • updates to OrbiterSkyboltClient master branch to build with conan, as well as some bug fixes. Build instructions are in the README.md.
 

Abloheet

Addon Developer
Addon Developer
Joined
Apr 18, 2009
Messages
190
Reaction score
14
Points
33
Location
Kolkata,West Bengal
Can this client be ported to vulkan? Then this will be the first vulkan client for Orbiter. Since this is already in opengl, maybe it can be re written using vulkan? Like how no man's sky was rebuilt using vulkan after it was made using opengl originally. Porting this to vulkan will make it more platform agnostic(nvidia/amd), and should also increase performance
 

MattR

Member
Joined
Aug 5, 2021
Messages
24
Reaction score
67
Points
13
Location
Melbourne
Can this client be ported to vulkan? Then this will be the first vulkan client for Orbiter. Since this is already in opengl, maybe it can be re written using vulkan? Like how no man's sky was rebuilt using vulkan after it was made using opengl originally. Porting this to vulkan will make it more platform agnostic(nvidia/amd), and should also increase performance
Yes I want to port the engine to vulkan eventually. The port should be straight forward since Skybolt uses OpenSceneGraph which can be replaced with VulkanSceneGraph which has a similar design.
 

n72.75

Addon Developer
Addon Developer
Tutorial Publisher
Donator
Joined
Mar 21, 2008
Messages
2,205
Reaction score
707
Points
128
Location
Biddeford ME
Website
mwhume.space
Preferred Pronouns
he/him
If you want to show us more fancy screenshots, we wouldn't complain. Just saying.
 

Marg

Active member
Joined
Mar 20, 2008
Messages
431
Reaction score
49
Points
28
Is there a way to try something? I mean some ready .dll file?
 

MattR

Member
Joined
Aug 5, 2021
Messages
24
Reaction score
67
Points
13
Location
Melbourne
Is there a way to try something? I mean some ready .dll file?

Yes, I've just released a dll. It requires the 64bit build of Orbiter.

The plugin is still a work in progress and has missing features, graphical and performance issues. Let me know how it runs. I've attached some more screenshots.
 

Attachments

  • EarthFromSpace.jpg
    EarthFromSpace.jpg
    78.4 KB · Views: 29
  • ShuttleIss.jpg
    ShuttleIss.jpg
    125.3 KB · Views: 31
  • ShuttleJettisonTank.jpg
    ShuttleJettisonTank.jpg
    37 KB · Views: 31
  • VolumeClouds.jpg
    VolumeClouds.jpg
    47.3 KB · Views: 32
Top