본문 바로가기

셰이더 (Shader)/유니티 쉐이더 스타트업 - 정종필51

[Unity/Shader] 파트14-3 : 2Pass와 면 뒤집기 위 결과가 시각적으로 이상해보이는 것은 정상이다. 2pass 구현 CGPROGRAM ~ ENDCG 부분을 복사해서, 아래에 붙여넣는다. 면 뒤집기 외부에 cull front를 적어준다. 코드 Shader "Custom/part14-3" { Properties { _MainTex ("Albedo (RGB)", 2D) = "white" {} } SubShader { Tags { "RenderType"="Opaque" } LOD 200 cull front // 컬링 설정한다. 명시하지 않으면 cull back이 기본값이다. // 쉐이더 코드가 아닌, '설정' 키워드이므로 세미콜론 붙이지 않고, 외부에 쓴다. // cull back, cull front, cull off가 있다. cull off는 2-side라.. 2023. 8. 20.
[Unity/Shader] 파트14-2 : 외곽선 만들기 이론 외곽선 만들기의 3가지 방법 - 2Pass - Fresnel - 후처리 (Post Effect) 2Pass 한번 그리는 것 1Pass 두번 그리는 것을 2Pass라고 한다. 장점 - 균일한 외곽선을 얻는다. - 구현이 간편하다. 단점 - 오브젝트를 한번 더 그리므로 무겁다. - Plane으로 끝난 오브젝트에는 외곽선이 생기지 않는다. - 메쉬끼리 침범하거나 찌꺼기가 보일 수 있다. - 각진 면에서 선이 끊어진다. 소프트 엣지를 사용해야만 이를 피할 수 있다. Fresnel 장점 - 폴리곤의 밀도와 각도에 따라 굵기가 다양하게 나올 수 있다. - 결과물의 품질이 좋다. 단점 - 완전한 평면의 오브젝트는 이상한 모양으로 보인다. 노멀과 뷰벡터의 차이로 계산되는 외곽선이기 때문이다. 후처리 책에서 설명 생략하.. 2023. 8. 20.
[Unity/Shader] 파트14-1 : NPR 렌더링 Standard Lambert Blinn-Phong 연산에 대해 배웠다. 위 3가지 방식의 공통점은 실재하는 사물의 재질과 비슷하게 만들려고 한다. 이를 PR(Photo Realistic) 렌더링이라고 한다. 만화 같은 사실적이지 않은 렌더링 방식을 지향하기도 한다. 이를 NPR (Non-Photo Realistic) 렌더링이라고 한다. 2023. 8. 20.
[Unity/Shader] 파트13-5 : Rim 라이트를 이용한 가짜 스펙큘러 만들기 rim을 뒤집은 것을 이용해 가짜 스펙큘러를 만든다. 그러면, 항상 내 시선 방향에 생기는 스펙큘러가 표현된다. 실제 세상에 조명이 하나만 있는 경우는 거의 없기에, 디테일 표현에 유용하다. 코드 Shader "Custom/Part13-2" { Properties { _MainTex ("Albedo (RGB)", 2D) = "white" {} _BumpMap ("NormalMap", 2D) = "bump" {} _SpecCol ("Specular Color", Color) = (1,1,1,1) _SpecPow ("Specular Power", Range(10,200)) = 100 _GlossTex ("Gloss Tex", 2D) = "white" {} } SubShader { Tags { "RenderT.. 2023. 8. 19.
[Unity/Shader] 파트13-4 : Rim 라이트를 커스텀 라이트로 옮기기 이전에는 surf 함수에서 연산했다. Specular 공식을 쓰면서 viewDir을 커스텀 라이트 안에서 사용할 수 있게 됐다. 따라서 커스텀 라이트 안에서 처리하도록 옮긴다. 코드 Shader "Custom/Part13-2" { Properties { _MainTex ("Albedo (RGB)", 2D) = "white" {} _BumpMap ("NormalMap", 2D) = "bump" {} _SpecCol ("Specular Color", Color) = (1,1,1,1) _SpecPow ("Specular Power", Range(10,200)) = 100 _GlossTex ("Gloss Tex", 2D) = "white" {} // * } SubShader { Tags { "RenderType.. 2023. 8. 19.
[Unity/Shader] 파트13-3 : Gloss 맵으로 스펙큘러 강도 조절하기 이전 코드에 이어서 Gloss 텍스쳐를 프로퍼티에 받아 적용하는 법을 실습한다. 코드 Shader "Custom/Part13-2" { Properties { _MainTex ("Albedo (RGB)", 2D) = "white" {} _BumpMap ("NormalMap", 2D) = "bump" {} _SpecCol ("Specular Color", Color) = (1,1,1,1) _SpecPow ("Specular Power", Range(10,200)) = 100 _GlossTex ("Gloss Tex", 2D) = "white" {} // * } SubShader { Tags { "RenderType"="Opaque" } LOD 200 CGPROGRAM // Physically based Sta.. 2023. 8. 19.
[Unity/Shader] 파트13-2 : Blinn Phong 스펙큘러 만들기 코드 Shader "Custom/Part13-2" { Properties { _MainTex ("Albedo (RGB)", 2D) = "white" {} _BumpMap ("NormalMap", 2D) = "bump" {} _SpecCol ("Specular Color", Color) = (1,1,1,1) // _SpecColor라고 쓰면 안된다. 유니티 내장 쉐이더에서 이미 쓰고 있는 용어다. _SpecPow ("Specular Power", Range(10,200)) = 100 } SubShader { Tags { "RenderType"="Opaque" } LOD 200 CGPROGRAM // Physically based Standard lighting model, and enable shadows.. 2023. 8. 18.
[Unity/Shader] 파트13-1 : Blinn Phong 반사 이론 스펙큘러 만들 때 필요한 이론이다. 전통적인 방식은 Phong 반사이다. Phong 반사'뷰벡터로부터 반사된 방향에 라이트가 있으면, 그 부분의 하이라이트가 가장 높다'가 전제다. 뷰벡터를 노말 방향 기준으로 반사하는 반사벡터와, 조명 벡터의 내적으로 스펙큘러가 표현된다. R·L이다.위 공식 계산을 위해서는 R을 구해야한다. V벡터 기반으로 R벡터 계산법은 다음과 같다. R = 2N(L·N) - L 다만, 반사 벡터를 구하기 위해 내적을 한번 더 하는 단점이 있다.Bling Phong 퐁 공식을 간략화한 공식이다. 하프 벡터를 이용하는 공식이다. H·N이다.하프 벡터 구하는 법 길이가 같은 두 벡터를 더하고 노멀라이즈한다. 다음 장에서 실습한다. 2023. 8. 18.
[Unity/Shader] 파트12-3 : 홀로그램 제작 뷰포트 애니메이션 활성화 방법 핵심 제작법 외곽선 : 내적 줄무늬 : 월드 포지션을 frac한 것에 시간으로 offset을 준 것이다. 코드 Shader "Custom/Part12-1" { Properties { _BumpMap("NormalMap", 2D) = "bump" {} } SubShader { Tags { "RenderType"="Transparent" "Queue" = "Transparent" } // 반투명 재질로 적용 LOD 200 CGPROGRAM // Physically based Standard lighting model, and enable shadows on all light types #pragma surface surf nolight noambient alpha:fade //.. 2023. 8. 17.