ShaderLab(一) GrabPass抓屏通道 (把当前屏幕绘制好的东西 截图截出来 绘制到另外一个物体表面)

77 篇文章 1 订阅
7 篇文章 0 订阅

 

Shader "Custom/GrabShader" //把截屏 显示到Show物体上
{

    //绑定到编辑器属性面板上的变量;
    Properties
    {
        _MainTex ("Texture", 2D) = "white" {}
    }


    SubShader//子着色器
    {

        //shader标签=队列渲染、 "Queue"="OverLay最後绘制,截屏不会截到这个物体
        Tags { "RenderType"="Opaque" "Queue"="OverLay" }

        //设置subShader子着色器LOD值,Shader脚本每次只会根据情况来选择一个可执行的SubShader子着色器
        //    (也就是一直找到第一个<= Shader脚本.maximumLOD的 那个SubShader子着色器执行,如果都没有 就“降级处理”
        LOD 100

        //添加截屏通道
        GrabPass{ //截屏通道(把当前屏幕绘制好的东西 截图截出来),不指定名字就会保存到 "_GrabTexture"字段里面,就通过"_GrabTexture"字段来访问
        
        
        }
        //end

        Pass
        {


            CGPROGRAM//CG代码开始
            #pragma vertex vert        //命名vert为顶点Shader入口
            #pragma fragment frag    //命名frag为(片元)像素Shader入口
            // make fog work让雾工作
            //#pragma multi_compile_fog

            
            #include "UnityCG.cginc"//引用unity CG库文件: Unity\Editor\Data\CGIncludes\UnityCG.cginc

            struct appdata//已经bind语义的结构体
            {
                float4 vertex : POSITION;//bind纹理位置 xyzw
                float2 uv : TEXCOORD0;    //bind第一张纹理图的uv
            };

            struct v2f//已经bind语义的结构体
            {
                float2 uv : TEXCOORD0;//bind第一张纹理图的uv 
                //UNITY_FOG_COORDS(1)  雾统一坐标(1)
                float4 vertex : SV_POSITION;//内置向量xyzw bind 位置Pos
            };

            sampler2D _MainTex; //为了使用属性块内的属性 命名1个同名的_MainTex(2d纹理图) 
            float4 _MainTex_ST; //因为使用了TRANSFORM_TEX 所以要这个额外float4 _XXX_ST变量名 来让转换坐标操作符合规范
            
            sampler2D _GrabTexture;//保存截屏通道 的纹理采样
            float4 _GrabTexture_ST; //因为使用了TRANSFORM_TEX 所以要这个额外float4 _XXX_ST变量名 来让转换坐标操作符合规范

            v2f vert (appdata v)
            {
                v2f o;
                o.vertex =  UnityObjectToClipPos(v.vertex);//把纹理图位置xyzw转世界坐标   mul(UNITY_MATRIX_MVP,v.vertex);
                o.uv = TRANSFORM_TEX(v.uv, _GrabTexture);//根据流水线uv坐标 计算出对应的_MainTex纹理图 的真正UV坐标(1.流水线uv坐标,2.纹理图)
                //UNITY_TRANSFER_FOG(o,o.vertex);注释掉 雾的操作
                return o;
            }
            
            fixed4 frag (v2f i) : SV_Target
            { 
                fixed4 col = tex2D(_GrabTexture, i.uv);//获得纹理颜色 
                //UNITY_APPLY_FOG(i.fogCoord, col); 注释掉 雾应用 
                return col;
            }
            ENDCG//CG代码开始
        }
    }
}
 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AD_喵了个咪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值