2025-06-10 13:16:36 +00:00
|
|
|
using Godot;
|
|
|
|
using System.Reflection;
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
|
|
|
namespace Rokojori
|
|
|
|
{
|
|
|
|
[Tool]
|
|
|
|
[GlobalClass]
|
|
|
|
public partial class AlbedoModule:TextureModule
|
|
|
|
{
|
|
|
|
public AlbedoModule()
|
|
|
|
{
|
2025-09-26 12:00:59 +00:00
|
|
|
SetDomainNames( "albedo" );
|
|
|
|
|
2025-09-17 08:25:03 +00:00
|
|
|
_target = "ALBEDO";
|
2025-06-10 13:16:36 +00:00
|
|
|
_srgb = true;
|
2025-09-17 08:25:03 +00:00
|
|
|
_type = TextureChannelType.RGB;
|
|
|
|
scaleType = TextureChannelType.RGB;
|
2025-06-10 13:16:36 +00:00
|
|
|
}
|
|
|
|
|
2025-09-26 12:00:59 +00:00
|
|
|
|
|
|
|
|
2025-06-10 13:16:36 +00:00
|
|
|
[Export]
|
|
|
|
public TextureFilter filter = TextureFilter.Linear_MipMap_Anisotropic;
|
|
|
|
|
|
|
|
[Export]
|
|
|
|
public bool useTint = true;
|
|
|
|
|
|
|
|
[Export]
|
|
|
|
public bool srgb = true;
|
|
|
|
|
2025-09-17 08:25:03 +00:00
|
|
|
[Export]
|
2025-09-26 12:00:59 +00:00
|
|
|
public bool writeAlpha = false;
|
2025-09-17 08:25:03 +00:00
|
|
|
|
2025-06-10 13:16:36 +00:00
|
|
|
[Export]
|
|
|
|
public bool repeat = true;
|
|
|
|
|
2025-09-26 12:00:59 +00:00
|
|
|
[Export]
|
|
|
|
public string tintVarying = "";
|
|
|
|
|
2025-09-17 08:25:03 +00:00
|
|
|
[Export]
|
|
|
|
public string uvChannel = "UV";
|
|
|
|
|
2025-06-10 13:16:36 +00:00
|
|
|
[Export]
|
|
|
|
public TextureDefault textureDefault = TextureDefault.White;
|
2025-09-17 08:25:03 +00:00
|
|
|
|
|
|
|
[Export]
|
|
|
|
public AssignmentType assignmentType = AssignmentType.Set;
|
|
|
|
|
2025-09-26 12:00:59 +00:00
|
|
|
[Export]
|
|
|
|
public AlbedoOverlayLayer[] overlayLayers = [];
|
2025-09-17 08:25:03 +00:00
|
|
|
|
|
|
|
|
2025-06-10 13:16:36 +00:00
|
|
|
public override void GrabValues()
|
|
|
|
{
|
2025-09-17 08:25:03 +00:00
|
|
|
_domainMode = useTint ? DomainMode.Texture_Scale : DomainMode.Texture;
|
2025-06-10 13:16:36 +00:00
|
|
|
_textureFilter = filter;
|
|
|
|
_srgb = srgb;
|
|
|
|
_repeat = repeat;
|
|
|
|
_textureDefault = textureDefault;
|
2025-09-17 08:25:03 +00:00
|
|
|
_uvChannel = uvChannel;
|
|
|
|
|
|
|
|
_assignmentType = assignmentType;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
public override List<ShaderVariant> GetVariants( ShaderGenerationContext context )
|
|
|
|
{
|
|
|
|
var variants = base.GetVariants( context );
|
|
|
|
|
2025-09-26 12:00:59 +00:00
|
|
|
|
|
|
|
|
|
|
|
if ( ShaderPhase.Fragment == context.phase )
|
2025-09-17 08:25:03 +00:00
|
|
|
{
|
2025-09-26 12:00:59 +00:00
|
|
|
if ( tintVarying != null && tintVarying != "" )
|
|
|
|
{
|
|
|
|
var tinting = $"ALBEDO *= {tintVarying}.rgb;\n";
|
|
|
|
variants = ShaderVariant.CombineVariants( variants, ToVariants( ToCode( tinting ) ) );
|
|
|
|
}
|
|
|
|
|
|
|
|
if ( writeAlpha )
|
|
|
|
{
|
|
|
|
var value = GetSampledName() + ".a" ;
|
|
|
|
|
|
|
|
if ( useTint )
|
|
|
|
{
|
|
|
|
value += " * albedo.a";
|
|
|
|
}
|
|
|
|
|
|
|
|
if ( tintVarying != null && tintVarying != "" )
|
|
|
|
{
|
|
|
|
value += $" * {tintVarying}.a";
|
|
|
|
}
|
|
|
|
|
|
|
|
var assignment = " ALPHA *= " + value + ";\n\n";
|
|
|
|
variants = ShaderVariant.CombineVariants( variants, ToVariants( ToCode( assignment ) ) );
|
|
|
|
}
|
2025-09-17 08:25:03 +00:00
|
|
|
}
|
|
|
|
|
2025-09-26 12:00:59 +00:00
|
|
|
if ( overlayLayers != null )
|
2025-09-17 08:25:03 +00:00
|
|
|
{
|
2025-09-26 12:00:59 +00:00
|
|
|
overlayLayers.ForEach(
|
|
|
|
( layer )=>
|
|
|
|
{
|
|
|
|
var layerName = "albedo" + ( overlayLayers.IndexOf( layer ) + 2 );
|
|
|
|
var uniformGroup = "albedo" + ( overlayLayers.IndexOf( layer ) + 2 );
|
|
|
|
layer.uniformGroup = uniformGroup;
|
|
|
|
var shaderCode = layer.GetOverlayCode( context, layerName, "ALBEDO", "ALBEDO" );
|
|
|
|
|
|
|
|
if ( shaderCode == null )
|
|
|
|
{
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
variants = ShaderVariant.CombineVariants( variants, ToVariants( shaderCode ) );
|
|
|
|
}
|
|
|
|
);
|
2025-09-17 08:25:03 +00:00
|
|
|
}
|
|
|
|
|
2025-09-26 12:00:59 +00:00
|
|
|
return variants;
|
2025-09-17 08:25:03 +00:00
|
|
|
|
2025-06-10 13:16:36 +00:00
|
|
|
}
|
2025-09-17 08:25:03 +00:00
|
|
|
|
|
|
|
|
2025-06-10 13:16:36 +00:00
|
|
|
}
|
|
|
|
}
|