본문 바로가기

분류 전체보기414

[Unity/Shader] 파트14-8 : Diffuse Wraping 기법 응용 라이트벡터와의 내적은 x축으로 사용한다. (디퓨즈로 표현) 뷰벡터와의 내적은 y축으로 사용한다. (스펙큘러로 표현) 추가정보 도타2 창작마당의 쉐이더 가이드에 여러 응용법들이 있다. 라이트벡터와의 내적이 아닌, Normal.x 또는 viewDir.y 등을 사용하여 재밌는 표현이 가능하다. 텍스쳐 세팅 텍스쳐의 y축에 스펙큘러 색인 흰, 검을 할당하였다. 툰이므로 단절되게 할당하였다. 코드 Shader "Custom/part14-7" { Properties { _MainTex ("Albedo (RGB)", 2D) = "white" {} _BumpMap ("NormalMap", 2D) = "bump" {} _RampTex ("RampTex", 2D) = "white" {} } SubShader { Tags .. 2023. 8. 22.
[Unity/Shader] 파트14-7 : Diffuse Wraping 기법 팀포트리스2에서 사용된 Wrapped Diffuse 기법에 대해 알아본다. 가볍고 응용이 편리하다. 지금도 많이 사용한다. 노멀과 라이트 벡터의 내적값을 UV로 사용하는 기법이다. 텍스쳐 세팅 Clamp : 마지막 색상이 처음 부분에 묻어나는 문제를 방지한다. None : 압축하면 컬러의 손실이 생길 수 있다. 따라서 압축 해제하여 방지한다. 코드 Shader "Custom/part14-7" { Properties { _MainTex ("Albedo (RGB)", 2D) = "white" {} _BumpMap ("NormalMap", 2D) = "bump" {} _RampTex ("RampTex", 2D) = "white" {} } SubShader { Tags { "RenderType"="Opaque".. 2023. 8. 22.
[Unity/Shader] 파트14-6 : Fresnel 이용해 외곽선 만들기 pass는 한 개만 이용한다. 이전 챕터에서 실습한, 끊어지는 음영 부분의 패스만 남긴다. 내적을 한 후, if문으로 외곽선으로 만든다. 코드 Shader "Custom/part14-6" { Properties { _MainTex ("Albedo (RGB)", 2D) = "white" {} _BumpMap ("NormalMap", 2D) = "bump" {} // 노말맵 받기 } SubShader { Tags { "RenderType"="Opaque" } LOD 200 cull back CGPROGRAM #pragma surface surf Toon #pragma target 3.0 sampler2D _MainTex; sampler2D _BumpMap; struct Input { float2 uv_Mai.. 2023. 8. 22.
[Unity/Shader] 파트14-5 : 끊어지는 음영 만들기 if문을 이용해 끊어지는 음영을 만든다. ceil 함수를 이용해 더 가볍게 만들 수 있다. 하지만 범위를 마음대로 설정할 수 없는 단점이 있다. 코드 Shader "Custom/part14-5" { Properties { _MainTex ("Albedo (RGB)", 2D) = "white" {} _BumpMap ("NormalMap", 2D) = "bump" {} } SubShader { Tags { "RenderType"="Opaque" } LOD 200 cull front // 1st pass 검은색 출력 CGPROGRAM #pragma surface surf Nolight vertex:vert noshadow noambient #pragma target 3.0 sampler2D _MainTex; .. 2023. 8. 20.
[Unity/Shader] 파트14-4 : 버텍스 쉐이더를 이용한 오브젝트 확장 버텍스 쉐이더를 사용해본다. 버텍스를 노말 방향으로 이동시키는 것이 핵심이다. 코드 Shader "Custom/part14-4" { Properties { _MainTex ("Albedo (RGB)", 2D) = "white" {} } SubShader { Tags { "RenderType"="Opaque" } LOD 200 cull front // 1st pass 검은색 출력 CGPROGRAM #pragma surface surf Nolight vertex:vert noshadow noambient // vertex:vert 버텍스 쉐이더가 vert라는 함수 이름으로 가동된다는 것을 알려준다. // 라이팅 연산을 최소화하여 가볍게 만든다. #pragma target 3.0 sampler2D _MainT.. 2023. 8. 20.
[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.