1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | Shader "Custom/NewSurfaceShader" { Properties { _MainTex ("Albedo (RGB)", 2D) = "white" {} } SubShader { Tags { "RenderType"="Opaque" } CGPROGRAM #pragma surface surf Standard fullforwardshadows sampler2D _MainTex; struct Input { float2 uv_MainTex; }; void surf (Input IN, inout SurfaceOutputStandard o) { fixed4 c = tex2D (_MainTex, IN.uv_MainTex); o.Albedo = c.rgb; o.Alpha = c.a; } ENDCG } FallBack "Diffuse" } | cs |
쉐이더 조절로 이미지 흑백 만들기
void surf (Input IN, inout SurfaceOutputStandard o) {
fixed4 c = tex2D (_MainTex, IN.uv_MainTex);
o.Albedo = (c.r + c.g + c.b)/3;
o.Alpha = c.a;
위와 같이 계산하면 쉽게 이미지 흑백으로 만들 수 있음.
각 요소의 평균을 구한 결과와 동일하게 되어 한 자리 숫자로 나오게 됨.
Lerp 함수
lerp는 Linear Interpolation의 약자, '선형보간'이라고 함
'직선적인 비율로 값이 변환되는 것'을 의미함
lerp 함수는 다음과 같이 사용되고, X, Y는 같은 단위여야 하고 s는 float이어야 함
lerp (X, Y, s)
일반화
일반적으로 두 지점 에서의 데이터 값이 각각 일 때, 사이의 임의의 지점 에서의 데이터 값 는 다음과 같이 계산할 수 있다.
단, 은 에서 까지의 거리, 는 에서 까지의 거리를 말한다.
만일 거리의 비를 합이 1이 되도록 정규화하면 () 위 식은 다음과 같이 단순화될 수 있다.
예시
예를 들어, 오른쪽 그림과 같이, 두 끝점 와 가 주어져 있을 때, 그 사이에 위치한 의 값을 추정하기 위해 두 점 사이에 직선을 긋고 다음과 같은 비례식을 구성할 수 있다.
이 수식을 풀면, 어떤 주어진 값 에 대한 값을 다음과 같이 구할 수 있다.
프로그래밍
선형 보간법은 다음과 같은 방법으로 프로그래밍을 할 수 있다.
1 2 3 4 | // p1,p2를 d1:d2로 분할하는 p를 리턴한다. (단, d1+d2=1) float lerp(float p1, float p2, float d1) { return (1-d1)*p1 + d1*p2; } | cs |
p1, p2사이의 임의의 지점 p에서의 데이터값 f(p)는 다음과 같다.
따라서,
선형보간법 설명 출처 - https://ko.wikipedia.org/wiki/선형_보간법
'Unity3D C# > 유니티 쉐이더 공부' 카테고리의 다른 글
UV의 기본개념과 시각적 확인 (0) | 2018.01.08 |
---|---|
lerp 함수의 응용 (0) | 2018.01.07 |
기본 쉐이더 코드의 텍스쳐 부분 알아보기 (0) | 2018.01.05 |
변수와 인터페이스 활용 (0) | 2018.01.01 |
쉐이더 색상 출력과 사칙연산 (0) | 2017.12.31 |