J'essaie de faire une belle forêt à un nouveau jeu sur lequel je travaille. Mais theres un problème avec le rendu de mes shaders. Je l'ai actuellement configuré pour rendre proche par les arbres avec un moteur de rendu 2d-sprite. Et les autres arbres qui ne sont pas suffisamment proches seront rendus à l'aide du shader. Mais le problème est avec les arbres qui utilisent le shader. Parce que quand je les regarde et que je bouge ma caméra, ils arrêtent juste le rendu. Pourquoi?Pourquoi mes shaders arrêtent-ils le rendu sous un certain angle?
Voici un gif de ce que je veux dire.
https://gyazo.com/64acbf5cadd9a89b0ba2cd5f123605ce
Et voici mon script shader.
Shader "Custom/Tree_Billboard"
{
Properties
{
[PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {}
_Color("Tint", Color) = (1,1,1,1)
//_Time ("Time", Float) = 0
[MaterialToggle] PixelSnap("Pixel snap", Float) = 0
}
SubShader
{
Tags
{
"Queue" = "Transparent"
"DisableBatching" = "True"
"SortingLayer" = "Resources_Sprites"
"IgnoreProjector" = "True"
"RenderType" = "Transparent"
"PreviewType" = "Plane"
"CanUseSpriteAtlas" = "True"
}
Cull Off
Lighting Off
ZWrite Off
Blend One OneMinusSrcAlpha
Pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#pragma target 2.0
#pragma multi_compile _ PIXELSNAP_ON
#pragma multi_compile _ ETC1_EXTERNAL_ALPHA
#include "UnityCG.cginc"
// uniform Float _Time;
struct appdata_t
{
float4 vertex : POSITION;
float4 color : COLOR;
float2 texcoord : TEXCOORD0;
UNITY_VERTEX_INPUT_INSTANCE_ID
};
struct v2f
{
float4 vertex : SV_POSITION;
fixed4 color : COLOR;
float2 texcoord : TEXCOORD0;
UNITY_VERTEX_OUTPUT_STEREO
};
fixed4 _Color;
v2f vert(appdata_t IN)
{
v2f OUT;
UNITY_SETUP_INSTANCE_ID(IN);
UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(OUT);
// OUT.vertex = UnityObjectToClipPos(IN.vertex);
OUT.texcoord = IN.texcoord;
OUT.color = IN.color * _Color;
// #ifdef PIXELSNAP_ON
OUT.vertex = mul(UNITY_MATRIX_P,
mul(UNITY_MATRIX_MV, float4(0.0, 4.1, 0.0, 1.0))
- float4(IN.vertex.x, -IN.vertex.y, 0.0, 0.0)
* float4(6.0, 8.0, 1.0, 1.0));
// OUT.vertex = UnityPixelSnap (OUT.vertex);
// #endif
return OUT;
}
sampler2D _MainTex;
sampler2D _AlphaTex;
fixed4 SampleSpriteTexture(float2 uv)
{
fixed4 color = tex2D(_MainTex, uv);
#if ETC1_EXTERNAL_ALPHA
// get the color from an external texture (usecase: Alpha support for ETC1 on android)
color.a = tex2D(_AlphaTex, uv).r;
#endif //ETC1_EXTERNAL_ALPHA
return color;
}
fixed4 frag(v2f IN) : SV_Target
{
fixed4 c = SampleSpriteTexture(IN.texcoord) * IN.color;
c.rgb *= c.a;
return c;
}
ENDCG
}
}
}
Il semble que c'est un problème de plan de loin lointain plutôt qu'un problème d'angle. – Hellium
J'ai tryd ça .. mais je n'arrive pas à le faire fonctionner. D'autres idées? – TheSand
Cela semble être un problème avec votre matrice de projection. – Nain