Detail Texture in Screen Space

Shader "zff/ScreenPos"
{
    Properties
    {
        _MainTex("MainTex",2D)="white"{}
        _Detail("Detail",2D)="gray"{}
    }
    SubShader
    {
        Tags{"RenderType"="Opaque"}
        CGPROGRAM
        struct Input
        {
            float2 uv_MainTex;
            float4 screenPos;
        };
        sampler2D _MainTex;
        sampler2D _Detail;
        void surf(Input IN,inout SurfaceOutput o)
        {
            o.Albedo = tex2D(_MainTex,IN.uv_MainTex);
            flaot2 screenUV = IN.uv_MainTex/IN.screenPos.w;
            screentUV *= float2(8,6);
            o.Albedo *= tex2D(_Detail,screenUV).rgb*2;
        }
        ENDCG
    }
    Fallback "Diffuse"
}

带有这样shader材质的物体的贴图就会跟着移动到的位置而变换图片
1. 关于screenPos:screenPos是一个三维点,但是用齐次坐标系表示出来就是(x,y,z,w).根据齐次坐标系的性质,(x,y,z,w)的齐次坐标对应三维点(x/w,y/w,z/w),因此把w值除掉可以看来是一种Normalize的做法,这样就取出了实际屏幕的xy的uv值.
2. 对于screenUV进行倍剩:此处剩float2(8,6)意思是将原来获取的屏幕尺寸进行拉大的倍数,即x轴拉大8倍,y轴拉大6倍.
3.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值