Christina's Solo Environment Pipeline

I’m a solo artist with an interest in environments, such as those found in the Uncharted games or Witcher. I’m not aiming for game environments though, just high quality high res still images. However such environments are generally the work of many people, or a few people working for a long time, and this is just a hobby for me.

So my challenge is to produce quality work within the constraint of limited resources (time, mostly). This thread is about the exploration of a pipeline that can deliver what I want. I intend to start small and gradually work my way up to more complex scenes. I use a variety of applications. Most of my rendering lately has been done in Vue because it can create terrains/ecosystems/complex atmospheres quickly and easily, all things that it would take a solo artist far too long to create manually. I’m using Blender to model architecture, props etc, with some help from ZBrush for detail and also photogrammetry (Photoscan) for more complex objects. Most of my texturing has been done in Photoshop but I’m currently exploring Substance Designer.

Attachments


So, lot’s of talk and no action so far. Truth is I’m waiting for a tutorial DVD on Substance Designer to arrive. I later discovered I could have got it online for the same price, but I had already ordered it from Amazon. I’ve come to the conculsion that a very large part of high-quality means high-quality textures. So much of the fine detail in assets is realized with normal maps these days. Still not sure whether bump/normal/displacement is more appropriate for a particular use but I guess more experience will answer that. Certainly the render engines that implement PBR tend to prefer normal maps.

I’ve decided to have a go at a YouTube tutorial https://www.youtube.com/watch?v=UIt-nemQopE which pretty much fits in with my current plan - simple asset to high standard. He’s using different software, so some translation will be needed. For me available learning resources is a very important consideration. I’m self-taught in CG, so I need good instruction. This is a major weakness with Blender. I’ve learned a lot from Jonathan Williamson and CGCookie team, not dissing that, and a bit from Andrew Price and a few others, but there’s just so much available for ZBrush, for example, compared with sculpting in Blender, that I decided to go with that.

So, I’ve started with this simple scene. Material is a freebie from Allegorithmic Share, and I had to output it as a standard diffuse/spec/normal material with some tweaking to get it to work in Vue. The material was created for base colour/metalness/roughness workflow, so I inverted the roughness to get the spec. Actual geo is Blender, nothing serious, just a UV’d plane. It’s not quite where I want it to be, but that probably means I need to do some work on the material itself (or make my own of course).

The material has exposed parameters for the amount of dirt and grass in the cracks. Makes it easy to get a different look. Need to re-export the textures of course.

Changed the output gamma, better result.

Attachments




Every environment needs a brick wall. Once again, geo from Blender, material a freebie from Allegorithmic Substance Share. The normals look a bit strange, especially on the left. I believe there are various different normal formats and one needs to use the right one. Must investigate further. Paving is from previous image. Plants from Vue library.

Attachments


OK, so I found some advice on the web to invert the green channel of the normal map. Worked like a charm.

OK, so it seems that if I specify my normal maps are OpenGL format rather than the default DirectX format then no further work is necessary.

Attachments


Even though I’m not aiming at making game environments I’ve decided to adopt some of that workflow to become more efficient and hopefully productive. So I plan to work to a grid, mostly, and have decided to to make 1m square my base unit. Because I’m trying to do as much as possible with textures instead of geo, I’ve created a simple model of an 8x8 square plane, where each sq m is a separate object (unit). The idea is that I can import this, delete the ones I don’t want and texture the others individually to give edges, center, etc.

Here’s a simple render with cobblestone texture. The tiling is obvious but the idea of having separate units is that I can introduce a lot of variation.

Actually I’m experiening problems with this approach, namely dealing with materials in the rendering application. I think it would be better to have only one of each unit with it’s material assigned, and assemble multiples of them in the final scene rather than bringing in a whole grid of them and having to swap out materials afterwards.

After further research it seems that if I apply textures to an object in Blender and then export as obj, only the diffuse texture information is exported. So I have to re-assign the textures for normal and spec in the target application anyway. I may as well do all the texture assignment in Vue.

Attachments


Changing to a modular approach is proving quite a challenge. I’ve had to restart quite a few times with even a simple asset to finally get it right. The attached image consists of four 1m square planes (separate objects). I’m using Collada to export to Vue because with the right export settings from Blender (not the default) it does export textures and it maintains the origin in Vue, which obj format doesn’t.

So here’s the pipeline so far (for a simple tilable asset, excluding concept phase)

  • Create texture large enough to cover the different ‘tiles’
  • Cut into pieces, one for each tile and save individual pieces
  • Model and UV in Blender (in this case a simple plane, subdivided a bit so I can add some curvature if desired)
  • Assign material and assign first image texture
  • Would need to add other textures (spec, normal) if they exist
  • Duplicate plane and move
  • Duplicate material (make single user)
  • Duplicate texture (make single user) and load the second image (and other maps if available)
  • Repeat for other two tiles (in this simple example)
  • Export as Collada (dae)
  • Import into Vue
  • Arrange lighting, camera
  • Render

All seems pretty simple but it’s easy to make a mistake, such as not duplicating textures before changing the image.

Hm, normal maps are not transferred over properly, so guess I’ll just have to assign the textures in Vue. Collada is still good to maintain the origin however.

Attachments


The modular approach is coming together. This simple scene (with placeholder textures) consists of modular ground elements and modular wall elements (both corner and straight pieces). Nothing too fancy but just getting the workflow right. Geo and UVs in Blender, textures in PS and xNormal for the normal map, assemble scene and render in Vue. I added some clouds and grass in Vue for a nicer result. Looks like the garden could do with some work.

Attachments


Layering some dirt on top of the bricks has helped to break up the tiled look a bit. Might be a better way to proceed than making the textures more complex. Plus some supporting architectural elements for interest.

Attachments


I think I’ve got this mostly sorted.

Sky - Vue atmosphere
Background buildings - purchased assets
Fence - planes with diffuse/normal textures, plus another material (patches of dirt) layered over the top
Ivy - Vue script
Ground - also textured planes but hidden by grass (Vue ecosystem)
Hero Tree - photogrammetry (Photoscan) asset cleaned up in Blender/ZBrush.

With the pipeline sorted I can maybe concentrate on making some worthwhile images.

Attachments


There is one other approach that I could use where necessary - camera projection. This would be useful for a background element where I don’t have a model and don’t want to take the time to make one, but I do have a photograph of something appropriate.

The image here is of a scene rendered in Vue, no photographs, just Vue terrains/ecosystems. The left half is a straight render. As an exercise in camera projection (in the Vue docs, using a sample scene) the background mountains were rendered individually. For the version on the right these renders were projected, the back one onto a plane and the closer one onto simplified geo, then the scene re-rendered.

The situation I’m considering is making some simple geo and projecting a photo. Even a plane might work if it’s far enough away and not affecting anything else in the scene.

Attachments


Still working on an assortment of techniques. For this image the cube came from Blender. Rest is Vue library assets.

Attachments


Working on the Camera Projection pipeline. In both of these the cottages were modelled in Blender, fairly simple geo, and camera projection mapped in Vue with the original photos, plus additional scene elements. Sitll got some way to go to make it look good.

Attachments



I have a pipeline problem that probably no one else has because few people would be using a Blender->Vue pipeline, and almost certainly won’t be using camera projection for textures. However, Blender only exports cameras as fbx, and Vue doesn’t import fbx (except the version that integrates with Maya, which I don’t have). However in Blender any object can be a camera, so I use a cube as camera, export that cube with my model in dae format, import into Vue and constrain the Vue camera to the camera cube transform location and orientation. There are a couple of other steps needed but it’s working well. Here’s a simple example (the cabin)

Attachments


Actually I am having a scaling issue, in that the texture from Blender is not a perfect fit for the model imported into Vue. Can’t quite track down the source of the discrepancy, but seems I have to scale the model up a bit or scale the texture down (about 0.85). It would be nice if it just worked. At least with my hack the imported model is in the right place, and scaling is all that is required.

Here I’ve done a bit more work on the model in Blender, and also more detail in overpainting the texture. The person who recommended this technique (camera projection) works in the film industry, where it is very useful. Not sure how useful it will be, compared with regular UV texturing, for my purposes but I feel that at least I should explore the possibilities.

Actually I think it would be much easier to render from Vue to get the base image to paint over. That way it is sure to match. So, model in Blender, export, import to Vue, etc. I won’t even need to export the camera data.

Attachments


Statue geo in Blender, texture and ecosystem in Vue.

Attachments


For this image I used a purchased asset for the house rather than modelling it in Blender. I’m working out the most efficient pipeline here and occasionally a cheap purchased asset is the way to go.

Attachments