Can I modify a surface shader position?

This is the old shader which can make the object looks like curved

Pass { 
            Tags { "LightMode"="ForwardBase" } 
             
            Cull Front 
            Lighting Off 
            ZWrite On 
  
            CGPROGRAM 
            
            #pragma vertex vert 
            #pragma fragment frag 
            
            #pragma multi_compile_fwdbase 
 
            #include "UnityCG.cginc" 
             
            float _Outline; 
            float4 _QOffset;
            float _Dist;
  
            struct a2v 
            { 
                float4 vertex : POSITION; 
                float3 normal : NORMAL; 
            };  
  
            struct v2f 
            { 
                float4 pos : POSITION; 
            }; 
  
            v2f vert (a2v v) 
            { 
                v2f o; 
 
                float4 pos = mul( UNITY_MATRIX_MV, v.vertex);  
                float zOff = pos.z/_Dist;
                pos += _QOffset*zOff*zOff;
                float3 normal = normalize(mul ((float3x3)UNITY_MATRIX_IT_MV, v.normal));
                normal.z = -0.5; 
                pos = pos + float4(normalize(normal),0) * _Outline; 
                o.pos = mul(UNITY_MATRIX_P, pos); 
                 
                return o; 
            } 
  
            float4 frag(v2f i) : COLOR   
            {  
                return float4(0, 0, 0, 1);                
            }  
  
            ENDCG 
        }

This is what I am trying to do (combine with a surface usepass)

Shader "CurvedIllumin" {

    Properties {
         _Color ("Main Color", Color) = (1,1,1,1)
         _MainTex ("Base (RGB)", 2D) = "white" { }
         _Illum ("Illumin (A)", 2D) = "white" { }
         _BumpMap ("Normalmap", 2D) = "bump" { }
         _QOffset ("Offset", Vector) = (0,0,0,0)
        _Dist ("Distance", Float) = 100.0
    }
   
    SubShader {
   
        UsePass "Legacy Shaders/Self-Illumin/Bumped Diffuse/FORWARD"
        Pass { 
            Tags { "LightMode"="ForwardBase" } 
             
            Cull Front 
            Lighting Off 
            ZWrite On 
  
            CGPROGRAM 
            
            #pragma vertex vert 
            #pragma fragment frag 
            
            #pragma multi_compile_fwdbase 
 
            #include "UnityCG.cginc" 
             
            float4 _QOffset;
            float _Dist;
  
            struct a2v 
            { 
                float4 vertex : POSITION; 
                float3 normal : NORMAL; 
            };  
  
            struct v2f 
            { 
                float4 pos : POSITION; 
            }; 
  
            v2f vert (a2v v) 
            { 
                v2f o; 
 
                float4 pos = mul( UNITY_MATRIX_MV, v.vertex);  
                float zOff = pos.z/_Dist;
                pos += _QOffset*zOff*zOff;
                float3 normal = normalize(mul ((float3x3)UNITY_MATRIX_IT_MV, v.normal));
                normal.z = -0.5; 
                pos = pos + float4(normalize(normal),0) * _Outline; 
                o.pos = mul(UNITY_MATRIX_P, pos); 
                 
                return o; 
            } 
  
            float4 frag(v2f i) : COLOR   
            {  
                return float4(0, 0, 0, 1);                
            }  
  
            ENDCG 
        } 

    }
   
   
    Fallback "Legacy Shaders/Self-Illumin/Diffuse"
}

Scroll down and look for the “Normal Extrusion with Vertex Modifier” sample.

I tried this already, it will duplicate one more instead of modify the original one. Can I change the “usepass”?

hi, it should not duplicate anything…
look at the vertex function, this is all you need, change the vertex position accordingly.
cheers