前言
Unity中Shader的屏幕抓取 GrabPass
一、抓取
1、抓取指令
屏幕的抓取需要使用一個(gè)Pass
GrabPass{}
GrabPass{“NAME”}
2、在使用抓取的屏幕前,需要像使用屬性一樣定義一下,_GrabTexture這個(gè)名字是Unity定義好的
sampler2D _GrabTexture;
測(cè)試代碼:
Shader "MyShader/P0_10_3"
{
SubShader
{
Tags{"Queue" = "Transparent"}
//屏幕抓取需要單獨(dú)使用一個(gè)Pass —— GrabPass{} 里面什么都不寫(xiě)
GrabPass{}
Pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
struct v2f
{
float2 uv : TEXCOORD0;
};
//在使用抓取的屏幕前,需要像使用屬性一樣定義一下,_GrabTexture這個(gè)名字是Unity定義好的
sampler2D _GrabTexture;
//在頂點(diǎn)著色器的輸入處,不用appdata,直接使用用到的參數(shù),防止 SV_POSITION 重復(fù)定義
v2f vert (
float4 vertex : POSITION,
out float4 pos : SV_POSITION
)
{
v2f o;
pos = UnityObjectToClipPos(vertex);
return o;
}
fixed4 frag (v2f i,UNITY_VPOS_TYPE screenPos : VPOS) : SV_Target
{
fixed2 screenUV = screenPos.xy / _ScreenParams.xy;
//對(duì)抓取的屏幕進(jìn)行采樣
fixed4 grabTex = tex2D(_GrabTexture,screenUV);
return grabTex;
}
ENDCG
}
}
}
效果:
為了優(yōu)化節(jié)省性能:一次抓取就存儲(chǔ)下來(lái)渲染完,再進(jìn)行下次抓取
使用:GrabPass{“NAME”}
使用這個(gè)抓取后,對(duì)應(yīng)的定義名也要換成 NAME
修改后代碼:文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-723965.html
Shader "MyShader/P0_10_3"
{
SubShader
{
Tags{"Queue" = "Transparent"}
//屏幕抓取需要單獨(dú)使用一個(gè)Pass —— GrabPass{} 里面什么都不寫(xiě),或者GrabPass{"_GrabTex"}
GrabPass{"_GrabTex"}
Pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
struct v2f
{
float2 uv : TEXCOORD0;
};
//在使用抓取的屏幕前,需要像使用屬性一樣定義一下,_GrabTexture這個(gè)名字是Unity定義好的
sampler2D _GrabTex;
//在頂點(diǎn)著色器的輸入處,不用appdata,直接使用用到的參數(shù),防止 SV_POSITION 重復(fù)定義
v2f vert (
float4 vertex : POSITION,
out float4 pos : SV_POSITION
)
{
v2f o;
pos = UnityObjectToClipPos(vertex);
return o;
}
fixed4 frag (v2f i,UNITY_VPOS_TYPE screenPos : VPOS) : SV_Target
{
fixed2 screenUV = screenPos.xy / _ScreenParams.xy;
//對(duì)抓取的屏幕進(jìn)行采樣
fixed4 grabTex = tex2D(_GrabTex,screenUV);
return grabTex;
}
ENDCG
}
}
}
注意:該操作對(duì)手機(jī)性能比較消耗,一般在中配或高配時(shí)才開(kāi)啟文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-723965.html
到了這里,關(guān)于Unity中Shader的屏幕抓取 GrabPass的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!