how do you animate a texture in 3d space (or atleast give the illusion of doing this)
*****************
again edited with even simpler code
simplye add the parm alpha pdflick [ time * 1 ]
to the diffusemap stage (yup diffuse not bumpmap)
and you dont even need a height map for this it will do it with the normal map file it will displace in 3d the normals that easy
****correction blend blend not diffuse****
Edited with new simpler method
Code:
textures/exhale1/gen_local_test3rgb
{
{
blend diffusemap
map textures/learning/shiny.tga
translate 1,time*0.05
}
{
blend specularmap
map textures/learning/shiny_a_s.tga
translate 1,time*0.05
rgb subtleflick [ time * 4 ] / 3
rgb (.8 * sintable [.002 + time ]) + .2
}
{
blend bumpmap
map textures/learning/shiny_a_local.tga
translate 1,time*0.05
rgb subtleflick [ time * 4 ] / 3
rgb (.8 * sintable [.002 + time ]) + .2
}
}
note the rgb bit works like a charm
*********
********CREDITS*********
Rich_is_Bored
PBMAX
hi_volt
der_ton
blackdog
bittoman
doomkid3000
BloodRayne
ViPr (you were right about using just a few lines of code)
for all your insights comments patience and help with out wich I could not have figured this out and written this tutorial
also my hats off the the moderators and all the guys that contribute regularly here
************************
first off all the textures are 2d but using normal maps, height maps, specular maps deform particle etc you can give 3d illusion to your images
what if you wanted something to move outward and inward in a cycle how do you do this
*****edited with additional and simple method in a reply look for the entry that uses the expand deform in the mtr file
********There are 3 methods so far
things you should know by now
1. how to create a diffuse map (standard texture)
2. how to create a specular map (light interaction textures)
3. Hopefully you should know how to create
a. a normal map
b. a height map
things you will need
A game engine we will assume your designing for either doom3 or quake 4 and have one of those engines.
a paint program In my examples I will be using the GIMP
http://www.gimp.orgTHere is also a normal map plugin for the gimp wich is what I will be using in my screen shots
(google for the download )
a text editor
kate,kwirte,gedit or notepad if you use windows
texteditor will work fine on osx
As I mentioned there are 3 methods all with pros and cons
the first is the most omplex but maybe the most straight forward also
The first method will use a if statement in a mtr file for preaty much the whole process
First off create your base texture you will be using (your diffuse map)
now based on this texturee you need to create a black and white image that depicts the areas you want lit (dark little light interaction white means the most)
we will be useing a normal difuse map and a normal specular map
heres where the fun begins we are going to make a normal map for all the different stages we want here is an example of the 1st stage
[img=http://img141.imageshack.us/img141/8288/10zm2.th.jpg]if you look you will note a few things none of wich are set in concrete but will give you an Idea where to start
first off to have a normal map follow the dimensions you want the standard practice is to invert x&y and as you notice those are check marked
next I selected filter 9x9 because I feel its of better quality the choice on filter is up to you
next scale I chose 100 the most possible
the reason being were going to make a second one
if you note that the only parm is the scale
I now have 90 in there instead of 100
I will keep creating normal maps like theese until I hit 0
at wich point I will uncheck the boxes for invert X&Y and work my way back to 100
this will give me a bunch of normal map textures
now for my naming convention in my example
my folder for textrues
\base\textures\learning
the name of the texture is ig
so knowing that we should have a
ig.tga
ig_s.tga
and a bunch of ig local files in my example they are named like this
ig1_local.tga
ig2_local.tga
etc
so lets jump in and look at some code that we will be placing in our mtr file
Code:
textures/exhale1/expexp99
{
[color=blue] {
blend diffusemap
map textures/learning/ig.tga
}[/color]
[color=green] {
blend specularmap
map textures/learning/ig_s.tga
}[/color]
[color=red] {
if ( ( time * 88 ) % 44 == 0 )
blend bumpmap
map textures/learning/ig0_local.tga
}[/color]
{
if ( ( time * 88 ) % 44 == 1 )
blend bumpmap
map textures/learning/ig1_local.tga
}
{
if ( ( time * 88 ) % 44 == 2 )
blend bumpmap
map textures/learning/ig2_local.tga
}
{
if ( ( time * 88 ) % 44 == 3 )
blend bumpmap
map textures/learning/ig3_local.tga
}
{
if ( ( time * 88 ) % 44 == 4 )
blend bumpmap
map textures/learning/ig4_local.tga
}
{
if ( ( time * 88 ) % 44 == 5 )
blend bumpmap
map textures/learning/ig5_local.tga
}
{
if ( ( time * 88 ) % 44 == 6 )
blend bumpmap
map textures/learning/ig6_local.tga
}
{
if ( ( time * 88 ) % 44 == 7 )
blend bumpmap
map textures/learning/ig7_local.tga
}
{
if ( ( time * 88 ) % 44 == 8 )
blend bumpmap
map textures/learning/ig8_local.tga
}
{
if ( ( time * 88 ) % 44 == 9 )
blend bumpmap
map textures/learning/ig9_local.tga
}
{
if ( ( time * 88 ) % 44 == 10 )
blend bumpmap
map textures/learning/ig10_local.tga
}
{
if ( ( time * 88 ) % 44 == 11 )
blend bumpmap
map textures/learning/ig10_local.tga
}
{
if ( ( time * 88 ) % 44 == 12 )
blend bumpmap
map textures/learning/ig9_local.tga
}
{
if ( ( time * 88 ) % 44 == 13 )
blend bumpmap
map textures/learning/ig8_local.tga
}
{
if ( ( time * 88 ) % 44 == 14 )
blend bumpmap
map textures/learning/ig7_local.tga
}
{
if ( ( time * 88 ) % 44 == 15 )
blend bumpmap
map textures/learning/ig6_local.tga
}
{
if ( ( time * 88 ) % 44 == 16 )
blend bumpmap
map textures/learning/ig5_local.tga
}
{
if ( ( time * 88 ) % 44 == 17 )
blend bumpmap
map textures/learning/ig4_local.tga
}
{
if ( ( time * 88 ) % 44 == 18 )
blend bumpmap
map textures/learning/ig3_local.tga
}
{
if ( ( time * 88 ) % 44 == 19 )
blend bumpmap
map textures/learning/ig2_local.tga
}
{
if ( ( time * 88 ) % 44 == 20 )
blend bumpmap
map textures/learning/ig1_local.tga
}
{
if ( ( time * 88 ) % 44 == 21 )
blend bumpmap
map textures/learning/ig0_local.tga
}
{
if ( ( time * 88 ) % 44 == 22 )
blend bumpmap
map textures/learning/ig0b_local.tga
}
{
if ( ( time * 88 ) % 44 == 23 )
blend bumpmap
map textures/learning/ig1b_local.tga
}
{
if ( ( time * 88 ) % 44 == 24 )
blend bumpmap
map textures/learning/ig2b_local.tga
}
{
if ( ( time * 88 ) % 44 == 25 )
blend bumpmap
map textures/learning/ig3b_local.tga
}
{
if ( ( time * 88 ) % 44 == 26 )
blend bumpmap
map textures/learning/ig4b_local.tga
}
{
if ( ( time * 88 ) % 44 == 27 )
blend bumpmap
map textures/learning/ig5b_local.tga
}
{
if ( ( time * 88 ) % 44 == 28 )
blend bumpmap
map textures/learning/ig6b_local.tga
}
{
if ( ( time * 88 ) % 44 == 29 )
blend bumpmap
map textures/learning/ig7b_local.tga
}
{
if ( ( time * 88 ) % 44 == 30 )
blend bumpmap
map textures/learning/ig8b_local.tga
}
{
if ( ( time * 88 ) % 44 == 31 )
blend bumpmap
map textures/learning/ig9b_local.tga
}
{
if ( ( time * 88 ) % 44 == 32 )
blend bumpmap
map textures/learning/ig10b_local.tga
}
{
if ( ( time * 88 ) % 44 == 33 )
blend bumpmap
map textures/learning/ig10b_local.tga
}
{
if ( ( time * 88 ) % 44 == 34 )
blend bumpmap
map textures/learning/ig9b_local.tga
}
{
if ( ( time * 88 ) % 44 == 35 )
blend bumpmap
map textures/learning/ig8b_local.tga
}
{
if ( ( time * 88 ) % 44 == 36 )
blend bumpmap
map textures/learning/ig7b_local.tga
}
{
if ( ( time * 88 ) % 44 == 37 )
blend bumpmap
map textures/learning/ig6b_local.tga
}
{
if ( ( time * 88 ) % 44 == 38 )
blend bumpmap
map textures/learning/ig5b_local.tga
}
{
if ( ( time * 88 ) % 44 == 39 )
blend bumpmap
map textures/learning/ig4b_local.tga
}
{
if ( ( time * 88 ) % 44 == 40 )
blend bumpmap
map textures/learning/ig3b_local.tga
}
{
if ( ( time * 88 ) % 44 == 41 )
blend bumpmap
map textures/learning/ig2b_local.tga
}
{
if ( ( time * 88 ) % 44 == 42 )
blend bumpmap
map textures/learning/ig1b_local.tga
}
[color=red] {
if ( ( time * 88 ) % 44 == 43 )
blend bumpmap
map textures/learning/ig0b_local.tga
}[/color]
}
so lets disect this
first off
textures/exhale1/expexp99
this tells the editor where to place the texture in the list of available textures
next we have a block of code like this
Code:
{
blend diffusemap
map textures/learning/ig.tga
}
this tells the engine that we want to add the diffuse map texture to our material
in this case
textures/leargning/ig.tga
next we have this block of code
Code:
{
blend specularmap
map textures/learning/ig_s.tga
}
this tells the engine we want to add the specular map ig_s.tga
theese two textures are constants wo thats the only time we have to inform the engine of their placement
next we have a chunk of code like this
Code:
{
if ( ( time * 88 ) % 44 == 0 )
blend bumpmap
map textures/learning/ig0_local.tga
}
lets look at this
we are basically stating that we want to break this up into a bunch of frames next we stat that if its the first frame
0 so when we reach the first frame we want the engine to add the layer
bumpmap
textures/learning/ig0_local.tga
our first normal map
the next block says if its the second frame
1 we want to replace
ig0_local.tga with
ig1_local.tga and so on and so forth till we get to number 44
then repeat the loop
so if we altered our normal maps to displace the texture for each fram as the framse cycle we will be presented with a new frame with dirrerent 3d charecteristics
this method in some ways is the most stright forward but also the most time consuming
where the other methods we will delve into give you more control
2nd method use a table and multiple normal maps
lets jump in then we will explain
Code:
table expanderTable4 { snap { 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 15, 15, 15, 15, 15, 15, 15, 15, 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 17, 17, 17, 18, 18, 18, 18, 18, 18, 18, 19, 19, 19, 19, 19, 19, 19, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 20, 20, 20, 19, 19, 19, 18, 18, 18, 18, 17, 17, 17, 16, 16, 16, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 17, 17, 17, 18, 18, 18, 18, 18, 18, 18, 19, 19, 19, 19, 19, 19, 20, 20, 20, 20, 20, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 20, 20, 20, 20, 19, 19, 19, 19, 18, 18, 18, 17, 17, 17, 16, 16, 16, 15, 15, 15, 14, 14, 14, 14, 13, 13, 13, 12, 12, 12, 12, 11, 11, 11, 10, 10, 10, 9, 9, 9, 9, 8, 8, 8, 8, 8, 8, 8, 8, 7, 7, 7, 7, 7, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 10 ,10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 12, 12, 12, 12, 13, 13, 13, 13, 13, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 17, 17, 17, 17, 16, 16, 15, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 2, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 7, 7, 7, 6, 6, 6, 6, 6, 5, 5, 5, 5, 4, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 2, 2, 2, 1 } }
Code:
textures/exhale1/igig2678
{
qer_editorimage textures/learning/ig.tga
flesh
diffusemap textures/learning/ig.tga
specularmap textures/learning/ig_s.tga
{
if ( expanderTable4[ time / 8 ] == 1 )
blend bumpmap
map textures/learning/ig1b_local.tga
}
{
if ( expanderTable4[ time / 8 ] == 2 )
blend bumpmap
map textures/learning/ig2b_local.tga
}
{
if ( expanderTable4[ time / 8 ] == 3 )
blend bumpmap
map textures/learning/ig3b_local.tga
}
{
if ( expanderTable4[ time / 8 ] == 4 )
blend bumpmap
map textures/learning/ig4b_local.tga
}
{
if ( expanderTable4[ time / 8 ] == 5 )
blend bumpmap
map textures/learning/ig5b_local.tga
}
{
if ( expanderTable4[ time / 8 ] == 6 )
blend bumpmap
map textures/learning/ig6b_local.tga
}
{
if ( expanderTable4[ time / 8 ] == 7 )
blend bumpmap
map textures/learning/ig7b_local.tga
}
{
if ( expanderTable4[ time / 8 ] == 8 )
blend bumpmap
map textures/learning/ig8b_local.tga
}
{
if ( expanderTable4[ time / 8 ] == 9 )
blend bumpmap
map textures/learning/ig9b_local.tga
}
{
if ( expanderTable4[ time / 8 ] == 10 )
blend bumpmap
map textures/learning/ig10b_local.tga
}
{
if ( expanderTable4[ time / 8 ] == 11 )
blend bumpmap
map textures/learning/ig10_local.tga
}
{
if ( expanderTable4[ time / 8 ] == 12 )
blend bumpmap
map textures/learning/ig9_local.tga
}
{
if ( expanderTable4[ time / 8 ] == 13 )
blend bumpmap
map textures/learning/ig8_local.tga
}
{
if ( expanderTable4[ time / 8 ] == 14 )
blend bumpmap
map textures/learning/ig7_local.tga
}
{
if ( expanderTable4[ time / 8 ] == 15 )
blend bumpmap
map textures/learning/ig6_local.tga
}
{
if ( expanderTable4[ time / 8 ] == 16 )
blend bumpmap
map textures/learning/ig5_local.tga
}
{
if ( expanderTable4[ time / 8 ] == 17 )
blend bumpmap
map textures/learning/ig4_local.tga
}
{
if ( expanderTable4[ time / 8 ] == 18 )
blend bumpmap
map textures/learning/ig3_local.tga
}
{
if ( expanderTable4[ time / 8 ] == 19 )
blend bumpmap
map textures/learning/ig2_local.tga
}
{
if ( expanderTable4[ time / 8 ] == 20 )
blend bumpmap
map textures/learning/ig1_local.tga
}
{
if ( expanderTable4[ time / 8 ] == 21 )
blend bumpmap
map textures/learning/ig0_local.tga
}
}
lets take a look at this
first off we have a table
table expanderTable4
then we have a bunch of numbers
theese numbers will tell the mtr what stage to present and when
so lets look at the major difference of the actuall mtr
one instead of this
Code:
{
if ( ( time * 38 ) % 18 == 0 )
blend difusemap
map textures/learning/8.tga
}
we now have this
Code:
{
if ( expanderTable4[ time / 8 ] == 1 )
blend bumpmap
map textures/learning/ig1b_local.tga
}
what we are doing is stating that when ever the table reads a 1 we want it to render
ig1b_local.tgaif it hits a 2
then use
ig2b_local.tgaso we can simplify the method bu simply setting up a table to tell it how and when to cycle the texture
lets look at the other part of the code that has changed
Code:
[time / 8 ]
we are saying we want to go 8 times slower if we wanted 8 times faster we would replace the / with a *
this is nice but you still have to create a ton of textures to use it
not very efficient so lets cheat lets cut it down to just one normal map
we will now introduce a height map and the addnormals command
addnormals combines a normal map and a height map into one textures and allows scaling of its properties
a height map is a b&w height representation light and dark designating the depth values
time to jump right in again
Code:
textures/exhale1/greenyjump
{
diffusemap textures/learning/greeny.tga
specularmap textures/learning/greeny_s.tga
{
if ( expanderTable4[ time / 6 ] == 0 )
blend bumpmap
map addnormals ( textures/learning/greeny_local.tga, heightmap( textures/learning/greeny_h.tga, 23 ))
}
{
if ( expanderTable4[ time / 6 ] == 1 )
blend bumpmap
map addnormals ( textures/learning/greeny_local.tga, heightmap( textures/learning/greeny_h.tga, 22 ))
}
{
if ( expanderTable4[ time / 6 ] == 2 )
blend bumpmap
map addnormals ( textures/learning/greeny_local.tga, heightmap( textures/learning/greeny_h.tga, 21 ))
}
{
if ( expanderTable4[ time / 6 ] == 3 )
blend bumpmap
map addnormals ( textures/learning/greeny_local.tga, heightmap( textures/learning/greeny_h.tga, 20 ))
}
{
if ( expanderTable4[ time / 6 ] == 4 )
blend bumpmap
map addnormals ( textures/learning/greeny_local.tga, heightmap( textures/learning/greeny_h.tga, 19 ))
}
{
if ( expanderTable4[ time / 6 ] == 5 )
blend bumpmap
map addnormals ( textures/learning/greeny_local.tga, heightmap( textures/learning/greeny_h.tga, 18 ))
}
{
if ( expanderTable4[ time / 6 ] == 6 )
blend bumpmap
map addnormals ( textures/learning/greeny_local.tga, heightmap( textures/learning/greeny_h.tga, 17 ))
}
{
if ( expanderTable4[ time / 6 ] == 7 )
blend bumpmap
map addnormals ( textures/learning/greeny_local.tga, heightmap( textures/learning/greeny_h.tga, 16 ))
}
{
if ( expanderTable4[ time / 6 ] == 8 )
blend bumpmap
map addnormals ( textures/learning/greeny_local.tga, heightmap( textures/learning/greeny_h.tga, 15 ))
}
{
if ( expanderTable4[ time / 6 ] == 0 )
blend bumpmap
map addnormals ( textures/learning/greeny_local.tga, heightmap( textures/learning/greeny_h.tga, 14 ))
}
{
if ( expanderTable4[ time / 6 ] == 9 )
blend bumpmap
map addnormals ( textures/learning/greeny_local.tga, heightmap( textures/learning/greeny_h.tga, 13 ))
}
{
if ( expanderTable4[ time / 6 ] == 10 )
blend bumpmap
map addnormals ( textures/learning/greeny_local.tga, heightmap( textures/learning/greeny_h.tga, 12 ))
}
{
if ( expanderTable4[ time / 6 ] == 11 )
blend bumpmap
map addnormals ( textures/learning/greeny_local.tga, heightmap( textures/learning/greeny_h.tga, 11 ))
}
{
if ( expanderTable4[ time / 6 ] == 12 )
blend bumpmap
map addnormals ( textures/learning/greeny_local.tga, heightmap( textures/learning/greeny_h.tga, 10 ))
}
{
if ( expanderTable4[ time / 6 ] == 13 )
blend bumpmap
map addnormals ( textures/learning/greeny_local.tga, heightmap( textures/learning/greeny_h.tga, 9 ))
}
{
if ( expanderTable4[ time / 6 ] == 14 )
blend bumpmap
map addnormals ( textures/learning/greeny_local.tga, heightmap( textures/learning/greeny_h.tga, 8 ))
}
{
if ( expanderTable4[ time / 6 ] == 15 )
blend bumpmap
map addnormals ( textures/learning/greeny_local.tga, heightmap( textures/learning/greeny_h.tga, 7 ))
}
{
if ( expanderTable4[ time / 6 ] == 16 )
blend bumpmap
map addnormals ( textures/learning/greeny_local.tga, heightmap( textures/learning/greeny_h.tga, 6 ))
}
{
if ( expanderTable4[ time / 6 ] == 17 )
blend bumpmap
map addnormals ( textures/learning/greeny_local.tga, heightmap( textures/learning/greeny_h.tga, 5 ))
}
{
if ( expanderTable4[ time / 6 ] == 18 )
blend bumpmap
map addnormals ( textures/learning/greeny_local.tga, heightmap( textures/learning/greeny_h.tga, 4 ))
}
{
if ( expanderTable4[ time / 6 ] == 19 )
blend bumpmap
map addnormals ( textures/learning/greeny_local.tga, heightmap( textures/learning/greeny_h.tga, 3 ))
}
{
if ( expanderTable4[ time / 6 ] == 20 )
blend bumpmap
map addnormals ( textures/learning/greeny_local.tga, heightmap( textures/learning/greeny_h.tga, 2 ))
}
{
if ( expanderTable4[ time / 6 ] == 21 )
blend bumpmap
map addnormals ( textures/learning/greeny_local.tga, heightmap( textures/learning/greeny_h.tga, 1 ))
}
}
lets take a loot at the differences
we now have
just one local file
greeny_local.tga
and a new file
a height map
greeny_h.tga
then at the end we have som funny numbers that start at
23 and on the bottom line has a
1 theese are really the only variables we are altering what we are saying
is for each time that the table hits a certain number use that height map at this level of intensity..
so even though you still require a lot of code most of it can be done quickly with a copy and paste effort.
so what happens if we want it to push inwards can we use a negative sign
unfortunatly not
you will need to create a second height map with the heightmap colors inverted and the normal maps x&y not inverted and reference them for teh sequece you want to push inward with
thats all for now when I get a chance I plan on releasing a prefab pack with all theese textures and a whole lot more
pluse I will upload an animated gif so you can see the results
couldn't you skip making a hundred different normal maps by creating a single grey scale height map in the gimp right off the bat?
Im ammazed this actually works
Code:
textures/exhale1/jutyr_scroll_def_expb
{
deform expand 0.5*sintable[time*0.25]
forceOpaque
{
if ( expanderTable4[ time / 12 ] == 0 )
forceHighQuality
blend blend
map addnormals ( textures/learning/huyt_a_local.tga, heightmap( textures/learning/huyt_a_h.tga, 10 ))
rotate time*0.001
translate time*-0.002,time*0.002
}
{
if ( expanderTable4[ time / 12 ] == 0 )
forceHighQuality
blend blend
map textures/learning/huyt.tga
rotate time*0.001
translate time*-0.002,time*0.002
}
{
if ( expanderTable4[ time / 12 ] == 1 )
forceHighQuality
blend blend
map addnormals ( textures/learning/huyt_a_local.tga, heightmap( textures/learning/huyt_a_h.tga, 10 ))
rotate time*0.001
translate time*-0.002,time*0.002
}
{
if ( expanderTable4[ time / 12 ] == 1 )
forceHighQuality
blend blend
map textures/learning/huyt.tga
rotate time*0.001
translate time*-0.002,time*0.002
}
{
if ( expanderTable4[ time / 12 ] == 2 )
forceHighQuality
blend blend
map addnormals ( textures/learning/huyt_a_local.tga, heightmap( textures/learning/huyt_a_h.tga, 9 ))
rotate time*0.001
translate time*-0.002,time*0.002
}
{
if ( expanderTable4[ time / 12 ] == 2 )
forceHighQuality
blend blend
map textures/learning/huyt.tga
rotate time*0.001
translate time*-0.002,time*0.002
}
{
if ( expanderTable4[ time / 12 ] == 3 )
forceHighQuality
blend blend
map addnormals ( textures/learning/huyt_a_local.tga, heightmap( textures/learning/huyt_a_h.tga, 8 ))
rotate time*0.001
translate time*-0.002,time*0.002
}
{
if ( expanderTable4[ time / 12 ] == 3 )
forceHighQuality
blend blend
map textures/learning/huyt.tga
rotate time*0.001
translate time*-0.002,time*0.002
}
{
if ( expanderTable4[ time / 12 ] == 4 )
forceHighQuality
blend blend
map addnormals ( textures/learning/huyt_a_local.tga, heightmap( textures/learning/huyt_a_h.tga, 7 ))
rotate time*0.001
translate time*-0.002,time*0.002
}
{
if ( expanderTable4[ time / 12 ] == 4 )
forceHighQuality
blend blend
map textures/learning/huyt.tga
rotate time*0.001
translate time*-0.002,time*0.002
}
{
if ( expanderTable4[ time / 12 ] == 5 )
forceHighQuality
blend blend
map addnormals ( textures/learning/huyt_a_local.tga, heightmap( textures/learning/huyt_a_h.tga, 6 ))
rotate time*0.001
translate time*-0.002,time*0.002
}
{
if ( expanderTable4[ time / 12 ] == 5 )
forceHighQuality
blend blend
map textures/learning/huyt.tga
rotate time*0.001
translate time*-0.002,time*0.002
}
{
if ( expanderTable4[ time / 12 ] == 6 )
forceHighQuality
blend blend
map addnormals ( textures/learning/huyt_a_local.tga, heightmap( textures/learning/huyt_a_h.tga, 5 ))
rotate time*0.001
translate time*-0.002,time*0.002
}
{
if ( expanderTable4[ time / 12 ] == 6 )
forceHighQuality
blend blend
map textures/learning/huyt.tga
rotate time*0.001
translate time*-0.002,time*0.002
}
{
if ( expanderTable4[ time / 12 ] == 7 )
forceHighQuality
blend blend
map addnormals ( textures/learning/huyt_a_local.tga, heightmap( textures/learning/huyt_a_h.tga, 4 ))
rotate time*0.001
translate time*-0.002,time*0.002
}
{
if ( expanderTable4[ time / 12 ] == 7 )
forceHighQuality
blend blend
map textures/learning/huyt.tga
rotate time*0.001
translate time*-0.002,time*0.002
}
{
if ( expanderTable4[ time / 12 ] == 8 )
forceHighQuality
blend blend
map addnormals ( textures/learning/huyt_a_local.tga, heightmap( textures/learning/huyt_a_h.tga, 3 ))
rotate time*0.001
translate time*-0.002,time*0.002
}
{
if ( expanderTable4[ time / 12 ] == 8 )
forceHighQuality
blend blend
map textures/learning/huyt.tga
rotate time*0.001
translate time*-0.002,time*0.002
}
{
if ( expanderTable4[ time / 12 ] == 9 )
forceHighQuality
blend blend
map addnormals ( textures/learning/huyt_a_local.tga, heightmap( textures/learning/huyt_a_h.tga, 2 ))
rotate time*0.001
translate time*-0.002,time*0.002
}
{
if ( expanderTable4[ time / 12 ] == 9 )
forceHighQuality
blend blend
map textures/learning/huyt.tga
rotate time*0.001
translate time*-0.002,time*0.002
}
{
if ( expanderTable4[ time / 12 ] == 10 )
forceHighQuality
blend blend
map addnormals ( textures/learning/huyt_a_local.tga, heightmap( textures/learning/huyt_a_h.tga, 1 ))
rotate time*0.001
translate time*-0.002,time*0.002
}
{
if ( expanderTable4[ time / 12 ] == 10 )
forceHighQuality
blend blend
map textures/learning/huyt.tga
rotate time*0.001
translate time*-0.002,time*0.002
}
{
if ( expanderTable4[ time / 12 ] == 11 )
forceHighQuality
blend blend
map addnormals ( textures/learning/huyt_a_local.tga, heightmap( textures/learning/huyt_a_h.tga, 0 ))
rotate time*0.001
translate time*-0.002,time*0.002
}
{
if ( expanderTable4[ time / 12 ] == 11 )
forceHighQuality
blend blend
map textures/learning/huyt.tga
rotate time*0.001
translate time*-0.002,time*0.002
}
{
if ( expanderTable4[ time / 12 ] == 12 )
forceHighQuality
blend blend
map addnormals ( textures/learning/huyt_b_local.tga, heightmap( textures/learning/huyt_b_h.tga, 1 ))
rotate time*0.001
translate time*-0.002,time*0.002
}
{
if ( expanderTable4[ time / 12 ] == 12 )
forceHighQuality
blend blend
map textures/learning/huyt.tga
rotate time*0.001
translate time*-0.002,time*0.002
}
{
if ( expanderTable4[ time / 12 ] == 13 )
forceHighQuality
blend blend
map addnormals ( textures/learning/huyt_b_local.tga, heightmap( textures/learning/huyt_b_h.tga, 2 ))
rotate time*0.001
translate time*-.002,time*.002
}
{
if ( expanderTable4[ time / 12 ] == 13 )
forceHighQuality
blend blend
map textures/learning/huyt.tga
rotate time*0.001
translate time*-.002,time*.002
}
{
if ( expanderTable4[ time / 12 ] == 14 )
forceHighQuality
blend blend
map addnormals ( textures/learning/huyt_b_local.tga, heightmap( textures/learning/huyt_b_h.tga, 3 ))
rotate time*0.001
translate time*-.002,time*.002
}
{
if ( expanderTable4[ time / 12 ] == 14 )
forceHighQuality
blend blend
map textures/learning/huyt.tga
rotate time*0.001
translate time*-.002,time*.002
}
{
if ( expanderTable4[ time / 12 ] == 15 )
forceHighQuality
blend blend
map addnormals ( textures/learning/huyt_b_local.tga, heightmap( textures/learning/huyt_b_h.tga, 4 ))
rotate time*0.001
translate time*-.002,time*.002
}
{
if ( expanderTable4[ time / 12 ] == 15 )
forceHighQuality
blend blend
map textures/learning/huyt.tga
rotate time*0.001
translate time*-.002,time*.002
}
{
if ( expanderTable4[ time / 12 ] == 16 )
forceHighQuality
blend blend
map addnormals ( textures/learning/huyt_b_local.tga, heightmap( textures/learning/huyt_b_h.tga, 5 ))
rotate time*0.001
translate time*-.002,time*.002
}
{
if ( expanderTable4[ time / 12 ] == 16 )
forceHighQuality
blend blend
map textures/learning/huyt.tga
rotate time*0.001
translate time*-.002,time*.002
}
{
if ( expanderTable4[ time / 12 ] == 17 )
forceHighQuality
blend blend
map addnormals ( textures/learning/huyt_b_local.tga, heightmap( textures/learning/huyt_b_h.tga, 6 ))
rotate time*0.001
translate time*-.002,time*.002
}
{
if ( expanderTable4[ time / 12 ] == 17 )
forceHighQuality
blend blend
map textures/learning/huyt.tga
rotate time*0.001
translate time*-.002,time*.002
}
{
if ( expanderTable4[ time / 12 ] == 18 )
forceHighQuality
blend blend
map addnormals ( textures/learning/huyt_b_local.tga, heightmap( textures/learning/huyt_b_h.tga, 7 ))
rotate time*0.001
translate time*-.002,time*.002
}
{
if ( expanderTable4[ time / 12 ] == 18 )
forceHighQuality
blend blend
map textures/learning/huyt.tga
rotate time*0.001
translate time*-.002,time*.002
}
{
if ( expanderTable4[ time / 12 ] == 19 )
forceHighQuality
blend blend
map addnormals ( textures/learning/huyt_b_local.tga, heightmap( textures/learning/huyt_b_h.tga, 8 ))
rotate time*0.001
translate time*-.002,time*.002
}
{
if ( expanderTable4[ time / 12 ] == 19 )
forceHighQuality
blend blend
map textures/learning/huyt.tga
rotate time*0.001
translate time*-.002,time*.002
}
{
if ( expanderTable4[ time / 12 ] == 20 )
forceHighQuality
blend blend
map addnormals ( textures/learning/huyt_b_local.tga, heightmap( textures/learning/huyt_b_h.tga, 9 ))
rotate time*0.001
translate time*-0.0002,time*.0002
}
{
if ( expanderTable4[ time / 12 ] == 20 )
forceHighQuality
blend blend
map textures/learning/huyt.tga
rotate time*0.001
translate time*-0.0002,time*.0002
}
{
if ( expanderTable4[ time / 12 ] == 21 )
forceHighQuality
blend blend
map addnormals ( textures/learning/huyt_b_local.tga, heightmap( textures/learning/huyt_b_h.tga, 10 ))
rotate time*0.001
translate time*-0.0002,time*.0002
}
{
if ( expanderTable4[ time / 12 ] == 21 )
forceHighQuality
blend blend
map textures/learning/huyt.tga
rotate time*0.001
translate time*-0.0002,time*.0002
}
forceOpaque
deform expand 4*sintable[time*0.25]
}
If you create a tube or a patch mesh and distort it so it is flesshy shapped
you get a nice pulsating flesh or slime texture
FFS such a thing should be accomplished with just a few lines of code. if it takes several pages of code like this then you are using the wrong method.
this is very cool.
can you link a vid of this in action?