使用脚本创建一个正常的地图? 统一

我没有一个可以从图像创建正常地图的软件,所以我通常会制作一个灰度图像,然后让统一从该图像制作法线贴图。 但是我不能保存图像供以后使用,而是每次使用时都必须将其转换为普通地图。 那么如何使用脚本从灰度制作正常的地图呢? 我更喜欢c#,但js工作正常。

Solutions Collecting From Web of "使用脚本创建一个正常的地图? 统一"

嘿,这个函数可以返回一个正常的地图,形成一个图像。 它将导出的图像存储在“编辑器资源”文件夹中。 你也可以指定强度来增加地图的颠簸:)

private Texture2D NormalMap(Texture2D source,float strength) { strength=Mathf.Clamp(strength,0.0F,1.0F); Texture2D normalTexture; float xLeft; float xRight; float yUp; float yDown; float yDelta; float xDelta; normalTexture = new Texture2D (source.width, source.height, TextureFormat.ARGB32, true); for (int y=0; y<normalTexture.height; y++) { for (int x=0; x<normalTexture.width; x++) { xLeft = source.GetPixel(x-1,y).grayscale*strength; xRight = source.GetPixel(x+1,y).grayscale*strength; yUp = source.GetPixel(x,y-1).grayscale*strength; yDown = source.GetPixel(x,y+1).grayscale*strength; xDelta = ((xLeft-xRight)+1)*0.5f; yDelta = ((yUp-yDown)+1)*0.5f; normalTexture.SetPixel(x,y,new Color(xDelta,yDelta,1.0f,yDelta)); } } normalTexture.Apply(); //Code for exporting the image to assets folder System.IO.File.WriteAllBytes( "Assets/NormalMap.png", normalTexture.EncodeToPNG()); return normalTexture; } 

如果您没有立即看到导出的图像,请不要惊慌。 只需最小化编辑器并再次打开,图像将在那里。

如果您遇到任何错误(如“图像不可读”),请确保更改图像的导入设置

  • select纹理types为“高级”
  • 选中“读/写启用选项”
  • 应用更改