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.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章