3

シェーダーを作成しましたが、カメラの前にある平面に追加すると正常に動作します (この場合、カメラにはシェーダーがありません)。しかし、このシェーダーをカメラに追加すると、画面に何も表示されません。これが私のコードです。Camera.RenderWithShader メソッドと互換性があるように変更する方法を教えてください。

Shader "Custom/she1" {
    Properties {
    top("Top", Range(0,2)) = 1
    bottom("Bottom", Range(0,2)) = 1
}
    SubShader {

        // Draw ourselves after all opaque geometry
        Tags { "Queue" = "Transparent" }

        // Grab the screen behind the object into _GrabTexture
        GrabPass { }

        // Render the object with the texture generated above
        Pass {


CGPROGRAM
#pragma debug
#pragma vertex vert
#pragma fragment frag
#pragma target 3.0

            sampler2D _GrabTexture : register(s0);
            float top;
            float bottom;

struct data {

    float4 vertex : POSITION;

    float3 normal : NORMAL;

};



struct v2f {

    float4 position : POSITION;

    float4 screenPos : TEXCOORD0;

};



v2f vert(data i){

    v2f o;

    o.position = mul(UNITY_MATRIX_MVP, i.vertex);

    o.screenPos = o.position;

    return o;

}



half4 frag( v2f i ) : COLOR

{

    float2 screenPos = i.screenPos.xy / i.screenPos.w;
    float _half = (top + bottom) * 0.5;
    float _diff = (bottom - top) * 0.5;
    screenPos.x = screenPos.x * (_half + _diff * screenPos.y);
      screenPos.x = (screenPos.x + 1) * 0.5;
    screenPos.y = 1-(screenPos.y + 1) * 0.5 ;
    half4 sum = half4(0.0h,0.0h,0.0h,0.0h);  
    sum = tex2D( _GrabTexture, screenPos);
    return sum;

}
ENDCG
        }
    }

Fallback Off
} 
4

2 に答える 2

3

あなたが求めているのは、カメラ内のすべてをシェーダーでシェーディングする代替シェーダーだと思います。

私は正しいですか?

もしそうなら、これはうまくいくはずです

Camera.main.SetReplacementShader(Shader.Find("Your Shader"),"RenderType")

ここにいくつかの詳細情報があります: http://docs.unity3d.com/Documentation/Components/SL-ShaderReplacement.html

編集:カメラ全体がレンズ効果のように歪むことを期待していますか? このようなシェーダーを単独で使用することはできません。現状では、平面などのオブジェクトにのみ適用され、カメラ ビュー全体には適用されないため、ポスト イメージ エフェクトが必要です。まず Unity Pro が必要です。その場合は、イメージ エフェクト パッケージをインポートして、魚眼スクリプトを確認します。魚眼スクリプトを独自のシェーダーで複製できるかどうかを確認してください。対応するスクリプトなしでフィッシュアイ シェーダーをアタッチすると、現在のシェーダー コードとまったく同じ結果が得られました。画像エフェクト パッケージにアクセスできない場合は、フィッシュアイ スクリプトとシェーダーをお送りください。

于 2013-10-21T18:26:24.023 に答える