Welcome to Developer Month 2019. Between April 8th and May 8th 2019, we will feature a variety of developers, publishers, community personalities and more who will tell us their story. From written interviews and blog posts to video interviews and more, we have curated a range of interesting content to maybe even inspire you to be one of these developers in future years. Please enjoy Developer Month 2019 as much as we enjoyed putting it together for you.
We couldn’t have put together Developer Month without the support of all the developers & publishers involved. Also, huge thanks to Thrustmaster for their assistance in sponsoring Developer Month.
April 12th: TomatoShade
The developer behind the popular TomatoShade has spoken to us about his earliest development memories, some of his challenges and how he felt after seeing so many people use his tools within the community.
What’s your earliest development memory?
If I remember that correctly, I was 15 and just started to learn to programme. It was a class in school, which took about half a year. It was just so exciting for me that I continued to learn it in my free time. Writing small programs, testing stuff out. It was a fun time. I started to develop a small tool where I could store my grades in school and it would immediately return the possible end grade of the year – and which was the minimum grade I needed to get to pass the class at the end. I was very lazy at school, only did the bare minimum to pass. So this got quite handy for me.
I got better and better quite quickly – all with just playing around with the provided compiler and API documentation. I started to join developer forums to learn from others. It was a great time. A time I sometimes I really miss. Nowadays with a full-time job, I barely have the time to do something big in the evening after work. There are these days where I actually can implement big features at night, but these days are really rare.
Which developments in recent flight simulator history have really surprised you with their technological advancement?
There is only one thing that really impressed me recently is the Heatblur F-14 for DCS. It combines modern modelling technology like photogrammetry within an engine which is actually capable of rendering it with the required technologies. Combined with the super nice flight model and all the other stuff, I would say it is THE state of the art.
Development in flight sim is slow, very slow. Which has a good and a bad side. We all know what the bad side is: we need to buy high-end hardware to get it all working satisfactorily. The very slow adaptation to modern hardware and modern engine design keeps us holding back in that regard. On the other side, the slow development cycle is good because it allows devs to create complex add-ons without the fear of having to re-write their add-ons from scratch just because a new iteration with bad backwards compatibility was released.
I want to highlight Aerofly FS 2 here. It was built on a quite modern foundation and it performs outstanding even on medium hardware. Sure it is missing a lot of features the two big sims have, but I am sure that it would still be able to achieve a lot better performance wise (compared to the two big sims) if the missing features were available in Aerofly FS 2 as well.
My personal opinion is that we won’t see big steps technology wise if the base sims won’t get updated significantly. A simple example would be: allowing dynamic lights to cast shadows. Modern engines don’t have a big problem having 30-50 dynamic, shadow casting dynamic lights within a single scene. P3D already starts struggling if the AA-settings get a bit higher with this setup, without shadows. But even with added shadows, we would still be behind modern technology. Global illumination (using voxels for example), soft shadows, area lights, etc. are the current hot techs. I would love to see these in a flight sim, but it will surely take a while. But even if we just keep the same feature set, adjustments are still required. I think VR is a big thing, especially for flight sims. But the two main sims can’t even archive the highly recommended 90 FPS with the most modern hardware.
But I don’t want to end the answer to this question with this rather negative tune. I think we should all not forget that there IS actual progress. Add-ons get more and more features, sceneries get more and more detailed, etc. That’s what we all demand, right? One thing I wanted to mention: adding more and more details and features cost more and more time to create and maintain. So don’t be surprised if prices rise over time.
What is your thought process behind creating a piece of software for flight simulation? How did you start with a blank document and create a tool used by so many simmers?
It all starts with an idea. So the first question is: where do the ideas come from? So quick history time about myself: I’ve created three game engines by myself within the last 15 years or so. They aren’t known in the general public because I’ve only shared my work within small developer communities. They were just hobby projects because I really enjoy working with 3D rendering. The first one was really not fancy or well optimized or anything. The second one was already a bit more advanced and the third one was a really huge project. I think I worked about 5 years on the third one in my spare time – always extending it, always trying out new stuff. Fun fact: a small fraction of this engine is used within the reflection maker. It renders the 3D model preview, handles the texture loading, the shader loading and applying, camera moving, all the fancy 3D math stuff, etc. But back to topic. Because I always tried out new stuff at that time, I collected a big bunch of papers and example implementations of other big game companies or universities who shared their work with the public. This collection helped me build a small library of possible features, nice rendering tricks and their rough implementation in my brain.
Now to the idea part. I analyze the rendering shaders of P3D and take a look at what is available within the shaders. This is the important part. So basically I read through “what do I have access to in the shader” and combine it with my loose memory of “what is needed to achieve a certain effect”. Combining these two results in a list of possible features I might be able to add to the shaders. Then comes the experimenting part. This part is the most time consuming and often frustrating part. I basically change a few lines of shader code, clear the shader cache, start P3D and look if it works. If not, I am going back to the shader files, adjust them, fix bugs, clear the shader cache, start P3D again, and it goes on and on. If it all goes well, I have an idea that basically seems work. So I need to test it more. I spawn to almost every addon airport I have to check if it all still renders normally (or at least if there are downsides and how prominent are these). At each airport, I checked different lighting conditions, different weather, etc. If I am unlucky and found something I broke with the shader adjustment, I go back to the shader itself, try to fix it, clear the shader cache, restart P3D and start the testing process all over again. The same loading and testing process applies to planes as well.
If this iteration is done, I normally have to fix small issues, change small adjustments and re-test all of it again. So after all of this has been done, I extract all the adjustments I made with several test comparing tools and include it within the application. The last part can get tricky because something might interfere with other adjustments made in the past. After all of this is completed, I apply the preset like a normal user would do it, start P3D and test everything again.
That’s the process of a small adjustment. For bigger changes like the reflections, I use my self-made renderer. Within this renderer, I am able to add and test changes much faster. If the adjustments work well within my renderer, I translate the adjustments into the P3D shaders and test it there again. This renderer is not compatible with P3D in any way, so I didn’t build a second fully compatible application just to test out stuff ;-).
My goal is to get the most out of the shaders. I have to live within the constraints of the shaders and the engine itself, but I try to make most out of it. The downside is that I often have to push everything to the limit resulting in a performance decrease. But that’s something I am willing to risk. I always do my very best to write the shader code the best I can, but adding new features always mean more code which means less performance.
You’re quite a private developer and haven’t really tried to promote your product. Instead, the community has done all the marketing for you. How did you feel when you started to see the popularity of Tomatoshade?
It is really nice to see others using it as well. I know that not everybody likes it, some have performance issues, some go back to other tools. But that’s completely fine for me. While only having a quite hidden download link, no website, a name which each SEO would immediately say “No” to it, it is actually fascinating how widespread it got. It shows how well the community is connected. I am totally sure that a lot of people still haven’t even heard of it, but it reached more users I would have ever imagined. Knowing that others actually enjoy using it is a warm welcome feeling. For me personally this much more worth than receiving any money for it.
Continuing on from the previous question, is there any reason you’d prefer to stay in the background of development instead of having a flashy website with easy access to the tool?
Not having any website or any marketing actually helps me. I can’t count the number of hours I already spent with the modifications and all the other stuff around it. But I know that I used 100% of my limited spare time to actually work on the tool itself instead of creating something around it. That’s another point why I don’t promote it. Another fact is, that I am all doing it in my spare time. Unfortunately (in this case), my normal job is quite demanding is always requires a different amount of work time. This results that I sometimes can’t touch the code for several months in a row (which is currently again the case by the way). This makes the times I am actually able to work on it even more valuable, and I don’t want to spend this time on something else.
Can you tell us what you’re working on right now? It’s been a little while since we last saw any updates.
Basically, I didn’t have much time at all to work on it since the beginning of December. I have some small minor adjustments and fixes in the pipeline. The extreme glossy rendering of the fuselage during rain will get fixed, the extreme bright beacon light with the FSLabs A320/A319 should be fixed with the next version as well. I am also experimenting in adding some basic ambient occlusion for materials using a normal map and reinterpret some other color channels of the specular maps to add some small details and color variances. But these are only some minor adjustments.
I have some more plans for the feature. I know that with the introduction of PBR with P3D 4.4 my reflection adjustments will get less and less important. But I know that this would come someday and I am totally fine with it. But maybe there are some features within my implementation which I can adapt to the new PBR shader. Oh and before anyone not liking my work starts to scream: it will be optional of course.
I actually do have some ideas I really want to implement. But these features would need some adjustments from Lockheed Martin before I could be able to implement them. I already asked them about the changes, but I can’t tell if the required adjustments will get implemented by LM anytime soon (if ever).
Have you had any offers from any developers (don’t have to say whom) after they’ve seen the work you’ve done for TomatoShade?
I had and have contact with different developers. I don’t want to say who and what it all was about, but yes – I am in contact with some.
What lessons have you learned about developing within the Flight Sim community?
Lessons learned? So many. I learned a lot about how part of the community is structured and organised. I learned how positive slow and backwards compatibility oriented development can be for a dev. I also learned what a pain backwards compatibility can be. I had so many nice conversations with really nice people. I got a lot of positive feedback and some negative feedback. The last part is what I want to highlight a little bit. Even though negative feedback can be demotivating at first, if you think about the possible problem, handle your reaction properly and communicate back openly, everybody wins. Negative or constructive feedback can be an opportunity to actually improve something. Not everything is easily addressable, something can’t even be changed without changing the whole product. But if you communicate back that adjusting criticized points can’t be changed easily because this or that, end users might be able to understand it better and might be more forgiving in some cases.
If someone reading this wants to go out and make their own tool / freeware, what advice would you give to them?
First, start with a small prototype for your own and test this prototype as good as possible. See if it works with different other 3rd party add-ons. Look out for incompatibilities and if you can address them. Try to avoid hacking into some internals from the beginning. Ok, this is impossible if you actually want add features where no suitable API is available for it. But if there is an API for it, use it. Because if you break into some core logic, you will need to fix and adjust stuff when new releases come out. And you will have to make these adjustments very soon after a new version is available. If you are done creating your prototype, try to make an easy to understand user interface. The more intuitive the UI is, the less time you will need to spend on creating documentation. Having long documentation is a pain because when you release a new version, the documentation might need some updates as well. Speaking of new versions: NEVER release something without an integrated Update-Checker. It doesn’t need to be a fancy background service which sends the user a beautiful notification window a millisecond after you have released a new version. A small button is totally enough. That way, you don’t have to worry about questions “Where do I get the latest version?” “Do I have the latest version?” etc.
Start small, don’t advertise it heavily while you are still in the prototype / beta stage. More users often means more questions, and answering them will take time and will block you from continuing working on your tool.
Oh and decide early if you want to ask for money or not. Converting a freeware product into a paid software doesn’t always work out. Converting a payware product into a freeware product won’t be a nice move for the people who already paid money for it. Make a decision and go for it. And remember: you won’t get rich creating a flight sim payware product easily. If you just want to get rich, there are easier routes for that. Most of the flight sim users are passionate, and they often expect the same passion from the devs.
Last thing: I think there is one important sentence: eat your own dog food. Use your own tool. Use it as an end user. And if you miss a feature while using it, add this feature. If you won’t use it, the chance that others won’t use it as well is significantly higher.
Thank you once again to the developer of TomatoShade for taking part.Developer Month 2019 Hub
Stay tuned as Developer Month continues tomorrow with an interview from SimBitWorld!