Hey there! Before doing a followup post on Hexatron, I decided to first post some details about Candylicious, another game we did previously. I’ll go in detail about the concept, the process and the final result, and I’ll probably do the same with future assignments, such as Hexatron. Beware this is all student work, done in little time overall.
Candylicious is a 3D platformer game done in Unity3D in about 2 weeks, with an emphasis on aesthetics and overall art style.
TL;DR: Did prototype game, check out screens/video and download game at bottom of post.
The idea for the game is quite simple gameplay-wise: a platformer with a bouncy ball (easier to code, etc), although the ball’s movement was hard to tune. However, we wanted to give it a defined art style and nice aesthetics, and given that the gameplay was relatively short to code, we could do a lot of assets in a short amount of time. So we had to look for a nice setting for the game.
The overall first concept of the style was “cute”, nintendo-like, etc. This was because in such a short amount of time, doing a lot of very detailed, realistic assets is not easy, considering that as students we had other responsibilities. Also, I knew that with some shader magic we could get close to that look.
Also, at the time I was completely immersed on Team Fortress 2, developed by Valve. In fact, I did a video which became somewhat popular and was featured on Kotaku, titled Cinematic TF2. Shameless plug apart, the Pyroland Update had been recently released, and I loved the color palette of the Pyroland maps and concept art, and thought “Hey, that fits entirely with our idea!”, and so Candylicious was born, a cute world with lots of candy!
So we started doing the concept art for the platforms and background, and really liked the results. We even used them as placeholders while coding the game before the assets were done.
With the idea well developed in mind, we started doing the assets for the game. All of them were done with Maya, ZBrush, xNormal and Photoshop, depending on the level of detail wanted. As a side note, part of the original concept was also incorporating some candies from my country (Argentina) to differentiate it from similar games. With that said, some assets!
Shader and lighting
We knew that just putting the assets with a rim shader wasn’t going to do any good, or at least not how we wanted. So, thanks to Unity’s awesome shading extension capabilities, we coded a very simple “Candy” shader, which is heavily dependent on Unity’s soft shadows. It isn’t complex or novel, just some common features tuned to look good with the assets.
The shader uses a ramp for the diffuse shading and two Blinn-Phong factors; one for each light and a frontal one with the camera. Above this, yes, some rim shading based on another ramp, and an Ambient color, independent from Unity’s own ambient lighting. While this is fairly standard, the main trick was factoring each component by the ambient color and the attenuation of the light (which also handles the shadow contribution) plus the light influence. This is analogous to using the Luminance node on Maya’s Hypershade. To give an example:
fixed3 rimColor = tex2D(_RimFalloff, float2(0,facingRatio)).rgb * lerp(float3(1f), _AmbientColor.rgb, step(atten, .25f)) * saturate(atten + .25f) * lightInfluence;
Here, the rim color is calculated by a lookup to the rim ramp texture, then multiplying it by the ambient color only when the pixel is not illuminated (and interpolated in between). It also obscures it in the shadow, with a minimum value of .25f, and then factors in the lightInfluence, which is the light color but with some tweaks. This way, the light also influences the rim, which makes possible some nice alternative settings like night, etc, without having to change the rim ramp.
While we couldn’t do everything we wanted to (in fact, we even coded 2 powerups we ended up not using, and had like 4 or 5 more levels sketched), the experience was great and we learned a lot, while finishing something that looks relatively good and fun. Unity has proven to be extremely useful and easy to learn, with a very, very fast pipeline for asset managing and level design.
So that’s it! After Candylicious, we had to do another game which we called Hexatron, which is based on the popular game Tron, and is already finished (probably will post in some days about it).
Here are some screens, a gameplay video, and a download link! Any feedback is well received =D
If you have Mac, Linux or any other OS, please download the Web version and install the Unity plugin!