Unity3D:UIキャンバスの背景をぼかす

Unity3D:UIキャンバスの背景をぼかす photo 2 Info

Unity3D:UIキャンバスの背景をぼかす

タグ:



質問

Unity3DでゲームのUIウィンドウの背景に(現在一般的な)ぼかし効果を再現しようとしています。

私が今考えることができる最良の例の1つは、ストームのヒーローです。レベルアップパネルの背景がどのように背後にあるかを確認してください。

Unity3Dでrecently-added Canvasで同じ効果を再現する方法はありますか? 私はカメラを使ってそうする方法があることを知っていますが、特に新しいUIシステムで動作させることについては、全体に慣れていません。

ありがとう。

ベストアンサー

ここに私のためにうまく動作するシェーダスクリプトがあります。

ソース: https://forum.unity3d.com/threads/solved-dynamic-blurred-background-on-ui.345083/#post-2853442

// Upgrade NOTE: replaced ‘mul(UNITY_MATRIX_MVP,*)’ with ‘UnityObjectToClipPos(*)’

Shader “Unlit/FrostedGlass”
{
Properties
{
_Radius(“Radius”, Range(1, 255)) = 1
}

Category
{
Tags{ “Queue” = “Transparent” “IgnoreProjector” = “True” “RenderType” = “Opaque” }

SubShader
{
GrabPass
{
Tags{ “LightMode” = “Always” }
}

Pass
{
Tags{ “LightMode” = “Always” }

CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#pragma fragmentoption ARB_precision_hint_fastest
#include “UnityCG.cginc”

struct appdata_t
{
float4 vertex : POSITION;
float2 texcoord: TEXCOORD0;
};

struct v2f
{
float4 vertex : POSITION;
float4 uvgrab : TEXCOORD0;
};

v2f vert(appdata_t v)
{
v2f o;
o.vertex = UnityObjectToClipPos(v.vertex);
#if UNITY_UV_STARTS_AT_TOP
float scale = -1.0;
#else
float scale = 1.0;
#endif
o.uvgrab.xy = (float2(o.vertex.x, o.vertex.y*scale) + o.vertex.w) * 0.5;
o.uvgrab.zw = o.vertex.zw;
return o;
}

sampler2D _GrabTexture;
float4 _GrabTexture_TexelSize;
float _Radius;

Unity3D:UIキャンバスの背景をぼかす photo 1

half4 frag(v2f i) : COLOR
{
half4 sum = half4(0,0,0,0);

#define GRABXYPIXEL(kernelx, kernely) tex2Dproj( _GrabTexture, UNITY_PROJ_COORD(float4(i.uvgrab.x + _GrabTexture_TexelSize.x * kernelx, i.uvgrab.y + _GrabTexture_TexelSize.y * kernely, i.uvgrab.z, i.uvgrab.w)))

sum += GRABXYPIXEL(0.0, 0.0);
int measurments = 1;

for (float range = 0.1f; range <= _Radius; range += 0.1f)
{
sum += GRABXYPIXEL(range, range);
sum += GRABXYPIXEL(range, -range);
sum += GRABXYPIXEL(-range, range);
sum += GRABXYPIXEL(-range, -range);
measurments += 4;
}

return sum / measurments;
}
ENDCG
}
GrabPass
{
Tags{ “LightMode” = “Always” }
}

Pass
{
Tags{ “LightMode” = “Always” }

CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#pragma fragmentoption ARB_precision_hint_fastest
#include “UnityCG.cginc”

struct appdata_t
{
float4 vertex : POSITION;
float2 texcoord: TEXCOORD0;
};

struct v2f
{
float4 vertex : POSITION;
float4 uvgrab : TEXCOORD0;
};

v2f vert(appdata_t v)
{
v2f o;
o.vertex = UnityObjectToClipPos(v.vertex);
#if UNITY_UV_STARTS_AT_TOP
float scale = -1.0;
#else
float scale = 1.0;
#endif
o.uvgrab.xy = (float2(o.vertex.x, o.vertex.y*scale) + o.vertex.w) * 0.5;
o.uvgrab.zw = o.vertex.zw;
return o;
}

sampler2D _GrabTexture;
float4 _GrabTexture_TexelSize;
float _Radius;

half4 frag(v2f i) : COLOR
{

half4 sum = half4(0,0,0,0);
float radius = 1.41421356237 * _Radius;

#define GRABXYPIXEL(kernelx, kernely) tex2Dproj( _GrabTexture, UNITY_PROJ_COORD(float4(i.uvgrab.x + _GrabTexture_TexelSize.x * kernelx, i.uvgrab.y + _GrabTexture_TexelSize.y * kernely, i.uvgrab.z, i.uvgrab.w)))

sum += GRABXYPIXEL(0.0, 0.0);
int measurments = 1;

for (float range = 1.41421356237f; range <= radius * 1.41; range += 1.41421356237f)
{
sum += GRABXYPIXEL(range, 0);
sum += GRABXYPIXEL(-range, 0);
sum += GRABXYPIXEL(0, range);
sum += GRABXYPIXEL(0, -range);
measurments += 4;
}

return sum / measurments;
}
ENDCG
}
}
}
}

Unity3D:UIキャンバスの背景をぼかす photo 0





source
Unity3D、Unity.UIのパネルからPNGを構築しますか?
Unity3D新しいUIシステムとリストビュー
WPFで背景をぼかす
ナビゲーションドロワーの背景をぼかす
Unity3D UI、アイテムをドラッグする位置の計算?
Unity3DのIronPython
MonogameとUnity3D
Unity3Dビルドエラー
Unity3DとAAR
Unity3DでNinject
Rating