Bob would have been proud
Congratulations Lukas:) Amazing piece of 3D parametric shader:) thank You for sharing Your knowledge:)
Great studio. Great game will be.
Michael Kinsey did a detailed breakdown of his massive Ancient Civilizations submission. He shared his techniques, showed the workflow and shared some comments. The scene is far from being perfect, so if you have some comments or suggestions, please leave them in the comments.
Hi, my name is Michael Kinsey, I am a 22 year old self taught hobbyist 3D artist living in London UK. I’ve been studying 3D art in my spare time for the past 6+ years and have been studying games design since I was 15 and was making my own custom assets from Google Sketchup and Blender3D 2.5 beta into Torque 3D engine back in 2011.
I still use Blender in a lot of my projects due to how efficient I have become with it and how seamlessly it blends in with my workflow. However I also use 3Ds max, and can use Maya if a job permits. My next goal is tackling Modo to a high level as I have seen some extremely efficient workflows that would be very powerful to include in my pipeline.
My only industry experience so far has been nominal commissions for very small one to three man indie projects. However with the significant time I have been putting into studying and improving my skills over the past two years, I feel I am starting to reach a level where I can move from being a hobbyist to being a full time artist in the industry.
I had been playing around with Unreal Engine 4 and refining my 3D/texturing workflow with substance suite for the last year, and saw the artstation competition as a learning opportunity where I could get feedback from other artists working in the industry; as well as show what I have learned from my personal studies.
Once I decided to enter in the competition I had to figure out what I wanted to make. Luckily participants had the ability to choose either their own concept or one from the concept competition. The one that stood out the most was Alex Accorsi’s concept Gunung Monyet. I took some time to consider whether I should attempt this environment due to the sheer size of it, or go for something smaller. I decided I’d be fine if I just focussed on the task at hand, and if things didn’t go well I could always do a smaller environment next time.
Producing the environment
I knew I wouldn’t have time to make a high poly of every asset in the scene; especially with an estimated 40 assets needed to accomplish this environment. Additionally I wanted everything to run 100% real time at a decent frame rate. So I decided to go down the route of doing texture atlasing. For all buildings in this environment I only used four materials (three brick materials, and one trim sheet, all 1024 – 1024px).
For the buildings, I needed to achieve a level of variation with minimal time spent.
Luckily Alex’s concept broke the buildings into five separate slices that I could reorder and swap to get a variety of buildings. And to top it off I made five detail pieces to closer match the concept and add more details.
Sadly I didn’t have the chance to make all variations of the statues and props I wanted to due to time limitations, so I compromised and swayed from the concept a bit.
All in all I made 30+ models and 13 materials that make up the entire scene:
11 – foliage pieces
7 – modular building pieces
3 – temples
7 – large environment pieces (to make the base for the environment.)
8 – detail pieces
All a culmination of many late nights.
Working with the scale
The size and layout of the environment were another huge challenge.
Firstly there were no measurements in the concepts showing how large the environment was so I had to figure out how large the buildings were by comparing them to the size of the reference human.
Giving that the human was an average human height at 1.8m or 6ft tall I could see how many humans tall and wide the building was, and size things correctly. I then tiled a cube across the volcano diameter over the concept. If each square was a building I could multiply the building width by however many cubes it took to span the diameter then figure out the circumference from there.
The result ended up being huge, so the next step was to figure out how to fill such a large environment. (final size is 1.386km Diameter)
I already had the modular approach to the buildings but 60% of the environment was actually foliage. I’ll get to foliage in a bit. For the base of the volcano I modeled it using simple poly modeling at one-tenth the size and sculpted the high poly in Zbrush.
Even if the texture size was 4K the texel density would be extremely low for the volcano base So what I did have I unwrapped it so that the most visible edge had the highest texel density, and I split the uv’s into two separate 4K materials, and baked them together in Substance painter.
For the floor of the volcano, I used vertex painting to mask in the dirt and grass materials. These materials were projected in world space on the Z axis and I used parallax occlusion mapping on the dirt to give it depth.
Then lastly I tiled the normal from my cliff material using triplanar projection and blended it with the volcano normal to add more detail and make it look more convincing.
Another thing I always do when working on any project in Unreal is to make a noise material. This is a tip I would recommend for anyone working on any project in Unreal Engine 4. I simply made a new Substance material and blended some procedural noises together until I had four different looking masks and merged them together using an RGBA merge node so that It is all packed into one sample when used in engine.
I do this because I can use it for a variety of shader tricks like macro variation in color or roughness to make procedural puddles, or mask in world position for natural random looking variation between materials, or just using it for standard shader functions like making clouds.
In my case, I used it for two purposes. I used it to add a simple color variation in my materials and to blend in procedural controllable moss over all assets in the environment.
I also used some normal blending to adjust the Z projection to give it a more natural look.
Another shader I made was a World aligned mask on the Z axis to effect the roughness and color of all assets so that I could give a water damaged damp look on the water’s edge.
I made these shader effects into material functions for easy plug and play functionality. For example here is the master material I used for 90% of the assets in my environment:
There are three custom buildings in this environment: The Central Temple, The outer city temples and the palace. I textured these guys with the same four materials as the buildings and tried to hit the concepts as accurately as possible. Modeling these guys wasn’t too difficult as the geometry is relatively simple and are only between 2K and 3K poly’s each.
Then to top them off I added detail pieces. The central temple, and palace each needing me to go and sculpt new detail pieces.
For the materials that make up the environment, I used Substance suite. I used Substance Designer for all tiling textures and substance painter for any custom/detail assets. For the tiling materials, I used standard procedural generation techniques.
I won’t go into too much detail as I don’t want this article to be ridiculously long but I will show some techniques I used to save time and I also plan on making some tutorials in the future.
For most materials, I made them completely procedurally, However for the trim sheet and Temple bricks 1 material I needed a very particular look.
For the trim sheet, I used simple sub-d poly modeling to make basic shapes and made them tile in the X axis. Then I baked them to a flat plane to get the height data and used this as the base for the whole material.
From there I could add erosion, and micro details and height blend in any thing I want saving me time as I don’t have to do any sculpting. For the “Temple bricks 1” material I wanted a very specific look to match the concept, so sculpted some tiling bricks in Zbrush, and followed the same technique as the trim sheet.
For creating the colors I used the height map blended with the AO and some a procedural noise and put that into a gradient node.
Foliage is the area I had least experience and knowledge of and for this reason I stupidly left it until four days until the deadline to start working on it.Luckily there is plenty of information on creating foliage for games. I searched “foliage for games” on polycount which gave lots of broken bits of information, and also used a super helpful 80.Lv article “Alireza Khajehali: Boosting Natural Environments”, which I highly recommend.
So with some research done I started small with making some very simple leaves using basic sculpting techniques and texturing them in Substance Painter.
I then UV’d them to geo and started building more complex shapes. I then used bitmap to material to generate some extra maps for these and combined them with the current maps.
And started making the basic shapes for the foliage; all foliage is hand modeled, even the trees.
I used curves with simple cylindrical geo and adjusted the thickness to achieve the trunks and branches. And used vertex groups to mask a particle system to the branches and used that to propagate the leaves and small branches. Once I had two trees I rendered them from an X,Y and Z positions with a transparent background, and bought that into bitmap to material to generate custom normals. I used this material to make billboards for the trees. Each tree has four LOD’s utilising UE 4.15’s auto generate LOD’s feature, the fourth LOD being the billboard I made.
I used 100% realtime lighting with ray traced distance shadows turned up to max and enabled real time global illumination in the engines .ini files. Once I positioned the sunlight where I felt it best fit the concept and the environment, I scrubbed through the time of day at each location until I found the best lighting for my final renders. For the water I used the base translucent water sample Unreal gives, but added more layers of variation as well as a layer of refraction and used a planar reflection probe to make give realistic reflections.
For the night time renders I adjusted the exposure and dialed back the distance fog as it makes the night sky look too bright.
All 290 of the lotus assets are blueprints placed by hand, and in that blueprint is a point light hovering slightly above the flower. During the day I set its brightness to 0, and at night I set it to 8000 as it had to be bright and have a far reach to light such a large environment. The strength of the light also made the flowers glow as they had subsurface scattering enabled.
I learned a lot during every step of this challenge. For texture atlasing I learned how to avoid warping textures when UV’ing them onto complex shapes. And I knew very little about foliage creation before this.
Even after the competition has ended, I’m still learning things from my entry. Looking back, I made a huge mistake and didn’t have colorblind support settings enabled for the entirety of the project (I’m red green colorblind). Now with colorblind support on I realise how over saturated a lot of the greens were which I have now appended and re-rendered for my portfolio piece.
I learned the amount of time that you should spend on an asset should directly correlate with how important it is to the project, ergo if I had organised the my time better I would have had much more time to work on the foliage. Creating trees indigenous to the region and improving the quality of the leaves and textures.
And most importantly the biggest thing: Just keep making things. It sounds simple however the whole time working on this challenge I was looking at the competition and being blown away by the quality.