여기에서는 색상 관련 실습을 진행해보려 한다.
책에 나온 코드 중에서 색상을 입력받아 출력하기 위한 부분만 남기고 지웠다
Shader "NewShader"
{
Properties
{
_TestColor("TestColor", Color) = (1,1,1,1)
}
SubShader
{
Tags { "RenderType"="Opaque" }
CGPROGRAM
#pragma surface surf Standard fullforwardshadows
struct Input
{
float4 color : COLOR; // 버텍스 컬러를 받아오는 마법의 주문
};
float4 _TestColor;
void surf (Input IN, inout SurfaceOutputStandard o)
{
o.Albedo = _TestColor.rgb; // o.Albedo는 r,g,b만 필요하므로 _TestColor라고 작성하지 않음
o.Alpha = _TestColor.a;
}
ENDCG
}
FallBack "Diffuse"
}
Shader "NewShader"
{
Properties
{
_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
}
SubShader
{
Tags { "RenderType"="Opaque" }
CGPROGRAM
#pragma surface surf Standard fullforwardshadows
struct Input
{
float4 color : COLOR;
};
float4 _TestColor;
float _Red;
float _Green;
float _Blue;
void surf (Input IN, inout SurfaceOutputStandard o)
{
o.Albedo = float3(_Red, _Green, _Blue);
o.Alpha = _TestColor.a;
}
ENDCG
}
FallBack "Diffuse"
}
(사실 여기서부터는 TestColor 부분 없어도 된다)
float값을 하나 입력받고, 기존 출력 색상에 더해주면서 밝기를 조절하는 방식이다
어떻게 그냥 float값을 더하면 밝아지는 건지 생각해보면,
모니터에 표현되는 색은 더할수록 밝아지는 가산혼합 방식이니까
단순하게 기존 색에 더해주어 밝게 만드는 방식인 것 같다
위 코드에서 추가된 부분의 코드만 정리해보면 다음과 같다
Properties
{
_BrightDark ("Brightness $ Darkness", Range(-1,1)) = 0
}
SubShader
{
CGPROGRAM
float _BrightDark;
void surf (Input IN, inout SurfaceOutputStandard o)
{
o.Albedo = float3(_Red, _Green, _Blue) + _BrightDark;
}
ENDCG
}