# ProjectSkybolt Client Development

#### Max-Q

##### 99 40
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

Tutorial Publisher
Donator
Everyone read the same paper?

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

#### GLS

##### Well-known member
Orbiter Contributor
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...

#### Max-Q

##### 99 40
X-Plane actually comes with a shuttle... sadly landings only, no launches.

#### MattR

##### Member
Update showing shadows casting on cockpit and on the ISS.

Last edited:

#### OvalDreamX

##### New member
Update showing shadows casting on cockpit and on the ISS.

View attachment 27487
Oh my gosh its finally happening!! This + trackir + camShake will finally make the vc experience worthwhile

#### Gargantua2024

##### The Desktop Orbinaut
Update showing shadows casting on cockpit and on the ISS.
Oh my, what a beauty this is!

#### Gondos

##### Member
This is outstanding
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)
Keep up the good work

#### MattR

##### Member
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
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

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
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
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
@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

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
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

Tutorial Publisher
Donator
If you want to show us more fancy screenshots, we wouldn't complain. Just saying.

#### Marg

##### Active member
Is there a way to try something? I mean some ready .dll file?

#### MattR

##### Member
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
78.4 KB · Views: 29
• ShuttleIss.jpg
125.3 KB · Views: 31
• ShuttleJettisonTank.jpg
37 KB · Views: 31
• VolumeClouds.jpg
47.3 KB · Views: 32

#### supersonic71

##### Member
Love the clouds

How to change to Mapbox for tiles? I pasted the api key in C:\Users\user\AppData\Local\OrbiterSkybolt\Settings.json

#### MattR

##### Member
How to change to Mapbox for tiles? I pasted the api key in C:\Users\user\AppData\Local\OrbiterSkybolt\Settings.json
Mapbox tiles are currently disabled in code, but I will provide it as an option to enable in a future release.