百度推广怎么做的网站吗,什么是手机app,尚德机构,怎么设置公司网站文章目录 前言一、抓取1、抓取指令2、在使用抓取的屏幕前#xff0c;需要像使用属性一样定义一下,_GrabTexture这个名字是Unity定义好的 前言
Unity中Shader的屏幕抓取 GrabPass 一、抓取
1、抓取指令
屏幕的抓取需要使用一个Pass GrabPass{} GrabPass{“NAME”} 2、在使用… 文章目录 前言一、抓取1、抓取指令2、在使用抓取的屏幕前需要像使用属性一样定义一下,_GrabTexture这个名字是Unity定义好的 前言
Unity中Shader的屏幕抓取 GrabPass 一、抓取
1、抓取指令
屏幕的抓取需要使用一个Pass GrabPass{} GrabPass{“NAME”} 2、在使用抓取的屏幕前需要像使用属性一样定义一下,_GrabTexture这个名字是Unity定义好的 sampler2D _GrabTexture; 测试代码
Shader MyShader/P0_10_3
{SubShader{Tags{Queue Transparent}//屏幕抓取需要单独使用一个Pass —— GrabPass{} 里面什么都不写GrabPass{}Pass{CGPROGRAM#pragma vertex vert#pragma fragment frag#include UnityCG.cgincstruct v2f{float2 uv : TEXCOORD0;};//在使用抓取的屏幕前需要像使用属性一样定义一下,_GrabTexture这个名字是Unity定义好的sampler2D _GrabTexture;//在顶点着色器的输入处不用appdata,直接使用用到的参数防止 SV_POSITION 重复定义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;//对抓取的屏幕进行采样fixed4 grabTex tex2D(_GrabTexture,screenUV);return grabTex;}ENDCG}}
}
效果
为了优化节省性能一次抓取就存储下来渲染完再进行下次抓取 使用GrabPass{“NAME”} 使用这个抓取后对应的定义名也要换成 NAME
修改后代码
Shader MyShader/P0_10_3
{SubShader{Tags{Queue Transparent}//屏幕抓取需要单独使用一个Pass —— GrabPass{} 里面什么都不写或者GrabPass{_GrabTex}GrabPass{_GrabTex}Pass{CGPROGRAM#pragma vertex vert#pragma fragment frag#include UnityCG.cgincstruct v2f{float2 uv : TEXCOORD0;};//在使用抓取的屏幕前需要像使用属性一样定义一下,_GrabTexture这个名字是Unity定义好的sampler2D _GrabTex;//在顶点着色器的输入处不用appdata,直接使用用到的参数防止 SV_POSITION 重复定义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;//对抓取的屏幕进行采样fixed4 grabTex tex2D(_GrabTex,screenUV);return grabTex;}ENDCG}}
} 注意改操作对手机性能比较消耗一般在中配或高配时才开启