Unity/그래픽스프로그래밍

0504_그래픽스 Metallic, Smoothness

minquu 2021. 5. 4. 14:50
반응형

Unity - Manual: Material charts (unity3d.com)

 

Unity - Manual: Material charts

Material charts Use these charts as reference for realistic settings: Reference Chart for Metallic settings Reference Chart for Specular settings There are also hints on how to make realistic materials in these charts. In essence it is about choosing a wor

docs.unity3d.com

 

 

0. 소스맵을 세이더에 넣어준다.

 

 

 

1. 노멀은 데이터를 풀어서 사용해야한다

UnpackNormal (); 를 사용해야한다.

 

 


노말맵

UnpackNormal ();으로 받아


            fixed3 n = UnpackNormal(tex2D (_BumpMap, IN.uv_BumpMap));


UnpackNormal 은 반환은 float3 인데, 매개변수는 float 4 로 받는다.

 

            fixed3 n = UnpackNormal(tex2D (_BumpMap, IN.uv_BumpMap));

 

 

이런식으로 언팩해서 사용해야한다.

 

 

 

AO 맵 넣기 

 

AO 맵을 새로 넣어서, 값으로 넣어주면 된다

 

 

 

Shader "Custom/Test"
{
    Properties
    {
        _MainTex ("Albedo (RGB)", 2D) = "white" {}
        _BumpMap ("Normalmap", 2D) = "bump" {}
        _MainTex2 ("Albedo (RGB)", 2D) = "white" {}
        _Metallic ("Metallic", Range(0,1)) = 0.0
        _AOmap ("AOmap", 2D) = "AOmap" {}
    }
    SubShader
    {
        Tags { "RenderType"="Opaque" }
        LOD 200

        CGPROGRAM
        #pragma surface surf Standard
        sampler2D _MainTex;
        sampler2D _MainTex2;
        sampler2D _BumpMap;
        sampler2D _AOmap;
        struct Input
        {
            float2 uv_MainTex;
            float2 uv_MainTex2;
            float2 uv_AOmap;
            float2 uv_BumpMap;
        };

        half _Glossiness;
        half _Metallic;
        void surf (Input IN, inout SurfaceOutputStandard o)
        {
            fixed4 c = tex2D (_MainTex, IN.uv_MainTex);
            fixed4 d = tex2D (_MainTex2, IN.uv_MainTex2);
            fixed3 n = UnpackNormal(tex2D (_BumpMap, IN.uv_BumpMap));
            fixed4 ao = tex2D (_AOmap, IN.uv_MainTex);
            o.Occlusion = ao.r;
            o.Normal = n;
            o.Albedo = c.rgb;
            o.Metallic = _Metallic;
            o.Smoothness = d.r;
        }
        ENDCG
    }
    FallBack "Diffuse"
}

 

 

 

 

★  요큘루젼 맵은 UV를 안 받는다. 메인 텍스쳐의 UV를 받아야지 정상적으로 작동한다.

 

            fixed4 ao = tex2D (_AOmap, IN.uv_MainTex);

 

 

 

AO 있고 없고 차이

 

 

 

 

반응형