Colorspace Conversion 노드
설명
한 색공간 공간에서 다른 색공간 공간으로 In 입력 값을 전환한 결과를 반환합니다. 전환 시작 및 대상 공간은 노드의 드롭다운 값으로 정의됩니다.
포트
이름 | 방향 | Type | 설명 |
---|---|---|---|
In | 입력 | 벡터 3 | 입력 값 |
Out | 출력 | 벡터 3 | 출력 값 |
컨트롤
이름 | Type | 옵션 | 설명 |
---|---|---|---|
From | 드롭다운 | RGB, Linear, HSV | 전환 시작 색공간을 선택합니다. |
To | 드롭다운 | RGB, Linear, HSV | 전환 대상 색공간을 선택합니다. |
생성된 코드 예제
다음 예제 코드는 From/To 순열에 대한 이 노드의 가능한 결과 중 하나입니다.
RGB > RGB
void Unity_ColorspaceConversion_RGB_RGB_float(float3 In, out float3 Out)
{
Out = In;
}
RGB > Linear
void Unity_ColorspaceConversion_RGB_RGB_float(float3 In, out float3 Out)
{
float3 linearRGBLo = In / 12.92;;
float3 linearRGBHi = pow(max(abs((In + 0.055) / 1.055), 1.192092896e-07), float3(2.4, 2.4, 2.4));
Out = float3(In <= 0.04045) ? linearRGBLo : linearRGBHi;
}
RGB > HSV
void Unity_ColorspaceConversion_RGB_RGB_float(float3 In, out float3 Out)
{
float4 K = float4(0.0, -1.0 / 3.0, 2.0 / 3.0, -1.0);
float4 P = lerp(float4(In.bg, K.wz), float4(In.gb, K.xy), step(In.b, In.g));
float4 Q = lerp(float4(P.xyw, In.r), float4(In.r, P.yzx), step(P.x, In.r));
float D = Q.x - min(Q.w, Q.y);
float E = 1e-10;
Out = float3(abs(Q.z + (Q.w - Q.y)/(6.0 * D + E)), D / (Q.x + E), Q.x);
}
Linear > RGB
void Unity_ColorspaceConversion_RGB_RGB_float(float3 In, out float3 Out)
{
float3 sRGBLo = In * 12.92;
float3 sRGBHi = (pow(max(abs(In), 1.192092896e-07), float3(1.0 / 2.4, 1.0 / 2.4, 1.0 / 2.4)) * 1.055) - 0.055;
Out = float3(In <= 0.0031308) ? sRGBLo : sRGBHi;
}
Linear > Linear
void Unity_ColorspaceConversion_RGB_RGB_float(float3 In, out float3 Out)
{
Out = In;
}
Linear > HSV
void Unity_ColorspaceConversion_RGB_RGB_float(float3 In, out float3 Out)
{
float3 sRGBLo = In * 12.92;
float3 sRGBHi = (pow(max(abs(In), 1.192092896e-07), float3(1.0 / 2.4, 1.0 / 2.4, 1.0 / 2.4)) * 1.055) - 0.055;
float3 Linear = float3(In <= 0.0031308) ? sRGBLo : sRGBHi;
float4 K = float4(0.0, -1.0 / 3.0, 2.0 / 3.0, -1.0);
float4 P = lerp(float4(Linear.bg, K.wz), float4(Linear.gb, K.xy), step(Linear.b, Linear.g));
float4 Q = lerp(float4(P.xyw, Linear.r), float4(Linear.r, P.yzx), step(P.x, Linear.r));
float D = Q.x - min(Q.w, Q.y);
float E = 1e-10;
Out = float3(abs(Q.z + (Q.w - Q.y)/(6.0 * D + E)), D / (Q.x + E), Q.x);
}
HSV > RGB
void Unity_ColorspaceConversion_RGB_RGB_float(float3 In, out float3 Out)
{
float4 K = float4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0);
float3 P = abs(frac(In.xxx + K.xyz) * 6.0 - K.www);
Out = In.z * lerp(K.xxx, saturate(P - K.xxx), In.y);
}
HSV > Linear
void Unity_ColorspaceConversion_RGB_RGB_float(float3 In, out float3 Out)
{
float4 K = float4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0);
float3 P = abs(frac(In.xxx + K.xyz) * 6.0 - K.www);
float3 RGB = In.z * lerp(K.xxx, saturate(P - K.xxx), In.y);
float3 linearRGBLo = RGB / 12.92;
float3 linearRGBHi = pow(max(abs((RGB + 0.055) / 1.055), 1.192092896e-07), float3(2.4, 2.4, 2.4));
Out = float3(RGB <= 0.04045) ? linearRGBLo : linearRGBHi;
}
HSV > HSV
void Unity_ColorspaceConversion_RGB_RGB_float(float3 In, out float3 Out)
{
Out = In;
}