January 14th, 2017

Specular Maps and UVs

Been doing a lot of texture work lately. My true focus is on improving the world scene. I’m really not at all satisfied with how things look now, and I think the current textures are contributing to that.  Other issues could be how the heightmap geometry relates to the buildings, and the level of definition in the building meshes.  I mentioned in a previous post my concerns about balancing distribution of detail among the different maps on a surface. I’ve been looking at textures from recent games I own, and reading what I can find on the topic…

A tutorial on creating a specular map for Quake 4 was helpful. They suggest putting extra highlight around the rims, thinking about how the light rolls accross the object.

When looking through the textures from Quake 4, I was suprised to see height maps included for many of the surfaces. It turns out that when the level loads, Doom just turns these into normal maps and can combine them with other already existing normal maps. Apparently they do this because it allows for an “easier workflow”. Which makes some sense to me. Doing it this way means that all the normal maps can be assumed to be 100% machine rendered. Any “by hand” normal mapping can be added in using the height maps.  Still, you’d think they might want to combine these before release in the interest of load times.
Another thing I’m not completely satisfied with is how the world geometry has it’s UVs defined. When working with game worlds, its important to keep a consistent scale on all the textures, so you don’t get patches with lots of detail and others with very little.  Its very noticable if this is not the case.  At the moment, I have a script which generates the UVs and puts them in a consistent scale.

string $arry[] = `ls -sl`;
for ($k in $arry) {
string $TargetObjName;
$TargetObjName = $k;
select -r $k ;
duplicate -rr -n AlternateObject;
makeIdentity -apply true -t 1 -r 1 -s 1 -n 0 -jointOrient;
polyAutoProjection -ibd 0 -cm 0 -l 2 -sc 0 -o 1 -p 6 -ps 0 -ch 1;
ConvertSelectionToUVs;
polyEditUV -pu 0 -pv 0 -su 0.01 -sv 0.01 ;
polyTransfer -uv 1 -ao AlternateObject $TargetObjName;
delete AlternateObject;
select -cl ;
}

I’m kind of horrible at programming/scripting. The idea here is to use an automatic projection to lay out the faces consistently, without letting it scale the peices. Because polyAutoProjection doesn’t consider the transformations on an object (in the parent or on the transform node) I create a temporary duplicate which gets parented to the world and frozen, then project on this new object, then copy the UVs back to the original object. Right now, if I move any of the verts on an object, I’ll need to rerun this script on that object. So any modifications to the UVs by hand after the script is run have to be considered disposable. I need a solution which can lay out the UVs for all objects in a consistent way like this, but I would like my by-hand modifications to somehow persist through modifications to the verts.
I also gave our music guy a call yesterday, and asked him how he felt about using some of his already existing work (which he had initially written for a different project of ours) for Outland Inc. Our music guy is one of my good friends from my hometown, Ann Arbor MI. He responded very positively.  I’m excited to look through his stuff with him, and discuss what would work where.

Leave a Response



Copyright (c) Stolen Notebook, LLC
Imhotep theme designed by Chris Lin. Proudly powered by Wordpress.
XHTML | CSS | RSS | Comments RSS
| Post