Unity聖典 傳送門:http://www.ceeger.com/Script/Camera/Camera.RenderToCubemap.html
Camera.RenderToCubemap 有4個重載
(1)bool RenderToCubemap(Cubemap cubemap)
bool RenderToCubemap(Cubemap cubemap,int faceMask)
可以用於在編輯器中生成場景靜態立方體貼圖。faceMask是一個bitfield比特數,表示那個立方貼圖面應該被渲染,每個位對
應於一個面。比特數是Cubemapface枚舉的整型值。默認的所有六個立方貼圖面都被渲染(默認值63的低6位是打開的)。
1 // Render scene from a given point into a static cube map. 2 //從給定的點渲染場景到以靜態立方貼圖 3 // Place this script in Editor folder of your project. 4 //放置這個腳本到工程的Editor文件夾中 5 // Then use the cubemap with one of Reflective shaders! 6 //然后用一個Reflective shaders 來使用這個立方貼圖 7 class RenderCubemapWizard extends ScriptableWizard { 8 var renderFromPosition : Transform; 9 var cubemap : Cubemap; 10 11 function OnWizardUpdate () { 12 helpString = "Select transform to render from and cubemap to render into"; 13 isValid = (renderFromPosition != null) && (cubemap != null); 14 } 15 16 function OnWizardCreate () { 17 // create temporary camera for rendering 18 //為渲染創建臨時相機 19 var go = new GameObject( "CubemapCamera", Camera ); 20 // place it on the object 21 //放置它到物體上 22 go.transform.position = renderFromPosition.position; 23 go.transform.rotation = Quaternion.identity; 24 25 // render into cubemap 26 //渲染到立方貼圖 27 go.camera.RenderToCubemap( cubemap ); 28 29 // destroy temporary camera 30 //銷毀臨時相機 31 DestroyImmediate( go ); 32 } 33 34 @MenuItem("GameObject/Render into Cubemap") 35 static function RenderCubemap () { 36 ScriptableWizard.DisplayWizard.<RenderCubemapWizard>( 37 "Render cubemap", "Render!"); 38 } 39 }
(2)bool RenderToCubemap(RenderTexture cubemap)
bool RenderToCubemap(RenderTexture cubemap,int faceMask)
這個用於實時反射到立方貼圖渲染紋理。這是非常耗時的,尤其是所有六個立方貼圖面在每一幀中都被渲染。
如果渲染失敗這個函數將返回false,某些顯卡不支持這個函數。
同時,一定要將 RenderTexture.isCubemap = true
1 using UnityEngine; 2 using System.Collections; 3 using UnityEngine.UI; 4 using UnityEditor; 5 6 // Attach this script to an object that uses a Reflective shader. 7 // Realtime reflective cubemaps! 8 //附加這個腳本到使用了Reflective shader的物體上 9 //實時反射立方貼圖 10 [ExecuteInEditMode] 11 public class RealtimeCubemap :MonoBehaviour 12 { 13 int cubemapSize = 128; 14 //一幀渲染一面 15 bool oneFacePerFrame = false; 16 Camera cam = null; 17 RenderTexture cubemap = null; 18 Material mat = null; 19 20 void Start() 21 { 22 //在啟動時渲染所有六個面 23 UpdateCubemap(63); 24 } 25 26 void LateUpdate() 27 { 28 if (oneFacePerFrame) 29 { 30 int faceToRender = Time.frameCount % 6; 31 int faceMask = 1 << faceToRender; 32 UpdateCubemap(faceMask); 33 } 34 else 35 { 36 //所有六個面 37 UpdateCubemap(63); 38 } 39 } 40 41 42 void UpdateCubemap (int faceMask ) 43 { 44 if (cam == null) 45 { 46 GameObject go = new GameObject("CubemapCamera", typeof(Camera)); 47 48 //隱藏在場景中 49 go.hideFlags = HideFlags.HideAndDontSave; 50 go.transform.position = transform.position; 51 go.transform.rotation = Quaternion.identity; 52 cam = go.GetComponent<Camera>(); 53 54 ///不要渲染較遠的部分 55 cam.farClipPlane = 100; 56 cam.enabled = false; 57 } 58 if (mat == null) 59 { 60 mat = new Material(Shader.Find("Custom/RealtimeCubemap")); 61 mat.hideFlags = HideFlags.HideAndDontSave; 62 GetComponent<Renderer>().material = mat; 63 } 64 65 if (cubemap == null) 66 { 67 cubemap = new RenderTexture(cubemapSize, cubemapSize, 16); 68 cubemap.isPowerOfTwo = true; 69 cubemap.isCubemap = true; 70 cubemap.hideFlags = HideFlags.HideAndDontSave; 71 mat.SetTexture("_Cubemap", cubemap); 72 } 73 74 cam.transform.position = transform.position; 75 cam.RenderToCubemap(cubemap, faceMask); 76 } 77 78 void OnDisable() 79 { 80 DestroyImmediate(cam); 81 DestroyImmediate(cubemap); 82 } 83 84 }