terrain blending tutorial


(Mr_Tickles) #41

Hey Ratty, sorry, I didn’t think this would warrant a new topic so I decided to post here…

I’ve been reading through the shader manual quite a bit recently and have come across a few questions, and seen as though you and ydnar are terrain and shading gods I thought I’d ask this here.

I was wondering how you knew what vector you should input for use with the dotproduct, dotproduct2 functions. Is it the direction of the light which shines on the surface? and if so couldn’t there be a compiler stage which checks for this? It does seem a bit innaccurate, or very time consuming if the mapper had to work this vector out himself/herself.

Also, I’m just wondering about the whole light thing. What exactly is a lightmap? Is it a bunch of lines drawn to the surfaces it can see? Or is it like a tracemap that’s super imposed over your map indicating where things should be lighter or darker or hinted etc. ? Something completely different? Maybe this is a bit of a n00b question, if so please can you point me in the right direction for info on this (hopefully not the door).


(ratty redemption) #42

@Mr_Tickles, I found the dotproduct vectors by trial n error and by using ydnar`s example shaders as starting values.

imo good values for dotproduct2 are between 0.8 and 0.95 …I think the higher the vectors the sharper the blending will be, eg for longer blends use lower numbers.

iirc the original dotproduct produced similar results to the newer values of 0.8 but using about 0.54 so had a large range of values we could use, I dont think there is much else between the old and new ...but hopefully ydnar will correct me if Ive got any of that wrong.

as for lightmaps, they are images stored in the bsp, or in external folders in et with some shaders, and each lightmap pixel, determines the gamma and color when blended with a tex on it`s corresponding surface.

in most q3 engine games we can toggle on and off the lightmaps and tex in game, using /toggle r_lightmap and /toggle r_fullbright

strangely the r_lightmap one turns off the tex showing the lightmaps on surfaces, and r_fullbright turns off lightmaps showing the tex at the brightest settings… which is higher gamma then we`d see when viewing the original tex in a paint program.


(Mr_Tickles) #43

Hmmm, i’m still curious, I’m doing a Maths course at the moment and would like to put my finger on how exactly this works…
The difference between the dotproduct function and the dotproduct2, as I read it, is that the second one is the square of the first, meaning (dotproduct)^2 = dotproduct2. I guess this is for honing the shading as much as possible. Were you using those values for each of the three inputs?

Does this mean that if you had a brush face which was parallel to both the x and y axis, where the normal would be the z axis, used dotproduct, or dotproduct2 with the inputs (0 0 1), you’d get as sharp a blend as you could? And if you used the inputs (1 1 0) you’d get the most blending?
Although, if you used (0 1 0) or (1 0 0) would this mean that you’d get sharp blending on opposite edges of the texture and blurry blending on the other two opposite faces?

Sorry for the technical speak, only way I could write it…

With the lightmap thing, am I right in thinking then that it is pretty much a duplicate of the map, but with the light values in place of the textures, and when the map is run, the engine puts them together?

Sorry to be a pain, would just like to know how these things work :slight_smile:


(ratty redemption) #44

Were you using those values for each of the three inputs?

nope, the vectors are x, y, z axis so if a surface like ground or a cave ceiling is mainly facing upwards or downwards then we`d leave the first two values at 0, eg ( 0 0 0.8 )

although your right a value of 1 on any axis would be as sharp a blend as possible, or to be more precise, no blend, just a hard edge between the different tex used.

eg a sloped brush with a flat top using a rock, grass dotproduct blend would I think, only result in the grass on the top face of the brush, with rock on the sloped sides.

although any totally vertical sides will get a horrible stretched tex on them, so that is where we`d use a different dotproduct shader, which could be a clone of the first one, but with vectors like ( 0.8 0 0 ) or ( 0 0.8 0 ) depending on which axis the vertical face are on.

With the lightmap thing, am I right in thinking then that it is pretty much a duplicate of the map, but with the light values in place of the textures, and when the map is run, the engine puts them together?

yes, that`s my understanding of it, as either or both lightmaps and tex can be turned off in game, and they appear to share exactly the same surfaces, except for vertex lit shaders which have their surfaces left out of the lightmap pics.

one of the clever things your notice if you look at any external lightmaps, which are outputted in .tga format iirc, is how q3map2 maps them onto a blank image.

the result is like a model skin with some surface shapes, seemingly rotated 90% and aligned as close to each other so not wasting background space on the images… hard to image if you`ve never seen a skin tex or lightmap.


(Mr_Tickles) #45

Hmmm, ok, making a bit more sense now, thanks :slight_smile:

When the compiler does the blending, if I had two brushes side by side, would the dotproduct function bring the adjoining texture image onto it’s brush face to blend, i.e. have bits of each texture either side/one side of the border line of the two textures? Or would I need to apply the function to both textures?

One more pedantic question: So, if you’re only using one of the axes/inputs when defining the vector you want to use, (considering the normal is in only one axis, or that you’ve taken into account the slope of the normal by using the other two inputs). Why does the shader need to have the three inputs, why not just have a single input with the variance, or a normalized angle to that normal with 0 being sharp blend, or no blend, and 1 being totally blurry? (Hope that makes sense).

Edit:

No, sorry, it wouldn’t be the angle, more like the magnitude


(ratty redemption) #46

if I understand your first question, then yes, the dotproduct shaders do work across brush boundaries.

but iirc they are also affected by the q3map_shadeangle, so if those use too low a values, producing sharp shadow edges between surfaces, then the dotproduct is likely to produce sharper blends, or no blends at all.

ie for the smoothest results use high shade angles eg 178 and low dotproduct2 values like ( 0 0 0.8 ) although it`s a while since I tested this so it may not work as I remembered.

any lower then 0.8 and I didn`t notice any difference to the results, but with very shallow or steep surfaces it might be more noticeable.

regarding your 2nd question, Ive wondered that as well, but I assume its so we can have values using more then one vector at a time for eg surfaces at 45 degree angles being treated like the axial surfaces, although it would be simpler to just have a magnitude and input from the surface normal as you suggest.


(Mr_Tickles) #47

Thanks for you time and patience Ratty, great help! :slight_smile:

Hmmm, yeah, I think it would be easier for the input to be a magnitude working from the surface normal because then if you had an odd angled plane you wouldn’t need to spend ages working out what the normal is. I don’t know, maybe there is something more to it, maybe ydnar could explain if he’s got a spare moment.


(ratty redemption) #48

cool :drink:

and what I know about how all this stuff works, is just the tip of the iceberg compared to ydnar.

for a start I`m just an artist and designer, and my maths is appalling… I have to remember what visual results certain values produce in game, rather then work them out mathematically.

lets just hope that ydnar read your posts, even if he doesnt comment on your suggestion, its still possible he could implement it in the future if hes got time, unless of course he thinks its a bad idea for some reason, which we may never know.

over time Ive come to accept thats just the way he works, which is fair enough considering its his tools we ask him to change… saying that there is no harm imo, with asking him to implement or fix something if we do it politely, which admittedly I havent always done in the past, but Ive personally matured since then, and my respect for ydnar has grown a lot over the last couple of years :notworthy: :clap:


(WolfWings) #49

Okay… this ‘dithering’ terrain is very different than normal ‘linear’ terrain. I think a misconception is that the directions jump back and forth between making the textures and the actual map a bit too much.

A simpler description might help for those that could figure this out as well though… Ratty, am I even understanding what this is doing before I try to do it myself to experiment with?

Ratty seems to be taking an edge where two textures meet between any two brushes, and using the AlphaMod brushes in a func_group to ‘layer in’ a secondary ‘dithering’ texture to blend between the other two textures.

I.E. This is a method that can be applied to walls, adding rust somewhere, or most anything else, but in this case, Ratty is using it to create terrain-blends, and using a texture with an existing alpha-channel to get a very ‘spotty’ blend, instead of the impossibly-clean blends that simple ‘alphaGen vertex’ blends tend to make.

I think that’s the problem, is that this reads like it’s only something that applies to Terrain for most of it, but the ‘technique’ Ratty is really explaining here is how to combine AlphaVolume brushes with alpha-channel textures as a very advanced form of decal in-game that’s less of a performance hit and more widely usable.


(ratty redemption) #50

eh, yes you got it, and there are loads of blending situations other then terrain where this type of dithered alphamod volume blending could be used.

rust is a good example as the dithered blending looks like the patterns rust often forms irl, so would just need rust colored tex… and this method could also be used to add dirt, sand decals on walls, floors to make them look older or more used.

Im about to post the 2nd chapter in my tutorial, Id taken the pics for some of it before I posted the 1st chapter, but I kept updating, tweaking the shaders, as well as getting side tracked by other test maps and projects I`m working on.

there is another type of blending which Ill cover in a 3rd chapter... its what I was using before the volume blending but it would be very slow work to apply to a whole terrain map, although it still has some uses for smaller decals.

I welcome any mappers to help translate my tutorials into more newbie friendly versions, all I ask is I`m credited as the original author and all tutorials are tested and as accurate as possible at the time of posting, even if they use slightly different construction methods or shaders to me.


(ratty redemption) #51

chapter 2: using volume blending to reduce tiling patterns on terrain

image 269 shows one of my dotproduct blended rock faces.

I`ll post the shader later on, but for now just note the shader used a q3map_tcmod rotate 33 which is why the grain of the rock is at a slant, ie off axis, not lying directly north, south, west or east.

and even though their is some topographic distortion, the tex patterns are already becoming obvious.

the rock tex used here is 512x512 size and scaled to repeat every 512 units in game, the larger the tex the further from the camera before the tiling patterns start to look unnatural, but at certain distances even the largest tex would be prone to this.

image 253 shows what that scene looks like in radiant.

the light gray shader is the main rock one.

textures/_ratty_terrain/base3
{
	q3map_lightmapsampleoffset 16
	q3map_shadeangle 178
	q3map_tcmod rotate 33
	q3map_nonplanar
	q3map_forcemeta
	q3map_alphamod dotproduct2 ( 0 0 0.84 )
	q3map_tcgen ivector ( 512 0 0 ) ( 0 512 0 )
}

textures/_ratty_terrain/dirt_rock_blend  // rock wall, dirt transition
{
	qer_editorimage textures/_ratty_terrain/grey_terrain.tga
	q3map_baseshader textures/_ratty_terrain/base3
	surfaceparm grasssteps
	{
		map textures/_ratty_terrain/ratty_dirt_m03.tga  // dirt transition
		tcgen vector ( 0.00390625 0 0 ) ( 0 0.00390625 0 )  // 256
		//rgbgen const ( 0.6 0 0 )  // uncomment to debug
	}
	{
		map textures/_ratty_terrain/ratty_cliff_m05dcon.tga  // rock wall
		alphagen oneminusvertex
		alphafunc ge128
	}
	{
		map $lightmap
		blendfunc filter
	}
}

the brown shader is the multi stage blend between the grass and rock shaders… the reason I do this is to save fps, by reducing shader stages on areas that dont need them, ie the majority of the grass areas dont need any rock stages, and vise versa.

textures/_ratty_terrain/dirt_grass_rock_blend  // grass floor, rock wall, dirt transitions
{
	qer_editorimage textures/_ratty_terrain/brown_grey_terrain.tga
	q3map_baseshader textures/_ratty_terrain/base3
	surfaceparm gravelsteps
	{
		map textures/_ratty_terrain/ratty_dirt_m03.tga  // dirt transition
		tcgen vector ( 0.00390625 0 0 ) ( 0 0.00390625 0 )  // 256
		//rgbgen const ( 0.6 0 0 )  // uncomment to debug
	}
	{
		map textures/_ratty_terrain/ratty_mxrock0b.tga  // grass floor
		alphafunc ge128
		alphagen vertex
	}
	{
		map textures/_ratty_terrain/ratty_cliff_m05dcon.tga  // rock wall
		alphagen oneminusvertex
		alphafunc ge128
	}
	{
		map $lightmap
		blendfunc filter
	}
}

the green shader is… you guessed it, the grass shader :wink:

textures/_ratty_terrain/grass
{
	qer_editorimage textures/_ratty_terrain/green_terrain.tga
	q3map_lightmapsampleoffset 16
	q3map_lightmapmergable
	q3map_shadeangle 178
	q3map_tcmod rotate 33
	q3map_nonplanar
	q3map_forcemeta
	q3map_tcgen ivector ( 512 0 0 ) ( 0 512 0 )
	surfaceparm grasssteps
	{
		map textures/stone/mxrock0b.tga
	}
	{
		map $lightmap
		blendfunc filter
	}
}

note, this isn`t a dotproduct shader as it only needs an image and lightmap stage.

image 254 shows a 2nd darker grey rock shader added to some of the brushes …in game the shaders look very similar, but it`s easier to construct if the qer_editorimages are distinctive.

textures/_ratty_terrain/base6
{
	q3map_lightmapsampleoffset 16
	q3map_shadeangle 178
	q3map_nonplanar
	q3map_forcemeta
}

textures/_ratty_terrain/rock2
{
	qer_editorimage textures/_ratty_terrain/grey_white_terrain.tga
	q3map_baseshader textures/_ratty_terrain/base6
	q3map_tcmod rotate -66
	q3map_tcgen ivector ( 512 0 0 ) ( 0 512 0 )
	surfaceparm grasssteps
	{
		map textures/_ratty_terrain/ratty_mountain_c06.tga  // rock 2 wall
		//rgbgen const ( 0 0.6 0.6 )  // uncomment to debug
	}
	{
		map $lightmap
		blendfunc filter
	}
}

unlike the dirt_rock_blend shader, this rock2 shader doesnt use dotproduct, as I didnt want any dirt showing through this one… but the main difference is the q3map_tcmod rotate -66 as opposed to a value of 33 for the other rock shader.

image 281 shows the ratty_mountain_c06.tga which is was originally one of the rtcw rock tex.

image 282 shows the alpha channel I made for it, which has similar staining to the dirt alpha channel I showed in image 263

image 270 shows a compile of this in game, but with a green rgbgen const to highlight the rock2 shader… you might be able to see that the tex grain on that shader is at a different angle, but dont worry if you cant, because at this distance it`s not very noticeable, even without the green filter.

image 255 shows the rock2 brushes in radiant, which had been cloned and func_group`d into volume blend sections, in the same way as the ones created in chapter 1 of this tutorial.

other then the black shaded brushes on the right, showing another type of blending which I`ll explain latter in another chapter, the only real difference in radiant is the angles of the volume sections are steeper.

but this has no real effect on the volume blending in game, it`s just a little harder to see where to place the alpha brushes, and to edit them.

although using the brush sheering construction method, its quite easy once weve done it a few times… note, only the alpha brushes are sheered, not the actual clones of the rock2 brushes.

here`s the blend shader, the alpha is the same one used in the first chapter.

textures/_ratty_terrain/base1
{
	q3map_shadeangle 178
	q3map_tcmod rotate -66
	q3map_nonplanar
	q3map_forcemeta
	q3map_nolightmap
	surfaceparm nonsolid
	surfaceparm nomarks
	surfaceparm trans
}

textures/_ratty_terrain/rock_volume_blend
{
	qer_editorimage textures/_ratty_terrain/red_grey_terrain.tga
	q3map_baseshader textures/_ratty_terrain/base1
	q3map_tcgen ivector ( 512 0 0 ) ( 0 512 0 )
	//cull disable  // uncomment to debug
	polygonoffset
	{
		map textures/_ratty_terrain/ratty_mountain_c06.tga  // rock 2
		rgbgen vertex
		//rgbgen const ( 0.5 0 0 )  // uncomment to debug
		alphagen oneminusvertex  // inverses the value of the volume alpha
		alphafunc ge128
	}
}

image 256 shows the volume blend sections overlaid on the original rock brushes.

although in these pics I hadnt covered all the seems between the different rock shaders, as I was still unsure at the time which blend method to use in this map... since then Ive decided to use dithered volume blending on nearly all those rocks, but you can choose which ever method you like best.

image 271 shows the volume blending in game with red colored filters to highlight them …the thin green one on the right is the other blending method, I briefly mentioned earlier.

image 272 shows the same scene with out the colored filtering.

some of you may be thinking this was a lot of work for such a subtle effect, and at times I also thought this… but these pics are taken relatively quite close to the rock face, and from the middle of the map, the effect works well so does it very close up, as there are no hard edges between the different shaders.

at great distances, there is still some tiling patterns visible but they are less obvious then before, and if I had the time and patients, I could have several blend sections of rock all using different tex scales or rotations to further break up the tiling… saying that, 2 different rotations, eg 33 and -66 are fine in this case, especially if I also use fog culling so one side of the map can`t clearly be seen from the other side.

image 274 is a pic from psp7 showing a gamma altered, arthimetic difference filter.

this psp filter creates a new image showing the difference between two other images, in this case the rockface before and after the 2nd rock shader and volume blending was added… note there is a vertical misalignment of a couple of pixels, but that actually helps us as it shows the outline of the hills.

the more colorful, saturated and brighter the pixels, the bigger the difference between the original images.

chapter 3 coming soon.


(Mr_Tickles) #52

Hey Ratty, nice tutorials, I’ve had a crack at the first one and got some very pleasing results :smiley:
Not meaning to be crtical, but could you explain the concepts you are going to use when you first post the tutorial so that we can understand what we are trying to do while we are doing it please? Would be a great help. Thanks :slight_smile:


(obsidian) #53

You don’t have to actually do the math yourself, the compiler does it for you. In the manual, I was just illustrating how Q3Map2 does the dotproduct function for those who are interested in the theory involved. All you have to enter are the first set of vectors ( X Y Z ), the second set is taken from the vertex normals (done automatically), does a simple dotproduct math calculation and outputs a value. This final outputted value represents the amount of transparency for this specific vertex point on your terrain.

The values that you set for ( X Y Z ) changes the direction from which blending occurs. Typically, you will use large values for Z with small values for X and/or Y on terrain since you want the falloff to occur primarily on the Z axis. What range of values should you use? The values determine the initial amount of blending. Take this for example, say you set a DP value of ( 0 0 0.5 ) on a surface that is lying flat along the X and Y direction. Q3Map2 finds the vertex normal vector values for this surface to be ( 0 0 1 ) since the normal is facing straight up along the Z axis. The calculation would be as follows:

( 0 0 0.5 ) dp ( 0 0 1 ) = 0 * 0 + 0 * 0 + 0.5 * 1 = 0.5

So this vertex would be 50% opaque. Your entire terrain will range between 50% to 0% opacity depending on the vertex normal. Using a DP value of ( 0 0 1 ) in the above example will yield opacity ranging from 100% to 0%. Again, all this math is done automatically for you. All you have to think about is which direction you want the DP to occur and how much opacity (or as you put it, magnitude) you want to start off with.

As a last example, lets say you set a DP value of ( 0.5 0 1 ). What kind of results will occur? Your terrain blend will be 50% opaque on surfaces with vector normals facing the X axis, 0% opaque on surfaces with vector normals facing Y and 100% opaque on surfaces with vector normals facing Z. All the in-between surfaces will be calculated accordingly. A 45-degree normal between the X and Z axes would have a 75% opacity (halfway between 100% and 50%).

DP2 works the exact same way as the examples above except that it does a square on final value. The visual difference is just a faster falloff.

Hope this answers all your q3map_dotProduct questions, especially the one about the setting the magnitude being simpler. Once you understand how this works, you’ll hopefully see that this is already how the DP function works, except that it gives you full control over all axes as well.

@ ratty: Is DP affected by q3map_shadeAngle? I don’t see how this fits into the equation, mathematically DP doesn’t take shade angle into account… unless the vertex normal is averaged from the shade angle somehow…?

Lightmaps are actually low resolution TGA files generated by Q3Map2 that are stored within the BSP file. All lightmapped surfaces are filtered (you’ll notice that lightmapped shaders will have a blendFunc filter added to either the lightmap stage or the base stage) over the lightmap image. Dark spots on the lightmap will cause a darkening of the base texture and light spots will cause the base texture to remain on fullbright. Ratty’s right about Q3Map2 being very smart and arranging the lightmaps to take as little wasted space as possible.


(Mr_Tickles) #54

Woah, thanks. Love the info! :smiley:

I’m still a bit baffled as to what you mean by the normal of a vertex though. I’ve always been taught that the normal of a plane is the line which is perpendicular to it, i.e. the normal of the plane in X,Y would be the Z axis. Also, the normal of a line, is the line perpendicular to it, i.e. if you had a line on a 2D graph y = x, the normal to it would be the line at 90 degrees, or the line y = -x. I’ve only seen the normal of a line in 2D though, but in 3D I guess it should really be the plane that the line is the normal of. If this convention follows, which I don’t think it does, then the normal of a vertex should be every possible line going through that point?

Sorry for being a bit pedantic over this, but I’d love to know and understand the concepts that i’m using.

Oh, just read through it again, could a vertex’s normal, be the actual co-ordinate of the vertex? Or maybe the unit vector to that co-ordinate?

Ummm, just re-read it again, so… the vertex normal is actually the normal of the plane as a whole and not just the individual verteces?
Woah, why can’t it just be the normal of the plane! Lol :slight_smile:

Ok, after reading again, I was under the assumption that a vertex is a point, or one of the corners of the brush, is this not the case?

The magnitude I was referring to is the size of the vector.
i.e. V = 3x+4y+5z where 3 would be the magnitude of x, 4 the magnitude of y and 5 the magnitude of z. Sorry, maybe things are taught differently in the U.K. to the U.S.

This is another place where I get confused…
If you have 50% transparency for the Y axis, and 100% transparency for the Z axis, for the angle at 45 degrees you would get 106% transparency. That is if you are talking about vectors. This is because, with a bit of trig, the components of each of the vectors form the Y axis and the Z axis are added. If you want the formula it is:
50cos45+100cos45 = transparency at the 45 degree angle
Hmmm, maybe it doesn’t work by calculating the vectors for the normals in between because 106% transparency does seem a bit odd…

You probably think i’m a right smart-arse now… please don’t. I’m only trying to further my understanding. Sorry if I come across like that. :bored:

I can see now why you would have three inputs for the vector. Thanks :slight_smile:

Also, thanks for explaining the lightmaps :slight_smile:

I have other questions about the way the shader code is laid out, but I’ll leave that until another time, and maybe a more appropriate thread.
Thanks again.


(ratty redemption) #55

@Mr Tickles, cool and good idea, Ill edit the first posts of my water and terrain tutorials next time I update them, which hopefully will be after the weekend as Ive recently made improvements to my water shaders, and finally made all my own water tex from scratch, so I can soon release some sample maps for any non commercial q3 engine maps to use.

I`ll also be getting round to testing that weird double plane water bug you were having.

sorry I can`t help with your last post but this stuff is best left to ydnar and obsidian and a few other top mappers who are better then me at maths… tbh, I could only follow half of your post, although there is nothing wrong with it, just most maths goes over my head.

@obsidian, good post and it helped me better understand the maths involved, although Ill personally likely end up doing lots of test compiles when tweaking my shaders, as that is the way I seem to work best, rather then me trying to predict the results, but thats just the way my mind works.

its not the quickest or most efficient if people can understand and remember the maths, which Im bad at.

Is DP affected by q3map_shadeAngle? I don’t see how this fits into the equation, mathematically DP doesn’t take shade angle into account… unless the vertex normal is averaged from the shade angle somehow…?

I remember this surprised me as well and I might be confusing it with some other tests I did at the time, but I`ll check this before next updating my tutorials and confirm or correct my previous findings.


(Mr_Tickles) #56

Thanks for the post Ratty :slight_smile: Glad to hear you still have the dual water planes fun yet to come :smiley:

I’ve been having some fun with this alpha blending method tonight. I’ll try to post the results up here in a while, if not tomorrow.


(ratty redemption) #57

@Mr Tickles, cool and I`m seeing a pattern here :wink:

rodents and felines (assuming your online persona is based on the latter?) are very curious animals and like to understand how and why things work… unfortunately, some times we won`t be able to satisfy our curiosity but there will always be something else to divert our attention :smiley:


(Mr_Tickles) #58

Lol, well, i’ve never thought of myself as a cat before, but i’m willing to try on the costume this time… :huh:

Oh! Gross, I think someone just puked outside my window, YUK! No, really!

Sorry… oh yeah, I think the dual water planes thing may have had something to do with me trying to add fog into the water shader. It may have something to do with the deformVertexes I was using at the same time…

Anyway, as I said earlier, I’ve been having some fun with the alpha blending…

Then I decided to apply it to thin air! Not sure if you can make it out there, but there’s an overhang of the grass…

Also, I decided to put some falling leaves in after I bumped into this site:
http://www.greeneggsnspam.com/tuts/map6/index.asp
There’s a good tutorial from Ricebug.


(ratty redemption) #59

@Mr Tickles, that`s an excellent tutorial you linked to :slight_smile:

I knew technically how to make those various effects but hadn`t thought of the concepts.

the best thing for me about that tutorial and your pics you just posted, is I was hoping the terrain and water tutorials would evolve beyond what I have used the technology for, ie it`s inspiring to see what other people think of doing with the engine.

and previously I had tried a quick test where I made an ice overhang for a roof using a linear volume blended snow type tex… but again I hadnt thought of using it to make grass overhangs, which in the future Ill be adding to my terrain maps in places :slight_smile:

Sorry… oh yeah, I think the dual water planes thing may have had something to do with me trying to add fog into the water shader. It may have something to do with the deformVertexes I was using at the same time…

interesting and Ill keep that in mind, although I wouldnt of imagined combining those shader effects would of produced the results you had, but well see what happens when I try this out in the near future... do you have your shader still lying around from that test map? I know I dl the .map but I cant remember if it had a shader in it?

off topic:

Lol, well, i’ve never thought of myself as a cat before, but i’m willing to try on the costume this time…

Oh! Gross, I think someone just puked outside my window, YUK! No, really!

hee hee, well I just assumed “Mr Tickles” was a cat`s name.

as for trying on furry costumes, it`s probably best if next time you draw shut your curtains before you change your clothes… that way your less likely to scare the neighbors :wink:

personally, my anthropomorphism is mainly just metaphysical… ie I`m not quite perverted enough, to even want to try on a fur suit, lol :banana:

but irl I am quite a hairy chap and have a longish, single, thick dread lock at the back of my head, which I call my ratty tail …although admittedly I haven`t seen many ratties with dyed red tails before :smiley:


(Mr_Tickles) #60

No, I take that back now, I will definately not try on the cat suit! :smiley:
Ummm, just to clarify… I’m not perverted, I’m not a furry, and that really was someone throwing up outside my window…

:nod:

Yeah, I’d love to have a look at the terrain and water tutorials. I’ll go have a search for them.
It would also be good if you linked to the other tutorials at the beginning of each one you do. Keep 'em all together sort of thing.

Well, I’m glad that I now know that about you, makes me feel all warm and fuzzy inside. :huh: I have short hair, well, used to. I’ve grown it for about 3 months now, and it isn’t really that much longer… why am I telling you this? :uhoh: :smiley: