Gigabyte BRIX (Intel NUC) GB-XM12-3227 Review

So… the other day I bought this Gigabyte BRIX barebone which is basically an Intel NUC system, but manufactured by Gigabyte. I’ve tried the vanilla Intel NUC systems before and it worked great, except the older generation which had over-heating issue but resolved after adding a thermal pad to it as well as a firmware upgrade, but overall still pretty okay I guess.

Now, back to Gigabyte BRIX, specifically the GB-XM12-3227 model. I can’t talk about the other models as I have never used it before, so let’s just stick to this one.

All-and-all, it worked fine at first. It booted up Windows 10 without any problem, HDMI connected to the monitor without any problem, great resolution, etc. UNTIL I tried to use the web browser. Even though the internet status is “connected”, I still couldn’t use the damn internet on my browser.

After hours and hours of research and trials, I realized that the issue is the firmware. Not only it’s old (from 2013), but it’s supposedly for Windows 8.1, and not Windows 10. Went to Gibabyte’s website to look for the latest drivers, and guess what, they only have firmware updates up to 2014, so still, no Windows 10 support.

Further more, I downloaded the latest BIOS and tried to flash it, only to realize the BIOS utility doesn’t support 64-bit Windows, because it is a god-damn Windows XP Service Pack 2 executable file!

Then, I went to Windows 10’s Device Manager and check out my wireless network adapter’s properties. This is when I realized the WiFi adapter only supports up to IEEE 802.11b/g and not the newer IEEE 802.11b/g/n, which unfortunately is what I set on my router. So then I moved over to my router’s admin page and changed the Transmission Mode to the appropriate setting.

I have no idea what’s causing this. Outdated BIOS? Outdated drivers? I have no idea.

However, despite able to connect to the internet now, the speed is still very limited. Often time it took roughly 20 seconds or more just to load a web page.

Then, I used a Chinese software called 360安全卫士 (translated as “360 Safety Guard”) and went to the “Optimization and Speed-up” page. That particular page contains an automated scan-and-fix feature which includes “network speed-up” option.

After running the optimization process, my wireless network is finally back to usable state! What sorcery is that?? (However, IEEE 802.11b/g/n is still not supported).

Overall, the Gigabyte BRIX works okay except the BIOS and drivers are really outdated and urgently need an update. That’s all for today, have a nice day folks.

OpenGL Side Project

It’s been a long while since my last update. I was extremely busy for the past few months and only by now I have a little bit of spare time so I decided to work on a little side project just for fun.

I always wanted to learn OpenGL since a teen and hoped that one day I could make my own game engine that runs OpenGL. Even though I created a half-baked game engine/level editor thingy back in 2010 but I was using Irrlicht rendering engine so that doesn’t really count.

After messing around a bit with Qt 5 and OpenGL coding, I’m finally getting a pretty awesome results!! :

At the moment my prototype does the following:

  • Running OpenGL 3.2 core profile and GLSL 150
  • Loads OBJ files and PNG/JPEG textures
  • Move, rotate, scale model
  • Camera navigation (move, rotate, look at) using keyboard input
  • Skybox

Like I said, nothing fancy yet but even this took me quite some time to get it working since I’m using Qt 5 with OpenGL. Most of the tutorials out there only teach OpenGL with SDL, GLFW, GLUT, etc. but not with Qt. The reason why I’m using Qt instead of SDL is mainly because I like the additional features in Qt such as networking, image loader, file loader, etc. which will save a ton of my time since I don’t have to reinvent the wheel, or worse, trying to integrate my project with random 3rd party libraries that may or may not compatible with each other. I had a pretty bad experience when working on my Irrlicht project back then so I’m trying to avoid that now. Also, I may want to use Qt 5 to create a level editor for this project (currently only working on the ‘core’ library) so it makes sense if I also use Qt for the core parts.

Since this is a spare time side project so I might not work on it on a regular basis and might not even finish it, who knows? That’s all for today, ciao.

Easter Egg

If you have bought my book “Building a Game with Unity and Blender“, you may have realized the sword model shown in Chapter 2 “Creating Characters” is no where to be found in the source files.

Fear not! The sword is actually hidden in Player.blend, which you can unhide by press alt-H in Blender.

Initially I wanted to use the sword model in the game demo. However, eventually I ended up doing punching animation instead of sword-wielding, which is why I hide the sword (instead of deleting it) before moving on to do the animations for Chapter 3.

You can try and unhide the sword, then import it to Unity and parent the sword model to one of the hand bones of the game character. It might even look like sword-wielding when playing the punching animation!

Game Dev Week Half Price Promotion

It’s time for goodies again!

In conjunction with Game Dev Week 2016, some of books at Packt Publishing that are related to game development are now half of the original price, including the book I wrote, “Building a Game with Unity and Blender“! Click on the banner below to check out the promotion.

You can also check out some other offers here.

Also, Packt Pub is giving out an ebook every day for FREE till the 8th of March. Grab yours now!

Easy Screenshot 1.0

UPDATE: This program is now known as Easy Screencap and has been moved to here

Recently I created a simple program for a client. They’re working on a project for a theme park whereby an animated video showing a bunch of penguins running around on an iceberg is being overlayed on top of a webcam video which creates the illusion of penguins running around the visitors. They will then display the final result on a big screen for the visitors to pose and take photos of them with the penguins. This is how it looks like, inside the actual theme park:

Think of it as an augmented reality project without the tracking part, since the webcam is always staying at the same location. My program in-charge of taking screenshots when the operator presses a shortcut key (which you can customize) and the images will be automatically saved to a folder (which you can also customize), each with a unique file name. The folder is then shared with the printer’s computer through local network and visitors can pick which photos (screenshots) they want to buy so the printer will print it out for them. Profit.

This is how my program looks like:

Since this is a really simple program which doesn’t do much other than taking fullscreen screenshots, I decided to release it for free and call it “Easy Screenshot 1.0”. You can set the shortcut key (doesn’t support ctrl, shift and alt at the moment) and the name of the output folder.

Once you’re done with that, press the ‘Start’ button and you can now minimize the program as it will continue to track the keyboard events in the background. Whenever you press the shortcut key, a screenshot will be taken silently without any message balloon popping out.

You can download Easy Screenshot 1.0 for free, by clicking the button below:

Download (8MB)

Exploring Modern OpenGL In Qt

I did OpenGL eons ago when fixed-function pipeline was still pretty much the industry standard and most computers were still not capable of running flashy shaders at the time. However, things have changed a lot for the past few years – GPUs are getting more powerful and almost every home computer and even mobile phones are capable of running shader-heavy games. Both DirectX and OpenGL are even abandoning the fixed-function pipeline (although it still exists in the realm of compatibility profile) so that got me thinking – should I start learning that as well?

I’ve been using shaders in game engines but never in raw OpenGL. It’s quite a different experience dealing with VBO and VAO compare to the good old glBegin, glVertex3f, etc. I decided to use OpenGL with Qt because in my opinion it’s very convenient when comes to managing window events and inputs. Qt is, in-fact, more than just a window manager, it also provides a ton of helper classes which make my life easier, so why not.

I spent few days in re-learning the modern OpenGL and created a simple demo that loads an OBJ model and displays it on the screen:

The “Hello World” text appearing at the upper left corner of the window was drawn using Qt’s QPainter class which looks like this:

QPainter painter(this);
painter.drawText(10, 20, "Hello World!");
painter.end();

Just 3 lines of code! As you see, with Qt, I don’t have to re-invent my own font loader and renderer which is a pain in the arse. Qt is really powerful and can be easily integrated with OpenGL. I think I should consider making this into a game engine just for fun.

Failed Setting Triangles Error

Recently, a reader sent me the following screenshot which shows a corrupted scene from my book’s demo project.

He also showed me the errors and warning he get when running the demo project:

Warning:

Lightmap snapshot ‘LightmapSnapshot’ is inconsistent – 62 files out of 248 are missing. Realtime GI will be disabled. Please rebuild lighting for this scene.

Errors:

Failed setting triangles. Some indices are referencing out of bounds vertices. IndexCount: 600, VertexCount: 11191
UnityEditor.UnityBuildPostprocessor:OnPostprocessScene()

Failed setting triangles. Some indices are referencing out of bounds vertices. IndexCount: 96, VertexCount: 11191
UnityEditor.UnityBuildPostprocessor:OnPostprocessScene()

This happens when Unity tries to convert the demo project to the latest version, which sometimes might mess up the files.

Solution:

To solve this issue, reimport the mesh which has been corrupted by the conversion (in this case, terrain and rocks) by right clicking on the asset in Unity and choose “Reimport”, or delete the prefabs from the scene and place it again manually.

Once you have done the steps above, re-bake the lighting again and everything will work fine.

LANManager Supports UNET

Surprisingly, the plugin I made for Unity called LANManager supports UNET out of the box. The plugin was made in last year, before Unity rolling out their new networking system called UNET, which is a complete remake from scratch.

LANManager is a Unity plugin that helps to propagate your Unity-based game throughout the local network and allows other clients to discover the game server automatically without the need to manually insert the server’s IP address.

The plugin seems to work fine without any modification to the code, except a small change is required for the sample project to run on the latest Unity – replace the Network View component attached on the character prefab with the Network Transform component and that’s it.

The reason why it still work is mainly because Unity didn’t change much of the abstraction layer, except the underlying architecture which is not exposed to the users. Event names such as OnConnectedToServer, OnPlayerConnected, etc. remain the same so it didn’t break any of the functions in LANManager. Good job to the engineers at Unity Technologies!

Reviving an old project?

There’s an old hobby project which has been in hiatus for several months now. The idea started as a series of character concept art I did back in 2010 for my final year project but for some reason it didn’t get chosen, so I decided maybe I could use it for my own game.

Few months ago, I created the character model in Blender and a friend of mine did the environment props in 3D Studio Max. I put them together in Unity and wrote some scripts to make the character move (run, jump, double jump, climb ladder, etc.) and even did a simple NPC dialog system. But that’s all, it’s been staying the same since then, as both of us were very busy with jobs and other stuff. Now I’m thinking maybe it’s a good idea to post it out on my blog so that I can remind myself from time to time that there is a hobby project awaiting for completion.

The game is a story-based, character-oriented adventure game with puzzle elements in its gameplay. Player will be going through the game levels to solve certain puzzles and achieve certain objectives, which slowly revealing the story and the relationship between the characters in the game. There will be several characters who are teenagers but look really weird with their costumes and behaviors. They live in an alternate universe which is very different from ours and player will be learning more about their world throughout the game. However, I have not settled with the details yet so there are much more works to be done.

Ignore the scaling in the last screenshot. The scaling wasn’t correct, I was merely showing my friend how the models looked like in Unity compare to what he saw in 3D Studio Max.

Need to squish out some time for this hobby project so that I can keep my passion in game development, as my current job is more toward software engineering rather than games.