반응형
쉐이더 작성시 Properties 인터페이스를 다양하게 응용할 수 있습니다.
마테리얼 이용자가 보기 편하게 구성하거나 [Enum] & multi_compile구문을 통해 사전 컴파일 기능을 만들 수 있습니다.
(사전 컴파일 : 1개의 쉐이더 파일에서 여러 기능을 사용 할 수 있도록 런타임 전에 설정 할 수 있는 옵션)
위 기능을 이용해 블랜드 옵션을 설정하여 Additive나 Alpha Blended설정을 쉐이더 코드 수정없이 조정이 가능하게 만들수 있습니다.
Shader "JH/Sh_Sample"
{
Properties
{
[Header(_______________________)]
[Header(Texture)]
_MainTex ("Texture", 2D) = "white" {}
[Space(20)]
[Header(__________________________)]
[Header(Cull)]
[Enum(UnityEngine.Rendering.CullMode)] _Cull("Cull", Float) = 0
[Space(20)]
[Header(________________)]
[Header(ZTest ZWrite)]
[Enum(UnityEngine.Rendering.CompareFunction)] _ZTest("ZTest", Float) = 4
[Enum(Off, 0, On, 1)] _ZWrite("ZWrite", Float) = 0
[Space(20)]
[Header(_________________________)]
[Header(Blend)]
[Enum(UnityEngine.Rendering.BlendMode)] _SrcFactor("Src Factor", Float) = 5
[Enum(UnityEngine.Rendering.BlendMode)] _DstFactor("Dst Factor", Float) = 10
[Space(20)]
[Header(__________________________________)]
[Header(multicomplie_GrayMask)]
[Toggle]_USEGRAYMASK("GrayMask(흑백마스크)", float) = 0
[Space(20)]
[Header(_______________________________________)]
[KeywordEnum(None, Add, Multiply)] _Overlay("Overlay mode", Float) = 0
[Enum(One,1,SrcAlpha,5)] _Blend2("Blend mode subset", Float) = 1
[IntRange] _Alpha("Alpha", Range(0, 255)) = 100
[PowerSlider(3.0)] _Shininess("Shininess", Range(0.01, 1)) = 0.08
[Space(20)]
[Header(___________________________________________)]
[Normal] _BumpTex("Normal Map", 2D) = "bump" {}
[HideInInspector] _SpecularHighlights("Specular Highlights", Float) = 1.0
}
SubShader
{
Tags {"Queue" = "Transparent" "IgnoreProjector" = "True" "RenderType" = "Transparent"}
Cull[_Cull]
ZTest[_ZTest]
ZWrite[_ZWrite]
Blend[_SrcFactor][_DstFactor]
LOD 100
Pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#pragma multi_compile _USEGRAYMASK_OFF _USEGRAYMASK_ON
#pragma multi_compile _OVERLAY_NONE _OVERLAY_ADD _OVERLAY_MULTIPLY
#include "UnityCG.cginc"
struct appdata
{
float4 vertex : POSITION;
float2 uv : TEXCOORD0;
};
struct v2f
{
float2 uv : TEXCOORD0;
float4 vertex : SV_POSITION;
};
sampler2D _MainTex;
float4 _MainTex_ST;
v2f vert (appdata v)
{
v2f o;
o.vertex = UnityObjectToClipPos(v.vertex);
o.uv = TRANSFORM_TEX(v.uv, _MainTex);
return o;
}
fixed4 frag (v2f i) : SV_Target
{
fixed4 col = tex2D(_MainTex, i.uv);
#if _OVERLAY_ADD
col.rgb = dot(col.rgb, float3(0.333f, 0.333f, 0.333f));
#elif _USEGRAYMASK_OFF
#endif
return col;
}
ENDCG
}
}
}
반응형
'Unity > Shader & VFX' 카테고리의 다른 글
[Unity PostProcess] Depth Buffer & Depth of Field (0) | 2020.01.03 |
---|---|
[Unity PostProcess] Custom PostProcess 쉐이더 제작 & 적용 (0) | 2020.01.02 |
[Unity Shader Effect] Soft Particles Shader (0) | 2019.12.28 |
이펙트 쉐이더 3강 - 기술 응용 : 홀로그램 쉐이더 (0) | 2019.12.27 |
이펙트 쉐이더 2강 - Alpha / Blending (0) | 2019.12.15 |
WRITTEN BY
- CatDarkGame
Technical Artist dhwlgn12@gmail.com
,