私は現在、キャラクターがバックグラウンドで移動できるゲームを開発中です。このキャラクターがこの背景を掘り起こすという考えがあります。私はそれがシェイダーによって行われるべきだと思うが、私はその初心者です。 。シェイダーでスプライトに穴を作るUnity 2d
キャラクターがこのピクセルの位置から離れすぎているように見えるので、このピクセルのアルファは0です。アルファを0に保つためにアルファが0に等しい場合は、文字のテストをする。
しかし、今のところ、スプライト/拡散シェーダをベースとして試してみましたが、ピクセルの位置を取得する方法が見つかりませんでした。私はsurf関数で何かを試しましたが、実際の結果はありませんsurf関数はpixel noで1回実行されるはずです。
ありがとうございました。
編集 私は最終的にvert fragシェーダを得るためにいくつかのことを試みました。私が言ったように、私はピクセルの距離でアルファを計算しようとしています。 今のところ私のミスはどこにあるのか分かりませんが、多少の話が出るかもしれません。ところで、この新しいシェーダを置くと、私のソートレイヤーが爆発してしまいました。私はZtestとZwriteをオフにしようとしましたが、うまくいきません。だから、あなたは(しかし、それは主要な問題ではありません)
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
}
}
}
私は現在、いくつかのImage Effect 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 return o; \t} \t sampler2D _MainTex; \t fixed4frag(v2f i):SV_Target \t { \t \t fixed4 col; \t col.rgb = tex2D(_MainTex、i.uv).rgb; \t //色を反転するだけです \t return col; \t} ' 私のスプライトは白のままです。私の次のステップは、私がvert関数でWorldPosを作成し、それを次のfunct –