URP(27)
-
[Unity] URP 셰이더 HLSL 구조와 _BaseColor 적용
ShaderLab ShaderLab은 범용적인 HLSL만으로는 유니티 3D 엔진만의 여러 기능들을 제어할 수 없어서 만든 규칙이다. OpenGL이나 HLSL 같은 셰이더 언어는 유니티 엔진이 존재하기 전부터 사용된 언어이기 때문. 특징은 간단한 문법 구조를 가지고 있고 엔진 기능들에 관련된 것들이다. 직접적으로 셰이딩 연산에 관한 것들은 없다. // 이것은 주석입니다. (Comment) Shader "Custom/ShaderLab HLSL/CustomUnlit" { Properties { } SubShader { Tags { "RenderType" = "Opaque" "RenderPipeline" = "UniversalPipeline" } Pass { HLSLPROGRAM #pragma vertex ve..
2023.06.08 -
[Unity] URP 셰이더 Gamma와 sRGB
sRGB 사진 텍스쳐는 sRGB를 켜고 Normal Map이나 Ambient Occlusion 텍스쳐 등 셰이더 계산에 사용되는 데이터 텍스쳐는 sRGB를 끈다. 감마 보정 채널당 8비트의 색 표현도 결국 밴딩 현상이 일어나지만 아주 미세하게 발생해서 잘 느끼지 못할 뿐이다. 감마보정은 어두운 부분의 밴딩 현상을 최소화하는 보완책이다. 왼쪽은 0.45 제곱의 지수 그래프로 0.45 만큼 감마 인코딩할 때 포토샵에서도 같은 모양의 그래프를 볼 수 있다. 모니터에 출력될 때 다시 어둡게 디코딩될 것을 전제로 이미지를 조금 밝게 저장한다. 오른쪽은 2.2 제곰의 지수 그래프로 2.2 감마 디코딩을 나타내며 다시 어둡게 디코딩해서 모니터에 출력한다. GLSL 그래프를 살펴보면 지수 함수로 바뀌면서 낮은 영역에서..
2023.06.07 -
[Unity] URP 셰이더 Z Buffer와 반투명(Translucent)
Z Buffer Z Buffer는 픽셀이 얼마나 멀리 있는지 거리 정보를 기록하는 이미지이다. 가장 가까운 곳은 0으로 완전히 검은색, 가장 멀리 있는 곳은 1로 흰색이다. 반투명 폴리곤은 Sorting(거리 순서로 그리는 방식)이나 Z Buffer로도 해결할 수 없는 문제가 있다. Z Buffer의 정밀도는 플랫폼에 따라 다르지만 보통 16비트나 32비트 정밀도를 사용한다. 이 정도면 검은색에서 흰색 사이의 그라데이션 계조가 매우 풍부해서 미세한 거리 차이도 색상으로 구분할 수 있다. 하지만 구분할 수 없을 정도로 비슷한 거리의 폴리곤이면 Z Fighting이 일어나게 된다. 반투명(Translucent) 반투명 재질은 Z Buffer에 기록하는 Z Write를 끄고 렌더링 해야 한다. Z Test는 ..
2023.06.07 -
[Unity] URP 셰이더 Sub Graph, Custom Lighting, Keyword
서브 그래프 유니티 URP에는 원하는 노드들을 커스텀으로 묶어서 저장할 수 있는 '서브 그래프' 기능이 있다. 만들어진 Sub Graph는 Create Node 리스트에서 찾아볼 수 있다. 저장된 이름은 "IsoscelesTrapezoid"이다. Sub Graph의 장점 셰이더 그래프의 가독성이 좋아진다. 그래프의 재활용을 통해 작업 효율이 향상된다. 유지 보수 측면에서 좋다. 특정 기능 서브 그래프가 여기저기 쓰였는데 수정을 해야 한다면 하나만 수정해도 전체에 반영될 수 있다. 셰이더 그래프 커스텀 라이팅 Custom Function 노드 활용 Unlit 셰이더에 라이팅을 적용하려면 [Custom Function] 노드가 필요하다. [Custom Function]은 HLSL 코드를 작성해서 노드의 행동..
2023.06.05 -
[Unity] 텍스쳐와 UV를 이용한 셰이더 (Tiling, Offset, Scrollout)
Tiling & Offset 셰이더로 만들기 Tiling과 Offset 적용을 변수 프로퍼티 추가로 셰이더로 만들 수 있다. [Tiling And Offset]은 유니티 내에 기본 노드가 있어서 추가하여 연결만 해주면 된다. Tiling & Offset_ScrollSpeed ScrollSpeed 변수가 추가된 셰이더이다. Tiling & Offset_ScrollSpeed2 [Tiling And Offset] 노드에서 Offset은 Vector2 타입이라 [Vector 2] 노드를 만들었고 가장 처음 [Time] 노드도 만들었다. [Fraction] 노드는 Time 값이 전달되는 중간에 소수점 이하의 값만 얻어오기 위해 넣는다. Time 값은 0~1 사이에서 계속 증가하다가 0으로 초기화되는 상황을 반복한..
2023.06.05 -
[Unity] URP 셰이더 그래프 기본적인 노드와 응용 (Add/Multiply/Divide/Pow/Saturate/Clamp/Abs)
Add / Multiply / Divide 각각 [Add], [Multiply], [Divide]인데, [Add]는 말 그대로 색상을 더해주는 기능이고 [Multiply]는 함수 기울기가 급격해지도록(여기서는 색상이 급격하게 변하도록) 만들어준다. [Divide]는 [Multiply]의 반대로, [Multiply]에 4를 넣어 기울기가 4배가 된다면, [Divide]에 4를 넣으면 기울기가 0.25배가 된다. Pow Pow는 지수를 말한다. x의 몇 제곱인데, Pow 값이 1 이상이면 흔히 아는 급격하게 기울기가 커지는 그래프가 만들어지지만, Pow 값이 1보다 작다면 서서히 기울기가 작아지는 그래프가 만들어진다. Saturate [Saturate]는 0 이하를 0으로 만들고 1 이상을 1로 만들어주는 ..
2023.06.03