-
[유니티 쉐이더 스타트업] 색상을 입력 받아 출력해보기 - 2프로그래밍/Unity Shader 2019. 5. 18. 01:44
https://zerodeg.tistory.com/36?category=812191
[Unity Shader] 색상을 입력받아 출력해보기
https://zerodeg.tistory.com/35 [Unity Shader] 쉐이더에서 변수는 어떻게 이용할까? https://zerodeg.tistory.com/34 [Unity Shader] 색상의 사칙연산을 해보기 data-ad-unit = "DAN-tocxr50w70wz" data-ad-widt..
zerodeg.tistory.com
오늘은 저번시간에 이어서 외부에서 받은 값들을 조합하여 색상을 출력해보는 시간을 가져보겠습니다. 저번 시간에는 하나의 인터페이스를 가지고 색상을 출력하는 방법에 대해서 알아보았는데요. 이번 시간에는 R, G, B 각각의 색깔을 따로 입력받아서 색을 출력하여 보겠습니다. 혹시 외부에서 색상을 입력받아서 출력하는 방법 자체를 모르신다면 위 링크를 클릭하셔서 설명을 보고 오시면 도움이 될거라고 생각합니다 ^^
이전에 배웠던 변수의 사용법을 익히셨다면 오늘은 조금 더 쉽게 접근 할 수도 있는데요. 변수를 쉐이더에서 어떻게 사용하는지 궁금하신 분은 아래 링크에서 보고 오시면 되겠습니다.
https://zerodeg.tistory.com/35?category=812191
[Unity Shader] 쉐이더에서 변수는 어떻게 이용할까?
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..
zerodeg.tistory.com
자, 이제 정말 본격적으로 시작해볼텐데요. 먼저 Red, Blue, Green 에 해당하는 인터페이스를 아래와 같이 만들어줍니다.
Properties { _Color ("Color", Color) = (1,1,1,1) _MainTex ("Albedo (RGB)", 2D) = "white" {} _Glossiness("Smoothness", Range(0,1)) = 0.5 _Metallic("Metallic", Range(0,1)) = 0.0 //_TestColor("TestColor", Color) = (1, 1, 1, 1) _Red("Red", Range(0, 1)) = 0 _Green("Green", Range(0, 1)) = 0 _Blue("Blue", Range(0, 1)) = 0 }
0부터 1까지의 범위를 가지는 Red, Green, Blue의 인터페이스를 위와 같이 생성하고, 인터페이스에서 설정한 값을 넣어줄 변수 Red, Green, Blue를 선언해주고, surf 함수에서 Albedo 값을 각각 _Red, _Green, _Blue 변수로 대체해주면 끝납니다. 아래는 CGPROGRAM 부터 ENDCG 까지의 코드입니다. 잘 확인해주세요.
CGPROGRAM // Physically based Standard lighting model, and enable shadows on all light types #pragma surface surf Standard fullforwardshadows // Use shader model 3.0 target, to get nicer looking lighting #pragma target 3.0 sampler2D _MainTex; struct Input { float2 uv_MainTex; }; half _Glossiness; half _Metallic; fixed4 _Color; //float4 _TestColor; float _Red; float _Green; float _Blue; // Add instancing support for this shader. You need to check 'Enable Instancing' on materials that use the shader. // See https://docs.unity3d.com/Manual/GPUInstancing.html for more information about instancing. // #pragma instancing_options assumeuniformscaling UNITY_INSTANCING_BUFFER_START(Props) // put more per-instance properties here UNITY_INSTANCING_BUFFER_END(Props) void surf (Input IN, inout SurfaceOutputStandard o) { // Albedo comes from a texture tinted by color fixed4 c = tex2D(_MainTex, IN.uv_MainTex) * _Color; o.Albedo = float3(_Red, _Green, _Blue); //Metallic and smoothness come from slider variables o.Metallic = _Metallic; o.Smoothness = _Glossiness; o.Alpha = c.a; } ENDCG
이렇게 작성을 해주시고 유니티에서 확인하면 아래와 같이 출력되는 것을 확인할 수 있습니다.
잘 동작하시나요? 그럼 마지막으로 밝기를 조절하는 기능도 만들어봅시다. 인터페이스에서 _BrightDark라는 프로퍼티를 생성해주신 다음에 Range(-1 ~ 1) 로 설정해줍니다. -1부터 하는 이유는 0부터 할 경우 밝아지기만 할 것이기 때문에 어두워 지는 것도 구현하기 위하여 -1부터 1까지로 지정해줍니다.
_BrightDark("Brightness", Range(-1, 1)) = 0
변수 선언도 똑같이 해주고...
float _BrightDark;
surf 함수에서 Albedo 값을 아래와 같이 수정해줍니다.
o.Albedo = float3(_Red, _Green, _Blue) + _BrightDark;
결과를 확인해볼까요?
어두워지기도 하고, 밝아지기도 합니다. 이처럼 오늘은 RGB의 색깔을 각각 변경하는 방법과, 물체의 밝기를 어떻게 조절하는지에 대해서 알아보았습니다. 도움이 되셨나요? 저는 다음 포스팅에서 뵙겠습니다!
'프로그래밍 > Unity Shader' 카테고리의 다른 글
[유니티 쉐이더 스타트업] 이미지를 흑백으로 만들기 (2) 2019.05.20 [유니티 쉐이더 스타트업] 쉐이더 코드를 깔끔하게 정리하는법 (0) 2019.05.19 [유니티 쉐이더 스타트업] 색상을 입력받아 출력해보기 - 1 (0) 2019.05.13 [유니티 쉐이더 스타트업] 쉐이더에서 변수는 어떻게 이용할까? (0) 2019.05.11 [유니티 쉐이더 스타트업] 색상의 사칙연산을 해보기 (0) 2019.05.10