Search Unity

Can I modify a surface shader position?

Discussion in 'Shaders' started by ryanchan, Aug 27, 2015.

  1. ryanchan

    ryanchan

    Joined:
    Jul 22, 2015
    Posts:
    11
    This is the old shader which can make the object looks like curved

    Code (CSharp):
    1. Pass {
    2.             Tags { "LightMode"="ForwardBase" }
    3.              
    4.             Cull Front
    5.             Lighting Off
    6.             ZWrite On
    7.  
    8.             CGPROGRAM
    9.            
    10.             #pragma vertex vert
    11.             #pragma fragment frag
    12.            
    13.             #pragma multi_compile_fwdbase
    14.  
    15.             #include "UnityCG.cginc"
    16.              
    17.             float _Outline;
    18.             float4 _QOffset;
    19.             float _Dist;
    20.  
    21.             struct a2v
    22.             {
    23.                 float4 vertex : POSITION;
    24.                 float3 normal : NORMAL;
    25.             };  
    26.  
    27.             struct v2f
    28.             {
    29.                 float4 pos : POSITION;
    30.             };
    31.  
    32.             v2f vert (a2v v)
    33.             {
    34.                 v2f o;
    35.  
    36.                 float4 pos = mul( UNITY_MATRIX_MV, v.vertex);  
    37.                 float zOff = pos.z/_Dist;
    38.                 pos += _QOffset*zOff*zOff;
    39.                 float3 normal = normalize(mul ((float3x3)UNITY_MATRIX_IT_MV, v.normal));
    40.                 normal.z = -0.5;
    41.                 pos = pos + float4(normalize(normal),0) * _Outline;
    42.                 o.pos = mul(UNITY_MATRIX_P, pos);
    43.                  
    44.                 return o;
    45.             }
    46.  
    47.             float4 frag(v2f i) : COLOR  
    48.             {  
    49.                 return float4(0, 0, 0, 1);                
    50.             }  
    51.  
    52.             ENDCG
    53.         }  

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

    Code (CSharp):
    1. Shader "CurvedIllumin" {
    2.  
    3.     Properties {
    4.          _Color ("Main Color", Color) = (1,1,1,1)
    5.          _MainTex ("Base (RGB)", 2D) = "white" { }
    6.          _Illum ("Illumin (A)", 2D) = "white" { }
    7.          _BumpMap ("Normalmap", 2D) = "bump" { }
    8.          _QOffset ("Offset", Vector) = (0,0,0,0)
    9.         _Dist ("Distance", Float) = 100.0
    10.     }
    11.    
    12.     SubShader {
    13.    
    14.         UsePass "Legacy Shaders/Self-Illumin/Bumped Diffuse/FORWARD"
    15.         Pass {
    16.             Tags { "LightMode"="ForwardBase" }
    17.              
    18.             Cull Front
    19.             Lighting Off
    20.             ZWrite On
    21.  
    22.             CGPROGRAM
    23.            
    24.             #pragma vertex vert
    25.             #pragma fragment frag
    26.            
    27.             #pragma multi_compile_fwdbase
    28.  
    29.             #include "UnityCG.cginc"
    30.              
    31.             float4 _QOffset;
    32.             float _Dist;
    33.  
    34.             struct a2v
    35.             {
    36.                 float4 vertex : POSITION;
    37.                 float3 normal : NORMAL;
    38.             };  
    39.  
    40.             struct v2f
    41.             {
    42.                 float4 pos : POSITION;
    43.             };
    44.  
    45.             v2f vert (a2v v)
    46.             {
    47.                 v2f o;
    48.  
    49.                 float4 pos = mul( UNITY_MATRIX_MV, v.vertex);  
    50.                 float zOff = pos.z/_Dist;
    51.                 pos += _QOffset*zOff*zOff;
    52.                 float3 normal = normalize(mul ((float3x3)UNITY_MATRIX_IT_MV, v.normal));
    53.                 normal.z = -0.5;
    54.                 pos = pos + float4(normalize(normal),0) * _Outline;
    55.                 o.pos = mul(UNITY_MATRIX_P, pos);
    56.                  
    57.                 return o;
    58.             }
    59.  
    60.             float4 frag(v2f i) : COLOR  
    61.             {  
    62.                 return float4(0, 0, 0, 1);                
    63.             }  
    64.  
    65.             ENDCG
    66.         }
    67.  
    68.     }
    69.    
    70.    
    71.     Fallback "Legacy Shaders/Self-Illumin/Diffuse"
    72. }
     
  2. WhiskyJoe

    WhiskyJoe

    Joined:
    Aug 21, 2012
    Posts:
    143
  3. ryanchan

    ryanchan

    Joined:
    Jul 22, 2015
    Posts:
    11
  4. antislash

    antislash

    Joined:
    Apr 23, 2015
    Posts:
    646
    hi, it should not duplicate anything...
    look at the vertex function, this is all you need, change the vertex position accordingly.
    cheers