본문 바로가기
개발/Unity) Shader

Unity Shader) 도트 팝아트 형식으로 표현하기

by 테샤르 2024. 11. 22.

도트 팝아트 형식으로 표현하기

도트 패턴의 팝아트적인 효과를 만들어보았다.

도트 패턴의 사이즈를 조절이 가능하게 해서 도트 팝아트 형식의 효과를 낼수 있게 했다.

 

반응형
반응형

< Material 속성 >


< Shader Code >

Shader"Custom/DotPopArtShader"
{
    Properties
    {
        _MainTex ("Texture", 2D) = "white" {} // 텍스처 입력
        _DotSize ("Dot Size", Float) = 10     // 도트 크기 조정
    }
    SubShader
    {
        Tags { "RenderType"="Transparent" "Queue"="Transparent" }
        Blend
SrcAlpha OneMinusSrcAlpha // 알파 블렌딩 설정

        Pass
        {
            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag

#include "UnityCG.cginc"

            // 텍스처와 설정값 선언
sampler2D _MainTex;
float _DotSize;
float4 _MainTex_ST;

            // 버텍스 데이터 구조체
struct appdata_t
{
    float4 vertex : POSITION; // 위치 데이터
    float2 uv : TEXCOORD0; // UV 좌표
};

            // 셰이더로 전달될 데이터 구조체
struct v2f
{
    float2 uv : TEXCOORD0; // UV 좌표
    float4 vertex : SV_POSITION; // 위치 데이터
};

            // 버텍스 셰이더
v2f vert(appdata_t v)
{
    v2f o;
    o.vertex = UnityObjectToClipPos(v.vertex); // 클립 공간으로 변환
    o.uv = TRANSFORM_TEX(v.uv, _MainTex); // UV 변환
    return o;
}

            // 프래그먼트 셰이더
fixed4 frag(v2f i) : SV_Target
{
                // UV 좌표를 도트 그리드로 변환
    float2 coord = i.uv * _DotSize;
    float2 dist = frac(coord) - 0.5;

                // 도트 패턴 반지름 계산
    float radius = length(dist);

                // 도트 패턴 결정
    float mask = step(radius, 0.5);

                // 텍스처 색상 읽기
    fixed4 texColor = tex2D(_MainTex, i.uv);

                // 도트 내부의 색상 유지, 투명도 포함
    fixed4 outputColor = texColor * mask;

                // 알파 값 유지
    outputColor.a *= texColor.a;

    return outputColor;
}
            ENDCG
        }
    }
FallBack"Transparent/Diffuse" // 대체 셰이더
}

 

해당 코드를 응용해서 여러가지 다른 형식의  표현도 가능하다.

 

★★★☆☆

 

반응형

댓글