Which 3D engine to use?

Well, it’s time to pick which engine/sdk I am going to use to make my dice game.

Now the big question is what game engine to use. There may be many to choose from, but from a mobile app perspective, there seem to be only 3 that I would want to use. Of course, I’m ruling out Unity, because it is not open source. I’m trying to make an open source game, and I’d like to use open source tools so that anyone can openly tinker with it. I’m also ruling out several that work for Android, but the sdk is only available on Windows computers (irrlicht for example). That leaves the three main options of LibGDX, GoDot, Ogre, and jMonkeyEngine. There may be others, these are just the ones I know about.

Above is the quote from my post last week. I needed to do some research to decide which 3D engine and SDK (software development kit) to use to make my game. As I said, I’m sticking with open source tools, so that ruled out Unity and several other big name brands of SDK’s. I also am using a Linux computer, so it can’t be an SDK that only works on Windows or Mac. So, that leaves me with four main options that I could come up with. Obviously there are more options out there, but I’m trying to stick with ones that meet these criteria:

  1. Active development – Something that is still modern and will get updated over time, so I don’t have to learn a new SDK after I get the hang of this one.
  2. Guides and example code – I’m new to this, so I need it to have plenty of examples and guides to springboard off of.
  3. Active community – A place where I can go to ask questions if I get stuck.
  4. Easy Android integration – The whole point of this is to make an Android game, so it should be easy to get to that point.
  5. Java or C++ compatible – I don’t want to learn ANOTHER programming language just to make this game. I want to use and improve the tools I already have.
  6. Easy to use – It needs to make sense to me, or it will not work. If the API calls are ridiculous, I wont accomplish much.

So, with those in mind, I have sorted it out between my top four choices. Before I get to that, though, there are a lot of other options, but they don’t meet the above criteria, so I couldn’t spend my time on them, even though they may be great engines to use. That said, here is the breakdown of my thoughts on the top four choices, and what I plan to do. It’s not really a review, just my thoughts on what to do.

libGDX

I’ve actually used libGDX before, to make my open source game “Critical Velocity“, which was a 2D side scrolling space ship game similar to flappy bird. It does have an active community, is still being developed, and has lots of guides and tutorials and example code to draw from. It doesn’t have an SDK, you just add the java libraries to your app and use your standard Android SDK platform to build it, which is a big plus.

libGDX

The only downside is that it is made for 2D games with 3D kind of as an add on, which seems to still be under development. But, I would be familiar with it, since I’ve used it before, albeit for a 2D game. It also doesn’t have an “SDK” it is rather a library that you add to your own app.

jMonkeyEngine

There are quire a few perks to using jMonkeyEngine, it is actively being developed, and it seems to have a pretty good community behind it. There seem to be a lot of guides, documentation, and explanation of methods and classes, which is super helpful for me. It also seems to be a well fleshed out 3D engine, with a sustainable future and some neat features, most of which I am too new to understand. All the programming is done in Java, which is a plus for me, since it is a language that I am already familiar with.

jMonkeyEngine

I am not sure if I can see a downside to using this setup. It seems to be pretty solid, there are a lot of indie games made with it, and it even has book tutorials on Amazon, so this might be a good direction to go. I tried it out a little bit, and got confused right off the bat, but I’m not sure it that’s because of the interface, or because I am new to 3D game development.

Godot

Next up on the list is Godot. Hailed as “the game engine you waited for”, it seems pretty impressive. With a super permissive MIT license, an attractive interface, a visual editor, and full c++ support, this sounds too good to be open source true.

Godot

The only concern I have is that it will require some other languages as well. It seems to support c++, of which I am only a beginner, but used to. Yet it also uses GDScript as well, which is an open source scripting code they made just for this development SDK. Where I see that as a problem is it will probably only be useful inside of Godot.

Ogre

Last up is Ogre. Ogre seems to be very actively developed at the moment. So active, that it appears to have created some sort of rift between the different versions. From what I can gather by doing a little research (just my opinion based on what I saw), there is the old version Ogre1, which you can use to make Android games, and the new version OgreNext, which only works in Windows and Linux for now, with hopes of adding Android later.

If you use Ogre1, it appears to be more of a library that you add, like libGDX, but if you use OgreNext, it seems to be a full fledged SDK. So, I’m not sure about how I would want to use it.

It also appears that Ogre1 and OgreNext do not work the same, so if I learn Ogre1 to build my Android games, will I need to relearn OgreNext so I can continue with that in the future? Perhaps that’s just my perception, but my perception being my reality, I don’t think I can put in double the effort to learn how to make 3D games.

Final result

I think I am going to give Godot a try. However, if it doesn’t work out, jMonkeyEngine is the runner up. Ogre seems to be undergoing some massive changes, and I’d like to work with something that is a bit more stable, but libGDX doesn’t seem to have all the “bells and whistles”, seeing that it is just a library to add to your current development.

I struggled this week between jMonkeyEngine and Godot, but in the end settled with Godot because the interface was so intuitive. I was able to walk through a few things in no time. Literally, within minutes and without any documentation, I loaded someone else’s project and was playing a game and editing code. I am also looking to expand my c++ skills rather than work on my Java. So, Godot it is, at least, for now….

Linux – keep it simple.

Dice, anyone?

LowPolyDice

Now that I’ve completed the low poly course from Udemy, I’m ready to start using my fledgling, but newfound skills in some form of application. That said, the most fun and easiest way that I can imagine using 3D models is in some kind of game. The question is, what to make?

If you’ve been reading this blog for a while, you may remember that I once made a dice game app called “Ship, Captain, and Crew”, based on the sailor dice game of the same name. So, I’ve decided to revamp that project by creating a 3D version of the app. Essentially, I’ll be starting from scratch, but utilizing the same game mechanics that are in the first game.

The two big things I think I will need are the 3D objects and then some form of 3D game engine to render it. Today I completed the first part, which was making the dice. It took me about an hour to throw this together, but I think it will do as a low-poly die for the game. In theory, I will just use 5 of them during the game itself.

Now the big question is what game engine to use. There may be many to choose from, but from a mobile app perspective, there seem to be only 4 that I would want to use. Of course, I’m ruling out Unity, because it is not open source. I’m trying to make an open source game, and I’d like to use open source tools so that anyone can openly tinker with it. I’m also ruling out several that work for Android, but the sdk is only available on Windows computers (irrlicht for example). That leaves the four main options of LibGDX, GoDot, Ogre, and jMonkeyEngine. There may be others, these are just the ones I know about.

So, now I need to do some research and see which one will work best for me. I’ve never made a 3D game before, so this might take a while….

Linux – keep it simple.

Tesla: Star Wars or Tron?

tesla_light

At work the other day, I got the opportunity to teach a class on inductance and resonance in relation to electronic circuits. So of course, I thought a tesla coil would be the most fun visual instrument to instruct with.

tesla_floresent

Of course, the inexpensive kit I bought off of Amazon came with a small slayer-exciter circuit, which is a little different than the traditional tesla coil circuit, since it finds it’s own resonating frequency, but it was still impressive to watch. We even burnt a few scraps of paper and then used the spark as a plasma speaker, which was pretty fun too.

We also had a few florescent light bulbs around, both straight and round. So the question became: Star Wars light-saber duels, or Tron disc wars?

Linux – keep it simple.

Convert Still Photos to a GIF or Video

smallWalk

Really just a technical note for myself. I thought I had written this down somewhere here, but I couldn’t find it, so, here it is.

Converting png to a video in Linux:

ffmpeg -framerate 24 -pattern_type glob -i ‘*.png’ -c:v libx264 -r 30 -pix_fmt yuv420p out.mp4

Setting the framerate sets the speed of the video. You can replace png with jpeg or jpg if needed. This does, of course, require the ffmpeg utility/package.

And, converting png to a GIF in Linux:

convert -delay 10 -loop 0 *.png myimage10.gif

The delay sets the milliseconds of delay between frame, so lower makes a faster video, higher makes a slower video. 8 to 10 seems about right for something that should look “real time”. This requires the imagemagick package.

Linux – keep it simple.

Low Poly Course: A walk in the park?

0175

While deeply investing my time in the study of servers for the upcoming Server+ beta test, I took a few hours to relax and made this fun low poly man walking in the park. If you are interested, you can see the video I made of it here:

https://youtu.be/jySydnNXhwU

This concluded the Low Poly course, and I really, really loved it. I can’t wait to try out some more fun stuff with my new low poly renders!

Linux – keep it simple.

QFIL Sahara Errors

wp-1582063069530.jpg

It sounds like some kind of desert problem, but QFIL is actually a tool that you can use to flash firmware on Qualcomm devices. I’ve made a YouTube video about using it as well as writing about it here on this site in the past. It’s a really simple tool to use, but it never ceases to amaze me at how much trouble it gives me every time I try to use it.

This time, I was trying to fix a BLU LifeXL and get it flashed back to stock. Unfortunately, after downloading the latest QFIL, it failed every time I tried to flash the firmware, telling me that “sahara” had failed:

ERROR: function: sahara_main:924 Sahara protocol error

Well, after spending a while fiddling with it, and searching the web, I found XDA post after post with people doing different things and solving their issues. Some had to unlock the bootloader, some had to get into download mode a different way, etc. But none of those helped me.

In the end, the real issue was that I needed to use an older version of QFIL. I started with version 2.7, but I finally got it to work by using version 2.0. So perhaps if you have a sahara error, you might check to see what version of QFIL you are using. I *think* that the old phone firmware was written back around QFIL version 2.0, and just wouldn’t work with the newer versions. But that’s the best I can figure of why it doesn’t work with the newer versions. It seems odd to me that you would need to know the specific version of QFIL needed for the specific phone firmware you have, but it seems to be the case.

Linux – keep it simple.

FreedomPop without Google Play Services?

Screenshot_20200218-071903

Using FreedomPop without Google Play Services? I have been tinkering with this for a couple days now, and I finally got it to work. Of course, I’ve mentioned FreedomPop on the website before, but for those who are new to it, here is a brief description:

FreedomPop is a wireless Internet and mobile virtual network operator based in Los Angeles, California. The company provides “free” IP mobile services including free data, text and VoIP and sells mobile phones, tablets and broadband devices for use with their service.

Essentially, it is a phone company that you can use to get free calling/texting/data. When they say free, they actually “mean” it. I wrote an article about how to set it up and actually use it for free. It even works in Alaska!

Now that I’ve gone Gappless, which I’ve been really enjoying, I thought I would switch my old backup phone to be Gappless as well. For the most part, it was just sitting in a drawer, but I keep a FreedomPop sim card in it, so if I absolutely ever needed it, it was available in a pinch. Unfortunately, it was easier said than done to use FreedomPop Gaplessly. And it is a toss up if you consider it “working”.

After setting up the APN for FreedomPop, I can connect to the network, as you can see in the picture, I have over three bars of signal, and I can initiate data transfer. I figured the app from FreedomPop wouldn’t work, since it requires push notifications through Google Services, but I did try the FreedomPop app anyways, as well as several older/newer versions of it, just in case. This is the main feature that is not working. Without the app, you can’t use your FreedomPop phone number to make or receive call and texts.

So for many, going Gappless would make using FreedomPop a no-go.

There are, however, lots of Jabber/XMPP apps that work great without Google Services, and I figured I could just use that, for which the FreedomPop sim card still works great. Essentially, it just becomes a LTE data device.

I did a few tests, as you can see above, and managed to pull a speed test as well as browse the internet for a minute or two. By the way, Google’s home page is 1.4 MB. Then I searched for a speed test, which brought me to 3.4 MB, and then I ran the speed test, which took me all the way up to 9.14 MB of data. It is noteworthy to mention that the phone believes it only used 8.92 MB of data thus far, so there is a disparity between the two. If you are using the free plan and don’t want to go over, you need to make sure you are careful about your limits and warnings you set on your phone.

So, I downloaded Xabber, one of my favorite XMPP messaging clients, and went to work. Sending and receiving messages seems to be in the low kilobyte range, which is great. In four messages, I only used 10 KB of data. The only problem is, that you are using data consistently because there is no push notification, so your phone is checking the server for messages all the time. This check seems to take only kilobytes, but I decided to let it run for a while and see how that went. After 30 minutes, it only used 110 KB of data. In theory, that is 5.3 MB per day, or 159 MB per month, when sitting idle.

Of course, you could only use the service when you want to use it, and most of the time the spare phone is at home or work, so there is a constant and available WiFi connection, which negates the need for any data at all. There are also plenty of apps that allow messaging and VOIP calls as well. Things like AnTox and Riot come to mind. I do think the whole service would be better with Google Services installed, so you can use the 200 free call minutes, and the 500 free texts as well, but it is nice to have it as an emergency phone option, and it is nice to know that you can use the data, even without Google Services.

Linux – keep it simple.

CompTIA Server+ and Low Poly People…

So, I missed a few posts over the past week or so. Actually, I’ve been really busy, but for a good cause. I’ve been fortunate enough to be selected by CompTIA to beta test the new Server+ exam. The busy part is all of the studying I am doing to try to pass the exam. I have a very short window of time in which to take the exam as well. Servers are not a new thing for me, but I have my doubts about passing the test, so I’m trying really, really hard to study up for it.

At work we use a few servers. From file hosts to PXE boot servers, but we don’t use them the way most of the IT world does. Here at work, our servers are offline and not connected to the internet at all. We manage and maintain nodes, as well as re-image them “remotely”, but by remotely, I mean that we do it in the same room from the servers to the machines. We don’t do patch management or updates, either. Some of our servers are running the same way they started out five years ago, because they are closed loop systems. Often component fail, but we don’t upgrade them, we repair them with pre-stocked and approved replacements of the exact same parts, even if those parts are no longer manufactured. Some of the motherboards and graphics cards we use have been out of production before we installed the servers. It’s just not exactly the way servers are typically used, especially in the scope of this exam.

Of course my server at home is a web, FTP, photo, and Jabber server, but I’m not sure that it’s being implemented the way a typical IT setup would be. It is only accessed by myself and my wife, and it is tied specifically to our cell phones with dynamic IP addresses. I manage users on a one on one basis, because there are only 2 users. Not your typical use case, for sure.

So, I’m doing a lot of studying. Fortunately for me, my company provides a video series specific to the Server+ exam, albeit the previous version of the test (of course, the one I’m taking is a beta, after all), which is free for me to peruse. I also picked up a Sybex Server+ book, which I’m reading through as well. Kindle readers can be really handy! If I had to order the book, I would lose a week of study time waiting for it to arrive in Alaska!

All of that to say I’ve been busy.

In the interim, however, I’ve been playing around with the Low Poly course lessons some more, and been trying to make some low poly people. There are several styles of low poly people, so I’m trying out a few of them. If you can see this posts pictures in your viewer, then hopefully you can see the little police man that I made. Well, I guess at the moment, he’s just a man in a blue shirt, but I was going to put a badge and tie on him later.

Linux – keep it simple.

Low Poly Course: A whole new world….

The title might suggest something about a princess, a monkey, a thief, and a Disney movie, but it’s not so glamorous. It’s just a low poly world I created for my low poly class. I had some fun with lighting, and it is amazing what changing the background lighting color can do to your planet.

SpaceWorld

Above is a generic lighting fading from white to black. Kind of gives it a nice “space” look. But, it seems a bit moody, so I tried some sunrise, daylight, and sunset looks:

I’m no expert, but it’s a pretty fun way to change the mood and look of the model, without changing anything else. I’m really enjoying the class so far, but I’m not far from the end of it now. I think next up is a low poly character that moves, so I’m really looking forward to that!

Linux – keep it simple.

Low Poly Course: T-Rex times four!

Hopefully above, you can see my latest creation, a low poly T-rex! I’m still taking the low poly course, and really enjoying it. Perhaps because it is low poly, it makes it a little easier to have good results, even for beginner’s like me. Above is my “square method” low poly T-rex. Here is my decimated “triangle style” T-rex:

Not too much difference, although the triangle style does have more menacing looking teeth. For fun, I then made this “high poly” version by subdividing the square version:

And then I decimated the high poly model, as per the instructor’s suggestion in the course. It made for an interesting low poly/high poly mix:

In all four versions, I used the same colors, the same lighting, and as close to the same position/camera angle as I could. One interesting note about the decimated high poly model – it was really difficult to color it. When I would go into edit mode to select surfaces to color, it would look “high poly” again, but when I would select vertices, and went back to paint it, it was “low poly” again. So, I realized I forgot to apply my decimation. So it was showing the decimation, but it was not applied to the model. So, apply, apply, apply. That’s my lesson learned for the day!

Linux – keep it simple.