Проблема; Я сейчас занимаюсь разработкой для Гололенса. Если я использую стандартный однопроходный шейдер, мой пользовательский шейдер рендерится только на один глаз. Если я использую несколько проходов, он будет рендериться на обоих, но в два раза дороже. Я пытаюсь преобразовать свой пользовательский шейдер в экземпляр за один проход, и мне было интересно, есть ли у кого-нибудь опыт с этим?
Я следовал этой документации по единству безуспешно; 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"
}