キャラクタの縮小表示と、ぼかしシェーダ
キャラクタ縮小表示
亜人をクリック&ドラッグで配置換えして、別の労働をさせることが出来るように試み中です
そこで直面した問題として、キャラクタを縮小するとジャギーが出て線がガビガビになってしまう問題がありました
ぼかしシェーダ
unityの機能として、Imageコンポーネントにマテリアルを紐づけることができ
画像にシェーダを適用できるようだったので勉強してみて、
ぼかしシェーダ(として動いているように見えるもの)ができました!(多分)
以下の感じのシェーダになったんですが
有識者の方のご意見をお待ちしております…
下の縮小画像左が、線がガビガビの状態、右がぼかした状態。結構いい感じです!
シェーダ
Shader "Custom/Bokashi_Bycubic"
{
Properties
{
_MainTex("Texture", 2D) = "white" {}
}
SubShader
{
Tags
{
"Queue" = "Transparent"
"RenderType" = "Transparent"
}
Blend SrcAlpha OneMinusSrcAlpha
Pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
struct appdata
{
float4 vertex : POSITION;
float2 uv : TEXCOORD;
};
struct v2f
{
float4 vertex : SV_POSITION;
float2 uv : TEXCOORD;
};
sampler2D _MainTex;
v2f vert (appdata v)
{
v2f o;
o.vertex = UnityObjectToClipPos(v.vertex);
o.uv = v.uv;
return o;
}
fixed4 frag (v2f i) : SV_Target
{
fixed4 color = tex2D(_MainTex, i.uv);
if(color.a <= 0){
discard; // フチのボケを無くす.特にFaceで有効っぽい.
}
float offsetMargin = 0.5;
float2 uv0 = i.uv;
uv0.x = uv0.x - offsetMargin / 60.0;
fixed4 color0 = tex2D(_MainTex, uv0);
float2 uv1 = i.uv;
uv1.x = uv1.x + offsetMargin / 60.0;
fixed4 color1 = tex2D(_MainTex, uv1);
float2 uv2 = i.uv;
uv2.y = uv2.y - offsetMargin / 80.0;
fixed4 color2 = tex2D(_MainTex, uv2);
float2 uv3 = i.uv;
uv3.y = uv3.y + offsetMargin / 80.0;
fixed4 color3 = tex2D(_MainTex, uv3);
fixed4 retColor;
retColor = (color0 + color1 + color2 + color3) / 4;
return retColor;
}
ENDCG
}
}
}