Ich entwickle gerade ein Spiel, in dem sich ein Charakter auf einem Hintergrund bewegen kann. Die Idee wird sein, dass dieser Charakter diesen Hintergrund ausgräbt. Ich denke, es sollte von einem Shader gemacht werden, aber ich bin ein Anfänger mit seinem. .Shader zum Erstellen von Lücken in Sprite Unity 2d
Ich kann mir etwas vorstellen, wenn das Zeichen zu weit von der Position dieses Pixels entfernt ist, also ist das Alpha dieses Pixels 0. Und um das Alpha bei 0 zu halten. Wenn das Alpha gleich 0 ist, tust du das nicht Mach den Charaktertest.
Aber jetzt habe ich mit dem Sprites/diffuse Shader als Basis versucht und ich kann keinen Weg finden, um die Position der Pixel zu bekommen. Ich habe etwas in der Surf-Funktion ausprobiert, aber ohne echte Ergebnisse. Die Surf-Funktion soll einmal mit Pixel nein ausgeführt werden.
Vielen Dank im Voraus, um mir zu helfen.
Bearbeiten Ich habe einige Dinge ausprobiert, um endlich einen Vert Frag Shader zu bekommen. Wie gesagt, ich versuche das Alpha mit der Entfernung des Pixels zu berechnen. Für jetzt kann ich nicht herausfinden, wo mein Fehler ist, aber vielleicht werden einige gesprächiger sein. Übrigens ist meine Sortierschicht gerade explodiert, wenn ich diesen neuen Shader einsetze. Ich habe versucht, Ztest und Zwrite auszuschalten, aber es funktioniert nicht. Also, wenn Sie eine Idee haben, (aber es ist nicht das Hauptproblem)
Shader "Unlit/SimpleUnlitTexturedShader"
{
Properties
{
// we have removed support for texture tiling/offset,
// so make them not be displayed in material inspector
[NoScaleOffset] _MainTex("Texture", 2D) = "white" {}
_Position("Position", Vector) = (0,0,0,0)
}
SubShader
{
Pass
{
CGPROGRAM
// use "vert" function as the vertex shader
#pragma vertex vert
// use "frag" function as the pixel (fragment) shader
#pragma fragment frag
// vertex shader inputs
struct appdata
{
float4 vertex : POSITION; // vertex position
float2 uv : TEXCOORD0; // texture coordinate
};
// vertex shader outputs ("vertex to fragment")
struct v2f
{
float2 uv : TEXCOORD0; // texture coordinate
float4 vertex : SV_POSITION; // clip space position
float3 worldpos:WD_POSITION;
};
// vertex shader
v2f vert(appdata v)
{
v2f o;
// transform position to clip space
// (multiply with model*view*projection matrix)
o.vertex = mul(UNITY_MATRIX_MVP, v.vertex);
// just pass the texture coordinate
o.uv = v.uv;
o.worldpos= mul(_Object2World,o.vertex).xyz;
return o;
}
// texture we will sample
sampler2D _MainTex;
float4 Position ;
// pixel shader; returns low precision ("fixed4" type)
// color ("SV_Target" semantic)
fixed4 frag(v2f i) : SV_Target
{
// sample texture and return it
fixed4 col = tex2D(_MainTex, i.uv);
col.a = step(2,distance(Position.xyz, i.worldpos));
return col;
}
ENDCG
}
}
}
Also arbeite ich gerade mit einigen Bildeffekt-Shader. zuvor habe ich an oberflächen Shader gearbeitet, ich weiß nicht wirklich ob es einen Unterschied gibt. Aber für jetzt versuche ich, erscheint meine Textur auf dem Shader 'v2f vert (appdata v) \t { \t \t v2f o; \t \t o.vertex = mul (UNITY_MATRIX_MVP, v.vertex); \t \t o.uv = v.uv; \t \t Rückgabe o; \t} \t sampler2D _MainTex; \t fixed4 frag (V2F i): SV_Target \t { \t \t fixed4 col; \t col.rgb = tex2D (_MainTex, i.uv) .rgb; \t // invertieren Sie einfach die Farben \t zurück col; \t} ' Aber mein Sprite bleibt weiß. Mein nächster Schritt sollte so sein, wie ich es verstanden habe, WorldPos in der Vert-Funktion zu erstellen und sie als nächste Funktion zu verwenden –