Kristian Kebbe talked about solo-development of his adventure game Lucent and talked about content creation, terrain, shaders, lighting, and more.
Hi! My name’s Kristian Kebbe, and I’m from Melbourne, Australia. I’m currently an FX artist in the VFX industry. Some projects I’ve worked on are Christopher Robin, Captain Marvel, Aquaman, and Spiderman: Far From Home.
Since I was a kid I’ve always been interested in CG and games and dabbled with various 3D software programs throughout my life as a hobby, but never thought it could be a job until the past few years when I learned FX in Houdini. However, the one thing I’ve wanted to do for as long as I can remember is to create my own games. The more I learned Houdini, the more I realized how awesome it can be for game dev, so I decided to see how far I could take it.
Lucent is an action-adventure game in which you play as a boy who wakes up to find his village shrouded by darkness and must quest up a mountain to ask the old gods to restore light to it. Along the way, you fight monsters and explore an ever-changing landscape, discovering more about the world around you.
More than ten years ago, daydreaming with some friends, we started to plan out a story for a game. Elements of that now form the basis of Lucent, and I’m really excited to finally bring it to reality. I love games with compelling stories as well as gameplay, and I want to tell one about being thrust into the unknown and learning to survive on your own.
I’m really inspired by Studio Ghibli animation, and how beautiful the environments always are as a backdrop for the story. I’m also inspired by games like The Legend of Zelda: Breath of the Wild, Kingdom Hearts, and RiME.
One thing I really like about indie development is working within the constraints of a small (1 person in my case) team. It is not realistic for me to create and optimize a AAA quality photorealistic game on my own, so it becomes even more important to develop an art style that will complement my chosen workflow and the small team. So questions like “how can I cut down on my time spent creating assets” also become part of the art style. “Can I tell my story if my character doesn’t have eyes and a mouth? Can I fit it into the art style?”. “Can I shade xx assets procedurally instead of with textures?” These sort of questions inform the direction the art goes, and in turn, the style informs how I approach assets. I love working within these constraints because it forces you to come up with creative solutions.
— LucentDev (@lucentgame) August 25, 2019
I am not using any bought/premade assets, except for the trees, which currently work as a placeholder (and the grass alpha texture which I will mention later!). My plan is to create every asset on my own utilizing the procedural workflows Houdini offers. For example, rocks and spiders were procedurally modeled in it.
My logic for pairing Houdini and UE4 is that they are what I’m most comfortable with, and happen to also have a lot of synergies. As a solo dev, I am able to vastly increase the speed on my workflow by creating assets in a procedural way, and this is really important for making progress. There are a ton of different aspects to game dev, and asset creation is arguably the most time-consuming. Cutting down on time spent on this step means I’m able to spend more time making the game!
I also do all my rigging and animation in Houdini which has quite robust tools for this. The only other 3D DCC I anticipate using is ZBrush, for a little bit of sculpting.
The character, his clothing, and textures for it were made in Houdini using this base mesh as a starting point (CC attribution license):
Terrain & Object Placement
The creation of the terrain and object placement is defined in a Houdini asset that I have created. It dictates everything from the scattering of the rocks and placement of the spiders to the landscape layers and grass layer for placing grass.
Houdini Engine is really a godsend for this. It’s a plugin that allows you to cook a Houdini digital asset in-editor, with the ability to change aspects of it on the fly as you build your level. I iterate on my terrain asset in Houdini with scatter proxies for each of the object types I want to place based on things like slope angle, curvature, elevation, custom attributes, and masks, etc. When I’m done I save it as an HDA and bring it into Unreal. From there I can place whichever Unreal actors I want onto each of the scatter instances – lights, characters, particle effects, etcetera. In this instance, I have used it for placing rocks, trees, spider enemies and defining different landscape materials and where to place grass. The water is also a mesh created from part of the landscape, based on a mask. I then used Houdini’s Game Dev shelf tools to create a flowmap texture for it.
In the future, I will create more HDAs for things such as fences, caves, more object types, paths, and more.
For a long time I have been interested in cel-shaded art style in Unreal Engine, but until recently the only ways I had known to do them was either as a post-process material or by using a light direction inside a material. Both of these approaches have a lot of limitations, and I ended up finding a custom build of Unreal Engine in which forum user ‘doomfest’ has implemented some fantastic toon shading models from various resources (listed in this thread) into the source of the engine itself. This is modifying how light interacts with the surfaces on a fundamental level and gives much greater control to mix in PBR principles.
My approach to the water shader is based on information I have found through Youtube tutorials and dissecting example files. Its basis is a panning texture, pushed around in UV space based on the flow map I painted in Houdini. Because I generate mesh distance fields, I used the super handy node ‘distance to the nearest surface’ to create the foam around objects, and drive opacity.
For the grass, I used the Kite demo grass as a starting point. I replaced the shading type with the toon shading model, kept the wind setup, and added parameters for the toon shading model settings. I multiply the color by an “emissive amount” parameter and plug it into the emissive channel. Along with the spec, rough, and shading model-specific parameters, this makes the grass look fuller and have less harsh shadows. I also changed the color to a more yellow-green. In the grass type settings, I changed the density, random scale, added random rotation and surface alignment, and turned off ‘cast dynamic shadow’.
Lighting & Shadows
Lighting and shading was a priority from the beginning, and because I want an open or semi-open world I decided to work only with dynamic lighting. My goal with the lighting was to have realistic lighting scenarios, but with stylized materials. Distance field shadows are really amazing for this, and I’m using it on all my static meshes.
I’m using atmospheric fog, exponential height fog and a basic post-process volume for some atmospheric stuff, and volumetric lighting is enabled for my distant light. I tried to keep the setup natural with only one directional light, a skybox, and a skylight. My character and spiders are casting dynamic shadows as well. I angled my distant light to have long shadows because I love those ‘late afternoon’ kind of shadows where the sun is low. Most of my materials have an emission value that is some factor of the base color, to better control how they shadow. This kind of setup means that when I change to a night setting, I will need to drive these parameters dynamically so they’re appropriately lit. I look forward to that challenge, especially for indoor environments like the caves I’m planning!
The toon shading model from this custom engine build has been instrumental in achieving the shading properties I’m looking for, because it has additional inputs like ‘specular offset’, ‘shadow lightener’, ‘specular range’ etcetera, which let you control how much the light/spec wraps around surfaces, and how harsh the transition between the specular is. This gives me a lot of control to shade each material and object in specific ways, and get harsher or softer shadows depending.
Character animation has been one of the bigger challenges so far, as it is my first time doing proper biped animation from scratch. However I’m loving it, and the feedback I’ve gotten has been really constructive! The fighting system and combo animations are very early on, but the feedback and criticism have been helpful in affirming the direction I want to go with it. And I’ve actually really grown to love animating from this process, I’m really excited to do more of it now.
Wrangling all the pieces was a challenge in itself – managing every aspect of the process can be quite overwhelming at times. But it’s also a blessing in a way – if one thing becomes frustrating, you can switch it up and work on something completely different for a while. I would do this often – switching between doing the gameplay to doing some fx or animation, for instance.
In general, I’m really in awe of just how many resources there are out there for helping to solve problems. Having dabbled with CG in the early 2000s, it’s amazing how far the communities and learning materials have come. Support for almost any problem imaginable is only a few clicks away. It’s empowering to have this reality and really makes it feel as though anything is possible. I really love the process of learning as you make, and just solving problems as you encounter them by searching for solutions online. My biggest lesson I’ve learned both here and previously in the process of learning FX and CG, in general, is to not be afraid of the unknown, and rather than follow tutorials one-to-one, make what you want to make and find support on the way.
My plan for Lucent is to continue on and work on making it into a fully-fledged game. I have the next half-year to work on it full time, so I will make the most of this time to produce a vertical slice that represents how I envision the final game. After which I will reassess the time and resources needed to finish it, and proceed from there!
The first thing on my to-do list is a rehaul of the animations – I have a much faster-paced combat system in mind, and I’m inspired by the likes of Kingdom Hearts, Bayonetta, and the Devil May Cry series for the fluidity of combat I hope to achieve going forward! Additionally, I’ll be expanding the environment into a proper open-world environment with different types of areas (caves, village, mountaintop, etc.), adding different enemies and fleshing everything out. Creating this prototype has helped me nail down the direction I want to go, and I appreciate all the feedback I’ve been getting.
My hope is to keep this as a solo dev project for now (besides music and sound design), although I’m open to working with others if the project grows large enough to warrant it. I have found an amazing composer to work with, and will be sharing some updates on my Twitter in the coming months!
I hope there’s something helpful here!
Kristian Kebbe, Game Developer
Interview conducted by Kirill Tokarev
Cartoon Water Shader by Adam Homoki is a fascinating highly stylized water material and a river tool with many features including buoyancy, caustic effect, refraction, water depth and more.
Any future updates are included and will be available for download in case they are released.