Blinn-Phong
pow 100
Blinn-Phong-Gloss
Gloss 텍스쳐 처리를 해주는게 스펙큘러가 더 자연스러움.
pow 100
Blinn-Phong-Gloss-RimLight
구분을 위해 Rim = 녹색, Fake = 빨강으로 설정함.
pow 100
fake 50
rim 3
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | Shader "Custom/Blinn-Phong" { Properties { _MainTex("Albedo", 2D) = "white" {} _BumpMap("NoramalMap", 2D) = "bump" {} _SpecularColor("SpecularColor", Color) = (1,1,1,1) _SpecularPower("SpecularPower", Range(10, 200)) = 100 } SubShader{ Tags { "RenderType" = "Qpaque" } CGPROGRAM #pragma surface surf Test noambient sampler2D _MainTex; sampler2D _BumpMap; struct Input { float2 uv_MainTex; float2 uv_BumpMap; }; float4 _SpecularColor; float _SpecularPower; void surf(Input In, inout SurfaceOutput o) { fixed4 c = tex2D(_MainTex, In.uv_MainTex); o.Albedo = c.rgb; o.Normal = UnpackNormal(tex2D(_BumpMap, In.uv_BumpMap)); o.Alpha = c.a; } float4 LightingTest(SurfaceOutput s, float3 lightDir, float3 viewDir, float atten) { // Lambert float3 diffuseColor; float ndot1 = saturate(dot(s.Normal, lightDir)); diffuseColor.rgb = ndot1 * s.Albedo * _LightColor0.rgb * atten; // Specular float3 specularColor = float3(1,1,1); float3 h = normalize(lightDir + viewDir); float specular = saturate(dot(h, s.Normal)); specular = pow(specular, _SpecularPower); specularColor = specular * _SpecularColor.rgb; float4 final; final.rgb = diffuseColor + specularColor; final.a = s.Alpha; return final; } ENDCG } FallBack "Diffuse" } | cs |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 | Shader "Custom/Blinn-Phong-Gloss" { Properties { _MainTex("Albedo", 2D) = "white" {} _BumpMap("NoramalMap", 2D) = "bump" {} _GlossTex("GlossTex", 2D) = "white" {} _SpecularColor("SpecularColor", Color) = (1,1,1,1) _SpecularPower("SpecularPower", Range(10, 200)) = 100 } SubShader{ Tags { "RenderType" = "Qpaque" } CGPROGRAM #pragma surface surf Test noambient sampler2D _MainTex; sampler2D _BumpMap; sampler2D _GlossTex; struct Input { float2 uv_MainTex; float2 uv_BumpMap; float2 uv_GlossTex; }; float4 _SpecularColor; float _SpecularPower; void surf(Input In, inout SurfaceOutput o) { fixed4 c = tex2D(_MainTex, In.uv_MainTex); fixed4 m = tex2D(_GlossTex, In.uv_GlossTex); o.Albedo = c.rgb; o.Normal = UnpackNormal(tex2D(_BumpMap, In.uv_BumpMap)); o.Gloss = m.a; o.Alpha = c.a; } float4 LightingTest(SurfaceOutput s, float3 lightDir, float3 viewDir, float atten) { // Lambert float3 diffuseColor; float ndot1 = saturate(dot(s.Normal, lightDir)); diffuseColor.rgb = ndot1 * s.Albedo * _LightColor0.rgb * atten; // Specular float3 specularColor = float3(1,1,1); float3 h = normalize(lightDir + viewDir); float specular = saturate(dot(h, s.Normal)); specular = pow(specular, _SpecularPower); specularColor = specular * _SpecularColor.rgb * s.Gloss; float4 final; final.rgb = diffuseColor + specularColor; final.a = s.Alpha; return final; } ENDCG } FallBack "Diffuse" } | cs |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 | Shader "Custom/Blinn-Phong-Gloss-RimLight" { Properties { _MainTex("Albedo", 2D) = "white" {} _BumpMap("NoramalMap", 2D) = "bump" {} _GlossTex("GlossTex", 2D) = "white" {} _SpecularColor("SpecularColor", Color) = (1,1,1,1) _SpecularPower("SpecularPower", Range(10, 200)) = 100 _FakeSpecularColor("FakeSpecularColor", Color) = (1,1,1,1) _FakeSpecularPower("FakeSpecularPower", Range(10, 200)) = 50 _RimColor("RimColor", Color) = (1,1,1,1) _RimPower("RimPower", Range(1, 10)) = 1 } SubShader{ Tags { "RenderType" = "Qpaque" } CGPROGRAM #pragma surface surf Test noambient sampler2D _MainTex; sampler2D _BumpMap; sampler2D _GlossTex; struct Input { float2 uv_MainTex; float2 uv_BumpMap; float2 uv_GlossTex; }; float4 _SpecularColor; float _SpecularPower; float4 _FakeSpecularColor; float _FakeSpecularPower; float4 _RimColor; float _RimPower; void surf(Input In, inout SurfaceOutput o) { fixed4 c = tex2D(_MainTex, In.uv_MainTex); fixed4 m = tex2D(_GlossTex, In.uv_GlossTex); o.Albedo = c.rgb; o.Normal = UnpackNormal(tex2D(_BumpMap, In.uv_BumpMap)); o.Gloss = m.a; o.Alpha = c.a; } float4 LightingTest(SurfaceOutput s, float3 lightDir, float3 viewDir, float atten) { // Lambert float3 diffuseColor; float ndot1 = saturate(dot(s.Normal, lightDir)); diffuseColor.rgb = ndot1 * s.Albedo * _LightColor0.rgb * atten; // Specular float3 specularColor; float3 h = normalize(lightDir + viewDir); float specular = saturate(dot(h, s.Normal)); specular = pow(specular, _SpecularPower); specularColor = specular * _SpecularColor.rgb * s.Gloss; // RimLight float3 rimColor; float rim = abs(dot(viewDir, s.Normal)); float inverim = 1 - rim; rimColor = pow(inverim, _RimPower) * _RimColor.rgb; // Fake Specular float3 fakeSpecularColor; fakeSpecularColor = pow(rim, _FakeSpecularPower) * _FakeSpecularColor * s.Gloss; float4 final; final.rgb = diffuseColor + specularColor + rimColor + fakeSpecularColor; final.a = s.Alpha; return final; } ENDCG } FallBack "Diffuse" } | cs |
반응형
'Programming > Shader' 카테고리의 다른 글
PR - NPR 렌더링 (0) | 2016.04.09 |
---|---|
[Unity Shader] 외곽선 Outline, ToonShader (2) | 2015.10.10 |
[Unity Shader] Reflection Probe 반사처리 (0) | 2015.10.06 |
[Unity Shader] 실수 및 에러 정리 (0) | 2015.10.01 |
[Unity Shader] Parts Color Shader (0) | 2015.09.24 |
[Unity Shader] Rim Light, Hologram (0) | 2015.09.23 |
[Unity Shader] BumpMap, BlinnPhong (0) | 2015.09.21 |
[Unity Shader] 머테리얼색 반전, 회색, 시간에 따라 색깔 바꾸기 (0) | 2015.09.17 |