Metroid Prime – Ruined Fountain

(minor note: dragon project is on hold until I decide if I want to bother fixing some design issues brought up in other WIP threads)

My never-ending love for the original Metroid Prime is back. I’ve done several renders before loosely based on its environments, but this time I wanted to do something a bit different. I wanted to re-create a room from the game outright, to try and see what it would look like in modern offline HD glory. I figured it would also be good practice working off someone else’s environment concepts. So I chose a standout and fairly small one, the ruined fountain in the Chozo ruins. This was somewhat inspired by this blog post. My goal isn’t necessarily for it to match down to individual details, but I’m trying to avoid major deviations as far as materials, locations of pipes and platforms, objects, etc.

So with no further ado (because I need to eat lunch¬†pretty quick here…)

env_003 env_fountain_003b env_magma_003

Zbrush, Cycles, normal map channels, and YOU.

I’ve mentioned before I’m a fan of using Zbrush’s Multi-Map Exporter (hereafter called MME) to pack up a finished sculpt for Blender/Cycles. (I use GoB to send base meshes to Zbrush initially, but I prefer settings things up my way back in Blender). MME has a normal map config panel like this (spoiler alert, rest of the post is describing why it’s configured the way it is in the picture):

Screen Shot 2015-01-04 at 5.53.14 PM

Those 6 controls along the bottom control how the channel arrangement is done. Different 3D packages expect different arrangements, and the internet is pretty vague about which one you want for Blender. I’d previously read somewhere to use flipG only, but that was looking slightly¬†weird. So I decided to¬†consult with my dragon (see previous blog post) just wtf Cycles wanted here. Sometimes, it’s hard to tell if your map is weird. Some combos (like flipB) are obviously wrong and give black or patchy-shaded meshes so you KNOW they are wrong. Other combos though, they give normals that look ostensibly correct, but depict surface features going in the wrong directions.¬†But if these features are small enough, sometimes they can get hidden under the displacement and color detail. Not this time though. I turned off the subsurf and displace modifiers, set a clay shader, and exported normal maps against lv1. We’re going to find out once and for all!

To start, this is the high-res model in Zbrush. Ideally, the surface will look as close as we can to this (shader differences aside. I didn’t bother to match the matcap):


First of all, flipG, as I’d read somewhere I can’t remember. This is obviously not it, you can see¬†scales¬†along the side of the thigh shift from raised to sunken!:



Ok,¬†so if we’re getting shifts from up:down, clearly R and G need to match. What does flipRG give?


Well, shit. Now EVERYTHING is sunken!


So if flipRG gives sane normals, but with sunken details that should be raised, doesn’t that imply no flips at all is correct? Let’s see:


Yep, I think that might be it.


But let’s be thorough. What about that swRG button?


Nope, mix of raised and sunken scales again!


But what if we flipped AND switched??


This one gave me a bit of pause. I THINK this is still wrong, several details along the face seem sunken where they should be raised (and are in the no-flip version). So I’m going to go with no-flip is the correct way.


To cover some other options on MME while we are here:

FlipV/FlipU – Zbrush and Blender have opposite conventions for the V axis in texture space. Sending a mesh from one to the other will cause your textures to be inverted if you don’t flip your UVs along V. If this needs to be done, switch on flipV. Note that GoB will automatically flip V, so if you are mixing MME and GoB for your roundtripping, make sure you don’t double-flip. Blender and Zbrush (and Maya, incidentally) have the same convention for U, so as long as no other apps have touched this mesh, you can leave flipU disabled.

Tangent – This switch needs to match the “space” option on Cycles’ normal map node. Enable if using tangent space.

SmoothUV – There isn’t necessarily a right or wrong setting for this, but this switch, the corresponding one on the displacement map export, and the “subdivide UV” checkbox on your subsurf modifier back in Blender all need to match. Otherwise your UVs get distorted out from under the texture.


What is with me posting my WIPs on CGtalk and BlenderArtists, but not here? Anyway, here’s a snake-like dragon:


And here he is in a power plant (note: due to clay render, he’s missing his normal maps here):


This project began life as an attempt do a realistic rendition of the pokemon salamence. I discovered after some fiddling that this is a lost cause: Salamence is distinctively not a practical body design. Trying to modify the legs and wings to look like something that might actually fly doesn’t look much like salamence at all. (the only places the wing muscles could go is exactly where the front legs are).

So I made my own dragon. With blackjack. And hookers! AND ONLY TWO LEGS

I’m trying to make the power plant environment look post-apocalyptic, like dragons came to the earth after mankind got (mostly?) wiped out, and this one has taken up a lair in the shell of an old generator facility. It was a one point a reactor containment building, but I didn’t like working with that small of a building, and I feared I wouldn’t be able to design the room accurately.


Also! I picked up the Substance Indie Pack during the flash sale a few weeks ago. Going to break them in properly with this project, because holyfuckballs that is going to be a lot of texturing work. (why did I try do an abandoned environment?….). Hopefully I’ll have a post here in a week or two about integrating the Substance tools with Cycles. (that will involve a new, much slicker version of Simple PBR, by the way).

Blender Cycles: Simple PBR shader

UPDATE: There is a newer, better version of Simple PBR available here. With Substance compatibility. Yay!


There are a lot of ubershaders out there for Cycles. Node groups that promise to cover every possible use you might have, mimicking the ubershader in Blender Internal, and some similar shaders in other renderers, like Arnold’s aiStandard.

This isn’t one of those node groups. The problem with those things is that they end up being a 700 pixels tall node with 27 buttons and sliders on it that doesn’t make any sense at all. I’ve never bothered with those things, because I don’t want to sort through all that crap. Ubershaders like this work for BI or Maya/Arnold because they have UI things like checkboxes and tabs and rollouts. Node groups don’t have those. Even then, they aren’t perfect. Occasionally you find yourself trying to outsmart the ubershader because you need some specific effect it isn’t set up for. For those tricky shaders, Cycles’ bare-metal node design works great, you can have things just the way you want.

All this is a rambling way of establishing that all that crap is useless 90% of the time. Handling tricky shaders is great, and Cycles has a way to do that. But most shaders AREN’T tricky. Look around you. I’m betting most of the items in your room right now could be described with a simple metal/coated-glossy shader, and most of the ones that aren’t are made of glass. A lot of the time in Cycles, you’ll find yourself dragging the same set of nodes together, especially for environment trinkets. This grind is why I made Simple PBR. A minimalistic physically-based shader for all those times you DON’T need over 9000 sliders. Say hello:



Simple PBR makes things like wood, plastic, ceramic, and metal easy. All the bits you need are pre-wired and packaged, you just need to supply values and textures. Simple PBR has just 6 inputs:

-Albedo aka Diffuse Color
-Specular Color, controls brightness of non-metal reflections
-Fresnel IOR, controls fresnel effect on non-metal reflections
-Roughness: the input for gloss/roughness/microfacet/whatever-we’re-calling-it-this-month
-Metalness: blends between metallic and non-metallic reflections
-Normal: bump/normal maps plug in here.

You can download it here:

Currently, metal reflection color is controlled by the albedo input. I’m a bit indecisive on whether they should be controlled from this input or specular color, or its own color. That might change in a future version. Also note that as a result currently spec color is not actually a color, it’s a 0-1 spec intensity value pretending to be a color. Any color isn’t actually used. (this might change in future versions of Simple PBR, if they exist).

After some thought, I decided to attach the spec map by using it to scale the fresnel mix factor used to mix diffuse/glossy reflections. In my opinion, this produces the best combination of physical accuracy and ease of artist control.

The roughness value is shared by diffuse, glossy, and metal components. It’s just Cycles’ usual 0-1 roughness value. Remember that in your gloss maps white is rough, black is shiny. Don’t forget to invert your map if needed, like when your gloss map is slightly modified version of your spec map.

The metalness input is there because metals are weird. They DO have colored reflections, and they don’t have fresnel. This input controls the blending of a second glossy shader that handles this department.

Some other example renders:

Brown albedo


Metalness increased to 50%:


Metalness at 100%


With textures