Unity中URP下抓屏的 开启 和 使用

文章目录

  • 前言
  • 一、抓屏开启
    • 1、Unity下开启抓屏
    • 2、Shader中开启抓屏
  • 二、抓屏使用
    • 1、设置为半透明渲染队列,关闭深度写入
    • 2、申明纹理和采样器
    • 3、在片元着色器使用
    • 请添加图片描述
  • 三、测试代码


前言

我们在这篇文章中看一下,URP下怎么开启抓屏。


一、抓屏开启

1、Unity下开启抓屏

  • 在URP下,打开下面这个选项
    在这里插入图片描述
  • Frame Debugger下可以看见 CopyColor 就是我们上一帧的内容
    在这里插入图片描述
  • Opaque Downsampling改变截取的帧精度
    在这里插入图片描述

2、Shader中开启抓屏

  • 使用不透明渲染队列才可以使用深度图
  • Render Queue < 2500 时才可以使用深度图
    在这里插入图片描述

Tags{“Queue”=“Geometry}”

  • 开启Zwrite

Zwrite On


二、抓屏使用

  • 我们这里创建一个面片来测试一下

1、设置为半透明渲染队列,关闭深度写入

  • 因为,要用面片显示抓取的内容。
  • 所以,我们得让抓屏不把该面片抓进去,需要抓取的其他物体开启抓屏。

Tags{“Queue”=“Transparent”}

ZWrite Off

2、申明纹理和采样器

TEXTURE2D(_CameraOpaqueTexture);SAMPLER(sampler_CameraOpaqueTexture);

  • 也可以直接使用hlsl内部定义

#define REQUIRE_OPAQUE_TEXTURE

3、在片元着色器使用

  • 使用模型uv采样

float4 opaqueMap = SAMPLE_TEXTURE2D(_CameraOpaqueTexture,sampler_CameraOpaqueTexture,i.uv);
return opaqueMap;

请添加图片描述

  • 使用屏幕uv采样(为了使其效果明显,我们给输出结果加上0.3)

float2 uv = i.positionCS.xy/ _ScreenParams.xy;
float4 opaqueMap = SAMPLE_TEXTURE2D(_CameraOpaqueTexture,sampler_CameraOpaqueTexture,uv);
return opaqueMap+0.3;

请添加图片描述

三、测试代码

Shader "MyShader/URP/P4_2"
{Properties {_Color("Color",Color) = (0,0,0,0)_MainTex("MainTex",2D) = "white"{}}SubShader{Tags{//告诉引擎,该Shader只用于 URP 渲染管线"RenderPipeline"="UniversalPipeline"//渲染类型"RenderType"="Transparent"//渲染队列"Queue"="Transparent"}//Blend One OneZWrite OffPass{Name "Unlit"HLSLPROGRAM#pragma vertex vert#pragma fragment frag// Pragmas#pragma target 2.0// Includes#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Color.hlsl"#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Input.hlsl"CBUFFER_START(UnityPerMaterial)half4 _Color;CBUFFER_END//纹理的定义,如果是编译到GLES2.0平台,则相当于sample2D _MainTex;否则相当于 Texture2D _MainTex;TEXTURE2D(_MainTex);SAMPLER(SamplerState_linear_mirrorU_ClampV); float4 _MainTex_ST;TEXTURE2D(_CameraDepthTexture);SAMPLER(sampler_CameraDepthTexture);TEXTURE2D(_CameraOpaqueTexture);SAMPLER(sampler_CameraOpaqueTexture);//struct appdata//顶点着色器的输入struct Attributes{float3 positionOS : POSITION;float2 uv : TEXCOORD0;};//struct v2f//片元着色器的输入struct Varyings{float4 positionCS : SV_POSITION;float2 uv : TEXCOORD0;float4 screenPos : TEXCOORD1;};//v2f vert(Attributes v)//顶点着色器Varyings vert(Attributes v){Varyings o = (Varyings)0;float3 positionWS = TransformObjectToWorld(v.positionOS);o.positionCS = TransformWorldToHClip(positionWS);o.uv = TRANSFORM_TEX(v.uv,_MainTex);o.screenPos = ComputeScreenPos(o.positionCS);return o;}//fixed4 frag(v2f i) : SV_TARGET//片元着色器half4 frag(Varyings i) : SV_TARGET{half4 c;float4 mainTex = SAMPLE_TEXTURE2D(_MainTex,SamplerState_linear_mirrorU_ClampV,i.uv);//c = _Color *  mainTex;//深度图//float2 uv = i.screenPos.xy / i.screenPos.w;//float2 uv = i.positionCS.xy/ _ScreenParams.xy;//float4 cameraDepthTex = SAMPLE_TEXTURE2D(_CameraDepthTexture,sampler_CameraDepthTexture,uv);//float depthTex = Linear01Depth(cameraDepthTex,_ZBufferParams);//抓屏float2 uv = i.positionCS.xy/ _ScreenParams.xy;float4 opaqueMap = SAMPLE_TEXTURE2D(_CameraOpaqueTexture,sampler_CameraOpaqueTexture,uv);return opaqueMap;}ENDHLSL}}SubShader{Tags{//渲染类型"RenderType"="Transparent"//渲染队列"Queue"="Transparent"}//Blend One OneZWrite OffPass{CGPROGRAM#pragma vertex vert#pragma fragment frag// Pragmas#pragma target 2.0// Includes#include "UnityCG.cginc"half4 _Color;sampler2D _MainTex;float4 _MainTex_ST;sampler2D _CameraDepthTexture;struct appdata{float3 positionOS : POSITION;float2 uv : TEXCOORD0;};struct v2f{float4 positionCS : SV_POSITION;float2 uv : TEXCOORD0;float4 screenPos : TEXCOORD1;};v2f vert(appdata v){v2f o;o.positionCS = UnityObjectToClipPos(v.positionOS);o.uv = TRANSFORM_TEX(v.uv,_MainTex);o.screenPos = ComputeScreenPos(o.positionCS);return o;}//fixed4 frag(v2f i) : SV_TARGET//片元着色器half4 frag(v2f i) : SV_TARGET{half4 c;float4 mainTex = tex2D(_MainTex,i.uv);//c = _Color *  mainTex;//深度图//float2 uv = i.screenPos.xy / i.screenPos.w;float2 uv = i.positionCS/ _ScreenParams.xy;float4 cameraDepthTex = tex2D(_CameraDepthTexture,uv);float depthTex = Linear01Depth(cameraDepthTex);return depthTex;}ENDCG}}
}

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

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

相关文章

(代码模板)JAVA_返回类R

个人留存用&#xff0c;通用返回类R代码模板&#xff1a; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data;import java.io.Serializable; import java.util.HashMap; import java.util.Map;/*** author &#…

《共建开源》系列:Airtest-Framework - UI自动化框架系统

Airtest- Framework 平台简介 Airtest- Framework 是 基于 unittest、Flask、Airtest 搭建的 开源的 UI 自动化框架系统 提供 HTTP API 接口&#xff0c;实现自动解析包名并自动执行 相应目录下的 Case。目前仅支持单台设备连接。多个任务会自动排队处理。 系统要求 Pytho…

【动态规划】【二分查找】C++算法 466 统计重复个数

作者推荐 【动态规划】458:可怜的小猪 涉及知识点 动态规划 二分查找 力扣:466 统计重复个数 定义 str [s, n] 表示 str 由 n 个字符串 s 连接构成。 例如&#xff0c;str [“abc”, 3] “abcabcabc” 。 如果可以从 s2 中删除某些字符使其变为 s1&#xff0c;则称字符串…

互信息法的原理详解

文章目录 互信息法&#xff08;上&#xff09;互信息是什么从信息增益角度理解互信息从变量分布一致角度理解互信息 卡方检验与离散变量的互信息法 互信息法&#xff08;上&#xff09; 尽管f_regression巧妙的构建了一个F统计量&#xff0c;并借此成功的借助假设检验来判断变…

跨境商城系统如何开发代购商城、国际物流、一件代发等功能?

跨境商城系统的开发涉及到多个方面&#xff0c;其中代购商城、国际物流和一件代发等功能是其中的重要组成部分。本文将详细介绍如何开发这些功能&#xff0c;以帮助跨境商城系统更好地满足市场需求。 一、代购商城的开发 代购商城是跨境商城系统中的重要功能之一&#xff0c;它…

互联网加竞赛 基于大数据的股票量化分析与股价预测系统

文章目录 0 前言1 课题背景2 实现效果3 设计原理QTChartsarma模型预测K-means聚类算法算法实现关键问题说明 4 部分核心代码5 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 基于大数据的股票量化分析与股价预测系统 该项目较为新颖…

小程序基础学习(导航栏组件)

目标&#xff1a;把导航栏抽离成组件&#xff0c;

oracle 19c容器数据库data dump数据泵传输数据(2)---11g导19c

目录 1.在11gnon-cdb数据库中创建测试用户 2.在19cCDB容器数据库中新建pdb2 3.执行命令导出 4.执行命令导入 Exporting from a Non-CDB and Importing into a PDB 我們要記住一点&#xff1a;如果是全库导出导入的话&#xff0c;目标数据库没有的表空间我们要事先创建&#…

Java中输入和输出处理(四)序列化和反序列化

Java中输入和输出处理&#xff08;四&#xff09;序列化和反序列化的笔记 一、序列化 序列化是将对象的状态信息转换为可以存储或传输的形式的过程。在Java中&#xff0c;我们可以使用java.io.Serializable接口来实现对象的序列化。 示例&#xff1a; import java.io.*;clas…

提高iOS App开发效率的方法

引言 随着智能手机的普及&#xff0c;iOS App开发成为越来越受欢迎的技术领域之一。许多人选择开发iOS应用程序来满足市场需求&#xff0c;但是iOS App开发需要掌握一些关键技术和工具&#xff0c;以提高开发效率和质量。本文将介绍一些关键点&#xff0c;可以帮助你进行高效的…

Flying HTML生成PDF添加水印

HTML转PDF并添加水印 <!-- 用于生成PDF --> <dependency><groupId>org.xhtmlrenderer</groupId><artifactId>flying-saucer-pdf</artifactId><version>9.1.20</version> </dependency>import java.io.File; import jav…

os.path模块常用函数

os.path模块提供用于处理文件路径的函数&#xff0c;这些函数可以跨平台使用&#xff0c;因为他们会根据操作系统的不同选择适当的路径分隔符。 1.os.path.join(path, *paths) 作用&#xff1a;将多个路径组合成一个完整的路径 path os.path.join(/path/to example file.…

基础知识篇(一)Acticity生命周期

Activity 类是 Android 应用的关键组件&#xff0c;而 activity 的启动和组合方式是平台应用模型的基本组成部分。与使用 main() 方法启动应用的编程范式不同&#xff0c;Android 系统会通过调用与其生命周期特定阶段对应的特定回调方法&#xff0c;在 Activity 实例中启动代码…

ChatGpt使用技巧

通用类技巧 角色扮演 比如让ChatGpt扮演500强营销专家 告诉ChatGpt你的身份。初学者、或是有一定能力、知识的学习者等 限制ChatGpt回答长度 100~200字之间 让ChatGpt一步一步思考 他会预测下一个单词&#xff0c;根据prompt进行生成 明确你的要求和目的 说清楚问题&#x…

为什么杭州的独角兽公司的技术专家都是阿里巴巴出来的?

在浙江杭州有一个不成为的规定&#xff0c;独角兽公司招聘技术人才的时候&#xff0c;尤其是阿里巴巴出来的技术专家&#xff0c;面试官都是争先恐后的面试&#xff0c;总是想第一时间把这个人拿到手&#xff0c;当然前提是这个技术专家不是水货。 猎头推荐人才的时候&#xf…

网络安全(网络安全)—2024自学

1.网络安全是什么 网络安全可以基于攻击和防御视角来分类&#xff0c;我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术&#xff0c;而“蓝队”、“安全运营”、“安全运维”则研究防御技术。 2.网络安全市场 一、是市场需求量高&#xff1b; 二、则是发展相对成熟…

Docker 配置国内镜像源加速

1. 国内镜像源总览 名称路径中国官方镜像https://registry.docker-cn.com网易163镜像http://hub-mirror.c.163.com中科大镜像https://docker.mirrors.ustc.edu.cn阿里云镜像https://[xxx].mirror.aliyuncs.com 2. 阿里云镜像源 地址&#xff1a;https://cr.console.aliyun.c…

同样的行情为什么有人亏损有人盈利?现货白银关键的管理细节要知道

给同样一波趋势行情两个人做交易&#xff0c;就算大家执行一样的交易策略&#xff0c;但结果却也有可能有所不同&#xff0c;有人盈利有人亏损&#xff0c;而盈利的人中可能有的人多&#xff0c;有的人少&#xff0c;这是为什么呢&#xff1f;其实很多投资者忽略了进行现货白银…

修改SSH默认端口,使SSH连接更安全

以CentOS7.9为例&#xff1a; 1、修改配置文件 vi /etc/ssh/sshd_config 2、远程电脑可连接&#xff0c;暂时将SELinux关闭 # 查询状态 getenforce # 关闭 setenforce 0 # 开启 setenforce 1 3、SELinux设置&#xff08;如果启用&#xff09;&#xff0c;semanage管理工具安…

想寻找Axure的替代品?我们已经试用了10+款设计工具,来看看吧!

Axure是许多产品经理和设计师进入快速原型设计的首选工具&#xff0c;但Axure的使用成本相对较高&#xff0c;学习曲线陡峭&#xff0c;许多设计师正在寻找可以取代Axure的原型设计工具&#xff0c;虽然现在有很多可选的设计工具&#xff0c;但质量不均匀&#xff0c;可以取代A…