Unityã§ã²ãŒã ãäœããšãããã£ã©ã¯ã¿ãŒããªããžã§ã¯ãã®ãèŠãç®ããæ±ºããã®ãã·ã§ãŒããŒã§ããç°¡åã«èšããšããªããžã§ã¯ãã®è²ãå ã®åœããæ¹ãéæåºŠã質æãªã©ãã³ã³ãããŒã«ããããã°ã©ã ã®ããšã§ãã
ä»åã¯ãã·ã§ãŒããŒã«ã€ããŠè©³ãã解説ããŠãããããšæããŸãã
Unityã®ã·ã§ãŒããŒã£ãŠäœïŒåå¿è åãã«ãããã解説ïŒ
äŸãã°ãæ°Žã®ãã©ãã©ãã衚çŸããéå±ã®ãã«ãã«ããåå°ãã¢ãã¡é¢šã®ãã¥ãŒã³ã·ã§ãŒãã£ã³ã°ãªã©ãã·ã§ãŒããŒã䜿ãã°è¡šçŸã®å¹ ããã£ãšåºãããŸãã
ãšã¯ããããããã°ã©ã ã䜿ãããšèããšé£ãããã«æãããããããŸããããåºæ¬ãæŒãããã°ãæå€ãšã·ã³ãã«ã«äœ¿ãããªããŸãã
Unityã®ã·ã§ãŒããŒã«ã¯ã©ããªçš®é¡ãããïŒ
Unityã«ã¯ãããã€ãã®ã·ã§ãŒããŒã®çš®é¡ããããŸãããŸãã¯ãã£ããéããèŠãŠã¿ãŸãããã
1. æšæºã·ã§ãŒããŒïŒStandard ShaderïŒ
Unityã§æããã䜿ãããã·ã§ãŒããŒã§ããå ã®åå°ãéææã質æãªã©ãçŽæçã«èª¿æŽã§ããã®ã§ãç¹ã«åå¿è ã«ããããã§ããèšå®æ¬¡ç¬¬ã§ãã©ã¹ããã¯ãéå±ã£ãœãèŠããããã¬ã©ã¹ã®ãããªéææãåºãããã§ããŸãã
2. URPïŒUniversal Render PipelineïŒçšã®ã·ã§ãŒããŒ
軜éã§ããã©ãŒãã³ã¹ãè¯ãã·ã§ãŒããŒã§ããã¢ãã€ã«ã²ãŒã ãVRã³ã³ãã³ãã«åããŠããŠãåäœã軜ãã®ãç¹åŸŽã
3. HDRPïŒHigh Definition Render PipelineïŒçšã®ã·ã§ãŒããŒ
ãã¡ããã¡ããªã¢ã«ãªã°ã©ãã£ãã¯ãäœããã人åããå ã®è¡šçŸã匷åãããŠããŠããªãããªæ åãäœãã®ã«æé©ããã ããåäœãéããªã®ã§é«æ§èœãªPCåããšãªããŸãã
4. ã«ã¹ã¿ã ã·ã§ãŒããŒ
ãèªåã§ç¬èªã®èŠãç®ãäœãããïŒããšãããšãã¯ãèªåã§ããã°ã©ã ãæžãããšãã§ããŸããã«ã¹ã¿ã ã·ã§ãŒããŒãäœãã°ãæ®éã®ã·ã§ãŒããŒã§ã¯è¡šçŸã§ããªãç¹æ®ãªãšãã§ã¯ããå¯èœã«ãªããŸãã
å®éã«ã·ã§ãŒããŒãæžããŠã¿ãŸããã
ããããã¯ãå®éã«ã·ã§ãŒããŒãæžããŠã¿ãŸãããïŒãŸãã¯ç°¡åãªãåè²ã·ã§ãŒããŒãã®ãµã³ãã«ã玹ä»ããŸãã
1. ã·ã§ãŒããŒãã¡ã€ã«ãäœæãã
Unityã®ãããžã§ã¯ããŠã£ã³ããŠã§ãAssetsãã©ã«ããå³ã¯ãªãã¯ãCreateâ ShaderâUnlit Shaderãéžæã
äœæããããã¡ã€ã«ã®ååãSimpleColorShader.shaderãªã©åãããããååã«å€æŽããŸãããã®ãŸãŸããã«ã¯ãªãã¯ããŠéããŸãã
2. ã·ã§ãŒããŒãç·šéãã
ãšãã£ã¿ïŒVisual Studio ã Rider ãªã©ïŒã§ã·ã§ãŒããŒãã¡ã€ã«ãéããšãããã©ã«ãã®ã³ãŒããèšè¿°ãããŠããŸãããããã«ã¹ã¿ãã€ãºããŠããªããžã§ã¯ãã®èŠãç®ã倿ŽããŸãã
ããã§ã¯ãç°¡åãªãåè²ã·ã§ãŒããŒãã玹ä»ããŸãã
Shader "Custom/SimpleColor"
{
Properties
{
_Color ("Main Color", Color) = (1,1,1,1)
}
SubShader
{
Pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
fixed4 _Color;
struct appdata
{
float4 vertex : POSITION;
};
struct v2f
{
float4 pos : SV_POSITION;
};
v2f vert (appdata v)
{
v2f o;
o.pos = UnityObjectToClipPos(v.vertex);
return o;
}
fixed4 frag (v2f i) : SV_Target
{
return _Color;
}
ENDCG
}
}
}
ãäœãæžããŠããã®ãåãããªãïŒããšãªããããããŸããããã²ãšã€ãã€è§£èª¬ããŠãããŸãã
- Propertiesã®Colorãšããéšåã§ããªããžã§ã¯ãã®è²ã決ãããã©ã¡ãŒã¿ãçšæããŠããŸãããããªã¢ã«ãéããŠè²ãèªç±ã«å€æŽã§ããä»çµã¿ã§ãã
- SubShaderã®äžã«ãå®éã®æç»åŠçãèšè¿°ããŸãã
- CGPROGRAMã®äžãããã°ã©ã éšåã§ãvertããé ç¹ã·ã§ãŒããŒããfragãããã©ã°ã¡ã³ãã·ã§ãŒããŒïŒãã¯ã»ã«ã·ã§ãŒããŒïŒãã§ãã
- frag颿°ã§ã¯ Colorããã®ãŸãŸè¿ããŠããªããžã§ã¯ããæå®ããè²ã§æç»ããŠããŸãã
ãã®ã·ã§ãŒããŒã䜿ããšããããªã¢ã«ã®è²ã奜ããªããã«å€ããããšãã§ããŸãã
é ç¹ã·ã§ãŒããŒïŒVertex ShaderïŒ
é ç¹ã·ã§ãŒããŒã¯ã3Dã¢ãã«ã®ãé ç¹ããåŠçããããã°ã©ã ã§ããã¢ãã«ã®åé ç¹ã®åº§æšãåãåããã©ã®äœçœ®ã«æç»ããã®ãèšç®ããŸãã
äŸãã°ã3D空éå ã®ãã¥ãŒãããã£ããšãããšããã®åé ç¹ã®äœçœ®ã決ããã®ãé ç¹ã·ã§ãŒããŒã®åœ¹å²ã§ããã²ãŒã å ã®ã«ã¡ã©ã®èŠç¹ãèæ ®ããŠãé©åãªäœçœ®ã«æåœ±ããåŠçãè¡ããŸãã
struct appdata
{
float4 vertex : POSITION;
};
struct v2f
{
float4 pos : SV_POSITION;
};
v2f vert (appdata v)
{
v2f o;
o.pos = UnityObjectToClipPos(v.vertex);
return o;
}
ããã¯ãåºæ¬çãªé ç¹ã·ã§ãŒããŒã®ã³ãŒãã®äŸã«ãªããŸãã
vert颿°ãé ç¹ã·ã§ãŒããŒã§ããappdataæ§é äœã¯ããªããžã§ã¯ãã®é ç¹æ å ±ãåãåããŸãã
UnityObjectToClipPos(v.vertex)ã䜿ã£ãŠã3D空éã®åº§æšãã¹ã¯ãªãŒã³åº§æšã«å€æããŸãã
èšç®çµæãv2fæ§é äœã«æ ŒçŽããæ¬¡ã®åŠçãžæž¡ããŸãã
ãã©ã°ã¡ã³ãã·ã§ãŒããŒïŒFragment Shader / Pixel ShaderïŒ
ãã©ã°ã¡ã³ãã·ã§ãŒããŒã¯ããã¯ã»ã«ããšã®è²ã決ããããã°ã©ã ã§ããé ç¹ã·ã§ãŒããŒãã¢ãã«ã®åœ¢ç¶ã決ããã®ã«å¯Ÿãããã©ã°ã¡ã³ãã·ã§ãŒããŒã¯èŠãç®ã®çްããéšåïŒè²ãæãããéæåºŠãªã©ïŒãæ åœããŸãã
äŸãã°ãèµ€ããªããžã§ã¯ããäœãããå Žåããã©ã°ã¡ã³ãã·ã§ãŒããŒã§ãã®ãã¯ã»ã«ã®è²ããèµ€ãã«èšå®ããŸãã
fixed4 frag (v2f i) : SV_Target
{
return fixed4(1, 0, 0, 1); // èµ€è²ïŒRGBAïŒ
}
ãã¡ãã¯ãåºæ¬çãªãã©ã°ã¡ã³ãã·ã§ãŒããŒã®ã³ãŒãäŸã§ãã
frag颿°ããã©ã°ã¡ã³ãã·ã§ãŒããŒã§ãã
fixed4(1, 0, 0, 1) ã¯ãRGBAïŒèµ€ã»ç·ã»éã»éæåºŠïŒã®å€ãæå®ããèµ€è²ãè¿ããŠããŸãã
SV_Targetã¯ããã®é¢æ°ããã¯ã»ã«ã®è²ãåºåããããšã瀺ããŸãã
ãã®ãã©ã°ã¡ã³ãã·ã§ãŒããŒãé©çšãããšããªããžã§ã¯ãå šäœãçã£èµ€ã«ãªããŸãã
3. ãããªã¢ã«ã«é©çšãã
- Unityã®ãããžã§ã¯ããŠã£ã³ããŠã§ãAssetsãã©ã«ããå³ã¯ãªãã¯ã
- Create â Materialãéžæããæ°ãããããªã¢ã«ãäœæãååã¯é©åœã§OKã
- äœæãããããªã¢ã«ãéžæããã€ã³ã¹ãã¯ã¿ãŒãŠã£ã³ããŠã§Shaderã®é ç®ãã¯ãªãã¯ã
- Custom/SimpleColorãéžæã
- Colorã倿ŽããŠããªããžã§ã¯ãã®è²ãèªç±ã«å€ããããããšã確èªã
ç§ã¯ãTestMaterialãšããååã§äœæããŸããã

4. ã·ãŒã³å ã®ãªããžã§ã¯ãã«é©çšãã
äœæãããããªã¢ã«ããã·ãŒã³å ã®ãªããžã§ã¯ãïŒCubeçïŒã«ãã©ãã°ïŒããããã
äžã®ç»åå ã«ãããMain Colorãã®è²ã倿Žãããšãªããžã§ã¯ãã®èŠãç®ãé£åããŠå€åãããšæããŸãã

äŸãšããŠãMain Colorãèµ€è²ã«å€æŽãããšãããªæãã§Cubeãèµ€è²ã«ãªããŸããã
å¿çšç·šïŒéæãªã·ã§ãŒããŒãäœã£ãŠã¿ãã
äŸãã°ããªããžã§ã¯ããåéæã«ããããšãã¯ã以äžã®èšå®ã远å ãããšç°¡åã«ã§ããŸãã
ãBlend SrcAlpha OneMinusSrcAlphaã
ãã®è¡ãå ãããšãã¢ã«ãã¡å€ïŒéæåºŠïŒãèæ ®ããã·ã§ãŒããŒã«ãªããŸããäŸãã°_Colorã« (1,1,1,0.5)ã®ããã«èšå®ãããšã50%ã®éæåºŠã®ãªããžã§ã¯ããäœããŸãã
Shader "Custom/SimpleColor"
{
Properties
{
_Color("Main Color", Color) = (1,1,1,0.5) // éæåºŠãæã€ã«ã©ãŒ
}
SubShader
{
Tags { "Queue"="Transparent" "RenderType"="Transparent" } // éæçšã®èšå®
Blend SrcAlpha OneMinusSrcAlpha // ã¢ã«ãã¡ãã¬ã³ã
Pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
fixed4 _Color;
struct appdata
{
float4 vertex : POSITION;
};
struct v2f
{
float4 pos : SV_POSITION;
};
v2f vert(appdata v)
{
v2f o;
o.pos = UnityObjectToClipPos(v.vertex);
return o;
}
fixed4 frag(v2f i) : SV_Target
{
return _Color; // ã¢ã«ãã¡å€ãèæ
®
}
ENDCG
}
}
}
Colorã®ããã©ã«ãå€ (1,1,1,0.5) ã¯ãçœè²ïŒ1,1,1ïŒã§éæåºŠ50%ïŒA=0.5ïŒ ãæå³ããŸãã
“Queue”=”Transparent” ã§éæãªããžã§ã¯ãã¯äžéæãªããžã§ã¯ãã®åŸã«æç»ãããããã«ããã
ãŸãã”RenderType”=”Transparent” ã§Unityããã®ã·ã§ãŒããŒãéæãªãã®ãšããŠæ±ãããã«ããŸãã
Colorã®Aã®ããŒãå·Šå³ã«ç§»åãããããšã§ãéæåºŠã調æŽåºæ¥ãããã«ãªããŸãã
ãŸãšã
ã·ã§ãŒããŒã䜿ãã°ãUnityã®ã°ã©ãã£ãã¯ãèªç±ã«ã«ã¹ã¿ãã€ãºã§ããŸããæåã¯é£ããæãããããããŸããããåºæ¬ã®ã·ã§ãŒããŒã詊ããŠã¿ãã ãã§ããã²ãŒã ã®èŠãç®ããã£ãšå€ããã¯ãã§ãã


