【Unity渲染】Camera RenderToCubemap 渲染到立方体纹理
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 渲染到立方体纹理的更多相关文章
- 【Unity Shader】(八) ------ 高级纹理之立方体纹理及光线反射、折射的实现
笔者使用的是 Unity 2018.2.0f2 + VS2017,建议读者使用与 Unity 2018 相近的版本,避免一些因为版本不一致而出现的问题. [Unity Shader](三) -- ...
- 【Unity Shader】(九) ------ 高级纹理之渲染纹理及镜子与玻璃效果的实现
笔者使用的是 Unity 2018.2.0f2 + VS2017,建议读者使用与 Unity 2018 相近的版本,避免一些因为版本不一致而出现的问题. [Unity Shader](三) ----- ...
- [Unity Shader笔记]渲染路径--Forward渲染路径
[Unity Shader笔记]渲染路径--Forward渲染路径 (2014-04-22 20:08:25) 转载▼ 标签: shader unity renderingpath forward 游 ...
- Unity Shader NPR 卡通渲染
卡通渲染的主要原理包含两个方面: 1.轮廓线的描边效果 2.模型漫反射离散和纯色高光区域的模拟 描边: 描边的实现方法采用将模型的轮廓线顶点向法线(或顶点)的方向扩展一定的像素得到.也可通过边缘检测( ...
- 画面渲染:实时渲染(Real-time Rendering)、离线渲染(Offline Rendering)[转]
实时渲染(Real-time Rendering) 实时渲染的本质就是图形数据的实时计算和输出.最典型的图形数据源是顶点.顶点包括了位置.法向.颜色.纹理坐标.顶点的权重等.在第一代渲染技术中(198 ...
- 基于OpenGL编写一个简易的2D渲染框架-05 渲染文本
阅读文章前需要了解的知识:文本渲染 https://learnopengl-cn.github.io/06%20In%20Practice/02%20Text%20Rendering/ 简要步骤: 获 ...
- Deferred Shading,延迟渲染(提高渲染效率,减少多余光照计算)【转】
Deferred Shading,看过<Gems2> 的应该都了解了.最近很火的星际2就是使用了Deferred Shading. 原帖位置: http://blog.csdn.net ...
- 渲染路径-u3d渲染路径比较
Unity支持不同的渲染路径.应具体取决于你的游戏内容和目标平台/硬件来选择使用哪一个.不同的渲染路径有不同的特点和性能特点,主要影响灯光和阴影. 项目所使用的渲染路径在Player S ...
- Qt 3D的研究(十):描边渲染(轮廓渲染)以及Silhouette Shader
Qt 3D的研究(十):描边渲染(轮廓渲染)以及Silhouette Shader 之前写了两篇文章,介绍了我在边缘检測上面的研究.实际上.使用GPU对渲染图像进行边缘检測.前提是须要进行两遍渲染.前 ...
随机推荐
- Eclipse解除已关联的Coding远程仓库,重新关联github上的远程仓库
1.在Eclipse中的Git Repositories中找到要解除的仓库,依次找到Remote--origin[视自己的实际情况选择], 2.选中origin,右键选择Delete Remote , ...
- JWT详解-(JSON Web Token教程)
JSON Web Token(缩写 JWT)是目前最流行的跨域认证解决方案,本文介绍它的原理和用法. 一.跨域认证的问题 互联网服务离不开用户认证.一般流程是下面这样. 1.用户向服务器发送用户名和密 ...
- django 开发中数据库做过什么优化??
1.设计表时,尽量少使用外键,因为外键约束会影响插入和删除性能: 2.使用缓存,减少对数据库的访问: 3.在 orm 框架下设置表时,能用 varchar 确定字段长度时,就别用 text: 4.可以 ...
- Neo4j 不区分大小写的模糊查询匹配
问题:当图数据库中存储的节点的名字为英文时,就会遇到大小写不匹配问题. 使用不区分大小写的正则表示式可以解决以上问题. Cpyher的where语法里支持正则表达式 ,其语法为 : =~ &quo ...
- jquery chosen插件使用及select常用方法
1.chosen插件使用 chosen插件依赖于jQuery库或prototype,使用之前要先引入jQuery或prototype. 引入jquery插件和chosen插件,对需要美化的下拉框执行c ...
- 1、获取ip地址
1.获取ip地址 System.Net.NetworkInformation.NetworkInterface.GetAllNetworkInterfaces() .Select(p => p. ...
- node.js从入门到放弃《模块》
在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护. 为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文件包含的代码就相对较少,很 ...
- 线程工具类 - CountDownLatch(倒计时器)
CountDownLatch官方文档 一.原理 CountDownLatch是一个非常实用的多线程控制工具类.Count Down在英文中意为倒计时,Latch意为门闩,可以简单的将CountDown ...
- $LCT$维护子树信息学习笔记
\(LCT\)维护子树信息学习笔记 昨天\(FDF\)好题分享投了 \([ZJOI2018]\)历史 这题. 然后我顺势学学这个姿势. 结果调了一年...于是写个笔记记录一下. 基本原理 比较显然地, ...
- Git的配置与基本操作
Git是一个版本控制软件,它可以让我们能够拍摄处于可行状态的项目的快照,修改项目(如实现新功能)后,如果项目不能正常运行,可以恢复到前一个可行状态. 通过使用版本控制,我们可以无忧无虑的改进项目,不用 ...