Преобразование в однопроходный инстансированный шейдер - PullRequest
0 голосов
/ 12 февраля 2020

Проблема; Я сейчас занимаюсь разработкой для Гололенса. Если я использую стандартный однопроходный шейдер, мой пользовательский шейдер рендерится только на один глаз. Если я использую несколько проходов, он будет рендериться на обоих, но в два раза дороже. Я пытаюсь преобразовать свой пользовательский шейдер в экземпляр за один проход, и мне было интересно, есть ли у кого-нибудь опыт с этим?

Я следовал этой документации по единству безуспешно; https://docs.unity3d.com/Manual/SinglePassStereoRenderingHoloLens.html

шейдер с ошибочным кодом из документации Unity;

Shader "Custom/Heatmap_Shdr" {
        Properties{
            _HeatTex("Texture", 2D) = "white" {}
        }
            SubShader{
            Tags{ "Queue" = "Transparent" }
            Blend SrcAlpha OneMinusSrcAlpha 

            Pass{
            CGPROGRAM
#pragma vertex vert             
#pragma fragment frag

        struct vertInput {
            float4 pos : POSITION;

            UNITY_VERTEX_INPUT_INSTANCE_ID
        };

        struct vertOutput {
            float4 pos : POSITION;
            fixed3 worldPos : TEXCOORD1;
            UNITY_VERTEX_INPUT_INSTANCE_ID
            UNITY_VERTEX_OUTPUT_STEREO

        };

        vertOutput vert(vertInput input) {
            vertOutput o;

            UNITY_SETUP_INSTANCE_ID(input);
            UNITY_TRANSFER_INSTANCE_ID(Input, o);
            UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);

            o.pos = UnityObjectToClipPos(input.pos);
            o.worldPos = mul(unity_ObjectToWorld, input.pos).xyz;
            return o;
        }

        UNITY_DECLARE_SCREENSPACE_TEXTURE(_HeatTex);

        uniform int _Points_Length = 400;
        uniform float _Strength = 2;
        uniform float4 _Points[400];        


        sampler2D _HeatTex;

        half4 frag(vertOutput output) : COLOR{


            half h = 0;
        for (int i = 0; i < _Points_Length; i++)
        {
            UNITY_SETUP_INSTANCE_ID(i);

            half di = distance(output.worldPos, _Points[i].xyz);

            half ri = _Strength*_Points[i].w;

            half hi = 1 - saturate(di / ri);

            h += hi * _Points[i].w;
        }



        h = saturate(h);
        half4 color = tex2D(_HeatTex, fixed2(h, 0.5));
        return color;
        }
            ENDCG
        }
        }
            Fallback "Diffuse"
    }
...