Advertisement
Cookie042

render images of models

Mar 2nd, 2019
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.52 KB | None | 0 0
  1. public static async void RenderPreviewImages(List<LevelTile> levelTileList,
  2.         Vector3 positionOffset,int size, LayerMask renderLayer)
  3.     {
  4.  
  5.         Camera cam = new GameObject("Preview Generator Camera").AddComponent<Camera>();
  6.         var lastSceneCamera = SceneView.lastActiveSceneView.camera;
  7.  
  8.         cam.transform.position = Vector3.zero;
  9.         //cam.transform.position = lastSceneCamera.transform.position;
  10.         cam.transform.rotation = lastSceneCamera.transform.rotation;
  11.  
  12.         //cam.transform.position = Vector3.zero;
  13.         //cam.transform.rotation = Quaternion.Euler(0, 0, 0);
  14.         cam.clearFlags = CameraClearFlags.Color;
  15.  
  16.         cam.backgroundColor = new Color(0f, 0f, 0f, 0.46f);
  17.  
  18.         var cameraMatix = cam.transform.worldToLocalMatrix;
  19.  
  20.         RenderTexture rt = new RenderTexture(size, size, 32);
  21.  
  22.         cam.targetTexture = rt;
  23.         cam.cullingMask = renderLayer;
  24.  
  25.  
  26.         //var angleDown = Vector3.Angle(cam.transform.forward, Vector3.up);
  27.         //var angleForward = Vector3.Angle(new Vector3(cam.transform.forward.x, 0, cam.transform.forward.z), Vector3.back);
  28.  
  29.         //Debug.Log("angle down = " + angleDown);
  30.         //Debug.Log("angle forward = " + angleForward);
  31.  
  32.         //var rotation = Quaternion.Euler(0, 0, rotationOffset.z) * Quaternion.Euler(rotationOffset.x, rotationOffset.y, 0);
  33.  
  34.         var mtx = Matrix4x4.TRS(cam.transform.TransformPoint(positionOffset), Quaternion.identity, Vector3.one);
  35.  
  36.         foreach (var levelTile in levelTileList)
  37.         {
  38.             //var mtx = cameraMatix * Matrix4x4.TRS(Vector3.forward * 7,
  39.             //              Quaternion
  40.  
  41.             //draw the mesh;
  42.             Graphics.DrawMesh(
  43.                 levelTile.mesh, mtx,
  44.                 levelTile.material, renderLayer.GetMaskValue(), cam);
  45.  
  46.             Debug.Log("rendered to " + renderLayer.GetMaskValue());
  47.  
  48.             var texture = new Texture2D(size, size);
  49.  
  50.             RenderTargetImage(cam, ref texture);
  51.  
  52.             levelTile.previewTexture = texture;
  53.  
  54.             var pngData = texture.EncodeToPNG();
  55.  
  56.             // For testing purposes, also write to a file in the project folder
  57.             File.WriteAllBytes(Application.dataPath + $"/TileThumbnails/{levelTile.name}.png", pngData);
  58.  
  59.             //AssetDatabase.CreateAsset(t, $"Assets/{levelTile.name}.png");
  60.  
  61.             await Task.Delay(1);
  62.  
  63.         }
  64.         await Task.Delay(100);
  65.         GameObject.DestroyImmediate(cam.gameObject);
  66.  
  67.         tilemap3DEditorWindow?.Refresh();
  68.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement