Hierzu musst Du in den Properties (siehe mein Rahmenprogramm) eine Variable definierten, die Du von einem Skript aus ansprechen kannst. Z.B.:
_c1("_c1",Float) = 0.0
Die Funktion Sharpen sorgt für die entsprechende Umrechnung. Da ich Deine Spezifikation nicht kenne, gehe ich von dem "Standard-Filterkern" aus:
float4 sharpen (sampler2D tex, float2 uv) {
// UVs in Pixeladresse umrechnen
float2 pos_correction = float2(1.0/_TexSize_x, 1.0/_TexSize_y);
float4 texel = float4(0, 0, 0, 0);
// Filter-Kern
int kernel[9] =
{
-1.0,0.0,-1.0,
0.0,4.0,0.0,
-1.0,0.0,-1.0
};
// Offsets für die 3x3 Umgebung eines Pixels
float2 offsets[9] ={
float2(-1.0, -1.0),
float2(0.0, -1.0),
float2(1.0, -1.0),
float2(-1.0, 0.0),
float2(0.0, 0.0),
float2(1.0, 0.0),
float2(-1.0, 1.0),
float2(0.0, 1.0),
float2(1.0, 1.0)
};
for(int i = 0; i < 9; i++){
texel += tex2D(tex, (uv + offsets[i] * pos_correction)) * kernel[i];
}
return tex2D(tex, (uv)) + _c1 * texel;
}
Die Parameter kannst Du beispielsweise wie folgt dem Shader übergeben:
public Slider slider;
// Objekt, das Du schärfen willst
public GameObject obj;
void Update () {
obj.GetComponent<Renderer> ().material.SetFloat ("_c1", slider.value);
}
Zur Steuerung des Schärfegrades habe ich einen Slider verwendet (da musst Du Dir überlegen, wie Du das steuern willst). Das Ganze sieht dann so aus: