前提・実現したいこと
ジャギーのない円マスクを作成したい
ジャギーの少ない円形しシェーダーを作成し、マテリアルに付加。
これを使ってイメージとして円表示ができる。
マスクとして利用すると、イメージが前面に出てきて裏のイメージが表示できない
発生している問題・エラーメッセージ
エラーメッセージ
該当のソースコード
赤丸がマスク。
マスクをオフにすると裏のイメージが表示されます。
シェーダーのソース
Shader "Unlit/Circle" { Properties { _Color ("Color", Color) = (1,1,1,1) } SubShader { Tags { "Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent" } Blend SrcAlpha OneMinusSrcAlpha ColorMask RGB ZWrite Off Cull Off Pass { CGPROGRAM #pragma vertex vert #pragma fragment frag #include "UnityCG.cginc" // Quality level // 2 == high quality // 1 == medium quality // 0 == low quality #define QUALITY_LEVEL 1 struct appdata { float4 vertex : POSITION; float2 texcoord : TEXCOORD0; }; struct v2f { float4 pos : SV_POSITION; float2 uv : TEXCOORD0; }; v2f vert (appdata v) { v2f o; o.pos = UnityObjectToClipPos(v.vertex); o.uv = v.texcoord - 0.5; return o; } fixed4 _Color; fixed4 frag (v2f i) : SV_Target { float dist = length(i.uv); #if QUALITY_LEVEL == 2 // length derivative, 1.5 pixel smoothstep edge float pwidth = length(float2(ddx(dist), ddy(dist))); float alpha = smoothstep(0.5, 0.5 - pwidth * 1.5, dist); #elif QUALITY_LEVEL == 1 // fwidth, 1.5 pixel smoothstep edge float pwidth = fwidth(dist); float alpha = smoothstep(0.5, 0.5 - pwidth * 1.5, dist); #else // Low // fwidth, 1 pixel linear edge float pwidth = fwidth(dist); float alpha = saturate((0.5 - dist) / pwidth); #endif return fixed4(_Color.rgb, _Color.a * alpha); } ENDCG } } }
試したこと
描画順の問題かと思い、stack over flowを参考に以下のように編集しました。
Properties { [PerRendererData] _MainTex ("Sprite Texture", 2D) = "white" {} _Color ("Tint", Color) = (1,1,1,1) // required for UI.Mask _StencilComp ("Stencil Comparison", Float) = 3 _Stencil ("Stencil ID", Float) = 1 _StencilOp ("Stencil Operation", Float) = 2 _StencilWriteMask ("Stencil Write Mask", Float) = 255 _StencilReadMask ("Stencil Read Mask", Float) = 255 _ColorMask ("Color Mask", Float) = 15 } SubShader { Tags { "Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent" } Stencil { Ref [_Stencil] Comp [_StencilComp] Pass [_StencilOp] ReadMask [_StencilReadMask] WriteMask [_StencilWriteMask] }
が、マテリアル自体が描画されなくなりました
補足情報(FW/ツールのバージョンなど)
Unity 20171.1.p3
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/03/19 02:10