Unity Shader 基础(2) Image Effect

2023-11-18

Unity Shader 基础(2) Image Effect

Unity中 Image Effect 是Post Processing的一种方,Unity自身也提供很多Effect效果供使用。Image Effect的使用官方文档做了很多介绍,这里重点Post Processing 做一些介绍。

1. Post Processing workflow

  • Render the scene to a render target / texture (screen-size, usually same format)
  • Reset render target - either to another render target / texture or the actual backbuffer
  • Set the pixel shader for post-processing, bind the scene texture to a sampler
  • Draw a full-screen quad over the scene using a dummy vertex shader

mark
具体可以参考文章:https://research.ncl.ac.uk/game/mastersdegree/graphicsforgames/postprocessing/Tutorial%2010%20-%20Post%20Processing.pdf,里面也提及到多个Image Effect串联在一起是如何实现的。

在使用中,Effect Shader的Shader中其实是处理和近剪裁面大小的四边形面板,渲染这个四边形的贴图是当前Color Buffer中的数据。 实际Pixel Shader中主要是每个像素或者一个区域进行各种处理。

2. Image Effect

涉及的方法:

  • OnRenderImage
  • Graphics.Blit
  • Graphics.SetRenderTarget

OnRenderImage 
‘OnRenderImage’ function receives two arguments: source image as a RenderTexture and destination it should render into, as a render texture as well. Typically a postprocessing effect uses Shaders that read the source image, do some calculations on it, and render the result into the provided destination (e.g using Graphics.Blit). It is expected that the image effect will fully replace all pixels of the destination texture.

多个效果
When multiple postprocessing effects are added on the camera, they are executed in the order they are shown in the inspector, topmost effect being rendered first. Result of one effect is passed as “source image” to the next one; and internally Unity creates one or more temporary render textures to keep these intermediate results in.

在Unity5.5之后加入了新的管理方式:https://github.com/Unity-Technologies/PostProcessing

需要注意:
Destination render texture can be null, which means “render to screen” (i.e. the backbuffer). This typically happens on the last image postprocessing effect on a camera.
When OnRenderImage finishes, it is expected that the destination render texture is the active render target. That is, generally a Graphics.Blit or manual rendering into destination texture should be the last rendering operation.
You generally want to turn off depth buffer writes and tests in your image effect shaders – otherwise can end up writing unintended values into destination Z buffer when doing Graphics.Blit. Almost all image effect shader passes should contain Cull Off ZWrite Off ZTest Always states.
If you wish to use stencil or depth buffer values from the original scene render, you should explicitly bind the depth buffer from the original scene render as your depth target. This can be done using Graphics.SetRenderTarget. You should pass the very first source image effects depth buffer as the depth buffer to bind.

渲染顺序
By default, an image effect is executed after whole scene is rendered. In some cases however, it is desirable to render an effect after all opaque objects are done (but before skybox or transparencies are rendered). Often depth-based effects like Depth of Field use this.

Adding an ImageEffectOpaque attribute on the OnRenderImage function allows to achieve that.

平台差异
主要是DirextX和OpenGl坐标方向问题个
https://docs.unity3d.com/550/Documentation/Manual/SL-PlatformDifferences.html

参考:
官方文档: https://docs.unity3d.com/550/Documentation/Manual/WritingImageEffects.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Unity Shader 基础(2) Image Effect 的相关文章

  • python函数参数里面带*是什么意思

    文章参考 https blog csdn net jiangkejkl article details 121346940 1 函数参数定义中使用独立的符号 在函数定义时 使用了一个独立的符号 这表示在符号后面的参数 调用函数时 必须使用k
  • NAPI机制分析

    NAPI机制分析 NAPI 的核心在于 在一个繁忙网络 每次有网络数据包到达时 不需要都引发中断 因为高频率的中断可能会影响系统的整体效率 假象一个场景 我们此时使用标准的 100M 网卡 可能实际达到的接收速率为 80MBits s 而此
  • 解决 IDEA中springboot项目 修改页面无法生效问题

    解决 IDEA中springboot项目 修改页面无法生效问题 之前网上找了很多解决办法 都是无效的 所以找到解决办法后 先发个博客说一下 至此就完成了springboot 无需重启则对html修改生效 如出现偶尔无效时 请刷新浏览器 之前
  • Linux下使用Git上传和更新代码

    一 上传代码 1 去github上根据网站的提示来创建自己的远程Repository 仓库 2 建立本地git仓库 git init 注意 此指令本地源码根目录执行 执行成功后 会在当前目录生成一个隐藏的名字为 git 的目录 所有对本地仓
  • 【ClickHouse数据库】如何在Win10的Ubuntu上通过ClickHouse存取行情数据

    如何在Win10的Ubuntu上通过ClickHouse存取行情数据 前言 一 ClickHouse是什么 二 如何在Ubuntu上安装ClickHouse 三 添加用户并设置密码 四 使用 1 使用DBeaver操作数据库 2 向Clic
  • 计算机图形学方向和前景&&3D

    我是刚入坑计算机图形学的小菜鸟 在百度上搜索计算机图形学方向和前景和3D 几乎不能搜到什么有用的东西 google还能搜到些有用的 但是需要翻墙 恰好前几天山大承办的games 北京大学陈宝权老师提出了图形学的新疆界 10个左右的国内图形学
  • vue 如何获取input中光标位置,并且点击按钮在当前光标后追加内容

    1 第一步 监听输入框的鼠标失焦事件
  • (原创)c++11中的日期和时间库

    c 11提供了日期时间相关的库chrono 通过chrono相关的库我们可以很方便的处理日期和时间 c 11还提供了字符串的宽窄转换功能 也提供了字符串和数字的相互转换的库 有了这些库提供的便利的工具类 我们能方便的处理日期和时间相关的转换
  • linux服务器管理与维护,linux服务器管理与维护速训..ppt

    linux服务器管理与维护速训 入门级命令 1990年秋天 Linus在芬兰首都赫尔辛基大学学习操作系统课程 因为上机需要排队等待 Linus买了台PC机 开发了第一个程序 程序包括两个进程 分别向屏幕上写字母A和B 然后用定时器来切换进程
  • mysql必考知识_可能是全网最好的MySQL重要知识点 !面试必备

    标题有点标题党的意思 但希望你在看了文章之后不会有这个想法 这篇文章是作者对之前总结的 MySQL 知识点做了完善后的产物 可以用来回顾MySQL基础知识以及备战MySQL常见面试问题 Python资源共享群 484031800 什么是My
  • 在GPU上实现光线跟踪

    include cuda h include book h include cpu bitmap h define DIM 1024 生成图像的大小 DIM DIM define SPHERES 20 生成的图像中球体的个数 define
  • Laplace smoothing in Naïve Bayes algorithm(拉普拉斯平滑)

    在这里转载只是为了让不能够科学搜索的同学们看到好文章而已 个人无收益只是分享知识 顺手做个记录罢了 原网址 https towardsdatascience com laplace smoothing in na C3 AFve bayes
  • 走进计算机的0和1

    一 计算机的产生在历史的长河中 人类发明和创造了许多算法与计算工具 在我国商朝时期就有算珠 春秋战国时期的算表 唐宋时期的算盘 欧洲在16世纪也发明了许多的计算工具 经过一系列的发展 知道1946年一月 世界上第一台计算机诞生 计算机比较笨
  • matlab 神经网络设计多层隐含层_【MATLAB深度学习】多层神经网络

    多层神经网络 对于多层神经网络的训练 delta规则是无效的 因为应用delta规则训练必须要误差 但在隐含层中没有定义 输出节点的误差是指标准输出和神经网络输出之间的差别 但训练数据不提供隐藏层的标准输出 真正的难题在于怎么定义隐藏节点的
  • 【Python】`*args` 和 `**kwargs`的用法【最全详解】

    args 和 kwargs的用法 猛滴打开博客 发现实在有段时间没更新了 又刚好用到了 kwargs 遂想起了许久之前总结的这篇博客 夸张点说也算是自己的一个呕心沥血之作吧 相信不少同学在看大神的程序时 总会看见 args kwargs 这
  • Deep Ensemble Bootstrapped Q-Learning (Deep-EBQL)【代码复现】

    Deep EBQL理论基础 原文链接 Ensemble Bootstrapping for Q Learning Deep EBQL是EBQL的深度学习版本 也即是在DQN的基础上 引入集成的思想 解决DQN过估计的问题 深度版本的EBQL
  • 02-----libevent下载或者移植环境时报错(/usr/bin/ld: warning:xxx,needed by xxx,not found)

    这个问题 bin sh xx 命令 not found是非常常见的 更具体可以是下图的情况 两者是一样的 1 我第一次遇到这种情况时 发现是库版本不对 所以将这些动态库换一篇后解决 ln s usr local lib libevent c
  • VSCode编码特效

    下载插件 Power Mode 然后来到settings json文件进行修改配置 如果找不到 可以只搜索settings 代码中继续追加这部分代码 explorer confirmDelete false powermode enable

随机推荐

  • Es修改索引别名

    在使用ES时有时候我们需要修改索引信息 本文总结了如何修改索引信息 ES修改索引结构 在 ElasticSearch 中索引就类似于关系型数据库中 Table 的概念 如果要修改索引的一些关键信息时 要重建索引 具体步骤如下 新建索引 复制
  • 【HTML】用户名、身份证号、邮箱、验证

    为了使页面不是那么突兀 特地导入了这俩个bootstrap框架相关的包
  • 归纳总结MATLAB中与矩阵运算有关的算术运算符(加、减、乘、除、点乘、点除、乘方、转置等)

    运算是算法的基础 所以我们有必要了解我们使用的工具怎样实现矩阵的基本运算 这篇博文总结MATLAB中矩阵的算术运算符 目录 01 加法运算符 02 减法 相反数 运算符 03 元素乘积 点乘 运算符 04 元素右除 点除 运算符 05 元素
  • C盘爆满如何解决

    上外网找到几个法子 第3个方法和你购买了驱动精灵的C盘瘦身专家的清理系统休眠文件功能是一样的 法1 一种方法是使用Windows系统自带的磁盘清理工具 它可以帮助你删除一些不需要的文件 如临时文件 回收站中的内容 系统还原点等 释放磁盘空间
  • Cesium开发个射击游戏

    经常刷视频看到这类设计游戏 思索cesium能不能开发个这样的游戏 场景就基于遥感影像或者倾斜模型 于是历时3天 水平有限 开发出简易的设计游戏demo 效果视频在b站 源码连接就丢在视频评论区了 用cesium从零开始开发个射击游戏 哔哩
  • qt 目录操作(QDir 类)展示系统文件案例

    1 目录操作 QDir 类 QDir类提供对目录结构及其内容的访问 QDir用于操作路径名 访问有关路径和文件的信息以及底层文件系统 它还可以用于访问Qt的资源系统 Qt使用 作为通用目录分隔符 与 在URL中作用路径分隔符的方式相同 如果
  • C++开发象棋一 绘制棋盘

    这是我要和大家分享的基于C 和MFC开发的一个象棋程序 目的是练习编程实践和大家分享同时希望大家能给出指教 进入主题 一 棋盘分析 这是我绘制的棋盘 棋盘的组成由9条竖线和10条横线构成 这儿我们设置每条线间的间隔是50 二 绘制过程 1
  • wdatepicker默认时间为当前时间

    document ready function alert today document getElementById serviceTime value today function today var today new Date va
  • mybatis中的if-else的嵌套使用

    mybatis的if else的嵌套使用方法 案例一 if else 在mybatis的使用过程中 难免会存在使用if else的逻辑 但是实际是没有这种语法的 提供了choose标签来替代这种语法
  • C++回顾——引用和拷贝构造函数

    一 C 中的指针 C和C 指针的最重要的区别在于C 是一种类型要求更强的语言 C不允许随便地把一个类型的指针赋值给另一个类型 但允许通过void 来实现 C 不允许这样做 如果真想把某种类型当做别的类型处理 则必须显示地使用类型转换 二 C
  • lunix断点调试与查看对象

    断点调试命令 如何查看对象内部的属性与方法
  • [高光谱] 开源项目Hyperspectral-Classification Pytorch解析之main

    开源项目Hyperspectral Classification Pytorch解析之main py 编码方式 coding utf 8 项目简介 DEEP LEARNING FOR HYPERSPECTRAL DATA This scri
  • 解决在cmd情况下无法连接MySQL情况(无脑操作教程)

    在输入外部命令 mysql u root p的时候 出现下面的情况 网图 侵删 问题分析 可能是MySQL路径问题没有解决 解决方法 1 打开电脑高级设置 2 点击环境变量 3 找到path路径变量后 点击编辑 4 新建路径 此路径是我保存
  • Java实现图片裁剪预览功能

    在项目中 我们需要做些类似头像上传 图片裁剪的功能 ok看下面文章 需要插件 jQuery Jcrop 后端代码 package org csg upload import java awt Rectangle import java aw
  • std::promise介绍及使用

    一 std promise介绍 std promise是C 11并发编程中常用的一个类 常配合std future使用 其作用是在一个线程t1中保存一个类型typename T的值 可供相绑定的std future对象在另一线程t2中获取
  • 使用OpenCV获取图像中某一点的像素值和修改某一点的像素值

    使用OpenCV获取图像中某一点的像素值和修改某一点的像素值 int my getpixel IplImage img cvLoadImage D Case Train1 bmp 1 CvScalar s for int i 0 i
  • 回文链表和链表reverse()

    链接 判断一个链表是否是回文字符串 快慢指针 链表reverse 考虑是偶数链表还是 reverse 以后都构造不包含头节点都结果链表 其实跟我以前都思路是一样的想法 同样是采用头插入法和分开两个链表的做法情况 public void re
  • 通义千问,阿里版ChatGPT,拿到邀请码了

    大家好 我是章北海mlpy 通义千问是阿里巴巴推出的一个大型预训练模型 是达摩院自主研发的超大规模语言模型 能够回答问题 创作文字 还能表达观点 撰写代码 昨天中午 阿里云通过官方微信公众号对旗下的超大规模语言模型通义千问进行官宣 并面向企
  • 严重性 代码 说明 项目 文件 行 禁止显示状态 错误 无法将“obj\Debug\上位机.exe”复制到“bin\Debug\上位机.exe”。超出了重试计数 10。失败

    项目场景 提示 Visual studio常见bug 严重性 代码 说明 项目 文件 行 禁止显示状态 错误 无法将 obj Debug 上位机 exe 复制到 bin Debug 上位机 exe 超出了重试计数 10 失败 解决方案 提示
  • Unity Shader 基础(2) Image Effect

    Unity Shader 基础 2 Image Effect Unity中 Image Effect 是Post Processing的一种方 Unity自身也提供很多Effect效果供使用 Image Effect的使用官方文档做了很多介