• 🏆 Texturing Contest #33 is OPEN! Contestants must re-texture a SD unit model found in-game (Warcraft 3 Classic), recreating the unit into a peaceful NPC version. 🔗Click here to enter!
  • It's time for the first HD Modeling Contest of 2024. Join the theme discussion for Hive's HD Modeling Contest #6! Click here to post your idea!

The Crystal Effect

In this tutorial I will tell you how to make the crystal effect used in Mc!'s Crystal Golem and my Crystal Dragon

Tools Needed
Warcraft 3 TFT (ROC also possible but I use a TFT ingame skin for this tutorial)
Notepad or Wordpad
War3Fileconverter
Warcraft3 Viewer or/and Magos' model editor
Vertex modifier (or another modeling program)

Knowledge Needed
basic model exporting knowledge
basic mdl editing knowledge
basic modeling knowledge

Getting started
First you need to find a model you want to make in to a crystal one
in this tutorial we'll use the frog model, because it has only one geoset and is a very simple model, but the technique works the same with every other model, it's just more work with more complex models

Note: remember to save your files regularly
CrysTutFrog01.jpg
First, extract the frog model from the Mpq file.
Then you use the file converter to convert the .mdx frog model in to an .mdl file.

Mdl Editing
Now, open the .mdl file, the first thing we do, is change the path of the skin so it uses the crystal texture.
This is what it looks like
Code:
Textures 1 {
 Bitmap {
  Image "units\Critters\Frog\FrogSkin.blp",
 }
}

Change it to
Code:
Textures 1 {
 Bitmap {
  Image "Textures\CrystalOpaque.blp",
 }
}

Now for the model to really look like crystal the textures, materials and geosets have to be copied and make them work propperly, since this model only has one texture, one material and one geoset, thats not going to be that difficult, with more textures, materials and geosets it's just the same, only more copieng work to do.

Copying the textures
Copy this and put it right below it
Code:
 Bitmap {
  Image "Textures\CrystalOpaque.blp",
 }
Then the texture part should look like this:
Code:
Textures 1 {
 Bitmap {
  Image "Textures\CrystalOpaque.blp",
 }
 Bitmap {
  Image "Textures\CrystalOpaque.blp",
 }
}

Copying the Materials
it's almost the same with the materials
copy this:
Code:
 Material {
  Layer {
   FilterMode None,
   static TextureID 0,
  }
 }
and put it below it like this:
Code:
Materials 1 {
 Material {
  Layer {
   FilterMode None,
   static TextureID 0,
  }
 }
 Material {
  Layer {
   FilterMode None,
   static TextureID 0,
  }
 }
}
once you've copied it, you need to change a few things in the code, change it to:
Code:
Materials 1 {
 Material {
  Layer {
   FilterMode None,
   static TextureID 0,
  }
 }
 Material {
  Layer {
   FilterMode Additive,
   static TextureID 1,
  }
 }
}
as you can see, I only changed the "FilterMode" and the "TextureID" on one material, I left the first material unchanged.

Copying the Geosets
By copying the geosets and changing what kind of material ID it should use you can create the overlaying transparent look that makes it look like crystal.
Since the geoset code is really long I'll only copy a small part in to this tutorial
the geoset begins with this:
Code:
Geoset {
 Vertices 157 {
  { -12.3964, 1.52395, 0.31411 },
  { -0.52003, 2.88477, 0.33941 },
  { -5.1976, 4.42178, 3.53995 },
  { -13.4577, 4.11941, 0.31442 },
  { -8.1316, 10.2445, 0.33869 },
  { -3.29927, -0.21647, 3.66749 },
  { -5.1976, 4.42178, 3.53995 },
  { -0.57432, 7.25025, 10.4476 },
  { 6.04609, 6.50425, 11.3752 },
and it ends with this:
Code:
  Matrices { 10, 11 },
  Matrices { 11 },
  Matrices { 12, 13 },
  Matrices { 12, 13, 14 },
  Matrices { 13, 14 },
  Matrices { 14 },
 }
 MinimumExtent { -28.2479, -14.3093, -9.09061 },
 MaximumExtent { 19.7491, 27.7945, 46.2399 },
 BoundsRadius 28.6633,
 Anim {
  MinimumExtent { -28.2479, -14.3093, -3.77587 },
  MaximumExtent { 19.7491, 15.0309, 46.2399 },
  BoundsRadius 26.3345,
 }
 Anim {
  MinimumExtent { -17.6841, -10.6745, -0.0313365 },
  MaximumExtent { 11.7315, 10.2365, 20.4019 },
  BoundsRadius 18.3231,
 }
 Anim {
  MinimumExtent { -19.204, -10.68, -9.09061 },
  MaximumExtent { 12.7842, 27.7945, 32.1506 },
  BoundsRadius 24.6313,
 }
 MaterialID 0,
 SelectionGroup 0,
}
It's a lot of numbers and stuff, but it's all needed, make sure you copy the whole geoset, then paste it directly below it so the first part of the second geoset and last part of the first geoset look like this:
Code:
 }
 Anim {
  MinimumExtent { -17.6841, -10.6745, -0.0313365 },
  MaximumExtent { 11.7315, 10.2365, 20.4019 },
  BoundsRadius 18.3231,
 }
 Anim {
  MinimumExtent { -19.204, -10.68, -9.09061 },
  MaximumExtent { 12.7842, 27.7945, 32.1506 },
  BoundsRadius 24.6313,
 }
 MaterialID 0,
 SelectionGroup 0,
}
Geoset {
 Vertices 157 {
  { -12.3964, 1.52395, 0.31411 },
  { -0.52003, 2.88477, 0.33941 },
  { -5.1976, 4.42178, 3.53995 },
  { -13.4577, 4.11941, 0.31442 },
  { -8.1316, 10.2445, 0.33869 },
  { -3.29927, -0.21647, 3.66749 },
  { -5.1976, 4.42178, 3.53995 },
  { -0.57432, 7.25025, 10.4476 },
  { 6.04609, 6
Now you go to the very bottom of the second geoset and change the "MaterialID" from 0 to 1. Like this:
Code:
 }
 MaterialID 1,
 SelectionGroup 0,
}
Now the mdl editing part is done, so if you convert the .mdl file back to .mdx, this is what it should look like:
CrysTutFrog03.jpg
(this is a screenie take with magos model editor, in the wc3 viewer it looks different)

Model editing in vertex modifier
One of the geosets has to be resized to get that overlapping transparent look.
Since this is a really simple model, this part is about the easiest, but with a complex model like the Crystal Dragon it's much harder.

Open the vertex modifer, and open the .mdl frog model. You'll get a popup window that asks you wich geoset you want to open, because only the second geoset has been modified (the materialID) we are going to open that one
CrysTutFrog04.jpg
there are two ways to make that crystal effect, you simply make one geoset bigger then the other (like Mc! did with his Golem), or you could make it bigger piece by piece (like I did with my Dragon), this takes much more time, but the result can be more detailed, and less messy, but the frog model it a really simple one, so it won't really matter if we just resize one geoset, once you have resized it a bit, save it and convert it back to .mdx
it should now look like this:
CrysTutFrog05.jpg
If it does, then you're finished!

Finishing up
Some times you have to tweak the model a little bit to make it look just right
there are also a few things you can do to change the look of the crystal effect a bit
You can brighten the transparent part by making it twosided
this is how you do that in the mdl file
Change this:
Code:
Materials 1 {
 Material {
  Layer {
   FilterMode None,
   static TextureID 0,
  }
 }
 Material {
  Layer {
   FilterMode Additive,
   static TextureID 1,
  }
 }
}
To this:
Code:
Materials 1 {
 Material {
  Layer {
   FilterMode None,
   static TextureID 0,
  }
 }
 Material {
  Layer {
   FilterMode Additive,
   TwoSided,
   static TextureID 1,
  }
 }
}
In the code I added "TwoSided,", that makes it twosided (duh), but the "T" and the "S" should be spelled with capitals, if you don't do this, it will not work. when you saved the .mdl file and converted it to .mdx you can see the differance if you compare them

Normal
CrysTutFrog05.jpg

Twosided
CrysTutFrog06.jpg
the differance isn't that noticable, but with models where the layers overlap each other more you can see a great differance, my Crystal Dragon uses a twosided outside, and Mc!'s Crystal Golem doesn't
Here below you can see the examples

My Crystal Dragon
CrystalDragonPreview.jpg
Mc!'s Crystal Golem
CrystalGolem.jpg

Have fun with making your own crystal creatures!

And special thanks for Mc! for teaching me how to make this effect.
 
Last edited:
Level 12
Joined
Apr 28, 2005
Messages
766
You can keep the pictures where they were in your post, you just have to attach some pictures also. Also I believe there is a way to link stuff in your post to a different part of your post. I don't remember though, and sadly I cannot move this thread, I have to wait for an admin:p
 
Top