222 lines
12 KiB
Plaintext

Shader "Hidden/ltsother_baker"
{
Properties
{
//----------------------------------------------------------------------------------------------------------------------
// Main
[lilHDR] _Color ("Color", Color) = (1,1,1,1)
[MainTexture] _MainTex ("Texture", 2D) = "white" {}
[lilUVAnim] _MainTex_ScrollRotate ("Angle|UV Animation|Scroll|Rotate", Vector) = (0,0,0,0)
[lilHSVG] _MainTexHSVG ("Hue|Saturation|Value|Gamma", Vector) = (0,1,1,1)
_MainGradationStrength ("Gradation Strength", Range(0, 1)) = 0
[NoScaleOffset] _MainGradationTex ("Gradation Map", 2D) = "white" {}
[NoScaleOffset] _MainColorAdjustMask ("Adjust Mask", 2D) = "white" {}
//----------------------------------------------------------------------------------------------------------------------
// Main2nd
[lilToggleLeft] _UseMain2ndTex ("Use Main 2nd", Int) = 0
_Color2nd ("Color", Color) = (1,1,1,1)
_Main2ndTex ("Texture", 2D) = "white" {}
[lilAngle] _Main2ndTexAngle ("Angle", Float) = 0
[lilToggle] _Main2ndTexIsDecal ("As Decal", Int) = 0
[lilToggle] _Main2ndTexIsLeftOnly ("Left Only", Int) = 0
[lilToggle] _Main2ndTexIsRightOnly ("Right Only", Int) = 0
[lilToggle] _Main2ndTexShouldCopy ("Copy", Int) = 0
[lilToggle] _Main2ndTexShouldFlipMirror ("Flip Mirror", Int) = 0
[lilToggle] _Main2ndTexShouldFlipCopy ("Flip Copy", Int) = 0
[lilToggle] _Main2ndTexIsMSDF ("As MSDF", Int) = 0
[NoScaleOffset] _Main2ndBlendMask ("Mask", 2D) = "white" {}
[lilEnum] _Main2ndTexBlendMode ("Blend Mode|Normal|Add|Screen|Multiply", Int) = 0
//----------------------------------------------------------------------------------------------------------------------
// Main3rd
[lilToggleLeft] _UseMain3rdTex ("Use Main 3rd", Int) = 0
_Color3rd ("Color", Color) = (1,1,1,1)
_Main3rdTex ("Texture", 2D) = "white" {}
[lilAngle] _Main3rdTexAngle ("Angle", Float) = 0
[lilToggle] _Main3rdTexIsDecal ("As Decal", Int) = 0
[lilToggle] _Main3rdTexIsLeftOnly ("Left Only", Int) = 0
[lilToggle] _Main3rdTexIsRightOnly ("Right Only", Int) = 0
[lilToggle] _Main3rdTexShouldCopy ("Copy", Int) = 0
[lilToggle] _Main3rdTexShouldFlipMirror ("Flip Mirror", Int) = 0
[lilToggle] _Main3rdTexShouldFlipCopy ("Flip Copy", Int) = 0
[lilToggle] _Main3rdTexIsMSDF ("As MSDF", Int) = 0
[NoScaleOffset] _Main3rdBlendMask ("Mask", 2D) = "white" {}
[lilEnum] _Main3rdTexBlendMode ("Blend Mode|Normal|Add|Screen|Multiply", Int) = 0
//----------------------------------------------------------------------------------------------------------------------
// Alpha Mask
[lilEnumLabel] _AlphaMaskMode ("AlphaMask|", Int) = 0
_AlphaMask ("AlphaMask", 2D) = "white" {}
_AlphaMaskScale ("Scale", Float) = 1
_AlphaMaskValue ("Offset", Float) = 0
//----------------------------------------------------------------------------------------------------------------------
// Texture Packing
[NoScaleOffset] _PackingTexture1 ("Texture", 2D) = "white" {}
[NoScaleOffset] _PackingTexture2 ("Texture", 2D) = "white" {}
[NoScaleOffset] _PackingTexture3 ("Texture", 2D) = "white" {}
[NoScaleOffset] _PackingTexture4 ("Texture", 2D) = "white" {}
_PackingChannel1 ("Channel", Int) = 0
_PackingChannel2 ("Channel", Int) = 0
_PackingChannel3 ("Channel", Int) = 0
_PackingChannel4 ("Channel", Int) = 0
//----------------------------------------------------------------------------------------------------------------------
// Texture3D
[NoScaleOffset] _MainTex3D ("Texture", 3D) = "white" {}
_ResX ("ResX", Int) = 16
_ResY ("ResY", Int) = 1
}
SubShader
{
HLSLINCLUDE
*LIL_SHADER_SETTING*
ENDHLSL
Pass
{
Cull Off
ZWrite Off
ZTest Always
HLSLPROGRAM
#pragma vertex vert
#pragma fragment frag
#pragma shader_feature _ _TRIMASK _ALPHAMASK _NORMAL_DXGL _TEXTURE_PACKING _LUT3D_TO_2D
//------------------------------------------------------------------------------------------------------------------
// Shader
#define LIL_BAKER
#define LIL_WITHOUT_ANIMATION
#include "Includes/lil_pipeline_brp.hlsl"
#include "Includes/lil_common.hlsl"
#include "Includes/lil_common_appdata.hlsl"
TEXTURE2D(_PackingTexture1);
TEXTURE2D(_PackingTexture2);
TEXTURE2D(_PackingTexture3);
TEXTURE2D(_PackingTexture4);
TEXTURE3D(_MainTex3D);
uint _PackingChannel1;
uint _PackingChannel2;
uint _PackingChannel3;
uint _PackingChannel4;
uint _ResX;
uint _ResY;
struct v2f
{
float4 positionCS : SV_POSITION;
float2 uv0 : TEXCOORD0;
float tangentW : TEXCOORD1;
};
v2f vert(appdata input)
{
v2f o;
LIL_VERTEX_POSITION_INPUTS(input.positionOS, vertexInput);
o.positionCS = vertexInput.positionCS;
o.uv0 = input.uv0;
o.tangentW = input.tangentOS.w;
return o;
}
float4 frag(v2f input) : SV_Target
{
#if defined(_TRIMASK)
float4 col1 = LIL_SAMPLE_2D(_MainTex,sampler_MainTex,input.uv0);
float4 col2 = LIL_SAMPLE_2D(_Main2ndTex,sampler_Main2ndTex,input.uv0);
float4 col3 = LIL_SAMPLE_2D(_Main3rdTex,sampler_Main3rdTex,input.uv0);
float mat = lilGray(col1.rgb);
float rim = lilGray(col2.rgb);
float emi = lilGray(col3.rgb);
float4 col = float4(mat,rim,emi,1);
#elif defined(_ALPHAMASK)
float4 col = LIL_SAMPLE_2D(_MainTex,sampler_MainTex,input.uv0);
float alphaMask = LIL_SAMPLE_2D(_AlphaMask,sampler_MainTex,input.uv0).r;
alphaMask = saturate(alphaMask * _AlphaMaskScale + _AlphaMaskValue);
if(_AlphaMaskMode == 1) col.a = alphaMask;
if(_AlphaMaskMode == 2) col.a = col.a * alphaMask;
if(_AlphaMaskMode == 3) col.a = saturate(col.a + alphaMask);
if(_AlphaMaskMode == 4) col.a = saturate(col.a - alphaMask);
#elif defined(_NORMAL_DXGL)
float4 col = LIL_SAMPLE_2D(_MainTex,sampler_MainTex,input.uv0);
col.g = 1.0 - col.g;
#elif defined(_TEXTURE_PACKING)
float4 p1 = LIL_SAMPLE_2D(_PackingTexture1,sampler_linear_clamp,input.uv0);
float4 p2 = LIL_SAMPLE_2D(_PackingTexture2,sampler_linear_clamp,input.uv0);
float4 p3 = LIL_SAMPLE_2D(_PackingTexture3,sampler_linear_clamp,input.uv0);
float4 p4 = LIL_SAMPLE_2D(_PackingTexture4,sampler_linear_clamp,input.uv0);
float4 col = 1.0f;
if(_PackingChannel1 >= 4) {
col.r = dot(p1.rgb, 1.0/3.0);
} else {
col.r = p1[_PackingChannel1];
}
if(_PackingChannel2 >= 4) {
col.g = dot(p2.rgb, 1.0/3.0);
} else {
col.g = p1[_PackingChannel2];
}
if(_PackingChannel3 >= 4) {
col.b = dot(p3.rgb, 1.0/3.0);
} else {
col.b = p1[_PackingChannel3];
}
if(_PackingChannel4 >= 4) {
col.a = dot(p4.rgb, 1.0/3.0);
} else {
col.a = p1[_PackingChannel4];
}
#elif defined(_LUT3D_TO_2D)
float4 col;
float3 res = float3(_ResX, _ResY, _ResX * _ResY);
float3 resInv = rcp(float3(res.x, -res.y, res.z));
float resMin = res.z - 1;
col.r = ((uint)input.positionCS.x % (uint)res.z) / resMin;
col.g = 1.0 - ((uint)input.positionCS.y % (uint)res.z) / resMin;
col.b = ((uint)input.positionCS.x / (uint)res.z) / resMin + ((_ResY - 1 - (uint)input.positionCS.y / (uint)res.z) / resMin * _ResX);
//col.rgb = (col.rgb - col.rgb * resInv.z) + 0.5 * resInv.z;
uint w,h,d,l;
_MainTex3D.GetDimensions(0,w,h,d,l);
col.rgb = (col.rgb - col.rgb / (float)w) + 0.5 / (float)w;
col.rgb = LIL_SAMPLE_3D(_MainTex3D, sampler_linear_clamp, col.rgb).rgb;
col.a = 1;
#else
// Main
float4 col = LIL_SAMPLE_2D(_MainTex,sampler_MainTex,input.uv0);
float3 baseColor = col.rgb;
float colorAdjustMask = LIL_SAMPLE_2D(_MainColorAdjustMask, sampler_MainTex, input.uv0).r;
col.rgb = lilToneCorrection(col.rgb, _MainTexHSVG);
#if defined(LIL_FEATURE_MAIN_GRADATION_MAP)
col.rgb = lilGradationMap(col.rgb, _MainGradationTex, _MainGradationStrength);
#endif
col.rgb = lerp(baseColor, col.rgb, colorAdjustMask);
col *= _Color;
bool isRightHand = input.tangentW > 0.0;
// 2nd
UNITY_BRANCH
if(_UseMain2ndTex)
{
_Color2nd *= LIL_GET_SUBTEX(_Main2ndTex,input.uv0);
col.rgb = lilBlendColor(col.rgb, _Color2nd.rgb, LIL_SAMPLE_2D(_Main2ndBlendMask,sampler_MainTex,input.uv0).r * _Color2nd.a, _Main2ndTexBlendMode);
}
// 3rd
UNITY_BRANCH
if(_UseMain3rdTex)
{
_Color3rd *= LIL_GET_SUBTEX(_Main3rdTex,input.uv0);
col.rgb = lilBlendColor(col.rgb, _Color3rd.rgb, LIL_SAMPLE_2D(_Main3rdBlendMask,sampler_MainTex,input.uv0).r * _Color3rd.a, _Main3rdTexBlendMode);
}
#endif
return col;
}
ENDHLSL
}
}
}