rj-action-library/Runtime/Reallusion/Materials/CCMaterials.cs

81 lines
1.8 KiB
C#

using System.Diagnostics;
using System.Collections;
using System.Collections.Generic;
using System;
using Godot;
using System.Threading.Tasks;
using System.Text;
namespace Rokojori.Reallusion
{
[Tool]
[GlobalClass]
public partial class CCMaterials:Node
{
[Export]
public Node3D root;
[Export]
public bool applyProperties = false;
[ExportGroup("Hair")]
[Export]
public Material[] hairMaterials = [];
[Export]
public FloatProperty hairSpecular = FloatProperty.Create( "specular", 0 );
[Export]
public FloatProperty hairMetallic = FloatProperty.Create( "metallic", 0 );
[Export]
public FloatProperty hairRoughness = FloatProperty.Create( "roughness", 0 );
void ApplyHairProperties()
{
Apply( hairMaterials, hairSpecular );
Apply( hairMaterials, hairMetallic );
Apply( hairMaterials, hairRoughness );
}
[ExportGroup("Skin")]
[Export]
public Material[] skinMaterials = [];
[Export]
public FloatProperty skinAlbedoNoise = FloatProperty.Create( "albedoNoise", 0 );
[Export]
public FloatProperty skinAlbedoNoiseOffset = FloatProperty.Create( "albedoNoiseOffset", 0 );
void ApplySkinProperties()
{
Apply( skinMaterials, skinAlbedoNoise );
Apply( skinMaterials, skinAlbedoNoiseOffset );
}
public void Clear()
{
root = null;
hairMaterials = [];
skinMaterials = [];
}
public override void _Process( double delta )
{
if ( ! applyProperties )
{
return;
}
ApplyHairProperties();
ApplySkinProperties();
}
void Apply( Material[] materials, ShaderProperty sp )
{
for ( int i = 0; i < materials.Length; i++ )
{
sp.Apply( materials[ i ] );
}
}
}
}