첨부한 Shader는 Unity 2017.3 이상 버젼에서만 작동합니다.
Resource는 Perfect Knight를 제작한 김형일님이 협조해 주셨습니다.
https://assetstore.unity.com/packages/3d/characters/humanoids/perfect-knight-4889
Unity Standard Shader Sample version
압축된 파일을 풀면 4개의 파일이 나옵니다.
UnityKorea/StandardSmoothenss
UnityKorea/StandardSmoothenssAlphaTest
UnityKorea/StandardRoughness
UnityKorea/StandardRoughnessAlphaTest
Shader파일은 Unity Project 폴더 아무곳에나 넣으면 동작합니다.(보통 Shader폴더를 만들어 넣습니다.) 기본적인 환경 셋팅은 아래 링크에서 확인 할 수 있습니다.
Unity Look dev를 위한 Setting : http://illu.tistory.com/1262
Occlusion texture를 사용할 경우에는 아래 토글을 활성화 시켜주고 사용해주기 바랍니다. 이는 Masking texture의 제작시 검정 바탕으로 제작하는데 텍스쳐를 사용하지 않을경우 케릭터가 검게 적용되기 때문에 사용할 경우에만 활성화 하도록 합니다.
Toggle : 항목을 활성화 합니다.
Emissive Color : Emissive 항목의 Color를 설정합니다.
Emissive Texture : Emissive texture를 설정합니다. RGB 컬러 모두 적용됩니다.
Emissive Inten : Emissive의 세기를 결정합니다.
Window/Lighting/Settings 항목을 열어서 나타나는 Lighting 메뉴에서 Realtime이 체크되어있으면 Environmet Reflection 항목에 체크된 리소스를 사용해서 환경 광원을 계산하게 되나(보통 Skybox) 임의로 설정해서 사용할 수 있습니다.
우선, 붉은 박스안의 체크를 해제합니다.
Hierarchy menu의 Light에서 Reflection Probe를 만들어 줍니다.
프로젝트에 있는 HDR 텍스쳐 property를 2D에서 Cube로 바꾸어 주어야 합니다, 그러면 이 소스를 Reflection probe에 적용할 수 있습니다. Type을 Custom으로 바꾸고 select를 누르면 프로젝트에 있는 HDR소스중에서 선택할 수 있습니다.
Reflection probe를 선택하면 노란 실선이 보이는데 이 실선 안에 있어야 Reflection probe의 적용을 받습니다. 범위는 Box size에 있는 값으로 조절이 가능합니다.
이를 활용해 다양한 환경에 따른 결과를 미리 확인할 수 있습니다.
마지막으로 ambient color는 skybox를 사용해도 되지만 Color 설정으로 설정해 주었습니다.
이미지는 검정이지만 조금 다른 톤을 추가해 주었습니다. (이걸 취향껏 설정을~)
추가로 Post Processing 적용 관련 가이드는 아래 링크를 통해 확인 할 수 있습니다.
Resource Export (1) : http://illu.tistory.com/1264
Unity Setting (2) : http://illu.tistory.com/1269
Post Processing (3) : http://illu.tistory.com/1272
Post Processing (4) : http://illu.tistory.com/1274
아래는 Shader 코드입니다.
Shader "UnityKorea/StandardSmoothness" {
Properties {
[Header(Simple StandardShader)]
[Space(20)]
_Color ("Color", Color) = (1,1,1,1)
[Space(20)]
_MainTex ("Albedo (RGB)", 2D) = "white" {}
[Normal][NoScaleOffset]_BumpMap("Normal Map", 2D) = "bump" {}
[Space(10)]
_BumpScale("Normal Intensity", Float) = 1.0
[NoScaleOffset]_MetallicGlossMap("Meatllic(R), Occlusion(G), Smoothness(A)", 2D) = "white" {}
[Space(20)]
_Metallic ("Metallic", Range(0,1)) = 0.5
_Glossiness ("Smoothness", Range(0,1)) = 0.5
[Space(10)]
[MaterialToggle(_Ocu_ON)] _Ocu("Occlusion Toggle", float) = 0
_OccInten("Occlusion", Range(0, 1)) = 1
[Space(30)]
[Header(Emissive Parameter)]
[MaterialToggle(_Emi_ON)] _Emi("Emissive Toggle", float) = 0
_EmissiveColor("Emissive Color", Color) = (1,1,1,1)
_EmissiveTex ("Emissive Texture(RGB)", 2D) = "white" {}
_EmissiveInten("Emissive Inten", Range(0, 5)) = 1
[Space(20)]
[Enum(UnityEngine.Rendering.CullMode)] _Cull ("Off : 2side", Float) = 2
}
SubShader {
Tags { "RenderType"="Opaque" }
LOD 200
Cull [_Cull]
CGPROGRAM
#pragma surface surf Standard fullforwardshadows
#pragma target 3.0
#pragma shader_feature _Emi_ON
#pragma shader_feature _Ocu_ON
sampler2D _MainTex;
sampler2D _BumpMap;
sampler2D _MetallicGlossMap;
struct Input {
float2 uv_MainTex;
};
half _Glossiness;
half _Metallic;
half _BumpScale;
half _OccInten;
fixed4 _Color;
#if _Emi_ON
sampler2D _EmissiveTex;
fixed4 _EmissiveColor;
half _EmissiveInten;
#endif
UNITY_INSTANCING_BUFFER_START(Props)
UNITY_INSTANCING_BUFFER_END(Props)
void surf (Input IN, inout SurfaceOutputStandard o) {
fixed4 c = tex2D(_MainTex, IN.uv_MainTex) * _Color;
fixed3 nm = UnpackNormal(tex2D(_BumpMap, IN.uv_MainTex));
fixed4 sg = tex2D(_MetallicGlossMap, IN.uv_MainTex);
o.Albedo = c.rgb;
o.Normal = nm * fixed3(1, _BumpScale, 1);
o.Metallic = sg.r * _Metallic;
o.Smoothness = sg.a * _Glossiness;
#if _Ocu_ON
o.Occlusion = sg.g * _OccInten;
#endif
#if _Emi_ON
fixed3 em = tex2D(_EmissiveTex, IN.uv_MainTex);
o.Emission = em * _EmissiveColor * _EmissiveInten;
#endif
//o.Alpha = 1;
}
ENDCG
}
FallBack "Diffuse"
}
'Technical Report > Tutorials' 카테고리의 다른 글
Unity Noraml Map 제작/적용 (1) (0) | 2018.04.09 |
---|---|
Unity Substance Painter 연동 가이드 (5) Android Build (0) | 2018.02.13 |
Unity Substance Painter 연동 가이드 (4) Post processing (0) | 2018.01.15 |
Unity Substance Painter 연동 가이드 (3) Post processing (0) | 2018.01.10 |
Unity Substance Painter 연동 가이드 (2) Unity Setting (0) | 2018.01.05 |