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"
}