Unity3d实现红外热成像效果

2023-11-02

1.将需要在红外图像中高亮的物体设置到图层PostProcessing。

2.新建一个相机CameraHighLight,设置其Culling Mask为PostProcessing,也就是在这个相机中只有PostProcessing图层的物体可见。

3.新建一个RenderTexture,命名为HightLightRt,将CameraHighLight的Target Texture设HightLightRt。

4.新建一个相机Camera2,这个相机用于显示其他物体。

接下来将CameraHighLight和Camera2中画面转化为两张灰度图,再合并成一张图。合并的过程使用OnRenderImage函数,该函数中使用shader的片断着色器处理,取到两张图相同位置的像素后,谁的灰度值高就取谁的亮度。为了高度CameraHighLight的物体,取Camera2中像素时将适当缩小亮度值。

5.新建C#脚本ThermalVision.cs,将ThermalVision.cs挂载到Camera2。

using UnityEngine;

public class ThermalVision : MonoBehaviour
{
    public bool IsInverse = false;

    public RenderTexture OtherTex;
    private Material material1;
    private Material material2;
    // Creates a private material used to the effect
    void Awake()
    {
        material1 = new Material(Shader.Find("Hidden/Thermal1"));
        material2 = new Material(Shader.Find("Hidden/Thermal2"));
    }

    // Postprocess the image
    void OnRenderImage(RenderTexture source, RenderTexture destination)
    {
        if (IsInverse)
        {
            material1.SetTexture("_OtherTex", OtherTex);

            Graphics.Blit(source, destination, material1);
        }
        else
        {
            material2.SetTexture("_OtherTex", OtherTex);

            Graphics.Blit(source, destination, material2);
        }
    }
}

6.新建两个shader,分别为Thermal1、Thermal2,一个为白色模式,一个为黑色模式。

Shader "Hidden/Thermal1" {
	Properties{
		_MainTex("Base (RGB)", 2D) = "white" {}
		_OtherTex("Other (RGB)", 2D) = "white" {}
	}
		SubShader{
			Pass {
				CGPROGRAM
				#pragma vertex vert_img
				#pragma fragment frag
				#include "UnityCG.cginc"
				uniform sampler2D _MainTex;
				uniform sampler2D _OtherTex;
				float4 frag(v2f_img i) : COLOR {
					fixed4 renderTex = tex2D(_MainTex, i.uv);
					fixed4 OtherTex = tex2D(_OtherTex, i.uv);

					fixed gray1 = 0.2125 * renderTex.r + 0.7154 * renderTex.g + renderTex.b;
					fixed gray2 = 0.2125 * OtherTex.r + 0.7154 * OtherTex.g + OtherTex.b;

					fixed maxgr = gray1 * 0.1* step(gray2, gray1) + gray2 * step(gray1, gray2);
					//fixed maxgr = max(gray1, gray2);
					fixed3 grayColor = float3(maxgr, maxgr, maxgr);

					float4 result = renderTex;
					result.rgb = grayColor;
					return result;

				}
				ENDCG
			}
		}
}
Shader "Hidden/Thermal2" {
	Properties{
		_MainTex("Base (RGB)", 2D) = "white" {}
		_OtherTex("Other (RGB)", 2D) = "white" {}
	}
		SubShader{
			Pass {
				CGPROGRAM
				#pragma vertex vert_img
				#pragma fragment frag
				#include "UnityCG.cginc"
				uniform sampler2D _MainTex;
				uniform sampler2D _OtherTex;
				float4 frag(v2f_img i) : COLOR {		
					fixed4 renderTex = tex2D(_MainTex, i.uv);
					fixed4 OtherTex = tex2D(_OtherTex, i.uv);

					fixed gray1 = 0.2125 * renderTex.r + 0.7154 * renderTex.g + renderTex.b;
					fixed gray2 = 0.2125 * OtherTex.r + 0.7154 * OtherTex.g + OtherTex.b;

					fixed maxgr = gray1 * 0.5* step(gray2, gray1) + gray2 * step(gray1, gray2);
					fixed3 grayColor = float3(maxgr, maxgr, maxgr);
					float4 result = renderTex;
					result.rgb = float3(1- grayColor.r, 1 - grayColor.g, 1 - grayColor.b);
					return result;

				}
				ENDCG
			}
		}
}

最终效果

 

 

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

Unity3d实现红外热成像效果 的相关文章

  • Unity用Vuforia做AR实现脱卡效果

    有时在识别目标丢失后我们仍希望虚拟物体能够出现在摄像机前 或者到一个特定的位置 我们能对其进行操作 这就是脱卡功能 自带的脱卡功能应该是ExtendedTracking 允许模型在识别图丢失的时候还存在 位置不变 在丢失的时候的位置 这样也
  • Unity中loading页加载的实现

    首先创建一个Global cs 使用单例用于存储场景的名字 便于后续脚本的调用 此脚本不必挂载在游戏物体上 using UnityEngine using System Collections public class Global Mon
  • 【Unity&C#&随机数】随机数

    一个简单的随机数获得 0或1 使用了这样的代码 想要获得0或者1 if Input anyKeyDown float i 1 if i 1 i Random Range 0 Rang i i lt 0 5 0 1 Debug Log Cou
  • Unity 安卓打包

    Unity打包的方式有很多种 自动打包和手动打包 今天小弟就鼓捣鼓捣unity手动打包 如果想动态打包的话 可以去看其他大佬的帖帖哈 unity打包先配置环境 下载unity的时候可以顺道把unity的安卓包下载下来 如果忘了也没事 可以从
  • c#获取cpu序列号

  • Unity中级客户端开发工程师的进阶之路

    上期UWA技能成长系统之 Unity高级客户端开发工程师的进阶之路 得到了很多Unity开发者的肯定 通过系统的学习 可以掌握游戏性能瓶颈定位的方法和常见的CPU GPU 内存相关的性能优化方法 UWA技能成长系统是UWA根据学员的职业发展
  • Unity与Android的Back键冲突解决

    Unity与Android的Back键冲突解决 上一篇的最后留下了两个问题 Unity视图下横屏闪退 Unity视图下Android无法响应back返回上一activity 对于第一个问题 应该是Unity横屏下视图的某些设置跟Androi
  • unity工程崩溃资源找回

    1 Unity死机未保存场景 当你在Unity中编辑场景 突然死机时 可以在项目文件目录中找到Temp文件夹 双击文件夹 找到 Backupscenes文件夹 把后缀为 backup的文件后缀改为 unity 然后拖进Unity的Proje
  • unity: C#的Action Event Delegate的异同

    目录 一 Action 二 Event 三 Action和Event区别 四 Delegate 总结 Action Event Delegate的异同 前言 Action Event和Delegate都是C 语言中的重要概念 分别用于管理函
  • unity 性能查看工具Profiler

    文章目录 前言 profiler工具介绍 菜单栏 帧视图 模块视图 模块详细信息 通过profiler分析优化游戏性能 最后 前言 每次进行游戏优化的时候都用这个工具查看内存泄漏啊 代码优化啊之类的东西 真的好用 但是之前也就是自己摸索一下
  • Unity旋转以及万向锁问题

    我之前研读了一些关于unity旋转相关的博客 一直想抽个时间写个总结 但是由于实习太忙一直没有写 趁着今天请了假晚上有时间把这段时间一些学习心得写出来 Unity inspector面板中的Rotation 在unity中 想必大家最先接触
  • Unity万向节死锁解决方案(2023/12/4)

    1 万向节死锁无法解决 这是因为它的特性就是如此 就像玻璃杯就是玻璃 这不可否认 别钻牛角尖昂 2 大多数情况下欧拉角足够用 例如 CF 摄像机不可能绕z轴旋转 x轴旋转也不会超过九十度 因为那样人物的腰子会被扭断 塔防游戏 保卫萝卜 吃鸡
  • unity3d image组件不显示

    需要将UI组件放到画布下面
  • 【原神游戏开发日志1】缘起

    原神游戏开发日志1 缘起 版权声明 本文为 优梦创客 原创文章 您可以自由转载 但必须加入完整的版权声明 文章内容不得删减 修改 演绎 相关学习资源见文末 大家好 最近看到原神在TGA上频频获奖 作为一个14年经验的游戏开发行业的老兵 我就
  • unity小球跟随音乐节奏放大缩小和改变颜色

    放在小球身上 设置对应组件即可 using System Collections using System Collections Generic using Unity VisualScripting using UnityEngine
  • Unity中URP下的指数雾

    文章目录 前言 一 指数雾 雾效因子 1 FOG EXP 2 FOG EXP2 二 MixFog 1 ComputeFogIntensity 雾效强度计算 2 lerp fogColor fragColor fogIntensity 雾效颜
  • U3D游戏开发中摇杆的制作(UGUI版)

    在PC端模拟摇杆 实现玩家通过控制摇杆让玩家移动 以下是完整代码 using System Collections using System Collections Generic using UnityEngine using Unity
  • U3D游戏开发中摇杆的制作(NGUI版)

    在PC端模拟摇杆 实现控制摇杆让玩家或者物体移动 以下是完整代码 using System Collections using System Collections Generic using UnityEngine public clas
  • 游戏开发常见操作梳理之NPC药品商店系统(NGUI版)

    后续会出UGUI Json的版本 敬请期待 游戏开发中经常会出现药品商店 实际操作与武器商店类似 甚至根据实际情况可以简化设置 废话不多说 直接上代码 药品商店的源码 using System Collections using Syste
  • 游戏开发中常见系统梳理之背包系统的实现一

    游戏中几乎都存在大大小小的背包系统 接下来我将讲述背包系统具体是如何实现的 完整源码 以下是使用unity NGUI实现 使用txt配置的方法 后续更新UGUI Json实现的背包系统敬请期待 背包中的物品我们常常将其制作成预设体 通过改变

随机推荐

  • sklean中transform和fit_transform区别

    sklean中transform和fit transform区别 在学习过程中看到在有的代码里 from sklearn preprocessing import StandardScaler sc StandardScaler x tra
  • JWT --- 入门学习

    不知道为什么 不用springboot test测试或者启动类启动 会报这个错误 找不到类路径 1 常见的认证机制 basic auth 每次请求都会携带用户的username password 易被黑客拦截 Cookie auth 我们请
  • Debian10开启路由转发以及配置dhcp中继

    文章目录 1 所需设备 2 任务描述 3 服务搭建 1 所需设备 Debian10需要两块网卡 网卡1 192 168 1 1 24 网卡2 10 1 1 1 24 2 任务描述 Debian10开启路由转发之后才可以启用用dhcp中继 允
  • SQL Server创建数据库和表

    本人第一次写博客 没有什么经验 请多多体谅 文章目录 SQL Server数据库的基础学习1 一 认识数据库 二 创建数据库 三 创建表 SQL Server数据库的基础学习1 一 认识数据库 1 数据库的基本概念 数据库 DataBase
  • 如何通过name获取单选框和复选框选中状态的value值?

    概述 有时候我们会遇到这组情况 就是需要通过单选框的name值获取到当前选中状态的value值 提交到后端 进行数据的修改 那么我们就来看看如何进行获取吧 应用场景 我们有时候需要获取到单选框或者是复选框选中的那个 得到它的value值 传
  • python面对对象实验_Python面向对象实现方法总结

    总结 类的定义 很久以前 语言都是面向过程的 经过计算机科学家的探索 出现了面向对象 面向对象可以解释生活中很多东西 比如人 人就是个对象 有参数 比如器官 身高啥的 有方法 比如跑步 学习等 不扯那么多了 对象就是类 在python中用c
  • Tomcat 配置错误界面

    Tomcat发生错误时跳转到错误页面 注意 5 0下操作需要删除掉注释语句 不然报错 原因未知 一 修改 tomcat 的配置文件 修改 tomcat 的配置文件 当页面发生错误时跳转到指定的页面 在 tomcat 中 web xml 文件
  • 某MR-SDK 手机类型摄像机切换后的脚本切换/添加组件/删除组件

    解决问题 因为该SDK已经自动会识别用户手机类型 因为我需要为摄像机添加OutlineEffect这个脚本 以实现高亮显示 该脚本要求一次只能添加在一个摄像机上 简单写个脚本 using System Collections using S
  • 源码环境下添加系统Service流程

    关于系统服务的分析 以及如何实现添加系统服务 分析详细跳转链接 Android系统服务 SystemService 简介 添加系统Service涉及的文件 修改文件 Android mk api current txt api system
  • C语言带参数的main函数

    在我们刚接触C语言的时候 我们所写的main主函数都是不带参数的 但是的实际开发应用中 大多数情况 带参数的main函数用的最多 不带参数的main函数 int main 实际上是int main void 带参数的main函数 int m
  • [4G&5G专题-27]:架构-UE终端的4G+5G双连接详解

    目录 第1章 什么是多连接 1 1 多连接概述 1 2 多连接的聚合和分离点的分类 1 3 多连接好处 1 4 双连接的本质 1 5 多连接的控制面与数据面连接方法分类 1 6 1C 2U模式下数据承载的三种方式 1 7 分清各种场景的基本
  • 13个你可能未使用过的Python教程!

    Python 是顶级编程语言之一 它具有许多程序员从未使用过的许多隐藏功能 在这篇博客中 我将分享你可能从未使用过的13 个 Python 特性 列表Stepping 这是一个 step 参数 可以通过采取几个步骤来分割你的列表 此外 你可
  • Mybatis-多表联查

    多表联查 一 步骤一 创建pojo实体类 二 步骤二 明确两个实体类之间的关系 三 步骤三 修改pojo实体类 四 步骤四 编写Mapper接口 五 步骤五 编写Mapper映射文件 题目1 通过订单id查询订单详情以及所属用户 题目2 通
  • mysql字段更新拼接_更新数据库中值为拼接字符串的字段

    我们开发系统涉及权限的时候 会处理到用户和角色的关系 通常情况下 我们会建一个用户角色关系映射表 user role mapping 字段有id user id role id 如果某个用户有多个角色 那么在user role mappin
  • C语言课程设计学生籍贯信息,C语言课程设计 学生籍贯信息记录簿设计.doc

    C语言与程序设计课程设计 学生籍贯信息记录簿设计 学 院 信息工程 班 级 物联1301班 学 号 131408119 姓 名 滕玲 一 设计目的 该软件主要是编辑一个学生籍贯信息记录簿记录每个学生信息 包括 学号 姓名 籍贯 具体功能 1
  • flex布局采用justify-content:space-between时,当为两个内容时中间被空出的解决方案

    我们在用flex布局的时候有时会用到justify content space between属性 这个属性是让弹性容器内的元素向两端对齐 div class box div div div div div div div div div
  • 广度优先遍历进阶

    第七周 BFS 广度优先搜索 733 127 130 317 505 529 1263 1197 815 934 广度优先模板 void bfs queue
  • filetime,systemtime相互转化,获取文件创建时间,访问时间,修改时间,获取指定时间之前之后的SYSTEMTIME

    deleteOldFiles cpp 定义控制台应用程序的入口点 include stdafx h include
  • 脑科学和类脑智能技术综述学习笔记

    文章目录 Part1 脑科学 1 脑科学与类脑研究概述 摘要 引言 1 国际脑科学和类脑研究的回顾与前瞻 1 1 脑科学的回顾 现代神经科学的起点是 神经解剖学和组织学 对神经系统结构的认识和分析 1 2 脑科学领域的重大问题 从图谱制作到
  • Unity3d实现红外热成像效果

    1 将需要在红外图像中高亮的物体设置到图层PostProcessing 2 新建一个相机CameraHighLight 设置其Culling Mask为PostProcessing 也就是在这个相机中只有PostProcessing图层的物