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 rendering18 //为渲染创建临时相机19 var go = new GameObject( "CubemapCamera", Camera );20 // place it on the object21 //放置它到物体上22 go.transform.position = renderFromPosition.position;23 go.transform.rotation = Quaternion.identity;24 25 // render into cubemap26 //渲染到立方贴图 27 go.camera.RenderToCubemap( cubemap );28 29 // destroy temporary camera30 //销毁临时相机31 DestroyImmediate( go );32 }33 34 @MenuItem("GameObject/Render into Cubemap")35 static function RenderCubemap () {36 ScriptableWizard.DisplayWizard.(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 :MonoBehaviour12 {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 else35 {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();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 ().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 }