August 2020 - December 2020 | School Project
Magnus the Wizard has cursed you, turning you into a cat! Lift your curse and take your revenge by meowing, hiding, destroying things, and collecting spell books to break the spell. Curse That Magic Cat! is a lighthearted, single-player game made by students at SMU Guildhall.
Toon shading is a kind of non photorealistic rendering, since our game is approaching for a cartoonish art style, the implementation of toon shading is quite importent. I refered to existing techniques, and implemented cel shading, post-processing outline rendering, and fresnel rendering for our game, the outcome is pretty good.
One thing to note here is that the whole toon shading process is done in post processing stage and with blueprints only. The lighting attributes are recalculated in post processing stage and the cel shading are calcualted at this stage.
In our game, it is very easy for cameras to collide with walls when the player controls the cat walk towards room corners. Two common solutions are clipping the camera or cull the walls. And I went for Wall Culling solution in our game.
The first implementation is using translucency materials with our walls. However it brought several problems for me and the artists, the major problem is that our lighting for toon shading is calculated at post processing stage, which means it will have no effect/incorrect effects for our translucency materials. So we abandoned this idea.
The second implementation is using dithered rendering technique for rendering the opaque walls, it worked out well and everyone in our team is satisfied with the effect. However it still has some problems - the whole wall could be culled out and it will feel very empty and not intuitional especially when players are looking into other rooms.
The final implementation brought camera position and wall normals in, so we only cull certain area of the walls, which appears like a sphere in our game. This mechanique worked out perfectly and fits our game well.
Unreal has already provided tools and functions for creating multiple languages, but it has complicated pipeline and is easy to break by designers. So after I researched the functions and methods for making the multiple language support feature working, I made a document for designers so they can follow the pipeline and translate the documents successfully.
The document can be visited here