0 Daumen
445 Aufrufe

ich habe einen shader programmiert der ein bild schärfer und weniger scharf machen kann. Wie übergebe ich parameter in unity an den Shader?

Avatar von

1 Antwort

+2 Daumen
 
Beste Antwort

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:

sssssss.png

Avatar von

Schau Dir für andere Shader (oder deren Einbindung) einfach das Unity-Projekt an, das ich gerade hochgeladen habe: https://github.com/informatik-academy/Mathelounge/tree/master/Shader 

Da sind noch diverse andere Shader enthalten.

Ein anderes Problem?

Stell deine Frage

Willkommen bei der Stacklounge! Stell deine Frage einfach und kostenlos

x
Made by a lovely community