【Unity Shaders】学习笔记——SurfaceShader(八)生成立方图


转载请注明出处:http://www.cnblogs.com/-867259206/p/5630261.html

写作本系列文章时使用的是Unity5.3。
写代码之前:

  1. 当然啦,如果Unity都没安装的话肯定不会来学Unity Shaders吧?

  2. 阅读本系列文章之前你需要有一些编程的概念。

  3. 在VS里面,Unity Shaders是没有语法高亮显示和智能提示的,VS党可以参考一下这篇文章使代码高亮显示,也可以下载shaderlabvsNShader之类的插件使代码高亮显示。

  4. 这是针对小白的Unity Shaders的基础知识,如果你已经有了基础或者你是大神,那么这些文章不适合你。

  5. 由于作者水平的局限,文中或许会有谬误之处,恳请指出。


Cubemap是一种类似天空盒的由六张贴图组成的贴图。它是用于一些需要反射效果的材质,用来反射周围的环境。如果要表现金属材质,通常会给它添加一张反射贴图,来模拟金属表面反射的环境的颜色。因为金属之类的材质它本身其实是没有颜色的,它的颜色就是它反射的周围物体的颜色。如果给金属赋予银白色,并不能得到金属的质感,要让它反射周围的颜色。立方图就是这样一种记录了周围环境颜色的贴图。
Unity提供了一个RenderToCubemap的方法在脚本中生成Cubemap,官网代码.
将代码拷贝下来,然后在场景中随意地搭个场景,比如这样:

随便搭个就可以,这就是我们要反射的场景,只要场景里有东西就可以。当然你可以弄个漂亮些的。
然后再建一个空物体,作为我们需要的Transform,这就是脚本中那个go相机的位置,也就是最后生成六张贴图中,front贴图中的图像,就是go相机看到的景象。
最后我们还需要一个空的Cubemap,在Project视图里右键,Create-Legacy-Cubemap,创建一个Cubemap。
点击我们自己创建菜单Render into Cubemap,会弹出一个对话框,将Transform、Cubemap赋给它就可以,然后render。需要注意的是,Cubemap要勾选Readable才可以。
渲染后的效果是这样的:

这样就生成了Cubemap。

解释

using UnityEngine;
using UnityEditor;
using System.Collections; public class RenderCubemapWizard : ScriptableWizard { public Transform renderFromPosition;
public Cubemap cubemap; void OnWizardUpdate () {
string helpString = "Select transform to render from and cubemap to render into";
bool isValid = (renderFromPosition != null) && (cubemap != null);
} void OnWizardCreate () {
// create temporary camera for rendering
GameObject go = new GameObject( "CubemapCamera");
go.AddComponent<Camera>();
// place it on the object
go.transform.position = renderFromPosition.position;
go.transform.rotation = Quaternion.identity;
// render into cubemap
go.GetComponent<Camera>().RenderToCubemap( cubemap ); // destroy temporary camera
DestroyImmediate( go );
} [MenuItem("GameObject/Render into Cubemap")]
static void RenderCubemap () {
ScriptableWizard.DisplayWizard<RenderCubemapWizard>(
"Render cubemap", "Render!");
}
}
  1. 首先需要添加UnityEditor的命名空间。

  2. 然后要继承ScriptableWizard类,而不是MonoBehavior。

  3. OnWizardUpdate()是Unity内置的函数。当向导(wizard)第一次弹出或者当GUI被用户改变时(如拖进去某些对象,输入某些字符等)它会被调用。我们可以使用它来判断用户是否真的输入了我们需要的资源。isValid也是Unity内置的一个变量。isValid用来控制向导下方的按钮是否可用。

  4. MenuItem用来自定义自己的菜单栏,你会发现在GameObject菜单栏中多了要一个RenderintoCubemap菜单选项。点击菜单,就会执行下面的RenderCubemap函数,打开一个向导。

  5. "Render cubemap", "Render!"定义了向导的标题和想到下方默认的create按钮的文字,点击Render!按钮就会执行OnWizardCreate ()函数,这也是Unity内置的函数,在create按钮按下时执行。

  6. 将我们设置的渲染位置赋给相机,相机执行RenderToCubemap方法生成Cubemap。

还有其他的工具可以生成立方图,大家可以搜搜看。

【Unity Shaders】学习笔记——SurfaceShader(八)生成立方图的更多相关文章

  1. 【Unity Shaders】学习笔记——SurfaceShader(九)Cubemap

    [Unity Shaders]学习笔记——SurfaceShader(九)Cubemap 如果你想从零开始学习Unity Shader,那么你可以看看本系列的文章入门,你只需要稍微有点编程的概念就可以 ...

  2. 【Unity Shaders】学习笔记——SurfaceShader(二)两个结构体和CG类型

    [Unity Shaders]学习笔记——SurfaceShader(二)两个结构体和CG类型 转载请注明出处:http://www.cnblogs.com/-867259206/p/5596698. ...

  3. 【Unity Shaders】学习笔记——SurfaceShader(十一)光照模型

    [Unity Shaders]学习笔记——SurfaceShader(十一)光照模型 转载请注明出处:http://www.cnblogs.com/-867259206/p/5664792.html ...

  4. 【Unity Shaders】学习笔记——SurfaceShader(十)镜面反射

    [Unity Shaders]学习笔记——SurfaceShader(十)镜面反射 如果你想从零开始学习Unity Shader,那么你可以看看本系列的文章入门,你只需要稍微有点编程的概念就可以. 水 ...

  5. 【Unity Shaders】学习笔记——SurfaceShader(七)法线贴图

    [Unity Shaders]学习笔记——SurfaceShader(七)法线贴图 转载请注明出处:http://www.cnblogs.com/-867259206/p/5627565.html 写 ...

  6. 【Unity Shaders】学习笔记——SurfaceShader(六)混合纹理

    [Unity Shaders]学习笔记——SurfaceShader(六)混合纹理 转载请注明出处:http://www.cnblogs.com/-867259206/p/5619810.html 写 ...

  7. 【Unity Shaders】学习笔记——SurfaceShader(五)让纹理动起来

    [Unity Shaders]学习笔记——SurfaceShader(五)让纹理动起来 转载请注明出处:http://www.cnblogs.com/-867259206/p/5611222.html ...

  8. 【Unity Shaders】学习笔记——SurfaceShader(四)用纹理改善漫反射

    [Unity Shaders]学习笔记——SurfaceShader(四)用纹理改善漫反射 转载请注明出处:http://www.cnblogs.com/-867259206/p/5603368.ht ...

  9. 【Unity Shaders】学习笔记——SurfaceShader(三)BasicDiffuse和HalfLambert

    [Unity Shaders]学习笔记——SurfaceShader(三)BasicDiffuse和HalfLambert 转载请注明出处:http://www.cnblogs.com/-867259 ...

随机推荐

  1. Python基础教程【读书笔记】 - 2016/8/3

    希望通过博客园持续的更新,分享和记录Python基础知识到高级应用的点点滴滴! 第十一波:第11章  文件和素材 本章更进一步,让程序能够接触更多的领域:文件和流.接下来介绍的函数和对象可以让你在程序 ...

  2. TCP/IP四层模型和OSI七层模型的概念

    转:http://blog.csdn.net/superjunjin/article/details/7841099/ TCP/IP四层模型 TCP/IP是一组协议的代名词,它还包括许多协议,组成了T ...

  3. Ubuntu防火墙 UFW 设置

    Ubuntu防火墙 UFW 设置 1.安装 sudo apt-get install ufw 2.启用 sudo ufw enable sudo ufw default deny 运行以上两条命令后, ...

  4. 学习ios键盘和textfield之间操作体会

    所需要计算就是,键盘移动以后是否遮挡住了textfield,需要用到的计算公式: int offset = 键盘的高度-(self.frame.size.height - self.textfiled ...

  5. PLSQL_闪回操作3_Fashback Transaction Query

    2014-12-09 Created By BaoXinjian

  6. POJ 3254 Corn Fields(状态压缩DP)

    题目大意:给出一个M*N的矩阵,元素为0表示这个地方不能种玉米,为1表示这个地方能种玉米,现在规定所种的玉米不能相邻,即每行或者没列不能有相邻的玉米,问一共有多少种种植方法. 举个例子: 2 3 1 ...

  7. 在linux下通过sh运行java程序

    1.导出jar包放在目录下,如/home 2.通过vi创建sh文件如:test.sh,内容如:java -jar test1.jar com.wzh.test.test & 3.运行命令:sh ...

  8. java NIO经典实例

    服务端: Loader.java package net.chatroom.server; public class Loader { public static void main(String[] ...

  9. 使用BeanUtils操作Bean属性

    package com.wzh.test.beanutils; import java.lang.reflect.InvocationTargetException; import java.text ...

  10. 初始化ArrayList的两种方法

    方式一:  ArrayList<String> list = new ArrayList<String>();  String str01 = String("str ...