unity CommandBuffer学习

unity官方的教程:https://blogs.unity3d.com/cn/2015/02/06/extending-unity-5-rendering-pipeline-command-buffers/

文章底部附带了一个demo工程

用官方例子改了改,作为测试脚本

using UnityEngine;
using UnityEngine.Rendering;
using System.Collections;
using System.Collections.Generic;

public class Test : MonoBehaviour
{
    public Mesh testMesh;
    public Material testMaterial;

    Dictionary<Camera, CommandBuffer> m_Cameras = new Dictionary<Camera, CommandBuffer>();

    void OnDisable()
    {
        foreach (var cam in m_Cameras)
        {
            if (cam.Key)
            {
                cam.Key.RemoveCommandBuffer(CameraEvent.BeforeLighting, cam.Value);
            }
        }
    }

    void LateUpdate()
    {
        var act = gameObject.activeInHierarchy && enabled;
        if (!act)
        {
            OnDisable();
            return;
        }

        var cam = Camera.current;
        if (!cam)
            return;

        CommandBuffer buf = null;
        if (m_Cameras.ContainsKey(cam))
        {
            buf = m_Cameras[cam];
            buf.Clear();
        }
        else
        {
            buf = new CommandBuffer();
            buf.name = "Test Command Buffer";
            m_Cameras[cam] = buf;

            cam.AddCommandBuffer(CameraEvent.AfterFinalPass, buf);
        }

        buf.DrawMesh(testMesh, Matrix4x4.TRS(Camera.main.transform.position + Camera.main.transform.forward * 4f, Quaternion.identity, Vector3.one), testMaterial);
    }
}

脚本很简单,在finalpass之后绘制一个mesh

CommandBuffer支持延迟渲染和正向渲染,但需要注意如果在正向渲染中用了CameraEvent.AfterGBuffer之类的延迟渲染事件,会不起作用。

Unity的FrameDebug可以对CommandBuffer进行调试

有空再完善

时间: 2024-08-07 02:22:03

unity CommandBuffer学习的相关文章

Unity Shader 学习之旅-初探

Unity Shader 学习之旅-初探 unity shader 图形图像 美丽的梦和美丽的诗一样 都是可遇而不可求的--席慕蓉 最简单的顶点片元着色器 顶点片元着色器基本结构 Unity Shader基本结构:Shader ,Properties,SubShder,Fallback等. 结构 Shader "ShaderName"{  Properties{  //属性,暴露在inspector面板上  }  SubShader{  //针对显卡A的SubShader  Pass{

Unity 3D学习笔记之一 界面介绍

因为学校的课程,本学期对Unity 3D有学习的要求,在博客中记录下自己的Unity学习之路(内容摘录自书本和视频,书本为Unity 4.x从入门到精通) 一.Unity界面介绍 首先进入Unity3D,在菜单栏,File中new project,选择自己的工作路径初始时我们先默认不引入任何的package. 进入Unity的界面中,先对界面进行一下简要的介绍.区域大致依次分为Hierarchy.Scene.Inspector.Project,和上方的菜单栏(Menu bar)和工具栏(Tool

Unity基础学习-Unity概述

Unity 概述 Unity是一个强大的引擎,里面包括大量的工具用来满足各种各样的需求.Unity的编辑器是直观的可定制的,让您在您的工作流中有较大的自由度. 本小节是开始学习Unity的关键部分.里面对在Unity中创建一个游戏的重要步骤进行跟踪讲述.首先是资源的工作流,然后是如何建立场景,最后把您构建的程序进行发布.

unity初探学习笔记-hello unity

unity3d是目前使用最广泛的3d游戏引擎之一,本系列教程将使用unity制作一款坦克大战游戏,从而带大家体验一下unity的使用. 这一篇教程主要介绍引擎的安装和环境的搭建,最后,我们会在手机上运行起来unity的第一个程序. 首先在unity的官方网站上下载unity的最新引擎,目前最新的版本是5.3.4,下载地址:http://unity3d.com/cn/get-unity/download?ref=personal 下载后一步步的按照提示安装即可,运行起unity,效果如下: 在这里

Unity Shader学习笔记(一)坐标变换

基本问题 试想我们的美术做了一个3D模型,然后渲染引擎把模型渲染到屏幕上.我们还可以选定不同的视角,模拟不同的光照条件去观察模型.现在来分析一下这个过程.如果说我们把这个过程看成一个函数,那么函数的输出就是屏幕上的图像.确切地说,是屏幕上的每个像素.这个函数的主要输入是这个3D模型,我们观察的视角,光照情况等等因素.渲染过程就是给出这些因素决定每个像素值的过程. 首先来看模型.模型通常是由可视化的建模软件制作,看上去是一个"实体".然而从计算机的角度来说,模型文件只不过是包含渲染它所需

Unity ShaderLab学习总结

Why Bothers? 为什么已经有ShaderForge这种可视化Shader编辑器.为什么Asset Store已经有那么多炫酷的Shader组件可下载,还是有必要学些Shader的编写? 2014-0718-1607-11-33.png 因为上面这些Shader工具/组件最终都是以Shader文件的形式而存在. 需要开发人员/技术美术有能力对Shader进行功能分析.效率评估.选择.优化.兼容.甚至是Debug. 对于特殊的需求,可能还是直接编写Shader比较实际.高效. 总之,Sha

Unity shader学习之逐像素漫反射光照模型

shader如下: Shader "Custom/Diffuse Fragment-Level" { Properties { _Diffuse ("Diffuse", Color) = (1,1,1,1) } SubShader { Tags { "RenderType"="Opaque" } LOD 100 Pass { Tags { "LightMode"="ForwardBase"

Unity 编辑器学习(二)之 全局光照(GI)

光影流年,花影阡陌.光与影交织的岁月教育我们,不会使用光照的程序员不是个好美术. 一.概述 点击 Window > Lighting > Settings 会弹出Lighting窗口,这个就是设置全局光照的窗口. 这个Lighting窗口划分了三个区域: 1.Scene:设置适用于整个场景而不是单个GameObjects.这些设置控制灯光效果和优化选择. 2.Global maps:显示所有lightmap资产文件生成的GI照明过程. 3.Object maps:预览当前选中的GameObje

Unity shader学习之半兰伯特光照模型

半兰伯特光照模型,为Valve公司在开发游戏<半条命>时提出的一种技术,用于解决漫反射光无法到达区域无任凭明暗变化,丢失模型细节表现的问题. 其公式如下: Cdiffuse = Clight * mdiffuse * ( dot(n, l) * 0.5 +0.5 ) 通过这样的方式,将dot(n, l)的结果从[-1,1]映射到[0,1]的范围. 转载请注明出处:http://www.cnblogs.com/jietian331/p/7083289.html shader如下: Shader