Unity Shader案例01--------物体压缩放大

发布时间 2023-03-28 10:14:29作者: 打工仔-也想飞

使用Unity2021

1.基本需要场地Plane+物体Sphere+材质Materal+渲染Shader

       

 

2.渲染Shader-------压缩放大渲染设置代码

Shader "CLF/SetZoom"
{
    Properties
    {
        // 通常所有属性名都以下划线字符开头
        //Texture  2D == 贴图
        _MainTex("Texture", 2D) = "white" {}
        //压扁系数       
        _Value_X("flasher Value-X",Range(0, 1)) = 0     
        _Value_Y("flasher Value-Y",Range(0, 1)) = 0
        _Value_Z("flasher Value-Z",Range(0, 1)) = 0
    }
   SubShader
   {
       Tags { "RenderType" = "Opaque" }
       LOD 100

       Pass
       {
           CGPROGRAM
           // 声明顶点着色器
           #pragma vertex vert
           // 声明像素着色器
           #pragma fragment frag
           // 使雾生效
           #pragma multi_compile_fog

           // 引用CG的核心代码库
           #include "UnityCG.cginc"

           struct appdata
           {
               float4 vertex : POSITION;
               float2 uv : TEXCOORD0;
           };

           struct v2f
           {
               float2 uv : TEXCOORD0;
               UNITY_FOG_COORDS(1)
               float4 vertex : SV_POSITION;
           };
           sampler2D _MainTex;
           float4 _MainTex_ST;
           float _Value_Y;
           float _Value_Z;
           float _Value_X;

           // 定义顶点着色器函数 函数名要与声明顶点着色器名称相同
           v2f vert(appdata v)
           {
               v2f o;
               //顶点坐标控制 x、y、z
               v.vertex.xyz *= clamp(_Value_X, _Value_Y, _Value_Z);
               o.vertex = UnityObjectToClipPos(v.vertex);
               o.uv = TRANSFORM_TEX(v.uv, _MainTex);               
               return o;
           }

           fixed4 frag(v2f i) : SV_Target
           {
               // 采样2D纹理贴图
               fixed4 col = tex2D(_MainTex, i.uv);
               // 应用雾
               UNITY_APPLY_FOG(i.fogCoord, col);
               // 返回经过处理后的最终色彩
               return col;
            }
       ENDCG
       }
   }
}

注意:先将材质上面shader选择为我们刚才新建的shader-----CLF/SetZoom,再将材质添加到物体下 

 

 

 

操作界面