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 🙂

Advertisements

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.

More on the USCSS Conrad

Work on the USCSS Conrad proceeds apace. If I had some kind of plan for this I’m sure I’d be able to update you with a series of tightly focussed posts that home unerringly in on a final product. I don’t have a plan, though, so I just built a load of random things and shoved them onto the grid.

 

Nauseating Alien Column:

This morning I got tired of the clean lines of the Conrad itself and decided to branch out into some alien stuff. There’s going to be a fair bit of this but I started with a fairly simple floor-to-ceiling column of glistening goo. Starting with a twelve foot shaft of gleaming mucus is a plan that has served me well in the past so I saw no reason to change now.

Really alien. Also slightly nauseating.

Really alien. Also slightly nauseating.

This started as a simple outline model in Lightwave that I then imported into Zbrush. A little work with the Wacom tablet produced a high poly model (around 800k polys) and a lightly modified version of the low poly model. I baked out the normals from the high poly and ran them through Knald to get an Ambient Occlusion and Convexity maps.

I took these maps and layered them over a dark green background in GIMP. A few copies of the ambient occlusion map added some depth to the surface in multiply blend mode. The convexity map went over the top in screen blend mode to highlight the convex veins in a lighter colour. It produced a diffuse texture that seems very effective when combined with the normal map and a high specular shine. I’ll likely be using this kind of cycle to produce other bits of alien architecture.

The low poly model went back into Lightwave for further decimation using the brutally effective qemLOSS3 plugin and then was uploaded to the grid for a final LI of 3, which isn’t too bad for the size I’m making them.

 

Casualties:

Next up were a couple of casualties, preserved under Aleph’s excellent antibacterial sheets.

Fresh as a daisy and only slightly dead

Fresh as a daisy and only slightly dead

These were a fairly quick build. I used Poser (I’m still using the copy of Poser 4 that I bought in, I think, late 2000. It’s a miracle it still works) to make a couple of posed figures. I fiddled with them a little in Lightwave (what’s a little dismemberment and decapitation between friends?) and then dropped a simulated cloth across them both.

Another quick cycle through low and high poly models got me some grid-ready meshes and normal maps. A few minutes in Illustrator made the diffuse texture – those Aleph guys sure like to brand everything. They’re not subtle like Weyland-Yutani.

 

Projecting Screen:

The Conrad is going to be dark. Very dark. It’s my plan that the final version will require users to wear a small HUD that uses RLV to control their Windlight environment settings (the SL experience tools may also be able to do this but since they’re not available it’s gonna have to be RLV). While building I wear a simple version of this HUD that I can turn on and off with a click in order to test the experience. With the HUD active there is no ambient light at all and only things lit directly by in-world lights show up. This incredibly dark environment lets subtle lighting effects really show up very well.

A lot of the effort in this build is going into lighting – I need to get something that will let me record video of SL proprly so I can post something that shows the scripted lighting effects I’ve got in place already. I’ll probably talk about these in a later post once I’ve expanded them a bit more.

One of the lighting effects I want to use is having active display screens project their light into the scene. This is pretty simple to do with projector lights but nothing’s ever quite as straightforward as it seems.

Conrad ScreenProjector

The pic above shows part of the main lounge area of the Conrad with the light from a status monitor illuminating the walls and a door. The screen is showing a simple image of ship’s status (long story short: not good) but also projecting that image into the scene.

To get this effect I drew a stark black and white image for the monitor to display in Illustrator:

Decal Ship Status-01

I’m sure it’ll buff out

To make this image into something useful I needed to run it through a few GIMP filters and then flip it horizontally. In SL we have some very nice fine control over images applied as textures (we can scale them, flip them, tile them etc) but we have none of that flexibility for light projector images, so we have to build the image for use as a projector and then use the texture options to make it look right as a texture.

Upload Decal Ship Status

As you can see the final image is a bit glowy and a little pixelated and mirrored left-to-right. If used as a light projector image it will be “right” for being the projected light of the original unflipped image. It’s also squashed into a square format for uploading to SL, but that’s really incidental to the real work.

This image can be used directly as a light projector image. To use it as the texture on a mesh you need to change the horizontal scale to -1.0, flipping it back to the right way round. Set the surface to full-bright, add a little glow and you get a really cool effect that casts subtle and correct light into the scene.

 

So, that’s the state of the USCSS Conrad as it stands now. Land Impact 52 and growing…

Advanced Materials Texturing

Recently I’ve had a bit of a thing going on with the Lament Configuration box from the Hellraiser series of films. It’s purely platonic, I assure you, but something compelled me to make one. It’s been an interesting little exercise in mesh building, scripting and texturing and I think it makes a good base for a tutorial in texturing.

I’m going to skip over the mesh building and scripting since that’s not so interesting and concentrate purely on the texturing of the box. Also, of course, the Lament Configuration is a copyrighted entity, so just pretend you never heard me mention it and from now on we’re building the entirely original Lachyrmose Combination box.

Mesh components in Lightwave

Mesh components in Lightwave

The designs on each face of the entirely original cube are picked out in brass inset into dark wood. In order to represent this in SL with the materials system we’re going to need to control the diffuse channel (colours), the shine (specular channel), the glossiness (specular exponent), the reflectivity (environmental intensity) and bumpiness (normals) of the surface. This sounds like a lot but in this tutorial all of those textures are derived from just three original images : A brass texture, a wood texture and the pattern on the face.

The Wood Texture

wood002

I created this texture in Lightwave – most 3D and texturing packages will have a “wood grain” or similar texture that you can use to make this kind of image. If you don’t have access to that then feel free to use this one under a CC Attribution license or there are plenty that can be acquired on the internet under similar terms.

I’ve played with the colours a little in a bitmap editor and added a little hint of rippling light on top of the original render, just to give the surface a little more life.

The Brass Texture

BrassII

This texture is derived from an image on Flickr by Jay Hilgert, author of the cool BittBox blog/site. The original is available under a CC Attribution 2.0 license.

I’ve reworked it a fair bit from the original, mainly adjusting the colouring to reflect a weathered brass rather than the original steel. This derivative image is, likewise, available for use under a CC Attribution 2.0 license.

Both this texture and the wood are at 1024 x 1024 pixels – this is larger than the final resolution I want but it’s always wise to work in a higher resolution than you need.

The Face Design

CF001-01

The Lachyrmose Combination box needed an entirely original design for its faces. I made three but we’ll concentrate on just one since the techniques used are the same for all. To produce this image I busted out Adobe Illustrator and the wacom tablet to produce a plain black and white image of the design.

This is it for the artistic part of the build – from now on it’s just going to be mashing these three textures up in different ways to produce the effects we need.

For the rest of the post I’ll be using GIMP, the GNU Image Manipulation Program, and a couple of other utilities to create images from the three original textures. I’m using the GIMP since it should be available to everyone, but other bitmap editors should be able to do all the same things.

The Normal Map

The normal map controls the bumpiness of the surface in SL. As I’ve mentioned in a previous tutorial on materials we can create a normal map from a height map using utilities like xNormal or Knald. xNormal is a free package; Knald is now $99 for a single user license – I used Knald to generate my normal map, but I’ve verified that xNormal does the job just as well.

Since I want the effect of the brass standing just slightly proud of the surface of the box the original pattern image does just fine as a height map. Running it through Knald or xNormal got me a suitable normal map:

CF001-01_normal

 

We’ll be seeing this image again later when we combine it with an alpha layer to control the specular exponent.

Ambient Occlusion

Ambient occlusion is a good way of adding some depth to a surface without having to think too much – it’s almost as good as having radiosity without the huge computational hit. In my workflow, Knald will generate me an AO map along with the normal map – it’s a big time saver. If you don’t have Knald there are a couple of alternaitves:

xNormal has a tool that will generate an AO map from a height map. This tool is nowhere near as good as the height map to normal map tool and the AO textures it makes are pretty poor.

The other alternative is to roll your own in GIMP:

  • Drag the original pattern image into a GIMP window.
  • From the menus select Colours / Invert to change it to a black on white image. Go to Filters / Blur / Gaussian Blur on the menus and apply a 10px blur to the image.
  • Drag another copy of the original pattern into the GIMP window – it’ll add it as a new layer on top of the blurred one
  • Change the blend mode of the new layer to “Lighten Only” (just “Lighten” in most bitmap editors)
  • Save the resulting image as a PNG

CF001-01_occlusion

You can change the look of the image by altering the blur radius, or fade it out a little by adjusting the opacity. This won’t produce a true ambient occlusion map, but it’s pretty close.

The Diffuse Layer

This layer takes the wood texture, brass texture, ambient occlusion and the original pattern and layers them up to produce a final texture. The procedure in GIMP runs along these lines:

  • Drag the wood texture into GIMP to open it as a new image
  • Drag with brass texture into the new image to add it as a new layer
  • Drag the original pattern into the new image to add it as a new layer
  • Ctrl+A, then Ctrl+C to select all of the pattern layer and copy it to the clipboard
  • Hide the pattern layer by clicking on the eye icon next to its entry in the layers palette
  • Select the brass layer and right-click on it. Select Add Layer Mask…
  • GIMP will pop-up a dialogue – select any option and click Apply.
  • GIMP will automatically be in mask editing mode at this point
  • Do Edit / Paste from the menu or Ctrl+V to paste the copy of the pattern layer from the clipboard to the brass layer’s mask
  • The layer palette will show the pasted selection as a floating layer
  • Right-click on this layer and select Anchor Down

This will produce an image with the wood texture as a background and the original pattern rendered in brass over the top. This looks OK but some more life can be added with the ambient occlusion layer. Drag a copy of this image into the image to add it as a layer and set the blend mode to Multiply. This will add an effect of darkening the image around the edges of the brass as if it’s been burned into the wood.

I ended up adding several copies of the AO layer, all with the Multiply blend mode, to deepen the effect further.

CF001_Diffuse

This technique of adding one layer over another with an alpha mask (or Layer Mask in GIMPspeak) is one we’ll be using again to create the other images. I won’t go through all the individual steps again, so refer back to the steps in this section for applying the pattern image as a mask to the brass layer.

The Specular Texture

The specular texture is a greyscale image that controls how much light bounces off each point on the surface. In this example I want the wood areas to be a bit shiny and the brass areas to be a lot shiny. This would be easy enough to achieve but I also want to let a bit of the original dirtiness of the brass texture come through to affect the shine so we need to take a little more time over it.

To produce a greyscale image that reflects the original brass surface is simple enough:

  • Load the original brass texture into GIMP
  • From the menus select Colours / Desaturate to produce a greyscale image
  • Adjust the brightness and contrast of the image to produce one where the lightest parts are white (add brightness) and the darker parts aren’t too dark (lower contrast).

BrassII Specular

Save this image then create a new one at the same 1024 x 1024 resolution in GIMP. Fill this image with a mid-grey colour (RGB 127,127,127 or similar).

Drag the specular brass image in as a new layer and then apply the original pattern to it as a mask. This produces a light textured pattern over a grey background. This will have the effect of adding a middling, smooth shine to the wooden parts of the surface and a bright but slightly dirty shine to the brass parts.

CF001_Specular

The Environmental Intensity

The environmental intensity controls how reflective each part of the surface seems. The SL engine doesn’t do true reflection, of course, it uses something known as Environment Mapping. This is the old-style metallic shine SL used to have before the materials project.

For this surface we want to confine these metallic reflections to just the brass. The procedure for creating this image is the same as for the specular map above only fill the background of the image with black instead of mid-grey.

CF001_SpecExp

The Specular Exponent

The specular exponent controls how glossy each point on the surface is. In this case I wanted the wood to be a bit glossy and the brass to be very glossy. In fact, the requirements mirrored the specular map exactly, so there was no need to create a separate specular exponent map for this project; I just re-used the specular map.

Bringing it all together

Now we have four textures that we have created from the wood/brass/pattern originals:

  • The diffuse texture
  • The normal map
  • The specular and specular exponent map
  • The environmental intensity map

With the exception of the diffuse texture these images still aren’t quite ready for uploading to SL. The materials system uses single images for more than one thing, so you have to pack information into both the colour and alpha channels of an image.

The normal map’s alpha channel controls the specular exponent and the specular map’s alpha channel controls the environmental intensity, so we will need to take some of these images and apply them to others as an alpha map.

Using the procedure outlined above for applying an image as a layer mask to another layer in GIMP, load up the normal map and apply the specular map to it as a layer mask.

 

Resize the image to the final output size using Image / Scale Image, then save the resulting image as a PNG file.

GIMP will have you click through two export dialogues. In the first, Export File, dialog select Merge Visible Layers (the default) and then click on Export. In the second ensure that Save colour values from transparent pixels is selected and click on Save.

This will produce a final normal / specular exponent texture that can be uploaded to SL.

Do the same with the specular map, applying the environmental intensity map to it as a layer mask.

The diffuse mask requires no alpha, just resizing down to an appropriate size.

I have a tendency to forget which maps go in the alpha layers of which other maps, so I wrote myself a little app to streamline this part of the process. It’s nothing you can’t just chew through in GIMP, though – just remember to keep it straight which image goes on which alpha layer. The SL Wiki contains information on the texture channels for reference.

LayerComp

My cheat-sheet app

 

The final results

So, how does it look in SL with two more companion sets of textures for the other faces?

LachrymoseSL

Well, pretty cool, I think. It’s hard to get a real flavour of it in a still image but seeing it in a well lit area it really sells the metal-embedded-in-wood flavour of the thing. The combination of specular reflections and environmental intensity can really make metals look like metals at last.

I hope this tutorial has given you some ideas, or at least shown how you can quite easily go from a simple black and white pattern to a deeply detailed materials surface in SL.

Every image in this post is available under a CC Attribution 2.0 license – remember to credit the original author of the texture from which my brass one is derived – so feel free to take copies and have a play around with them yourself.

More Materials : Emissive Masks

Most of the talk I’ve seen about the Materials Project has been connected with the goodness that normal maps and specular maps are going to bring to the party. While these features are going to be great there’s also even more stuff packed into the materials system, so I thought I’d do a quick tour round one of the features I haven’t seen mentioned so much : Emissive Masks.

If you’ve done much building in SL you’re probably familiar with the “Full Bright” checkbox on the texture tab of the build floater. Prims that have this option set always appear brightly lit, even at night – in effect they are emitting their own inner light, so they never fall into shadow. This effect is known as being emissive, or an emissive material.

In the current version of SL you can only apply the emissive property to a prim an entire face at a time – you have no fine control over it. With the Materials Project you can now get fine control over how emissive every bit of a face’s surface is.

What does this mean in practice? I’ve cobbled together an example from an original image downloaded from CGTextures – the front panel of an Audio mixing…gizmo. I don’t know the technical term for what it is; it just had the right amount of shiny when I was looking for a tutorial texture 😉

I’ve taken the original texture, made an emissive mask from it, and applied it to a prim with a little glow thrown into the mix:

EmissiveNightAndDay

By day the effect is to give a little selective glow to the panel. By night the effect is far more dramatic – the illuminated parts of the panel really pop.

To help you achieve this effect yourself I’ll need to cover two main topics: Creating the emissive mask and then how it’s combined with the original diffuse texture for upload.

Creating the Emissive Mask:

The emissive mask is another one of those greyscale masks that are going to be cropping up a lot when you’re dealing with materials – in this case the whiter the image is at any given point controls how much light it will seem to emit.

To make the emissive mask from the original texture I first converted it to a greyscale image – that takes care of the greyscale part of the map.

MakeEmissiveMask

Then it’s a case of painting black over every part of the image that I don’t want to be emissive. In this case it took about ten minutes to carefully black out everything except the glowing displays and indicator lights.

Combining the Texture and Emissive Mask:

Now, to create a texture that uses the emissive mask you must take the original texture and apply the emissive mask to it as an alpha mask. Your graphics editor (and every other piece of software) will interpret this as transparency rather than emissive but once it’s uploaded we can instruct SL to interpret it as we like.

Once the combined texture (original + the emissive as an alpha mask) is uploaded to SL we can get to work on it. Create a simple box prim, select a single face and apply the texture to it. This will look weird at first because SL will interpret the alpha layer as transparency by default.

In the build panel’s texture tab you need to look for the “Alpha Mode” dropdown and change it to “Emissive Mask”. The Materials Project viewer can interpret the alpha mask of a texture in different ways, which is efficient but means that you can’t have a texture with an emissive mask that is also transparent in parts. Swings and roundabouts. Once you set the Alpha Mode to Emissive Mask the prim will look much like the screenshots further up this post.

BuildPanelEmissiveMask

To give some more life to the surface add a little Glow and it’ll really look like those lights are shining out.

Adding More to the Shine

The emissive mask doesn’t really make the surface of an object light up – it’s really just a trick that makes parts of the surface always look bright. We can use some of the existing features of SL to push things a little further, though.

For some time now we’ve been able to create “Projectors” – prims that project a texture as light into the scene. If we combine this with the emissive mask we can get some really nice effects.

To see this in action, take a prim with an emissive mask and look in the “Features” tab of the build floater. In there are the light options where you can set the texture it projects. Turn the light on for the prim and set the projector texture to the same combined diffuse/emissive texture created above. The surface will now not only seem to shine when viewed but it will also project its light into the scene.

EmissiveProjecting

Now the panel not only glows and shines in the right places but actually shines that light onto passing avatars.

Using a projector isn’t perfect – it actually projects a mirror image of what the emissive surface should be projecting into the scene. A little judicious use of the projector’s focus hides this well 😉  I haven’t played enough with the Materials Project to know for sure, but you can probably get it all to work precisely with one texture so long as you’re flipping the x-axis in the right places on the texture tab.

Anyway, that wraps it up for this quick look at emissive textures. Now we can make control panels that seem to light up and cast dramatic light across our avatars’ faces along with a million other things I’m likely too dense to imagine – over to you 🙂

Materials for Dummies

Time for another quick look at the new SL Materials Project viewer and another item from my personal toolbox: xNormal.

I think it’s easy to get the impression that using normal maps and specular maps is going to be just for the high-end users of 3D packages but nothing could be further from the truth. It’s possible to get some nice effects from the materials system without even touching something like Lightwave or Blender.

In this post I’m going to create a set of maps that can be applied to a prim to give its surface a more interesting look than just a single flat texture could. The example I’m using is a numeric keypad such as you’d find on a security door or safe. It’s something that you wouldn’t normally want to build in a complete mesh because it’s really not all that three dimensional, but a flat texture looks pretty boring.

To begin with I created a basic texture with the colours on it – this is called the diffuse texture:

NumPad Diffuse

As you can see, that’s very simple and, if you just apply that to the face of a prim it’s not going to look very interesting.

normal-prim diffuse only

Feel the boredom

To jazz this up a bit it’s going to take a specular texture and a normal map.

I created the keypad texture in Adobe Illustrator, but a free package like Inkscape would have done just as well. Because it’s a vector file in separate layers I could go back and recolour all the parts to create some maps for different purposes.

The first map I created was a specular map. This controls how much light the surface will bounce back, controlling where you get those bright, glossy highlights. I decided to make the background not shiny at all (black), the keypad surround a bit shiny (dark grey), the keys pretty shiny (light grey) and the numbers very shiny (white):

Specular map

Specular map

When I apply this map to the example prim it has an immediate effect:

The effects of specular

The effects of specular

Even if there’s just the default wooden texture on the prim you can see that there’s something going on on that surface by the differential shine.

This still isn’t all that interesting though – to get some really interesting effects it’s time to tangle with a normal map.

Normal maps aren’t particularly human-friendly – it’s hard to just paint on one. There is something that sort of bridges the gap, though: The bump map. Bump maps are greyscale images that represent the bumps on a surface – the whiter the image is at any point the higher the surface is supposed to be. Now, this, you can paint and create easily.

Bump Map

Bump Map

I’ve recoloured the original number pad image again. The brighter the colour, the higher the surface, so you can see that the keypad has a raised (white) edge, each key has a raised (white) edge and each number is inset into the key surface (darker grey).

All this is fine, but Second Life doesn’t use bump maps! Luckily there’s a little piece of free software called xNormal (http://www.xnormal.net) that can, among other things, turn a nice, easy-to-work-with bump map into a normal map. Just what we need.

I should mention that the user interface of xNormal takes a little getting used to…

It's as if a million user interface designers cried out in terror, and were suddenly silenced.

It’s as if a million user interface designers cried out in terror, and were suddenly silenced.

Under its Tools section there’s a “Height Map to Normal Map” tool (some people call ’em Bump Maps, some people call ’em Height Maps. To-may-to, To-mah-to).

From bump map to normal map thanks to xNormal

From bump map to normal map thanks to xNormal

The normal map doesn’t look like all that much to the naked eye – that’s why it’s easier to work with a bump map and then convert it to normals later.

When this normal map is uploaded to Second Life and applied to the test prim the effects are quite dramatic:

Normal map and specular map working together

Normal map and specular map working together

The shiny keypad appears quite clearly even though there’s only the default wood texture applied to the prim.

All it needs now is the original diffuse texture to pull it all together:

Diffuse, specular and normals all applied

Diffuse, specular and normals all applied

Now the surface has some life – the keys and numbers have some dimension to them and the specular map gives differential shine across the different parts.

It’s clear that all this stuff only enhances a surface – it’s no replacement for well built meshes or prim sets, but there’s a lot of scope there for work that can take a model from mediocre to spectacular and, as I’ve shown in this (very long) post, you don’t need to be an expert with hyper-complex 3D apps to get some use from normal and specular maps!