#概要
こんにちは。Unity関連の質問と思いましたので、こちらに書かせていただきます。
私は、現在Unityを使用しているゲーム(Cities: Skylines)で、キャプチャ画像を組み合わせ360度画像を制作しようとしています。
しかし、タイトルの通りなのですが、以下の画像のようにオブジェクト(地形や建物など)が一部レンダリングされていないようで、大変困っております。(マウスホイールを動かしてから撮影すると、描画範囲こそ変わりますが、全部綺麗にとはなりませんでした)
画像の回転は問題がなく、レンダリングさえできれば基本は完成といったところです。
#詳細
Unityのバージョンは5.6.6f2です。
ソースコードは以下の通りです(関係する部分のみ)。
C#
1 public class VRCameraStart : MonoBehaviour 2 { 3 float posX = 0; 4 float posY = 0; 5 float posZ = 0; 6 7 float rotX = 0; 8 float rotY = 0; 9 float rotZ = 0; 10 11 bool flag = false; 12 13 int w = 1024; 14 int h = 1024; 15 16 int count = 1; 17 18 GameObject VRCamera1 = new GameObject(); 19 20 Camera VR1 = new Camera(); 21 22 public void Start() 23 { 24 VR1 = VRCamera1.AddComponent<Camera>(); 25 26 VR1.enabled = true; 27 VR1.depth = -4.0f; 28 VR1.cullingMask = -1; 29 VR1.nearClipPlane = 0.01f; 30 VR1.farClipPlane = 20000.0f; 31 VR1.fieldOfView = 90.0f; 32 } 33 34 public void Update() 35 { 36 if (Input.GetKey(KeyCode.LeftShift) & Input.GetKey(KeyCode.LeftControl) & Input.GetMouseButtonDown(1)) 37 { 38 flag = true; 39 } 40 41 else if (Input.GetKey(KeyCode.LeftShift) & Input.GetKey(KeyCode.LeftControl) & Input.GetMouseButtonDown(0)) 42 { 43 flag = false; 44 } 45 46 if (flag == true) 47 { 48 flag = false; 49 50 VR1.transform.position = Camera.main.transform.position; 51 VR1.transform.rotation = Camera.main.transform.rotation; 52 53 StartCoroutine(VRCameraMain()); 54 55 } 56 } 57 58 public IEnumerator VRCameraMain() 59 { 60 yield return new WaitForEndOfFrame(); 61 62 rotY = 90.0f; 63 64 for (int i = 1; i <= 4; i++) 65 { 66 VR1.transform.Rotate(rotX, rotY, rotZ); 67 Camera.main.transform.rotation = VR1.transform.rotation; 68 69 var rt = new RenderTexture(w, h, 24); 70 var prev = VR1.targetTexture; 71 VR1.targetTexture = rt; 72 73 VR1.Render(); 74 75 VR1.targetTexture = prev; 76 RenderTexture.active = rt; 77 78 var screenShot = new Texture2D(w, h, TextureFormat.RGB24, false); 79 80 screenShot.ReadPixels(new Rect(0, 0, screenShot.width, screenShot.height), 0, 0); 81 screenShot.Apply(); 82 83 var bytes = screenShot.EncodeToPNG(); 84 Destroy(screenShot); 85 86 File.WriteAllBytes(Application.dataPath + "/images/VRCamera" + count + "_" + i + ".png", bytes); 87 } 88 89 rotY = 0; 90 91 rotX = 90.0f; 92 93 for(int i = 5; i <= 8; i++) 94 { 95 VR1.transform.Rotate(rotX, rotY, rotZ); 96 Camera.main.transform.rotation = VR1.transform.rotation; 97 98 var rt = new RenderTexture(w, h, 24); 99 var prev = VR1.targetTexture; 100 VR1.targetTexture = rt; 101 102 VR1.Render(); 103 104 VR1.targetTexture = prev; 105 RenderTexture.active = rt; 106 107 var screenShot = new Texture2D(w, h, TextureFormat.RGB24, false); 108 109 screenShot.ReadPixels(new Rect(0, 0, screenShot.width, screenShot.height), 0, 0); 110 screenShot.Apply(); 111 112 113 var bytes = screenShot.EncodeToPNG(); 114 Destroy(screenShot); 115 116 File.WriteAllBytes(Application.dataPath + "/images/VRCamera" + count + "_" + i + ".png", bytes); 117 } 118 119 rotX = 0; 120 121 count++; 122 123 } 124 } 125
なお、Camera.mainはゲームデフォルトのカメラです。
つたない質問ですが、ご回答宜しくお願い致します。
あなたの回答
tips
プレビュー