⭐ Unity里 用Shader 去做实时动态绿幕抠图

1.先看一下效果

a.这是背景图片

b.抠完图之后(这里用的是扣去白色的)

2.shader代码如下

Shader "UniversalChromaKey" {Properties{_MainTex("Base (RGB)", 2D) = "white" {}_Sens("Sensibilidad", Range(0,.9)) = .3_Cutoff("Recorte", Range(0,.9)) = .2_Color("Chroma", Color) = (0, 1.0, 0)}SubShader{Tags { "Queue" = "Transparent" "RenderType" = "Transparent" }LOD 200CGPROGRAM#pragma surface surf Lambert alphasampler2D _MainTex;float _Cutoff;float _Sens;half3 _Color;struct Input {float2 uv_MainTex;};void surf(Input IN, inout SurfaceOutput o) {half4 c = tex2D(_MainTex, IN.uv_MainTex);o.Emission = c.rgb;float aR = abs(c.r - _Color.r) < _Sens ? abs(c.r - _Color.r) : 1;float aG = abs(c.g - _Color.g) < _Sens ? abs(c.g - _Color.g) : 1;float aB = abs(c.b - _Color.b) < _Sens ? abs(c.b - _Color.b) : 1;float a = (aR + aG + aB) / 3;if (a < _Cutoff) {o.Alpha = 0;}
else {o.Alpha = 1;
}}
ENDCG}FallBack "Diffuse"
}

3.相机脚本和控制shader脚本

using UnityEngine;
using System.Collections;
using UnityEngine.Video;
using UnityEngine.UI;
using System.IO;public class CameraControl : MonoBehaviour
{/// <summary>/// 外部摄像头/// </summary>private WebCamTexture webTex;/// <summary>/// UI父物体/// </summary>private Canvas canvas;/// <summary>/// 摄像头映射画面/// </summary>private RawImage Camera_image;private void Start(){canvas = GameObject.Find("Canvas").GetComponent<Canvas>();Camera_image = canvas.transform.Find("Camera_screen").GetComponent<RawImage>();StartCoroutine(CallCamera());}/// <summary>/// 打开摄像头/// </summary>/// <returns></returns>IEnumerator CallCamera(){//等待用户允许访问yield return Application.RequestUserAuthorization(UserAuthorization.WebCam);//如果用户允许访问,开始获取图像        if (Application.HasUserAuthorization(UserAuthorization.WebCam)){WebCamDevice[] devices = WebCamTexture.devices;string devicename = devices[1].name;webTex = new WebCamTexture(devicename, Screen.width, Screen.height);Camera_image.texture = webTex;webTex.Play();}}}

using UnityEngine;
using System.Collections;
using UnityEngine.UI;public class ShaderControls : MonoBehaviour
{float sensS, cutoffS;Color colS;// Use this for initializationvoid Start(){sensS = GetComponent<RawImage>().material.GetFloat("_Sens");cutoffS = GetComponent<RawImage>().material.GetFloat("_Cutoff");colS = GetComponent<RawImage>().material.GetColor("_Color");sens = sensS;cutoff = cutoffS;}// Update is called once per framevoid Update(){}public float sens, cutoff;public string r = "99", g = "205", b = "77";//void OnGUI()//{//    sens = GUI.HorizontalSlider(new Rect(25, 25, 100, 30), sens, 0.0f, 1.0f);//    cutoff = GUI.HorizontalSlider(new Rect(25, 70, 100, 30), cutoff, 0.0f, 1.0f);//    r = GUI.TextField(new Rect(25, 120, 40, 20), r);//    g = GUI.TextField(new Rect(70, 120, 40, 20), g);//    b = GUI.TextField(new Rect(120, 120, 40, 20), b);//    if (GUI.Button(new Rect(25, 160, 100, 30), "Reset"))//    {//        sens = sensS;//        cutoff = cutoffS;//        r = (colS.r * 255f).ToString();//        g = (colS.g * 255f).ToString();//        b = (colS.b * 255f).ToString();//    }//    GetComponent<RawImage>().material.SetFloat("_Sens", sens);//    GetComponent<RawImage>().material.SetFloat("_Cutoff", cutoff);//    try//    {//        Color col = new Color(int.Parse(r) / 255f, int.Parse(g) / 255f, int.Parse(b) / 255f);//        //print (col);//        GetComponent<RawImage>().material.color = col;//    }//    catch (UnityException e)//    {//    }//}
}

4.调整场景里的注意事项

a.主相机

b.光照

c.canvas

d.脚本挂载

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/199204.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java:slf4j、log4j、log4j2、logback日志框架的区别与示例

文章目录 背景SLF4J - 简单日志门面:Log4j - 强大而古老的日志框架:Log4j2 - Log4j的升级版:Logback - Log4j的继任者:比较Springboot集成slf4j、log4j2参考 背景 在Java开发中&#xff0c;日志记录是一个不可或缺的组成部分。为了满足不同的需求&#xff0c;Java社区涌现出多…

selenium python 实现基本自动化测试的示例代码

安装selenium 打开命令控制符输入&#xff1a;pip install -U selenium 火狐浏览器安装firebug&#xff1a;www.firebug.com&#xff0c;调试所有网站语言&#xff0c;调试功能 Selenium IDE 是嵌入到Firefox 浏览器中的一个插件&#xff0c;实现简单的浏览器操 作的录制与回…

nodejs+vue+elementui校园演出赞助艺术资源管理系统

系统主要分为系统管理员和学生、校外人员三个部分&#xff0c;系统管理员主要功能包括&#xff1a;首页、个人中心、学生管理、校外人员管理、社团信息管理、校内演出管理、校外商演管理、系统管理&#xff1b;基本上实现了整个基于vue的校园艺术资源管理系统的设计与实现信息管…

$sformat在仿真中打印文本名的使用

在仿真中&#xff0c;定义队列&#xff0c;使用任务进行函数传递&#xff0c;并传递文件名&#xff0c;传递队列&#xff0c;进行打印 $sformat(filename, “./data_log/%0d_%0d_%0d_0.txt”, f_num, lane_num,dt); 使用此函数可以自定义字符串&#xff0c;在仿真的时候进行文件…

EA电源维修EA-PS 9750-60直流电源维修Elektro-Autοmαtik

德国EA Elektro-Autοmαtik全系列电源维修EA-PS 80003U系列 这些μ-处理器控制和可编程重型的实验室电源提供了一个灵活的“自动量程”无论是高电压或高电流在额定功率输出&#xff0c;允许使用。配件包括数字编码器可用于设置电压&#xff0c;电流和功率&#xff0c;完整的4…

nodejs+vue+ElementUi小区社区公寓宿舍智能访客预约系统

该系统将采用B/S结构模式&#xff0c;前端部分主要使用html、css、JavaScript等技术&#xff0c;使用Vue和ElementUI框架搭建前端页面&#xff0c;后端部分将使用Nodejs来搭建服务器&#xff0c;并使用MySQL建立后台数据系统&#xff0c;通过axios完成前后端的交互&#xff0c;…

绘制纹理C++

用数学和C绘制一些纹理 sin(x * x y * y) int main() {int width 400; // 宽度int height 400; // 高度Mat texture Mat::zeros(height, width, CV_8UC1);for (int y 0; y < height; y) {for (int x 0; x < width; x) {int value static_cast<int>(255 * …

基于go文件同步工具的升级迭代

介绍 同样&#xff0c;该工具适用于多个项目不同版本的维护&#xff0c;文件更新和新增的同步(自动创建目录)&#xff0c;支持自动提交svn。 升级迭代 之前的文件同步工具&#xff0c;依赖chrome和http包&#xff0c;有时候js加载页面不太稳定&#xff0c;所以有空闲就升级迭…

什么是TDR(威胁检测与响应)

网络安全是被动和主动方法的混合体。过去&#xff0c;企业往往局限于被动的方法&#xff0c;随着合规性和安全策略越来越受到重视&#xff0c;主动方法也越来越受到关注。与其他行业相比&#xff0c;网络安全是高度动态的&#xff0c;网络安全团队采用任何可以帮助他们优化的新…

MinIo 的操作与使用

文章目录 一、Client 连通 官方 API 文档&#xff1a;Documentation 官方中文文档&#xff1a;MinIO中文文档 一、Client 连通 Java 代码&#xff1a; MinioClient minioClient MinioClient.builder().endpoint("http://192.168.110.110:9000").credentials("x…

Redis服务器安装配置

Redis是一种开源的NoSQL内存数据库&#xff0c;用于高性能的数据存储和访问。Redis支持多种数据类型&#xff0c;包括字符串、哈希、列表、集合和有序集合&#xff0c;并且支持分布式存储和操作。Redis的特点包括快速、高可用和易扩展等&#xff0c;适用于各种应用场景。 一、…

leetcode:LCR 122. 路径加密(python3解法)

难度&#xff1a;简单 假定一段路径记作字符串 path&#xff0c;其中以 "." 作为分隔符。现需将路径加密&#xff0c;加密方法为将 path 中的分隔符替换为空格 " "&#xff0c;请返回加密后的字符串。 示例 1&#xff1a; 输入&#xff1a;path "a.a…

ES-环境安装(elasticsearch:7.17.9,kibana,elasticsearch-head)

ES 环境搭建 1 拉取镜像 常用三件套 docker pull kibana:7.17.9 docker pull elasticsearch:7.17.9 docker pull mobz/elasticsearch-head:52 启动镜像 elasticsearch 安装 这里可以先不挂载文件启动一波&#xff0c;然后把容器里的文件拷贝出来 docker run -p 19200:9200 …

机器学习---朴素贝叶斯分类器的实现(对文本进行侮辱性言论和非侮辱性言论的分类)

1. loadDataSet函数 import numpy as np# 构造loadDataSet函数用于生成实验样本 def loadDataSet(): postingList[[my, dog, has, flea, problems, help, please],[maybe, not, take, him, to, dog, park, stupid],[my, dalmation, is, so, cute, I, love, him],[stop, postin…

从零开始学习 JS APL(一):完整指南和实例解析

本章内容主要是按一下来&#xff1a; 操作DOM BOM 比如 控制网页元 素交互等各种网页 交互效果 以下是我总结笔记&#xff08;仅供参考&#xff09; webAPL 获取DOM对象 变量声明有三个 var let 和 const 我们应该用那个呢&#xff1f; 首先var 先排除&#xff0c;老派写法…

JOSEF约瑟 同步检查继电器DT-13/200 100V柜内安装,板前接线

系列型号 DT-13/200同步检查继电器; DT-13/160同步检查继电器; DT-13/130同步检查继电器; DT-13/120同步检查继电器; DT-13/90同步检查继电器; DT-13/254同步检查继电器; 同步检查继电器DT-13/200 100V柜内板前接线 一、用途 DT-13型同步检查继电器用于两端供电线路的…

linux系统下农场种菜小游戏!

linux系统下农场种菜小游戏&#xff01; 今天给大家分享一个linux系统下一个简单的小游戏 源码如下&#xff0c;在linux系统下创建一个.sh的脚本文件&#xff0c;复制粘贴进去即可&#xff01; #!/bin/bash# 初始化变量 vegetables("生菜" "西兰花" &qu…

SpringBoot启动流程

SpringBoot启动流程 文章目录 SpringBoot启动流程SpringBoot启动流程 SpringBoot启动流程 视频链接&#xff1a; https://www.bilibili.com/video/BV15b4y1a7yG/?p174&spm_id_frompageDriver&vd_sourcef6debc5a79e3f424f9dde2f13891b158 看李老师讲的吧&#xff0c;特…

服务器数据恢复—服务器断电导致XenServer数据文件丢失的数据恢复案例

服务器数据恢复环境&#xff1a; 某品牌720服务器搭配该品牌某型号RAID卡&#xff0c;使用4块STAT硬盘组建了一组RAID10阵列。服务器上部署XenServer虚拟化平台&#xff0c;系统盘 数据盘两个虚拟机磁盘。虚拟机上安装的是Windows Server操作系统&#xff0c;作为Web服务器使用…

虾皮助手:提升Shopee卖家运营效率的必备辅助工具

随着电商市场的快速发展&#xff0c;越来越多的卖家选择在Shopee平台上开设在线商店。然而&#xff0c;随之而来的是更多的竞争和挑战。为了在这个竞争激烈的市场中脱颖而出&#xff0c;卖家们需要寻找一种工具来帮助他们更高效地管理和运营他们的店铺。虾皮助手&#xff08;Sh…