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位是打开的)。

 // Render scene from a given point into a static cube map.
//从给定的点渲染场景到以静态立方贴图
// Place this script in Editor folder of your project.
//放置这个脚本到工程的Editor文件夹中
// Then use the cubemap with one of Reflective shaders!
//然后用一个Reflective shaders 来使用这个立方贴图
class RenderCubemapWizard extends ScriptableWizard {
var renderFromPosition : Transform;
var cubemap : Cubemap; function OnWizardUpdate () {
helpString = "Select transform to render from and cubemap to render into";
isValid = (renderFromPosition != null) && (cubemap != null);
} function OnWizardCreate () {
// create temporary camera for rendering
//为渲染创建临时相机
var go = new GameObject( "CubemapCamera", Camera );
// place it on the object
//放置它到物体上
go.transform.position = renderFromPosition.position;
go.transform.rotation = Quaternion.identity; // render into cubemap
//渲染到立方贴图
go.camera.RenderToCubemap( cubemap ); // destroy temporary camera
//销毁临时相机
DestroyImmediate( go );
} @MenuItem("GameObject/Render into Cubemap")
static function RenderCubemap () {
ScriptableWizard.DisplayWizard.<RenderCubemapWizard>(
"Render cubemap", "Render!");
}
}

(2)bool  RenderToCubemap(RenderTexture cubemap)

bool  RenderToCubemap(RenderTexture cubemap,int faceMask)

这个用于实时反射到立方贴图渲染纹理。这是非常耗时的,尤其是所有六个立方贴图面在每一帧中都被渲染。

如果渲染失败这个函数将返回false,某些显卡不支持这个函数。

  同时,一定要将 RenderTexture.isCubemap = true

 using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using UnityEditor; // Attach this script to an object that uses a Reflective shader.
// Realtime reflective cubemaps!
//附加这个脚本到使用了Reflective shader的物体上
//实时反射立方贴图
[ExecuteInEditMode]
public class RealtimeCubemap :MonoBehaviour
{
int cubemapSize = ;
//一帧渲染一面
bool oneFacePerFrame = false;
Camera cam = null;
RenderTexture cubemap = null;
Material mat = null; void Start()
{
//在启动时渲染所有六个面
UpdateCubemap();
} void LateUpdate()
{
if (oneFacePerFrame)
{
int faceToRender = Time.frameCount % ;
int faceMask = << faceToRender;
UpdateCubemap(faceMask);
}
else
{
//所有六个面
UpdateCubemap();
}
} void UpdateCubemap (int faceMask )
{
if (cam == null)
{
GameObject go = new GameObject("CubemapCamera", typeof(Camera)); //隐藏在场景中
go.hideFlags = HideFlags.HideAndDontSave;
go.transform.position = transform.position;
go.transform.rotation = Quaternion.identity;
cam = go.GetComponent<Camera>(); ///不要渲染较远的部分
cam.farClipPlane = ;
cam.enabled = false;
}
if (mat == null)
{
mat = new Material(Shader.Find("Custom/RealtimeCubemap"));
mat.hideFlags = HideFlags.HideAndDontSave;
GetComponent<Renderer>().material = mat;
} if (cubemap == null)
{
cubemap = new RenderTexture(cubemapSize, cubemapSize, );
cubemap.isPowerOfTwo = true;
cubemap.isCubemap = true;
cubemap.hideFlags = HideFlags.HideAndDontSave;
mat.SetTexture("_Cubemap", cubemap);
} cam.transform.position = transform.position;
cam.RenderToCubemap(cubemap, faceMask);
} void OnDisable()
{
DestroyImmediate(cam);
DestroyImmediate(cubemap);
} }

【Unity渲染】Camera RenderToCubemap 渲染到立方体纹理的更多相关文章

  1. 【Unity Shader】(八) ------ 高级纹理之立方体纹理及光线反射、折射的实现

    笔者使用的是 Unity 2018.2.0f2 + VS2017,建议读者使用与 Unity 2018 相近的版本,避免一些因为版本不一致而出现的问题.    [Unity Shader](三) -- ...

  2. 【Unity Shader】(九) ------ 高级纹理之渲染纹理及镜子与玻璃效果的实现

    笔者使用的是 Unity 2018.2.0f2 + VS2017,建议读者使用与 Unity 2018 相近的版本,避免一些因为版本不一致而出现的问题. [Unity Shader](三) ----- ...

  3. [Unity Shader笔记]渲染路径--Forward渲染路径

    [Unity Shader笔记]渲染路径--Forward渲染路径 (2014-04-22 20:08:25) 转载▼ 标签: shader unity renderingpath forward 游 ...

  4. Unity Shader NPR 卡通渲染

    卡通渲染的主要原理包含两个方面: 1.轮廓线的描边效果 2.模型漫反射离散和纯色高光区域的模拟 描边: 描边的实现方法采用将模型的轮廓线顶点向法线(或顶点)的方向扩展一定的像素得到.也可通过边缘检测( ...

  5. 画面渲染:实时渲染(Real-time Rendering)、离线渲染(Offline Rendering)[转]

    实时渲染(Real-time Rendering) 实时渲染的本质就是图形数据的实时计算和输出.最典型的图形数据源是顶点.顶点包括了位置.法向.颜色.纹理坐标.顶点的权重等.在第一代渲染技术中(198 ...

  6. 基于OpenGL编写一个简易的2D渲染框架-05 渲染文本

    阅读文章前需要了解的知识:文本渲染 https://learnopengl-cn.github.io/06%20In%20Practice/02%20Text%20Rendering/ 简要步骤: 获 ...

  7. Deferred Shading,延迟渲染(提高渲染效率,减少多余光照计算)【转】

    Deferred Shading,看过<Gems2> 的应该都了解了.最近很火的星际2就是使用了Deferred Shading. 原帖位置:   http://blog.csdn.net ...

  8. 渲染路径-u3d渲染路径比较

    Unity支持不同的渲染路径.应具体取决于你的游戏内容和目标平台/硬件来选择使用哪一个.不同的渲染路径有不同的特点和性能特点,主要影响灯光和阴影.        项目所使用的渲染路径在Player S ...

  9. Qt 3D的研究(十):描边渲染(轮廓渲染)以及Silhouette Shader

    Qt 3D的研究(十):描边渲染(轮廓渲染)以及Silhouette Shader 之前写了两篇文章,介绍了我在边缘检測上面的研究.实际上.使用GPU对渲染图像进行边缘检測.前提是须要进行两遍渲染.前 ...

随机推荐

  1. Eclipse解除已关联的Coding远程仓库,重新关联github上的远程仓库

    1.在Eclipse中的Git Repositories中找到要解除的仓库,依次找到Remote--origin[视自己的实际情况选择], 2.选中origin,右键选择Delete Remote , ...

  2. JWT详解-(JSON Web Token教程)

    JSON Web Token(缩写 JWT)是目前最流行的跨域认证解决方案,本文介绍它的原理和用法. 一.跨域认证的问题 互联网服务离不开用户认证.一般流程是下面这样. 1.用户向服务器发送用户名和密 ...

  3. django 开发中数据库做过什么优化??

    1.设计表时,尽量少使用外键,因为外键约束会影响插入和删除性能: 2.使用缓存,减少对数据库的访问: 3.在 orm 框架下设置表时,能用 varchar 确定字段长度时,就别用 text: 4.可以 ...

  4. Neo4j 不区分大小写的模糊查询匹配

    问题:当图数据库中存储的节点的名字为英文时,就会遇到大小写不匹配问题. 使用不区分大小写的正则表示式可以解决以上问题. Cpyher的where语法里支持正则表达式 ,其语法为 :   =~ &quo ...

  5. jquery chosen插件使用及select常用方法

    1.chosen插件使用 chosen插件依赖于jQuery库或prototype,使用之前要先引入jQuery或prototype. 引入jquery插件和chosen插件,对需要美化的下拉框执行c ...

  6. 1、获取ip地址

    1.获取ip地址 System.Net.NetworkInformation.NetworkInterface.GetAllNetworkInterfaces() .Select(p => p. ...

  7. node.js从入门到放弃《模块》

    在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护. 为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文件包含的代码就相对较少,很 ...

  8. 线程工具类 - CountDownLatch(倒计时器)

    CountDownLatch官方文档 一.原理 CountDownLatch是一个非常实用的多线程控制工具类.Count Down在英文中意为倒计时,Latch意为门闩,可以简单的将CountDown ...

  9. $LCT$维护子树信息学习笔记

    \(LCT\)维护子树信息学习笔记 昨天\(FDF\)好题分享投了 \([ZJOI2018]\)历史 这题. 然后我顺势学学这个姿势. 结果调了一年...于是写个笔记记录一下. 基本原理 比较显然地, ...

  10. Git的配置与基本操作

    Git是一个版本控制软件,它可以让我们能够拍摄处于可行状态的项目的快照,修改项目(如实现新功能)后,如果项目不能正常运行,可以恢复到前一个可行状态. 通过使用版本控制,我们可以无忧无虑的改进项目,不用 ...