dedecms網(wǎng)站開發(fā)百度明星搜索量排行榜
文章目錄
- 前言
- 一、抓屏開啟
- 1、Unity下開啟抓屏
- 2、Shader中開啟抓屏
- 二、抓屏使用
- 1、設(shè)置為半透明渲染隊(duì)列,關(guān)閉深度寫入
- 2、申明紋理和采樣器
- 3、在片元著色器使用
- 請(qǐng)?zhí)砑訄D片描述
- 三、測(cè)試代碼
前言
我們?cè)谶@篇文章中看一下,URP下怎么開啟抓屏。
一、抓屏開啟
1、Unity下開啟抓屏
- 在URP下,打開下面這個(gè)選項(xiàng)
- Frame Debugger下可以看見 CopyColor 就是我們上一幀的內(nèi)容
- Opaque Downsampling改變截取的幀精度
2、Shader中開啟抓屏
- 使用不透明渲染隊(duì)列才可以使用深度圖
- Render Queue < 2500 時(shí)才可以使用深度圖
Tags{“Queue”=“Geometry}”
- 開啟Zwrite
Zwrite On
二、抓屏使用
- 我們這里創(chuàng)建一個(gè)面片來測(cè)試一下
1、設(shè)置為半透明渲染隊(duì)列,關(guān)閉深度寫入
- 因?yàn)?#xff0c;要用面片顯示抓取的內(nèi)容。
- 所以,我們得讓抓屏不把該面片抓進(jìn)去,需要抓取的其他物體開啟抓屏。
Tags{“Queue”=“Transparent”}
ZWrite Off
2、申明紋理和采樣器
TEXTURE2D(_CameraOpaqueTexture);SAMPLER(sampler_CameraOpaqueTexture);
- 也可以直接使用hlsl內(nèi)部定義
#define REQUIRE_OPAQUE_TEXTURE
3、在片元著色器使用
- 使用模型uv采樣
float4 opaqueMap = SAMPLE_TEXTURE2D(_CameraOpaqueTexture,sampler_CameraOpaqueTexture,i.uv);
return opaqueMap;
- 使用屏幕uv采樣(為了使其效果明顯,我們給輸出結(jié)果加上0.3)
float2 uv = i.positionCS.xy/ _ScreenParams.xy;
float4 opaqueMap = SAMPLE_TEXTURE2D(_CameraOpaqueTexture,sampler_CameraOpaqueTexture,uv);
return opaqueMap+0.3;
三、測(cè)試代碼
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"//渲染隊(duì)列"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平臺(tái),則相當(dāng)于sample2D _MainTex;否則相當(dāng)于 Texture2D _MainTex;TEXTURE2D(_MainTex);SAMPLER(SamplerState_linear_mirrorU_ClampV); float4 _MainTex_ST;TEXTURE2D(_CameraDepthTexture);SAMPLER(sampler_CameraDepthTexture);TEXTURE2D(_CameraOpaqueTexture);SAMPLER(sampler_CameraOpaqueTexture);//struct appdata//頂點(diǎn)著色器的輸入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)//頂點(diǎn)著色器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"//渲染隊(duì)列"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}}
}