public static void FlattenSSBump(Texture2D Normal, bool flipXZ) { if (!flipXZ) { Texture2D SSBumpTex = new Texture2D(Normal.width, Normal.height, TextureFormat.RGB24, true); Color[] SSBumpColor; Color[] NormalColor; Vector4[] Basis = new Vector4[3]; Basis[0] = new Vector4(0.816496580927726f, 0.0f, 0.5773502691896258f, 0.0f); Basis[1] = new Vector4(-0.408248290463863f, 0.7071067811865475f, 0.5773502691896258f, 0.0f); Basis[2] = new Vector4(-0.408248290463863f, -0.7071067811865475f, 0.5773502691896258f, 0.0f); //Make our Normal Texture readible temporarily TextureImporter tempRNMImport = TextureImporter.GetAtPath(AssetDatabase.GetAssetPath(Normal.GetInstanceID())) as TextureImporter; tempRNMImport.textureType = TextureImporterType.Image; tempRNMImport.isReadable = true; AssetDatabase.ImportAsset(AssetDatabase.GetAssetPath(Normal.GetInstanceID()), ImportAssetOptions.ForceUpdate); SSBumpColor = Normal.GetPixels(); NormalColor = Normal.GetPixels(); for (int i = 0; i < SSBumpColor.Length; i++) { SSBumpColor[i].r = (DotBasis(UnpackNormal(NormalColor[i]), Basis[0]) + 1) / 2; SSBumpColor[i].g = (DotBasis(UnpackNormal(NormalColor[i]), Basis[1]) + 1) / 2; SSBumpColor[i].b = (DotBasis(UnpackNormal(NormalColor[i]), Basis[2]) + 1) / 2; } SSBumpTex.SetPixels(SSBumpColor); GzCRNMMergeUtil.TextureImportHelper(SSBumpTex, AssetDatabase.GetAssetPath(Normal.GetInstanceID()) + "_SSBump.png"); tempRNMImport.textureType = TextureImporterType.Bump; tempRNMImport.isReadable = false; AssetDatabase.ImportAsset(AssetDatabase.GetAssetPath(Normal.GetInstanceID()), ImportAssetOptions.ForceUpdate); } else { Color[] SSBumpColor; TextureImporter tempRNMImport = TextureImporter.GetAtPath(AssetDatabase.GetAssetPath(Normal.GetInstanceID())) as TextureImporter; tempRNMImport.isReadable = true; tempRNMImport.textureFormat = TextureImporterFormat.ARGB32; AssetDatabase.ImportAsset(AssetDatabase.GetAssetPath(Normal.GetInstanceID()), ImportAssetOptions.ForceUpdate); SSBumpColor = Normal.GetPixels(); for (int i = 0; i < SSBumpColor.Length; i++) { SSBumpColor[i].a = SSBumpColor[i].b; SSBumpColor[i].b = SSBumpColor[i].g; SSBumpColor[i].g = SSBumpColor[i].a; SSBumpColor[i].a = 0.0f; } Normal.SetPixels(SSBumpColor); GzCRNMMergeUtil.TextureImportHelper(Normal, AssetDatabase.GetAssetPath(Normal.GetInstanceID()) + "_ConvertedSSBump.png"); tempRNMImport.isReadable = false; AssetDatabase.ImportAsset(AssetDatabase.GetAssetPath(Normal.GetInstanceID()), ImportAssetOptions.ForceUpdate); } }
public static void MakeBasis(string name, Vector4 basisx, Vector4 basisy, Vector4 basisz) { Color[] cBasisx; Color[] cBasisy; Color[] cBasisz; Texture2D texBasisx = new Texture2D(16, 16); Texture2D texBasisy = new Texture2D(16, 16); Texture2D texBasisz = new Texture2D(16, 16); cBasisx = texBasisx.GetPixels(); cBasisy = texBasisy.GetPixels(); cBasisz = texBasisz.GetPixels(); for (int i = 0; i < cBasisx.Length; i++) { cBasisx[i] = CompressedBasis(basisx); cBasisy[i] = CompressedBasis(basisy); cBasisz[i] = CompressedBasis(basisz); } texBasisx.SetPixels(cBasisx); texBasisy.SetPixels(cBasisy); texBasisz.SetPixels(cBasisz); if (!System.IO.Directory.Exists("Assets/GzRNM/BasisMaps")) { System.IO.Directory.CreateDirectory("Assets/GzRNM/BasisMaps"); } GzCRNMMergeUtil.TextureImportHelper(texBasisx, "Assets/GzRNM/BasisMaps/Basis X.png"); GzCRNMMergeUtil.TextureImportHelper(texBasisy, "Assets/GzRNM/BasisMaps/Basis Y.png"); GzCRNMMergeUtil.TextureImportHelper(texBasisz, "Assets/GzRNM/BasisMaps/Basis Z.png"); }
void OnWizardCreate() { Texture2D[] RNM = new Texture2D[3]; RNM[0] = RNMX; RNM[1] = RNMY; RNM[2] = RNMZ; GzCRNMMergeUtil.FlattenCRNM(RNM); }