Advertisement
Andrew2002

CubemapGeneratorFail

May 1st, 2017
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.91 KB | None | 0 0
  1. #pragma strict
  2.  
  3. class CameraOptions
  4. {
  5.     //var clearFlags : CameraClearFlags;
  6.     var useBackground : boolean = false;
  7.     var background : Color = Color.black;
  8.     //var cullingMask : int;
  9.     var farClipping : float = 1000;
  10. }
  11.  
  12. var path : String = "CubemapMaker/CreatedCubemap";
  13. var filename : String = "CreatedCubemap";
  14. var size : int = 256;
  15. private var textureFormat : TextureFormat = TextureFormat.DXT1;
  16. var mipmap : boolean = false;
  17.  
  18. var cameraOptions : CameraOptions = CameraOptions();
  19.  
  20. function Update()
  21. {
  22.     if(Application.isEditor && Input.GetKeyDown(KeyCode.F12))
  23.     {
  24.         CreateCubemap();
  25.     }
  26. }
  27.  
  28. function CreateCubemap()
  29. {
  30.     size = Mathf.ClosestPowerOfTwo(size);
  31.     var camObject : GameObject = GameObject("CubemapCamera");
  32.     camObject.transform.parent = transform;
  33.     camObject.transform.localPosition = Vector3.zero;
  34.     var cam : Camera = camObject.AddComponent(Camera);
  35.     cam.fieldOfView = 90;
  36.     cam.depth = -10;
  37.     cam.nearClipPlane = 0.001;
  38.     if(cameraOptions.useBackground)
  39.     {
  40.         cam.clearFlags = CameraClearFlags.SolidColor;
  41.     }
  42.     cam.backgroundColor = cameraOptions.background;
  43.     cam.farClipPlane = cameraOptions.farClipping;
  44.    
  45.     //deactivate main camera....
  46.     if(Camera.main)
  47.         Camera.main.enabled = false;
  48.  
  49.     if(cam.aspect < 1.0)
  50.     {
  51.         Debug.LogWarning("Ensure that your Game View is more wide than tall!");
  52.     }
  53.     else
  54.     {
  55.         var cubemap : Cubemap = Cubemap(size, textureFormat, mipmap);
  56.         yield Snapshot(cubemap, CubemapFace.PositiveZ, cam);
  57.         yield Snapshot(cubemap, CubemapFace.PositiveX, cam);
  58.         yield Snapshot(cubemap, CubemapFace.NegativeX, cam);
  59.         yield Snapshot(cubemap, CubemapFace.NegativeZ, cam);
  60.         yield Snapshot(cubemap, CubemapFace.PositiveY, cam);
  61.         yield Snapshot(cubemap, CubemapFace.NegativeY, cam);
  62.         cubemap.Apply(mipmap);
  63.          #if UNITY_EDITOR
  64.      AssetDatabase.CreateAsset(cubemap, "Assets/"+path+"/"+filename+".cubemap");
  65.  #endif
  66.        
  67.     }
  68.     Destroy(camObject);
  69.  
  70.     if(Camera.main)
  71.         Camera.main.enabled = true;
  72. }
  73.  
  74. private function Snapshot(cubemap : Cubemap, face : CubemapFace, cam : Camera)
  75. {
  76.     var width = Screen.width;
  77.     var height = Screen.height;
  78.     var tex = Texture2D(height, height, textureFormat, mipmap);
  79.  
  80.     cam.transform.localRotation = RotationOf(face);
  81.     yield WaitForEndOfFrame();
  82.  
  83.     tex.ReadPixels(Rect((width-height)/2, 0, height, height), 0, 0);
  84.     tex.Apply();
  85.     tex = Scale(tex, size, size);
  86.  
  87.     var colors : Color[] = tex.GetPixels();
  88.     for(var i : int = 0; i < colors.length; i++)
  89.     {
  90.         cubemap.SetPixel(face, size-(i%size)-1, Mathf.Floor(i / size), colors[colors.length-i-1]);
  91.     }
  92. }
  93.  
  94. private function RotationOf(face : CubemapFace) : Quaternion
  95. {
  96.     var result : Quaternion;
  97.     switch(face)
  98.     {
  99.         case CubemapFace.PositiveX:
  100.             result = Quaternion.Euler(0,90,0);
  101.         break;
  102.         case CubemapFace.NegativeX:
  103.             result = Quaternion.Euler(0,-90,0);
  104.         break;
  105.         case CubemapFace.PositiveY:
  106.             result = Quaternion.Euler(-90,0,0);
  107.         break;
  108.         case CubemapFace.NegativeY:
  109.             result = Quaternion.Euler(90,0,0);
  110.         break;
  111.         case CubemapFace.NegativeZ:
  112.             result = Quaternion.Euler(0,180,0);
  113.         break;
  114.         default:
  115.             result = Quaternion.identity;
  116.         break;
  117.     }
  118.     return result;
  119. }
  120.  
  121. function OnDrawGizmos()
  122. {
  123.     //Gizmos.DrawIcon(transform.position, "CubemapMakerIcon.tif");
  124.     Gizmos.DrawSphere(transform.position, 0.4);
  125. }
  126.  
  127. // Code taken from Jon-Martin.com
  128. static function Scale(source : Texture2D, targetWidth : int, targetHeight : int) : Texture2D
  129. {
  130.     var result = Texture2D(targetWidth,targetHeight,source.format,true);
  131.     var rpixels = result.GetPixels(0);
  132.     var incX = (1f/source.width)*((source.width *1f)/targetWidth);
  133.     var incY = (1f/source.height)*((source.height * 1f)/targetHeight);
  134.     for(var px = 0; px < rpixels.Length; px++)
  135.     {
  136.         rpixels[px] = source.GetPixelBilinear(incX*(px%targetWidth),
  137.                              incY*(Mathf.Floor(px/targetWidth)));
  138.     }
  139.     result.SetPixels(rpixels,0);
  140.     result.Apply();
  141.     return result;
  142. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement