Unity Shader 创建环境映射的立方体纹理

Unity Shader系列文章:Unity Shader目录-初级篇

Unity Shader系列文章:Unity Shader目录-中级篇

Unity中创建用于环境映射的立方体纹理的方法有三种:

  • 第一种:从纹理创建立方体贴图,用一张具有特殊布局的纹理,如类似立方体展开图的交叉布局、全景布局等。然后把该纹理的Texture Type设置为Cubemap即可;
    立方体贴图纹理导入类型

Unity支持几种常用的立方体贴图布局:


垂直和水平交叉布局以及立方体贴图面的列和行
纬度/经度,全景图像
球形环境贴图图像
  • 第二种:从六个单独的纹理创建立方体贴图,从菜单中选择 Assets > Create > Legacy > Cubemap, 然后将六个纹理拖入检视面板中的空字段内;

    立方体贴图

  • 第三种:使用脚本从 Unity 场景的内容生成立方体贴图, Camera.RenderToCubemap 函数可从场景中的任何所需位置记录六个面图像:
    1. 创建Cubemap,从菜单中选择 Assets > Create > Legacy > Cubemap;
    2. 编写代码;
    3. 打开窗口,选择渲染位置和设置Cubemap,点击Render:

    选择渲染位置和设置Cubemap

    代码:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;

public class RenderCubeMap : ScriptableWizard
{
    public Transform renderTrans;
    public Cubemap cubemap;

    [MenuItem("Tools/RenderCubemap")]
    static void RenderCubemap()
    {
        //打开向导
        //"Render Cubemap"是打开的窗口名,"Render"是按钮名,点击时调用OnWizardCreate()方法
        ScriptableWizard.DisplayWizard("Render Cubemap", "Render");
    }

    //打开向导或者在向导中更改了其他内容的时候调用
    private void OnWizardUpdate()
    {
        helpString = "选择渲染位置及需要设置的cubemap";
        //isValid为true的时候,“Create”按钮才能点击
        isValid = renderTrans != null && cubemap != null;
    }

    //点击创建按钮时调用
    private void OnWizardCreate()
    {
        GameObject go = new GameObject();
        go.transform.position = renderTrans.position;
        Camera camera = go.AddComponent();
        //用户提供的Cubemap传递给RenderToCubemap函数,生成六张图片
        camera.RenderToCubemap(cubemap);
        DestroyImmediate(go);
    }
}

你可能感兴趣的:(Unity Shader 创建环境映射的立方体纹理)