- Home /
 
Can i save the mesh generated by the heighmap texture and material?and iff so how?
I dont know scripting(I am just an copy-paste guy :)because it's hard to learn c# or javascrip and its not in my language..I'm Romanian) and a good explanation on how to do it would be very helpful .. Here is the script.Thanx..
// This script is placed in public domain. The author takes no responsibility for any possible harm.
 
               var heightMap : Texture2D; var material : Material; var size = Vector3(200, 30, 200);
 
               function Start () { GenerateHeightmap(); }
 
               function GenerateHeightmap () { // Create the game object containing the renderer gameObject.AddComponent(MeshFilter); gameObject.AddComponent("MeshRenderer"); if (material) renderer.material = material; else renderer.material.color = Color.white;
 
                // Retrieve a mesh instance
 var mesh : Mesh = GetComponent(MeshFilter).mesh;
 var width : int = Mathf.Min(heightMap.width, 255);
 var height : int = Mathf.Min(heightMap.height, 255);
 var y = 0;
 var x = 0;
 // Build vertices and UVs
 var vertices = new Vector3[height * width];
 var uv = new Vector2[height * width];
 var tangents = new Vector4[height * width];
 var uvScale = Vector2 (1.0 / (width - 1), 1.0 / (height - 1));
 var sizeScale = Vector3 (size.x / (width - 1), size.y, size.z / (height - 1));
 for (y=0;y<height;y++)
 {
     for (x=0;x<width;x++)
     {
         var pixelHeight = heightMap.GetPixel(x, y).grayscale;
         var vertex = Vector3 (x, pixelHeight, y);
         vertices[y*width + x] = Vector3.Scale(sizeScale, vertex);
         uv[y*width + x] = Vector2.Scale(Vector2 (x, y), uvScale);
         // Calculate tangent vector: a vector that goes from previous vertex
         // to next along X direction. We need tangents if we intend to
         // use bumpmap shaders on the mesh.
         var vertexL = Vector3( x-1, heightMap.GetPixel(x-1, y).grayscale, y );
         var vertexR = Vector3( x+1, heightMap.GetPixel(x+1, y).grayscale, y );
         var tan = Vector3.Scale( sizeScale, vertexR - vertexL ).normalized;
         tangents[y*width + x] = Vector4( tan.x, tan.y, tan.z, -1.0 );
     }
 }
 // Assign them to the mesh
 mesh.vertices = vertices;
 mesh.uv = uv;
 // Build triangle indices: 3 indices into vertex array for each triangle
 var triangles = new int[(height - 1) * (width - 1) * 6];
 var index = 0;
 for (y=0;y<height-1;y++)
 {
     for (x=0;x<width-1;x++)
     {
         // For each grid cell output two triangles
         triangles[index++] = (y     * width) + x;
         triangles[index++] = ((y+1) * width) + x;
         triangles[index++] = (y     * width) + x + 1;
         triangles[index++] = ((y+1) * width) + x;
         triangles[index++] = ((y+1) * width) + x + 1;
         triangles[index++] = (y     * width) + x + 1;
     }
 }
 // And assign them to the mesh
 mesh.triangles = triangles;
 // Auto-calculate vertex normals from the mesh
 mesh.RecalculateNormals();
 // Assign tangents after recalculating normals
 mesh.tangents = tangents;
  
               }  
it is (all that code is above the code box) - you just need to select all the code and hit the code button (the little button with 0s and 1s on)
Answer by Mike 3 · Jul 16, 2010 at 01:40 PM
You just need to do something along the lines of this:
AssetDatabase.CreateAsset(mesh, meshPrefabPath);
AssetDatabase.SaveAssets();
 
               
               Where meshPrefabPath is a path as string which is relative to the project folder, and needs the .asset extension
e.g. var meshPrefabPath = "Assets/MyNewMesh.asset";
Note that if you do that, your script has to be an editor script, not a runtime script.
which bit don't you understand? the code above should work as it is just pasted in, and the editor script part is a little more complex, but can be added in
lets say i whant to make a wall with the proper texture and material and make a relief on it and then save it ..because i think that bumped shaders dont work on my computer (i dont have vertex shader supported idk iff thats the cause) and at the graphics emulation i have just S$$anonymous$$ 1.4 idk...sounds poor.
you'd paste those lines at the very bottom. and yes, your graphics card is pretty old :P
Your answer