USCSS Conrad 10 : The lower decks

The build for the upper deck of the Conrad is mostly done now – I’m letting it sit for a time while I work on how the story will flow through it. I’ve reconfigured it a little and I’ve had to abandon some areas due to land impact issues – when I’ve finished the build I may come back and fill in what I’ve left out if there’s any room.

For the building work I’ve moved on to the lower deck. The lighting effects are going to be stronger and more animated down there – the upper deck should introduce the players to the way the Conrad uses light without overwhelming them; the lower deck turns it up to eleven.

I’ve been working on various props and effects and some fairly cool looking sets are beginning to come together.

One of the things I definitely wanted to have was dangling chains for the industrial-looking parts of the build. This presented a couple of challenges.

Chains are hideously complex shapes that just eat polygons like mad. Even games like Skyrim resort to using a pre-rendered texture on a single flat poly in places. With a bit of poly-bashing in Lightwave I managed to come up with a satisfactory looking chain that will give me about 120 links for an LI of only two – I’m still fiddling with this and may be able to get it down further with a little luck. In any case it’s enough right now to give me a 10m chain that looks heavy without being too oversized.

The second problem was that the chains need to move. Just hanging still really did nothing for the scene. I fiddled with scripts for quite a while and eventually ended up with a system that used llSetKeyframedMotion to add a gentle swaying to them. Several copies of this, moved to slightly different levels and angles, produced a really nice little cluster of subtle motion.

Prior to tackling the Conrad I’d never used llSetKeyframedMotion before so it’s been a little bit of a learning curve but it’s turning out to be a fantastically useful tool.

Conrad Lower Decks

In the picture above you can see the chains in place in a roughed-out industrial build. What I can’t show you on this blog is the animated lighting in that set (well, not until I get a proper vidcap solution sorted out, but that’s way down my list of priorities at the moment – you’ll just have to wait and see it in-world!). I’ve gone with the old cliche of having light shining into the scene through a ventilation duct with a fan in it. I’ve never understood why anyone would mount a light above a fan like that but I can’t argue with the atmospheric effect it produces.

It took some experimenting to get this effect to look right, though. The obvious solution, and my first attempt at it, was to have a simple light projector shining down from above a mesh fan. This sort of worked but the SL rendering engine is picky about what shadows it renders – if the shadow-casting object is too far away it gets culled from the shadow mapping and all the effects disappear. With the fans mounted on a high ceiling the effect of their shadows rarely made it to the ground.

What I eventually ended up with was a (fairly crude) mesh fan that projected its own shadow map into the scene.

Mesh objects can act as projector lights as well as prims. They will project light along what Lightwave labels as the +Z axis and Blender labels as the +Y axis. This makes it fairly easy to construct a mesh fan that will be able to project a light from its face and a projection texture that will reflect the effect of a light shining from behind the fan.

FanBlades2

Projection texture for the fan

SL is much more reliable when dealing with light projectors – there’s no awkward culling; they project their light over their configured range reliably.

Add this to a small mesh duct that places a poly behind the fan that I can assign a white fullbright texture to with a little glow and you get a convincing effect of light shining into the scene through a fan.

Each fan has a small script that uses llTargetOmega to set them spinning – the projected light spins with the prim that’s projecting it – and the effect is complete.

This technique adds reliable dynamic lighting to a 14m high room – no problems with shadow culling. The effect seen in-world is great, especially when interacting with normal- and specular-mapped objects.

I’d like to add some volumetric lighting effects to this as well but I’m still working on that and I suspect that I won’t be able to make it work effectively in any case. Still, I’m happy enough with what I have so far 🙂

USCSS Conrad 8 : More building and lighting

Despite the lack of updates the work continues on the Conrad. Over the past few days I’ve been polishing off a lot of the scripts and builds that were just roughed in. Now all the doors work, trigger the correct lights; the cargo lift is functioning and the ambient sound effects system is coming along nicely.

The sound in particular is very important to the atmosphere. Despite my familiarity with the build I’ve actually got properly creeped out a couple of times doing a walkthrough with the lights out and the sounds on.

I’ve fleshed out the starting point of the experience at last. You begin in a docking tube extended from the USCSS Montero, a salvage ship, to an exterior airlock of the Conrad.

w1

First view into the Conrad

First view into the Conrad

I’ve also added a lot more detail to the airlock corridor – texture work to add a patina of dirt and a lot of extra normal map detail to stop the walls looking boring and flat.

w3

There’s also been a fair bit of work on props for the interior, the largest being an escape pod system:

Room for everyone

Room for everyone

Hmm...looks like someone may have got out

Hmm…looks like someone may have got out

Unfortunately as things go on it looks like I may have to abandon some of the things I’d planned for this build. I need to get it into an LI of less than 700 and I’m nearly hitting half that already without even really beginning on the lower deck yet. I’ll have to see what I can save with a bit of cunning linking here and there and maybe the odd rebuild of a prop or two.

I’ve had a fair bit of success in hitting my LI targets for the props – I’ve gone over a few times, but on the whole things have worked out about as well as I could expect.

There’s still experimental work going on and I’m still finding more efficient ways to get the effects I want.

 

Notes on lighting

As I’ve mentioned before a big part of the idea behind this build was to see how far I could push SL’s Advanced Lighting Model to get atmospheric effects. It’s a powerful system, despite a number of flaws and peculiarities, that I just haven’t seen used all that much around the grid. There’s not much call for it when you’re making clothing either 😉

I’m mostly making use of projector lights – if you haven’t tried them yourself or seen them elsewhere they act like a slide projector, shining an image into the scene.

For maximum effect they need to have something to project, of course. To get projection textures I’ve been making realistic physical copies of actual lights in Lightwave, creating models with emissive filaments, reflectors and lenses, then capturing their light as a baked texture. I’ve found that a lot of the time the best effects come from introducing some imperfections into the model – a misaligned filament, imperfect lens or smudged reflector.

These textures only need to be low-rez most of the time but the subtle texturing really seems to add something to the scene. It certainly introduces a lot of lovely soft edged shadows into the build, so I can’t complain.

I’m including a few of the textures I’ve been using in this post for you to have a play around with. I’m releasing these under a CC Attribution NonCommercial ShareAlike 4.0 International license at least until the Conrad build is complete. Have a play for now and wait for the free components I’ll be releasing when it’s all done.

Luminous tube cluster

Luminous tube cluster

Point filament torch with imperfect lens

Point filament torch with imperfect lens

Linear filament with faceted reflector and perfect lens

Linear filament with faceted hemispherical reflector and perfect lens

Linear filament off-centre in faceted hemispeherical reflector with imperfect lens

Linear filament off-centre in faceted hemispeherical reflector with imperfect lens

 

USCSS Conrad 7 : Computer interfaces

The Conrad is a bit more than just a backdrop build; there’s a story here that I want to tell. The general idea is that you can explore the Conrad, enjoy the ambiance and discover the fate of her crew through interacting with the environment.

I’m sure anyone who has played any games in recent years is familiar with the idea of finding books, logs, or other information scattered about the world. Each game presents it in a different way. This is the mechanism that I’ve settled on for telling the story of the Conrad – SL doesn’t really give me a lot of choice there, but I guess if it’s good enough for Skyrim and Deus Ex it’s good enough for me!

The question is: How can I present it in SL in a way that both works to tell the story and doesn’t break the immersion in the scene?

I’ve tried several different options. The simplest for presenting some text to the user is for an object to give them a notecard, but that really seemed to take me out of the scene. “Hey, here’s a glaringly obvious SL mechanic!” Notecards are also very plain. I can embed pictures, but only as a clickable link. There’s no bold or italic and no control over the font at all. I definitely want richer text than notecards can offer.

Next I went down the route of using web media on a prim. On the face of it this was ideal, but this too came with some problems. First is that I know a lot of people either disable this feature entirely or set it not to auto-play. Sure, I could front-load the experience with instructions to turn this setting or that setting on, but I want to keep that to a minimum. The second problem is that you always get that floating media toolbar over it, something that again breaks the immersion.

What I’ve settled on so far is to use a prim, texture and script based system to present computer screens in the build with interactive elements:

Conrad PC_001

The screen in the picture above has an LI of 4 and contains two interactive windows displaying transcripts of voice logs along with other data. The documents are images, so I can construct any degree of “richness” for them in Illustrator – there are limitations on resolution, of course, so there’s only so much I can get in there but it’s accommodated everything I’ve written so far well enough.

The windows themselves are interactive in that you can scroll up and down the documents they contain using either the up/down arrows on the scroll bar, the top/bottom buttons or by just clicking on the body of the document and dragging it up or down.

The scrolling is accomplished by using llDetectedTouchUV to track mouse clicks and drags and then llOffsetTexture to shift the content. There’s a little mathematical fiddling in the script to preserve the correct aspect ratio of the content no matter the shape of the window prim.

It’s not perfect but it checks a lot of boxes on my wishlist, particularly:

  • Rich text – no limitations; I can do anything I like in an image.
  • Immersive – no floating toolbars, no SL mechanics, no nothing; you just reach into the scene, touch things and the things react.

The downsides are that the size of the document is going to be limited by the maximum resolution of SL textures. There’s only so much information I can fit into that space but my experiments confirm that it should be sufficient.

I intend to use this technique in several places – there will be a combination of text sources, on desktop computers, PDAs and other devices scattered around the Conrad. The build is designed to lead you on a particular path through it but knowing what a contrary and awkward kind of person the average SL user is (but I love you all, really 😉 ) I’m trying to keep the narrative coherent enough that you can piece it together even if you totally ignore the sequence cues.

 

USCSS Conrad 6 : Facehuggers 101

My last post showed that one of the props I’ve built for the USCSS Conrad build was a Facehugger. I guess that means the cat’s out of the bag about the whole thing being an Alien tribute.

Making the Facehugger was a little out of my comfort zone but ended up being a lot less trouble than I expected for such a complex organic shape. In this post I’m going to run through the steps I took to create the mesh and textures. A lot of this is going to be specific to the tools I use, like Lightwave, but I’m going to talk in general terms as much as possible so that it’s applicable to whatever tools you’re using (hint: not Lightwave – I think I’m the only one left using it for SL!).

Building the Mesh
The Facehugger has a symmetrical structure; on each side there are four digitals (or “legs”, if you’re not a synthetic – I’m looking at you, Ash), a breathing sac and half of the tail. That gives us six things per side, so I began with a short twelve sided cylinder. I pulled the vertices at the back out to give it a more elliptical shape, and wider faces to serve as the roots of the breathing sacs.

The first four polygons on each side I extended out into the legs. At this point I’m just roughing things out so I just extended the edges using Lightwave’s bevel tool which allows you to extend out a polygon along its normal and scale the result at the same time. Three applications got me legs with two very basic knuckles on each.

I similarly beveled out the extended polys behind the legs to form the breathing sacs. Another bevel on the top rounded out the back of the creature a little.

Mesh 01

Now that I had the shape of the creature roughed out I started working with it as a subdivision surface. Hitting Tab in Lightwave toggles between mesh and subdiv, so I was switching back and forth, refining the mesh to create a more detailed subdiv surface.

I added more detail on the bottom of the creature, beveling it into a hollow then scaling the vertices inward and beveling again to create the hollow proboscis.

Mesh 02

This looked like it was going in the right direction so I extended the tail, finalising the overall shape of the thing.

Mesh 03

 

Next up it was time to refine the detail of the Facehugger. This involved a lot of switching in and out of subdiv mode, dragging vertices around and scratching my head while looking at reference material.

The biggest change was the rebuild of the legs. They needed to have knuckles rather than just be straight. Everything after the end of the first poly was amputated and rebuilt with boxy joints that would pull the subdiv surface out into the knuckles I needed. This left the base mesh looking a little lumpy,

Mesh 04

but it worked a treat for the subdiv surface.

Mesh 05

At this point I was happy enough with the basic shape of the subdiv surface so I froze it into a mesh (Ctrl+D, in case you were wondering how Lightwave rolls) and looked to the UV maps.

There’s just no good way to unwrap a mesh this convoluted. You can break the thing up into dozens of UV islands that make efficient use of the map space at the expense of making the thing practically impossible to work with. In the end I elected to split the mesh into top and bottom halves, unwrap each separately and then plonk them down next to each other. This ends up with a fair amount of dead unused space on the UV map but it’s a map you can work with in 2D painting packages quite easily. Everything’s swings and roundabouts.

Mesh 06

So, now things need more detail. Time to break out Zbrush!

I exported the UV mapped mesh as a Wavefront OBJ file (I know Lightwave has GoZ now, but it just doesn’t work in a useful way) and imported it into Zbrush as a new tool. There’s not a lot interesting to say about the Zbrush process – if you know Zbrush then you can imagine it all already. If you don’t, well, nothing I can say will make it clear.

I moved from mouse to the Wacom tablet and added detail to the model in Zbrush, ending up with a super-high poly model with ribbed flesh, extended knuckles and all kinds of lightly nauseating detail around the proboscis on the underside. I could probably have accomplished the same results in Sculptris but I was feeling crash-averse that day and opted for Zbrush.

Mesh 07

Texturing
I exported the high poly model from Zbrush and used that with the original mesh to create a normal map in xNormal. Both models were in Wavefront OBJ format which xNormal likes well enough. A little fiddling with the settings got me a clean normal map.

Texture 00

 

I fed this normal map to Knald and it obligingly generated me height, concavity, convexity and ambient occlusion maps from it.

Texture 01

There’s a lot of useful information in these different maps – layering them together in a 2D package like GIMP with different blend modes can create some interesting effects. I played with this for a while until I got something I was happy with, then painted in more detail like the red, fleshy underside around the proboscis. This comprised several layers: colour, highlights, blue veins, red veins, more highlights. I added some more colour with a textured brush over the top of everything to produce a diffuse map for the model that, I think, worked pretty well. I wasn’t too precise with things since a little randomness enhances the overall organic feel of the model, I think.

Texture 02

I also used a similar process to create a specular map that gave some low shine over the creature’s body and a slippery gloss around the fleshy underside.

The final stage was to use Lightwave to arrange the low poly model in several different poses as required for the overall build – curled up and dead, flat out and dead (and more, perhaps not so dead 😉 ).

xFinal01

 

Uploaded to SL this looks just as good as I’d hoped when I began the build. The land impact is relatively high at seven, but with a shape this complex I was never going to get away with much less while preserving the silhouette – the Conrad build has a heavy emphasis on lighting and shadows so the silhouette of the model was quite important to me.