Sundog Blog

Posted by Frank Kane on 2nd February 2016

Check out my new course on Data Science and Machine Learning with Python

Data ScienceToday I launched my third, most ambitious course on Udemy: Data Science and Machine Learning with Python – Hands On! If you’d like to learn to apply your programming or scripting skills to the very lucrative data science field, you can enroll for $15 using coupon code DATA15.

This course draws on my nine years of experience at and, and covers all of the main topics in data mining and machine learning over 68 lectures, 9 hours of video, and lots of hands-on Python notebooks you can take with you for future reference and experimentation. There’s also a whole section on using Apache Spark’s MLLib library to scale up machine learning to a Hadoop cluster! The course includes lots of fun examples, like building a search engine for Wikipedia, developing your own movie recommendation engine, building a spam filter for email, and building an intelligent Pac-Man agent.

While Sundog’s SilverLining and Triton SDK’s continue to be our primary focus, we’ve found our foray into Udemy courses to be really rewarding as well. We’ve taught over 20,000 students in over 150 countries highly valuable, sought-after skills in just a few months already, and that’s pretty exciting stuff!

Posted by Frank Kane on 20th January 2016

Eddies and Tidal Streams with Triton

Tidal stream wakes in Triton 2.87A little-known feature of the Triton Ocean SDK is its ability to simulate tidal streams, also known as eddies. These are like stationary wakes on fixed objects like bouys, that result from water flowing around them.

Triton offers the TidalStreamWake class, which makes it easy to simulate eddies around stationary objects in the water. All you need to do is contruct a TidalStreamWake of a given size for each buoy or other object in your scene, and then update it each frame with the object’s position and the velocity of the water moving past it.

The effect includes both a 3D wake wave surrounding your object, and an animated volumetric decal effect that simulates foam moving around on the crests of these waves. There is also some pseduo-random motion of the direction and amplitude of the waves, to make it look more natural.

In addition to buoys, this is also a useful effect for bridge supports, ships at anchor, rocks, or any fixed object within flowing water. The effect is also very fast, so there’s not much cost to using it. Take advantage of our TidalStreamWake class to add eddies and extra realism to objects in your simulated water!

Posted by Frank Kane on 1st January 2016

Thanks for a great 2015.

Up and To The RightI just closed the books on 2015, and it was another record year for Sundog Software: net income (profit, after taxes) was up over 20% compared to 2014, making 2015 our best year ever on both the top and bottom line. Thanks to our loyal customers for fueling that growth!

Let’s look back at what Sundog did in 2015:

2015 also sticks out to me for a few more reasons. By and large, we stopped doing contract work in 2015, and are now focusing exclusively on making our products better and creating new products. The fact that our revenue grew even while giving up contract work is pretty exciting. That revenue comes from diverse streams all around the world: SDK’s, flight simulator add-ons, and online courses.

We’ve landed some big new customers I can’t tell you about just yet, and we’ve seen strong repeat business from our existing customers. Our strongest growth in 2015 has been in China, despite the language barrier and our lack of a local presence there.

All in all, 2015 was awesome – and the outlook for 2016’s great as well. Happy new year!

Posted by Frank Kane on 28th December 2015

Illuminating Clouds with Spotlights

Landing Lights illuminating clouds in X-PlaneSometimes, users want things like airplane landing lights to illuminate SilverLining’s clouds as you fly through them at night. A few customers have done this on their own by using SilverLining’s extensible shader framework. Recently, we had to do this ourselves as well – so I’ll share the code we used. Note, this article is specific to the OPENGL renderer in SilverLining.
Continue Reading

Posted by Frank Kane on 21st December 2015

More SilverLining Performance Tips

fpsIn case you missed it- we’ve previously published the best things you can do to maximize SilverLining‘s performance. Those tips can make a big difference! As we continue to work with customers obsessed with their frame-rates, we’ve uncovered a couple of new tips as well:

Update to the latest SilverLining. SilverLining 4.035 changed the way cumulus cloud layers are initialized. It used to be that new clouds would get “compiled” only when they entered the scene for the first time. In SilverLining 4.035, all of a cloud layer’s clouds get compiled when the layer is seeded instead. This reduces pauses as new clouds yaw into view for their initial appearance. You can grab the latest evaluation version of SilverLining here, or if you have an up-to-date support & maintenance plan with us, the source code SDK is available through here.

Some customers, however, value fast cloud layer seeding times over runtime performance. If you want to put things back to the way they were, the new setting pre-init-clouds in the Resources/SilverLining.config file may be used for this.

Optimize how cumulus clouds are fogged. It turns out a lot of CPU time was spent computing the proper fog color for each individual cumulus cloud, such that it matches the color of the sky behind it. If you can live without this precision, try changing the disable-per-cloud-fog setting in Resources/SilverLining.config to “yes” – it can make a big difference – up to 20% in our tests! If you do need perfect cloud fog colors (for example, edge-blended displays may legitimately need this,) SilverLining 4.035 allows you to spread these calculations out over time. The new cumulus-spread-out-fog and cumulus-fog-refresh-frequency settings may be used to enable spreading out the fog calculations, and how many frames the calculations are spread over. Be warned, however, that this can result in noticeable discontinuous cloud color changes with fast-moving viewpoints. Be sure to watch for that while testing.

Posted by Frank Kane on 14th December 2015

Reverse Depth Buffers with Triton and SilverLining

Outerra's Depth Buffer AnalysisMany of our customers struggle with depth buffer resolution issues, due to the massive scenes they must represent in training and simulation systems. 2015 seems to have been the year of the logarithmic depth buffer, but going into 2016 we’re seeing more customers also experimenting with reverse depth buffers (AKA inverse depth buffers).

Reverse depth buffers operate on the observation that floating-point depth buffer formats tend to concentrate resolution near the depth value of 0. This is especially weird in OpenGL, which maps its depth range from -1 to 1, putting that area of concentrated resolution in the middle of the scene where it doesn’t do much good. Detailed write-ups are available from Outerra and NVidia that explain how this trick works. But the bottom line is, OpenGL users can sometimes just call glDepthRangedNV(-1,1) and be done with it. (Yes, that works on AMD/ATI cards too.)

However, SilverLining and Triton both make some assumptions based on the depth range, so you need to tell them if you’re messing with the depth range values.

If your application is using a reverse depth buffer, you can tell Triton about it by modifying these settings in the Resources/Triton.config file:

# Adjusts our assumptions about the range of projected Z values in your application's
# projection matrix. If you are using an unusual projection matrix, such as for a
# reverse floating point depth buffer in OpenGL, you can adjust the near and far
# z values here.
opengl-near-clip = -1.0
opengl-far-clip = 1.0
directx-near-clip = 0.0
directx-far-clip = 1.0

Be sure you’re using Triton version 3.48 or newer for this to work properly.

In SilverLining, use the Atmosphere::SetDepthRange() method:

/** Call this at the beginning of each rendering loop, prior to calling DrawSky(), indicating
the range of depth buffer values in use. Calling this is optional, but may result in
avoiding a stall each frame. Normally, the near depth value is 0.0 and the far depth
value is 1.0, unless you're doing something like implementing reversed floating point
depth buffers.
\param nearDepth The z value that is mapped to the near clipping plane. (Usually 0)
\param farDepth The z value that is mapped to the far clipping plane. (Usually 1)
void SILVERLINING_API SetDepthRange(float nearDepth, float farDepth);

Between this and our extensible shader framework, you’ve got all the tools you need to integrate SilverLining and Triton into pretty much any exotic depth buffer scheme you can dream up. Go get rid of your z-fighting!

*Image credit: Outerra

Posted by Frank Kane on 4th December 2015

Thanks for a great I/ITSEC 2015

AECOM's display at I/ITSEC 2015I/ITSEC 2015 is over, and the show was almost surreal for Sundog. Every year we see our SilverLining and Triton technology showcased at the booths of many of our customers, but this year we were just everywhere. And the visual systems our customers are putting forward all look fantastic. This image is from AECOM’s X-IG demo, which was shown in a few places throughout the show and features SilverLining’s 3D clouds and skies.

Buzz has also apparently spread about our products – people I’ve never met were stopping me in the halls to compliment our work, and were calling to set up meetings. I’m very excited about some potential partnerships in 2016 for Sundog – some customers I’ve been dreaming of for years approached me during the show, and I think we’ll build some very cool things together. Of the exhibitors involved with visual simulation, almost everyone is using Sundog’s technology for something now.

Although the simulation and training industry has seen some challenging years recently, Sundog has continued to grow year after year with a simple strategy of providing great technology and great service at low cost. 2016 is poised to keep us well-positioned to keep delivering innovation and excellent service to our customers, and we’re looking forward to it!

Posted by Frank Kane on 2nd December 2015

Sevo iOS Engine launched – with SilverLining support!

Sevo iOS EngineOur Russian friends at Source Side LLC have released the Sevo Engine for iOS! It’s an Objective-C interface to the Ogre3D engine, offering advanced graphics, physics, and sound capabilities for iPhone, iPad, and iPod.

What excites us is that it has built-in support for SilverLining for iOS – so if you need physically realistic, simulation-quality skies, you can download an evaluation of our SilverLining for iOS package and try it out for free with the Sevo Engine.

We wish Source Side LLC success with this new product! I think it fills a need for a fast-performing game or simulation engine for mobile devices, without introducing all of the extraneous features and complexity of higher-level engines. And, it’s currently offered for free – so the price is right! Please check it out.

Posted by Frank Kane on 1st December 2015

Sundog Spotting at I/ITSEC

I/ITSECI’m at the I/ITSEC conference in Orlando this week, which is the premier training and simulation technology conference in the US. And, I’m seeing lots of our customers displaying visual systems that feature SilverLining and Triton!

If you’re at the show, see if you can spot our clouds and water. Some of the displays I noticed are:

AECOM (booth 1070) – Their X-IG product features SilverLining’s skies and clouds, and it looks fantastic.
VT MAK (booth 372) – The VR-Vantage line features a great integration of both SilverLining’s skies and Triton’s water effects.
Alpha Pixel (booth 21) – They’re offering software engineering services work and are displaying Sundog’s visuals as an example of their integration expertise. Check them out!
JRM Technologies (booth 185) – I spotted our clouds in what looked like an IR demo there. Hope to talk to them more about it this week.
Kongsberg Globalsim (booth 192) – They have a couple of different water technologies, but it looked like Triton was in use on their display on the side.
Adacel (booth 5) – Their ATC training system features SilverLining’s skies and clouds integrated into a DirectX environment.
CM Labs – They’re showing some demos of their Vortex product used for Port training, and one of the most physically intense integrations of Triton we’ve seen.
3D Perception, Canon, and Digital Projection – All three of these vendors are showing huge multi-channel displays featuring AECOM’s X-IG demo, which prominently features SilverLining.
US Navy – I’m told they’re showing CSC’s Virtual Ship in the Navy booth, which is built with our Triton Ocean SDK.

We have many, many more customers at the show as well – I thought I spotted our stuff in a few more places too. So if you’re looking for a good conversation starter – Sundog is something most of you at I/ITSEC have in common!

Here are a couple of photos I took (with permission) from Alpha Pixel and AECOM:

Sundog at I/ITSEC with Alpha Pixel

Sundog at I/ITSEC with AECOM's X-IG

Posted by Frank Kane on 15th November 2015

Check that end-of-the-year budget.

Piggy bankAs 2015 draws to a close, now may be a good time to check with your manager about any extra budget money for technology purchases. Large companies often set aside a fixed amount of money for software purchases, and often it’s a “use it or lose it” sort of deal.

So, if you’ve been considering using Triton or SilverLining on a new project – the time might be right to start the acquisition process. Even if you’re an existing customer, remember our SDK’s are licensed on a per-application basis – so if you have new projects expected to launch next year, it may make sense to purchase the licenses you need now. If your support and maintenance plan is due to expire soon, you might also consider purchasing a renewal early so you’ll continue to have access to software updates throughout 2016.

Licenses may be purchased online using a corporate credit card, or you can send us an email for a formal quote if you prefer to use a purchase order.