Unity Shader(35)
-
[Unity] URP 셰이더 Detail Map
Detail Map은 근접했을 때 흐려지는 텍스쳐의 디테일을 보완하고자 만든 기법이다. 책의 예제 돌 오브젝트와 텍스쳐 오브젝트를 보면, 일반적으로 셰이더를 적용했을 때는 물체에 가까이 갔을 때 텍스쳐 해상도의 한계 때문에 흐리게 보이게 된다. 이걸 해결하기 위해서 텍스쳐의 사이즈를 크게 하면 그것 또한 문제가 될 수 있다. 이러한 현상을 해결하기 위해 Detail Map을 사용한다. 예제에 있는 DirtDetail 텍스쳐를 가로세로 20씩 Tiling 하고 Base Map 텍스쳐와 [Blend] 계산을 한다. Detail Map은 결과물의 밝기에 변화를 주지 않게 sRGB 옵션을 끈다. 일반적으로 Detail Map은 원본 이미지의 밝기를 해치지 않기 위해 회색 이미지를 사용하는 것이 일반적이라고 한다..
2023.07.17 -
[Unity] URP 셰이더 Height Map(Parallax Mapping)
Height Map -높이를 저장하고 있는 그레이 스케일의 텍스쳐를 통칭하는 의미이다. Lit Shader에서는 Height Map을 Parallax의 맵으로 사용하고 있다. 실제로 버텍스의 위치를 조절해 주는 흑백 높이맵으로 사용할 수도 있고, 유니티에서는 내장된 Terrain의 높낮이를 저장하고 조절해 주는 16비트 텍스쳐로 사용되기도 한다. Parallax Mapping(시차 매핑) -시야각에 따라 UV를 이동시켜 깊이감을 흉내내는 기법. 다음은 책에 있는 예제이며 Base Map, Normal Map, Smoothness, Ambient Occlusion 총 4개의 텍스쳐를 적용한 모습이다. Height Map을 이용해서 깊이감을 더 줄 수 있다. [Parallax Mapping] 노드를 추가하고..
2023.07.17 -
[Unity] URP 셰이더 픽셀 셰이더 5.0 샘플러 오류 해결법 (Sampler State 노드)
셰이더를 만들다 보면, 많은 텍스쳐를 사용하여 오류가 날 수 있다. 매뉴얼에는 Direct3D 11은 한 셰이더에 최대 128개의 텍스쳐와 16개의 샘플러를 지원한다고 되어있지만, 샘플링이 API 한계를 넘어서면 콘솔 창에 다음과 같은 오류 문구가 나온다. "Shader error in 'Master': maximum ps_5_0 sampler register index (16) exceeded at line 358 (on d3d11)" 이 경우 샘플러 상태를 공유해서 사용하는 샘플링 수를 줄이면 된다. Linear: 텍스쳐가 화면에서 확대/축소될 때, 주변 픽셀과 블렌딩 되면서 부드러워진다. Point: 블렌딩 되지 않는다. Trilinear: Linear와 기본적으로 같지만 Mipmap 변화가 될 때..
2023.07.14 -
[Unity] URP 셰이더 무료 에셋을 이용한 Lit Shader Graph 정리 (Base Map/Metallic/Smoothness/Ambient Occlusion/Emission)
책의 예제와 똑같이, 에셋 스토어에서 무료 에셋을 받은 후 프로젝트에 Import하고 분홍색으로 깨지는 메테리얼 대신 Lit Shader Graph를 적용한 메테리얼을 적용한다. 이후 Diffuse(Albedo)는 컬러 값과 곱하여 Base Color에 연결하고 Metallic은 R값은 Metallic에, A알파값은 Smoothness에 들어있으므로 맞는 곳에 연결한다. (*만약 Smoothness 텍스쳐가 따로 있다면 데이터로 쓰이는 텍스쳐이기 때문에 [sRGB] 체크를 해제해서 써야한다.) 유니티 기본 Lit 셰이더에서도 Smoothness의 Source가 "Metallic Alpha"로 설정되어 있는 것을 볼 수 있다. 노말맵 만들기 노말맵에 쓸 텍스쳐는 반드시 Inpector에서 [Texture ..
2023.07.13 -
[Unity] URP 셰이더 Vertex Color와 응용
버텍스 컬러는 기본적으로 출력이 되지 않기 때문에 별도의 Package를 다운 받아 작업한다. Package Manager에서 Poly Brush를 다운 받고 Poly Bursh Window로 기본 Plane에 Vertex 색을 칠할 수 있다. 셰이더에서 미리 [Vertex Color] 노드를 연결해 놓았기 때문에 실시간으로 볼 수 있었고, 연결하지 않으면 브러쉬로 칠해도 아무 일도 일어나지 않은 것처럼 보인다. 특정 텍스쳐와 더하거나 곱하면 효과를 나타낼 수 있는데, 잘 이용하면 라이트맵 베이크를 할 수 없는 상황에서 Ambient Occlusion처럼 이용하거나 저렴한 라이트맵처럼 이용할 수도 있다고 한다. 버텍스 컬러는 버텍스가 기본적으로 가지고 있는 값이므로 저렴하게 이용할 수 있어서 파티클, 이..
2023.07.12 -
[Unity] URP 셰이더 Time 노드로 움직이는 불 만들기
배경이 투명해야 하기 때문에 셰이더 Graph Settings를 [Transparent]로 바꾼다. [Blending Mode] - [Additive]는 배경과 덧셈이 되면서 더 밝아지게 된다. [Render Face]는 양면 렌더링을 위해 [Both]로 설정한다. V 방향으로만 [Time]에 [Negate] 음수를 곱하여 위로 올라가게 [Add] 노드로 더했고 [Sample Texture 2D]로 텍스쳐에 적용한다. 고정할 텍스쳐와 움직일 텍스쳐의 rgb와 알파를 각각 곱해서 Fragment에 전달한다. 책의 예제에서는 (0.5, 0.5, 0.5)의 값을 갖는 회색 텍스쳐를 UV 값을 [Split]하여 각 U, V 값에 [Add]하는 부분이 있는데, 정확히 U, V 값이 0.5씩 이동되지 않는 결과가 ..
2023.07.12