-
[유니티 쉐이더 스타트업] 쉐이더에서 변수는 어떻게 이용할까?프로그래밍/Unity Shader 2019. 5. 11. 19:23
https://zerodeg.tistory.com/34
[Unity Shader] 색상의 사칙연산을 해보기
data-ad-unit = "DAN-tocxr50w70wz" data-ad-width = "728" data-ad-height = "90"> data-ad-unit = "DAN-tocxr50w70wz" data-ad-width = "728" data-ad-height = "90"> 저번 시간에는 쉐이더에서 오브젝트의 색상..
zerodeg.tistory.com
저번 시간에는 색상을 어떻게 연산하는지에 대해서 알아보았느데요. 오늘은 쉐이더에서 변수를 어떻게 선언하고 사용하는지에 대해서 알아보려고 합니다. 혹시 색상의 연산에 대해서 궁금하신 분들은 위 링크를 통해서 색상의 연산을 어떻게 하는지 보시고 오는 것도 좋을 것 같습니다. 그럼 저는 변수를 어떻게 사용하는지에 대해 살펴보도록 하겠습니다.
원래 변수가 무엇인지부터 설명하면서 내용을 적으려고 했는데, 이 글을 보고 있는 사람들이라면 대부분 변수가 무엇인지는 알고 있으리라는 생각이 들어서 변수의 정의나 규칙 같은 것은 생략하려고 합니다. 변수가 무엇인지에 대한 포스팅은 따로 작성을 해야겠네요 ^^;
1. 변수를 만들고 선언해보기
먼저 float4 자료형의 test라는 이름의 변수를 선언하고, RGBA의 값을 1, 0, 0, 1로 초기화해보겠습니다. 변수는 저번시간과 마찬가지로 surf 함수에서 작성합니다.
void surf (Input IN, inout SurfaceOutputStandard o) { float4 test = float4(1, 0, 0, 1); // 변수 초기화 // Albedo comes from a texture tinted by color fixed4 c = tex2D (_MainTex, IN.uv_MainTex) * _Color; o.Albedo = c.rgb; o.Alpha = c.a; //Metallic and smoothness come from slider variables //o.Metallic = _Metallic; //o.Smoothness = _Glossiness; }
2. 초기화한 변수를 이용해 색상 변경해보기
다음으로 방금 만든 변수를 이용하여 Albedo 색상을 변경해보도록 하겠습니다.
o.Albedo = test;
이렇게 작성해주셔도 에러가 발생하지는 않지만, rgb는 float3 형으로 저장되기 때문에 float4로 만들어진 test 변수와는 맞지 않습니다. 올바른 방법은 float3으로 변환 시켜주는 것이겠죠. 방법은 옆에 .rgb를 입력해주시는 겁니다. 간단하죠?
o.Albedo = test.rgb;
빨간색으로 출력된 것을 확인. 3. rgb의 순서를 바꿔보기
변수를 float3으로 변환하면서 사용한 rgb라는 키워드의 순서를 바꿔볼까요? 예를 들면 gbr 이나 brg 처럼 말이죠. 결과가 어떻게 되는지 확인해보겠습니다.
o.Albedo = test.gbr;
gbr o.Albedo = test.grb;
grb o.Albedo = test.rrr;
rrr 이 입력되어 1, 1, 1이 되었다. 보이는 것처럼 rgb의 키워드 중 r, g, b 각각의 키워드를 하나씩 사용할 수도 있고, 순서를 변경할 수도, 섞어쓸 수도 있다는 것을 확인할 수 있었네요. 어떻게 사용해야되는지 감이 오시나요? 그럼 이제는 조금 응용해서 사용해보도록 하겠습니다.
4. 변수를 응용해서 사용해보기
float3 변수 안에 변수를 넣을 수 있을까요? 정답은 맞습니다. 아래 몇가지 예를 통해서 여러가지 변수를 넣는 방법에 대해서 알아보도록 하겠습니다.
float4 test = float4(1, 0, 0, 1); // 변수 초기화 o.Albedo = float3(test.r, test.a, test.g);
float3 안에 float2를 넣을 수도 있습니다. 이렇게요.
float4 test = float4(1, 0, 0, 1); // 변수 초기화 float2 test2 = float2(0.5, 1); o.Albedo = float3(test.r, test2);
이렇게 하면 1, 0.5, 1 이 되어 위와 같은 색이 나오게 됩니다. 이렇게 여러가지 방법을 이용하여 변수를 응용할 수 있다는 점 아셨을거라고 생각합니다. 오늘 포스팅에서는 쉐이더에서 변수를 사용하는 방법에 대해서 알아보았는데 도움이 되셨을까요? 오늘 포스팅은 여기서 마무리 하고 다음 포스팅에서 뵙도록 하겠습니다.
'프로그래밍 > Unity Shader' 카테고리의 다른 글
[유니티 쉐이더 스타트업] 색상을 입력 받아 출력해보기 - 2 (0) 2019.05.18 [유니티 쉐이더 스타트업] 색상을 입력받아 출력해보기 - 1 (0) 2019.05.13 [유니티 쉐이더 스타트업] 색상의 사칙연산을 해보기 (0) 2019.05.10 [유니티 쉐이더 스타트업] 색상을 출력해보기 (0) 2019.05.03 [유니티 쉐이더 스타트업] Shader Properties 제작해보기 (0) 2019.04.28