셰이더 (Shader)/유니티 쉐이더 스타트업 - 정종필51 [Unity/Shader] 파트12-2 : Rim 라이트 완성 12-1 내용에 이어서 Rim 라이트를 완성한다. 주의할 점은 하나다. 림라이트 계산시 노말을 이용하므로, 노말맵 계산이 이전에 이루어져야한다. 코드 Shader "Custom/Part12-1" { Properties { _MainTex ("Albedo (RGB)", 2D) = "white" {} _BumpMap("NormalMap", 2D) = "bump"{} _RimColor("RimColor", Color) = (1,1,1,1) _RimPower("RimPower", Range(1,10)) = 3 } SubShader { Tags { "RenderType"="Opaque" } LOD 200 CGPROGRAM // Physically based Standard lighting model, and en.. 2023. 8. 16. [Unity/Shader] 파트12-1 : Fresnel 공식 구현 뷰벡터와 노말을 내적한다. 외곽선을 얇게 만들기 위해 제곱한다. 코드 Shader "Custom/Part12-1" { Properties { _MainTex ("Albedo (RGB)", 2D) = "white" {} } SubShader { Tags { "RenderType"="Opaque" } LOD 200 CGPROGRAM // Physically based Standard lighting model, and enable shadows on all light types #pragma surface surf Lambert noambient // Use shader model 3.0 target, to get nicer looking lighting #pragma target 3.0 sampler2D .. 2023. 8. 16. [Unity/Shader] 파트11-4 : Lambert 라이트 완성 이전 장에서 밝기만 구현된 것에서, 나머지를 덧붙여 Lambert 라이트를 완성해본다. 코드 Shader "Custom/NewSurfaceShader 1" { Properties { _MainTex ("Albedo (RGB)", 2D) = "white" {} _BumpMap ("NormalMap", 2D) = "bump" {} } SubShader { Tags { "RenderType"="Opaque" } LOD 200 CGPROGRAM // Physically based Standard lighting model, and enable shadows on all light types #pragma surface surf Test // Use shader model 3.0 target, to get nic.. 2023. 8. 16. [Unity/Shader] 파트11-3 : Half-Lambert 라이트 연산 Lambert 연산은 음영이 saturate에 의해 딱 끊기는 문제가 있다. 따라서 saturate를 빼고, *0.5 + 0.5 해주어 부드럽게 만드는 것이 전부다. 원리 상 : Lambert 연산 결과 하 : Half-Lambert 연산 결과 좌 : Lambert 연산시 단절되는 느낌의 원인 우 : *0.5 + 0.5로 부드럽게 라이팅이 적용되는 이유 코드 Shader "Custom/NewSurfaceShader 1" { Properties { _MainTex("Albedo (RGB)", 2D) = "white"{} _BumpMap("NormalMap", 2D) = "bump"{} } SubShader { Tags { "RenderType"="Opaque" } LOD 200 CGPROGRAM #prag.. 2023. 8. 15. [Unity/Shader] 파트11-2 : Lambert 라이트 연산 내적해서 렘버트 라이팅을 구현해본다. 코드 Shader "Custom/NewSurfaceShader 1" { Properties { _MainTex("Albedo (RGB)", 2D) = "white"{} _BumpMap("NormalMap", 2D) = "bump"{} } SubShader { Tags { "RenderType"="Opaque" } LOD 200 CGPROGRAM #pragma surface surf Test noambient // 엠비언트 라이트 영향 제거 #pragma target 3.0 sampler2D _MainTex; sampler2D _BumpMap; struct Input { float2 uv_MainTex; }; UNITY_INSTANCING_BUFFER_START(Pro.. 2023. 8. 12. [Unity/Shader] 파트11-1 : 커스텀 라이트 코드 Shader "Custom/NewSurfaceShader 1" { Properties { _MainTex ("Albedo (RGB)", 2D) = "white" {} } SubShader { Tags { "RenderType"="Opaque" } LOD 200 CGPROGRAM #pragma surface surf Test noambient // 원하는 이름 짓기, 엠비언트 라이트 영향 제거 #pragma target 3.0 sampler2D _MainTex; struct Input { float2 uv_MainTex; }; UNITY_INSTANCING_BUFFER_START(Props) // put more per-instance properties here UNITY_INSTANCING_BUF.. 2023. 8. 9. [Unity/Shader] 파트10-7 : 벡터 연산을 이용한 라이팅 연산 * 유의할 부분만 추려 필기하였다. 유니티에서는 조명 벡터가 뒤집힌 채로 받아져온다. -를 붙여 뒤집지 않아도 된다. 조명 벡터와 노말 벡터를 내적하면 Lambert 라이팅이 된다. 2023. 8. 9. [Unity/Shader] 파트10-6 : 벡터의 연산 * 벡터의 연산 중, 리마인드할 부분만 추려 필기하였다. 벡터의 덧셈 길이가 같은 두 벡터를 더하면 두 벡터 사이의 절반인 각도가 나온다. 이를 정규화하면 쉽게 절반인 각도의 방향벡터를 얻을 수 있다. 벡터의 내적 내적의 값은 단위벡터일때, cos 값과 같다. 2023. 8. 9. [Unity/Shader] 파트10-5 : 노말 벡터 - 노말은 버텍스가 가진다. 밝기 연산은 버텍스에서 한다. 계산한 밝기 값을 버텍스에서 보간해서 표현한다. - 각진 물체의 표현 하드 엣지를 표현하려면 한 버텍스에 노말이 3개 혹은 4개가 있어야한다. 버텍스 하나당 노말은 하나 밖에 가지지 못한다. 그래서 버텍스를 복사해서 같은 자리에 추가해서 표현하는 방법 밖에 없다. 따라서, 하드 엣지를 표현하려면 버텍스의 양이 더 늘어난다. 2023. 8. 9. 이전 1 2 3 4 5 6 다음