Уря - получилось .
Сначала закодировал информацию про шейп в текстуру (кодируется как-то немного криво, где-то косяк), потом понял что не знаю как использовать vertex texture fetch в Unity 3.0 (если такая штука есть в наличии вообще). Поэтому уже было лень брать информацию из меша, из цвет из текстуры загнал в vertex color меша.
Шейдер интерполирует позицию каждой вершины между позицией вершины в меше и позицией, которая записана в цвете вершины.
Наверное значения не могут быть больше 1.0f, поэтому я в качестве модельки выбрал кубик 0.5x0.5x0.5, который превращается в шарик (в демке не совсем шарик, а скорее его четвертинка - это, как я уже писал, я где-то немного накосячил).
Я рад что сам принцип работает
Синтаксис:
Используется glsl
Shader "GnobTests/MorphShader" {
Properties {
//_MainTex ("Base (RGB)", 2D) = "white" {}
//_MainTex2 ("Base (RGB)", 2D) = "white" {}
_BlendFactor ("BlendFactor", Float) = 0.5
}
SubShader {
Pass {
CGPROGRAM
// Upgrade NOTE: excluded shader from Xbox360; has structs without semantics (struct appdata members vertex,color)
#pragma exclude_renderers xbox360
// Upgrade NOTE: excluded shader from OpenGL ES 2.0 because it does not contain a surface program or both vertex and fragment programs.
#pragma exclude_renderers gles
#pragma vertex vert
#include "UnityCG.cginc"
struct appdata {
float4 vertex;
float4 color;
};
struct v2f {
float4 pos : SV_POSITION;
};
float _BlendFactor;
v2f vert (appdata v)
{
v2f o;
o.pos = mul (UNITY_MATRIX_MVP, lerp(v.vertex, v.color, _BlendFactor));
return o;
}
ENDCG
}
}
Fallback "VertexLit"
}
Properties {
//_MainTex ("Base (RGB)", 2D) = "white" {}
//_MainTex2 ("Base (RGB)", 2D) = "white" {}
_BlendFactor ("BlendFactor", Float) = 0.5
}
SubShader {
Pass {
CGPROGRAM
// Upgrade NOTE: excluded shader from Xbox360; has structs without semantics (struct appdata members vertex,color)
#pragma exclude_renderers xbox360
// Upgrade NOTE: excluded shader from OpenGL ES 2.0 because it does not contain a surface program or both vertex and fragment programs.
#pragma exclude_renderers gles
#pragma vertex vert
#include "UnityCG.cginc"
struct appdata {
float4 vertex;
float4 color;
};
struct v2f {
float4 pos : SV_POSITION;
};
float _BlendFactor;
v2f vert (appdata v)
{
v2f o;
o.pos = mul (UNITY_MATRIX_MVP, lerp(v.vertex, v.color, _BlendFactor));
return o;
}
ENDCG
}
}
Fallback "VertexLit"
}