본문 바로가기

셰이더 (Shader)89

[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.
[RSL] Part3 : Displacements (183p ~ 185p) 디스플레이스먼트에 대해 알아본다. 내용은 이하 파일 참고. 2023. 8. 19.
[RSL] Part2 : Divide and Conquer (162p ~ 179p) 수박을 만들어보며 예제 실습해본다. 내용은 이하 파일 참고. 2023. 8. 19.
[RSL] Part2 : Shader Design Methodology (158p ~ 161p) Why Follow a Methodology? (왜 방법론을 따를까요?) 쉐이더 개발은 일반적으로 어렵지 않지만 이전에 구현되지 않은 매우 독특한 해결책을 개발하려고 할 때에 어려움이 있을 수 있습니다. 그런 경우 많은 독자적인 연구, 수학적 계산, 차트 작성 및 테스트가 필요할 수 있습니다. 보통의 쉐이더에서는 이러한 단계 대부분을 건너뛸 수 있지만, 심지어 가장 간단한 쉐이더라도 특정 수준의 계획과 조직이 필요합니다. "쉐이더 작성 과정"이라는 제3장에서 언급한 것처럼, 쉐이더 개발에는 일반적으로 설계 단계가 포함됩니다. 이 단계는 목표가 무엇인지를 알려줍니다. 이 단계가 없으면 어떤 방향으로 나아가야 할지 막막해질 수 있습니다. 방법론은 "무엇을 해야 하는가"가 아니라 "어떻게 해야 하는가"입니다... 2023. 8. 19.
[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.