전체 글(293)
-
[Unity] URP 셰이더 Gamma Correction
[Unity] URP 셰이더 Gamma와 sRGB sRGB 사진 텍스쳐는 sRGB를 켜고 Normal Map이나 Ambient Occlusion 텍스쳐 등 셰이더 계산에 사용되는 데이터 텍스쳐는 sRGB를 끈다. 감마 보정 채널당 8비트의 색 표현도 결국 밴딩 현상이 일어나지만 아주 lightbakery.tistory.com 이전 글에서도 Gamma에 대한 설명을 적었지만 더 쉽고 추가적 해석이 있어서 적어본다. 위의 사진을 보면 [Vector 3], [Color] 두 노드 각각 중간 값인 0.5의 회색을 나타낸다. 이 둘을 [Add] 노드로 더해보면 "0.5 + 0.5 = 1"의 값이 나오므로 흰색이 나올 것임을 예상할 수 있다. 하지만 아래쪽 [Color] 노드로 더한 값은 흰색이 나오지 않고 밝은 ..
2023.07.11 -
[Unity] URP 셰이더 그래프 Combine, Swizzle 노드
위의 셰이더 그래프를 보면 [Vector 3]에서 출발한 값이 [Split]을 통해 나뉘어졌고, 다시 [Combine] 노드를 지나면서 합쳐진 것을 볼 수 있다. [Split]과 [Combine] 사이 노드를 이어줄 때, R에 있던 1 값을 G로 보내면서 한 번 꼬아진 것을 볼 수 있다. 결과적으로 색은 (0, 1, 0)인 초록색이 나오게 되고 이것을 [Swizzle]이라고 부른다. [Swizzle] 노드의 Mask 부분에 원하는 조합을 써 놓으면 되는데, 순서에 따라서 결과값이 달라진다. x에 있는 값 "1" 하나만 적용되어 출력이 (1, 1, 1)로 흰색이 나왔다. xy를 적어서 (1, 1, 0)이 되어 노란색이 출력되었다. xyz를 적어서 바로 위와 마찬가지로 (1, 1, 0)이 되어 노란색이 출력..
2023.07.10 -
[Unity] URP 셰이더 그래프 기초 개념2 (Graph Inspector - Node Settings 인터페이스)
[Unity] URP 셰이더 그래프 기초 개념 ShaderGraph URP에서 생성할 수 있는 셰이더 그래프 종류를 볼 수 있다. Lit Shader Graph: 빛을 받고 그림자를 만들 수 있는 셰이더 Unlit Shader Graph: 빛과 무관하게 텍스쳐 그대로 보여주는 셰이더 셰이더 lightbakery.tistory.com 이전 기초 개념에서 정리하지 않았던 내용을 정리하는 페이지이다. Graph Inspector 창 1. Float Override Property Declaration - Shader Declaration : Property 속성을 재선언한다. Global : 셰이더 Property를 글로벌에서 제어한다. 코딩으로 이 Property 이름을 사용하는 모든 셰이더를 한 번에 제어..
2023.07.10 -
[C#] 컴퓨터 구조 입문(High/Low Level, 메모리, 함수의 구현/호출부, delegate)
8비트 = 1바이트 (8자리 2진수) 알파벳 1자 = 1바이트 High Level 언어 / Low Level 언어 저수준, 고수준은 두 항목을 비교했을 때의 의미이다. 기계어와 어셈블리어가 있다면 기계어가 Low Level, 어셈블리어가 High Level이 되고, 어셈블리어와 C언어가 있다면 어셈블리어가 Low Level, C언어가 High Level이 된다. C언어와 C#이 있다면 C언어가 Low Level, C#이 High Level이 된다. 고수준으로 갈수록 하부단계를 몰라도 되지만 저수준을 이해하면 고수준의 내용을 더 확실하게 이해할 수 있다. 메모리의 종류 스택(Stack): 빠르게 사용하는 쌓이는 메모리의 종류. 쌓였다가 사용이 끝나면 사라진다. 힙(Heap): 마구간에 있는 건초처럼 늘어놓..
2023.07.07 -
[C#] 함수의 입출력
입출력이 없는 경우 void PrintNum() { ... } void의 의미는 출력이 없다는 것이고 () 빈 괄호는 입력이 없다는 뜻이다. 입력만 있는 경우 void MyPrint(int a) { int num = 1; print(a + num); } 입력이 있는 경우 괄호 안에 변수형과 변수 이름을 적는다.("매개변수(Parameter)"라고 한다.) 위의 함수를 호출하는 코드는 다음과 같다. 함수 이름 옆 괄호 안에 값 또는 변수도 넣을 수 있다.("인자(argument)"라고 한다.) void Start() { MyPrint(10); } * 매개변수와 인자의 변수이름은 같아도 상관없다.
2023.07.06 -
[C#] int와 float의 형변환과 연산
int는 정수, float는 실수를 말한다. 위의 그림과 같이 정수는 실수 안에 포함된다. 이 때문에 형변환에서 주의할 사항이 있다. int intNum; intNum = 2.1f; 정수로 정의된 intNum 변수에 2.1f의 실수 값을 저장하면 실행했을 때 오류가 발생하게 된다. float fNum fNum = 2; 반대로, 실수로 정의된 fNum에 정수 값을 저장해도 오류는 발생하지 않는다. 정수 2를 2.0f 형태로 저장하게 된다. 오류를 해결하는 방법은 다음과 같다. int intNum; intNum = (int)2.1f; 값 앞에 형변환 연산자를 넣어주는 건데, 첫째 줄 int와 형변환 연산자 (int)는 다르다. 첫째 줄 int는 변수를 선언하는 것이고 (int)는 형변환을 해주는 역할이다. ..
2023.06.29