[unity] 유니티 쉐이더 공부 3

2021. 9. 8. 02:08

2021.09.05 - [컴퓨터/graphics] - [unity] 유니티 쉐이더 공부 2

 

[unity] 유니티 쉐이더 공부 2

2021.09.04 - [컴퓨터/graphics] - [unity] 유니티 쉐이더 공부 1 의 내용을 정리해두지 않으면 올해 안에 완벽하게 까먹을 것 같아서 처음부터 기록+복습해보고자 한다. 학교에서 GLSL은 조금(정말 조금)

kumonoueno.tistory.com

점점 바빠지는 중..ㅠ

 

Part 6-6

 

쉐이더 다시 만듬

Shader "Custom/fire3"
{
    Properties
    {
       
        _MainTex ("Albedo (RGB)", 2D) = "white" {}
        _MainTex2 ("Albedo (RGB)", 2D) = "black" {}
 
    }
    SubShader
    {
        Tags { "RenderType"="Opaque" }
      

        CGPROGRAM
        // Physically based Standard lighting model, and enable shadows on all light types
        #pragma surface surf Standard

        sampler2D _MainTex;
         sampler2D _MainTex2;

        struct Input
        {
            float2 uv_MainTex;
            float2 uv_MainTex2;
        };


        void surf (Input IN, inout SurfaceOutputStandard o)
        {
            fixed4 c = tex2D (_MainTex, IN.uv_MainTex) ;
            fixed4 d = tex2D (_MainTex2, IN.uv_MainTex2) ;
            o.Albedo = c.rgb;
            o.Alpha = c.a;
        }
        ENDCG
    }
    FallBack "Diffuse"
}

텍스쳐 하나는 초기값이 black이 되도록 설정

 

효과를 확인하기 위해 체크무늬 넣기

 

fixed4 d = tex2D (_MainTex2, IN.uv_MainTex2) ;
fixed4 c = tex2D (_MainTex, IN.uv_MainTex+d.r) ;

dot.tga는 이렇게 생김

 

검은부분은 r이 0이니까 변화가 없고 흰 부분(가운데)은 r이 0이 아니므로 어느정도 왼쪽 아래로 이동할 것이다(오른쪽 위의 텍스쳐가 밑쪽으로 이동한다는 의미)

노이즈 넣었을 때

 fixed4 d = tex2D (_MainTex2, float2(IN.uv_MainTex2.x,IN.uv_MainTex2.y-_Time.y)) ;
            fixed4 c = tex2D (_MainTex, IN.uv_MainTex+d.r) ;

위로 올라가는 효과

 

Shader "Custom/fire3"
{
    Properties
    {
       
        _MainTex ("Albedo (RGB)", 2D) = "white" {}
        _MainTex2 ("Albedo (RGB)", 2D) = "black" {}
 
    }
    SubShader
    {
        Tags { "RenderType"="Transparent" "Queue"="Transparent"}
      

        CGPROGRAM
        
        #pragma surface surf Standard alpha:fade

        sampler2D _MainTex;
         sampler2D _MainTex2;

        struct Input
        {
            float2 uv_MainTex;
            float2 uv_MainTex2;
        };


        void surf (Input IN, inout SurfaceOutputStandard o)
        {
            fixed4 d = tex2D (_MainTex2, float2(IN.uv_MainTex2.x,IN.uv_MainTex2.y-_Time.y)) ;
            fixed4 c = tex2D (_MainTex, IN.uv_MainTex+d.r) ;
            
            o.Albedo = c.rgb;
            o.Alpha = c.a;
        }
        ENDCG
    }
    FallBack "Diffuse"
}

투명하게 바꾸기

 

일부 픽셀이 위로 나오는 것 해결방안:  y좌표를 위로 조금 평행이동하기 (이미지가 왼쪽 아래로 내려간 현상도 이렇게 해결 가능)

 

물리기반 라이팅이 작동되어 비효율적인 쉐이더가 되어버림..ㅠㅠ

 

 

Part 7

이어서 씀

 

plane

Shader "Custom/NewSurfaceShader"
{
    Properties
    {
        _MainTex ("Albedo (RGB)", 2D) = "white" {}
     }
    SubShader
    {
        Tags { "RenderType"="Opaque" }
       

        CGPROGRAM
      
        #pragma surface surf Standard noambient

        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.Albedo = c.rgb;
            o.Emission=IN.color.rgb;
            o.Alpha = c.a;
        }
        ENDCG
    }
    FallBack "Diffuse"
}

 

Shader "Custom/NewSurfaceShader"
{
    Properties
    {
        _MainTex ("Albedo (RGB)", 2D) = "white" {}
        _MainTex2 ("Albedo (RGB)", 2D) = "white" {}
        _MainTex3 ("Albedo (RGB)", 2D) = "white" {}
        _MainTex4 ("Albedo (RGB)", 2D) = "white" {}
     }
    SubShader
    {
        Tags { "RenderType"="Opaque" }
       

        CGPROGRAM
      
        #pragma surface surf Standard noambient

        sampler2D _MainTex;
        sampler2D _MainTex2;
        sampler2D _MainTex3;
        sampler2D _MainTex4;

        struct Input
        {
            float2 uv_MainTex;
            float2 uv_MainTex2;
            float2 uv_MainTex3;
            float2 uv_MainTex4;
            float4 color:COLOR;
        };

       
        void surf (Input IN, inout SurfaceOutputStandard o)
        {
            fixed4 c = tex2D (_MainTex, IN.uv_MainTex) ;
            fixed4 d = tex2D (_MainTex2, IN.uv_MainTex2) ;
            fixed4 e = tex2D (_MainTex3, IN.uv_MainTex3) ;
            fixed4 f = tex2D (_MainTex4, IN.uv_MainTex4) ;
            o.Albedo = lerp(c.rgb,d.rgb,IN.color.r);
           
            o.Alpha = c.a;
        }
        ENDCG
    }
    FallBack "Diffuse"
}

vertex color에서 빨간 부분이 초록색(두번째로 넣은 텍스쳐)로 바뀜

o.Albedo = lerp(c.rgb,d.rgb,IN.color.r);
            o.Albedo=lerp(o.Albedo,e.rgb,IN.color.g);
            o.Albedo=lerp(o.Albedo,f.rgb,IN.color.b);

'컴퓨터 > graphics' 카테고리의 다른 글

[unity] 유니티 URP 셰이더 1  (0) 2022.08.06
[unity] 유니티 쉐이더 공부 4  (0) 2022.02.22
[unity] 유니티 쉐이더 공부 2  (0) 2021.09.05
[unity] 유니티 쉐이더 공부 1  (0) 2021.09.04

BELATED ARTICLES

more