2

カメラのシェーダーを使用して暗視効果を作成したいと考えています。通常のマテリアル用のシェーダーを作成しました。このシェーダーでは、ノイズ マスクとテクスチャをまとめています (私のカメラの例では、テクスチャはカメラ自体から取得した画像である必要があります)。

いくつか質問があります。まず、Camera.renderWithShader を使用してシェーダーをカメラに渡すことができることがわかりました。問題は、カメラとシェーダーを通して見たものから画像をリンクする方法がわからないことです。また、ノイズ マスクをシェーダに入れたいのですが、渡す方法がわかりません。これは、テクスチャをリンクできるマテリアルを持つ場合とは異なります。

シェーダーとカメラをリンクする方法をネットでいくつかのコードを見つけました..問題は、方法がわからないために最終的な暗視効果を見ることができないという事実のために、それが良いかどうかわからないということですテクスチャをカメラに渡します。ビューが変更されていることがわかりますが、それが正しいかどうかはわかりません。

void Start () {
     nightVisionShader = Shader.Find("Custom/nightvisionShader");
        Camera.mainCamera.RenderWithShader(nightVisionShader,"");
    }

void OnRenderImage (RenderTexture source, RenderTexture destination) 

    {
       RenderTexture sceneNormals = RenderTexture.GetTemporary (source.width, source.height, 24, RenderTextureFormat.ARGB32);
       transform.camera.targetTexture = sceneNormals;
       transform.camera.RenderWithShader(nightVisionShader, "");

        transform.camera.targetTexture = null;
            // display contents in game view
         Graphics.Blit (sceneNormals, destination);
         RenderTexture.ReleaseTemporary (sceneNormals);              

    }
4

1 に答える 1

0

やり方発見!

void OnRenderImage (RenderTexture source,  RenderTexture destination) {     


    overlayMaterial.SetTexture ("_MainTex", Resources.Load("nightvision/") as Texture2D);
    overlayMaterial.SetTexture ("_noiseTex", Resources.Load("nightvision/noise_tex6") as Texture2D);
    overlayMaterial.SetTexture ("_maskTex", Resources.Load("nightvision/binoculars_mask") as Texture2D);    
    overlayMaterial.SetFloat ("_elapsedTime", Time.time);   
    Graphics.Blit (source, destination, overlayMaterial, 0);
}
于 2013-02-04T16:18:03.923 に答える