ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Vertex Color
    유니티/게임그래픽 2024. 2. 21. 02:13

    Vertex Color : 각 Vertex에 RGB 색상 값 또는 알파값을 선택적으로 저장할 수 있는 기능

    여기서 Vertex란 단어 의미 그대로는 꼭지점을 의미한다

    이 Vertex에는 각각 고유의 색이 있고 기본으로 주어지는 색은 (1,1,1,1)이다(자체적 RGBA)

     

    Vertex에는 5가지의 정보들을 가지고 있는데 바로 위치, UV, 컬러, 노멀, 탄젠트 이다

     

     

    우선 기본적인건 이정도로만 알아보고 바로 Vertex Color를 적용해보자

     

    그전에 사전준비를 위해 먼저 패키지 매니저에서 Polybrush를 다운받자

    Tools에서 다운받은 Polybrush가 뜬다면 성공적으로 다운받은것 

    Shader "Custom/NewSurfaceShader"
    {
        Properties
        {
            _MAinTex("MainTex", 2D) = "white" {}
        }
        SubShader
        {
            Tags { "RenderType"="Opaque" }
    
            CGPROGRAM
            #pragma surface surf Standard fullforwardshadows
    
    
            sampler2D _MainTex;
    
            struct Input
            {
                float2 uv_MainTex;
                float4 color:COLOR;
            };
    
            void surf (Input IN, inout SurfaceOutputStandard o)
            {
                fixed4 c = tex2D (_MainTex, IN.uv_MainTex);
                o.Emission = IN.color.rgb;
                o.Alpha = c.a;
            }
            ENDCG
        }
        FallBack "Diffuse"
    }

     

    이제 가장 기본적인 스크립트를 짜주자. 텍스쳐 하나를 입력받고 그 입력받은 텍스쳐를 출력하는 스크립트이다

     

    달라진게 있다면 float4 형식으로 color를 선언해주었다는것과

    Emission으로 출력할때 c.rgb가 아닌, IN.color.rgb를 사용했다는것

     

    Input구조체 안에 float4 color 변수를 만들고 :COLOR로 태그를 달아주었다

    그리고 이 값을 Emission으로 출력해주는것이다

     

    스크립트를 저장하고 Material을 Plane안에 넣어준다

     

    그리고 Plane을 선택한뒤 Shading Mode - Shaded Wireframe 을 선택한다

    그럼 위 그림처럼 Plane위에 선이 일정하게 그어진것을 볼 수 있다

     

    이제 Vertex Color를 칠해보자. 여기서 주의할건 검은색이 남아있어야하며 색은 RGB로 그려야한다는것이다

     

    Tools - Polybrush - Polybrush Window를 선택해준뒤

    설정창에서 Paint Vertex Color를 눌러주고 색은 검정색으로 선택한다

     

    정상적으로 색이 칠해지는것을 확인할 수 있다. 만약 아무런 변화가 없다면 Material을 잘 넣어줬는지 확인하자

     

    Flood로 전체판을 검정으로 칠해준뒤 RGB로 각각 임의로 칠해준다

    브러쉬의 크기가 크다면 Outer Radius로 조절 가능하다

     

            void surf (Input IN, inout SurfaceOutputStandard o)
            {
                fixed4 c = tex2D(_MainTex, IN.uv_MainTex);
                o.Emission = c.rgb + IN.color.rgb;
                o.Alpha = c.a;
            }

    변수 c도 함께 출력하는것으로 코드를 수정한뒤 텍스쳐를 집어넣으면

    이렇게 텍스쳐와 브러쉬로 그린게 합쳐지는것을 볼수 있다

     

    왜 꼭 검은색을 쓰라는지 알겠다. 배경이 검은색이어야지만 입력받은 텍스쳐가 출력된다

     

    텍스쳐 입력받기 오류

    Shader "Custom/NewSurfaceShader" { Properties { _MAinTex("MainTex", 2D) = "white" {} } SubShader { Tags { "RenderType"="Opaque" } CGPROGRAM #pragma surface surf Standard sampler2D _MainTex; struct Input { float2 uv_MainTex; float4 color:COLOR; }; void surf

    sangeun00.tistory.com

     

    그리고 이 과정에서 정말 사소한 오타 하나로 오류가 났지만 해결했다

     

    '유니티 > 게임그래픽' 카테고리의 다른 글

    SurfaceOutputStandard(Metallic & Smoothness)  (0) 2024.02.21
    Vertex Color Masking  (0) 2024.02.21
    _Time 변수 스크립트 기본형  (0) 2024.02.20
    불 이펙트  (1) 2024.02.20
    UV - Time  (2) 2024.02.20
Designed by Tistory.