From 1d127f3ef2386532dcc2a3c289ae5be25c5f4706 Mon Sep 17 00:00:00 2001
From: DeltaDesigns <50308149+DeltaDesigns@users.noreply.github.com>
Date: Sat, 2 Dec 2023 17:47:06 -0500
Subject: [PATCH] =?UTF-8?q?The=20Big=20Merge=E2=84=A2=20(#138)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- New Map Resources tab in Activity View (map and activity resources (entities, lights, skybox elements) )
- Moved Terrain to Map Resources tab
- Map background entities (Skybox stuff) (WQ+)
- Map decals (textures)
- Basic map lights (point lights)
- Fix terrain UVs
- Fix Shadowkeep terrain
- Fix Shadowkeep entity external materials
- Source 2 shader updates
- Fixed Vertex Color for Statics (WQ+)
- Names for Activity Entities
- Fixed vertex weights
- Various fixes and smaller changes
Huge thanks to @nblockbuster @cohaereo and @MontagueM for help and discoveries
---
AtlasSharp/AtlasView.xaml.cs | 3 +
Charm/ActivityMapEntityView.xaml | 204 +
Charm/ActivityMapEntityView.xaml.cs | 729 +
Charm/ActivityMapView.xaml | 138 +-
Charm/ActivityMapView.xaml.cs | 96 +-
Charm/ActivityView.xaml | 37 +-
Charm/ActivityView.xaml.cs | 8 +-
Charm/DevView.xaml.cs | 23 +
Charm/EntityView.xaml.cs | 9 +-
Charm/ExportControl.xaml.cs | 4 +-
Charm/MainMenuView.xaml.cs | 9 +-
Charm/MainViewModel.cs | 9 +-
Charm/MapView.xaml.cs | 166 +-
Charm/TagListView.xaml.cs | 30 +-
Tiger/Exporters/Exporter.cs | 112 +-
Tiger/Exporters/FbxExporter.cs | 13 +-
Tiger/Exporters/MaterialExporter.cs | 2 +
Tiger/Exporters/MetadataExporter.cs | 165 +-
Tiger/Exporters/Source2Handler.cs | 185 +-
Tiger/Exporters/blender_api_template.py | 11679 ++++++-----------
Tiger/Helpers.cs | 18 +
Tiger/Schema/Activity/Activity.cs | 215 +-
Tiger/Schema/Activity/ActivityStructsSK.cs | 46 +-
Tiger/Schema/Activity/ActivityStructsWQ.cs | 93 +-
Tiger/Schema/Entity/Entity.cs | 43 +
Tiger/Schema/Entity/EntityModel.cs | 39 +-
Tiger/Schema/Entity/EntityStructs.cs | 194 +-
Tiger/Schema/Investment/InvestmentHandler.cs | 2 +-
Tiger/Schema/Model/VertexBuffer.cs | 65 +-
Tiger/Schema/Shaders/DirectXTexUtil.cs | 6 +-
Tiger/Schema/Shaders/Material.cs | 17 +-
Tiger/Schema/Shaders/S2ShaderConverter.cs | 444 +-
Tiger/Schema/Shaders/Texture.cs | 7 +-
Tiger/Schema/Shaders/TextureExtractor.cs | 10 +-
Tiger/Schema/Static/StaticMapData.cs | 324 +-
Tiger/Schema/Static/Terrain.cs | 286 +-
Tiger/Schema/Test.cs | 60 +-
Tiger/Schema/Vector.cs | 6 +
Tiger/SchemaTypes.cs | 4 +
39 files changed, 6687 insertions(+), 8813 deletions(-)
create mode 100644 Charm/ActivityMapEntityView.xaml
create mode 100644 Charm/ActivityMapEntityView.xaml.cs
diff --git a/AtlasSharp/AtlasView.xaml.cs b/AtlasSharp/AtlasView.xaml.cs
index 7f846e1e..49ad2fe4 100644
--- a/AtlasSharp/AtlasView.xaml.cs
+++ b/AtlasSharp/AtlasView.xaml.cs
@@ -50,6 +50,9 @@ public partial class AtlasView : UserControl
public AtlasView()
{
+ if (!ConfigSubsystem.Get().GetUseCustomRenderer())
+ return;
+
InitializeComponent();
ImageHost.Loaded += ImageHost_Loaded;
diff --git a/Charm/ActivityMapEntityView.xaml b/Charm/ActivityMapEntityView.xaml
new file mode 100644
index 00000000..2ad3c493
--- /dev/null
+++ b/Charm/ActivityMapEntityView.xaml
@@ -0,0 +1,204 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Charm/ActivityMapEntityView.xaml.cs b/Charm/ActivityMapEntityView.xaml.cs
new file mode 100644
index 00000000..93e91f64
--- /dev/null
+++ b/Charm/ActivityMapEntityView.xaml.cs
@@ -0,0 +1,729 @@
+using System;
+using System.Collections;
+using System.Collections.Concurrent;
+using System.Collections.Generic;
+using System.Collections.ObjectModel;
+using System.Data;
+using System.IO;
+using System.Linq;
+using System.Numerics;
+using System.Security.Policy;
+using System.Threading.Tasks;
+using System.Windows;
+using System.Windows.Controls;
+using Arithmic;
+using NVorbis.Contracts;
+using Tiger;
+using Tiger.Exporters;
+using Tiger.Schema;
+using Tiger.Schema.Activity;
+using Tiger.Schema.Activity.DESTINY2_SHADOWKEEP_2601;
+using Tiger.Schema.Activity.DESTINY2_WITCHQUEEN_6307;
+using Tiger.Schema.Entity;
+using Tiger.Schema.Static;
+
+namespace Charm;
+
+public partial class ActivityMapEntityView : UserControl
+{
+ private FbxHandler _globalFbxHandler = null;
+ private static ConfigSubsystem _config = CharmInstance.GetSubsystem();
+
+ public ActivityMapEntityView()
+ {
+ InitializeComponent();
+ _globalFbxHandler = new FbxHandler(false);
+ }
+
+ public void LoadUI(IActivity activity)
+ {
+ MapList.ItemsSource = GetMapList(activity);
+ ExportControl.SetExportFunction(Export, (int)ExportTypeFlag.Full, true);
+ ExportControl.SetExportInfo(activity.FileHash);
+ }
+
+ private ObservableCollection GetMapList(IActivity activity)
+ {
+ var maps = new ObservableCollection();
+ foreach (var bubble in activity.EnumerateBubbles())
+ {
+ DisplayEntBubble displayMap = new();
+ displayMap.Name = $"{bubble.Name}";
+ displayMap.Hash = bubble.MapReference.TagData.ChildMapReference.Hash;
+ displayMap.LoadType = DisplayEntBubble.Type.Bubble;
+ displayMap.Data = displayMap;
+ maps.Add(displayMap);
+ }
+
+ if (Strategy.CurrentStrategy >= TigerStrategy.DESTINY2_BEYONDLIGHT_3402)
+ {
+ DisplayEntBubble displayActivity = new();
+ displayActivity.Name = $"{PackageResourcer.Get().GetActivityName(activity.FileHash)}";
+ displayActivity.Hash = $"{activity.FileHash}";
+ displayActivity.LoadType = DisplayEntBubble.Type.Activity;
+ displayActivity.Data = displayActivity;
+ maps.Add(displayActivity);
+ }
+ else
+ {
+ var vals = PackageResourcer.Get().GetAllHashes();
+ foreach(var val in vals)
+ {
+ Tag tag = FileResourcer.Get().GetSchemaTag(val);
+ string activityName = PackageResourcer.Get().GetActivityName(activity.FileHash).Split(':')[1];
+
+ if (tag.TagData.ActivityDevName.Value.Contains(activityName)) //This is probably really bad...
+ {
+ DisplayEntBubble displayActivity = new();
+ displayActivity.Name = $"{PackageResourcer.Get().GetActivityName(val)}";
+ displayActivity.Hash = $"{tag.Hash}";
+ displayActivity.ParentHash = $"{activity.FileHash}";
+ displayActivity.LoadType = DisplayEntBubble.Type.Activity;
+ displayActivity.Data = displayActivity;
+ maps.Add(displayActivity);
+ }
+ }
+ }
+
+ return maps;
+ }
+
+ private void GetBubbleContentsButton_OnClick(object sender, RoutedEventArgs e)
+ {
+ DisplayEntBubble tagData = (sender as Button).Tag as DisplayEntBubble; //apparently this works..?
+ if(tagData.LoadType == DisplayEntBubble.Type.Bubble)
+ {
+ FileHash hash = new FileHash(tagData.Hash);
+ Tag bubbleMaps = FileResourcer.Get().GetSchemaTag(hash);
+ PopulateEntityContainerList(bubbleMaps);
+ }
+ else
+ {
+ FileHash hash = new FileHash(tagData.Hash);
+ if(Strategy.CurrentStrategy <= TigerStrategy.DESTINY2_SHADOWKEEP_2999)
+ {
+ FileHash parentHash = new FileHash(tagData.ParentHash);
+ IActivity activity = FileResourcer.Get().GetFileInterface(parentHash);
+ PopulateActivityEntityContainerList(activity, hash);
+ }
+ else
+ {
+ IActivity activity = FileResourcer.Get().GetFileInterface(hash);
+ PopulateActivityEntityContainerList(activity);
+ }
+
+ }
+ }
+
+ private void EntityMapPart_OnCheck(object sender, RoutedEventArgs e)
+ {
+ if ((sender as CheckBox).Tag is null)
+ return;
+
+ DisplayEntityMap tagData = (sender as CheckBox).Tag as DisplayEntityMap; //apparently this works..?
+
+ foreach (DisplayEntityMap item in EntityContainerList.Items)
+ {
+ if (item.Name == "Select all")
+ continue;
+
+ if (item.Selected)
+ {
+ if (tagData.EntityType == DisplayEntityMap.Type.Map)
+ {
+ Tag map = FileResourcer.Get().GetSchemaTag(tagData.Hash);
+ if (map == null)
+ continue;
+
+ ConcurrentBag sMapDataTables = new ConcurrentBag(map.TagData.MapDataTables.Select(entry => entry.MapDataTable.Hash));
+ PopulateEntityList(sMapDataTables.ToList(), null);
+ }
+ else
+ {
+ PopulateEntityList(tagData.DataTables, tagData.WorldIDs);
+ }
+ }
+ }
+ }
+
+ private void PopulateEntityContainerList(Tag bubbleMaps)
+ {
+ ConcurrentBag items = new ConcurrentBag();
+ Parallel.ForEach(bubbleMaps.TagData.MapResources, m =>
+ {
+ if (m.MapContainer.TagData.MapDataTables.Count > 0)
+ {
+ DisplayEntityMap entityMap = new();
+ entityMap.Name = $"{m.MapContainer.Hash}";
+ entityMap.Hash = m.MapContainer.Hash;
+ entityMap.Count = m.MapContainer.TagData.MapDataTables.Count;
+ entityMap.EntityType = DisplayEntityMap.Type.Map;
+ entityMap.DataTables = m.MapContainer.TagData.MapDataTables.Select(entry => entry.MapDataTable.Hash).ToList();
+ entityMap.Data = entityMap;
+
+ items.Add(entityMap);
+ }
+ });
+ var sortedItems = new List(items);
+ sortedItems.Sort((a, b) => b.Count.CompareTo(a.Count));
+ sortedItems.Insert(0, new DisplayEntityMap
+ {
+ Name = "Select all"
+ });
+ EntityContainerList.ItemsSource = sortedItems;
+ }
+
+ private void PopulateActivityEntityContainerList(IActivity activity, FileHash UnkActivity = null)
+ {
+ ConcurrentBag items = new ConcurrentBag();
+
+ foreach (var entry in activity.EnumerateActivityEntities(UnkActivity))
+ {
+ if(entry.DataTables.Count > 0)
+ {
+ DisplayEntityMap entityMap = new();
+ entityMap.Name = $"{entry.BubbleName} {entry.ActivityPhaseName2}: {entry.DataTables.Count} Entries";
+ entityMap.Hash = entry.Hash;
+ entityMap.Count = entry.DataTables.Count;
+ entityMap.EntityType = DisplayEntityMap.Type.Activity;
+ entityMap.DataTables = entry.DataTables;
+ entityMap.WorldIDs = entry.WorldIDs;
+ entityMap.Data = entityMap;
+
+ items.Add(entityMap);
+ }
+ }
+
+ var sortedItems = new List(items);
+ sortedItems.Sort((a, b) => a.Name.CompareTo(b.Name));
+ sortedItems.Insert(0, new DisplayEntityMap
+ {
+ Name = "Select all"
+ });
+ EntityContainerList.ItemsSource = sortedItems;
+ }
+
+ private void PopulateEntityList(List dataTables, Dictionary>? worldIDs)
+ {
+ ConcurrentBag items = new ConcurrentBag();
+ ConcurrentDictionary> entities = new();
+
+ Parallel.ForEach(dataTables, data =>
+ {
+ Tag entries = FileResourcer.Get().GetSchemaTag(data);
+ entries.TagData.DataEntries.ForEach(entry =>
+ {
+ if (entry is SMapDataEntry dynamicResource)
+ {
+ if (!entities.ContainsKey(dynamicResource.GetEntityHash()))
+ {
+ entities[dynamicResource.GetEntityHash()] = new ConcurrentBag();
+ }
+ entities[dynamicResource.GetEntityHash()].Add(dynamicResource.WorldID);
+ }
+ });
+ });
+
+ entities.AsParallel().ForAll(entityHash =>
+ {
+ Entity entity = FileResourcer.Get().GetFile(typeof(Entity), entityHash.Key);
+ if (entity.HasGeometry())
+ {
+ foreach(var namedEnt in entityHash.Value)
+ {
+ if(worldIDs is not null && worldIDs.ContainsKey(namedEnt))
+ {
+ //This is gross
+ if (!items.Any(item => item.CompareByName(new DisplayEntityList { Name = $"{worldIDs[namedEnt].Keys.ElementAt(0)}:{worldIDs[namedEnt].Values.ElementAt(0)}" })))
+ {
+ var Name = worldIDs[namedEnt].Keys.ElementAt(0);
+ var SubName = worldIDs[namedEnt].Values.ElementAt(0);
+ items.Add(new DisplayEntityList
+ {
+ DisplayName = $"{Name}: {worldIDs.Count(kvp => kvp.Value == worldIDs[namedEnt])} Instances",
+ SubName = $"{SubName}",
+ Name = $"{Name}:{SubName}",
+ Hash = entity.Hash,
+ Instances = worldIDs.Count(kvp => kvp.Value == worldIDs[namedEnt])
+ });
+ }
+ }
+ }
+ if (!items.Any(item => item.CompareByHash(new DisplayEntityList { Hash = entity.Hash }))) //Dont want duplicate entries if a named entity was already added
+ {
+ items.Add(new DisplayEntityList
+ {
+ DisplayName = $"{entity.Hash}: {entityHash.Value.Count} Instances",
+ Name = entity.Hash,
+ Hash = entity.Hash,
+ Instances = entityHash.Value.Count
+ });
+ }
+ }
+ });
+
+ var sortedItems = new List(items);
+ sortedItems.Sort((a, b) => b.Instances.CompareTo(a.Instances));
+ sortedItems.Insert(0, new DisplayEntityList
+ {
+ DisplayName = "All Entities",
+ Parent = dataTables
+ });
+ EntitiesList.ItemsSource = sortedItems;
+ }
+
+ public async void Export(ExportInfo info)
+ {
+ IActivity activity = FileResourcer.Get().GetFileInterface(info.Hash);
+ Log.Info($"Exporting activity data name: {PackageResourcer.Get().GetActivityName(activity.FileHash)}, hash: {activity.FileHash}, export type {info.ExportType.ToString()}");
+ Dispatcher.Invoke(() =>
+ {
+ MapControl.Visibility = Visibility.Hidden;
+ });
+ var maps = new ConcurrentDictionary, string>();
+ bool bSelectAll = false;
+ foreach (DisplayEntityMap item in EntityContainerList.Items)
+ {
+ if (item.Selected && item.Name == "Select all")
+ {
+ bSelectAll = true;
+ Log.Info($"Selected all maps");
+ }
+ else
+ {
+ if (item.Selected || bSelectAll)
+ {
+ if (item.DataTables is null)
+ continue;
+ maps.TryAdd(item.DataTables, item.Hash);
+ Log.Info($"Selected map: {item.Hash}");
+ }
+ }
+ }
+
+ if (maps.Count == 0)
+ {
+ Log.Error("No maps selected for export.");
+ MessageBox.Show("No maps selected for export.");
+ return;
+ }
+
+ List mapStages = maps.Select((x, i) => $"Exporting {i + 1}/{maps.Count}").ToList();
+ mapStages.Add("Finishing Export");
+ MainWindow.Progress.SetProgressStages(mapStages);
+
+ Parallel.ForEach(maps, map =>
+ {
+ ExportFull(map.Key, map.Value);
+ MainWindow.Progress.CompleteStage();
+ });
+
+ Tiger.Exporters.Exporter.Get().Export();
+
+ MainWindow.Progress.CompleteStage();
+
+ Dispatcher.Invoke(() =>
+ {
+ MapControl.Visibility = Visibility.Visible;
+ });
+ Log.Info($"Exported activity data name: {PackageResourcer.Get().GetActivityName(activity.FileHash)}, hash: {activity.FileHash}");
+ MessageBox.Show("Activity map data exported completed.");
+ }
+
+ public static void ExportFull(List dataTables, string hash)
+ {
+ string savePath = _config.GetExportSavePath() + $"/{hash}";
+ if (_config.GetSingleFolderMapsEnabled())
+ {
+ savePath = _config.GetExportSavePath() + "/Maps";
+ }
+
+ Directory.CreateDirectory(savePath);
+ ExtractDataTables(dataTables, hash, savePath);
+ if (_config.GetIndvidualStaticsEnabled())
+ {
+ Directory.CreateDirectory(savePath + "/Entities");
+ ExportIndividual(dataTables, hash, savePath);
+ }
+
+ if (_config.GetUnrealInteropEnabled())
+ {
+ AutomatedExporter.SaveInteropUnrealPythonFile(savePath, hash, AutomatedExporter.ImportType.Map, _config.GetOutputTextureFormat(), _config.GetSingleFolderMapsEnabled());
+ }
+ }
+
+ private static void ExtractDataTables(List dataTables, string hash, string savePath)
+ {
+ // todo these scenes can be combined
+ ExporterScene dynamicPointScene = Exporter.Get().CreateScene($"{hash}_EntityPoints", ExportType.EntityPoints);
+ ExporterScene dynamicScene = Exporter.Get().CreateScene($"{hash}_Entities", ExportType.Map);
+ ExporterScene skyScene = Exporter.Get().CreateScene($"{hash}_SkyEnts", ExportType.Map);
+ ExporterScene terrainScene = Exporter.Get().CreateScene($"{hash}_Terrain", ExportType.Terrain);
+
+ Parallel.ForEach(dataTables, data =>
+ {
+ var dataTable = FileResourcer.Get().GetSchemaTag(data);
+ dataTable.TagData.DataEntries.ForEach(entry =>
+ {
+ Entity entity = FileResourcer.Get().GetFile(entry.GetEntityHash());
+ if (entity.HasGeometry())
+ {
+ dynamicScene.AddMapEntity(entry, entity);
+ entity.SaveMaterialsFromParts(dynamicScene, entity.Load(ExportDetailLevel.MostDetailed));
+ }
+ else
+ dynamicPointScene.AddEntityPoints(entry);
+
+ switch (entry.DataResource.GetValue(dataTable.GetReader()))
+ {
+ case SMapSkyEntResource skyResource:
+ foreach (var element in skyResource.Unk10.TagData.Unk08)
+ {
+ if (element.Unk60.TagData.Unk08 is null)
+ continue;
+
+ Matrix4x4 matrix = new Matrix4x4(
+ element.Unk00.X, element.Unk00.Y, element.Unk00.Z, element.Unk00.W,
+ element.Unk10.X, element.Unk10.Y, element.Unk10.Z, element.Unk10.W,
+ element.Unk20.X, element.Unk20.Y, element.Unk20.Z, element.Unk20.W,
+ element.Unk30.X, element.Unk30.Y, element.Unk30.Z, element.Unk30.W
+ );
+
+ System.Numerics.Vector3 scale = new();
+ System.Numerics.Vector3 trans = new();
+ Quaternion quat = new();
+ Matrix4x4.Decompose(matrix, out scale, out quat, out trans);
+
+ skyScene.AddMapModel(element.Unk60.TagData.Unk08,
+ new Tiger.Schema.Vector4(trans.X, trans.Y, trans.Z, 1.0f),
+ new Tiger.Schema.Vector4(quat.X, quat.Y, quat.Z, quat.W),
+ new Tiger.Schema.Vector3(scale.X, scale.Y, scale.Z));
+
+ foreach (DynamicMeshPart part in element.Unk60.TagData.Unk08.Load(ExportDetailLevel.MostDetailed, null))
+ {
+ if (part.Material == null) continue;
+ skyScene.Materials.Add(new ExportMaterial(part.Material));
+ }
+ }
+ break;
+ case CubemapResource cubemap:
+ dynamicScene.AddCubemap(cubemap);
+ break;
+ case SMapLightResource mapLight:
+ dynamicScene.AddMapLight(mapLight);
+ break;
+ case SMapSpotLightResource spotLight:
+ if (spotLight.Unk10 is not null)
+ dynamicScene.AddMapSpotLight(entry, spotLight);
+ break;
+ case SMapDecalsResource decals:
+ if (decals.MapDecals is null || decals.MapDecals.TagData.DecalResources is null)
+ return;
+
+ dynamicScene.AddDecals(decals);
+ foreach (var item in decals.MapDecals.TagData.DecalResources)
+ {
+ if (item.StartIndex >= 0 && item.StartIndex < decals.MapDecals.TagData.Locations.Count)
+ {
+ for (int i = item.StartIndex; i < item.StartIndex + item.Count && i < decals.MapDecals.TagData.Locations.Count; i++)
+ {
+ dynamicScene.Materials.Add(new ExportMaterial(item.Material));
+ }
+ }
+ }
+ break;
+ case SMapTerrainResource terrain:
+ terrain.Terrain.LoadIntoExporter(terrainScene, savePath, _config.GetUnrealInteropEnabled() || _config.GetS2ShaderExportEnabled());
+ break;
+ default:
+ break;
+ }
+ });
+ });
+ }
+
+ private static void ExportIndividual(List dataTables, string hash, string savePath)
+ {
+ Parallel.ForEach(dataTables, data =>
+ {
+ var dataTable = FileResourcer.Get().GetSchemaTag(data);
+ dataTable.TagData.DataEntries.ForEach(entry =>
+ {
+ Entity entity = FileResourcer.Get().GetFile(entry.GetEntityHash());
+ if (entity.HasGeometry())
+ {
+ ExporterScene dynamicScene = Exporter.Get().CreateScene(entity.Hash, ExportType.EntityInMap);
+ dynamicScene.AddEntity(entry.GetEntityHash(), entity.Load(ExportDetailLevel.MostDetailed), entity.Skeleton?.GetBoneNodes());
+ entity.SaveMaterialsFromParts(dynamicScene, entity.Load(ExportDetailLevel.MostDetailed));
+
+ if (_config.GetS2VMDLExportEnabled())
+ {
+ Source2Handler.SaveEntityVMDL($"{savePath}/Entities", entity);
+ }
+ }
+ if (entry.DataResource.GetValue(dataTable.GetReader()) is SMapSkyEntResource skyResource)
+ {
+ foreach (var element in skyResource.Unk10.TagData.Unk08)
+ {
+ if (element.Unk60.TagData.Unk08 is null)
+ continue;
+
+ ExporterScene skyScene = Exporter.Get().CreateScene(element.Unk60.TagData.Unk08.Hash, ExportType.EntityInMap);
+ skyScene.AddModel(element.Unk60.TagData.Unk08);
+
+ if (_config.GetS2VMDLExportEnabled())
+ {
+ Source2Handler.SaveEntityVMDL($"{savePath}/Entities", element.Unk60.TagData.Unk08.Hash, element.Unk60.TagData.Unk08.Load(ExportDetailLevel.MostDetailed, null));
+ }
+ }
+ }
+ if (entry.DataResource.GetValue(dataTable.GetReader()) is SMapTerrainResource terrainArrangement)
+ {
+ ExporterScene staticScene = Exporter.Get().CreateScene($"{terrainArrangement.Terrain.Hash}_Terrain", ExportType.StaticInMap);
+ terrainArrangement.Terrain.LoadIntoExporter(staticScene, savePath, _config.GetUnrealInteropEnabled() || _config.GetS2ShaderExportEnabled(), true);
+ }
+ });
+ });
+ }
+
+ private async void EntityMapView_OnClick(object sender, RoutedEventArgs e)
+ {
+ var s = sender as Button;
+ var dc = s.DataContext as DisplayEntityMap;
+ Log.Info($"Loading UI for static map hash: {dc.Name}");
+ MapControl.Clear();
+ MapControl.Visibility = Visibility.Hidden;
+ var lod = MapControl.ModelView.GetSelectedLod();
+ if (dc.Name == "Select all")
+ {
+ var items = EntityContainerList.Items.Cast().Where(x => x.Name != "Select all");
+ List mapStages = items.Select(x => $"loading to ui: {x.Hash}").ToList();
+ if (mapStages.Count == 0)
+ {
+ Log.Error("No entries available for viewing.");
+ MessageBox.Show("No entries available for viewing.");
+ return;
+ }
+ MainWindow.Progress.SetProgressStages(mapStages);
+ await Task.Run(() =>
+ {
+ foreach (DisplayEntityMap item in items)
+ {
+ if(item.EntityType == DisplayEntityMap.Type.Map)
+ {
+ Tag tag = FileResourcer.Get().GetSchemaTag(new FileHash(item.Hash));
+ foreach (var datatable in tag.TagData.MapDataTables)
+ {
+ MapControl.LoadMap(datatable.MapDataTable.Hash, lod, true);
+ }
+ MainWindow.Progress.CompleteStage();
+ }
+ else
+ {
+ foreach (var datatable in item.DataTables)
+ {
+ MapControl.LoadMap(datatable, lod, true);
+ }
+ MainWindow.Progress.CompleteStage();
+ }
+ }
+ });
+ }
+ else
+ {
+ MainWindow.Progress.SetProgressStages(new List { dc.Hash });
+ await Task.Run(() =>
+ {
+ if (dc.EntityType == DisplayEntityMap.Type.Map)
+ {
+ Tag tag = FileResourcer.Get().GetSchemaTag(new FileHash(dc.Hash));
+ foreach (var datatable in tag.TagData.MapDataTables)
+ {
+ MapControl.LoadMap(datatable.MapDataTable.Hash, lod, true);
+ }
+ MainWindow.Progress.CompleteStage();
+ }
+ else
+ {
+ foreach (var datatable in dc.DataTables)
+ {
+ MapControl.LoadMap(datatable, lod, true);
+ }
+ MainWindow.Progress.CompleteStage();
+ }
+ });
+ }
+ MapControl.Visibility = Visibility.Visible;
+ }
+
+ private async void EntityView_OnClick(object sender, RoutedEventArgs e)
+ {
+ var s = sender as Button;
+ var dc = s.DataContext as DisplayEntityList;
+ MapControl.Clear();
+ Log.Info($"Loading UI for entity: {dc.Name}");
+ MapControl.Visibility = Visibility.Hidden;
+ var lod = MapControl.ModelView.GetSelectedLod();
+ if (dc.DisplayName == "All Entities")
+ {
+ var items = dc.Parent;
+ List mapStages = items.Select(x => $"Loading to UI: {x}").ToList();
+ if (mapStages.Count == 0)
+ {
+ Log.Error("No entities available for view.");
+ MessageBox.Show("No entities available for view.");
+ return;
+ }
+
+ MainWindow.Progress.SetProgressStages(mapStages);
+ await Task.Run(() =>
+ {
+ foreach (var datatable in items)
+ {
+ var mapDataTable = FileResourcer.Get().GetSchemaTag(datatable);
+ MapControl.LoadMap(mapDataTable.Hash, lod, true);
+ MainWindow.Progress.CompleteStage();
+ }
+ });
+ }
+ else
+ {
+ Entity entity = FileResourcer.Get().GetFile(dc.Hash);
+ MainWindow.Progress.SetProgressStages(new List { $"Loading Entity to UI: {entity.Hash}" });
+ List entities = new List { entity };
+ entities.AddRange(entity.GetEntityChildren());
+ await Task.Run(() =>
+ {
+ MapControl.LoadEntity(entities, _globalFbxHandler);
+ MainWindow.Progress.CompleteStage();
+ });
+ }
+ MapControl.Visibility = Visibility.Visible;
+ }
+
+ private async void EntityExport_OnClick(object sender, RoutedEventArgs e)
+ {
+ var s = sender as Button;
+ var dc = s.DataContext as DisplayEntityList;
+ Log.Info($"Exporting entity: {dc.Name}");
+ MapControl.Visibility = Visibility.Hidden;
+
+ if (dc.DisplayName == "All Entities")
+ {
+ var items = dc.Parent;
+ List mapStages = items.Select(x => $"Exporting Entities: {x}").ToList();
+ if (mapStages.Count == 0)
+ {
+ Log.Error("No entries available for export.");
+ MessageBox.Show("No entries available for export.");
+ return;
+ }
+
+ MainWindow.Progress.SetProgressStages(mapStages);
+ await Task.Run(() =>
+ {
+ foreach (var datatable in items)
+ {
+ var mapDataTable = FileResourcer.Get().GetSchemaTag(datatable);
+ foreach (var entry in mapDataTable.TagData.DataEntries)
+ {
+ Entity entity = FileResourcer.Get().GetFile(entry.GetEntityHash());
+ if(entity.HasGeometry())
+ {
+ List entities = new List { entity };
+ entities.AddRange(entity.GetEntityChildren());
+ EntityView.Export(entities, entity.Hash, ExportTypeFlag.Full);
+ }
+ }
+ MainWindow.Progress.CompleteStage();
+ }
+ });
+ }
+ else
+ {
+ FileHash tagHash = new FileHash(dc.Hash);
+ MainWindow.Progress.SetProgressStages(new List { $"Exporting Entity: {tagHash}" });
+ await Task.Run(() =>
+ {
+ Entity entity = FileResourcer.Get().GetFile(tagHash);
+ List entities = new List { entity };
+ entities.AddRange(entity.GetEntityChildren());
+ EntityView.Export(entities, entity.Hash, ExportTypeFlag.Full);
+ MainWindow.Progress.CompleteStage();
+ });
+ }
+ MapControl.Visibility = Visibility.Visible;
+ }
+
+ public void Dispose()
+ {
+ MapControl.Dispose();
+ }
+}
+
+public class DisplayEntBubble
+{
+ public string Name { get; set; }
+ public string Hash { get; set; }
+ public string ParentHash { get; set; }
+ public Type LoadType { get; set; } //this kinda sucks but dont want to have 2 seperate tabs for map and activity entities
+ public DisplayEntBubble Data { get; set; }
+
+ public enum Type
+ {
+ Bubble,
+ Activity
+ }
+}
+
+public class DisplayEntityMap
+{
+ public string Name { get; set; }
+ public string Hash { get; set; }
+ public int Count { get; set; }
+
+ public bool Selected { get; set; }
+ public Type EntityType { get; set; }
+ public List DataTables { get; set; }
+ public Dictionary> WorldIDs { get; set; }
+ public DisplayEntityMap Data { get; set; }
+
+ public enum Type
+ {
+ Map,
+ Activity
+ }
+}
+
+public class DisplayEntityList
+{
+ public string DisplayName { get; set; }
+ public string SubName { get; set; }
+ public string Name { get; set; }
+ public string Hash { get; set; }
+ public List Parent { get; set; }
+ public int Instances { get; set; }
+
+ public bool Selected { get; set; }
+
+ //public override bool Equals(object obj)
+ //{
+ // var other = obj as DisplayEntityList;
+ // return other != null && Hash == other.Hash;
+ //}
+
+ public bool CompareByHash(DisplayEntityList other)
+ {
+ return Hash == other.Hash;
+ }
+
+ public bool CompareByName(DisplayEntityList other)
+ {
+ return Name == other.Name;
+ }
+
+ public override int GetHashCode()
+ {
+ return Hash?.GetHashCode() ?? 0;
+ }
+}
diff --git a/Charm/ActivityMapView.xaml b/Charm/ActivityMapView.xaml
index 97232468..ea92cc37 100644
--- a/Charm/ActivityMapView.xaml
+++ b/Charm/ActivityMapView.xaml
@@ -1,11 +1,13 @@
-
+
@@ -14,24 +16,47 @@
-
-
+
+
-
+
-
-
-
+
+
+
-
@@ -42,13 +67,25 @@
-
-
-
+
+
+
-
-
+
+
@@ -69,48 +106,57 @@
-
+
-
+
-
+
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
-
+
diff --git a/Charm/ActivityMapView.xaml.cs b/Charm/ActivityMapView.xaml.cs
index c3986ed6..42b2330f 100644
--- a/Charm/ActivityMapView.xaml.cs
+++ b/Charm/ActivityMapView.xaml.cs
@@ -28,7 +28,7 @@ public ActivityMapView()
public void LoadUI(IActivity activity)
{
MapList.ItemsSource = GetMapList(activity);
- ExportControl.SetExportFunction(ExportFull, (int)ExportTypeFlag.Full | (int)ExportTypeFlag.Minimal | (int)ExportTypeFlag.ArrangedMap | (int)ExportTypeFlag.TerrainOnly, true);
+ ExportControl.SetExportFunction(ExportFull, (int)ExportTypeFlag.Full | (int)ExportTypeFlag.ArrangedMap, true);
ExportControl.SetExportInfo(activity.FileHash);
}
@@ -66,23 +66,6 @@ private void GetBubbleContentsButton_OnClick(object sender, RoutedEventArgs e)
PopulateStaticList(bubbleMaps);
}
- private void StaticMapPart_OnCheck(object sender, RoutedEventArgs e)
- {
- FileHash hash = new FileHash((sender as CheckBox).Tag as string);
- Tag map = FileResourcer.Get().GetSchemaTag(hash);
-
- foreach (DisplayStaticMap item in StaticList.Items)
- {
- if (item.Name == "Select all")
- continue;
-
- // if (item.Selected)
- // {
- // PopulateDynamicsList(map);
- // }
- }
- }
-
private void PopulateStaticList(Tag bubbleMaps)
{
ConcurrentBag items = new ConcurrentBag();
@@ -95,9 +78,8 @@ private void PopulateStaticList(Tag bubbleMaps)
{
StaticMapData? tag = mapDataTable.TagData.DataEntries[0].DataResource.GetValue(mapDataTable.GetReader())?.StaticMapParent.TagData.StaticMap;
if (tag == null)
- {
return; // todo sk broke this
- }
+
items.Add(new DisplayStaticMap
{
Hash = m.MapContainer.Hash,
@@ -116,48 +98,6 @@ private void PopulateStaticList(Tag bubbleMaps)
StaticList.ItemsSource = sortedItems;
}
- private void PopulateDynamicsList(Tag map)//(Tag bubbleMaps)
- {
-
- ConcurrentBag items = new ConcurrentBag();
- Parallel.ForEach(map.TagData.MapDataTables, data =>
- {
- data.MapDataTable.TagData.DataEntries.ForEach(entry =>
- {
- if (entry is SMapDataEntry dynamicResource)
- {
- Entity entity = FileResourcer.Get().GetFile(typeof(Entity), dynamicResource.GetEntityHash());
-
- if (entity.Model != null)
- {
- items.Add(new DisplayDynamicMap
- {
- Hash = dynamicResource.GetEntityHash(),
- Name = $"{dynamicResource.GetEntityHash()}: {entity.Model.TagData.Meshes.Count} meshes",
- Models = entity.Model.TagData.Meshes.Count
- });
- }
- else
- {
- items.Add(new DisplayDynamicMap
- {
- Hash = dynamicResource.GetEntityHash(),
- Name = $"{dynamicResource.GetEntityHash()}: 0 meshes",
- Models = 0
- });
- }
- }
- });
- });
- var sortedItems = new List(items);
- sortedItems.Sort((a, b) => b.Models.CompareTo(a.Models));
- sortedItems.Insert(0, new DisplayDynamicMap
- {
- Name = "Select all"
- });
- DynamicsList.ItemsSource = sortedItems;
- }
-
public async void ExportFull(ExportInfo info)
{
// todo figure out how to make this work
@@ -199,24 +139,7 @@ public async void ExportFull(ExportInfo info)
// MainWindow.Progress.SetProgressStages(new List { "exporting activity map data parallel" });
Parallel.ForEach(maps, map =>
{
- if (info.ExportType == ExportTypeFlag.Full)
- {
- MapView.ExportFullMap(map);
- MapView.ExportTerrainMap(map);
- }
- else if (info.ExportType == ExportTypeFlag.TerrainOnly)
- {
- MapView.ExportTerrainMap(map);
- }
- else if (info.ExportType == ExportTypeFlag.Minimal)
- {
- MapView.ExportMinimalMap(map, info.ExportType);
- }
- else
- {
- MapView.ExportMinimalMap(map, info.ExportType);
- }
-
+ MapView.ExportFullMap(map, info.ExportType);
MainWindow.Progress.CompleteStage();
});
// MapView.ExportFullMap(staticMapData);
@@ -248,8 +171,8 @@ private async void StaticMap_OnClick(object sender, RoutedEventArgs e)
List mapStages = items.Select(x => $"loading to ui: {x.Hash}").ToList();
if (mapStages.Count == 0)
{
- Log.Error("No maps selected for export.");
- MessageBox.Show("No maps selected for export.");
+ Log.Error("No maps available for viewing.");
+ MessageBox.Show("No maps available for viewing.");
return;
}
MainWindow.Progress.SetProgressStages(mapStages);
@@ -297,12 +220,3 @@ public class DisplayStaticMap
public bool Selected { get; set; }
}
-
-public class DisplayDynamicMap
-{
- public string Name { get; set; }
- public string Hash { get; set; }
- public int Models { get; set; }
-
- public bool Selected { get; set; }
-}
diff --git a/Charm/ActivityView.xaml b/Charm/ActivityView.xaml
index e8326f32..3991e867 100644
--- a/Charm/ActivityView.xaml
+++ b/Charm/ActivityView.xaml
@@ -1,24 +1,29 @@
-
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
+
+
+
diff --git a/Charm/ActivityView.xaml.cs b/Charm/ActivityView.xaml.cs
index c117c541..ebaeae67 100644
--- a/Charm/ActivityView.xaml.cs
+++ b/Charm/ActivityView.xaml.cs
@@ -22,7 +22,8 @@ public async void LoadActivity(FileHash hash)
MainWindow.Progress.SetProgressStages(new List
{
"loading activity tag",
- "loading map ui",
+ "loading static map ui",
+ "loading map resources ui",
"loading dialogue ui",
"loading directive ui",
"loading music ui",
@@ -42,6 +43,11 @@ await Task.Run(() =>
});
MainWindow.Progress.CompleteStage();
Dispatcher.Invoke(() =>
+ {
+ MapEntityControl.LoadUI(_activity);
+ });
+ MainWindow.Progress.CompleteStage();
+ Dispatcher.Invoke(() =>
{
DialogueControl.LoadUI(_activity.FileHash);
});
diff --git a/Charm/DevView.xaml.cs b/Charm/DevView.xaml.cs
index 011053d7..f8c59201 100644
--- a/Charm/DevView.xaml.cs
+++ b/Charm/DevView.xaml.cs
@@ -4,15 +4,18 @@
using System.Globalization;
using System.IO;
using System.Linq;
+using System.Numerics;
using System.Text;
using System.Text.RegularExpressions;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using Tiger;
+using Tiger.Exporters;
using Tiger.Schema;
using Tiger.Schema.Audio;
using Tiger.Schema.Entity;
+using Tiger.Schema.Static;
namespace Charm;
@@ -206,6 +209,26 @@ private void AddWindow(FileHash hash)
_mainWindow.MakeNewTab(hash, dialogueView);
_mainWindow.SetNewestTabSelected();
break;
+ case 0x808073A5:
+ case 0x80806F07: //Entity model
+ EntityModel entityModel = FileResourcer.Get().GetFile(hash);
+ ExporterScene scene = Exporter.Get().CreateScene(hash, ExportType.Entity);
+ scene.AddModel(entityModel);
+ var parts = entityModel.Load(ExportDetailLevel.MostDetailed, null);
+ foreach (DynamicMeshPart part in parts)
+ {
+ if (part.Material == null) continue;
+ scene.Materials.Add(new ExportMaterial(part.Material));
+ }
+ Exporter.Get().Export();
+ break;
+ case 0x8080714F:
+ case 0x80806C81:
+ Terrain terrain = FileResourcer.Get().GetFile(hash);
+ ExporterScene terrainScene = Exporter.Get().CreateScene(hash, ExportType.Terrain);
+ terrain.LoadIntoExporter(terrainScene, ConfigSubsystem.Get().GetExportSavePath(), false);
+ Exporter.Get().Export();
+ break;
default:
MessageBox.Show("Unknown reference: " + Endian.U32ToString(reference));
break;
diff --git a/Charm/EntityView.xaml.cs b/Charm/EntityView.xaml.cs
index 29200857..608d21a8 100644
--- a/Charm/EntityView.xaml.cs
+++ b/Charm/EntityView.xaml.cs
@@ -100,6 +100,10 @@ public static void Export(List entities, string name, ExportTypeFlag exp
entity.SaveMaterialsFromParts(scene, dynamicParts);
entity.SaveTexturePlates(savePath);
}
+ if (ConfigSubsystem.Get().GetS2VMDLExportEnabled())
+ {
+ Source2Handler.SaveEntityVMDL($"{savePath}", entity);
+ }
}
if (exportType == ExportTypeFlag.Full)
@@ -163,10 +167,11 @@ public static void ExportInventoryItem(ApiItem item)
ConfigSubsystem config = CharmInstance.GetSubsystem();
string savePath = config.GetExportSavePath();
- string meshName = name;
+ string meshName = Regex.Replace(name, @"[^\u0000-\u007F]", "_");
+ string itemName = Regex.Replace(string.Join("_", item.ItemName.Split(Path.GetInvalidFileNameChars())), @"[^\u0000-\u007F]", "_");
savePath += $"/{meshName}";
Directory.CreateDirectory(savePath);
- AutomatedExporter.SaveBlenderApiFile(savePath, string.Join("_", item.ItemName.Split(Path.GetInvalidFileNameChars())),
+ AutomatedExporter.SaveBlenderApiFile(savePath, itemName,
config.GetOutputTextureFormat(), dyes.Values.ToList());
}
}
diff --git a/Charm/ExportControl.xaml.cs b/Charm/ExportControl.xaml.cs
index 86659d14..1f798cf0 100644
--- a/Charm/ExportControl.xaml.cs
+++ b/Charm/ExportControl.xaml.cs
@@ -16,8 +16,8 @@ public enum ExportTypeFlag
Full = 1,
[Description("Minimal (no terrain)")]
Minimal = 2,
- [Description("Terrain only")]
- TerrainOnly = 4,
+ //[Description("Terrain only")]
+ //TerrainOnly = 4,
[Description("Pre-arranged map")]
ArrangedMap = 8,
}
diff --git a/Charm/MainMenuView.xaml.cs b/Charm/MainMenuView.xaml.cs
index 0ca9c7af..b01a47cb 100644
--- a/Charm/MainMenuView.xaml.cs
+++ b/Charm/MainMenuView.xaml.cs
@@ -23,7 +23,7 @@ public MainMenuView()
ApiButton.IsEnabled = ShowWQButtons(Strategy.CurrentStrategy);
BagsButton.IsEnabled = ShowWQButtons(Strategy.CurrentStrategy);
- WeaponAudioButton.IsEnabled = ShowWQButtons(Strategy.CurrentStrategy);
+ WeaponAudioButton.IsEnabled = ShowIfLatest(Strategy.CurrentStrategy);
Strategy.OnStrategyChangedEvent += delegate (StrategyEventArgs args)
{
@@ -31,7 +31,7 @@ public MainMenuView()
{
ApiButton.IsEnabled = ShowWQButtons(args.Strategy);
BagsButton.IsEnabled = ShowWQButtons(args.Strategy);
- WeaponAudioButton.IsEnabled = ShowWQButtons(args.Strategy);
+ WeaponAudioButton.IsEnabled = ShowIfLatest(args.Strategy);
});
};
}
@@ -41,6 +41,11 @@ private bool ShowWQButtons(TigerStrategy strategy)
return strategy > TigerStrategy.DESTINY2_BEYONDLIGHT_3402;
}
+ private bool ShowIfLatest(TigerStrategy strategy)
+ {
+ return strategy == TigerStrategy.DESTINY2_LATEST;
+ }
+
private void OnControlLoaded(object sender, RoutedEventArgs routedEventArgs)
{
_mainWindow = Window.GetWindow(this) as MainWindow;
diff --git a/Charm/MainViewModel.cs b/Charm/MainViewModel.cs
index b64b8312..f822e681 100644
--- a/Charm/MainViewModel.cs
+++ b/Charm/MainViewModel.cs
@@ -265,9 +265,12 @@ public void SetChildren(List parts)
var v3ne = ConsiderQuatToEulerConvert(v4n);
SharpDX.Vector3 n = new SharpDX.Vector3(v3ne.X, v3ne.Y, v3ne.Z);
normals.Add(n);
- var v2t = part.BasePart.VertexTexcoords0[lookup[(int)vertexIndex]];
- SharpDX.Vector2 t = new SharpDX.Vector2(v2t.X, v2t.Y);
- textureCoordinates.Add(t);
+ if(part.BasePart.VertexTexcoords0.Count > 0)
+ {
+ var v2t = part.BasePart.VertexTexcoords0[lookup[(int)vertexIndex]];
+ SharpDX.Vector2 t = new SharpDX.Vector2(v2t.X, v2t.Y);
+ textureCoordinates.Add(t);
+ }
}
foreach (UIntVector3 face in part.BasePart.Indices)
{
diff --git a/Charm/MapView.xaml.cs b/Charm/MapView.xaml.cs
index 4ac3d003..3fa534ab 100644
--- a/Charm/MapView.xaml.cs
+++ b/Charm/MapView.xaml.cs
@@ -4,11 +4,15 @@
using System.ComponentModel;
using System.IO;
using System.Linq;
+using System.Media;
+using System.Numerics;
+using System.Security.Policy;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
+using Arithmic;
using Tiger;
using Tiger.Exporters;
using Tiger.Schema;
@@ -40,10 +44,18 @@ public MapView()
InitializeComponent();
}
- public void LoadMap(FileHash fileHash, ExportDetailLevel detailLevel)
+ public void LoadMap(FileHash fileHash, ExportDetailLevel detailLevel, bool isEntities = false)
{
- GetStaticMapData(fileHash, detailLevel);
- // _mainWindow.SetNewestTabSelected();
+ if (isEntities)
+ GetEntityMapData(fileHash, detailLevel);
+ else
+ GetStaticMapData(fileHash, detailLevel);
+ }
+
+ private void GetEntityMapData(FileHash tagHash, ExportDetailLevel detailLevel)
+ {
+ Tag dataentry = FileResourcer.Get().GetSchemaTag(tagHash);
+ SetEntityMapUI(dataentry, detailLevel);
}
private void GetStaticMapData(FileHash fileHash, ExportDetailLevel detailLevel)
@@ -66,6 +78,45 @@ private void SetMapUI(StaticMapData staticMapData, ExportDetailLevel detailLevel
displayParts.Clear();
}
+ private void SetEntityMapUI(Tag dataentry, ExportDetailLevel detailLevel)
+ {
+ var displayParts = MakeEntityDisplayParts(dataentry, detailLevel);
+ Dispatcher.Invoke(() =>
+ {
+ MainViewModel MVM = (MainViewModel)ModelView.UCModelView.Resources["MVM"];
+ MVM.SetChildren(displayParts);
+ });
+ displayParts.Clear();
+ }
+
+ public bool LoadEntity(List entities, FbxHandler fbxHandler)
+ {
+ fbxHandler.Clear();
+ foreach(var entity in entities)
+ AddEntity(entity, ExportDetailLevel.MostDetailed, fbxHandler);
+ return LoadUI(fbxHandler);
+ }
+
+ private void AddEntity(Entity entity, ExportDetailLevel detailLevel, FbxHandler fbxHandler)
+ {
+ var dynamicParts = entity.Load(detailLevel);
+ //ModelView.SetGroupIndices(new HashSet(dynamicParts.Select(x => x.GroupIndex)));
+ //dynamicParts = dynamicParts.Where(x => x.GroupIndex == ModelView.GetSelectedGroupIndex()).ToList();
+ fbxHandler.AddEntityToScene(entity, dynamicParts, detailLevel);
+ Log.Verbose($"Adding entity {entity.Hash}/{entity.Model?.Hash} with {dynamicParts.Sum(p => p.Indices.Count)} vertices to fbx");
+ }
+
+ private bool LoadUI(FbxHandler fbxHandler)
+ {
+ MainViewModel MVM = (MainViewModel)ModelView.UCModelView.Resources["MVM"];
+ ConfigSubsystem config = CharmInstance.GetSubsystem();
+ string filePath = $"{config.GetExportSavePath()}/temp.fbx";
+ fbxHandler.ExportScene(filePath);
+ bool loaded = MVM.LoadEntityFromFbx(filePath);
+ fbxHandler.Clear();
+ return loaded;
+ }
+
public void Clear()
{
MainViewModel MVM = (MainViewModel)ModelView.UCModelView.Resources["MVM"];
@@ -78,7 +129,7 @@ public void Dispose()
MVM.Dispose();
}
- public static void ExportFullMap(Tag map)
+ public static void ExportFullMap(Tag map, ExportTypeFlag exportTypeFlag)
{
ExporterScene scene = Exporter.Get().CreateScene(map.Hash.ToString(), ExportType.Map);
@@ -93,7 +144,6 @@ public static void ExportFullMap(Tag map)
if(exportStatics)
{
Directory.CreateDirectory(savePath + "/Statics");
- Directory.CreateDirectory(savePath + "/Entities");
ExportStatics(savePath, map);
}
@@ -105,31 +155,6 @@ public static void ExportFullMap(Tag map)
}
}
- public static void ExportMinimalMap(Tag map, ExportTypeFlag exportTypeFlag)
- {
- ExporterScene scene = Exporter.Get().CreateScene(map.Hash.ToString(), ExportType.Map);
- string meshName = map.Hash.ToString();
- string savePath = _config.GetExportSavePath() + $"/{meshName}";
- if (_config.GetSingleFolderMapsEnabled())
- {
- savePath = _config.GetExportSavePath() + "/Maps";
- }
- Directory.CreateDirectory(savePath);
- if (exportStatics)
- {
- Directory.CreateDirectory(savePath + "/Statics");
- Directory.CreateDirectory(savePath + "/Entities");
- ExportStatics(savePath, map);
- }
-
- ExtractDataTables(map, savePath, scene, exportTypeFlag);
-
- if (_config.GetUnrealInteropEnabled())
- {
- AutomatedExporter.SaveInteropUnrealPythonFile(savePath, meshName, AutomatedExporter.ImportType.Map, _config.GetOutputTextureFormat(), _config.GetSingleFolderMapsEnabled());
- }
- }
-
public static void ExportTerrainMap(Tag map)
{
ExporterScene scene = Exporter.Get().CreateScene($"{map.Hash}_Terrain", ExportType.Terrain);
@@ -147,41 +172,28 @@ public static void ExportTerrainMap(Tag map)
{
data.MapDataTable.TagData.DataEntries.ForEach(entry =>
{
- if (entry.DataResource.GetValue(data.MapDataTable.GetReader()) is D2Class_7D6C8080 terrainArrangement) // Terrain
+ if (entry.DataResource.GetValue(data.MapDataTable.GetReader()) is SMapTerrainResource terrainArrangement) // Terrain
{
- export = true;
- terrainArrangement.Terrain.LoadIntoExporter(scene, savePath, _config.GetUnrealInteropEnabled(), terrainArrangement);
+ terrainArrangement.Terrain.LoadIntoExporter(scene, savePath, _config.GetUnrealInteropEnabled() || _config.GetS2ShaderExportEnabled());
if (exportStatics)
{
- if (source2Models)
- {
- File.Copy("Exporters/template.vmdl", $"{savePath}/Statics/{terrainArrangement.Terrain.Hash}_Terrain.vmdl", true);
- }
ExporterScene staticScene = Exporter.Get().CreateScene($"{terrainArrangement.Terrain.Hash}_Terrain", ExportType.StaticInMap);
- terrainArrangement.Terrain.LoadIntoExporter(staticScene, savePath, _config.GetUnrealInteropEnabled() || _config.GetS2ShaderExportEnabled(), terrainArrangement, true);
+ terrainArrangement.Terrain.LoadIntoExporter(staticScene, savePath, _config.GetUnrealInteropEnabled() || _config.GetS2ShaderExportEnabled(), true);
}
}
});
});
- if (export)
+ if (_config.GetUnrealInteropEnabled())
{
- if (_config.GetUnrealInteropEnabled())
- {
- AutomatedExporter.SaveInteropUnrealPythonFile(savePath, meshName + "_Terrain", AutomatedExporter.ImportType.Map, _config.GetOutputTextureFormat(), _config.GetSingleFolderMapsEnabled());
- }
+ AutomatedExporter.SaveInteropUnrealPythonFile(savePath, meshName + "_Terrain", AutomatedExporter.ImportType.Map, _config.GetOutputTextureFormat(), _config.GetSingleFolderMapsEnabled());
}
}
private static void ExtractDataTables(Tag map, string savePath, ExporterScene scene, ExportTypeFlag exportTypeFlag)
{
- // todo these scenes can be combined
- ExporterScene dynamicPointScene = Exporter.Get().CreateScene($"{map.Hash}_EntityPoints", ExportType.EntityPoints);
- ExporterScene dynamicScene = Exporter.Get().CreateScene($"{map.Hash}_Entities", ExportType.Map);
-
Parallel.ForEach(map.TagData.MapDataTables, data =>
{
- //Console.WriteLine($"{data.MapDataTable.Hash}");
data.MapDataTable.TagData.DataEntries.ForEach(entry =>
{
if (entry.DataResource.GetValue(data.MapDataTable.GetReader()) is SMapDataResource staticMapResource) // Static map
@@ -190,24 +202,11 @@ private static void ExtractDataTables(Tag map, string savePath, E
{
staticMapResource.StaticMapParent.TagData.StaticMap.LoadArrangedIntoExporterScene(); //Arranged because...arranged
}
- else if (exportTypeFlag == ExportTypeFlag.Full || exportTypeFlag == ExportTypeFlag.Minimal) //No terrain on a minimal rip makes sense right?
+ else if (exportTypeFlag == ExportTypeFlag.Full)
{
staticMapResource.StaticMapParent.TagData.StaticMap.LoadIntoExporterScene(scene, savePath, _config.GetUnrealInteropEnabled() || _config.GetS2ShaderExportEnabled());
}
}
- if (entry is SMapDataEntry dynamicResource)
- {
- Entity entity = FileResourcer.Get().GetFile(entry.GetEntityHash());
- if(entity.HasGeometry())
- {
- dynamicScene.AddMapEntity(dynamicResource, entity);
- }
- dynamicPointScene.AddEntityPoints(dynamicResource);
- }
- if (entry.DataResource.GetValue(data.MapDataTable.GetReader()) is CubemapResource cubemap)
- {
- scene.AddCubemap(cubemap);
- }
});
});
}
@@ -236,20 +235,6 @@ private static void ExportStatics(string savePath, Tag map)
}
}
}
- if (entry is SMapDataEntry dynamicResource)
- {
- Entity entity = FileResourcer.Get().GetFile(entry.GetEntityHash());
- if (entity.HasGeometry())
- {
- ExporterScene dynamicScene = Exporter.Get().CreateScene(entity.Hash, ExportType.EntityInMap);
- dynamicScene.AddEntity(dynamicResource.GetEntityHash(), entity.Model.Load(ExportDetailLevel.MostDetailed, entity.ModelParentResource), entity.Skeleton?.GetBoneNodes());
- entity.SaveMaterialsFromParts(dynamicScene, entity.Model.Load(ExportDetailLevel.MostDetailed, entity.ModelParentResource));
- if (source2Models)
- {
- Source2Handler.SaveEntityVMDL($"{savePath}/Entities", entity);
- }
- }
- }
});
});
}
@@ -278,4 +263,33 @@ private static void ExportStatics(string savePath, Tag map)
});
return displayParts.ToList();
}
+
+ private List MakeEntityDisplayParts(Tag dataentry, ExportDetailLevel detailLevel)
+ {
+ ConcurrentBag displayParts = new ConcurrentBag();
+ Parallel.ForEach(dataentry.TagData.DataEntries, entry =>
+ {
+ Entity entity = FileResourcer.Get().GetFile(typeof(Entity), entry.GetEntityHash());
+ List entities = new List { entity };
+ entities.AddRange(entity.GetEntityChildren());
+ foreach(var ent in entities)
+ {
+ if (ent.HasGeometry())
+ {
+ var parts = ent.Load(ExportDetailLevel.MostDetailed);
+
+ foreach (var part in parts)
+ {
+ MainViewModel.DisplayPart displayPart = new MainViewModel.DisplayPart();
+ displayPart.BasePart = part;
+ displayPart.Translations.Add(entry.Translation.ToVec3());
+ displayPart.Rotations.Add(entry.Rotation);
+ displayPart.Scales.Add(new Tiger.Schema.Vector3(entry.Translation.W, entry.Translation.W, entry.Translation.W));
+ displayParts.Add(displayPart);
+ }
+ }
+ }
+ });
+ return displayParts.ToList();
+ }
}
diff --git a/Charm/TagListView.xaml.cs b/Charm/TagListView.xaml.cs
index 92a9b95d..21a0bb90 100644
--- a/Charm/TagListView.xaml.cs
+++ b/Charm/TagListView.xaml.cs
@@ -1125,7 +1125,7 @@ await Task.Run(() =>
// PackageHandler.CacheHashDataList(tex3d.Select(x => x.Hash).ToArray());
// MainWindow.Progress.CompleteStage();
- Parallel.ForEach(tex, val =>
+ tex.ToList().ForEach(val => //Doesnt really need to be parrellizedm, loads quick enough without it and fixes(?) missing entries
{
_allTagItems.Add(new TagItem
{
@@ -1219,8 +1219,9 @@ private void LoadDialogueList(FileHash fileHash)
else if (Strategy.CurrentStrategy == TigerStrategy.DESTINY2_BEYONDLIGHT_3402)
{
var resource = activity.TagData.Unk18.GetValue(activity.GetReader());
- if (resource is D2Class_D5908080 || resource is D2Class_44938080 || resource is D2Class_45938080 ||
- resource is D2Class_18978080 || resource is D2Class_19978080)
+ //if (resource is D2Class_D5908080 || resource is D2Class_44938080 || resource is D2Class_45938080 ||
+ // resource is D2Class_18978080 || resource is D2Class_19978080)
+ if (resource is D2Class_19978080)
{
if (resource.DialogueTableBL != null)
dialogueTables.Add(resource.DialogueTableBL.Hash);
@@ -1635,10 +1636,15 @@ private void LoadWeaponAudioList(TigerHash apiHash)
return;
}
_weaponItemName = Investment.Get().GetItemNameSanitized(Investment.Get().GetInventoryItem(apiHash));
- var resourceUnnamed = (D2Class_F42C8080)val.PatternAudioUnnamed.TagData.Unk18.GetValue(val.PatternAudioUnnamed.GetReader());
+
+ var resourceUnnamedReader = val.PatternAudioUnnamed.GetReader();
+ var resourceUnnamed = (D2Class_F42C8080)val.PatternAudioUnnamed.TagData.Unk18.GetValue(resourceUnnamedReader);
var resource = (D2Class_6E358080)val.PatternAudio.TagData.Unk18.GetValue(val.PatternAudio.GetReader());
var item = Investment.Get().GetInventoryItem(apiHash);
var weaponContentGroupHash = Investment.Get().GetWeaponContentGroupHash(item);
+
+ Log.Verbose($"Loading weapon entity audio {val.Hash}, ContentGroupHash {weaponContentGroupHash}");
+
// Named
foreach (var entry in resource.PatternAudioGroups)
{
@@ -1664,7 +1670,7 @@ private void LoadWeaponAudioList(TigerHash apiHash)
}
}
// Unnamed
- var sounds = GetWeaponUnnamedSounds(resourceUnnamed, weaponContentGroupHash);
+ var sounds = GetWeaponUnnamedSounds(resourceUnnamed, weaponContentGroupHash, resourceUnnamedReader);
foreach (var s in sounds)
{
if (s == null)
@@ -1681,9 +1687,10 @@ private void LoadWeaponAudioList(TigerHash apiHash)
RefreshItemList();
}
- public List GetWeaponUnnamedSounds(D2Class_F42C8080 resource, TigerHash weaponContentGroupHash)
+ public List GetWeaponUnnamedSounds(D2Class_F42C8080 resource, TigerHash weaponContentGroupHash, TigerReader reader)
{
List sounds = new List();
+
resource.PatternAudioGroups.ForEach(entry =>
{
if (!entry.WeaponContentGroupHash.Equals(weaponContentGroupHash))
@@ -1691,6 +1698,17 @@ public List GetWeaponUnnamedSounds(D2Class_F42C8080 resource, TigerH
List entitiesParents = new() { entry.Unk60, entry.Unk78, entry.Unk90, entry.UnkA8, entry.UnkC0, entry.UnkD8, entry.AudioEntityParent, entry.Unk130, entry.Unk148, entry.Unk1C0, entry.Unk1D8, entry.Unk248 };
List entities = new();
+
+ if (entry.Unk118.GetValue(reader) is D2Class_0A2D8080 resourceUnk118)
+ {
+ if (resourceUnk118.Unk08 != null)
+ entities.Add(resourceUnk118.Unk08);
+ if (resourceUnk118.Unk20 != null)
+ entities.Add(resourceUnk118.Unk20);
+ if (resourceUnk118.Unk38 != null)
+ entities.Add(resourceUnk118.Unk38);
+ }
+
foreach (var tag in entitiesParents)
{
if (tag == null)
diff --git a/Tiger/Exporters/Exporter.cs b/Tiger/Exporters/Exporter.cs
index 2ff5b3a4..53b71a1d 100644
--- a/Tiger/Exporters/Exporter.cs
+++ b/Tiger/Exporters/Exporter.cs
@@ -91,9 +91,13 @@ public class ExporterScene
public ConcurrentBag ExternalMaterialTextures = new();
public ConcurrentBag EntityPoints = new();
public ConcurrentBag Cubemaps = new();
+ public ConcurrentBag MapLights = new();
+ public ConcurrentDictionary> MapSpotLights = new();
+ public ConcurrentBag Decals = new();
private ConcurrentBag _addedEntities = new();
public ConcurrentHashSet Textures = new();
public ConcurrentHashSet Materials = new();
+ public ConcurrentDictionary> TerrainDyemaps = new();
public void AddStatic(FileHash meshHash, List parts)
{
@@ -141,7 +145,7 @@ private static List InstancesToTransforms(IEnumerable parts, List parts, List 0) // Only export if theres actually something to export
+ exporter.Export(fbxScene);
exporter.Destroy();
fbxScene.Clear();
}
@@ -124,7 +125,7 @@ private void AddEntity(FbxScene fbxScene, ExporterEntity entity)
if (dynamicMeshPart.VertexColourSlots.Count > 0 || dynamicMeshPart.GearDyeChangeColorIndex != 0xFF)
{
fbxMesh.AddSlotColours(dynamicMeshPart);
- fbxMesh.AddTexcoords1(dynamicMeshPart);
+ fbxMesh.AddTexcoords1(part);
}
if (dynamicMeshPart.VertexWeights.Count > 0)
@@ -308,9 +309,9 @@ public static void AddTexcoords0(this FbxMesh fbxMesh, ExporterPart part)
fbxMesh.GetLayer(0).SetUVs(uvLayer);
}
- public static void AddTexcoords1(this FbxMesh fbxMesh, DynamicMeshPart meshPart)
+ public static void AddTexcoords1(this FbxMesh fbxMesh, ExporterPart part)
{
- if (!meshPart.VertexTexcoords1.Any())
+ if (!part.MeshPart.VertexTexcoords1.Any())
{
return;
}
@@ -318,7 +319,7 @@ public static void AddTexcoords1(this FbxMesh fbxMesh, DynamicMeshPart meshPart)
FbxLayerElementUV uvLayer = FbxLayerElementUV.Create(fbxMesh, "uv1");
uvLayer.SetMappingMode(FbxLayerElement.EMappingMode.eByControlPoint);
uvLayer.SetReferenceMode(FbxLayerElement.EReferenceMode.eDirect);
- foreach (var tx in meshPart.VertexTexcoords1)
+ foreach (var tx in part.MeshPart.VertexTexcoords1)
{
uvLayer.GetDirectArray().Add(new FbxVector2(tx.X, tx.Y));
}
diff --git a/Tiger/Exporters/MaterialExporter.cs b/Tiger/Exporters/MaterialExporter.cs
index e4f86358..d1886ebb 100644
--- a/Tiger/Exporters/MaterialExporter.cs
+++ b/Tiger/Exporters/MaterialExporter.cs
@@ -79,6 +79,8 @@ public override void Export(Exporter.ExportEventArgs args)
Directory.CreateDirectory(textureSaveDirectory);
foreach (Texture texture in mapTextures)
{
+ if (texture is null)
+ continue;
texture.SavetoFile($"{textureSaveDirectory}/{texture.Hash}");
}
diff --git a/Tiger/Exporters/MetadataExporter.cs b/Tiger/Exporters/MetadataExporter.cs
index c52c64f8..61d40fb0 100644
--- a/Tiger/Exporters/MetadataExporter.cs
+++ b/Tiger/Exporters/MetadataExporter.cs
@@ -34,6 +34,12 @@ public MetadataScene(ExporterScene scene)
_config.TryAdd("Instances", instances);
ConcurrentDictionary> cubemaps = new();
_config.TryAdd("Cubemaps", cubemaps);
+ ConcurrentDictionary> pointLights = new();
+ _config.TryAdd("Lights", pointLights);
+ ConcurrentDictionary> decals = new ConcurrentDictionary>();
+ _config.TryAdd("Decals", decals);
+ ConcurrentDictionary> terrainDyemaps = new ConcurrentDictionary>();
+ _config.TryAdd("TerrainDyemaps", terrainDyemaps);
if (ConfigSubsystem.Get().GetUnrealInteropEnabled())
{
@@ -84,7 +90,69 @@ public MetadataScene(ExporterScene scene)
foreach (CubemapResource cubemap in scene.Cubemaps)
{
- AddCubemap(cubemap.CubemapName, cubemap.CubemapSize.ToVec3(), cubemap.CubemapRotation, cubemap.CubemapPosition.ToVec3());
+ AddCubemap(cubemap.CubemapName,
+ cubemap.CubemapSize.ToVec3(),
+ cubemap.CubemapRotation,
+ cubemap.CubemapPosition.ToVec3(),
+ cubemap.CubemapTexture != null ? cubemap.CubemapTexture.Hash : "");
+ }
+ foreach (var mapLight in scene.MapLights)
+ {
+ for (int i = 0; i < mapLight.Unk10.TagData.Unk30.Count; i++)
+ {
+ var data = Strategy.CurrentStrategy == TigerStrategy.DESTINY2_SHADOWKEEP_2601 ? mapLight.Unk10.TagData.Unk30[i].UnkCC : mapLight.Unk10.TagData.Unk30[i].UnkD0;
+ if (data is null)
+ continue;
+ AddLight(
+ data.Hash,
+ "Point",
+ mapLight.Unk10.TagData.Unk40[i].Translation,
+ mapLight.Unk10.TagData.Unk40[i].Rotation,
+ new Vector2(1,1), //new Vector2(mapLight.Unk10.TagData.Unk30[i].UnkA0.W, mapLight.Unk10.TagData.Unk30[i].UnkB0.W), //Not right
+ (data.TagData.Unk40.Count > 0 ? data.TagData.Unk40[0].Vec : data.TagData.Unk60[0].Vec));
+ }
+ }
+ foreach(SMapDecalsResource decal in scene.Decals)
+ {
+ if (decal.MapDecals is not null)
+ {
+ foreach (var item in decal.MapDecals.TagData.DecalResources)
+ {
+ // Check if the index is within the bounds of the second list
+ if (item.StartIndex >= 0 && item.StartIndex < decal.MapDecals.TagData.Locations.Count)
+ {
+ // Loop through the second list based on the given parameters
+ for (int i = item.StartIndex; i < item.StartIndex + item.Count && i < decal.MapDecals.TagData.Locations.Count; i++)
+ {
+ var location = decal.MapDecals.TagData.Locations[i].Location;
+ var boxCorners = decal.MapDecals.TagData.DecalProjectionBounds.TagData.InstanceBounds[i];
+
+ AddDecal(boxCorners.Unk24.ToString(), item.Material.FileHash, location, boxCorners.Corner1, boxCorners.Corner2);
+ AddMaterial(item.Material);
+ }
+ }
+ }
+ }
+
+ }
+ foreach (var mapLight in scene.MapSpotLights)
+ {
+ foreach(var entry in mapLight.Value)
+ {
+ AddLight(
+ mapLight.Key,
+ "Spot",
+ new Vector4(entry.Position.X, entry.Position.Y, entry.Position.Z, 1),
+ entry.Quaternion,
+ new Vector2(1.0, 1.0),
+ new Vector4(1.0,1.0,1.0,1.0));
+ }
+ }
+
+ foreach(var dyemaps in scene.TerrainDyemaps)
+ {
+ foreach(var dyemap in dyemaps.Value)
+ AddTerrainDyemap(dyemaps.Key, dyemap);
}
}
@@ -155,7 +223,7 @@ public void AddInstanced(FileHash meshHash, List transforms)
{
Translation = new[] { transform.Position.X, transform.Position.Y, transform.Position.Z },
Rotation = new[] { transform.Quaternion.X, transform.Quaternion.Y, transform.Quaternion.Z, transform.Quaternion.W },
- Scale = transform.Scale.X
+ Scale = new[] { transform.Scale.X, transform.Scale.Y, transform.Scale.Z }
});
}
}
@@ -171,7 +239,7 @@ public void AddTextureToMaterial(string material, int index, Texture texture)
_config["Materials"][material]["PS"].TryAdd(index, new TexInfo { Hash = texture.Hash, SRGB = texture.IsSrgb() });
}
- public void AddCubemap(string name, Vector3 scale, Vector4 quatRotation, Vector3 translation)
+ public void AddCubemap(string name, Vector3 scale, Vector4 quatRotation, Vector3 translation, string texHash)
{
if (!_config["Cubemaps"].ContainsKey(name))
{
@@ -181,12 +249,68 @@ public void AddCubemap(string name, Vector3 scale, Vector4 quatRotation, Vector3
{
Translation = new[] { translation.X, translation.Y, translation.Z },
Rotation = new[] { quatRotation.X, quatRotation.Y, quatRotation.Z, quatRotation.W },
- Scale = new[] { scale.X, scale.Y, scale.Z }
+ Scale = new[] { scale.X, scale.Y, scale.Z },
+ Texture = texHash
+ });
+ }
+
+ public void AddLight(string name, string type, Vector4 translation, Vector4 quatRotation, Vector2 size, Vector4 color)
+ {
+ //Idk how color/intensity is handled, so if its above 1 just bring it down
+ float R = color.X > 1 ? color.X / 100 : color.X;
+ float G = color.Y > 1 ? color.Y / 100 : color.Y;
+ float B = color.Z > 1 ? color.Z / 100 : color.Z;
+
+ if (!_config["Lights"].ContainsKey(name))
+ {
+ _config["Lights"][name] = new ConcurrentBag();
+ }
+ _config["Lights"][name].Add(new JsonLight
+ {
+ Type = type,
+ Translation = new[] { translation.X, translation.Y, translation.Z },
+ Rotation = new[] { quatRotation.X, quatRotation.Y, quatRotation.Z, quatRotation.W },
+ Size = new[] { size.X, size.Y },
+ Color = new[] { R, G, B }
});
}
+ public void AddDecal(string boxhash, string materialName, Vector4 origin, Vector4 corner1, Vector4 corner2)
+ {
+ if (!_config["Decals"].ContainsKey(boxhash))
+ {
+ _config["Decals"][boxhash] = new ConcurrentBag();
+ }
+ _config["Decals"][boxhash].Add(new JsonDecal
+ {
+ Material = materialName,
+ Origin = new[] { origin.X, origin.Y, origin.Z },
+ Scale = origin.W,
+ Corner1 = new[] { corner1.X, corner1.Y, corner1.Z },
+ Corner2 = new[] { corner2.X, corner2.Y, corner2.Z }
+ });
+ }
+
+ public void AddTerrainDyemap(string modelHash, FileHash dyemapHash)
+ {
+ if (!_config["TerrainDyemaps"].ContainsKey(modelHash))
+ {
+ _config["TerrainDyemaps"][modelHash] = new ConcurrentBag();
+ }
+ _config["TerrainDyemaps"][modelHash].Add(dyemapHash);
+ }
+
public void WriteToFile(string path)
{
+ if (_config["Lights"].Count == 0
+ && _config["Materials"].Count == 0
+ && _config["Cubemaps"].Count == 0
+ && _config["Instances"].Count == 0
+ && _config["Parts"].Count == 0
+ && _config["Decals"].Count == 0
+ && _exportType is not ExportType.EntityPoints)
+ return; //Dont export if theres nothing in the cfg (this is kind of a mess though)
+
if (_exportType is ExportType.Static or ExportType.Entity)
{
path = Path.Join(path, _config["MeshName"]);
@@ -216,31 +340,20 @@ public void WriteToFile(string path)
}
- //im not smart enough to have done this, so i made an ai do it lol
//this just sorts the "instances" part of the cfg so its ordered by scale
//makes it easier for instancing models in Hammer/S&Box
-
var sortedDict = new ConcurrentDictionary>();
- // Use LINQ's OrderBy method to sort the values in each array
- // based on the "Scale" key. The lambda expression specifies that
- // the "Scale" property should be used as the key for the order.
foreach (var keyValuePair in (ConcurrentDictionary>)_config["Instances"])
{
var array = keyValuePair.Value;
- var sortedArray = array.OrderBy(x => x.Scale);
+ var sortedArray = array.OrderBy(x => x.Scale[0]);
- // Convert the sorted array to a ConcurrentBag
var sortedBag = new ConcurrentBag(sortedArray);
-
- // Add the sorted bag to the dictionary
sortedDict.TryAdd(keyValuePair.Key, sortedBag);
}
-
- // Finally, update the _config["Instances"] object with the sorted values
_config["Instances"] = sortedDict;
-
string s = JsonConvert.SerializeObject(_config, Formatting.Indented);
if (_config.ContainsKey("MeshName"))
{
@@ -256,7 +369,7 @@ private struct JsonInstance
{
public float[] Translation;
public float[] Rotation; // Quaternion
- public float Scale;
+ public float[] Scale;
}
private struct JsonCubemap
@@ -264,6 +377,24 @@ private struct JsonCubemap
public float[] Translation;
public float[] Rotation;
public float[] Scale;
+ public string Texture;
+ }
+
+ private struct JsonLight
+ {
+ public string Type;
+ public float[] Translation;
+ public float[] Rotation;
+ public float[] Size;
+ public float[] Color;
+ }
+ private struct JsonDecal
+ {
+ public string Material;
+ public float[] Origin;
+ public float Scale;
+ public float[] Corner1;
+ public float[] Corner2;
}
}
diff --git a/Tiger/Exporters/Source2Handler.cs b/Tiger/Exporters/Source2Handler.cs
index fe234628..a7a20ca8 100644
--- a/Tiger/Exporters/Source2Handler.cs
+++ b/Tiger/Exporters/Source2Handler.cs
@@ -51,39 +51,54 @@ public static void SaveStaticVMDL(string savePath, string staticMeshName, List parts)
+ {
+ try
{
- File.Copy("Exporters/template.vmdl", $"{savePath}/{entity.Hash}.vmdl", true);
- string text = File.ReadAllText($"{savePath}/{entity.Hash}.vmdl");
+ if (!File.Exists($"{savePath}/{hash}.vmdl"))
+ {
+ File.Copy("Exporters/template.vmdl", $"{savePath}/{hash}.vmdl", true);
+ string text = File.ReadAllText($"{savePath}/{hash}.vmdl");
- StringBuilder mats = new StringBuilder();
+ StringBuilder mats = new StringBuilder();
- int i = 0;
- foreach (var part in entity.Load(ExportDetailLevel.MostDetailed))
- {
- if (part.Material == null)
- continue;
+ int i = 0;
+ foreach (var part in parts)
+ {
+ if (part.Material == null)
+ continue;
- if (!part.Material.EnumeratePSTextures().Any())
- continue;
+ if (!part.Material.EnumeratePSTextures().Any())
+ continue;
- mats.AppendLine("{");
- mats.AppendLine($" from = \"{part.Material.FileHash}.vmat\"");
- mats.AppendLine($" to = \"materials/{part.Material.FileHash}.vmat\"");
- mats.AppendLine("},\n");
- i++;
- }
+ mats.AppendLine("{");
+ mats.AppendLine($" from = \"{part.Material.FileHash}.vmat\"");
+ mats.AppendLine($" to = \"materials/{part.Material.FileHash}.vmat\"");
+ mats.AppendLine("},\n");
+ i++;
+ }
- text = text.Replace("%MATERIALS%", mats.ToString());
- text = text.Replace("%FILENAME%", $"models/{entity.Hash}.fbx");
- text = text.Replace("%MESHNAME%", entity.Hash);
+ text = text.Replace("%MATERIALS%", mats.ToString());
+ text = text.Replace("%FILENAME%", $"models/{hash}.fbx");
+ text = text.Replace("%MESHNAME%", hash);
+
+ File.WriteAllText($"{savePath}/{hash}.vmdl", text);
+ }
+ }
+ catch(Exception e)
+ {
- File.WriteAllText($"{savePath}/{entity.Hash}.vmdl", text);
}
}
- public static void SaveTerrainVMDL(string savePath, string hash, List parts, STerrain terrainHeader)
+ public static void SaveTerrainVMDL(string savePath, string hash, List parts, STerrain terrainHeader)
{
+ Directory.CreateDirectory($"{savePath}/Statics/");
+ File.Copy("Exporters/template.vmdl", $"{savePath}/Statics/{hash}_Terrain.vmdl", true);
if (File.Exists($"{savePath}/Statics/{hash}_Terrain.vmdl"))
{
string text = File.ReadAllText($"{savePath}/Statics/{hash}_Terrain.vmdl");
@@ -108,7 +123,6 @@ public static void SaveTerrainVMDL(string savePath, string hash, List
text = text.Replace("%MESHNAME%", hash);
File.WriteAllText($"{savePath}/Statics/{hash}_Terrain.vmdl", text);
-
}
}
@@ -118,7 +132,7 @@ public static void SaveVMAT(string savePath, string hash, IMaterial materialHead
vmat.AppendLine("Layer0 \n{");
//If the shader doesnt exist, just use the default complex.shader
- if (!File.Exists($"{savePath}/Source2/PS_{hash}.shader"))
+ if (!File.Exists($"{savePath}/Source2/PS_{materialHeader.PixelShader?.Hash}.shader"))
{
vmat.AppendLine($" shader \"complex.shader\"");
@@ -131,21 +145,26 @@ public static void SaveVMAT(string savePath, string hash, IMaterial materialHead
}
else
{
- vmat.AppendLine($" shader \"ps_{hash}.shader\"");
- vmat.AppendLine(" F_ALPHA_TEST 1");
+ vmat.AppendLine($"\tshader \"ps_{materialHeader.PixelShader.Hash}.shader\"");
+ vmat.AppendLine($"\tF_ALPHA_TEST 1");
+ vmat.AppendLine($"\tF_ADDITIVE_BLEND 1");
+
+ if(materialHeader.Unk0C != 0)
+ {
+ vmat.AppendLine($"\tF_RENDER_BACKFACES 1");
+ }
}
foreach (var e in materialHeader.EnumeratePSTextures())
{
if (e.Texture == null)
- {
continue;
- }
- vmat.AppendLine($" TextureT{e.TextureIndex} \"materials/Textures/{e.Texture.Hash}.png\"");
+ vmat.AppendLine($"\tTextureT{e.TextureIndex} \"materials/Textures/{e.Texture.Hash}.png\"");
}
- vmat.AppendLine($"Attributes\r\n\t{{\r\n\t\tDebug_Diffuse \"false\"\r\n\t\tDebug_Rough \"false\"\r\n\t\tDebug_Metal \"false\"\r\n\t\tDebug_Normal \"false\"\r\n\t\tDebug_AO \"false\"\r\n\t\tDebug_Emit \"false\"\r\n\t\tDebug_Alpha \"false\"\r\n\t}}");
+ //vmat.AppendLine(PopulateCBuffers(materialHeader.Decompile(materialHeader.VertexShader.GetBytecode(), $"vs{materialHeader.VertexShader.Hash}"), materialHeader, true).ToString());
+ vmat.AppendLine(PopulateCBuffers(materialHeader.Decompile(materialHeader.PixelShader.GetBytecode(), $"ps{materialHeader.PixelShader.Hash}"), materialHeader).ToString());
vmat.AppendLine("}");
string terrainDir = isTerrain ? "/Terrain/" : "";
@@ -169,7 +188,6 @@ public static void SaveDecalVMAT(string savePath, string hash, IMaterial materia
StringBuilder vmat = new StringBuilder();
vmat.AppendLine("Layer0 \n{");
-
vmat.AppendLine($" shader \"projected_decals.shader\"");
//Use just the first texture for the diffuse
@@ -179,7 +197,6 @@ public static void SaveDecalVMAT(string savePath, string hash, IMaterial materia
vmat.AppendLine($" TextureColor \"materials/Textures/{materialHeader.EnumeratePSTextures().ElementAt(0).Texture.Hash}.png\"");
}
-
foreach (var e in materialHeader.EnumeratePSTextures())
{
if (e.Texture == null)
@@ -204,4 +221,108 @@ public static void SaveDecalVMAT(string savePath, string hash, IMaterial materia
}
}
}
+
+ public static StringBuilder PopulateCBuffers(string hlsl, IMaterial materialHeader, bool isVertexShader = false)
+ {
+ StringReader reader = new(hlsl);
+
+ List cbuffers = new List();
+ StringBuilder buffers = new StringBuilder();
+
+ string line = string.Empty;
+ do
+ {
+ line = reader.ReadLine();
+ if (line != null)
+ {
+ if (line.Contains("cbuffer"))
+ {
+ reader.ReadLine();
+ line = reader.ReadLine();
+ Cbuffer cbuffer = new Cbuffer();
+ cbuffer.Variable = "cb" + line.Split("cb")[1].Split("[")[0];
+ cbuffer.Index = Int32.TryParse(new string(cbuffer.Variable.Skip(2).ToArray()), out int index) ? index : -1;
+ cbuffer.Count = Int32.TryParse(new string(line.Split("[")[1].Split("]")[0]), out int count) ? count : -1;
+ cbuffer.Type = line.Split("cb")[0].Trim();
+ cbuffers.Add(cbuffer);
+ }
+ }
+
+ } while (line != null);
+
+ foreach (var cbuffer in cbuffers)
+ {
+ dynamic data = null;
+ string cbType = isVertexShader ? "vs_cb" : "cb";
+
+ if(isVertexShader)
+ {
+ if (cbuffer.Count == materialHeader.UnkA0.Count)
+ {
+ data = materialHeader.UnkA0;
+ }
+ else if (cbuffer.Count == materialHeader.UnkC0.Count)
+ {
+ data = materialHeader.UnkC0;
+ }
+ }
+ else
+ {
+ if (cbuffer.Count == materialHeader.Unk2E0.Count)
+ {
+ data = materialHeader.Unk2E0;
+ }
+ else if (cbuffer.Count == materialHeader.Unk300.Count)
+ {
+ data = materialHeader.Unk300;
+ }
+ else
+ {
+ if (materialHeader.PSVector4Container.IsValid())
+ {
+ // Try the Vector4 storage file
+ TigerFile container = new(materialHeader.PSVector4Container.GetReferenceHash());
+ byte[] containerData = container.GetData();
+ int num = containerData.Length / 16;
+ if (cbuffer.Count == num)
+ {
+ List float4s = new();
+ for (int i = 0; i < containerData.Length / 16; i++)
+ {
+ float4s.Add(containerData.Skip(i * 16).Take(16).ToArray().ToType());
+ }
+
+ data = float4s;
+ }
+ }
+ }
+ }
+
+ for (int i = 0; i < cbuffer.Count; i++)
+ {
+ if (data == null)
+ buffers.AppendLine($"\t{cbType}{cbuffer.Index}_{i} \"[0.000 0.000 0.000 0.000]\"");
+ else
+ {
+ try
+ {
+ if (data[i] is Vec4)
+ {
+ buffers.AppendLine($"\t{cbType}{cbuffer.Index}_{i} \"[{data[i].Vec.X} {data[i].Vec.Y} {data[i].Vec.Z} {data[i].Vec.W}]\"");
+ }
+ else if (data[i] is Vector4)
+ {
+ buffers.AppendLine($"\t{cbType}{cbuffer.Index}_{i} \"[{data[i].X} {data[i].Y} {data[i].Z} {data[i].W}]\"");
+ }
+ }
+ catch (Exception e)
+ {
+ buffers.AppendLine($"\t{cbType}{cbuffer.Index}_{i} \"[0.000 0.000 0.000 0.000]\"");
+ }
+ }
+ }
+ }
+
+ return buffers;
+ }
}
diff --git a/Tiger/Exporters/blender_api_template.py b/Tiger/Exporters/blender_api_template.py
index 73b28092..53dd688a 100644
--- a/Tiger/Exporters/blender_api_template.py
+++ b/Tiger/Exporters/blender_api_template.py
@@ -2,10 +2,198 @@
import os
RIP_LOCATION = None
-
-class NODE_PT_MAINPANEL(bpy.types.Panel):
- bl_label = "Custom Node Group"
- bl_idname = "NODE_PT_MAINPANEL"
+#Detail Texture Position and Scale
+armordetaildiffuseposition = (DiffTrans1.Z, DiffTrans1.W, 0.000)
+armordetaildiffusescale = (DiffTrans1.X, DiffTrans1.Y, 0.000)
+armordetailnormalposition = (NormTrans1.Z, NormTrans1.W, 0.000)
+armordetailnormalscale = (NormTrans1.X, NormTrans1.Y, 0.000)
+clothdetaildiffuseposition = (DiffTrans2.Z, DiffTrans2.W, 0.000)
+clothdetaildiffusescale = (DiffTrans2.X, DiffTrans2.Y, 0.000)
+clothdetailnormalposition = (NormTrans2.Z, NormTrans2.W, 0.000)
+clothdetailnormalscale = (NormTrans2.X, NormTrans2.Y, 0.000)
+suitdetaildiffuseposition = (DiffTrans3.Z, DiffTrans3.W, 0.000)
+suitdetaildiffusescale = (DiffTrans3.X, DiffTrans3.Y, 0.000)
+suitdetailnormalposition = (NormTrans3.Z, NormTrans3.W, 0.000)
+suitdetailnormalscale = (NormTrans3.X, NormTrans3.Y, 0.000)
+
+#Armor Primary Slot
+armorprimarydyecolor = (CPrime1.X, CPrime1.Y, CPrime1.Z, 1.0)
+armorprimaryroughnessremapX = PrimeRoughMap1.X
+armorprimaryroughnessremapY = PrimeRoughMap1.Y
+armorprimaryroughnessremapZ = PrimeRoughMap1.Z
+armorprimaryroughnessremapW = PrimeRoughMap1.W
+armorprimarywearremapX = PrimeWearMap1.X
+armorprimarywearremapY = PrimeWearMap1.Y
+armorprimarywearremapZ = PrimeWearMap1.Z
+armorprimarywearremapW = PrimeWearMap1.W
+armorprimarydetaildiffuseblend = PrimeMatParams1.X
+armorprimarydetailnormalblend = PrimeMatParams1.Y
+armorprimarydetailroughnessblend = PrimeMatParams1.Z
+armorprimarymetalness = PrimeMatParams1.W
+armorprimaryiridescence = PrimeAdvMatParams1.X
+armorprimaryfuzz = PrimeAdvMatParams1.Y
+armorprimarytransmission = PrimeAdvMatParams1.Z
+armorprimaryemissioncolor = (CPrimeEmit1.X, CPrimeEmit1.Y, CPrimeEmit1.Z, 1.0)
+#Worn Armor Primary Slot
+wornarmorprimarydyecolor = (CPrimeWear1.X, CPrimeWear1.Y, CPrimeWear1.Z, 1.0)
+wornarmorprimaryroughnessremapX = PrimeWornRoughMap1.X
+wornarmorprimaryroughnessremapY = PrimeWornRoughMap1.Y
+wornarmorprimaryroughnessremapZ = PrimeWornRoughMap1.Z
+wornarmorprimaryroughnessremapW = PrimeWornRoughMap1.W
+wornarmorprimarydetaildiffuseblend = PrimeWornMatParams1.X
+wornarmorprimarydetailnormalblend = PrimeWornMatParams1.Y
+wornarmorprimarydetailroughnessblend = PrimeWornMatParams1.Z
+wornarmorprimarymetalness = PrimeWornMatParams1.W
+
+#Armor Secondary Slot
+armorsecondarydyecolor = (CSecon1.X, CSecon1.Y, CSecon1.Z, 1.0)
+armorsecondaryroughnessremapX = SeconRoughMap1.X
+armorsecondaryroughnessremapY = SeconRoughMap1.Y
+armorsecondaryroughnessremapZ = SeconRoughMap1.Z
+armorsecondaryroughnessremapW = SeconRoughMap1.W
+armorsecondarywearremapX = SeconWearMap1.X
+armorsecondarywearremapY = SeconWearMap1.Y
+armorsecondarywearremapZ = SeconWearMap1.Z
+armorsecondarywearremapW = SeconWearMap1.W
+armorsecondarydetaildiffuseblend = SeconMatParams1.X
+armorsecondarydetailnormalblend = SeconMatParams1.Y
+armorsecondarydetailroughnessblend = SeconMatParams1.Z
+armorsecondarymetalness = SeconMatParams1.W
+armorsecondaryiridescence = SeconAdvMatParams1.X
+armorsecondaryfuzz = SeconAdvMatParams1.Y
+armorsecondarytransmission = SeconAdvMatParams1.Z
+armorsecondaryemissioncolor = (CSeconEmit1.X, CSeconEmit1.Y, CSeconEmit1.Z, 1.0)
+#Worn Armor Secondary Slot
+wornarmorsecondarydyecolor = (CSeconWear1.X, CSeconWear1.Y, CSeconWear1.Z, 1.0)
+wornarmorsecondaryroughnessremapX = SeconWornRoughMap1.X
+wornarmorsecondaryroughnessremapY = SeconWornRoughMap1.Y
+wornarmorsecondaryroughnessremapZ = SeconWornRoughMap1.Z
+wornarmorsecondaryroughnessremapW = SeconWornRoughMap1.W
+wornarmorsecondarydetaildiffuseblend = SeconWornMatParams1.X
+wornarmorsecondarydetailnormalblend = SeconWornMatParams1.Y
+wornarmorsecondarydetailroughnessblend = SeconWornMatParams1.Z
+wornarmorsecondarymetalness = SeconWornMatParams1.W
+
+#Cloth Primary Slot
+clothprimarydyecolor = (CPrime2.X, CPrime2.Y, CPrime2.Z, 1.0)
+clothprimaryroughnessremapX = PrimeRoughMap2.X
+clothprimaryroughnessremapY = PrimeRoughMap2.Y
+clothprimaryroughnessremapZ = PrimeRoughMap2.Z
+clothprimaryroughnessremapW = PrimeRoughMap2.W
+clothprimarywearremapX = PrimeWearMap2.X
+clothprimarywearremapY = PrimeWearMap2.Y
+clothprimarywearremapZ = PrimeWearMap2.Z
+clothprimarywearremapW = PrimeWearMap2.W
+clothprimarydetaildiffuseblend = PrimeMatParams2.X
+clothprimarydetailnormalblend = PrimeMatParams2.Y
+clothprimarydetailroughnessblend = PrimeMatParams2.Z
+clothprimarymetalness = PrimeMatParams2.W
+clothprimaryiridescence = PrimeAdvMatParams2.X
+clothprimaryfuzz = PrimeAdvMatParams2.Y
+clothprimarytransmission = PrimeAdvMatParams2.Z
+clothprimaryemissioncolor = (CPrimeEmit2.X, CPrimeEmit2.Y, CPrimeEmit2.Z, 1.0)
+#Worn Cloth Primary Slot
+wornclothprimarydyecolor = (CPrimeWear2.X, CPrimeWear2.Y, CPrimeWear2.Z, 1.0)
+wornclothprimaryroughnessremapX = PrimeWornRoughMap2.X
+wornclothprimaryroughnessremapY = PrimeWornRoughMap2.Y
+wornclothprimaryroughnessremapZ = PrimeWornRoughMap2.Z
+wornclothprimaryroughnessremapW = PrimeWornRoughMap2.W
+wornclothprimarydetaildiffuseblend = PrimeWornMatParams1.X
+wornclothprimarydetailnormalblend = PrimeWornMatParams1.Y
+wornclothprimarydetailroughnessblend = PrimeWornMatParams1.Z
+wornclothprimarymetalness = PrimeWornMatParams1.W
+
+#Cloth secondary Slot
+clothsecondarydyecolor = (CSecon2.X, CSecon2.Y, CSecon2.Z, 1.0)
+clothsecondaryroughnessremapX = SeconRoughMap2.X
+clothsecondaryroughnessremapY = SeconRoughMap2.Y
+clothsecondaryroughnessremapZ = SeconRoughMap2.Z
+clothsecondaryroughnessremapW = SeconRoughMap2.W
+clothsecondarywearremapX = SeconWearMap2.X
+clothsecondarywearremapY = SeconWearMap2.Y
+clothsecondarywearremapZ = SeconWearMap2.Z
+clothsecondarywearremapW = SeconWearMap2.W
+clothsecondarydetaildiffuseblend = SeconMatParams2.X
+clothsecondarydetailnormalblend = SeconMatParams2.Y
+clothsecondarydetailroughnessblend = SeconMatParams2.Z
+clothsecondarymetalness = SeconMatParams2.W
+clothsecondaryiridescence = SeconAdvMatParams2.X
+clothsecondaryfuzz = SeconAdvMatParams2.Y
+clothsecondarytransmission = SeconAdvMatParams2.Z
+clothsecondaryemissioncolor = (CSeconEmit2.X, CSeconEmit2.Y, CSeconEmit2.Z, 1.0)
+#Worn Cloth secondary Slot
+wornclothsecondarydyecolor = (CSeconWear2.X, CSeconWear2.Y, CSeconWear2.Z, 1.0)
+wornclothsecondaryroughnessremapX = SeconWornRoughMap2.X
+wornclothsecondaryroughnessremapY = SeconWornRoughMap2.Y
+wornclothsecondaryroughnessremapZ = SeconWornRoughMap2.Z
+wornclothsecondaryroughnessremapW = SeconWornRoughMap2.W
+wornclothsecondarydetaildiffuseblend = SeconWornMatParams2.X
+wornclothsecondarydetailnormalblend = SeconWornMatParams2.Y
+wornclothsecondarydetailroughnessblend = SeconWornMatParams2.Z
+wornclothsecondarymetalness = SeconWornMatParams2.W
+
+#Suit Primary Slot
+suitprimarydyecolor = (CPrime3.X, CPrime3.Y, CPrime3.Z, 1.0)
+suitprimaryroughnessremapX = PrimeRoughMap3.X
+suitprimaryroughnessremapY = PrimeRoughMap3.Y
+suitprimaryroughnessremapZ = PrimeRoughMap3.Z
+suitprimaryroughnessremapW = PrimeRoughMap3.W
+suitprimarywearremapX = PrimeWearMap3.X
+suitprimarywearremapY = PrimeWearMap3.Y
+suitprimarywearremapZ = PrimeWearMap3.Z
+suitprimarywearremapW = PrimeWearMap3.W
+suitprimarydetaildiffuseblend = PrimeMatParams3.X
+suitprimarydetailnormalblend = PrimeMatParams3.Y
+suitprimarydetailroughnessblend = PrimeMatParams3.Z
+suitprimarymetalness = PrimeMatParams3.W
+suitprimaryiridescence = PrimeAdvMatParams3.X
+suitprimaryfuzz = PrimeAdvMatParams3.Y
+suitprimarytransmission = PrimeAdvMatParams3.Z
+suitprimaryemissioncolor = (CPrimeEmit3.X, CPrimeEmit3.Y, CPrimeEmit3.Z, 1.0)
+#Worn Suit Primary Slot
+wornsuitprimarydyecolor = (CPrimeWear3.X, CPrimeWear3.Y, CPrimeWear3.Z, 1.0)
+wornsuitprimaryroughnessremapX = PrimeWornRoughMap3.X
+wornsuitprimaryroughnessremapY = PrimeWornRoughMap3.Y
+wornsuitprimaryroughnessremapZ = PrimeWornRoughMap3.Z
+wornsuitprimaryroughnessremapW = PrimeWornRoughMap3.W
+wornsuitprimarydetaildiffuseblend = PrimeWornMatParams3.X
+wornsuitprimarydetailnormalblend = PrimeWornMatParams3.Y
+wornsuitprimarydetailroughnessblend = PrimeWornMatParams3.Z
+wornsuitprimarymetalness = PrimeWornMatParams3.W
+
+#Suit Secondary Slot
+suitsecondarydyecolor = (CSecon3.X, CSecon3.Y, CSecon3.Z, 1.0)
+suitsecondaryroughnessremapX = SeconRoughMap3.X
+suitsecondaryroughnessremapY = SeconRoughMap3.Y
+suitsecondaryroughnessremapZ = SeconRoughMap3.Z
+suitsecondaryroughnessremapW = SeconRoughMap3.W
+suitsecondarywearremapX = SeconWearMap3.X
+suitsecondarywearremapY = SeconWearMap3.Y
+suitsecondarywearremapZ = SeconWearMap3.Z
+suitsecondarywearremapW = SeconWearMap3.W
+suitsecondarydetaildiffuseblend = SeconMatParams3.X
+suitsecondarydetailnormalblend = SeconMatParams3.Y
+suitsecondarydetailroughnessblend = SeconMatParams3.Z
+suitsecondarymetalness = SeconMatParams3.W
+suitsecondaryiridescence = SeconAdvMatParams3.X
+suitsecondaryfuzz = SeconAdvMatParams3.Y
+suitsecondarytransmission = SeconAdvMatParams3.Z
+suitsecondaryemissioncolor = (CSeconEmit3.X, CSeconEmit3.Y, CSeconEmit3.Z, 1.0)
+#Worn Suit Secondary Slot
+wornsuitsecondarydyecolor = (CSeconWear3.X, CSeconWear3.Y, CSeconWear3.Z, 1.0)
+wornsuitsecondaryroughnessremapX = SeconWornRoughMap3.X
+wornsuitsecondaryroughnessremapY = SeconWornRoughMap3.Y
+wornsuitsecondaryroughnessremapZ = SeconWornRoughMap3.Z
+wornsuitsecondaryroughnessremapW = SeconWornRoughMap3.W
+wornsuitsecondarydetaildiffuseblend = SeconWornMatParams3.X
+wornsuitsecondarydetailnormalblend = SeconWornMatParams3.Y
+wornsuitsecondarydetailroughnessblend = SeconWornMatParams3.Z
+wornsuitsecondarymetalness = SeconWornMatParams3.W
+#########################################################
+
+class MAINPANEL(bpy.types.Panel):
+ bl_label = "D2 Shader Preset"
+ bl_idname = "MAINPANEL"
bl_space_type = 'NODE_EDITOR'
bl_region_type = 'UI'
bl_category = 'D2 Shader'
@@ -16,8053 +204,3676 @@ def draw(self, context):
row = layout.row()
row.operator('node.test_operator')
+def create_Shader_Preset(context, operator, group_name, riplocation):
-def create_test_group(context, operator, group_name, riplocation):
- # Enable nodes
bpy.context.scene.use_nodes = True
+
+ Shader_Preset = bpy.data.node_groups.new(group_name, 'ShaderNodeTree')
+#Nodegroup Inputs
+ Shader_Preset.inputs.new('NodeSocketColor', 'Dyemap Color')
+ Shader_Preset.inputs.new('NodeSocketFloat', 'Dyemap Alpha')
+ Shader_Preset.inputs.new('NodeSocketFloat', 'Slot Override [1-6]')
+#Nodegroup Outputs
+ Shader_Preset.outputs.new('NodeSocketColor', 'Dye Color A')
+ Shader_Preset.outputs.new('NodeSocketColor', 'Dye Color B')
+ Shader_Preset.outputs.new('NodeSocketColor', 'Wear Remap_A')
+ Shader_Preset.outputs.new('NodeSocketColor', 'Wear Remap_B')
+ Shader_Preset.outputs.new('NodeSocketColor', 'Roughness Remap_A')
+ Shader_Preset.outputs.new('NodeSocketColor', 'Roughness Remap_B')
+ Shader_Preset.outputs.new('NodeSocketColor', 'Roughness Remap_C')
+ Shader_Preset.outputs.new('NodeSocketColor', 'Detail Diffuse')
+ Shader_Preset.outputs.new('NodeSocketColor', 'Detail Normal')
+ Shader_Preset.outputs.new('NodeSocketColor', 'Detail Blends')
+ Shader_Preset.outputs.new('NodeSocketColor', 'Worn Detail Blends')
+ Shader_Preset.outputs.new('NodeSocketColor', 'Iridescence, Fuzz, Transmission')
+ Shader_Preset.outputs.new('NodeSocketColor', 'Emission')
+#Frames
+ ArmorPrimaryFrame = Shader_Preset.nodes.new("NodeFrame")
+ ArmorPrimaryFrame.label = "Armor Primary"
+ ArmorPrimaryFrame.use_custom_color = True
+ ArmorPrimaryFrame.color = (CPrime1.X, CPrime1.Y, CPrime1.Z)
+
+ WornArmorPrimaryFrame = Shader_Preset.nodes.new("NodeFrame")
+ WornArmorPrimaryFrame.label = "Worn Armor Primary"
+ WornArmorPrimaryFrame.use_custom_color = True
+ WornArmorPrimaryFrame.color = (CPrimeWear1.X, CPrimeWear1.Y, CPrimeWear1.Z)
+
+ ArmorSecondaryFrame = Shader_Preset.nodes.new("NodeFrame")
+ ArmorSecondaryFrame.label = "Armor Secondary"
+ ArmorSecondaryFrame.use_custom_color = True
+ ArmorSecondaryFrame.color = (CSecon1.X, CSecon1.Y, CSecon1.Z)
+
+ WornArmorSecondaryFrame = Shader_Preset.nodes.new("NodeFrame")
+ WornArmorSecondaryFrame.label = "Worn Armor Secondary"
+ WornArmorSecondaryFrame.use_custom_color = True
+ WornArmorSecondaryFrame.color = (CSeconWear1.X, CSeconWear1.Y, CSeconWear1.Z)
+
+ ClothPrimaryFrame = Shader_Preset.nodes.new("NodeFrame")
+ ClothPrimaryFrame.label = "Cloth Primary"
+ ClothPrimaryFrame.use_custom_color = True
+ ClothPrimaryFrame.color = (CPrime2.X, CPrime2.Y, CPrime2.Z)
+
+ WornClothPrimaryFrame = Shader_Preset.nodes.new("NodeFrame")
+ WornClothPrimaryFrame.label = "Worn Cloth Primary"
+ WornClothPrimaryFrame.use_custom_color = True
+ WornClothPrimaryFrame.color = (CPrimeWear2.X, CPrimeWear2.Y, CPrimeWear2.Z)
+
+ ClothSecondaryFrame = Shader_Preset.nodes.new("NodeFrame")
+ ClothSecondaryFrame.label = "Cloth Secondary"
+ ClothSecondaryFrame.use_custom_color = True
+ ClothSecondaryFrame.color = (CSecon2.X, CSecon2.Y, CSecon2.Z)
+
+ WornClothSecondaryFrame = Shader_Preset.nodes.new("NodeFrame")
+ WornClothSecondaryFrame.label = "Worn Cloth Secondary"
+ WornClothSecondaryFrame.use_custom_color = True
+ WornClothSecondaryFrame.color = (CSeconWear2.X, CSeconWear2.Y, CSeconWear2.Z)
+
+ SuitPrimaryFrame = Shader_Preset.nodes.new("NodeFrame")
+ SuitPrimaryFrame.label = "Suit Primary"
+ SuitPrimaryFrame.use_custom_color = True
+ SuitPrimaryFrame.color = (CPrime3.X, CPrime3.Y, CPrime3.Z)
+
+ WornSuitPrimaryFrame = Shader_Preset.nodes.new("NodeFrame")
+ WornSuitPrimaryFrame.label = "Worn Suit Primary"
+ WornSuitPrimaryFrame.use_custom_color = True
+ WornSuitPrimaryFrame.color = (CPrimeWear3.X, CPrimeWear3.Y, CPrimeWear3.Z)
+
+ SuitSecondaryFrame = Shader_Preset.nodes.new("NodeFrame")
+ SuitSecondaryFrame.label = "Suit Secondary"
+ SuitSecondaryFrame.use_custom_color = True
+ SuitSecondaryFrame.color = (CSecon3.X, CSecon3.Y, CSecon3.Z)
+
+ WornSuitSecondaryFrame = Shader_Preset.nodes.new("NodeFrame")
+ WornSuitSecondaryFrame.label = "Worn Suit Secondary"
+ WornSuitSecondaryFrame.use_custom_color = True
+ WornSuitSecondaryFrame.color = (CSeconWear3.X, CSeconWear3.Y, CSeconWear3.Z)
+
+ DoNotTouchFrame = Shader_Preset.nodes.new("NodeFrame")
+ DoNotTouchFrame.label = "DO NOT TOUCH!"
+ DoNotTouchFrame.use_custom_color = True
+ DoNotTouchFrame.color = (0.0, 0.0, 0.0)
+#Texture nodes
+ armor_primary_detail_diffuse_map = Shader_Preset.nodes.new("ShaderNodeTexImage")
+ armor_primary_detail_diffuse_map.label = "Detail Diffuse Map"
+ armor_primary_detail_diffuse_map.use_custom_color = True
+ armor_primary_detail_diffuse_map.color = (CPrime1.X, CPrime1.Y, CPrime1.Z)
+ armor_primary_detail_diffuse_map.interpolation = 'Linear'
+ armor_primary_detail_diffuse_map.projection = 'FLAT'
+ armor_primary_detail_diffuse_map.extension = 'REPEAT'
+ armor_primary_detail_diffuse_map.hide = True
- test_group = bpy.data.node_groups.new(group_name, 'ShaderNodeTree')
-
- # Activate Node Connection usage
- link = test_group.links.new
-
- # Nodegroup Outputs
- test_group.inputs.new('NodeSocketFloat', 'Slot Override [1-6]')
-
- test_group.outputs.new('NodeSocketColor', 'Dye Color A')
- test_group.outputs.new('NodeSocketColor', 'Dye Color B')
- test_group.outputs.new('NodeSocketColor', 'Wear Remap_A')
- test_group.outputs.new('NodeSocketColor', 'Wear Remap_B')
- test_group.outputs.new('NodeSocketColor', 'Roughness Remap_A')
- test_group.outputs.new('NodeSocketColor', 'Roughness Remap_B')
- test_group.outputs.new('NodeSocketColor', 'Roughness Remap_C')
- test_group.outputs.new('NodeSocketColor', 'Detail Diffuse')
- test_group.outputs.new('NodeSocketColor', 'Detail Normal')
- test_group.outputs.new('NodeSocketColor', 'Detail Blends')
- test_group.outputs.new('NodeSocketColor', 'Worn Detail Blends')
- test_group.outputs.new('NodeSocketColor', 'Iridescence, Fuzz, Transmission')
- test_group.outputs.new('NodeSocketColor', 'Emission')
-
- # --------------------------------------------------------------------------------------------
- frame_007_1 = test_group.nodes.new('NodeFrame')
- frame_007_1.color = (0.0, 0.25, 0.25)
- frame_007_1.label = 'Worn Cloth Secondary'
- frame_007_1.location = (-680.0, -3440.0)
- frame_007_1.name = 'Frame.007'
- frame_007_1.use_custom_color = True
-
- frame_008_1 = test_group.nodes.new('NodeFrame')
- frame_008_1.color = (0.0, 0.0, 1.0)
- frame_008_1.label = 'Suit Primary'
- frame_008_1.location = (-680.0, -3860.0)
- frame_008_1.name = 'Frame.008'
- frame_008_1.use_custom_color = True
-
- frame_011_1 = test_group.nodes.new('NodeFrame')
- frame_011_1.color = (0.25, 0.25, 0.25)
- frame_011_1.label = 'Worn Suit Secondary'
- frame_011_1.location = (-700.0, -5900.0)
- frame_011_1.name = 'Frame.011'
- frame_011_1.use_custom_color = True
-
- frame_005_1 = test_group.nodes.new('NodeFrame')
- frame_005_1.color = (0.0, 0.25, 0.0)
- frame_005_1.label = 'Worn Cloth Primary'
- frame_005_1.location = (-680.0, -2280.0)
- frame_005_1.name = 'Frame.005'
- frame_005_1.use_custom_color = True
-
- frame_002_1 = test_group.nodes.new('NodeFrame')
- frame_002_1.color = (1.0, 1.0, 0.0)
- frame_002_1.label = 'Armor Secondary'
- frame_002_1.location = (-680.0, -120.0)
- frame_002_1.name = 'Frame.002'
- frame_002_1.use_custom_color = True
-
- frame_1 = test_group.nodes.new('NodeFrame')
- frame_1.color = (1.0, 0.0, 0.0)
- frame_1.label = 'Armor Primary'
- frame_1.location = (-660.0, 720.0)
- frame_1.name = 'Frame'
- frame_1.use_custom_color = True
-
- frame_009_1 = test_group.nodes.new('NodeFrame')
- frame_009_1.color = (0.0, 0.0, 0.25)
- frame_009_1.label = 'Worn Suit Primary'
- frame_009_1.location = (-680.0, -4660.0)
- frame_009_1.name = 'Frame.009'
- frame_009_1.use_custom_color = True
-
- frame_003_1 = test_group.nodes.new('NodeFrame')
- frame_003_1.color = (0.25, 0.25, 0.0)
- frame_003_1.label = 'Worn Armor Secondary'
- frame_003_1.location = (920.0, -1380.0)
- frame_003_1.name = 'Frame.003'
- frame_003_1.use_custom_color = True
-
- frame_006_1 = test_group.nodes.new('NodeFrame')
- frame_006_1.color = (0.0, 1.0, 1.0)
- frame_006_1.label = 'Cloth Secondary'
- frame_006_1.location = (-680.0, -2620.0)
- frame_006_1.name = 'Frame.006'
- frame_006_1.use_custom_color = True
-
- frame_010_1 = test_group.nodes.new('NodeFrame')
- frame_010_1.color = (1.0, 1.0, 1.0)
- frame_010_1.label = 'Suit Secondary'
- frame_010_1.location = (-700.0, -5080.0)
- frame_010_1.name = 'Frame.010'
- frame_010_1.use_custom_color = True
-
- frame_001_1 = test_group.nodes.new('NodeFrame')
- frame_001_1.color = (0.25, 0.0, 0.0)
- frame_001_1.label = 'Worn Armor Primary'
- frame_001_1.location = (-660.0, 300.0)
- frame_001_1.name = 'Frame.001'
- frame_001_1.use_custom_color = True
-
- frame_004_1 = test_group.nodes.new('NodeFrame')
- frame_004_1.color = (0.0, 1.0, 0.0)
- frame_004_1.label = 'Cloth Primary'
- frame_004_1.location = (-680.0, -1400.0)
- frame_004_1.name = 'Frame.004'
- frame_004_1.use_custom_color = True
-
- frame_012_1 = test_group.nodes.new('NodeFrame')
- frame_012_1.color = (0.0, 0.0, 0.0)
- frame_012_1.label = 'DO NOT TOUCH! DO NOT TOUCH! DO NOT TOUCH! DO NOT TOUCH!'
- frame_012_1.location = (2800.0, -1140.0)
- frame_012_1.name = 'Frame.012'
- frame_012_1.use_custom_color = True
-
- reroute_114_1 = test_group.nodes.new('NodeReroute')
- reroute_114_1.parent = test_group.nodes.get('Frame.008')
- reroute_114_1.location = (300.0, -100.0)
-
- reroute_116_1 = test_group.nodes.new('NodeReroute')
- reroute_116_1.parent = test_group.nodes.get('Frame.008')
- reroute_116_1.location = (300.0, -180.0)
-
- reroute_113_1 = test_group.nodes.new('NodeReroute')
- reroute_113_1.parent = test_group.nodes.get('Frame.008')
- reroute_113_1.location = (300.0, -60.0)
-
- reroute_115_1 = test_group.nodes.new('NodeReroute')
- reroute_115_1.parent = test_group.nodes.get('Frame.008')
- reroute_115_1.location = (300.0, -140.0)
-
- reroute_118_1 = test_group.nodes.new('NodeReroute')
- reroute_118_1.parent = test_group.nodes.get('Frame.008')
- reroute_118_1.location = (300.0, -240.0)
-
- reroute_112_1 = test_group.nodes.new('NodeReroute')
- reroute_112_1.parent = test_group.nodes.get('Frame.008')
- reroute_112_1.location = (300.0, -20.0)
-
- reroute_104_1 = test_group.nodes.new('NodeReroute')
- reroute_104_1.parent = test_group.nodes.get('Frame.007')
- reroute_104_1.location = (300.0, -60.0)
-
- reroute_105_1 = test_group.nodes.new('NodeReroute')
- reroute_105_1.parent = test_group.nodes.get('Frame.007')
- reroute_105_1.location = (300.0, -100.0)
-
- reroute_106_1 = test_group.nodes.new('NodeReroute')
- reroute_106_1.parent = test_group.nodes.get('Frame.007')
- reroute_106_1.location = (300.0, -140.0)
-
- reroute_107_1 = test_group.nodes.new('NodeReroute')
- reroute_107_1.parent = test_group.nodes.get('Frame.007')
- reroute_107_1.location = (300.0, -180.0)
-
- reroute_197_1 = test_group.nodes.new('NodeReroute')
- reroute_197_1.parent = test_group.nodes.get('Frame.011')
- reroute_197_1.location = (320.0, -120.0)
+ bpy.data.images.load(os.path.join(riplocation, "OUTPUTPATH/DiffMap1"), check_existing=False)
+ DetailDiffuse01 = bpy.data.images.get("DiffMap1")
+ DetailDiffuse01.colorspace_settings.name = "sRGB"
+ DetailDiffuse01.alpha_mode = "CHANNEL_PACKED"
+ armor_primary_detail_diffuse_map.image = DetailDiffuse01
+
+ armor_primary_detail_normal_map = Shader_Preset.nodes.new("ShaderNodeTexImage")
+ armor_primary_detail_normal_map.label = "Detail Normal Map"
+ armor_primary_detail_normal_map.use_custom_color = True
+ armor_primary_detail_normal_map.color = (CPrime1.X, CPrime1.Y, CPrime1.Z)
+ armor_primary_detail_normal_map.interpolation = 'Linear'
+ armor_primary_detail_normal_map.projection = 'FLAT'
+ armor_primary_detail_normal_map.extension = 'REPEAT'
+ armor_primary_detail_normal_map.hide = True
+
+ bpy.data.images.load(os.path.join(riplocation, "OUTPUTPATH/NormMap1"), check_existing=False)
+ DetailNormal01 = bpy.data.images.get("NormMap1")
+ DetailNormal01.colorspace_settings.name = "Non-Color"
+ DetailNormal01.alpha_mode = "CHANNEL_PACKED"
+ armor_primary_detail_normal_map.image = DetailNormal01
- reroute_196_1 = test_group.nodes.new('NodeReroute')
- reroute_196_1.parent = test_group.nodes.get('Frame.011')
- reroute_196_1.location = (320.0, -80.0)
+ cloth_primary_detail_diffuse_map = Shader_Preset.nodes.new("ShaderNodeTexImage")
+ cloth_primary_detail_diffuse_map.label = "Detail Diffuse Map"
+ cloth_primary_detail_diffuse_map.use_custom_color = True
+ cloth_primary_detail_diffuse_map.color = (CPrime2.X, CPrime2.Y, CPrime2.Z)
+ cloth_primary_detail_diffuse_map.interpolation = 'Linear'
+ cloth_primary_detail_diffuse_map.projection = 'FLAT'
+ cloth_primary_detail_diffuse_map.extension = 'REPEAT'
+ cloth_primary_detail_diffuse_map.hide = True
- reroute_198_1 = test_group.nodes.new('NodeReroute')
- reroute_198_1.parent = test_group.nodes.get('Frame.011')
- reroute_198_1.location = (320.0, -160.0)
+ bpy.data.images.load(os.path.join(riplocation,"OUTPUTPATH/DiffMap2"), check_existing=False)
+ DetailDiffuse02 = bpy.data.images.get("DiffMap2")
+ DetailDiffuse02.colorspace_settings.name = "sRGB"
+ DetailDiffuse02.alpha_mode = "CHANNEL_PACKED"
+ cloth_primary_detail_diffuse_map.image = DetailDiffuse02
- reroute_199_1 = test_group.nodes.new('NodeReroute')
- reroute_199_1.parent = test_group.nodes.get('Frame.011')
- reroute_199_1.location = (320.0, -200.0)
+ cloth_primary_detail_normal_map = Shader_Preset.nodes.new("ShaderNodeTexImage")
+ cloth_primary_detail_normal_map.label = "Detail Normal Map"
+ cloth_primary_detail_normal_map.use_custom_color = True
+ cloth_primary_detail_normal_map.color = (CPrime2.X, CPrime2.Y, CPrime2.Z)
+ cloth_primary_detail_normal_map.interpolation = 'Linear'
+ cloth_primary_detail_normal_map.projection = 'FLAT'
+ cloth_primary_detail_normal_map.extension = 'REPEAT'
+ cloth_primary_detail_normal_map.hide = True
- reroute_290_1 = test_group.nodes.new('NodeReroute')
- reroute_290_1.location = (-980.0, -360.0)
+ bpy.data.images.load(os.path.join(riplocation,"OUTPUTPATH/NormMap2"), check_existing=False)
+ DetailNormal02 = bpy.data.images.get("NormMap2")
+ DetailNormal02.colorspace_settings.name = "Non-Color"
+ DetailNormal02.alpha_mode = "CHANNEL_PACKED"
+ cloth_primary_detail_normal_map.image = DetailNormal02
+
+ suit_primary_detail_diffuse_map = Shader_Preset.nodes.new("ShaderNodeTexImage")
+ suit_primary_detail_diffuse_map.label = "Detail Diffuse Map"
+ suit_primary_detail_diffuse_map.use_custom_color = True
+ suit_primary_detail_diffuse_map.color = (CPrime3.X, CPrime3.Y, CPrime3.Z)
+ suit_primary_detail_diffuse_map.interpolation = 'Linear'
+ suit_primary_detail_diffuse_map.projection = 'FLAT'
+ suit_primary_detail_diffuse_map.extension = 'REPEAT'
+ suit_primary_detail_diffuse_map.hide = True
- reroute_288_1 = test_group.nodes.new('NodeReroute')
- reroute_288_1.location = (-980.0, 200.0)
+ bpy.data.images.load(os.path.join(riplocation, "OUTPUTPATH/DiffMap3"), check_existing=False)
+ DetailDiffuse03 = bpy.data.images.get("DiffMap3")
+ DetailDiffuse03.colorspace_settings.name = "sRGB"
+ DetailDiffuse03.alpha_mode = "CHANNEL_PACKED"
+ suit_primary_detail_diffuse_map.image = DetailDiffuse03
- reroute_291_1 = test_group.nodes.new('NodeReroute')
- reroute_291_1.location = (-920.0, -160.0)
+ suit_primary_detail_normal_map = Shader_Preset.nodes.new("ShaderNodeTexImage")
+ suit_primary_detail_normal_map.label = "Detail Normal Map"
+ suit_primary_detail_normal_map.use_custom_color = True
+ suit_primary_detail_normal_map.color = (CPrime3.X, CPrime3.Y, CPrime3.Z)
+ suit_primary_detail_normal_map.interpolation = 'Linear'
+ suit_primary_detail_normal_map.projection = 'FLAT'
+ suit_primary_detail_normal_map.extension = 'REPEAT'
+ suit_primary_detail_normal_map.hide = True
- reroute_289_1 = test_group.nodes.new('NodeReroute')
- reroute_289_1.location = (-980.0, 860.0)
+ bpy.data.images.load(os.path.join(riplocation, "OUTPUTPATH/NormMap3"), check_existing=False)
+ DetailNormal03 = bpy.data.images.get("NormMap3")
+ DetailNormal03.colorspace_settings.name = "Non-Color"
+ DetailNormal03.alpha_mode = "CHANNEL_PACKED"
+ suit_primary_detail_normal_map.image = DetailNormal03
- reroute_292_1 = test_group.nodes.new('NodeReroute')
- reroute_292_1.location = (-920.0, 660.0)
+#nodes
+ worn_suit_secondary_detail_diffuse_blend = Shader_Preset.nodes.new("ShaderNodeValue")
+ worn_suit_secondary_detail_diffuse_blend.label = "Detail Diffuse Blend"
+ worn_suit_secondary_detail_diffuse_blend.use_custom_color = True
+ worn_suit_secondary_detail_diffuse_blend.color = (CSeconWear3.X, CSeconWear3.Y, CSeconWear3.Z)
+ worn_suit_secondary_detail_diffuse_blend.hide = True
+ worn_suit_secondary_detail_diffuse_blend.outputs[0].default_value = wornsuitsecondarydetaildiffuseblend
- reroute_293_1 = test_group.nodes.new('NodeReroute')
- reroute_293_1.location = (-920.0, -560.0)
+ math_017 = Shader_Preset.nodes.new("ShaderNodeMath")
+ math_017.operation = 'MULTIPLY_ADD'
+ math_017.use_clamp = True
- reroute_295_1 = test_group.nodes.new('NodeReroute')
- reroute_295_1.location = (-1720.0, -200.0)
+ math_017.inputs[1].default_value = 100000.0
- reroute_296_1 = test_group.nodes.new('NodeReroute')
- reroute_296_1.location = (-1720.0, 140.0)
+ math_017.inputs[2].default_value = -99999.0
- reroute_300_1 = test_group.nodes.new('NodeReroute')
- reroute_300_1.location = (-1720.0, -2500.0)
+ suit_detail_diffuse_transform = Shader_Preset.nodes.new("ShaderNodeMapping")
+ suit_detail_diffuse_transform.label = "Detail Diffuse Transform"
+ suit_detail_diffuse_transform.use_custom_color = True
+ suit_detail_diffuse_transform.color = (0.2352934032678604, 0.2352934032678604, 0.5137253999710083)
+ suit_detail_diffuse_transform.vector_type = 'POINT'
+ suit_detail_diffuse_transform.inputs[2].hide = True
+ suit_detail_diffuse_transform.inputs[1].default_value = suitdetaildiffuseposition
+ suit_detail_diffuse_transform.inputs[2].default_value = (0.0, 0.0, 0.0)
+ suit_detail_diffuse_transform.inputs[3].default_value = suitdetaildiffusescale
- reroute_299_1 = test_group.nodes.new('NodeReroute')
- reroute_299_1.location = (-1720.0, -2340.0)
+ reroute_004 = Shader_Preset.nodes.new("NodeReroute")
+ reroute_057 = Shader_Preset.nodes.new("NodeReroute")
- reroute_298_1 = test_group.nodes.new('NodeReroute')
- reroute_298_1.location = (-1720.0, -2680.0)
+ mix_047 = Shader_Preset.nodes.new("ShaderNodeMixRGB")
- reroute_301_1 = test_group.nodes.new('NodeReroute')
- reroute_301_1.location = (-1720.0, -4820.0)
+ suit_primary_roughness_remap_w = Shader_Preset.nodes.new("ShaderNodeValue")
+ suit_primary_roughness_remap_w.label = "Roughness Remap W"
+ suit_primary_roughness_remap_w.use_custom_color = True
+ suit_primary_roughness_remap_w.color = (CPrime3.X, CPrime3.Y, CPrime3.Z)
+ suit_primary_roughness_remap_w.hide = True
+ suit_primary_roughness_remap_w.outputs[0].default_value = suitprimaryroughnessremapW
- reroute_302_1 = test_group.nodes.new('NodeReroute')
- reroute_302_1.location = (-1720.0, -5160.0)
+ reroute_003 = Shader_Preset.nodes.new("NodeReroute")
- uv_map_1 = test_group.nodes.new('ShaderNodeUVMap')
- uv_map_1.label = 'Detail UVs'
- uv_map_1.location = (-2320.0, -2460.0)
- uv_map_1.use_custom_color = False
- uv_map_1.uv_map = 'uv1'
+ armor_secondary_detail_roughness_blend = Shader_Preset.nodes.new("ShaderNodeValue")
+ armor_secondary_detail_roughness_blend.label = "Detail Roughness Blend"
+ armor_secondary_detail_roughness_blend.use_custom_color = True
+ armor_secondary_detail_roughness_blend.color = (CSecon1.X, CSecon1.Y, CSecon1.Z)
+ armor_secondary_detail_roughness_blend.hide = True
+ armor_secondary_detail_roughness_blend.outputs[0].default_value = armorsecondarydetailroughnessblend
- reroute_103_1 = test_group.nodes.new('NodeReroute')
- reroute_103_1.parent = test_group.nodes.get('Frame.007')
- reroute_103_1.location = (300.0, -20.0)
+ reroute_152 = Shader_Preset.nodes.new("NodeReroute")
- reroute_195_1 = test_group.nodes.new('NodeReroute')
- reroute_195_1.parent = test_group.nodes.get('Frame.011')
- reroute_195_1.location = (320.0, -40.0)
+ reroute_053 = Shader_Preset.nodes.new("NodeReroute")
- reroute_320_1 = test_group.nodes.new('NodeReroute')
- reroute_320_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_320_1.location = (-920.0, -2640.0)
+ worn_suit_primary_roughness_remap_z = Shader_Preset.nodes.new("ShaderNodeValue")
+ worn_suit_primary_roughness_remap_z.label = "Roughness Remap Z"
+ worn_suit_primary_roughness_remap_z.use_custom_color = True
+ worn_suit_primary_roughness_remap_z.color = (CPrimeWear3.X, CPrimeWear3.Y, CPrimeWear3.Z)
+ worn_suit_primary_roughness_remap_z.hide = True
+ worn_suit_primary_roughness_remap_z.outputs[0].default_value = wornsuitprimaryroughnessremapZ
- reroute_322_1 = test_group.nodes.new('NodeReroute')
- reroute_322_1.location = (-920.0, -3040.0)
+ math_008 = Shader_Preset.nodes.new("ShaderNodeMath")
+ math_008.operation = 'MULTIPLY_ADD'
- reroute_323_1 = test_group.nodes.new('NodeReroute')
- reroute_323_1.location = (-980.0, -1620.0)
+ math_008.inputs[1].default_value = 1000.0
- reroute_319_1 = test_group.nodes.new('NodeReroute')
- reroute_319_1.location = (-980.0, -2280.0)
+ math_008.inputs[2].default_value = -666.0
- reroute_324_1 = test_group.nodes.new('NodeReroute')
- reroute_324_1.location = (-980.0, -2840.0)
+ reroute_190 = Shader_Preset.nodes.new("NodeReroute")
- reroute_321_1 = test_group.nodes.new('NodeReroute')
- reroute_321_1.location = (-920.0, -1820.0)
+ combine_xyz_016 = Shader_Preset.nodes.new("ShaderNodeCombineXYZ")
- reroute_325_1 = test_group.nodes.new('NodeReroute')
- reroute_325_1.location = (-920.0, -5120.0)
+ reroute_032 = Shader_Preset.nodes.new("NodeReroute")
- reroute_328_1 = test_group.nodes.new('NodeReroute')
- reroute_328_1.location = (-980.0, -4760.0)
+ mix_023 = Shader_Preset.nodes.new("ShaderNodeMixRGB")
- reroute_330_1 = test_group.nodes.new('NodeReroute')
- reroute_330_1.location = (-920.0, -4300.0)
+ #node Suit Primary Wear Remap Z
+ suit_primary_wear_remap_z = Shader_Preset.nodes.new("ShaderNodeValue")
+ suit_primary_wear_remap_z.label = "Wear Remap Z"
+ suit_primary_wear_remap_z.use_custom_color = True
+ suit_primary_wear_remap_z.color = (CPrime3.X, CPrime3.Y, CPrime3.Z)
+ suit_primary_wear_remap_z.hide = True
+ suit_primary_wear_remap_z.outputs[0].default_value = suitprimarywearremapZ
- reroute_326_1 = test_group.nodes.new('NodeReroute')
- reroute_326_1.location = (-920.0, -5520.0)
+ worn_armor_secondary_roughness_remap_w = Shader_Preset.nodes.new("ShaderNodeValue")
+ worn_armor_secondary_roughness_remap_w.label = "Roughness Remap W"
+ worn_armor_secondary_roughness_remap_w.use_custom_color = True
+ worn_armor_secondary_roughness_remap_w.color = (CSeconWear1.X, CSeconWear1.Y, CSeconWear1.Z)
+ worn_armor_secondary_roughness_remap_w.hide = True
+ worn_armor_secondary_roughness_remap_w.outputs[0].default_value = wornarmorsecondaryroughnessremapW
- reroute_329_1 = test_group.nodes.new('NodeReroute')
- reroute_329_1.location = (-980.0, -5320.0)
+ reroute_162 = Shader_Preset.nodes.new("NodeReroute")
- reroute_327_1 = test_group.nodes.new('NodeReroute')
- reroute_327_1.location = (-980.0, -4100.0)
+ worn_cloth_primary_dye_color = Shader_Preset.nodes.new("ShaderNodeRGB")
+ worn_cloth_primary_dye_color.label = "Dye Color"
+ worn_cloth_primary_dye_color.use_custom_color = True
+ worn_cloth_primary_dye_color.color = (CPrimeWear2.X, CPrimeWear2.Y, CPrimeWear2.Z)
+ worn_cloth_primary_dye_color.hide = True
+ worn_cloth_primary_dye_color.outputs[0].default_value = wornclothprimarydyecolor
- reroute_119_1 = test_group.nodes.new('NodeReroute')
- reroute_119_1.parent = test_group.nodes.get('Frame.008')
- reroute_119_1.location = (300.0, -260.0)
+ group_input = Shader_Preset.nodes.new("NodeGroupInput")
- reroute_120_1 = test_group.nodes.new('NodeReroute')
- reroute_120_1.parent = test_group.nodes.get('Frame.008')
- reroute_120_1.location = (300.0, -300.0)
+ mix_065 = Shader_Preset.nodes.new("ShaderNodeMixRGB")
- reroute_121_1 = test_group.nodes.new('NodeReroute')
- reroute_121_1.parent = test_group.nodes.get('Frame.008')
- reroute_121_1.location = (300.0, -340.0)
+ mix_065.inputs[2].default_value = (4.0, 4.0, 4.0, 1.0)
- reroute_122_1 = test_group.nodes.new('NodeReroute')
- reroute_122_1.parent = test_group.nodes.get('Frame.008')
- reroute_122_1.location = (300.0, -380.0)
+ reroute_023 = Shader_Preset.nodes.new("NodeReroute")
- reroute_111_1 = test_group.nodes.new('NodeReroute')
- reroute_111_1.parent = test_group.nodes.get('Frame.007')
- reroute_111_1.location = (300.0, -340.0)
+ combine_xyz_017 = Shader_Preset.nodes.new("ShaderNodeCombineXYZ")
- reroute_127_1 = test_group.nodes.new('NodeReroute')
- reroute_127_1.parent = test_group.nodes.get('Frame.008')
- reroute_127_1.location = (300.0, -580.0)
+ worn_suit_secondary_roughness_remap_w = Shader_Preset.nodes.new("ShaderNodeValue")
+ worn_suit_secondary_roughness_remap_w.label = "Roughness Remap W"
+ worn_suit_secondary_roughness_remap_w.use_custom_color = True
+ worn_suit_secondary_roughness_remap_w.color = (CSeconWear3.X, CSeconWear3.Y, CSeconWear3.Z)
+ worn_suit_secondary_roughness_remap_w.hide = True
+ worn_suit_secondary_roughness_remap_w.outputs[0].default_value = wornsuitsecondaryroughnessremapW
- reroute_203_1 = test_group.nodes.new('NodeReroute')
- reroute_203_1.parent = test_group.nodes.get('Frame.011')
- reroute_203_1.location = (320.0, -360.0)
+ reroute_158 = Shader_Preset.nodes.new("NodeReroute")
- reroute_123_1 = test_group.nodes.new('NodeReroute')
- reroute_123_1.parent = test_group.nodes.get('Frame.008')
- reroute_123_1.location = (300.0, -460.0)
+ suit_primary_iridescence = Shader_Preset.nodes.new("ShaderNodeValue")
+ suit_primary_iridescence.label = "Iridescence"
+ suit_primary_iridescence.use_custom_color = True
+ suit_primary_iridescence.color = (CPrime3.X, CPrime3.Y, CPrime3.Z)
+ suit_primary_iridescence.hide = True
+ suit_primary_iridescence.outputs[0].default_value = suitprimaryiridescence
- reroute_125_1 = test_group.nodes.new('NodeReroute')
- reroute_125_1.parent = test_group.nodes.get('Frame.008')
- reroute_125_1.location = (300.0, -500.0)
+ mix_005 = Shader_Preset.nodes.new("ShaderNodeMixRGB")
- reroute_126_1 = test_group.nodes.new('NodeReroute')
- reroute_126_1.parent = test_group.nodes.get('Frame.008')
- reroute_126_1.location = (300.0, -540.0)
+ math_010 = Shader_Preset.nodes.new("ShaderNodeMath")
+ math_010.operation = 'MULTIPLY'
+ math_010.inputs[2].default_value = -500.0
- reroute_117_1 = test_group.nodes.new('NodeReroute')
- reroute_117_1.parent = test_group.nodes.get('Frame.008')
- reroute_117_1.location = (300.0, -220.0)
+ reroute_196 = Shader_Preset.nodes.new("NodeReroute")
- reroute_124_1 = test_group.nodes.new('NodeReroute')
- reroute_124_1.parent = test_group.nodes.get('Frame.008')
- reroute_124_1.location = (300.0, -420.0)
+ reroute_026 = Shader_Preset.nodes.new("NodeReroute")
- reroute_128_1 = test_group.nodes.new('NodeReroute')
- reroute_128_1.parent = test_group.nodes.get('Frame.008')
- reroute_128_1.location = (300.0, -620.0)
+ mix_049 = Shader_Preset.nodes.new("ShaderNodeMixRGB")
- reroute_367_1 = test_group.nodes.new('NodeReroute')
- reroute_367_1.parent = test_group.nodes.get('Frame.008')
- reroute_367_1.location = (300.0, -660.0)
+ math_024 = Shader_Preset.nodes.new("ShaderNodeMath")
+ math_024.operation = 'MULTIPLY'
+ math_024.inputs[1].default_value = 0.3330000042915344
+ math_024.inputs[2].default_value = 0.5
- reroute_129_1 = test_group.nodes.new('NodeReroute')
- reroute_129_1.parent = test_group.nodes.get('Frame.008')
- reroute_129_1.location = (300.0, -700.0)
+ reroute_168 = Shader_Preset.nodes.new("NodeReroute")
- reroute_082_1 = test_group.nodes.new('NodeReroute')
- reroute_082_1.parent = test_group.nodes.get('Frame.005')
- reroute_082_1.location = (300.0, -220.0)
+ mix_028 = Shader_Preset.nodes.new("ShaderNodeMixRGB")
- reroute_078_1 = test_group.nodes.new('NodeReroute')
- reroute_078_1.parent = test_group.nodes.get('Frame.005')
- reroute_078_1.location = (300.0, -60.0)
+ math_015 = Shader_Preset.nodes.new("ShaderNodeMath")
+ math_015.operation = 'MULTIPLY_ADD'
+ math_015.use_clamp = True
- reroute_079_1 = test_group.nodes.new('NodeReroute')
- reroute_079_1.parent = test_group.nodes.get('Frame.005')
- reroute_079_1.location = (300.0, -100.0)
+ math_015.inputs[1].default_value = 1000000.0
- reroute_077_1 = test_group.nodes.new('NodeReroute')
- reroute_077_1.parent = test_group.nodes.get('Frame.005')
- reroute_077_1.location = (300.0, -20.0)
+ math_015.inputs[2].default_value = -500000.0
- reroute_076_1 = test_group.nodes.new('NodeReroute')
- reroute_076_1.parent = test_group.nodes.get('Frame.005')
- reroute_076_1.location = (300.0, 20.0)
+ reroute_192 = Shader_Preset.nodes.new("NodeReroute")
- reroute_075_1 = test_group.nodes.new('NodeReroute')
- reroute_075_1.parent = test_group.nodes.get('Frame.005')
- reroute_075_1.location = (300.0, 60.0)
+ reroute_076 = Shader_Preset.nodes.new("NodeReroute")
- reroute_083_1 = test_group.nodes.new('NodeReroute')
- reroute_083_1.parent = test_group.nodes.get('Frame.005')
- reroute_083_1.location = (300.0, -260.0)
+ cloth_primary_fuzz = Shader_Preset.nodes.new("ShaderNodeValue")
+ cloth_primary_fuzz.label = "Fuzz"
+ cloth_primary_fuzz.use_custom_color = True
+ cloth_primary_fuzz.color = (CPrime2.X, CPrime2.Y, CPrime2.Z)
+ cloth_primary_fuzz.hide = True
+ cloth_primary_fuzz.outputs[0].default_value = clothprimaryfuzz
- reroute_080_1 = test_group.nodes.new('NodeReroute')
- reroute_080_1.parent = test_group.nodes.get('Frame.005')
- reroute_080_1.location = (300.0, -140.0)
+ armor_primary_wear_remap_w = Shader_Preset.nodes.new("ShaderNodeValue")
+ armor_primary_wear_remap_w.label = "Wear Remap W"
+ armor_primary_wear_remap_w.use_custom_color = True
+ armor_primary_wear_remap_w.color = (CPrime1.X, CPrime1.Y, CPrime1.Z)
+ armor_primary_wear_remap_w.hide = True
+ armor_primary_wear_remap_w.outputs[0].default_value = armorprimarywearremapW
- reroute_081_1 = test_group.nodes.new('NodeReroute')
- reroute_081_1.parent = test_group.nodes.get('Frame.005')
- reroute_081_1.location = (300.0, -180.0)
+ mix = Shader_Preset.nodes.new("ShaderNodeMixRGB")
- reroute_108_1 = test_group.nodes.new('NodeReroute')
- reroute_108_1.parent = test_group.nodes.get('Frame.007')
- reroute_108_1.location = (300.0, -220.0)
+ reroute_187 = Shader_Preset.nodes.new("NodeReroute")
- reroute_109_1 = test_group.nodes.new('NodeReroute')
- reroute_109_1.parent = test_group.nodes.get('Frame.007')
- reroute_109_1.location = (300.0, -260.0)
+ reroute_169 = Shader_Preset.nodes.new("NodeReroute")
- reroute_110_1 = test_group.nodes.new('NodeReroute')
- reroute_110_1.parent = test_group.nodes.get('Frame.007')
- reroute_110_1.location = (300.0, -300.0)
+ reroute_138 = Shader_Preset.nodes.new("NodeReroute")
- reroute_200_1 = test_group.nodes.new('NodeReroute')
- reroute_200_1.parent = test_group.nodes.get('Frame.011')
- reroute_200_1.location = (320.0, -240.0)
+ reroute_071 = Shader_Preset.nodes.new("NodeReroute")
- reroute_201_1 = test_group.nodes.new('NodeReroute')
- reroute_201_1.parent = test_group.nodes.get('Frame.011')
- reroute_201_1.location = (320.0, -280.0)
+ reroute_033 = Shader_Preset.nodes.new("NodeReroute")
- reroute_202_1 = test_group.nodes.new('NodeReroute')
- reroute_202_1.parent = test_group.nodes.get('Frame.011')
- reroute_202_1.location = (320.0, -320.0)
+ reroute_157 = Shader_Preset.nodes.new("NodeReroute")
- reroute_045_1 = test_group.nodes.new('NodeReroute')
- reroute_045_1.parent = test_group.nodes.get('Frame.002')
- reroute_045_1.location = (300.0, -720.0)
+ reroute_054 = Shader_Preset.nodes.new("NodeReroute")
- reroute_364_1 = test_group.nodes.new('NodeReroute')
- reroute_364_1.parent = test_group.nodes.get('Frame.002')
- reroute_364_1.location = (300.0, -680.0)
+ mix_059 = Shader_Preset.nodes.new("ShaderNodeMixRGB")
- reroute_044_1 = test_group.nodes.new('NodeReroute')
- reroute_044_1.parent = test_group.nodes.get('Frame.002')
- reroute_044_1.location = (300.0, -640.0)
+ worn_armor_secondary_roughness_remap_z = Shader_Preset.nodes.new("ShaderNodeValue")
+ worn_armor_secondary_roughness_remap_z.label = "Roughness Remap Z"
+ worn_armor_secondary_roughness_remap_z.use_custom_color = True
+ worn_armor_secondary_roughness_remap_z.color = (CSeconWear1.X, CSeconWear1.Y, CSeconWear1.Z)
+ worn_armor_secondary_roughness_remap_z.hide = True
+ worn_armor_secondary_roughness_remap_z.outputs[0].default_value = wornarmorsecondaryroughnessremapZ
- reroute_039_1 = test_group.nodes.new('NodeReroute')
- reroute_039_1.parent = test_group.nodes.get('Frame.002')
- reroute_039_1.location = (300.0, -440.0)
+ armor_secondary_transmission = Shader_Preset.nodes.new("ShaderNodeValue")
+ armor_secondary_transmission.label = "Transmission"
+ armor_secondary_transmission.use_custom_color = True
+ armor_secondary_transmission.color = (CSecon1.X, CSecon1.Y, CSecon1.Z)
+ armor_secondary_transmission.hide = True
+ armor_secondary_transmission.outputs[0].default_value = armorsecondarytransmission
- reroute_033_1 = test_group.nodes.new('NodeReroute')
- reroute_033_1.parent = test_group.nodes.get('Frame.002')
- reroute_033_1.location = (300.0, -240.0)
+ reroute_141 = Shader_Preset.nodes.new("NodeReroute")
- reroute_042_1 = test_group.nodes.new('NodeReroute')
- reroute_042_1.parent = test_group.nodes.get('Frame.002')
- reroute_042_1.location = (300.0, -560.0)
+ reroute_142 = Shader_Preset.nodes.new("NodeReroute")
- reroute_041_1 = test_group.nodes.new('NodeReroute')
- reroute_041_1.parent = test_group.nodes.get('Frame.002')
- reroute_041_1.location = (300.0, -520.0)
+ combine_xyz_043 = Shader_Preset.nodes.new("ShaderNodeCombineXYZ")
- reroute_040_1 = test_group.nodes.new('NodeReroute')
- reroute_040_1.parent = test_group.nodes.get('Frame.002')
- reroute_040_1.location = (300.0, -480.0)
+ math_001 = Shader_Preset.nodes.new("ShaderNodeMath")
+ math_001.operation = 'MULTIPLY_ADD'
+ math_001.use_clamp = True
- reroute_043_1 = test_group.nodes.new('NodeReroute')
- reroute_043_1.parent = test_group.nodes.get('Frame.002')
- reroute_043_1.location = (300.0, -600.0)
+ math_001.inputs[1].default_value = 1000.0
- reroute_038_1 = test_group.nodes.new('NodeReroute')
- reroute_038_1.parent = test_group.nodes.get('Frame.002')
- reroute_038_1.location = (300.0, -400.0)
+ math_001.inputs[2].default_value = -666.0
- reroute_037_1 = test_group.nodes.new('NodeReroute')
- reroute_037_1.parent = test_group.nodes.get('Frame.002')
- reroute_037_1.location = (300.0, -360.0)
+ cloth_secondary_fuzz = Shader_Preset.nodes.new("ShaderNodeValue")
+ cloth_secondary_fuzz.label = "Fuzz"
+ cloth_secondary_fuzz.use_custom_color = True
+ cloth_secondary_fuzz.color = (CSecon2.X, CSecon2.Y, CSecon2.Z)
+ cloth_secondary_fuzz.hide = True
+ cloth_secondary_fuzz.outputs[0].default_value = clothsecondaryfuzz
- reroute_036_1 = test_group.nodes.new('NodeReroute')
- reroute_036_1.parent = test_group.nodes.get('Frame.002')
- reroute_036_1.location = (300.0, -320.0)
+ reroute_107 = Shader_Preset.nodes.new("NodeReroute")
- reroute_035_1 = test_group.nodes.new('NodeReroute')
- reroute_035_1.parent = test_group.nodes.get('Frame.002')
- reroute_035_1.location = (300.0, -280.0)
+ reroute_365 = Shader_Preset.nodes.new("NodeReroute")
- reroute_028_1 = test_group.nodes.new('NodeReroute')
- reroute_028_1.parent = test_group.nodes.get('Frame.002')
- reroute_028_1.location = (300.0, -40.0)
+ armor_detail_normal_transform = Shader_Preset.nodes.new("ShaderNodeMapping")
+ armor_detail_normal_transform.label = "Detail Normal Transform"
+ armor_detail_normal_transform.use_custom_color = True
+ armor_detail_normal_transform.color = (0.2352934032678604, 0.2352934032678604, 0.5137253999710083)
+ armor_detail_normal_transform.vector_type = 'POINT'
+ armor_detail_normal_transform.inputs[2].hide = True
+ armor_detail_normal_transform.inputs[1].default_value = armordetailnormalposition
+ armor_detail_normal_transform.inputs[2].default_value = (0.0, 0.0, 0.0)
+ armor_detail_normal_transform.inputs[3].default_value = armordetailnormalscale
- reroute_034_1 = test_group.nodes.new('NodeReroute')
- reroute_034_1.parent = test_group.nodes.get('Frame.002')
- reroute_034_1.location = (300.0, -260.0)
+ reroute_181 = Shader_Preset.nodes.new("NodeReroute")
- reroute_032_1 = test_group.nodes.new('NodeReroute')
- reroute_032_1.parent = test_group.nodes.get('Frame.002')
- reroute_032_1.location = (300.0, -200.0)
+ reroute_137 = Shader_Preset.nodes.new("NodeReroute")
- reroute_031_1 = test_group.nodes.new('NodeReroute')
- reroute_031_1.parent = test_group.nodes.get('Frame.002')
- reroute_031_1.location = (300.0, -160.0)
+ reroute_020 = Shader_Preset.nodes.new("NodeReroute")
- reroute_030_1 = test_group.nodes.new('NodeReroute')
- reroute_030_1.parent = test_group.nodes.get('Frame.002')
- reroute_030_1.location = (300.0, -120.0)
+ mix_056 = Shader_Preset.nodes.new("ShaderNodeMixRGB")
- reroute_029_1 = test_group.nodes.new('NodeReroute')
- reroute_029_1.parent = test_group.nodes.get('Frame.002')
- reroute_029_1.location = (300.0, -80.0)
+ reroute_102 = Shader_Preset.nodes.new("NodeReroute")
- reroute_046_1 = test_group.nodes.new('NodeReroute')
- reroute_046_1.parent = test_group.nodes.get('Frame.002')
- reroute_046_1.location = (300.0, -760.0)
+ cloth_secondary_metalness = Shader_Preset.nodes.new("ShaderNodeValue")
+ cloth_secondary_metalness.label = "Metalness"
+ cloth_secondary_metalness.use_custom_color = True
+ cloth_secondary_metalness.color = (CSecon2.X, CSecon2.Y, CSecon2.Z)
+ cloth_secondary_metalness.hide = True
+ cloth_secondary_metalness.outputs[0].default_value = clothsecondarymetalness
- reroute_130_1 = test_group.nodes.new('NodeReroute')
- reroute_130_1.parent = test_group.nodes.get('Frame.008')
- reroute_130_1.location = (300.0, -740.0)
+ worn_armor_secondary_metalness = Shader_Preset.nodes.new("ShaderNodeValue")
+ worn_armor_secondary_metalness.label = "Metalness"
+ worn_armor_secondary_metalness.use_custom_color = True
+ worn_armor_secondary_metalness.color = (CSeconWear1.X, CSeconWear1.Y, CSeconWear1.Z)
+ worn_armor_secondary_metalness.hide = True
+ worn_armor_secondary_metalness.outputs[0].default_value = wornarmorsecondarymetalness
- reroute_010_1 = test_group.nodes.new('NodeReroute')
- reroute_010_1.parent = test_group.nodes.get('Frame')
- reroute_010_1.location = (280.0, 0.0)
+ math_012 = Shader_Preset.nodes.new("ShaderNodeMath")
+ math_012.operation = 'MULTIPLY'
+ math_012.inputs[2].default_value = -500.0
- reroute_004_1 = test_group.nodes.new('NodeReroute')
- reroute_004_1.parent = test_group.nodes.get('Frame')
- reroute_004_1.location = (280.0, 200.0)
+ separate_xyz_002 = Shader_Preset.nodes.new("ShaderNodeSeparateXYZ")
- reroute_003_1 = test_group.nodes.new('NodeReroute')
- reroute_003_1.parent = test_group.nodes.get('Frame')
- reroute_003_1.location = (280.0, 240.0)
+ math_003 = Shader_Preset.nodes.new("ShaderNodeMath")
+ math_003.operation = 'MULTIPLY'
+ math_003.inputs[2].default_value = 0.5
- reroute_002_1 = test_group.nodes.new('NodeReroute')
- reroute_002_1.parent = test_group.nodes.get('Frame')
- reroute_002_1.location = (280.0, 280.0)
+ suit_secondary_detail_roughness_blend = Shader_Preset.nodes.new("ShaderNodeValue")
+ suit_secondary_detail_roughness_blend.label = "Detail Roughness Blend"
+ suit_secondary_detail_roughness_blend.use_custom_color = True
+ suit_secondary_detail_roughness_blend.color = (CSecon3.X, CSecon3.Y, CSecon3.Z)
+ suit_secondary_detail_roughness_blend.hide = True
+ suit_secondary_detail_roughness_blend.outputs[0].default_value = suitsecondarydetailroughnessblend
- reroute_001_1 = test_group.nodes.new('NodeReroute')
- reroute_001_1.parent = test_group.nodes.get('Frame')
- reroute_001_1.location = (280.0, 320.0)
+ cloth_secondary_wear_remap_z = Shader_Preset.nodes.new("ShaderNodeValue")
+ cloth_secondary_wear_remap_z.label = "Wear Remap Z"
+ cloth_secondary_wear_remap_z.use_custom_color = True
+ cloth_secondary_wear_remap_z.color = (CSecon2.X, CSecon2.Y, CSecon2.Z)
+ cloth_secondary_wear_remap_z.hide = True
+ cloth_secondary_wear_remap_z.outputs[0].default_value = clothsecondarywearremapZ
- reroute_006_1 = test_group.nodes.new('NodeReroute')
- reroute_006_1.parent = test_group.nodes.get('Frame')
- reroute_006_1.location = (280.0, 140.0)
+ armor_primary_fuzz = Shader_Preset.nodes.new("ShaderNodeValue")
+ armor_primary_fuzz.label = "Fuzz"
+ armor_primary_fuzz.use_custom_color = True
+ armor_primary_fuzz.color = (CPrime1.X, CPrime1.Y, CPrime1.Z)
+ armor_primary_fuzz.hide = True
+ armor_primary_fuzz.outputs[0].default_value = armorprimaryfuzz
- reroute_007_1 = test_group.nodes.new('NodeReroute')
- reroute_007_1.parent = test_group.nodes.get('Frame')
- reroute_007_1.location = (280.0, 120.0)
-
- reroute_008_1 = test_group.nodes.new('NodeReroute')
- reroute_008_1.parent = test_group.nodes.get('Frame')
- reroute_008_1.location = (280.0, 80.0)
-
- reroute_009_1 = test_group.nodes.new('NodeReroute')
- reroute_009_1.parent = test_group.nodes.get('Frame')
- reroute_009_1.location = (280.0, 40.0)
-
- reroute_012_1 = test_group.nodes.new('NodeReroute')
- reroute_012_1.parent = test_group.nodes.get('Frame')
- reroute_012_1.location = (280.0, -80.0)
-
- reroute_013_1 = test_group.nodes.new('NodeReroute')
- reroute_013_1.parent = test_group.nodes.get('Frame')
- reroute_013_1.location = (280.0, -120.0)
-
- reroute_014_1 = test_group.nodes.new('NodeReroute')
- reroute_014_1.parent = test_group.nodes.get('Frame')
- reroute_014_1.location = (280.0, -160.0)
-
- reroute_005_1 = test_group.nodes.new('NodeReroute')
- reroute_005_1.parent = test_group.nodes.get('Frame')
- reroute_005_1.location = (280.0, 160.0)
-
- reroute_011_1 = test_group.nodes.new('NodeReroute')
- reroute_011_1.parent = test_group.nodes.get('Frame')
- reroute_011_1.location = (280.0, -40.0)
-
- reroute_015_1 = test_group.nodes.new('NodeReroute')
- reroute_015_1.parent = test_group.nodes.get('Frame')
- reroute_015_1.location = (280.0, -200.0)
-
- reroute_016_1 = test_group.nodes.new('NodeReroute')
- reroute_016_1.parent = test_group.nodes.get('Frame')
- reroute_016_1.location = (280.0, -240.0)
-
- reroute_363_1 = test_group.nodes.new('NodeReroute')
- reroute_363_1.parent = test_group.nodes.get('Frame')
- reroute_363_1.location = (280.0, -280.0)
-
- reroute_017_1 = test_group.nodes.new('NodeReroute')
- reroute_017_1.parent = test_group.nodes.get('Frame')
- reroute_017_1.location = (280.0, -320.0)
-
- reroute_018_1 = test_group.nodes.new('NodeReroute')
- reroute_018_1.parent = test_group.nodes.get('Frame')
- reroute_018_1.location = (280.0, -360.0)
-
- reroute_132_1 = test_group.nodes.new('NodeReroute')
- reroute_132_1.parent = test_group.nodes.get('Frame.009')
- reroute_132_1.location = (300.0, -80.0)
-
- reroute_133_1 = test_group.nodes.new('NodeReroute')
- reroute_133_1.parent = test_group.nodes.get('Frame.009')
- reroute_133_1.location = (300.0, -120.0)
-
- reroute_134_1 = test_group.nodes.new('NodeReroute')
- reroute_134_1.parent = test_group.nodes.get('Frame.009')
- reroute_134_1.location = (300.0, -160.0)
-
- reroute_135_1 = test_group.nodes.new('NodeReroute')
- reroute_135_1.parent = test_group.nodes.get('Frame.009')
- reroute_135_1.location = (300.0, -200.0)
-
- reroute_131_1 = test_group.nodes.new('NodeReroute')
- reroute_131_1.parent = test_group.nodes.get('Frame.009')
- reroute_131_1.location = (300.0, -40.0)
-
- reroute_139_1 = test_group.nodes.new('NodeReroute')
- reroute_139_1.parent = test_group.nodes.get('Frame.009')
- reroute_139_1.location = (300.0, -360.0)
-
- reroute_136_1 = test_group.nodes.new('NodeReroute')
- reroute_136_1.parent = test_group.nodes.get('Frame.009')
- reroute_136_1.location = (300.0, -240.0)
-
- reroute_137_1 = test_group.nodes.new('NodeReroute')
- reroute_137_1.parent = test_group.nodes.get('Frame.009')
- reroute_137_1.location = (300.0, -280.0)
-
- reroute_138_1 = test_group.nodes.new('NodeReroute')
- reroute_138_1.parent = test_group.nodes.get('Frame.009')
- reroute_138_1.location = (300.0, -320.0)
-
- armor_primary_dye_color_1 = test_group.nodes.new('ShaderNodeRGB')
- armor_primary_dye_color_1.parent = test_group.nodes.get('Frame')
- armor_primary_dye_color_1.label = 'Dye Color'
- armor_primary_dye_color_1.location = (0.0, 360.0)
- armor_primary_dye_color_1.hide = True
-
- armor_primary_detail_diffuse_blend_1 = test_group.nodes.new('ShaderNodeValue')
- armor_primary_detail_diffuse_blend_1.parent = test_group.nodes.get('Frame')
- armor_primary_detail_diffuse_blend_1.label = 'Detail Diffuse Blend'
- armor_primary_detail_diffuse_blend_1.location = (0.0, -80.0)
- armor_primary_detail_diffuse_blend_1.hide = True
-
- armor_primary_detail_normal_blend_1 = test_group.nodes.new('ShaderNodeValue')
- armor_primary_detail_normal_blend_1.parent = test_group.nodes.get('Frame')
- armor_primary_detail_normal_blend_1.label = 'Detail Normal Blend'
- armor_primary_detail_normal_blend_1.location = (0.0, -120.0)
- armor_primary_detail_normal_blend_1.hide = True
-
- armor_primary_detail_roughness_blend_1 = test_group.nodes.new('ShaderNodeValue')
- armor_primary_detail_roughness_blend_1.parent = test_group.nodes.get('Frame')
- armor_primary_detail_roughness_blend_1.label = 'Detail Roughness Blend'
- armor_primary_detail_roughness_blend_1.location = (0.0, -160.0)
- armor_primary_detail_roughness_blend_1.hide = True
-
- armor_secondary_detail_diffuse_map_1 = test_group.nodes.new('ShaderNodeTexImage')
- armor_secondary_detail_diffuse_map_1.parent = test_group.nodes.get('Frame.002')
- armor_secondary_detail_diffuse_map_1.label = 'Detail Diffuse Map'
- armor_secondary_detail_diffuse_map_1.location = (20.0, -240.0)
- armor_secondary_detail_diffuse_map_1.hide = True
-
- armor_secondary_detail_normal_map_1 = test_group.nodes.new('ShaderNodeTexImage')
- armor_secondary_detail_normal_map_1.parent = test_group.nodes.get('Frame.002')
- armor_secondary_detail_normal_map_1.label = 'Detail Normal Map'
- armor_secondary_detail_normal_map_1.location = (20.0, -440.0)
- armor_secondary_detail_normal_map_1.hide = True
-
- armor_secondary_detail_diffuse_blend_1 = test_group.nodes.new('ShaderNodeValue')
- armor_secondary_detail_diffuse_blend_1.parent = test_group.nodes.get('Frame.002')
- armor_secondary_detail_diffuse_blend_1.label = 'Detail Diffuse Blend'
- armor_secondary_detail_diffuse_blend_1.location = (20.0, -480.0)
- armor_secondary_detail_diffuse_blend_1.hide = True
-
- armor_secondary_detail_normal_blend_1 = test_group.nodes.new('ShaderNodeValue')
- armor_secondary_detail_normal_blend_1.parent = test_group.nodes.get('Frame.002')
- armor_secondary_detail_normal_blend_1.label = 'Detail Normal Blend'
- armor_secondary_detail_normal_blend_1.location = (20.0, -520.0)
- armor_secondary_detail_normal_blend_1.hide = True
-
- armor_secondary_detail_roughness_blend_1 = test_group.nodes.new('ShaderNodeValue')
- armor_secondary_detail_roughness_blend_1.parent = test_group.nodes.get('Frame.002')
- armor_secondary_detail_roughness_blend_1.label = 'Detail Roughness Blend'
- armor_secondary_detail_roughness_blend_1.location = (20.0, -560.0)
- armor_secondary_detail_roughness_blend_1.hide = True
-
- armor_secondary_metalness_1 = test_group.nodes.new('ShaderNodeValue')
- armor_secondary_metalness_1.parent = test_group.nodes.get('Frame.002')
- armor_secondary_metalness_1.label = 'Metalness'
- armor_secondary_metalness_1.location = (20.0, -600.0)
- armor_secondary_metalness_1.hide = True
-
- armor_secondary_iridescence_1 = test_group.nodes.new('ShaderNodeValue')
- armor_secondary_iridescence_1.parent = test_group.nodes.get('Frame.002')
- armor_secondary_iridescence_1.label = 'Iridescence'
- armor_secondary_iridescence_1.location = (20.0, -640.0)
- armor_secondary_iridescence_1.hide = True
-
- armor_secondary_fuzz_1 = test_group.nodes.new('ShaderNodeValue')
- armor_secondary_fuzz_1.parent = test_group.nodes.get('Frame.002')
- armor_secondary_fuzz_1.label = 'Fuzz'
- armor_secondary_fuzz_1.location = (20.0, -680.0)
- armor_secondary_fuzz_1.hide = True
-
- armor_secondary_transmission_1 = test_group.nodes.new('ShaderNodeValue')
- armor_secondary_transmission_1.parent = test_group.nodes.get('Frame.002')
- armor_secondary_transmission_1.label = 'Transmission'
- armor_secondary_transmission_1.location = (20.0, -720.0)
- armor_secondary_transmission_1.hide = True
-
- armor_secondary_emission_color_1 = test_group.nodes.new('ShaderNodeRGB')
- armor_secondary_emission_color_1.parent = test_group.nodes.get('Frame.002')
- armor_secondary_emission_color_1.label = 'Emission Color'
- armor_secondary_emission_color_1.location = (20.0, -760.0)
- armor_secondary_emission_color_1.hide = True
-
- reroute_048_1 = test_group.nodes.new('NodeReroute')
- reroute_048_1.parent = test_group.nodes.get('Frame.003')
- reroute_048_1.location = (-1300.0, 360.0)
-
- reroute_049_1 = test_group.nodes.new('NodeReroute')
- reroute_049_1.parent = test_group.nodes.get('Frame.003')
- reroute_049_1.location = (-1300.0, 320.0)
-
- reroute_050_1 = test_group.nodes.new('NodeReroute')
- reroute_050_1.parent = test_group.nodes.get('Frame.003')
- reroute_050_1.location = (-1300.0, 280.0)
-
- reroute_051_1 = test_group.nodes.new('NodeReroute')
- reroute_051_1.parent = test_group.nodes.get('Frame.003')
- reroute_051_1.location = (-1300.0, 240.0)
-
- reroute_047_1 = test_group.nodes.new('NodeReroute')
- reroute_047_1.parent = test_group.nodes.get('Frame.003')
- reroute_047_1.location = (-1300.0, 400.0)
-
- reroute_055_1 = test_group.nodes.new('NodeReroute')
- reroute_055_1.parent = test_group.nodes.get('Frame.003')
- reroute_055_1.location = (-1300.0, 80.0)
-
- reroute_052_1 = test_group.nodes.new('NodeReroute')
- reroute_052_1.parent = test_group.nodes.get('Frame.003')
- reroute_052_1.location = (-1300.0, 200.0)
-
- reroute_053_1 = test_group.nodes.new('NodeReroute')
- reroute_053_1.parent = test_group.nodes.get('Frame.003')
- reroute_053_1.location = (-1300.0, 160.0)
-
- reroute_054_1 = test_group.nodes.new('NodeReroute')
- reroute_054_1.parent = test_group.nodes.get('Frame.003')
- reroute_054_1.location = (-1300.0, 120.0)
-
- worn_armor_secondary_detail_diffuse_blend_1 = test_group.nodes.new('ShaderNodeValue')
- worn_armor_secondary_detail_diffuse_blend_1.parent = test_group.nodes.get('Frame.003')
- worn_armor_secondary_detail_diffuse_blend_1.label = 'Detail Diffuse Blend'
- worn_armor_secondary_detail_diffuse_blend_1.location = (-1580.0, 200.0)
- worn_armor_secondary_detail_diffuse_blend_1.hide = True
-
- worn_armor_secondary_detail_normal_blend_1 = test_group.nodes.new('ShaderNodeValue')
- worn_armor_secondary_detail_normal_blend_1.parent = test_group.nodes.get('Frame.003')
- worn_armor_secondary_detail_normal_blend_1.label = 'Detail Normal Blend'
- worn_armor_secondary_detail_normal_blend_1.location = (-1580.0, 160.0)
- worn_armor_secondary_detail_normal_blend_1.hide = True
-
- worn_armor_secondary_detail_roughness_blend_1 = test_group.nodes.new('ShaderNodeValue')
- worn_armor_secondary_detail_roughness_blend_1.parent = test_group.nodes.get('Frame.003')
- worn_armor_secondary_detail_roughness_blend_1.label = 'Detail Roughness Blend'
- worn_armor_secondary_detail_roughness_blend_1.location = (-1580.0, 120.0)
- worn_armor_secondary_detail_roughness_blend_1.hide = True
-
- armor_secondary_dye_color_1 = test_group.nodes.new('ShaderNodeRGB')
- armor_secondary_dye_color_1.parent = test_group.nodes.get('Frame.002')
- armor_secondary_dye_color_1.label = 'Dye Color'
- armor_secondary_dye_color_1.location = (20.0, -40.0)
- armor_secondary_dye_color_1.hide = True
-
- worn_armor_secondary_metalness_1 = test_group.nodes.new('ShaderNodeValue')
- worn_armor_secondary_metalness_1.parent = test_group.nodes.get('Frame.003')
- worn_armor_secondary_metalness_1.label = 'Metalness'
- worn_armor_secondary_metalness_1.location = (-1580.0, 80.0)
- worn_armor_secondary_metalness_1.hide = True
-
- worn_armor_secondary_dye_color_1 = test_group.nodes.new('ShaderNodeRGB')
- worn_armor_secondary_dye_color_1.parent = test_group.nodes.get('Frame.003')
- worn_armor_secondary_dye_color_1.label = 'Dye Color'
- worn_armor_secondary_dye_color_1.location = (-1580.0, 400.0)
- worn_armor_secondary_dye_color_1.hide = True
-
- worn_cloth_primary_dye_color_1 = test_group.nodes.new('ShaderNodeRGB')
- worn_cloth_primary_dye_color_1.parent = test_group.nodes.get('Frame.005')
- worn_cloth_primary_dye_color_1.label = 'Dye Color'
- worn_cloth_primary_dye_color_1.location = (20.0, 60.0)
- worn_cloth_primary_dye_color_1.hide = True
-
- worn_cloth_primary_detail_diffuse_blend_1 = test_group.nodes.new('ShaderNodeValue')
- worn_cloth_primary_detail_diffuse_blend_1.parent = test_group.nodes.get('Frame.005')
- worn_cloth_primary_detail_diffuse_blend_1.label = 'Detail Diffuse Blend'
- worn_cloth_primary_detail_diffuse_blend_1.location = (20.0, -140.0)
- worn_cloth_primary_detail_diffuse_blend_1.hide = True
-
- worn_cloth_primary_detail_normal_blend_1 = test_group.nodes.new('ShaderNodeValue')
- worn_cloth_primary_detail_normal_blend_1.parent = test_group.nodes.get('Frame.005')
- worn_cloth_primary_detail_normal_blend_1.label = 'Detail Normal Blend'
- worn_cloth_primary_detail_normal_blend_1.location = (20.0, -180.0)
- worn_cloth_primary_detail_normal_blend_1.hide = True
-
- worn_cloth_primary_detail_roughness_blend_1 = test_group.nodes.new('ShaderNodeValue')
- worn_cloth_primary_detail_roughness_blend_1.parent = test_group.nodes.get('Frame.005')
- worn_cloth_primary_detail_roughness_blend_1.label = 'Detail Roughness Blend'
- worn_cloth_primary_detail_roughness_blend_1.location = (20.0, -220.0)
- worn_cloth_primary_detail_roughness_blend_1.hide = True
-
- worn_cloth_primary_metalness_1 = test_group.nodes.new('ShaderNodeValue')
- worn_cloth_primary_metalness_1.parent = test_group.nodes.get('Frame.005')
- worn_cloth_primary_metalness_1.label = 'Metalness'
- worn_cloth_primary_metalness_1.location = (20.0, -260.0)
- worn_cloth_primary_metalness_1.hide = True
-
- armor_detail_normal_transform_1 = test_group.nodes.new('ShaderNodeMapping')
- armor_detail_normal_transform_1.label = 'Detail Normal Transform'
- armor_detail_normal_transform_1.location = (-1200.0, -120.0)
- armor_detail_normal_transform_1.vector_type = 'POINT'
-
- cloth_detail_diffuse_transform_1 = test_group.nodes.new('ShaderNodeMapping')
- cloth_detail_diffuse_transform_1.label = 'Detail Diffuse Transform'
- cloth_detail_diffuse_transform_1.location = (-1200.0, -2240.0)
- cloth_detail_diffuse_transform_1.vector_type = 'POINT'
-
- suit_detail_diffuse_transform_1 = test_group.nodes.new('ShaderNodeMapping')
- suit_detail_diffuse_transform_1.label = 'Detail Diffuse Transform'
- suit_detail_diffuse_transform_1.location = (-1200.0, -4720.0)
- suit_detail_diffuse_transform_1.vector_type = 'POINT'
-
- suit_detail_normal_transform_1 = test_group.nodes.new('ShaderNodeMapping')
- suit_detail_normal_transform_1.label = 'Detail Normal Transform'
- suit_detail_normal_transform_1.location = (-1200.0, -5080.0)
- suit_detail_normal_transform_1.vector_type = 'POINT'
-
- cloth_detail_normal_transform_1 = test_group.nodes.new('ShaderNodeMapping')
- cloth_detail_normal_transform_1.label = 'Detail Normal Transform'
- cloth_detail_normal_transform_1.location = (-1200.0, -2600.0)
- cloth_detail_normal_transform_1.vector_type = 'POINT'
-
- reroute_086_1 = test_group.nodes.new('NodeReroute')
- reroute_086_1.parent = test_group.nodes.get('Frame.006')
- reroute_086_1.location = (300.0, -100.0)
-
- reroute_088_1 = test_group.nodes.new('NodeReroute')
- reroute_088_1.parent = test_group.nodes.get('Frame.006')
- reroute_088_1.location = (300.0, -180.0)
-
- reroute_085_1 = test_group.nodes.new('NodeReroute')
- reroute_085_1.parent = test_group.nodes.get('Frame.006')
- reroute_085_1.location = (300.0, -60.0)
-
- reroute_087_1 = test_group.nodes.new('NodeReroute')
- reroute_087_1.parent = test_group.nodes.get('Frame.006')
- reroute_087_1.location = (300.0, -140.0)
-
- reroute_090_1 = test_group.nodes.new('NodeReroute')
- reroute_090_1.parent = test_group.nodes.get('Frame.006')
- reroute_090_1.location = (300.0, -240.0)
-
- reroute_084_1 = test_group.nodes.new('NodeReroute')
- reroute_084_1.parent = test_group.nodes.get('Frame.006')
- reroute_084_1.location = (300.0, -20.0)
-
- reroute_091_1 = test_group.nodes.new('NodeReroute')
- reroute_091_1.parent = test_group.nodes.get('Frame.006')
- reroute_091_1.location = (300.0, -260.0)
-
- reroute_092_1 = test_group.nodes.new('NodeReroute')
- reroute_092_1.parent = test_group.nodes.get('Frame.006')
- reroute_092_1.location = (300.0, -300.0)
-
- reroute_093_1 = test_group.nodes.new('NodeReroute')
- reroute_093_1.parent = test_group.nodes.get('Frame.006')
- reroute_093_1.location = (300.0, -340.0)
-
- reroute_094_1 = test_group.nodes.new('NodeReroute')
- reroute_094_1.parent = test_group.nodes.get('Frame.006')
- reroute_094_1.location = (300.0, -380.0)
-
- reroute_099_1 = test_group.nodes.new('NodeReroute')
- reroute_099_1.parent = test_group.nodes.get('Frame.006')
- reroute_099_1.location = (300.0, -580.0)
-
- reroute_095_1 = test_group.nodes.new('NodeReroute')
- reroute_095_1.parent = test_group.nodes.get('Frame.006')
- reroute_095_1.location = (300.0, -460.0)
-
- reroute_097_1 = test_group.nodes.new('NodeReroute')
- reroute_097_1.parent = test_group.nodes.get('Frame.006')
- reroute_097_1.location = (300.0, -500.0)
-
- reroute_098_1 = test_group.nodes.new('NodeReroute')
- reroute_098_1.parent = test_group.nodes.get('Frame.006')
- reroute_098_1.location = (300.0, -540.0)
-
- reroute_089_1 = test_group.nodes.new('NodeReroute')
- reroute_089_1.parent = test_group.nodes.get('Frame.006')
- reroute_089_1.location = (300.0, -220.0)
-
- reroute_096_1 = test_group.nodes.new('NodeReroute')
- reroute_096_1.parent = test_group.nodes.get('Frame.006')
- reroute_096_1.location = (300.0, -420.0)
-
- reroute_100_1 = test_group.nodes.new('NodeReroute')
- reroute_100_1.parent = test_group.nodes.get('Frame.006')
- reroute_100_1.location = (300.0, -620.0)
-
- reroute_366_1 = test_group.nodes.new('NodeReroute')
- reroute_366_1.parent = test_group.nodes.get('Frame.006')
- reroute_366_1.location = (300.0, -660.0)
-
- reroute_101_1 = test_group.nodes.new('NodeReroute')
- reroute_101_1.parent = test_group.nodes.get('Frame.006')
- reroute_101_1.location = (300.0, -700.0)
-
- reroute_102_1 = test_group.nodes.new('NodeReroute')
- reroute_102_1.parent = test_group.nodes.get('Frame.006')
- reroute_102_1.location = (300.0, -740.0)
-
- cloth_secondary_dye_color_1 = test_group.nodes.new('ShaderNodeRGB')
- cloth_secondary_dye_color_1.parent = test_group.nodes.get('Frame.006')
- cloth_secondary_dye_color_1.label = 'Dye Color'
- cloth_secondary_dye_color_1.location = (20.0, -20.0)
- cloth_secondary_dye_color_1.hide = True
-
- cloth_secondary_detail_diffuse_map_1 = test_group.nodes.new('ShaderNodeTexImage')
- cloth_secondary_detail_diffuse_map_1.parent = test_group.nodes.get('Frame.006')
- cloth_secondary_detail_diffuse_map_1.label = 'Detail Diffuse Map'
- cloth_secondary_detail_diffuse_map_1.location = (20.0, -220.0)
- cloth_secondary_detail_diffuse_map_1.hide = True
-
- cloth_secondary_detail_normal_map_1 = test_group.nodes.new('ShaderNodeTexImage')
- cloth_secondary_detail_normal_map_1.parent = test_group.nodes.get('Frame.006')
- cloth_secondary_detail_normal_map_1.label = 'Detail Normal Map'
- cloth_secondary_detail_normal_map_1.location = (20.0, -420.0)
- cloth_secondary_detail_normal_map_1.hide = True
-
- cloth_secondary_detail_diffuse_blend_1 = test_group.nodes.new('ShaderNodeValue')
- cloth_secondary_detail_diffuse_blend_1.parent = test_group.nodes.get('Frame.006')
- cloth_secondary_detail_diffuse_blend_1.label = 'Detail Diffuse Blend'
- cloth_secondary_detail_diffuse_blend_1.location = (20.0, -460.0)
- cloth_secondary_detail_diffuse_blend_1.hide = True
-
- cloth_secondary_detail_normal_blend_1 = test_group.nodes.new('ShaderNodeValue')
- cloth_secondary_detail_normal_blend_1.parent = test_group.nodes.get('Frame.006')
- cloth_secondary_detail_normal_blend_1.label = 'Detail Normal Blend'
- cloth_secondary_detail_normal_blend_1.location = (20.0, -500.0)
- cloth_secondary_detail_normal_blend_1.hide = True
-
- cloth_secondary_detail_roughness_blend_1 = test_group.nodes.new('ShaderNodeValue')
- cloth_secondary_detail_roughness_blend_1.parent = test_group.nodes.get('Frame.006')
- cloth_secondary_detail_roughness_blend_1.label = 'Detail Roughness Blend'
- cloth_secondary_detail_roughness_blend_1.location = (20.0, -540.0)
- cloth_secondary_detail_roughness_blend_1.hide = True
-
- cloth_secondary_metalness_1 = test_group.nodes.new('ShaderNodeValue')
- cloth_secondary_metalness_1.parent = test_group.nodes.get('Frame.006')
- cloth_secondary_metalness_1.label = 'Metalness'
- cloth_secondary_metalness_1.location = (20.0, -580.0)
- cloth_secondary_metalness_1.hide = True
-
- cloth_secondary_iridescence_1 = test_group.nodes.new('ShaderNodeValue')
- cloth_secondary_iridescence_1.parent = test_group.nodes.get('Frame.006')
- cloth_secondary_iridescence_1.label = 'Iridescence'
- cloth_secondary_iridescence_1.location = (20.0, -620.0)
- cloth_secondary_iridescence_1.hide = True
-
- cloth_secondary_fuzz_1 = test_group.nodes.new('ShaderNodeValue')
- cloth_secondary_fuzz_1.parent = test_group.nodes.get('Frame.006')
- cloth_secondary_fuzz_1.label = 'Fuzz'
- cloth_secondary_fuzz_1.location = (20.0, -660.0)
- cloth_secondary_fuzz_1.hide = True
-
- cloth_secondary_transmission_1 = test_group.nodes.new('ShaderNodeValue')
- cloth_secondary_transmission_1.parent = test_group.nodes.get('Frame.006')
- cloth_secondary_transmission_1.label = 'Transmission'
- cloth_secondary_transmission_1.location = (20.0, -700.0)
- cloth_secondary_transmission_1.hide = True
-
- cloth_secondary_emission_color_1 = test_group.nodes.new('ShaderNodeRGB')
- cloth_secondary_emission_color_1.parent = test_group.nodes.get('Frame.006')
- cloth_secondary_emission_color_1.label = 'Emission Color'
- cloth_secondary_emission_color_1.location = (20.0, -740.0)
- cloth_secondary_emission_color_1.hide = True
-
- worn_cloth_secondary_dye_color_1 = test_group.nodes.new('ShaderNodeRGB')
- worn_cloth_secondary_dye_color_1.parent = test_group.nodes.get('Frame.007')
- worn_cloth_secondary_dye_color_1.label = 'Dye Color'
- worn_cloth_secondary_dye_color_1.location = (20.0, -20.0)
- worn_cloth_secondary_dye_color_1.hide = True
-
- worn_cloth_secondary_detail_diffuse_blend_1 = test_group.nodes.new('ShaderNodeValue')
- worn_cloth_secondary_detail_diffuse_blend_1.parent = test_group.nodes.get('Frame.007')
- worn_cloth_secondary_detail_diffuse_blend_1.label = 'Detail Diffuse Blend'
- worn_cloth_secondary_detail_diffuse_blend_1.location = (20.0, -220.0)
- worn_cloth_secondary_detail_diffuse_blend_1.hide = True
-
- worn_cloth_secondary_detail_normal_blend_1 = test_group.nodes.new('ShaderNodeValue')
- worn_cloth_secondary_detail_normal_blend_1.parent = test_group.nodes.get('Frame.007')
- worn_cloth_secondary_detail_normal_blend_1.label = 'Detail Normal Blend'
- worn_cloth_secondary_detail_normal_blend_1.location = (20.0, -260.0)
- worn_cloth_secondary_detail_normal_blend_1.hide = True
-
- worn_cloth_secondary_detail_roughness_blend_1 = test_group.nodes.new('ShaderNodeValue')
- worn_cloth_secondary_detail_roughness_blend_1.parent = test_group.nodes.get('Frame.007')
- worn_cloth_secondary_detail_roughness_blend_1.label = 'Detail Roughness Blend'
- worn_cloth_secondary_detail_roughness_blend_1.location = (20.0, -300.0)
- worn_cloth_secondary_detail_roughness_blend_1.hide = True
-
- worn_cloth_secondary_metalness_1 = test_group.nodes.new('ShaderNodeValue')
- worn_cloth_secondary_metalness_1.parent = test_group.nodes.get('Frame.007')
- worn_cloth_secondary_metalness_1.label = 'Metalness'
- worn_cloth_secondary_metalness_1.location = (20.0, -340.0)
- worn_cloth_secondary_metalness_1.hide = True
-
- suit_primary_dye_color_1 = test_group.nodes.new('ShaderNodeRGB')
- suit_primary_dye_color_1.parent = test_group.nodes.get('Frame.008')
- suit_primary_dye_color_1.label = 'Dye Color'
- suit_primary_dye_color_1.location = (20.0, -20.0)
- suit_primary_dye_color_1.hide = True
-
- suit_primary_detail_diffuse_map_1 = test_group.nodes.new('ShaderNodeTexImage')
- suit_primary_detail_diffuse_map_1.parent = test_group.nodes.get('Frame.008')
- suit_primary_detail_diffuse_map_1.label = 'Detail Diffuse Map'
- suit_primary_detail_diffuse_map_1.location = (20.0, -220.0)
- suit_primary_detail_diffuse_map_1.hide = True
-
- suit_primary_detail_normal_map_1 = test_group.nodes.new('ShaderNodeTexImage')
- suit_primary_detail_normal_map_1.parent = test_group.nodes.get('Frame.008')
- suit_primary_detail_normal_map_1.label = 'Detail Normal Map'
- suit_primary_detail_normal_map_1.location = (20.0, -420.0)
- suit_primary_detail_normal_map_1.hide = True
-
- suit_primary_detail_diffuse_blend_1 = test_group.nodes.new('ShaderNodeValue')
- suit_primary_detail_diffuse_blend_1.parent = test_group.nodes.get('Frame.008')
- suit_primary_detail_diffuse_blend_1.label = 'Detail Diffuse Blend'
- suit_primary_detail_diffuse_blend_1.location = (20.0, -460.0)
- suit_primary_detail_diffuse_blend_1.hide = True
-
- suit_primary_detail_normal_blend_1 = test_group.nodes.new('ShaderNodeValue')
- suit_primary_detail_normal_blend_1.parent = test_group.nodes.get('Frame.008')
- suit_primary_detail_normal_blend_1.label = 'Detail Normal Blend'
- suit_primary_detail_normal_blend_1.location = (20.0, -500.0)
- suit_primary_detail_normal_blend_1.hide = True
-
- suit_primary_detail_roughness_blend_1 = test_group.nodes.new('ShaderNodeValue')
- suit_primary_detail_roughness_blend_1.parent = test_group.nodes.get('Frame.008')
- suit_primary_detail_roughness_blend_1.label = 'Detail Roughness Blend'
- suit_primary_detail_roughness_blend_1.location = (20.0, -540.0)
- suit_primary_detail_roughness_blend_1.hide = True
-
- suit_primary_metalness_1 = test_group.nodes.new('ShaderNodeValue')
- suit_primary_metalness_1.parent = test_group.nodes.get('Frame.008')
- suit_primary_metalness_1.label = 'Metalness'
- suit_primary_metalness_1.location = (20.0, -580.0)
- suit_primary_metalness_1.hide = True
-
- suit_primary_iridescence_1 = test_group.nodes.new('ShaderNodeValue')
- suit_primary_iridescence_1.parent = test_group.nodes.get('Frame.008')
- suit_primary_iridescence_1.label = 'Iridescence'
- suit_primary_iridescence_1.location = (20.0, -620.0)
- suit_primary_iridescence_1.hide = True
-
- suit_primary_fuzz_1 = test_group.nodes.new('ShaderNodeValue')
- suit_primary_fuzz_1.parent = test_group.nodes.get('Frame.008')
- suit_primary_fuzz_1.label = 'Fuzz'
- suit_primary_fuzz_1.location = (20.0, -660.0)
- suit_primary_fuzz_1.hide = True
-
- suit_primary_transmission_1 = test_group.nodes.new('ShaderNodeValue')
- suit_primary_transmission_1.parent = test_group.nodes.get('Frame.008')
- suit_primary_transmission_1.label = 'Transmission'
- suit_primary_transmission_1.location = (20.0, -700.0)
- suit_primary_transmission_1.hide = True
-
- suit_primary_emission_color_1 = test_group.nodes.new('ShaderNodeRGB')
- suit_primary_emission_color_1.parent = test_group.nodes.get('Frame.008')
- suit_primary_emission_color_1.label = 'Emission Color'
- suit_primary_emission_color_1.location = (20.0, -740.0)
- suit_primary_emission_color_1.hide = True
-
- worn_suit_primary_dye_color_1 = test_group.nodes.new('ShaderNodeRGB')
- worn_suit_primary_dye_color_1.parent = test_group.nodes.get('Frame.009')
- worn_suit_primary_dye_color_1.label = 'Dye Color'
- worn_suit_primary_dye_color_1.location = (20.0, -40.0)
- worn_suit_primary_dye_color_1.hide = True
-
- worn_suit_primary_detail_diffuse_blend_1 = test_group.nodes.new('ShaderNodeValue')
- worn_suit_primary_detail_diffuse_blend_1.parent = test_group.nodes.get('Frame.009')
- worn_suit_primary_detail_diffuse_blend_1.label = 'Detail Diffuse Blend'
- worn_suit_primary_detail_diffuse_blend_1.location = (20.0, -240.0)
- worn_suit_primary_detail_diffuse_blend_1.hide = True
-
- worn_suit_primary_detail_normal_blend_1 = test_group.nodes.new('ShaderNodeValue')
- worn_suit_primary_detail_normal_blend_1.parent = test_group.nodes.get('Frame.009')
- worn_suit_primary_detail_normal_blend_1.label = 'Detail Normal Blend'
- worn_suit_primary_detail_normal_blend_1.location = (20.0, -280.0)
- worn_suit_primary_detail_normal_blend_1.hide = True
-
- worn_suit_primary_detail_roughness_blend_1 = test_group.nodes.new('ShaderNodeValue')
- worn_suit_primary_detail_roughness_blend_1.parent = test_group.nodes.get('Frame.009')
- worn_suit_primary_detail_roughness_blend_1.label = 'Detail Roughness Blend'
- worn_suit_primary_detail_roughness_blend_1.location = (20.0, -320.0)
- worn_suit_primary_detail_roughness_blend_1.hide = True
-
- worn_suit_primary_metalness_1 = test_group.nodes.new('ShaderNodeValue')
- worn_suit_primary_metalness_1.parent = test_group.nodes.get('Frame.009')
- worn_suit_primary_metalness_1.label = 'Metalness'
- worn_suit_primary_metalness_1.location = (20.0, -360.0)
- worn_suit_primary_metalness_1.hide = True
-
- reroute_180_1 = test_group.nodes.new('NodeReroute')
- reroute_180_1.parent = test_group.nodes.get('Frame.010')
- reroute_180_1.location = (320.0, -200.0)
-
- reroute_181_1 = test_group.nodes.new('NodeReroute')
- reroute_181_1.parent = test_group.nodes.get('Frame.010')
- reroute_181_1.location = (320.0, -160.0)
-
- reroute_177_1 = test_group.nodes.new('NodeReroute')
- reroute_177_1.parent = test_group.nodes.get('Frame.010')
- reroute_177_1.location = (320.0, -80.0)
-
- reroute_182_1 = test_group.nodes.new('NodeReroute')
- reroute_182_1.parent = test_group.nodes.get('Frame.010')
- reroute_182_1.location = (320.0, -120.0)
-
- reroute_178_1 = test_group.nodes.new('NodeReroute')
- reroute_178_1.parent = test_group.nodes.get('Frame.010')
- reroute_178_1.location = (320.0, -260.0)
-
- reroute_176_1 = test_group.nodes.new('NodeReroute')
- reroute_176_1.parent = test_group.nodes.get('Frame.010')
- reroute_176_1.location = (320.0, -40.0)
-
- reroute_183_1 = test_group.nodes.new('NodeReroute')
- reroute_183_1.parent = test_group.nodes.get('Frame.010')
- reroute_183_1.location = (320.0, -280.0)
-
- reroute_184_1 = test_group.nodes.new('NodeReroute')
- reroute_184_1.parent = test_group.nodes.get('Frame.010')
- reroute_184_1.location = (320.0, -320.0)
-
- reroute_185_1 = test_group.nodes.new('NodeReroute')
- reroute_185_1.parent = test_group.nodes.get('Frame.010')
- reroute_185_1.location = (320.0, -360.0)
-
- reroute_186_1 = test_group.nodes.new('NodeReroute')
- reroute_186_1.parent = test_group.nodes.get('Frame.010')
- reroute_186_1.location = (320.0, -400.0)
-
- reroute_190_1 = test_group.nodes.new('NodeReroute')
- reroute_190_1.parent = test_group.nodes.get('Frame.010')
- reroute_190_1.location = (320.0, -600.0)
-
- reroute_187_1 = test_group.nodes.new('NodeReroute')
- reroute_187_1.parent = test_group.nodes.get('Frame.010')
- reroute_187_1.location = (320.0, -480.0)
-
- reroute_188_1 = test_group.nodes.new('NodeReroute')
- reroute_188_1.parent = test_group.nodes.get('Frame.010')
- reroute_188_1.location = (320.0, -520.0)
-
- reroute_189_1 = test_group.nodes.new('NodeReroute')
- reroute_189_1.parent = test_group.nodes.get('Frame.010')
- reroute_189_1.location = (320.0, -560.0)
-
- reroute_179_1 = test_group.nodes.new('NodeReroute')
- reroute_179_1.parent = test_group.nodes.get('Frame.010')
- reroute_179_1.location = (320.0, -240.0)
-
- reroute_194_1 = test_group.nodes.new('NodeReroute')
- reroute_194_1.parent = test_group.nodes.get('Frame.010')
- reroute_194_1.location = (320.0, -440.0)
-
- reroute_191_1 = test_group.nodes.new('NodeReroute')
- reroute_191_1.parent = test_group.nodes.get('Frame.010')
- reroute_191_1.location = (320.0, -640.0)
-
- reroute_368_1 = test_group.nodes.new('NodeReroute')
- reroute_368_1.parent = test_group.nodes.get('Frame.010')
- reroute_368_1.location = (320.0, -680.0)
-
- reroute_192_1 = test_group.nodes.new('NodeReroute')
- reroute_192_1.parent = test_group.nodes.get('Frame.010')
- reroute_192_1.location = (320.0, -720.0)
-
- reroute_193_1 = test_group.nodes.new('NodeReroute')
- reroute_193_1.parent = test_group.nodes.get('Frame.010')
- reroute_193_1.location = (320.0, -760.0)
-
- suit_secondary_dye_color_1 = test_group.nodes.new('ShaderNodeRGB')
- suit_secondary_dye_color_1.parent = test_group.nodes.get('Frame.010')
- suit_secondary_dye_color_1.hide = True
- suit_secondary_dye_color_1.label = 'Dye Color'
- suit_secondary_dye_color_1.location = (40.0, -40.0)
- suit_secondary_dye_color_1.name = 'Suit Secondary Dye Color'
- suit_secondary_dye_color_1.width = 140.0
-
- suit_secondary_detail_diffuse_map_1 = test_group.nodes.new('ShaderNodeTexImage')
- suit_secondary_detail_diffuse_map_1.parent = test_group.nodes.get('Frame.010')
- suit_secondary_detail_diffuse_map_1.hide = True
- suit_secondary_detail_diffuse_map_1.label = 'Detail Diffuse Map'
- suit_secondary_detail_diffuse_map_1.location = (40.0, -240.0)
- suit_secondary_detail_diffuse_map_1.name = 'Suit Secondary Detail Diffuse Map'
-
- suit_secondary_detail_normal_map_1 = test_group.nodes.new('ShaderNodeTexImage')
- suit_secondary_detail_normal_map_1.parent = test_group.nodes.get('Frame.010')
- suit_secondary_detail_normal_map_1.hide = True
- suit_secondary_detail_normal_map_1.label = 'Detail Normal Map'
- suit_secondary_detail_normal_map_1.location = (40.0, -440.0)
- suit_secondary_detail_normal_map_1.name = 'Suit Secondary Detail Normal Map'
-
- suit_secondary_detail_diffuse_blend_1 = test_group.nodes.new('ShaderNodeValue')
- suit_secondary_detail_diffuse_blend_1.parent = test_group.nodes.get('Frame.010')
- suit_secondary_detail_diffuse_blend_1.hide = True
- suit_secondary_detail_diffuse_blend_1.label = 'Detail Diffuse Blend'
- suit_secondary_detail_diffuse_blend_1.location = (40.0, -480.0)
- suit_secondary_detail_diffuse_blend_1.name = 'Suit Secondary Detail Diffuse Blend'
- suit_secondary_detail_diffuse_blend_1.width = 140.0
-
- suit_secondary_detail_normal_blend_1 = test_group.nodes.new('ShaderNodeValue')
- suit_secondary_detail_normal_blend_1.parent = test_group.nodes.get('Frame.010')
- suit_secondary_detail_normal_blend_1.hide = True
- suit_secondary_detail_normal_blend_1.label = 'Detail Normal Blend'
- suit_secondary_detail_normal_blend_1.location = (40.0, -520.0)
- suit_secondary_detail_normal_blend_1.name = 'Suit Secondary Detail Normal Blend'
- suit_secondary_detail_normal_blend_1.width = 140.0
-
- suit_secondary_detail_roughness_blend_1 = test_group.nodes.new('ShaderNodeValue')
- suit_secondary_detail_roughness_blend_1.parent = test_group.nodes.get('Frame.010')
- suit_secondary_detail_roughness_blend_1.hide = True
- suit_secondary_detail_roughness_blend_1.label = 'Detail Roughness Blend'
- suit_secondary_detail_roughness_blend_1.location = (40.0, -560.0)
- suit_secondary_detail_roughness_blend_1.name = 'Suit Secondary Detail Roughness Blend'
- suit_secondary_detail_roughness_blend_1.width = 140.0
-
- suit_secondary_metalness_1 = test_group.nodes.new('ShaderNodeValue')
- suit_secondary_metalness_1.parent = test_group.nodes.get('Frame.010')
- suit_secondary_metalness_1.hide = True
- suit_secondary_metalness_1.label = 'Metalness'
- suit_secondary_metalness_1.location = (40.0, -600.0)
- suit_secondary_metalness_1.name = 'Suit Secondary Metalness'
- suit_secondary_metalness_1.width = 140.0
-
- suit_secondary_iridescence_1 = test_group.nodes.new('ShaderNodeValue')
- suit_secondary_iridescence_1.parent = test_group.nodes.get('Frame.010')
- suit_secondary_iridescence_1.hide = True
- suit_secondary_iridescence_1.label = 'Iridescence'
- suit_secondary_iridescence_1.location = (40.0, -640.0)
- suit_secondary_iridescence_1.name = 'Suit Secondary Iridescence'
- suit_secondary_iridescence_1.width = 140.0
-
- suit_secondary_fuzz_1 = test_group.nodes.new('ShaderNodeValue')
- suit_secondary_fuzz_1.parent = test_group.nodes.get('Frame.010')
- suit_secondary_fuzz_1.hide = True
- suit_secondary_fuzz_1.label = 'Fuzz'
- suit_secondary_fuzz_1.location = (40.0, -680.0)
- suit_secondary_fuzz_1.name = 'Suit Secondary Fuzz'
- suit_secondary_fuzz_1.width = 140.0
-
- suit_secondary_transmission_1 = test_group.nodes.new('ShaderNodeValue')
- suit_secondary_transmission_1.parent = test_group.nodes.get('Frame.010')
- suit_secondary_transmission_1.hide = True
- suit_secondary_transmission_1.label = 'Transmission'
- suit_secondary_transmission_1.location = (40.0, -720.0)
- suit_secondary_transmission_1.name = 'Suit Secondary Transmission'
- suit_secondary_transmission_1.width = 140.0
-
- suit_secondary_emission_color_1 = test_group.nodes.new('ShaderNodeRGB')
- suit_secondary_emission_color_1.parent = test_group.nodes.get('Frame.010')
- suit_secondary_emission_color_1.hide = True
- suit_secondary_emission_color_1.label = 'Emission Color'
- suit_secondary_emission_color_1.location = (40.0, -760.0)
- suit_secondary_emission_color_1.name = 'Suit Secondary Emission Color'
- suit_secondary_emission_color_1.width = 140.0
-
- worn_suit_secondary_dye_color_1 = test_group.nodes.new('ShaderNodeRGB')
- worn_suit_secondary_dye_color_1.parent = test_group.nodes.get('Frame.011')
- worn_suit_secondary_dye_color_1.hide = True
- worn_suit_secondary_dye_color_1.label = 'Dye Color'
- worn_suit_secondary_dye_color_1.location = (40.0, -40.0)
- worn_suit_secondary_dye_color_1.name = 'Worn Suit Secondary Dye Color'
- worn_suit_secondary_dye_color_1.width = 140.0
-
- worn_suit_secondary_detail_diffuse_blend_1 = test_group.nodes.new('ShaderNodeValue')
- worn_suit_secondary_detail_diffuse_blend_1.parent = test_group.nodes.get('Frame.011')
- worn_suit_secondary_detail_diffuse_blend_1.hide = True
- worn_suit_secondary_detail_diffuse_blend_1.label = 'Detail Diffuse Blend'
- worn_suit_secondary_detail_diffuse_blend_1.location = (40.0, -240.0)
- worn_suit_secondary_detail_diffuse_blend_1.name = 'Worn Suit Secondary Detail Diffuse Blend'
- worn_suit_secondary_detail_diffuse_blend_1.width = 140.0
-
- worn_suit_secondary_detail_normal_blend_1 = test_group.nodes.new('ShaderNodeValue')
- worn_suit_secondary_detail_normal_blend_1.parent = test_group.nodes.get('Frame.011')
- worn_suit_secondary_detail_normal_blend_1.hide = True
- worn_suit_secondary_detail_normal_blend_1.label = 'Detail Normal Blend'
- worn_suit_secondary_detail_normal_blend_1.location = (40.0, -280.0)
- worn_suit_secondary_detail_normal_blend_1.name = 'Worn Suit Secondary Detail Normal Blend'
- worn_suit_secondary_detail_normal_blend_1.width = 140.0
-
- worn_suit_secondary_detail_roughness_blend_1 = test_group.nodes.new('ShaderNodeValue')
- worn_suit_secondary_detail_roughness_blend_1.parent = test_group.nodes.get('Frame.011')
- worn_suit_secondary_detail_roughness_blend_1.hide = True
- worn_suit_secondary_detail_roughness_blend_1.label = 'Detail Roughness Blend'
- worn_suit_secondary_detail_roughness_blend_1.location = (40.0, -320.0)
- worn_suit_secondary_detail_roughness_blend_1.name = 'Worn Suit Secondary Detail Roughness Blend'
- worn_suit_secondary_detail_roughness_blend_1.width = 140.0
-
- worn_suit_secondary_metalness_1 = test_group.nodes.new('ShaderNodeValue')
- worn_suit_secondary_metalness_1.parent = test_group.nodes.get('Frame.011')
- worn_suit_secondary_metalness_1.hide = True
- worn_suit_secondary_metalness_1.label = 'Metalness'
- worn_suit_secondary_metalness_1.location = (40.0, -360.0)
- worn_suit_secondary_metalness_1.name = 'Worn Suit Secondary Metalness'
- worn_suit_secondary_metalness_1.width = 140.0
-
- reroute_358_1 = test_group.nodes.new('NodeReroute')
- reroute_358_1.location = (5525.58154296875, -4880.0)
- reroute_358_1.name = 'Reroute.358'
-
- reroute_361_1 = test_group.nodes.new('NodeReroute')
- reroute_361_1.location = (5505.58154296875, -4900.0)
- reroute_361_1.name = 'Reroute.361'
-
- reroute_350_1 = test_group.nodes.new('NodeReroute')
- reroute_350_1.location = (5705.58154296875, -4687.86279296875)
- reroute_350_1.name = 'Reroute.350'
-
- reroute_351_1 = test_group.nodes.new('NodeReroute')
- reroute_351_1.location = (5685.58154296875, -4710.0302734375)
- reroute_351_1.name = 'Reroute.351'
-
- reroute_362_1 = test_group.nodes.new('NodeReroute')
- reroute_362_1.location = (5565.58154296875, -4838.69970703125)
- reroute_362_1.name = 'Reroute.362'
-
- reroute_357_1 = test_group.nodes.new('NodeReroute')
- reroute_357_1.location = (5545.58154296875, -4858.69970703125)
- reroute_357_1.name = 'Reroute.357'
-
- reroute_352_1 = test_group.nodes.new('NodeReroute')
- reroute_352_1.location = (5665.58154296875, -4731.76416015625)
- reroute_352_1.name = 'Reroute.352'
-
- reroute_353_1 = test_group.nodes.new('NodeReroute')
- reroute_353_1.location = (5645.58154296875, -4753.064453125)
- reroute_353_1.name = 'Reroute.353'
-
- reroute_354_1 = test_group.nodes.new('NodeReroute')
- reroute_354_1.location = (5625.58154296875, -4774.36474609375)
- reroute_354_1.name = 'Reroute.354'
-
- reroute_355_1 = test_group.nodes.new('NodeReroute')
- reroute_355_1.location = (5605.58154296875, -4795.6650390625)
- reroute_355_1.name = 'Reroute.355'
-
- reroute_356_1 = test_group.nodes.new('NodeReroute')
- reroute_356_1.location = (5585.58154296875, -4817.39892578125)
- reroute_356_1.name = 'Reroute.356'
-
- reroute_359_1 = test_group.nodes.new('NodeReroute')
- reroute_359_1.location = (5485.58154296875, -4921.09521484375)
- reroute_359_1.name = 'Reroute.359'
-
- reroute_1 = test_group.nodes.new('NodeReroute')
- reroute_1.parent = test_group.nodes.get('Frame')
- reroute_1.location = (280.0, 360.0)
- reroute_1.name = 'Reroute'
-
- armor_primary_roughness_remap_x_1 = test_group.nodes.new('ShaderNodeValue')
- armor_primary_roughness_remap_x_1.parent = test_group.nodes.get('Frame')
- armor_primary_roughness_remap_x_1.hide = True
- armor_primary_roughness_remap_x_1.label = 'Roughness Remap_X'
- armor_primary_roughness_remap_x_1.location = (0.0, 320.0)
- armor_primary_roughness_remap_x_1.name = 'Armor Primary Roughness Remap X'
- armor_primary_roughness_remap_x_1.width = 155.72564697265625
-
- armor_primary_roughness_remap_y_1 = test_group.nodes.new('ShaderNodeValue')
- armor_primary_roughness_remap_y_1.parent = test_group.nodes.get('Frame')
- armor_primary_roughness_remap_y_1.hide = True
- armor_primary_roughness_remap_y_1.label = 'Roughness Remap_Y'
- armor_primary_roughness_remap_y_1.location = (0.0, 280.0)
- armor_primary_roughness_remap_y_1.name = 'Armor Primary Roughness Remap Y'
- armor_primary_roughness_remap_y_1.width = 156.39605712890625
-
- armor_primary_roughness_remap_z_1 = test_group.nodes.new('ShaderNodeValue')
- armor_primary_roughness_remap_z_1.parent = test_group.nodes.get('Frame')
- armor_primary_roughness_remap_z_1.hide = True
- armor_primary_roughness_remap_z_1.label = 'Roughness Remap_Z'
- armor_primary_roughness_remap_z_1.location = (0.0, 240.0)
- armor_primary_roughness_remap_z_1.name = 'Armor Primary Roughness Remap Z'
- armor_primary_roughness_remap_z_1.width = 156.48974609375
-
- armor_primary_roughness_remap_w_1 = test_group.nodes.new('ShaderNodeValue')
- armor_primary_roughness_remap_w_1.parent = test_group.nodes.get('Frame')
- armor_primary_roughness_remap_w_1.hide = True
- armor_primary_roughness_remap_w_1.label = 'Roughness Remap_W'
- armor_primary_roughness_remap_w_1.location = (0.0, 200.0)
- armor_primary_roughness_remap_w_1.name = 'Armor Primary Roughness Remap W'
- armor_primary_roughness_remap_w_1.width = 156.45462036132812
-
- reroute_338_1 = test_group.nodes.new('NodeReroute')
- reroute_338_1.location = (5685.58154296875, -529.1972045898438)
- reroute_338_1.name = 'Reroute.338'
-
- reroute_339_1 = test_group.nodes.new('NodeReroute')
- reroute_339_1.location = (5665.58154296875, -729.1972045898438)
- reroute_339_1.name = 'Reroute.339'
-
- reroute_340_1 = test_group.nodes.new('NodeReroute')
- reroute_340_1.location = (5645.58154296875, -883.0657348632812)
- reroute_340_1.name = 'Reroute.340'
-
- reroute_341_1 = test_group.nodes.new('NodeReroute')
- reroute_341_1.location = (5625.58154296875, -1087.1534423828125)
- reroute_341_1.name = 'Reroute.341'
-
- reroute_342_1 = test_group.nodes.new('NodeReroute')
- reroute_342_1.location = (5605.58154296875, -1243.0657958984375)
- reroute_342_1.name = 'Reroute.342'
-
- reroute_343_1 = test_group.nodes.new('NodeReroute')
- reroute_343_1.location = (5585.58154296875, -1397.3006591796875)
- reroute_343_1.name = 'Reroute.343'
-
- reroute_349_1 = test_group.nodes.new('NodeReroute')
- reroute_349_1.location = (5565.58154296875, -2085.12109375)
- reroute_349_1.name = 'Reroute.349'
-
- reroute_344_1 = test_group.nodes.new('NodeReroute')
- reroute_344_1.location = (5545.58154296875, -2238.7197265625)
- reroute_344_1.name = 'Reroute.344'
-
- reroute_345_1 = test_group.nodes.new('NodeReroute')
- reroute_345_1.location = (5525.58154296875, -2531.7158203125)
- reroute_345_1.name = 'Reroute.345'
-
- reroute_346_1 = test_group.nodes.new('NodeReroute')
- reroute_346_1.location = (5485.58154296875, -3417.283447265625)
- reroute_346_1.name = 'Reroute.346'
-
- reroute_348_1 = test_group.nodes.new('NodeReroute')
- reroute_348_1.location = (5505.58154296875, -5003.7490234375)
- reroute_348_1.name = 'Reroute.348'
-
- reroute_360_1 = test_group.nodes.new('NodeReroute')
- reroute_360_1.location = (5465.58154296875, -4942.73828125)
- reroute_360_1.name = 'Reroute.360'
-
- reroute_347_1 = test_group.nodes.new('NodeReroute')
- reroute_347_1.location = (5465.58154296875, -6454.30517578125)
- reroute_347_1.name = 'Reroute.347'
-
- armor_primary_wear_remap_x_1 = test_group.nodes.new('ShaderNodeValue')
- armor_primary_wear_remap_x_1.parent = test_group.nodes.get('Frame')
- armor_primary_wear_remap_x_1.hide = True
- armor_primary_wear_remap_x_1.label = 'Wear Remap X'
- armor_primary_wear_remap_x_1.location = (0.888427734375, 121.0198974609375)
- armor_primary_wear_remap_x_1.name = 'Armor Primary Wear Remap X'
- armor_primary_wear_remap_x_1.width = 154.7330322265625
-
- armor_primary_wear_remap_y_1 = test_group.nodes.new('ShaderNodeValue')
- armor_primary_wear_remap_y_1.parent = test_group.nodes.get('Frame')
- armor_primary_wear_remap_y_1.hide = True
- armor_primary_wear_remap_y_1.label = 'Wear Remap Y'
- armor_primary_wear_remap_y_1.location = (0.888427734375, 81.0198974609375)
- armor_primary_wear_remap_y_1.name = 'Armor Primary Wear Remap Y'
- armor_primary_wear_remap_y_1.width = 154.73309326171875
-
- armor_primary_wear_remap_z_1 = test_group.nodes.new('ShaderNodeValue')
- armor_primary_wear_remap_z_1.parent = test_group.nodes.get('Frame')
- armor_primary_wear_remap_z_1.hide = True
- armor_primary_wear_remap_z_1.label = 'Wear Remap Z'
- armor_primary_wear_remap_z_1.location = (0.888427734375, 41.0198974609375)
- armor_primary_wear_remap_z_1.name = 'Armor Primary Wear Remap Z'
- armor_primary_wear_remap_z_1.width = 155.59967041015625
-
- armor_primary_wear_remap_w_1 = test_group.nodes.new('ShaderNodeValue')
- armor_primary_wear_remap_w_1.parent = test_group.nodes.get('Frame')
- armor_primary_wear_remap_w_1.hide = True
- armor_primary_wear_remap_w_1.label = 'Wear Remap W'
- armor_primary_wear_remap_w_1.location = (0.888427734375, 1.0198974609375)
- armor_primary_wear_remap_w_1.name = 'Armor Primary Wear Remap W'
- armor_primary_wear_remap_w_1.width = 155.1663818359375
-
- armor_detail_diffuse_transform_1 = test_group.nodes.new('ShaderNodeMapping')
- armor_detail_diffuse_transform_1.label = 'Detail Diffuse Transform'
- armor_detail_diffuse_transform_1.location = (-1200.0, 240.0)
- armor_detail_diffuse_transform_1.name = 'Armor Detail Diffuse Transform'
-
- armor_primary_detail_diffuse_map_1 = test_group.nodes.new('ShaderNodeTexImage')
- armor_primary_detail_diffuse_map_1.parent = test_group.nodes.get('Frame')
- armor_primary_detail_diffuse_map_1.hide = True
- armor_primary_detail_diffuse_map_1.label = 'Detail Diffuse Map'
- armor_primary_detail_diffuse_map_1.location = (0.0, 160.0)
- armor_primary_detail_diffuse_map_1.name = 'Armor Primary Detail Diffuse Map'
-
- reroute_337_1 = test_group.nodes.new('NodeReroute')
- reroute_337_1.location = (5705.58154296875, -346.1314697265625)
- reroute_337_1.name = 'Reroute.337'
-
- armor_primary_detail_normal_map_1 = test_group.nodes.new('ShaderNodeTexImage')
- armor_primary_detail_normal_map_1.parent = test_group.nodes.get('Frame')
- armor_primary_detail_normal_map_1.hide = True
- armor_primary_detail_normal_map_1.label = 'Detail Normal Map'
- armor_primary_detail_normal_map_1.location = (0.0, -40.0)
- armor_primary_detail_normal_map_1.name = 'Armor Primary Detail Normal Map'
-
- group_output_1 = test_group.nodes.new('NodeGroupOutput')
- group_output_1.is_active_output = True
- group_output_1.location = (5805.58154296875, -4656.068359375)
- group_output_1.name = 'Group Output'
-
- armor_primary_metalness_1 = test_group.nodes.new('ShaderNodeValue')
- armor_primary_metalness_1.parent = test_group.nodes.get('Frame')
- armor_primary_metalness_1.hide = True
- armor_primary_metalness_1.label = 'Metalness'
- armor_primary_metalness_1.location = (0.0, -200.0)
- armor_primary_metalness_1.name = 'Armor Primary Metalness'
- armor_primary_metalness_1.width = 140.0
-
- armor_primary_iridescence_1 = test_group.nodes.new('ShaderNodeValue')
- armor_primary_iridescence_1.parent = test_group.nodes.get('Frame')
- armor_primary_iridescence_1.hide = True
- armor_primary_iridescence_1.label = 'Iridescence'
- armor_primary_iridescence_1.location = (0.0, -240.0)
- armor_primary_iridescence_1.name = 'Armor Primary Iridescence'
- armor_primary_iridescence_1.width = 140.0
-
- armor_primary_fuzz_1 = test_group.nodes.new('ShaderNodeValue')
- armor_primary_fuzz_1.parent = test_group.nodes.get('Frame')
- armor_primary_fuzz_1.hide = True
- armor_primary_fuzz_1.label = 'Fuzz'
- armor_primary_fuzz_1.location = (0.0, -280.0)
- armor_primary_fuzz_1.name = 'Armor Primary Fuzz'
- armor_primary_fuzz_1.width = 140.0
-
- armor_primary_transmission_1 = test_group.nodes.new('ShaderNodeValue')
- armor_primary_transmission_1.parent = test_group.nodes.get('Frame')
- armor_primary_transmission_1.hide = True
- armor_primary_transmission_1.label = 'Transmission'
- armor_primary_transmission_1.location = (0.0, -320.0)
- armor_primary_transmission_1.name = 'Armor Primary Transmission'
- armor_primary_transmission_1.width = 140.0
-
- armor_primary_emission_color_1 = test_group.nodes.new('ShaderNodeRGB')
- armor_primary_emission_color_1.parent = test_group.nodes.get('Frame')
- armor_primary_emission_color_1.hide = True
- armor_primary_emission_color_1.label = 'Emission Color'
- armor_primary_emission_color_1.location = (0.0, -360.0)
- armor_primary_emission_color_1.name = 'Armor Primary Emission Color'
- armor_primary_emission_color_1.width = 140.0
-
- reroute_022_1 = test_group.nodes.new('NodeReroute')
- reroute_022_1.parent = test_group.nodes.get('Frame.001')
- reroute_022_1.location = (280.0, -160.0)
- reroute_022_1.name = 'Reroute.022'
-
- reroute_021_1 = test_group.nodes.new('NodeReroute')
- reroute_021_1.parent = test_group.nodes.get('Frame.001')
- reroute_021_1.location = (280.0, -120.0)
- reroute_021_1.name = 'Reroute.021'
-
- reroute_020_1 = test_group.nodes.new('NodeReroute')
- reroute_020_1.parent = test_group.nodes.get('Frame.001')
- reroute_020_1.location = (280.0, -80.0)
- reroute_020_1.name = 'Reroute.020'
-
- reroute_023_1 = test_group.nodes.new('NodeReroute')
- reroute_023_1.parent = test_group.nodes.get('Frame.001')
- reroute_023_1.location = (280.0, -200.0)
- reroute_023_1.name = 'Reroute.023'
-
- reroute_019_1 = test_group.nodes.new('NodeReroute')
- reroute_019_1.parent = test_group.nodes.get('Frame.001')
- reroute_019_1.location = (280.0, -40.0)
- reroute_019_1.name = 'Reroute.019'
-
- reroute_024_1 = test_group.nodes.new('NodeReroute')
- reroute_024_1.parent = test_group.nodes.get('Frame.001')
- reroute_024_1.location = (280.0, -240.0)
- reroute_024_1.name = 'Reroute.024'
-
- reroute_025_1 = test_group.nodes.new('NodeReroute')
- reroute_025_1.parent = test_group.nodes.get('Frame.001')
- reroute_025_1.location = (280.0, -280.0)
- reroute_025_1.name = 'Reroute.025'
-
- reroute_026_1 = test_group.nodes.new('NodeReroute')
- reroute_026_1.parent = test_group.nodes.get('Frame.001')
- reroute_026_1.location = (280.0, -320.0)
- reroute_026_1.name = 'Reroute.026'
-
- reroute_027_1 = test_group.nodes.new('NodeReroute')
- reroute_027_1.parent = test_group.nodes.get('Frame.001')
- reroute_027_1.location = (280.0, -360.0)
- reroute_027_1.name = 'Reroute.027'
-
- worn_armor_primary_detail_diffuse_blend_1 = test_group.nodes.new('ShaderNodeValue')
- worn_armor_primary_detail_diffuse_blend_1.parent = test_group.nodes.get('Frame.001')
- worn_armor_primary_detail_diffuse_blend_1.hide = True
- worn_armor_primary_detail_diffuse_blend_1.label = 'Detail Diffuse Blend'
- worn_armor_primary_detail_diffuse_blend_1.location = (0.0, -240.0)
- worn_armor_primary_detail_diffuse_blend_1.name = 'Worn Armor Primary Detail Diffuse Blend'
- worn_armor_primary_detail_diffuse_blend_1.width = 140.0
-
- worn_armor_primary_detail_normal_blend_1 = test_group.nodes.new('ShaderNodeValue')
- worn_armor_primary_detail_normal_blend_1.parent = test_group.nodes.get('Frame.001')
- worn_armor_primary_detail_normal_blend_1.hide = True
- worn_armor_primary_detail_normal_blend_1.label = 'Detail Normal Blend'
- worn_armor_primary_detail_normal_blend_1.location = (0.0, -280.0)
- worn_armor_primary_detail_normal_blend_1.name = 'Worn Armor Primary Detail Normal Blend'
- worn_armor_primary_detail_normal_blend_1.width = 140.0
-
- worn_armor_primary_detail_roughness_blend_1 = test_group.nodes.new('ShaderNodeValue')
- worn_armor_primary_detail_roughness_blend_1.parent = test_group.nodes.get('Frame.001')
- worn_armor_primary_detail_roughness_blend_1.hide = True
- worn_armor_primary_detail_roughness_blend_1.label = 'Worn Armor Primary Detail Roughness Blend'
- worn_armor_primary_detail_roughness_blend_1.location = (0.0, -320.0)
- worn_armor_primary_detail_roughness_blend_1.name = 'Value.097'
- worn_armor_primary_detail_roughness_blend_1.width = 140.0
-
- worn_armor_primary_metalness_1 = test_group.nodes.new('ShaderNodeValue')
- worn_armor_primary_metalness_1.parent = test_group.nodes.get('Frame.001')
- worn_armor_primary_metalness_1.hide = True
- worn_armor_primary_metalness_1.label = 'Metalness'
- worn_armor_primary_metalness_1.location = (0.0, -360.0)
- worn_armor_primary_metalness_1.name = 'Worn Armor Primary Metalness'
- worn_armor_primary_metalness_1.width = 140.0
-
- worn_armor_primary_dye_color_1 = test_group.nodes.new('ShaderNodeRGB')
- worn_armor_primary_dye_color_1.parent = test_group.nodes.get('Frame.001')
- worn_armor_primary_dye_color_1.hide = True
- worn_armor_primary_dye_color_1.label = 'Dye Color'
- worn_armor_primary_dye_color_1.location = (0.0, -40.0)
- worn_armor_primary_dye_color_1.name = 'Worn Armor Primary Dye Color'
- worn_armor_primary_dye_color_1.width = 140.0
-
- worn_armor_primary_roughness_remap_x_1 = test_group.nodes.new('ShaderNodeValue')
- worn_armor_primary_roughness_remap_x_1.parent = test_group.nodes.get('Frame.001')
- worn_armor_primary_roughness_remap_x_1.hide = True
- worn_armor_primary_roughness_remap_x_1.label = 'Roughness Remap X'
- worn_armor_primary_roughness_remap_x_1.location = (0.0, -80.0)
- worn_armor_primary_roughness_remap_x_1.name = 'Worn Armor Primary Roughness Remap X'
- worn_armor_primary_roughness_remap_x_1.width = 155.01483154296875
-
- worn_armor_primary_roughness_remap_y_1 = test_group.nodes.new('ShaderNodeValue')
- worn_armor_primary_roughness_remap_y_1.parent = test_group.nodes.get('Frame.001')
- worn_armor_primary_roughness_remap_y_1.hide = True
- worn_armor_primary_roughness_remap_y_1.label = 'Roughness Remap Y'
- worn_armor_primary_roughness_remap_y_1.location = (0.0, -120.0)
- worn_armor_primary_roughness_remap_y_1.name = 'Worn Armor Primary Roughness Remap Y'
- worn_armor_primary_roughness_remap_y_1.width = 155.46978759765625
-
- worn_armor_primary_roughness_remap_z_1 = test_group.nodes.new('ShaderNodeValue')
- worn_armor_primary_roughness_remap_z_1.parent = test_group.nodes.get('Frame.001')
- worn_armor_primary_roughness_remap_z_1.hide = True
- worn_armor_primary_roughness_remap_z_1.label = 'Roughness Remap Z'
- worn_armor_primary_roughness_remap_z_1.location = (0.0, -160.0)
- worn_armor_primary_roughness_remap_z_1.name = 'Worn Armor Primary Roughness Remap Z'
- worn_armor_primary_roughness_remap_z_1.width = 155.92486572265625
-
- worn_armor_primary_roughness_remap_w_1 = test_group.nodes.new('ShaderNodeValue')
- worn_armor_primary_roughness_remap_w_1.parent = test_group.nodes.get('Frame.001')
- worn_armor_primary_roughness_remap_w_1.hide = True
- worn_armor_primary_roughness_remap_w_1.label = 'Roughness Remap W'
- worn_armor_primary_roughness_remap_w_1.location = (0.0, -200.0)
- worn_armor_primary_roughness_remap_w_1.name = 'Worn Armor Primary Roughness Remap W'
- worn_armor_primary_roughness_remap_w_1.width = 156.83477783203125
-
- armor_secondary_roughness_remap_x_1 = test_group.nodes.new('ShaderNodeValue')
- armor_secondary_roughness_remap_x_1.parent = test_group.nodes.get('Frame.002')
- armor_secondary_roughness_remap_x_1.hide = True
- armor_secondary_roughness_remap_x_1.label = 'Roughness Remap X'
- armor_secondary_roughness_remap_x_1.location = (20.0, -80.0)
- armor_secondary_roughness_remap_x_1.name = 'Armor Secondary Roughness Remap X'
- armor_secondary_roughness_remap_x_1.width = 156.03314208984375
-
- armor_secondary_roughness_remap_y_1 = test_group.nodes.new('ShaderNodeValue')
- armor_secondary_roughness_remap_y_1.parent = test_group.nodes.get('Frame.002')
- armor_secondary_roughness_remap_y_1.hide = True
- armor_secondary_roughness_remap_y_1.label = 'Roughness Remap Y'
- armor_secondary_roughness_remap_y_1.location = (20.0, -120.0)
- armor_secondary_roughness_remap_y_1.name = 'Armor Secondary Roughness Remap Y'
- armor_secondary_roughness_remap_y_1.width = 155.599853515625
-
- armor_secondary_roughness_remap_z_1 = test_group.nodes.new('ShaderNodeValue')
- armor_secondary_roughness_remap_z_1.parent = test_group.nodes.get('Frame.002')
- armor_secondary_roughness_remap_z_1.hide = True
- armor_secondary_roughness_remap_z_1.label = 'Roughness Remap Z'
- armor_secondary_roughness_remap_z_1.location = (20.0, -160.0)
- armor_secondary_roughness_remap_z_1.name = 'Armor Secondary Roughness Remap Z'
- armor_secondary_roughness_remap_z_1.width = 156.8997802734375
-
- armor_secondary_roughness_remap_w_1 = test_group.nodes.new('ShaderNodeValue')
- armor_secondary_roughness_remap_w_1.parent = test_group.nodes.get('Frame.002')
- armor_secondary_roughness_remap_w_1.hide = True
- armor_secondary_roughness_remap_w_1.label = 'Roughness Remap W'
- armor_secondary_roughness_remap_w_1.location = (20.0, -200.0)
- armor_secondary_roughness_remap_w_1.name = 'Armor Secondary Roughness Remap W'
- armor_secondary_roughness_remap_w_1.width = 155.599853515625
-
- armor_secondary_wear_remap_x_1 = test_group.nodes.new('ShaderNodeValue')
- armor_secondary_wear_remap_x_1.parent = test_group.nodes.get('Frame.002')
- armor_secondary_wear_remap_x_1.hide = True
- armor_secondary_wear_remap_x_1.label = 'Wear Remap X'
- armor_secondary_wear_remap_x_1.location = (20.0, -280.0)
- armor_secondary_wear_remap_x_1.name = 'Armor Secondary Wear Remap X'
- armor_secondary_wear_remap_x_1.width = 156.46649169921875
-
- armor_secondary_wear_remap_y_1 = test_group.nodes.new('ShaderNodeValue')
- armor_secondary_wear_remap_y_1.parent = test_group.nodes.get('Frame.002')
- armor_secondary_wear_remap_y_1.hide = True
- armor_secondary_wear_remap_y_1.label = 'Wear Remap Y'
- armor_secondary_wear_remap_y_1.location = (20.0, -320.0)
- armor_secondary_wear_remap_y_1.name = 'Armor Secondary Wear Remap Y'
- armor_secondary_wear_remap_y_1.width = 156.03314208984375
-
- armor_secondary_wear_remap_z_1 = test_group.nodes.new('ShaderNodeValue')
- armor_secondary_wear_remap_z_1.parent = test_group.nodes.get('Frame.002')
- armor_secondary_wear_remap_z_1.hide = True
- armor_secondary_wear_remap_z_1.label = 'Wear Remap Z'
- armor_secondary_wear_remap_z_1.location = (20.0, -360.0)
- armor_secondary_wear_remap_z_1.name = 'Armor Secondary Wear Remap Z'
- armor_secondary_wear_remap_z_1.width = 156.03314208984375
-
- armor_secondary_wear_remap_w_1 = test_group.nodes.new('ShaderNodeValue')
- armor_secondary_wear_remap_w_1.parent = test_group.nodes.get('Frame.002')
- armor_secondary_wear_remap_w_1.hide = True
- armor_secondary_wear_remap_w_1.label = 'Wear Remap W'
- armor_secondary_wear_remap_w_1.location = (20.0, -400.0)
- armor_secondary_wear_remap_w_1.name = 'Armor Secondary Wear Remap W'
- armor_secondary_wear_remap_w_1.width = 156.033203125
-
- worn_armor_secondary_roughness_remap_x_1 = test_group.nodes.new('ShaderNodeValue')
- worn_armor_secondary_roughness_remap_x_1.parent = test_group.nodes.get('Frame.003')
- worn_armor_secondary_roughness_remap_x_1.hide = True
- worn_armor_secondary_roughness_remap_x_1.label = 'Roughness Remap X'
- worn_armor_secondary_roughness_remap_x_1.location = (-1580.0, 360.0)
- worn_armor_secondary_roughness_remap_x_1.name = 'Worn Armor Secondary Roughness Remap X'
- worn_armor_secondary_roughness_remap_x_1.width = 155.16650390625
-
- worn_armor_secondary_roughness_remap_y_1 = test_group.nodes.new('ShaderNodeValue')
- worn_armor_secondary_roughness_remap_y_1.parent = test_group.nodes.get('Frame.003')
- worn_armor_secondary_roughness_remap_y_1.hide = True
- worn_armor_secondary_roughness_remap_y_1.label = 'Roughness Remap Y'
- worn_armor_secondary_roughness_remap_y_1.location = (-1580.0, 320.0)
- worn_armor_secondary_roughness_remap_y_1.name = 'Worn Armor Secondary Roughness Remap Y'
- worn_armor_secondary_roughness_remap_y_1.width = 155.599853515625
-
- worn_armor_secondary_roughness_remap_z_1 = test_group.nodes.new('ShaderNodeValue')
- worn_armor_secondary_roughness_remap_z_1.parent = test_group.nodes.get('Frame.003')
- worn_armor_secondary_roughness_remap_z_1.hide = True
- worn_armor_secondary_roughness_remap_z_1.label = 'Roughness Remap Z'
- worn_armor_secondary_roughness_remap_z_1.location = (-1580.0, 280.0)
- worn_armor_secondary_roughness_remap_z_1.name = 'Worn Armor Secondary Roughness Remap Z'
- worn_armor_secondary_roughness_remap_z_1.width = 156.03314208984375
-
- worn_armor_secondary_roughness_remap_w_1 = test_group.nodes.new('ShaderNodeValue')
- worn_armor_secondary_roughness_remap_w_1.parent = test_group.nodes.get('Frame.003')
- worn_armor_secondary_roughness_remap_w_1.hide = True
- worn_armor_secondary_roughness_remap_w_1.label = 'Roughness Remap W'
- worn_armor_secondary_roughness_remap_w_1.location = (-1580.0, 240.0)
- worn_armor_secondary_roughness_remap_w_1.name = 'Worn Armor Secondary Roughness Remap W'
- worn_armor_secondary_roughness_remap_w_1.width = 156.46646118164062
-
- reroute_067_1 = test_group.nodes.new('NodeReroute')
- reroute_067_1.parent = test_group.nodes.get('Frame.004')
- reroute_067_1.location = (300.0, -400.0)
- reroute_067_1.name = 'Reroute.067'
-
- reroute_058_1 = test_group.nodes.new('NodeReroute')
- reroute_058_1.parent = test_group.nodes.get('Frame.004')
- reroute_058_1.location = (300.0, -80.0)
- reroute_058_1.name = 'Reroute.058'
-
- reroute_060_1 = test_group.nodes.new('NodeReroute')
- reroute_060_1.parent = test_group.nodes.get('Frame.004')
- reroute_060_1.location = (300.0, -160.0)
- reroute_060_1.name = 'Reroute.060'
-
- reroute_057_1 = test_group.nodes.new('NodeReroute')
- reroute_057_1.parent = test_group.nodes.get('Frame.004')
- reroute_057_1.location = (300.0, -40.0)
- reroute_057_1.name = 'Reroute.057'
-
- reroute_059_1 = test_group.nodes.new('NodeReroute')
- reroute_059_1.parent = test_group.nodes.get('Frame.004')
- reroute_059_1.location = (300.0, -120.0)
- reroute_059_1.name = 'Reroute.059'
-
- reroute_062_1 = test_group.nodes.new('NodeReroute')
- reroute_062_1.parent = test_group.nodes.get('Frame.004')
- reroute_062_1.location = (300.0, -220.0)
- reroute_062_1.name = 'Reroute.062'
-
- reroute_056_1 = test_group.nodes.new('NodeReroute')
- reroute_056_1.parent = test_group.nodes.get('Frame.004')
- reroute_056_1.location = (300.0, 0.0)
- reroute_056_1.name = 'Reroute.056'
-
- reroute_063_1 = test_group.nodes.new('NodeReroute')
- reroute_063_1.parent = test_group.nodes.get('Frame.004')
- reroute_063_1.location = (300.0, -240.0)
- reroute_063_1.name = 'Reroute.063'
-
- reroute_064_1 = test_group.nodes.new('NodeReroute')
- reroute_064_1.parent = test_group.nodes.get('Frame.004')
- reroute_064_1.location = (300.0, -280.0)
- reroute_064_1.name = 'Reroute.064'
-
- reroute_065_1 = test_group.nodes.new('NodeReroute')
- reroute_065_1.parent = test_group.nodes.get('Frame.004')
- reroute_065_1.location = (300.0, -320.0)
- reroute_065_1.name = 'Reroute.065'
-
- reroute_066_1 = test_group.nodes.new('NodeReroute')
- reroute_066_1.parent = test_group.nodes.get('Frame.004')
- reroute_066_1.location = (300.0, -360.0)
- reroute_066_1.name = 'Reroute.066'
-
- reroute_071_1 = test_group.nodes.new('NodeReroute')
- reroute_071_1.parent = test_group.nodes.get('Frame.004')
- reroute_071_1.location = (300.0, -560.0)
- reroute_071_1.name = 'Reroute.071'
-
- reroute_068_1 = test_group.nodes.new('NodeReroute')
- reroute_068_1.parent = test_group.nodes.get('Frame.004')
- reroute_068_1.location = (300.0, -440.0)
- reroute_068_1.name = 'Reroute.068'
-
- reroute_069_1 = test_group.nodes.new('NodeReroute')
- reroute_069_1.parent = test_group.nodes.get('Frame.004')
- reroute_069_1.location = (300.0, -480.0)
- reroute_069_1.name = 'Reroute.069'
-
- reroute_070_1 = test_group.nodes.new('NodeReroute')
- reroute_070_1.parent = test_group.nodes.get('Frame.004')
- reroute_070_1.location = (300.0, -520.0)
- reroute_070_1.name = 'Reroute.070'
-
- reroute_061_1 = test_group.nodes.new('NodeReroute')
- reroute_061_1.parent = test_group.nodes.get('Frame.004')
- reroute_061_1.location = (300.0, -200.0)
- reroute_061_1.name = 'Reroute.061'
-
- reroute_072_1 = test_group.nodes.new('NodeReroute')
- reroute_072_1.parent = test_group.nodes.get('Frame.004')
- reroute_072_1.location = (300.0, -600.0)
- reroute_072_1.name = 'Reroute.072'
-
- reroute_365_1 = test_group.nodes.new('NodeReroute')
- reroute_365_1.parent = test_group.nodes.get('Frame.004')
- reroute_365_1.location = (300.0, -640.0)
- reroute_365_1.name = 'Reroute.365'
-
- reroute_073_1 = test_group.nodes.new('NodeReroute')
- reroute_073_1.parent = test_group.nodes.get('Frame.004')
- reroute_073_1.location = (300.0, -680.0)
- reroute_073_1.name = 'Reroute.073'
-
- reroute_074_1 = test_group.nodes.new('NodeReroute')
- reroute_074_1.parent = test_group.nodes.get('Frame.004')
- reroute_074_1.location = (300.0, -720.0)
- reroute_074_1.name = 'Reroute.074'
-
- cloth_primary_dye_color_1 = test_group.nodes.new('ShaderNodeRGB')
- cloth_primary_dye_color_1.parent = test_group.nodes.get('Frame.004')
- cloth_primary_dye_color_1.hide = True
- cloth_primary_dye_color_1.label = 'Dye Color'
- cloth_primary_dye_color_1.location = (20.0, 0.0)
- cloth_primary_dye_color_1.name = 'Cloth Primary Dye Color'
- cloth_primary_dye_color_1.width = 140.0
-
- cloth_primary_detail_diffuse_map_1 = test_group.nodes.new('ShaderNodeTexImage')
- cloth_primary_detail_diffuse_map_1.parent = test_group.nodes.get('Frame.004')
- cloth_primary_detail_diffuse_map_1.hide = True
- cloth_primary_detail_diffuse_map_1.label = 'Detail Diffuse Map'
- cloth_primary_detail_diffuse_map_1.location = (20.0, -200.0)
- cloth_primary_detail_diffuse_map_1.name = 'Cloth Primary Detail Diffuse Map'
-
- cloth_primary_detail_normal_map_1 = test_group.nodes.new('ShaderNodeTexImage')
- cloth_primary_detail_normal_map_1.parent = test_group.nodes.get('Frame.004')
- cloth_primary_detail_normal_map_1.hide = True
- cloth_primary_detail_normal_map_1.label = 'Detail Normal Map'
- cloth_primary_detail_normal_map_1.location = (20.0, -400.0)
- cloth_primary_detail_normal_map_1.name = 'Cloth Primary Detail Normal Map'
-
- cloth_primary_detail_diffuse_blend_1 = test_group.nodes.new('ShaderNodeValue')
- cloth_primary_detail_diffuse_blend_1.parent = test_group.nodes.get('Frame.004')
- cloth_primary_detail_diffuse_blend_1.hide = True
- cloth_primary_detail_diffuse_blend_1.label = 'Detail Diffuse Blend'
- cloth_primary_detail_diffuse_blend_1.location = (20.0, -440.0)
- cloth_primary_detail_diffuse_blend_1.name = 'Cloth Primary Detail Diffuse Blend'
- cloth_primary_detail_diffuse_blend_1.width = 140.0
-
- cloth_primary_detail_normal_blend_1 = test_group.nodes.new('ShaderNodeValue')
- cloth_primary_detail_normal_blend_1.parent = test_group.nodes.get('Frame.004')
- cloth_primary_detail_normal_blend_1.hide = True
- cloth_primary_detail_normal_blend_1.label = 'Detail Normal Blend'
- cloth_primary_detail_normal_blend_1.location = (20.0, -480.0)
- cloth_primary_detail_normal_blend_1.name = 'Cloth Primary Detail Normal Blend'
- cloth_primary_detail_normal_blend_1.width = 140.0
-
- cloth_primary_detail_roughness_blend_1 = test_group.nodes.new('ShaderNodeValue')
- cloth_primary_detail_roughness_blend_1.parent = test_group.nodes.get('Frame.004')
- cloth_primary_detail_roughness_blend_1.hide = True
- cloth_primary_detail_roughness_blend_1.label = 'Detail Roughness Blend'
- cloth_primary_detail_roughness_blend_1.location = (20.0, -520.0)
- cloth_primary_detail_roughness_blend_1.name = 'Cloth Primary Detail Roughness Blend'
- cloth_primary_detail_roughness_blend_1.width = 140.0
-
- cloth_primary_metalness_1 = test_group.nodes.new('ShaderNodeValue')
- cloth_primary_metalness_1.parent = test_group.nodes.get('Frame.004')
- cloth_primary_metalness_1.hide = True
- cloth_primary_metalness_1.label = 'Metalness'
- cloth_primary_metalness_1.location = (20.0, -560.0)
- cloth_primary_metalness_1.name = 'Cloth Primary Metalness'
- cloth_primary_metalness_1.width = 140.0
-
- cloth_primary_iridescence_1 = test_group.nodes.new('ShaderNodeValue')
- cloth_primary_iridescence_1.parent = test_group.nodes.get('Frame.004')
- cloth_primary_iridescence_1.hide = True
- cloth_primary_iridescence_1.label = 'Iridescence'
- cloth_primary_iridescence_1.location = (20.0, -600.0)
- cloth_primary_iridescence_1.name = 'Cloth Primary Iridescence'
- cloth_primary_iridescence_1.width = 140.0
-
- cloth_primary_fuzz_1 = test_group.nodes.new('ShaderNodeValue')
- cloth_primary_fuzz_1.parent = test_group.nodes.get('Frame.004')
- cloth_primary_fuzz_1.hide = True
- cloth_primary_fuzz_1.label = 'Fuzz'
- cloth_primary_fuzz_1.location = (20.0, -640.0)
- cloth_primary_fuzz_1.name = 'Cloth Primary Fuzz'
- cloth_primary_fuzz_1.width = 140.0
-
- cloth_primary_transmission_1 = test_group.nodes.new('ShaderNodeValue')
- cloth_primary_transmission_1.parent = test_group.nodes.get('Frame.004')
- cloth_primary_transmission_1.hide = True
- cloth_primary_transmission_1.label = 'Transmission'
- cloth_primary_transmission_1.location = (20.0, -680.0)
- cloth_primary_transmission_1.name = 'Cloth Primary Transmission'
- cloth_primary_transmission_1.width = 140.0
-
- cloth_primary_emission_color_1 = test_group.nodes.new('ShaderNodeRGB')
- cloth_primary_emission_color_1.parent = test_group.nodes.get('Frame.004')
- cloth_primary_emission_color_1.hide = True
- cloth_primary_emission_color_1.label = 'Emission Color'
- cloth_primary_emission_color_1.location = (20.0, -720.0)
- cloth_primary_emission_color_1.name = 'Cloth Primary Emission Color'
- cloth_primary_emission_color_1.width = 140.0
-
- cloth_primary_roughness_remap_x_1 = test_group.nodes.new('ShaderNodeValue')
- cloth_primary_roughness_remap_x_1.parent = test_group.nodes.get('Frame.004')
- cloth_primary_roughness_remap_x_1.hide = True
- cloth_primary_roughness_remap_x_1.label = 'Roughness Remap X'
- cloth_primary_roughness_remap_x_1.location = (20.0, -40.0)
- cloth_primary_roughness_remap_x_1.name = 'Cloth Primary Roughness Remap X'
- cloth_primary_roughness_remap_x_1.width = 155.92779541015625
-
- cloth_primary_roughness_remap_y_1 = test_group.nodes.new('ShaderNodeValue')
- cloth_primary_roughness_remap_y_1.parent = test_group.nodes.get('Frame.004')
- cloth_primary_roughness_remap_y_1.hide = True
- cloth_primary_roughness_remap_y_1.label = 'Roughness Remap Y'
- cloth_primary_roughness_remap_y_1.location = (20.0, -80.0)
- cloth_primary_roughness_remap_y_1.name = 'Cloth Primary Roughness Remap Y'
- cloth_primary_roughness_remap_y_1.width = 156.39620971679688
-
- cloth_primary_roughness_remap_z_1 = test_group.nodes.new('ShaderNodeValue')
- cloth_primary_roughness_remap_z_1.parent = test_group.nodes.get('Frame.004')
- cloth_primary_roughness_remap_z_1.hide = True
- cloth_primary_roughness_remap_z_1.label = 'Roughness Remap Z'
- cloth_primary_roughness_remap_z_1.location = (20.0, -120.0)
- cloth_primary_roughness_remap_z_1.name = 'Cloth Primary Roughness Remap Z'
- cloth_primary_roughness_remap_z_1.width = 156.86474609375
-
- cloth_primary_roughness_remap_w_1 = test_group.nodes.new('ShaderNodeValue')
- cloth_primary_roughness_remap_w_1.parent = test_group.nodes.get('Frame.004')
- cloth_primary_roughness_remap_w_1.hide = True
- cloth_primary_roughness_remap_w_1.label = 'Roughness Remap W'
- cloth_primary_roughness_remap_w_1.location = (20.0, -160.0)
- cloth_primary_roughness_remap_w_1.name = 'Cloth Primary Roughness Remap W'
- cloth_primary_roughness_remap_w_1.width = 155.45928955078125
-
- cloth_primary_wear_remap_x_1 = test_group.nodes.new('ShaderNodeValue')
- cloth_primary_wear_remap_x_1.parent = test_group.nodes.get('Frame.004')
- cloth_primary_wear_remap_x_1.hide = True
- cloth_primary_wear_remap_x_1.label = 'Wear Remap X'
- cloth_primary_wear_remap_x_1.location = (20.0, -240.0)
- cloth_primary_wear_remap_x_1.name = 'Cloth Primary Wear Remap X'
- cloth_primary_wear_remap_x_1.width = 156.4664306640625
-
- cloth_primary_wear_remap_y_1 = test_group.nodes.new('ShaderNodeValue')
- cloth_primary_wear_remap_y_1.parent = test_group.nodes.get('Frame.004')
- cloth_primary_wear_remap_y_1.hide = True
- cloth_primary_wear_remap_y_1.label = 'Wear Remap Y'
- cloth_primary_wear_remap_y_1.location = (20.0, -280.0)
- cloth_primary_wear_remap_y_1.name = 'Cloth Primary Wear Remap Y'
- cloth_primary_wear_remap_y_1.width = 155.59979248046875
-
- cloth_primary_wear_remap_z_1 = test_group.nodes.new('ShaderNodeValue')
- cloth_primary_wear_remap_z_1.parent = test_group.nodes.get('Frame.004')
- cloth_primary_wear_remap_z_1.hide = True
- cloth_primary_wear_remap_z_1.label = 'Wear Remap Z'
- cloth_primary_wear_remap_z_1.location = (20.0, -320.0)
- cloth_primary_wear_remap_z_1.name = 'Cloth Primary Wear Remap Z'
- cloth_primary_wear_remap_z_1.width = 156.4664306640625
-
- cloth_primary_wear_remap_w_1 = test_group.nodes.new('ShaderNodeValue')
- cloth_primary_wear_remap_w_1.parent = test_group.nodes.get('Frame.004')
- cloth_primary_wear_remap_w_1.hide = True
- cloth_primary_wear_remap_w_1.label = 'Wear Remap W'
- cloth_primary_wear_remap_w_1.location = (20.0, -360.0)
- cloth_primary_wear_remap_w_1.name = 'Cloth Primary Wear Remap W'
- cloth_primary_wear_remap_w_1.width = 155.16650390625
-
- worn_cloth_primary_roughness_remap_x_1 = test_group.nodes.new('ShaderNodeValue')
- worn_cloth_primary_roughness_remap_x_1.parent = test_group.nodes.get('Frame.005')
- worn_cloth_primary_roughness_remap_x_1.hide = True
- worn_cloth_primary_roughness_remap_x_1.label = 'Roughness Remap X'
- worn_cloth_primary_roughness_remap_x_1.location = (20.0, 20.0)
- worn_cloth_primary_roughness_remap_x_1.name = 'Worn Cloth Primary Roughness Remap X'
- worn_cloth_primary_roughness_remap_x_1.width = 156.39630126953125
-
- worn_cloth_primary_roughness_remap_y_1 = test_group.nodes.new('ShaderNodeValue')
- worn_cloth_primary_roughness_remap_y_1.parent = test_group.nodes.get('Frame.005')
- worn_cloth_primary_roughness_remap_y_1.hide = True
- worn_cloth_primary_roughness_remap_y_1.label = 'Roughness Remap Y'
- worn_cloth_primary_roughness_remap_y_1.location = (20.0, -20.0)
- worn_cloth_primary_roughness_remap_y_1.name = 'Worn Cloth Primary Roughness Remap Y'
- worn_cloth_primary_roughness_remap_y_1.width = 156.86471557617188
-
- worn_cloth_primary_roughness_remap_z_1 = test_group.nodes.new('ShaderNodeValue')
- worn_cloth_primary_roughness_remap_z_1.parent = test_group.nodes.get('Frame.005')
- worn_cloth_primary_roughness_remap_z_1.hide = True
- worn_cloth_primary_roughness_remap_z_1.label = 'Roughness Remap Z'
- worn_cloth_primary_roughness_remap_z_1.location = (20.0, -60.0)
- worn_cloth_primary_roughness_remap_z_1.name = 'Worn Cloth Primary Roughness Remap Z'
- worn_cloth_primary_roughness_remap_z_1.width = 156.86474609375
-
- worn_cloth_primary_roughness_remap_w_1 = test_group.nodes.new('ShaderNodeValue')
- worn_cloth_primary_roughness_remap_w_1.parent = test_group.nodes.get('Frame.005')
- worn_cloth_primary_roughness_remap_w_1.hide = True
- worn_cloth_primary_roughness_remap_w_1.label = 'Roughness Remap W'
- worn_cloth_primary_roughness_remap_w_1.location = (20.0, -100.0)
- worn_cloth_primary_roughness_remap_w_1.name = 'Worn Cloth Primary Roughness Remap W'
- worn_cloth_primary_roughness_remap_w_1.width = 156.39630126953125
-
- cloth_secondary_roughness_remap_x_1 = test_group.nodes.new('ShaderNodeValue')
- cloth_secondary_roughness_remap_x_1.parent = test_group.nodes.get('Frame.006')
- cloth_secondary_roughness_remap_x_1.hide = True
- cloth_secondary_roughness_remap_x_1.label = 'Roughness Remap X'
- cloth_secondary_roughness_remap_x_1.location = (20.0, -60.0)
- cloth_secondary_roughness_remap_x_1.name = 'Cloth Secondary Roughness Remap X'
- cloth_secondary_roughness_remap_x_1.width = 156.86474609375
-
- cloth_secondary_roughness_remap_y_1 = test_group.nodes.new('ShaderNodeValue')
- cloth_secondary_roughness_remap_y_1.parent = test_group.nodes.get('Frame.006')
- cloth_secondary_roughness_remap_y_1.hide = True
- cloth_secondary_roughness_remap_y_1.label = 'Roughness Remap Y'
- cloth_secondary_roughness_remap_y_1.location = (20.0, -100.0)
- cloth_secondary_roughness_remap_y_1.name = 'Cloth Secondary Roughness Remap Y'
- cloth_secondary_roughness_remap_y_1.width = 155.92782592773438
-
- cloth_secondary_roughness_remap_z_1 = test_group.nodes.new('ShaderNodeValue')
- cloth_secondary_roughness_remap_z_1.parent = test_group.nodes.get('Frame.006')
- cloth_secondary_roughness_remap_z_1.hide = True
- cloth_secondary_roughness_remap_z_1.label = 'Roughness Remap Z'
- cloth_secondary_roughness_remap_z_1.location = (20.0, -140.0)
- cloth_secondary_roughness_remap_z_1.name = 'Cloth Secondary Roughness Remap Z'
- cloth_secondary_roughness_remap_z_1.width = 156.39630126953125
-
- cloth_secondary_roughness_remap_w_1 = test_group.nodes.new('ShaderNodeValue')
- cloth_secondary_roughness_remap_w_1.parent = test_group.nodes.get('Frame.006')
- cloth_secondary_roughness_remap_w_1.hide = True
- cloth_secondary_roughness_remap_w_1.label = 'Roughness Remap W'
- cloth_secondary_roughness_remap_w_1.location = (20.0, -180.0)
- cloth_secondary_roughness_remap_w_1.name = 'Cloth Secondary Roughness Remap W'
- cloth_secondary_roughness_remap_w_1.width = 156.39627075195312
-
- cloth_secondary_wear_remap_x_1 = test_group.nodes.new('ShaderNodeValue')
- cloth_secondary_wear_remap_x_1.parent = test_group.nodes.get('Frame.006')
- cloth_secondary_wear_remap_x_1.hide = True
- cloth_secondary_wear_remap_x_1.label = 'Wear Remap X'
- cloth_secondary_wear_remap_x_1.location = (20.0, -260.0)
- cloth_secondary_wear_remap_x_1.name = 'Cloth Secondary Wear Remap X'
- cloth_secondary_wear_remap_x_1.width = 156.3963623046875
-
- cloth_secondary_wear_remap_y_1 = test_group.nodes.new('ShaderNodeValue')
- cloth_secondary_wear_remap_y_1.parent = test_group.nodes.get('Frame.006')
- cloth_secondary_wear_remap_y_1.hide = True
- cloth_secondary_wear_remap_y_1.label = 'Wear Remap Y'
- cloth_secondary_wear_remap_y_1.location = (20.0, -300.0)
- cloth_secondary_wear_remap_y_1.name = 'Cloth Secondary Wear Remap Y'
- cloth_secondary_wear_remap_y_1.width = 155.92794799804688
-
- cloth_secondary_wear_remap_z_1 = test_group.nodes.new('ShaderNodeValue')
- cloth_secondary_wear_remap_z_1.parent = test_group.nodes.get('Frame.006')
- cloth_secondary_wear_remap_z_1.hide = True
- cloth_secondary_wear_remap_z_1.label = 'Wear Remap Z'
- cloth_secondary_wear_remap_z_1.location = (20.0, -340.0)
- cloth_secondary_wear_remap_z_1.name = 'Cloth Secondary Wear Remap Z'
- cloth_secondary_wear_remap_z_1.width = 155.92791748046875
-
- cloth_secondary_wear_remap_w_1 = test_group.nodes.new('ShaderNodeValue')
- cloth_secondary_wear_remap_w_1.parent = test_group.nodes.get('Frame.006')
- cloth_secondary_wear_remap_w_1.hide = True
- cloth_secondary_wear_remap_w_1.label = 'Wear Remap W'
- cloth_secondary_wear_remap_w_1.location = (20.0, -380.0)
- cloth_secondary_wear_remap_w_1.name = 'Cloth Secondary Wear Remap W'
- cloth_secondary_wear_remap_w_1.width = 156.39642333984375
-
- worn_cloth_secondary_roughness_remap_x_1 = test_group.nodes.new('ShaderNodeValue')
- worn_cloth_secondary_roughness_remap_x_1.parent = test_group.nodes.get('Frame.007')
- worn_cloth_secondary_roughness_remap_x_1.hide = True
- worn_cloth_secondary_roughness_remap_x_1.label = 'Roughness Remap X'
- worn_cloth_secondary_roughness_remap_x_1.location = (20.0, -60.0)
- worn_cloth_secondary_roughness_remap_x_1.name = 'Worn Cloth Secondary Roughness Remap X'
- worn_cloth_secondary_roughness_remap_x_1.width = 155.599853515625
-
- worn_cloth_secondary_roughness_remap_y_1 = test_group.nodes.new('ShaderNodeValue')
- worn_cloth_secondary_roughness_remap_y_1.parent = test_group.nodes.get('Frame.007')
- worn_cloth_secondary_roughness_remap_y_1.hide = True
- worn_cloth_secondary_roughness_remap_y_1.label = 'Roughness Remap Y'
- worn_cloth_secondary_roughness_remap_y_1.location = (20.0, -100.0)
- worn_cloth_secondary_roughness_remap_y_1.name = 'Worn Cloth Secondary Roughness Remap Y'
- worn_cloth_secondary_roughness_remap_y_1.width = 156.46652221679688
-
- worn_cloth_secondary_roughness_remap_z_1 = test_group.nodes.new('ShaderNodeValue')
- worn_cloth_secondary_roughness_remap_z_1.parent = test_group.nodes.get('Frame.007')
- worn_cloth_secondary_roughness_remap_z_1.hide = True
- worn_cloth_secondary_roughness_remap_z_1.label = 'Roughness Remap Z'
- worn_cloth_secondary_roughness_remap_z_1.location = (20.0, -140.0)
- worn_cloth_secondary_roughness_remap_z_1.name = 'Worn Cloth Secondary Roughness Remap Z'
- worn_cloth_secondary_roughness_remap_z_1.width = 156.03317260742188
-
- worn_cloth_secondary_roughness_remap_w_1 = test_group.nodes.new('ShaderNodeValue')
- worn_cloth_secondary_roughness_remap_w_1.parent = test_group.nodes.get('Frame.007')
- worn_cloth_secondary_roughness_remap_w_1.hide = True
- worn_cloth_secondary_roughness_remap_w_1.label = 'Roughness Remap W'
- worn_cloth_secondary_roughness_remap_w_1.location = (20.0, -180.0)
- worn_cloth_secondary_roughness_remap_w_1.name = 'Worn Cloth Secondary Roughness Remap W'
- worn_cloth_secondary_roughness_remap_w_1.width = 155.599853515625
-
- suit_primary_roughness_remap_x_1 = test_group.nodes.new('ShaderNodeValue')
- suit_primary_roughness_remap_x_1.parent = test_group.nodes.get('Frame.008')
- suit_primary_roughness_remap_x_1.hide = True
- suit_primary_roughness_remap_x_1.label = 'Roughness Remap X'
- suit_primary_roughness_remap_x_1.location = (20.0, -60.0)
- suit_primary_roughness_remap_x_1.name = 'Suit Primary Roughness Remap X'
- suit_primary_roughness_remap_x_1.width = 156.206298828125
-
- suit_primary_roughness_remap_y_1 = test_group.nodes.new('ShaderNodeValue')
- suit_primary_roughness_remap_y_1.parent = test_group.nodes.get('Frame.008')
- suit_primary_roughness_remap_y_1.hide = True
- suit_primary_roughness_remap_y_1.label = 'Roughness Remap Y'
- suit_primary_roughness_remap_y_1.location = (20.0, -100.0)
- suit_primary_roughness_remap_y_1.name = 'Suit Primary Roughness Remap Y'
- suit_primary_roughness_remap_y_1.width = 156.4664306640625
-
- suit_primary_roughness_remap_z_1 = test_group.nodes.new('ShaderNodeValue')
- suit_primary_roughness_remap_z_1.parent = test_group.nodes.get('Frame.008')
- suit_primary_roughness_remap_z_1.hide = True
- suit_primary_roughness_remap_z_1.label = 'Roughness Remap Z'
- suit_primary_roughness_remap_z_1.location = (20.0, -140.0)
- suit_primary_roughness_remap_z_1.name = 'Suit Primary Roughness Remap Z'
- suit_primary_roughness_remap_z_1.width = 156.03314208984375
-
- suit_primary_roughness_remap_w_1 = test_group.nodes.new('ShaderNodeValue')
- suit_primary_roughness_remap_w_1.parent = test_group.nodes.get('Frame.008')
- suit_primary_roughness_remap_w_1.hide = True
- suit_primary_roughness_remap_w_1.label = 'Roughness Remap W'
- suit_primary_roughness_remap_w_1.location = (20.0, -180.0)
- suit_primary_roughness_remap_w_1.name = 'Suit Primary Roughness Remap W'
- suit_primary_roughness_remap_w_1.width = 156.03314208984375
-
- suit_primary_wear_remap_x_1 = test_group.nodes.new('ShaderNodeValue')
- suit_primary_wear_remap_x_1.parent = test_group.nodes.get('Frame.008')
- suit_primary_wear_remap_x_1.hide = True
- suit_primary_wear_remap_x_1.label = 'Wear Remap X'
- suit_primary_wear_remap_x_1.location = (20.0, -260.0)
- suit_primary_wear_remap_x_1.name = 'Suit Primary Wear Remap X'
- suit_primary_wear_remap_x_1.width = 156.46649169921875
-
- suit_primary_wear_remap_y_1 = test_group.nodes.new('ShaderNodeValue')
- suit_primary_wear_remap_y_1.parent = test_group.nodes.get('Frame.008')
- suit_primary_wear_remap_y_1.hide = True
- suit_primary_wear_remap_y_1.label = 'Wear Remap Y'
- suit_primary_wear_remap_y_1.location = (20.0, -300.0)
- suit_primary_wear_remap_y_1.name = 'Suit Primary Wear Remap Y'
- suit_primary_wear_remap_y_1.width = 155.599853515625
-
- suit_primary_wear_remap_z_1 = test_group.nodes.new('ShaderNodeValue')
- suit_primary_wear_remap_z_1.parent = test_group.nodes.get('Frame.008')
- suit_primary_wear_remap_z_1.hide = True
- suit_primary_wear_remap_z_1.label = 'Wear Remap Z'
- suit_primary_wear_remap_z_1.location = (20.0, -340.0)
- suit_primary_wear_remap_z_1.name = 'Suit Primary Wear Remap Z'
- suit_primary_wear_remap_z_1.width = 156.03314208984375
-
- suit_primary_wear_remap_w_1 = test_group.nodes.new('ShaderNodeValue')
- suit_primary_wear_remap_w_1.parent = test_group.nodes.get('Frame.008')
- suit_primary_wear_remap_w_1.hide = True
- suit_primary_wear_remap_w_1.label = 'Wear Remap W'
- suit_primary_wear_remap_w_1.location = (20.0, -380.0)
- suit_primary_wear_remap_w_1.name = 'Suit Primary Wear Remap W'
- suit_primary_wear_remap_w_1.width = 155.59979248046875
-
- worn_suit_primary_roughness_remap_x_1 = test_group.nodes.new('ShaderNodeValue')
- worn_suit_primary_roughness_remap_x_1.parent = test_group.nodes.get('Frame.009')
- worn_suit_primary_roughness_remap_x_1.hide = True
- worn_suit_primary_roughness_remap_x_1.label = 'Roughness Remap X'
- worn_suit_primary_roughness_remap_x_1.location = (20.0, -80.0)
- worn_suit_primary_roughness_remap_x_1.name = 'Worn Suit Primary Roughness Remap X'
- worn_suit_primary_roughness_remap_x_1.width = 156.03314208984375
-
- worn_suit_primary_roughness_remap_y_1 = test_group.nodes.new('ShaderNodeValue')
- worn_suit_primary_roughness_remap_y_1.parent = test_group.nodes.get('Frame.009')
- worn_suit_primary_roughness_remap_y_1.hide = True
- worn_suit_primary_roughness_remap_y_1.label = 'Roughness Remap Y'
- worn_suit_primary_roughness_remap_y_1.location = (20.0, -120.0)
- worn_suit_primary_roughness_remap_y_1.name = 'Worn Suit Primary Roughness Remap Y'
- worn_suit_primary_roughness_remap_y_1.width = 156.03314208984375
-
- worn_suit_primary_roughness_remap_z_1 = test_group.nodes.new('ShaderNodeValue')
- worn_suit_primary_roughness_remap_z_1.parent = test_group.nodes.get('Frame.009')
- worn_suit_primary_roughness_remap_z_1.hide = True
- worn_suit_primary_roughness_remap_z_1.label = 'Roughness Remap Z'
- worn_suit_primary_roughness_remap_z_1.location = (20.0, -160.0)
- worn_suit_primary_roughness_remap_z_1.name = 'Worn Suit Primary Roughness Remap Z'
- worn_suit_primary_roughness_remap_z_1.width = 156.03317260742188
-
- worn_suit_primary_roughness_remap_w_1 = test_group.nodes.new('ShaderNodeValue')
- worn_suit_primary_roughness_remap_w_1.parent = test_group.nodes.get('Frame.009')
- worn_suit_primary_roughness_remap_w_1.hide = True
- worn_suit_primary_roughness_remap_w_1.label = 'Roughness Remap W'
- worn_suit_primary_roughness_remap_w_1.location = (20.0, -200.0)
- worn_suit_primary_roughness_remap_w_1.name = 'Worn Suit Primary Roughness Remap W'
- worn_suit_primary_roughness_remap_w_1.width = 155.599853515625
-
- suit_secondary_roughness_remap_x_1 = test_group.nodes.new('ShaderNodeValue')
- suit_secondary_roughness_remap_x_1.parent = test_group.nodes.get('Frame.010')
- suit_secondary_roughness_remap_x_1.hide = True
- suit_secondary_roughness_remap_x_1.label = 'Roughness Remap X'
- suit_secondary_roughness_remap_x_1.location = (40.0, -80.0)
- suit_secondary_roughness_remap_x_1.name = 'Suit Secondary Roughness Remap X'
- suit_secondary_roughness_remap_x_1.width = 156.46649169921875
-
- suit_secondary_roughness_remap_y_1 = test_group.nodes.new('ShaderNodeValue')
- suit_secondary_roughness_remap_y_1.parent = test_group.nodes.get('Frame.010')
- suit_secondary_roughness_remap_y_1.hide = True
- suit_secondary_roughness_remap_y_1.label = 'Roughness Remap Y'
- suit_secondary_roughness_remap_y_1.location = (40.0, -120.0)
- suit_secondary_roughness_remap_y_1.name = 'Suit Secondary Roughness Remap Y'
- suit_secondary_roughness_remap_y_1.width = 156.89984130859375
-
- suit_secondary_roughness_remap_z_1 = test_group.nodes.new('ShaderNodeValue')
- suit_secondary_roughness_remap_z_1.parent = test_group.nodes.get('Frame.010')
- suit_secondary_roughness_remap_z_1.hide = True
- suit_secondary_roughness_remap_z_1.label = 'Roughness Remap Z'
- suit_secondary_roughness_remap_z_1.location = (40.0, -160.0)
- suit_secondary_roughness_remap_z_1.name = 'Suit Secondary Roughness Remap Z'
- suit_secondary_roughness_remap_z_1.width = 156.89984130859375
-
- suit_secondary_roughness_remap_w_1 = test_group.nodes.new('ShaderNodeValue')
- suit_secondary_roughness_remap_w_1.parent = test_group.nodes.get('Frame.010')
- suit_secondary_roughness_remap_w_1.hide = True
- suit_secondary_roughness_remap_w_1.label = 'Roughness Remap W'
- suit_secondary_roughness_remap_w_1.location = (40.0, -200.0)
- suit_secondary_roughness_remap_w_1.name = 'Suit Secondary Roughness Remap W'
- suit_secondary_roughness_remap_w_1.width = 155.599853515625
-
- suit_secondary_wear_remap_x_1 = test_group.nodes.new('ShaderNodeValue')
- suit_secondary_wear_remap_x_1.parent = test_group.nodes.get('Frame.010')
- suit_secondary_wear_remap_x_1.hide = True
- suit_secondary_wear_remap_x_1.label = 'Wear Remap X'
- suit_secondary_wear_remap_x_1.location = (40.0, -280.0)
- suit_secondary_wear_remap_x_1.name = 'Suit Secondary Wear Remap X'
- suit_secondary_wear_remap_x_1.width = 156.46649169921875
-
- suit_secondary_wear_remap_y_1 = test_group.nodes.new('ShaderNodeValue')
- suit_secondary_wear_remap_y_1.parent = test_group.nodes.get('Frame.010')
- suit_secondary_wear_remap_y_1.hide = True
- suit_secondary_wear_remap_y_1.label = 'Wear Remap Y'
- suit_secondary_wear_remap_y_1.location = (40.0, -320.0)
- suit_secondary_wear_remap_y_1.name = 'Suit Secondary Wear Remap Y'
- suit_secondary_wear_remap_y_1.width = 156.46649169921875
-
- suit_secondary_wear_remap_z_1 = test_group.nodes.new('ShaderNodeValue')
- suit_secondary_wear_remap_z_1.parent = test_group.nodes.get('Frame.010')
- suit_secondary_wear_remap_z_1.hide = True
- suit_secondary_wear_remap_z_1.label = 'Wear Remap Z'
- suit_secondary_wear_remap_z_1.location = (40.0, -360.0)
- suit_secondary_wear_remap_z_1.name = 'Suit Secondary Wear Remap Z'
- suit_secondary_wear_remap_z_1.width = 156.46646118164062
-
- suit_secondary_wear_remap_w_1 = test_group.nodes.new('ShaderNodeValue')
- suit_secondary_wear_remap_w_1.parent = test_group.nodes.get('Frame.010')
- suit_secondary_wear_remap_w_1.hide = True
- suit_secondary_wear_remap_w_1.label = 'Wear Remap W'
- suit_secondary_wear_remap_w_1.location = (40.0, -400.0)
- suit_secondary_wear_remap_w_1.name = 'Suit Secondary Wear Remap W'
- suit_secondary_wear_remap_w_1.width = 156.8997802734375
-
- worn_suit_secondary_roughness_remap_x_1 = test_group.nodes.new('ShaderNodeValue')
- worn_suit_secondary_roughness_remap_x_1.parent = test_group.nodes.get('Frame.011')
- worn_suit_secondary_roughness_remap_x_1.hide = True
- worn_suit_secondary_roughness_remap_x_1.label = 'Roughness Remap X'
- worn_suit_secondary_roughness_remap_x_1.location = (40.0, -80.0)
- worn_suit_secondary_roughness_remap_x_1.name = 'Worn Suit Secondary Roughness Remap X'
- worn_suit_secondary_roughness_remap_x_1.width = 156.466552734375
-
- worn_suit_secondary_roughness_remap_y_1 = test_group.nodes.new('ShaderNodeValue')
- worn_suit_secondary_roughness_remap_y_1.parent = test_group.nodes.get('Frame.011')
- worn_suit_secondary_roughness_remap_y_1.hide = True
- worn_suit_secondary_roughness_remap_y_1.label = 'Roughness Remap Y'
- worn_suit_secondary_roughness_remap_y_1.location = (40.0, -120.0)
- worn_suit_secondary_roughness_remap_y_1.name = 'Worn Suit Secondary Roughness Remap Y'
- worn_suit_secondary_roughness_remap_y_1.width = 156.46649169921875
-
- worn_suit_secondary_roughness_remap_z_1 = test_group.nodes.new('ShaderNodeValue')
- worn_suit_secondary_roughness_remap_z_1.parent = test_group.nodes.get('Frame.011')
- worn_suit_secondary_roughness_remap_z_1.hide = True
- worn_suit_secondary_roughness_remap_z_1.label = 'Roughness Remap Z'
- worn_suit_secondary_roughness_remap_z_1.location = (40.0, -160.0)
- worn_suit_secondary_roughness_remap_z_1.name = 'Worn Suit Secondary Roughness Remap Z'
- worn_suit_secondary_roughness_remap_z_1.width = 156.46649169921875
-
- worn_suit_secondary_roughness_remap_w_1 = test_group.nodes.new('ShaderNodeValue')
- worn_suit_secondary_roughness_remap_w_1.parent = test_group.nodes.get('Frame.011')
- worn_suit_secondary_roughness_remap_w_1.hide = True
- worn_suit_secondary_roughness_remap_w_1.label = 'Roughness Remap W'
- worn_suit_secondary_roughness_remap_w_1.location = (40.0, -200.0)
- worn_suit_secondary_roughness_remap_w_1.name = 'Worn Suit Secondary Roughness Remap W'
- worn_suit_secondary_roughness_remap_w_1.width = 156.46649169921875
-
- group_input_1 = test_group.nodes.new('NodeGroupInput')
- group_input_1.parent = test_group.nodes.get('Frame.012')
- group_input_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- group_input_1.location = (-240.0, 2840.0)
- group_input_1.name = 'Group Input'
- group_input_1.width = 140.0
-
- math_023_1 = test_group.nodes.new('ShaderNodeMath')
- math_023_1.parent = test_group.nodes.get('Frame.012')
- math_023_1.label = 'DO NOT TOUCH'
- math_023_1.location = (740.0, 3600.0)
- math_023_1.name = 'Math.023'
- math_023_1.operation = 'SUBTRACT'
- math_023_1.inputs[1].default_value = 3.0
-
- math_024_1 = test_group.nodes.new('ShaderNodeMath')
- math_024_1.parent = test_group.nodes.get('Frame.012')
- math_024_1.label = 'DO NOT TOUCH'
- math_024_1.location = (960.0, 3600.0)
- math_024_1.name = 'Math.024'
- math_024_1.operation = 'MULTIPLY'
- math_024_1.inputs[1].default_value = 0.333
-
- math_022_1 = test_group.nodes.new('ShaderNodeMath')
- math_022_1.parent = test_group.nodes.get('Frame.012')
- math_022_1.label = 'DO NOT TOUCH'
- math_022_1.location = (800.0, 3840.0)
- math_022_1.name = 'Math.022'
- math_022_1.operation = 'MULTIPLY'
- math_022_1.inputs[1].default_value = 0.333
-
- combine_rgb_1 = test_group.nodes.new('ShaderNodeCombineRGB')
- combine_rgb_1.parent = test_group.nodes.get('Frame.012')
- combine_rgb_1.label = 'DO NOT TOUCH'
- combine_rgb_1.location = (1300.0, 3700.0)
-
- math_021_1 = test_group.nodes.new('ShaderNodeMath')
- math_021_1.parent = test_group.nodes.get('Frame.012')
- math_021_1.label = 'DO NOT TOUCH'
- math_021_1.location = (500.0, 3700.0)
- math_021_1.name = 'Math.021'
- math_021_1.operation = 'FLOOR'
-
- mix_071_1 = test_group.nodes.new('ShaderNodeMixRGB')
- mix_071_1.parent = test_group.nodes.get('Frame.012')
- mix_071_1.label = 'DO NOT TOUCH'
- mix_071_1.location = (2320.0, 2500.0)
- mix_071_1.name = 'Mix.071'
-
- mix_1 = test_group.nodes.new('ShaderNodeMixRGB')
- mix_1.parent = test_group.nodes.get('Frame.012')
- mix_1.blend_type = 'MIX'
- mix_1.hide = True
- mix_1.label = 'DyeColorA'
- mix_1.location = (2453.43701171875, 919.050048828125)
- mix_1.name = 'Mix'
-
- mix_001_1 = test_group.nodes.new('ShaderNodeMixRGB')
- mix_001_1.parent = test_group.nodes.get('Frame.012')
- mix_001_1.blend_type = 'MIX'
- mix_001_1.hide = True
- mix_001_1.label = 'DyeColorA'
- mix_001_1.location = (2453.43701171875, 889.050048828125)
- mix_001_1.name = 'Mix.001'
-
- mix_002_1 = test_group.nodes.new('ShaderNodeMixRGB')
- mix_002_1.parent = test_group.nodes.get('Frame.012')
- mix_002_1.blend_type = 'MIX'
- mix_002_1.hide = True
- mix_002_1.label = 'DyeColorA'
- mix_002_1.location = (2453.43701171875, 859.050048828125)
- mix_002_1.name = 'Mix.002'
-
- mix_003_1 = test_group.nodes.new('ShaderNodeMixRGB')
- mix_003_1.parent = test_group.nodes.get('Frame.012')
- mix_003_1.blend_type = 'MIX'
- mix_003_1.hide = True
- mix_003_1.label = 'DyeColorA'
- mix_003_1.location = (2453.43701171875, 829.050048828125)
- mix_003_1.name = 'Mix.003'
-
- mix_004_1 = test_group.nodes.new('ShaderNodeMixRGB')
- mix_004_1.parent = test_group.nodes.get('Frame.012')
- mix_004_1.blend_type = 'MIX'
- mix_004_1.hide = True
- mix_004_1.label = 'DyeColorA'
- mix_004_1.location = (2452.10791015625, 799.050048828125)
- mix_004_1.name = 'Mix.004'
-
- reroute_154_1 = test_group.nodes.new('NodeReroute')
- reroute_154_1.parent = test_group.nodes.get('Frame.012')
- reroute_154_1.location = (2412.10791015625, 899.050048828125)
- reroute_154_1.name = 'Reroute.154'
-
- reroute_153_1 = test_group.nodes.new('NodeReroute')
- reroute_153_1.parent = test_group.nodes.get('Frame.012')
- reroute_153_1.location = (2412.10791015625, 879.050048828125)
- reroute_153_1.name = 'Reroute.153'
-
- reroute_155_1 = test_group.nodes.new('NodeReroute')
- reroute_155_1.parent = test_group.nodes.get('Frame.012')
- reroute_155_1.location = (2412.10791015625, 859.050048828125)
- reroute_155_1.name = 'Reroute.155'
-
- reroute_156_1 = test_group.nodes.new('NodeReroute')
- reroute_156_1.parent = test_group.nodes.get('Frame.012')
- reroute_156_1.location = (2412.10791015625, 839.050048828125)
- reroute_156_1.name = 'Reroute.156'
-
- reroute_157_1 = test_group.nodes.new('NodeReroute')
- reroute_157_1.parent = test_group.nodes.get('Frame.012')
- reroute_157_1.location = (2412.10791015625, 819.050048828125)
- reroute_157_1.name = 'Reroute.157'
-
- reroute_152_1 = test_group.nodes.new('NodeReroute')
- reroute_152_1.parent = test_group.nodes.get('Frame.012')
- reroute_152_1.location = (2412.10791015625, 799.050048828125)
- reroute_152_1.name = 'Reroute.152'
-
- reroute_206_1 = test_group.nodes.new('NodeReroute')
- reroute_206_1.parent = test_group.nodes.get('Frame.012')
- reroute_206_1.location = (2412.10791015625, 119.050048828125)
- reroute_206_1.name = 'Reroute.206'
-
- reroute_211_1 = test_group.nodes.new('NodeReroute')
- reroute_211_1.parent = test_group.nodes.get('Frame.012')
- reroute_211_1.location = (2412.10791015625, 99.050048828125)
- reroute_211_1.name = 'Reroute.211'
-
- reroute_207_1 = test_group.nodes.new('NodeReroute')
- reroute_207_1.parent = test_group.nodes.get('Frame.012')
- reroute_207_1.location = (2412.10791015625, 79.050048828125)
- reroute_207_1.name = 'Reroute.207'
-
- reroute_208_1 = test_group.nodes.new('NodeReroute')
- reroute_208_1.parent = test_group.nodes.get('Frame.012')
- reroute_208_1.location = (2412.10791015625, 59.050048828125)
- reroute_208_1.name = 'Reroute.208'
-
- reroute_209_1 = test_group.nodes.new('NodeReroute')
- reroute_209_1.parent = test_group.nodes.get('Frame.012')
- reroute_209_1.location = (2412.10791015625, 39.050048828125)
- reroute_209_1.name = 'Reroute.209'
-
- reroute_210_1 = test_group.nodes.new('NodeReroute')
- reroute_210_1.parent = test_group.nodes.get('Frame.012')
- reroute_210_1.location = (2412.10791015625, 19.050048828125)
- reroute_210_1.name = 'Reroute.210'
-
- reroute_229_1 = test_group.nodes.new('NodeReroute')
- reroute_229_1.parent = test_group.nodes.get('Frame.012')
- reroute_229_1.location = (2412.10791015625, -0.949951171875)
- reroute_229_1.name = 'Reroute.229'
-
- reroute_225_1 = test_group.nodes.new('NodeReroute')
- reroute_225_1.parent = test_group.nodes.get('Frame.012')
- reroute_225_1.location = (2412.10791015625, -20.949951171875)
- reroute_225_1.name = 'Reroute.225'
-
- reroute_226_1 = test_group.nodes.new('NodeReroute')
- reroute_226_1.parent = test_group.nodes.get('Frame.012')
- reroute_226_1.location = (2412.10791015625, -40.949951171875)
- reroute_226_1.name = 'Reroute.226'
-
- reroute_227_1 = test_group.nodes.new('NodeReroute')
- reroute_227_1.parent = test_group.nodes.get('Frame.012')
- reroute_227_1.location = (2412.10791015625, -60.949951171875)
- reroute_227_1.name = 'Reroute.227'
-
- reroute_224_1 = test_group.nodes.new('NodeReroute')
- reroute_224_1.parent = test_group.nodes.get('Frame.012')
- reroute_224_1.location = (2412.10791015625, -80.949951171875)
- reroute_224_1.name = 'Reroute.224'
-
- reroute_228_1 = test_group.nodes.new('NodeReroute')
- reroute_228_1.parent = test_group.nodes.get('Frame.012')
- reroute_228_1.location = (2412.10791015625, -100.949951171875)
- reroute_228_1.name = 'Reroute.228'
-
- reroute_245_1 = test_group.nodes.new('NodeReroute')
- reroute_245_1.parent = test_group.nodes.get('Frame.012')
- reroute_245_1.location = (2412.10791015625, -120.949951171875)
- reroute_245_1.name = 'Reroute.245'
-
- reroute_244_1 = test_group.nodes.new('NodeReroute')
- reroute_244_1.parent = test_group.nodes.get('Frame.012')
- reroute_244_1.location = (2412.10791015625, -140.949951171875)
- reroute_244_1.name = 'Reroute.244'
-
- reroute_243_1 = test_group.nodes.new('NodeReroute')
- reroute_243_1.parent = test_group.nodes.get('Frame.012')
- reroute_243_1.location = (2412.10791015625, -160.949951171875)
- reroute_243_1.name = 'Reroute.243'
-
- reroute_242_1 = test_group.nodes.new('NodeReroute')
- reroute_242_1.parent = test_group.nodes.get('Frame.012')
- reroute_242_1.location = (2412.10791015625, -180.949951171875)
- reroute_242_1.name = 'Reroute.242'
-
- reroute_246_1 = test_group.nodes.new('NodeReroute')
- reroute_246_1.parent = test_group.nodes.get('Frame.012')
- reroute_246_1.location = (2412.10791015625, -200.949951171875)
- reroute_246_1.name = 'Reroute.246'
-
- reroute_247_1 = test_group.nodes.new('NodeReroute')
- reroute_247_1.parent = test_group.nodes.get('Frame.012')
- reroute_247_1.location = (2412.10791015625, -220.949951171875)
- reroute_247_1.name = 'Reroute.247'
-
- reroute_307_1 = test_group.nodes.new('NodeReroute')
- reroute_307_1.parent = test_group.nodes.get('Frame.012')
- reroute_307_1.location = (2411.4072265625, 719.050048828125)
- reroute_307_1.name = 'Reroute.307'
-
- reroute_308_1 = test_group.nodes.new('NodeReroute')
- reroute_308_1.parent = test_group.nodes.get('Frame.012')
- reroute_308_1.location = (2411.4072265625, 699.050048828125)
- reroute_308_1.name = 'Reroute.308'
-
- mix_005_1 = test_group.nodes.new('ShaderNodeMixRGB')
- mix_005_1.parent = test_group.nodes.get('Frame.012')
- mix_005_1.blend_type = 'MIX'
- mix_005_1.hide = True
- mix_005_1.label = 'DyeColorB'
- mix_005_1.location = (2453.43701171875, 739.050048828125)
- mix_005_1.name = 'Mix.005'
-
- reroute_309_1 = test_group.nodes.new('NodeReroute')
- reroute_309_1.parent = test_group.nodes.get('Frame.012')
- reroute_309_1.location = (2411.4072265625, 679.050048828125)
- reroute_309_1.name = 'Reroute.309'
-
- mix_006_1 = test_group.nodes.new('ShaderNodeMixRGB')
- mix_006_1.parent = test_group.nodes.get('Frame.012')
- mix_006_1.blend_type = 'MIX'
- mix_006_1.hide = True
- mix_006_1.label = 'DyeColorB'
- mix_006_1.location = (2453.43701171875, 709.050048828125)
- mix_006_1.name = 'Mix.006'
-
- reroute_310_1 = test_group.nodes.new('NodeReroute')
- reroute_310_1.parent = test_group.nodes.get('Frame.012')
- reroute_310_1.location = (2411.4072265625, 659.050048828125)
- reroute_310_1.name = 'Reroute.310'
-
- mix_007_1 = test_group.nodes.new('ShaderNodeMixRGB')
- mix_007_1.parent = test_group.nodes.get('Frame.012')
- mix_007_1.blend_type = 'MIX'
- mix_007_1.hide = True
- mix_007_1.label = 'DyeColorB'
- mix_007_1.location = (2453.43701171875, 679.050048828125)
- mix_007_1.name = 'Mix.007'
-
- reroute_311_1 = test_group.nodes.new('NodeReroute')
- reroute_311_1.parent = test_group.nodes.get('Frame.012')
- reroute_311_1.location = (2411.4072265625, 639.050048828125)
- reroute_311_1.name = 'Reroute.311'
-
- mix_008_1 = test_group.nodes.new('ShaderNodeMixRGB')
- mix_008_1.parent = test_group.nodes.get('Frame.012')
- mix_008_1.blend_type = 'MIX'
- mix_008_1.hide = True
- mix_008_1.label = 'DyeColorB'
- mix_008_1.location = (2453.43701171875, 649.050048828125)
- mix_008_1.name = 'Mix.008'
-
- reroute_312_1 = test_group.nodes.new('NodeReroute')
- reroute_312_1.parent = test_group.nodes.get('Frame.012')
- reroute_312_1.location = (2411.4072265625, 619.050048828125)
- reroute_312_1.name = 'Reroute.312'
-
- mix_009_1 = test_group.nodes.new('ShaderNodeMixRGB')
- mix_009_1.parent = test_group.nodes.get('Frame.012')
- mix_009_1.blend_type = 'MIX'
- mix_009_1.hide = True
- mix_009_1.label = 'DyeColorB'
- mix_009_1.location = (2453.43701171875, 619.050048828125)
- mix_009_1.name = 'Mix.009'
-
- reroute_335_1 = test_group.nodes.new('NodeReroute')
- reroute_335_1.parent = test_group.nodes.get('Frame.012')
- reroute_335_1.location = (2411.4072265625, 499.050048828125)
- reroute_335_1.name = 'Reroute.335'
-
- reroute_336_1 = test_group.nodes.new('NodeReroute')
- reroute_336_1.parent = test_group.nodes.get('Frame.012')
- reroute_336_1.location = (2411.4072265625, 359.050048828125)
- reroute_336_1.name = 'Reroute.336'
-
- mix_034_1 = test_group.nodes.new('ShaderNodeMixRGB')
- mix_034_1.parent = test_group.nodes.get('Frame.012')
- mix_034_1.blend_type = 'MIX'
- mix_034_1.hide = True
- mix_034_1.label = 'GlossRemap_C'
- mix_034_1.location = (2453.43701171875, -248.7454833984375)
- mix_034_1.name = 'Mix.034'
-
- mix_032_1 = test_group.nodes.new('ShaderNodeMixRGB')
- mix_032_1.parent = test_group.nodes.get('Frame.012')
- mix_032_1.blend_type = 'MIX'
- mix_032_1.hide = True
- mix_032_1.label = 'GlossRemap_C'
- mix_032_1.location = (2453.43701171875, -188.7454833984375)
- mix_032_1.name = 'Mix.032'
-
- mix_033_1 = test_group.nodes.new('ShaderNodeMixRGB')
- mix_033_1.parent = test_group.nodes.get('Frame.012')
- mix_033_1.blend_type = 'MIX'
- mix_033_1.hide = True
- mix_033_1.label = 'GlossRemap_C'
- mix_033_1.location = (2453.43701171875, -218.7454833984375)
- mix_033_1.name = 'Mix.033'
-
- mix_025_1 = test_group.nodes.new('ShaderNodeMixRGB')
- mix_025_1.parent = test_group.nodes.get('Frame.012')
- mix_025_1.blend_type = 'MIX'
- mix_025_1.hide = True
- mix_025_1.label = 'GlossRemap_B'
- mix_025_1.location = (2449.39697265625, 26.30078125)
- mix_025_1.name = 'Mix.025'
-
- mix_026_1 = test_group.nodes.new('ShaderNodeMixRGB')
- mix_026_1.parent = test_group.nodes.get('Frame.012')
- mix_026_1.blend_type = 'MIX'
- mix_026_1.hide = True
- mix_026_1.label = 'GlossRemap_B'
- mix_026_1.location = (2449.39697265625, -3.69921875)
- mix_026_1.name = 'Mix.026'
-
- mix_027_1 = test_group.nodes.new('ShaderNodeMixRGB')
- mix_027_1.parent = test_group.nodes.get('Frame.012')
- mix_027_1.blend_type = 'MIX'
- mix_027_1.hide = True
- mix_027_1.label = 'GlossRemap_B'
- mix_027_1.location = (2449.39697265625, -33.69921875)
- mix_027_1.name = 'Mix.027'
-
- mix_028_1 = test_group.nodes.new('ShaderNodeMixRGB')
- mix_028_1.parent = test_group.nodes.get('Frame.012')
- mix_028_1.blend_type = 'MIX'
- mix_028_1.hide = True
- mix_028_1.label = 'GlossRemap_B'
- mix_028_1.location = (2449.39697265625, -63.69921875)
- mix_028_1.name = 'Mix.028'
-
- mix_029_1 = test_group.nodes.new('ShaderNodeMixRGB')
- mix_029_1.parent = test_group.nodes.get('Frame.012')
- mix_029_1.blend_type = 'MIX'
- mix_029_1.hide = True
- mix_029_1.label = 'GlossRemap_B'
- mix_029_1.location = (2449.39697265625, -93.69921875)
- mix_029_1.name = 'Mix.029'
-
- mix_021_1 = test_group.nodes.new('ShaderNodeMixRGB')
- mix_021_1.parent = test_group.nodes.get('Frame.012')
- mix_021_1.blend_type = 'MIX'
- mix_021_1.hide = True
- mix_021_1.label = 'GlossRemap_A'
- mix_021_1.location = (2449.39697265625, 151.0975341796875)
- mix_021_1.name = 'Mix.021'
-
- mix_022_1 = test_group.nodes.new('ShaderNodeMixRGB')
- mix_022_1.parent = test_group.nodes.get('Frame.012')
- mix_022_1.blend_type = 'MIX'
- mix_022_1.hide = True
- mix_022_1.label = 'GlossRemap_A'
- mix_022_1.location = (2449.39697265625, 121.0975341796875)
- mix_022_1.name = 'Mix.022'
-
- mix_023_1 = test_group.nodes.new('ShaderNodeMixRGB')
- mix_023_1.parent = test_group.nodes.get('Frame.012')
- mix_023_1.blend_type = 'MIX'
- mix_023_1.hide = True
- mix_023_1.label = 'GlossRemap_A'
- mix_023_1.location = (2449.39697265625, 91.0975341796875)
- mix_023_1.name = 'Mix.023'
-
- mix_024_1 = test_group.nodes.new('ShaderNodeMixRGB')
- mix_024_1.parent = test_group.nodes.get('Frame.012')
- mix_024_1.blend_type = 'MIX'
- mix_024_1.hide = True
- mix_024_1.label = 'GlossRemap_A'
- mix_024_1.location = (2449.39697265625, 61.0975341796875)
- mix_024_1.name = 'Mix.024'
-
- mix_030_1 = test_group.nodes.new('ShaderNodeMixRGB')
- mix_030_1.parent = test_group.nodes.get('Frame.012')
- mix_030_1.blend_type = 'MIX'
- mix_030_1.hide = True
- mix_030_1.label = 'GlossRemap_C'
- mix_030_1.location = (2453.43701171875, -128.7454833984375)
- mix_030_1.name = 'Mix.030'
-
- mix_031_1 = test_group.nodes.new('ShaderNodeMixRGB')
- mix_031_1.parent = test_group.nodes.get('Frame.012')
- mix_031_1.blend_type = 'MIX'
- mix_031_1.hide = True
- mix_031_1.label = 'GlossRemap_C'
- mix_031_1.location = (2453.43701171875, -158.7454833984375)
- mix_031_1.name = 'Mix.031'
-
- mix_020_1 = test_group.nodes.new('ShaderNodeMixRGB')
- mix_020_1.parent = test_group.nodes.get('Frame.012')
- mix_020_1.blend_type = 'MIX'
- mix_020_1.hide = True
- mix_020_1.label = 'GlossRemap_A'
- mix_020_1.location = (2449.39697265625, 181.0975341796875)
- mix_020_1.name = 'Mix.020'
-
- reroute_381_1 = test_group.nodes.new('NodeReroute')
- reroute_381_1.parent = test_group.nodes.get('Frame.012')
- reroute_381_1.location = (2411.4072265625, 479.050048828125)
- reroute_381_1.name = 'Reroute.381'
-
- mix_010_1 = test_group.nodes.new('ShaderNodeMixRGB')
- mix_010_1.parent = test_group.nodes.get('Frame.012')
- mix_010_1.blend_type = 'MIX'
- mix_010_1.hide = True
- mix_010_1.label = 'Wear Remap_A'
- mix_010_1.location = (2448.38623046875, 540.4315185546875)
- mix_010_1.name = 'Mix.010'
-
- reroute_382_1 = test_group.nodes.new('NodeReroute')
- reroute_382_1.parent = test_group.nodes.get('Frame.012')
- reroute_382_1.location = (2411.4072265625, 459.050048828125)
- reroute_382_1.name = 'Reroute.382'
-
- mix_011_1 = test_group.nodes.new('ShaderNodeMixRGB')
- mix_011_1.parent = test_group.nodes.get('Frame.012')
- mix_011_1.blend_type = 'MIX'
- mix_011_1.hide = True
- mix_011_1.label = 'Wear Remap_A'
- mix_011_1.location = (2448.38623046875, 510.4315185546875)
- mix_011_1.name = 'Mix.011'
-
- reroute_383_1 = test_group.nodes.new('NodeReroute')
- reroute_383_1.parent = test_group.nodes.get('Frame.012')
- reroute_383_1.location = (2411.4072265625, 439.050048828125)
- reroute_383_1.name = 'Reroute.383'
-
- mix_012_1 = test_group.nodes.new('ShaderNodeMixRGB')
- mix_012_1.parent = test_group.nodes.get('Frame.012')
- mix_012_1.blend_type = 'MIX'
- mix_012_1.hide = True
- mix_012_1.label = 'Wear Remap_A'
- mix_012_1.location = (2448.38623046875, 480.4315185546875)
- mix_012_1.name = 'Mix.012'
-
- reroute_384_1 = test_group.nodes.new('NodeReroute')
- reroute_384_1.parent = test_group.nodes.get('Frame.012')
- reroute_384_1.location = (2411.4072265625, 419.050048828125)
- reroute_384_1.name = 'Reroute.384'
-
- mix_013_1 = test_group.nodes.new('ShaderNodeMixRGB')
- mix_013_1.parent = test_group.nodes.get('Frame.012')
- mix_013_1.blend_type = 'MIX'
- mix_013_1.hide = True
- mix_013_1.label = 'Wear Remap_A'
- mix_013_1.location = (2448.38623046875, 450.4315185546875)
- mix_013_1.name = 'Mix.013'
-
- reroute_385_1 = test_group.nodes.new('NodeReroute')
- reroute_385_1.parent = test_group.nodes.get('Frame.012')
- reroute_385_1.location = (2411.4072265625, 399.050048828125)
- reroute_385_1.name = 'Reroute.385'
-
- mix_014_1 = test_group.nodes.new('ShaderNodeMixRGB')
- mix_014_1.parent = test_group.nodes.get('Frame.012')
- mix_014_1.blend_type = 'MIX'
- mix_014_1.hide = True
- mix_014_1.label = 'Wear Remap_A'
- mix_014_1.location = (2448.38623046875, 420.4315185546875)
- mix_014_1.name = 'Mix.014'
-
- reroute_415_1 = test_group.nodes.new('NodeReroute')
- reroute_415_1.parent = test_group.nodes.get('Frame.012')
- reroute_415_1.location = (2411.4072265625, 339.050048828125)
- reroute_415_1.name = 'Reroute.415'
-
- mix_015_1 = test_group.nodes.new('ShaderNodeMixRGB')
- mix_015_1.parent = test_group.nodes.get('Frame.012')
- mix_015_1.blend_type = 'MIX'
- mix_015_1.hide = True
- mix_015_1.label = 'Wear Remap_B'
- mix_015_1.location = (2448.38623046875, 384.36602783203125)
- mix_015_1.name = 'Mix.015'
-
- reroute_416_1 = test_group.nodes.new('NodeReroute')
- reroute_416_1.parent = test_group.nodes.get('Frame.012')
- reroute_416_1.location = (2411.4072265625, 319.050048828125)
- reroute_416_1.name = 'Reroute.416'
-
- mix_016_1 = test_group.nodes.new('ShaderNodeMixRGB')
- mix_016_1.parent = test_group.nodes.get('Frame.012')
- mix_016_1.blend_type = 'MIX'
- mix_016_1.hide = True
- mix_016_1.label = 'Wear Remap_B'
- mix_016_1.location = (2448.38623046875, 354.36602783203125)
- mix_016_1.name = 'Mix.016'
-
- reroute_417_1 = test_group.nodes.new('NodeReroute')
- reroute_417_1.parent = test_group.nodes.get('Frame.012')
- reroute_417_1.location = (2411.4072265625, 299.050048828125)
- reroute_417_1.name = 'Reroute.417'
-
- mix_017_1 = test_group.nodes.new('ShaderNodeMixRGB')
- mix_017_1.parent = test_group.nodes.get('Frame.012')
- mix_017_1.blend_type = 'MIX'
- mix_017_1.hide = True
- mix_017_1.label = 'Wear Remap_B'
- mix_017_1.location = (2448.38623046875, 324.36602783203125)
- mix_017_1.name = 'Mix.017'
-
- reroute_418_1 = test_group.nodes.new('NodeReroute')
- reroute_418_1.parent = test_group.nodes.get('Frame.012')
- reroute_418_1.location = (2411.4072265625, 279.050048828125)
- reroute_418_1.name = 'Reroute.418'
-
- mix_018_1 = test_group.nodes.new('ShaderNodeMixRGB')
- mix_018_1.parent = test_group.nodes.get('Frame.012')
- mix_018_1.blend_type = 'MIX'
- mix_018_1.hide = True
- mix_018_1.label = 'Wear Remap_B'
- mix_018_1.location = (2448.38623046875, 294.36602783203125)
- mix_018_1.name = 'Mix.018'
-
- reroute_419_1 = test_group.nodes.new('NodeReroute')
- reroute_419_1.parent = test_group.nodes.get('Frame.012')
- reroute_419_1.location = (2411.4072265625, 259.050048828125)
- reroute_419_1.name = 'Reroute.419'
-
- mix_019_1 = test_group.nodes.new('ShaderNodeMixRGB')
- mix_019_1.parent = test_group.nodes.get('Frame.012')
- mix_019_1.blend_type = 'MIX'
- mix_019_1.hide = True
- mix_019_1.label = 'Wear Remap_B'
- mix_019_1.location = (2448.38623046875, 264.36602783203125)
- mix_019_1.name = 'Mix.019'
-
- reroute_432_1 = test_group.nodes.new('NodeReroute')
- reroute_432_1.parent = test_group.nodes.get('Frame.012')
- reroute_432_1.location = (2431.4072265625, -1273.06005859375)
- reroute_432_1.name = 'Reroute.432'
-
- reroute_433_1 = test_group.nodes.new('NodeReroute')
- reroute_433_1.parent = test_group.nodes.get('Frame.012')
- reroute_433_1.location = (2431.4072265625, -1293.06005859375)
- reroute_433_1.name = 'Reroute.433'
-
- mix_040_1 = test_group.nodes.new('ShaderNodeMixRGB')
- mix_040_1.parent = test_group.nodes.get('Frame.012')
- mix_040_1.blend_type = 'MIX'
- mix_040_1.hide = True
- mix_040_1.label = 'Detail Blends'
- mix_040_1.location = (2453.43701171875, -1263.19775390625)
- mix_040_1.name = 'Mix.040'
-
- reroute_434_1 = test_group.nodes.new('NodeReroute')
- reroute_434_1.parent = test_group.nodes.get('Frame.012')
- reroute_434_1.location = (2431.4072265625, -1313.06005859375)
- reroute_434_1.name = 'Reroute.434'
-
- mix_041_1 = test_group.nodes.new('ShaderNodeMixRGB')
- mix_041_1.parent = test_group.nodes.get('Frame.012')
- mix_041_1.blend_type = 'MIX'
- mix_041_1.hide = True
- mix_041_1.label = 'Detail Blends'
- mix_041_1.location = (2453.43701171875, -1293.19775390625)
- mix_041_1.name = 'Mix.041'
-
- reroute_435_1 = test_group.nodes.new('NodeReroute')
- reroute_435_1.parent = test_group.nodes.get('Frame.012')
- reroute_435_1.location = (2431.4072265625, -1333.06005859375)
- reroute_435_1.name = 'Reroute.435'
-
- mix_042_1 = test_group.nodes.new('ShaderNodeMixRGB')
- mix_042_1.parent = test_group.nodes.get('Frame.012')
- mix_042_1.blend_type = 'MIX'
- mix_042_1.hide = True
- mix_042_1.label = 'Detail Blends'
- mix_042_1.location = (2453.43701171875, -1323.19775390625)
- mix_042_1.name = 'Mix.042'
-
- reroute_436_1 = test_group.nodes.new('NodeReroute')
- reroute_436_1.parent = test_group.nodes.get('Frame.012')
- reroute_436_1.location = (2431.4072265625, -1353.06005859375)
- reroute_436_1.name = 'Reroute.436'
-
- mix_043_1 = test_group.nodes.new('ShaderNodeMixRGB')
- mix_043_1.parent = test_group.nodes.get('Frame.012')
- mix_043_1.blend_type = 'MIX'
- mix_043_1.hide = True
- mix_043_1.label = 'Detail Blends'
- mix_043_1.location = (2453.43701171875, -1353.19775390625)
- mix_043_1.name = 'Mix.043'
-
- reroute_437_1 = test_group.nodes.new('NodeReroute')
- reroute_437_1.parent = test_group.nodes.get('Frame.012')
- reroute_437_1.location = (2431.4072265625, -1373.06005859375)
- reroute_437_1.name = 'Reroute.437'
-
- mix_044_1 = test_group.nodes.new('ShaderNodeMixRGB')
- mix_044_1.parent = test_group.nodes.get('Frame.012')
- mix_044_1.blend_type = 'MIX'
- mix_044_1.hide = True
- mix_044_1.label = 'Detail Blends'
- mix_044_1.location = (2453.43701171875, -1383.19775390625)
- mix_044_1.name = 'Mix.044'
-
- reroute_466_1 = test_group.nodes.new('NodeReroute')
- reroute_466_1.parent = test_group.nodes.get('Frame.012')
- reroute_466_1.location = (2411.4072265625, -840.949951171875)
- reroute_466_1.name = 'Reroute.466'
-
- reroute_461_1 = test_group.nodes.new('NodeReroute')
- reroute_461_1.parent = test_group.nodes.get('Frame.012')
- reroute_461_1.location = (2411.4072265625, -860.949951171875)
- reroute_461_1.name = 'Reroute.461'
-
- mix_064_1 = test_group.nodes.new('ShaderNodeMixRGB')
- mix_064_1.parent = test_group.nodes.get('Frame.012')
- mix_064_1.blend_type = 'MIX'
- mix_064_1.hide = True
- mix_064_1.label = 'Detail Diffuse'
- mix_064_1.location = (2451.31884765625, -816.6573486328125)
- mix_064_1.name = 'Mix.064'
-
- reroute_462_1 = test_group.nodes.new('NodeReroute')
- reroute_462_1.parent = test_group.nodes.get('Frame.012')
- reroute_462_1.location = (2411.4072265625, -880.949951171875)
- reroute_462_1.name = 'Reroute.462'
-
- mix_060_1 = test_group.nodes.new('ShaderNodeMixRGB')
- mix_060_1.parent = test_group.nodes.get('Frame.012')
- mix_060_1.blend_type = 'MIX'
- mix_060_1.hide = True
- mix_060_1.label = 'Detail Diffuse'
- mix_060_1.location = (2451.31884765625, -846.6573486328125)
- mix_060_1.name = 'Mix.060'
-
- reroute_463_1 = test_group.nodes.new('NodeReroute')
- reroute_463_1.parent = test_group.nodes.get('Frame.012')
- reroute_463_1.location = (2411.4072265625, -900.949951171875)
- reroute_463_1.name = 'Reroute.463'
-
- mix_061_1 = test_group.nodes.new('ShaderNodeMixRGB')
- mix_061_1.parent = test_group.nodes.get('Frame.012')
- mix_061_1.blend_type = 'MIX'
- mix_061_1.hide = True
- mix_061_1.label = 'Detail Diffuse'
- mix_061_1.location = (2451.31884765625, -876.6573486328125)
- mix_061_1.name = 'Mix.061'
-
- reroute_464_1 = test_group.nodes.new('NodeReroute')
- reroute_464_1.parent = test_group.nodes.get('Frame.012')
- reroute_464_1.location = (2411.4072265625, -920.949951171875)
- reroute_464_1.name = 'Reroute.464'
-
- mix_062_1 = test_group.nodes.new('ShaderNodeMixRGB')
- mix_062_1.parent = test_group.nodes.get('Frame.012')
- mix_062_1.blend_type = 'MIX'
- mix_062_1.hide = True
- mix_062_1.label = 'Detail Diffuse'
- mix_062_1.location = (2451.31884765625, -906.6573486328125)
- mix_062_1.name = 'Mix.062'
-
- reroute_478_1 = test_group.nodes.new('NodeReroute')
- reroute_478_1.parent = test_group.nodes.get('Frame.012')
- reroute_478_1.location = (2411.4072265625, -960.949951171875)
- reroute_478_1.name = 'Reroute.478'
-
- reroute_473_1 = test_group.nodes.new('NodeReroute')
- reroute_473_1.parent = test_group.nodes.get('Frame.012')
- reroute_473_1.location = (2411.4072265625, -980.949951171875)
- reroute_473_1.name = 'Reroute.473'
-
- mix_035_1 = test_group.nodes.new('ShaderNodeMixRGB')
- mix_035_1.parent = test_group.nodes.get('Frame.012')
- mix_035_1.blend_type = 'MIX'
- mix_035_1.hide = True
- mix_035_1.label = 'TiledNormal'
- mix_035_1.location = (2453.43701171875, -969.553955078125)
- mix_035_1.name = 'Mix.035'
-
- reroute_474_1 = test_group.nodes.new('NodeReroute')
- reroute_474_1.parent = test_group.nodes.get('Frame.012')
- reroute_474_1.location = (2411.4072265625, -1000.949951171875)
- reroute_474_1.name = 'Reroute.474'
-
- mix_036_1 = test_group.nodes.new('ShaderNodeMixRGB')
- mix_036_1.parent = test_group.nodes.get('Frame.012')
- mix_036_1.blend_type = 'MIX'
- mix_036_1.hide = True
- mix_036_1.label = 'TiledNormal'
- mix_036_1.location = (2453.43701171875, -999.553955078125)
- mix_036_1.name = 'Mix.036'
-
- reroute_475_1 = test_group.nodes.new('NodeReroute')
- reroute_475_1.parent = test_group.nodes.get('Frame.012')
- reroute_475_1.location = (2411.4072265625, -1020.949951171875)
- reroute_475_1.name = 'Reroute.475'
-
- mix_037_1 = test_group.nodes.new('ShaderNodeMixRGB')
- mix_037_1.parent = test_group.nodes.get('Frame.012')
- mix_037_1.blend_type = 'MIX'
- mix_037_1.hide = True
- mix_037_1.label = 'TiledNormal'
- mix_037_1.location = (2453.43701171875, -1029.553955078125)
- mix_037_1.name = 'Mix.037'
-
- reroute_476_1 = test_group.nodes.new('NodeReroute')
- reroute_476_1.parent = test_group.nodes.get('Frame.012')
- reroute_476_1.location = (2411.4072265625, -1040.949951171875)
- reroute_476_1.name = 'Reroute.476'
-
- mix_038_1 = test_group.nodes.new('ShaderNodeMixRGB')
- mix_038_1.parent = test_group.nodes.get('Frame.012')
- mix_038_1.blend_type = 'MIX'
- mix_038_1.hide = True
- mix_038_1.label = 'TiledNormal'
- mix_038_1.location = (2453.43701171875, -1059.553955078125)
- mix_038_1.name = 'Mix.038'
-
- reroute_477_1 = test_group.nodes.new('NodeReroute')
- reroute_477_1.parent = test_group.nodes.get('Frame.012')
- reroute_477_1.location = (2411.4072265625, -1060.949951171875)
- reroute_477_1.name = 'Reroute.477'
-
- mix_039_1 = test_group.nodes.new('ShaderNodeMixRGB')
- mix_039_1.parent = test_group.nodes.get('Frame.012')
- mix_039_1.blend_type = 'MIX'
- mix_039_1.hide = True
- mix_039_1.label = 'TiledNormal'
- mix_039_1.location = (2453.43701171875, -1089.553955078125)
- mix_039_1.name = 'Mix.039'
-
- reroute_479_1 = test_group.nodes.new('NodeReroute')
- reroute_479_1.parent = test_group.nodes.get('Frame.012')
- reroute_479_1.location = (2411.4072265625, -2160.949951171875)
- reroute_479_1.name = 'Reroute.479'
-
- reroute_490_1 = test_group.nodes.new('NodeReroute')
- reroute_490_1.parent = test_group.nodes.get('Frame.012')
- reroute_490_1.location = (2411.4072265625, -2180.949951171875)
- reroute_490_1.name = 'Reroute.490'
-
- mix_045_1 = test_group.nodes.new('ShaderNodeMixRGB')
- mix_045_1.parent = test_group.nodes.get('Frame.012')
- mix_045_1.blend_type = 'MIX'
- mix_045_1.hide = True
- mix_045_1.label = 'Iridescence, Fuzz,. Transmission'
- mix_045_1.location = (2453.43701171875, -2149.204833984375)
- mix_045_1.name = 'Mix.045'
-
- reroute_491_1 = test_group.nodes.new('NodeReroute')
- reroute_491_1.parent = test_group.nodes.get('Frame.012')
- reroute_491_1.location = (2411.4072265625, -2200.949951171875)
- reroute_491_1.name = 'Reroute.491'
-
- mix_046_1 = test_group.nodes.new('ShaderNodeMixRGB')
- mix_046_1.parent = test_group.nodes.get('Frame.012')
- mix_046_1.blend_type = 'MIX'
- mix_046_1.hide = True
- mix_046_1.label = 'Iridescence, Fuzz,. Transmission'
- mix_046_1.location = (2453.43701171875, -2179.204833984375)
- mix_046_1.name = 'Mix.046'
-
- reroute_492_1 = test_group.nodes.new('NodeReroute')
- reroute_492_1.parent = test_group.nodes.get('Frame.012')
- reroute_492_1.location = (2411.4072265625, -2220.949951171875)
- reroute_492_1.name = 'Reroute.492'
-
- mix_047_1 = test_group.nodes.new('ShaderNodeMixRGB')
- mix_047_1.parent = test_group.nodes.get('Frame.012')
- mix_047_1.blend_type = 'MIX'
- mix_047_1.hide = True
- mix_047_1.label = 'Iridescence, Fuzz,. Transmission'
- mix_047_1.location = (2453.43701171875, -2209.204833984375)
- mix_047_1.name = 'Mix.047'
-
- reroute_493_1 = test_group.nodes.new('NodeReroute')
- reroute_493_1.parent = test_group.nodes.get('Frame.012')
- reroute_493_1.location = (2411.4072265625, -2240.949951171875)
- reroute_493_1.name = 'Reroute.493'
-
- mix_048_1 = test_group.nodes.new('ShaderNodeMixRGB')
- mix_048_1.parent = test_group.nodes.get('Frame.012')
- mix_048_1.blend_type = 'MIX'
- mix_048_1.hide = True
- mix_048_1.label = 'Iridescence, Fuzz,. Transmission'
- mix_048_1.location = (2453.43701171875, -2239.204833984375)
- mix_048_1.name = 'Mix.048'
-
- reroute_494_1 = test_group.nodes.new('NodeReroute')
- reroute_494_1.parent = test_group.nodes.get('Frame.012')
- reroute_494_1.location = (2411.4072265625, -2260.949951171875)
- reroute_494_1.name = 'Reroute.494'
-
- mix_049_1 = test_group.nodes.new('ShaderNodeMixRGB')
- mix_049_1.parent = test_group.nodes.get('Frame.012')
- mix_049_1.blend_type = 'MIX'
- mix_049_1.hide = True
- mix_049_1.label = 'Iridescence, Fuzz,. Transmission'
- mix_049_1.location = (2453.43701171875, -2269.204833984375)
- mix_049_1.name = 'Mix.049'
-
- reroute_509_1 = test_group.nodes.new('NodeReroute')
- reroute_509_1.parent = test_group.nodes.get('Frame.012')
- reroute_509_1.location = (2411.4072265625, -3760.949951171875)
- reroute_509_1.name = 'Reroute.509'
-
- reroute_508_1 = test_group.nodes.new('NodeReroute')
- reroute_508_1.parent = test_group.nodes.get('Frame.012')
- reroute_508_1.location = (2411.4072265625, -3780.949951171875)
- reroute_508_1.name = 'Reroute.508'
-
- mix_055_1 = test_group.nodes.new('ShaderNodeMixRGB')
- mix_055_1.parent = test_group.nodes.get('Frame.012')
- mix_055_1.blend_type = 'MIX'
- mix_055_1.hide = True
- mix_055_1.label = 'Worn Detail Blends'
- mix_055_1.location = (2454.43798828125, -3734.325927734375)
- mix_055_1.name = 'Mix.055'
-
- reroute_510_1 = test_group.nodes.new('NodeReroute')
- reroute_510_1.parent = test_group.nodes.get('Frame.012')
- reroute_510_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_510_1.hide = False
- reroute_510_1.location = (2411.4072265625, -3800.949951171875)
- reroute_510_1.mute = False
- reroute_510_1.name = 'Reroute.510'
- reroute_510_1.use_custom_color = False
- reroute_510_1.width = 16.0
-
- mix_056_1 = test_group.nodes.new('ShaderNodeMixRGB')
- mix_056_1.parent = test_group.nodes.get('Frame.012')
- mix_056_1.blend_type = 'MIX'
- mix_056_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- mix_056_1.hide = True
- mix_056_1.label = 'Worn Detail Blends'
- mix_056_1.location = (2454.43798828125, -3764.325927734375)
- mix_056_1.mute = False
- mix_056_1.name = 'Mix.056'
- mix_056_1.use_alpha = False
- mix_056_1.use_clamp = False
- mix_056_1.use_custom_color = False
- mix_056_1.width = 140.0
- mix_056_1.inputs[0].default_value = 0.5
- mix_056_1.inputs[1].default_value = (0.5, 0.5, 0.5, 1.0)
- mix_056_1.inputs[2].default_value = (0.42800000309944153, 1.0, 0.890175998210907, 1.0)
- mix_056_1.outputs[0].default_value = (0.0, 0.0, 0.0, 0.0)
-
- reroute_511_1 = test_group.nodes.new('NodeReroute')
- reroute_511_1.parent = test_group.nodes.get('Frame.012')
- reroute_511_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_511_1.hide = False
- reroute_511_1.location = (2411.4072265625, -3820.949951171875)
- reroute_511_1.mute = False
- reroute_511_1.name = 'Reroute.511'
- reroute_511_1.use_custom_color = False
- reroute_511_1.width = 16.0
-
- mix_057_1 = test_group.nodes.new('ShaderNodeMixRGB')
- mix_057_1.parent = test_group.nodes.get('Frame.012')
- mix_057_1.blend_type = 'MIX'
- mix_057_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- mix_057_1.hide = True
- mix_057_1.label = 'Worn Detail Blends'
- mix_057_1.location = (2454.43798828125, -3794.325927734375)
- mix_057_1.mute = False
- mix_057_1.name = 'Mix.057'
- mix_057_1.use_alpha = False
- mix_057_1.use_clamp = False
- mix_057_1.use_custom_color = False
- mix_057_1.width = 140.0
- mix_057_1.inputs[0].default_value = 0.5
- mix_057_1.inputs[1].default_value = (0.5, 0.5, 0.5, 1.0)
- mix_057_1.inputs[2].default_value = (0.0, 0.07869499921798706, 0.8942620158195496, 1.0)
- mix_057_1.outputs[0].default_value = (0.0, 0.0, 0.0, 0.0)
-
- reroute_512_1 = test_group.nodes.new('NodeReroute')
- reroute_512_1.parent = test_group.nodes.get('Frame.012')
- reroute_512_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_512_1.hide = False
- reroute_512_1.location = (2411.4072265625, -3840.949951171875)
- reroute_512_1.mute = False
- reroute_512_1.name = 'Reroute.512'
- reroute_512_1.use_custom_color = False
- reroute_512_1.width = 16.0
-
- mix_058_1 = test_group.nodes.new('ShaderNodeMixRGB')
- mix_058_1.parent = test_group.nodes.get('Frame.012')
- mix_058_1.blend_type = 'MIX'
- mix_058_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- mix_058_1.hide = True
- mix_058_1.label = 'Worn Detail Blends'
- mix_058_1.location = (2454.43798828125, -3824.325927734375)
- mix_058_1.mute = False
- mix_058_1.name = 'Mix.058'
- mix_058_1.use_alpha = False
- mix_058_1.use_clamp = False
- mix_058_1.use_custom_color = False
- mix_058_1.width = 140.0
- mix_058_1.inputs[0].default_value = 0.5
- mix_058_1.inputs[1].default_value = (0.5, 0.5, 0.5, 1.0)
- mix_058_1.inputs[2].default_value = (0.42800000309944153, 1.0, 0.890175998210907, 1.0)
- mix_058_1.outputs[0].default_value = (0.0, 0.0, 0.0, 0.0)
-
- reroute_513_1 = test_group.nodes.new('NodeReroute')
- reroute_513_1.parent = test_group.nodes.get('Frame.012')
- reroute_513_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_513_1.hide = False
- reroute_513_1.location = (2411.4072265625, -3860.949951171875)
- reroute_513_1.mute = False
- reroute_513_1.name = 'Reroute.513'
- reroute_513_1.use_custom_color = False
- reroute_513_1.width = 16.0
-
- mix_059_1 = test_group.nodes.new('ShaderNodeMixRGB')
- mix_059_1.parent = test_group.nodes.get('Frame.012')
- mix_059_1.blend_type = 'MIX'
- mix_059_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- mix_059_1.hide = True
- mix_059_1.label = 'Worn Detail Blends'
- mix_059_1.location = (2454.43798828125, -3854.325927734375)
- mix_059_1.mute = False
- mix_059_1.name = 'Mix.059'
- mix_059_1.use_alpha = False
- mix_059_1.use_clamp = False
- mix_059_1.use_custom_color = False
- mix_059_1.width = 140.0
- mix_059_1.inputs[0].default_value = 0.5
- mix_059_1.inputs[1].default_value = (0.5, 0.5, 0.5, 1.0)
- mix_059_1.inputs[2].default_value = (0.0, 0.07869499921798706, 0.8942620158195496, 1.0)
- mix_059_1.outputs[0].default_value = (0.0, 0.0, 0.0, 0.0)
-
- reroute_530_1 = test_group.nodes.new('NodeReroute')
- reroute_530_1.parent = test_group.nodes.get('Frame.012')
- reroute_530_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_530_1.hide = False
- reroute_530_1.location = (2411.4072265625, -5200.9501953125)
- reroute_530_1.mute = False
- reroute_530_1.name = 'Reroute.530'
- reroute_530_1.use_custom_color = False
- reroute_530_1.width = 16.0
-
- reroute_529_1 = test_group.nodes.new('NodeReroute')
- reroute_529_1.parent = test_group.nodes.get('Frame.012')
- reroute_529_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_529_1.hide = False
- reroute_529_1.location = (2411.4072265625, -5220.9501953125)
- reroute_529_1.mute = False
- reroute_529_1.name = 'Reroute.529'
- reroute_529_1.use_custom_color = False
- reroute_529_1.width = 16.0
-
- mix_050_1 = test_group.nodes.new('ShaderNodeMixRGB')
- mix_050_1.parent = test_group.nodes.get('Frame.012')
- mix_050_1.blend_type = 'MIX'
- mix_050_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- mix_050_1.hide = True
- mix_050_1.label = 'Emission'
- mix_050_1.location = (2453.43701171875, -5186.62109375)
- mix_050_1.mute = False
- mix_050_1.name = 'Mix.050'
- mix_050_1.use_alpha = False
- mix_050_1.use_clamp = False
- mix_050_1.use_custom_color = False
- mix_050_1.width = 140.0
- mix_050_1.inputs[0].default_value = 0.5
- mix_050_1.inputs[1].default_value = (0.07869499921798706, 0.07869499921798706, 0.8942620158195496, 1.0)
- mix_050_1.inputs[2].default_value = (0.42800000309944153, 1.0, 0.890175998210907, 1.0)
- mix_050_1.outputs[0].default_value = (0.0, 0.0, 0.0, 0.0)
-
- reroute_528_1 = test_group.nodes.new('NodeReroute')
- reroute_528_1.parent = test_group.nodes.get('Frame.012')
- reroute_528_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_528_1.hide = False
- reroute_528_1.location = (2411.4072265625, -5240.9501953125)
- reroute_528_1.mute = False
- reroute_528_1.name = 'Reroute.528'
- reroute_528_1.use_custom_color = False
- reroute_528_1.width = 16.0
-
- mix_051_1 = test_group.nodes.new('ShaderNodeMixRGB')
- mix_051_1.parent = test_group.nodes.get('Frame.012')
- mix_051_1.blend_type = 'MIX'
- mix_051_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- mix_051_1.hide = True
- mix_051_1.label = 'Emission'
- mix_051_1.location = (2453.43701171875, -5216.62109375)
- mix_051_1.mute = False
- mix_051_1.name = 'Mix.051'
- mix_051_1.use_alpha = False
- mix_051_1.use_clamp = False
- mix_051_1.use_custom_color = False
- mix_051_1.width = 140.0
- mix_051_1.inputs[0].default_value = 0.5
- mix_051_1.inputs[1].default_value = (0.5, 0.5, 0.5, 1.0)
- mix_051_1.inputs[2].default_value = (0.42800000309944153, 1.0, 0.890175998210907, 1.0)
- mix_051_1.outputs[0].default_value = (0.0, 0.0, 0.0, 0.0)
-
- reroute_527_1 = test_group.nodes.new('NodeReroute')
- reroute_527_1.parent = test_group.nodes.get('Frame.012')
- reroute_527_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_527_1.hide = False
- reroute_527_1.location = (2411.4072265625, -5260.9501953125)
- reroute_527_1.mute = False
- reroute_527_1.name = 'Reroute.527'
- reroute_527_1.use_custom_color = False
- reroute_527_1.width = 16.0
-
- mix_052_1 = test_group.nodes.new('ShaderNodeMixRGB')
- mix_052_1.parent = test_group.nodes.get('Frame.012')
- mix_052_1.blend_type = 'MIX'
- mix_052_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- mix_052_1.hide = True
- mix_052_1.label = 'Emission'
- mix_052_1.location = (2453.43701171875, -5246.62109375)
- mix_052_1.mute = False
- mix_052_1.name = 'Mix.052'
- mix_052_1.use_alpha = False
- mix_052_1.use_clamp = False
- mix_052_1.use_custom_color = False
- mix_052_1.width = 140.0
- mix_052_1.inputs[0].default_value = 0.5
- mix_052_1.inputs[1].default_value = (0.5, 0.5, 0.5, 1.0)
- mix_052_1.inputs[2].default_value = (0.0, 0.07869499921798706, 0.8942620158195496, 1.0)
- mix_052_1.outputs[0].default_value = (0.0, 0.0, 0.0, 0.0)
-
- reroute_526_1 = test_group.nodes.new('NodeReroute')
- reroute_526_1.parent = test_group.nodes.get('Frame.012')
- reroute_526_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_526_1.hide = False
- reroute_526_1.location = (2411.4072265625, -5280.9501953125)
- reroute_526_1.mute = False
- reroute_526_1.name = 'Reroute.526'
- reroute_526_1.use_custom_color = False
- reroute_526_1.width = 16.0
-
- mix_053_1 = test_group.nodes.new('ShaderNodeMixRGB')
- mix_053_1.parent = test_group.nodes.get('Frame.012')
- mix_053_1.blend_type = 'MIX'
- mix_053_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- mix_053_1.hide = True
- mix_053_1.label = 'Emission'
- mix_053_1.location = (2453.43701171875, -5276.62109375)
- mix_053_1.mute = False
- mix_053_1.name = 'Mix.053'
- mix_053_1.use_alpha = False
- mix_053_1.use_clamp = False
- mix_053_1.use_custom_color = False
- mix_053_1.width = 140.0
- mix_053_1.inputs[0].default_value = 0.5
- mix_053_1.inputs[1].default_value = (0.5, 0.5, 0.5, 1.0)
- mix_053_1.inputs[2].default_value = (0.42800000309944153, 1.0, 0.890175998210907, 1.0)
- mix_053_1.outputs[0].default_value = (0.0, 0.0, 0.0, 0.0)
-
- reroute_525_1 = test_group.nodes.new('NodeReroute')
- reroute_525_1.parent = test_group.nodes.get('Frame.012')
- reroute_525_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_525_1.hide = False
- reroute_525_1.location = (2411.4072265625, -5300.9501953125)
- reroute_525_1.mute = False
- reroute_525_1.name = 'Reroute.525'
- reroute_525_1.use_custom_color = False
- reroute_525_1.width = 16.0
-
- mix_054_1 = test_group.nodes.new('ShaderNodeMixRGB')
- mix_054_1.parent = test_group.nodes.get('Frame.012')
- mix_054_1.blend_type = 'MIX'
- mix_054_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- mix_054_1.hide = True
- mix_054_1.label = 'Emission'
- mix_054_1.location = (2453.43701171875, -5306.62109375)
- mix_054_1.mute = False
- mix_054_1.name = 'Mix.054'
- mix_054_1.use_alpha = False
- mix_054_1.use_clamp = False
- mix_054_1.use_custom_color = False
- mix_054_1.width = 140.0
- mix_054_1.inputs[0].default_value = 0.5
- mix_054_1.inputs[1].default_value = (0.5, 0.5, 0.5, 1.0)
- mix_054_1.inputs[2].default_value = (0.0, 0.07869499921798706, 0.8942620158195496, 1.0)
- mix_054_1.outputs[0].default_value = (0.0, 0.0, 0.0, 0.0)
-
- mix_063_1 = test_group.nodes.new('ShaderNodeMixRGB')
- mix_063_1.parent = test_group.nodes.get('Frame.012')
- mix_063_1.blend_type = 'MIX'
- mix_063_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- mix_063_1.hide = True
- mix_063_1.label = 'Detail Diffuse'
- mix_063_1.location = (2451.31884765625, -936.657470703125)
- mix_063_1.mute = False
- mix_063_1.name = 'Mix.063'
- mix_063_1.use_alpha = False
- mix_063_1.use_clamp = False
- mix_063_1.use_custom_color = False
- mix_063_1.width = 140.0
- mix_063_1.inputs[0].default_value = 0.5
- mix_063_1.inputs[1].default_value = (0.5, 0.5, 0.5, 1.0)
- mix_063_1.inputs[2].default_value = (0.0, 0.07869499921798706, 0.8942620158195496, 1.0)
- mix_063_1.outputs[0].default_value = (0.0, 0.0, 0.0, 0.0)
-
- reroute_465_1 = test_group.nodes.new('NodeReroute')
- reroute_465_1.parent = test_group.nodes.get('Frame.012')
- reroute_465_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_465_1.hide = False
- reroute_465_1.location = (2411.4072265625, -940.949951171875)
- reroute_465_1.mute = False
- reroute_465_1.name = 'Reroute.465'
- reroute_465_1.use_custom_color = False
- reroute_465_1.width = 16.0
-
- reroute_518_1 = test_group.nodes.new('NodeReroute')
- reroute_518_1.parent = test_group.nodes.get('Frame.012')
- reroute_518_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_518_1.hide = False
- reroute_518_1.label = 'DO NOT TOUCH'
- reroute_518_1.location = (-1148.5927734375, -5300.9501953125)
- reroute_518_1.mute = False
- reroute_518_1.name = 'Reroute.518'
- reroute_518_1.use_custom_color = False
- reroute_518_1.width = 16.0
-
- reroute_523_1 = test_group.nodes.new('NodeReroute')
- reroute_523_1.parent = test_group.nodes.get('Frame.012')
- reroute_523_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_523_1.hide = False
- reroute_523_1.label = 'DO NOT TOUCH'
- reroute_523_1.location = (-1148.5927734375, -4700.9501953125)
- reroute_523_1.mute = False
- reroute_523_1.name = 'Reroute.523'
- reroute_523_1.use_custom_color = False
- reroute_523_1.width = 16.0
-
- reroute_148_1 = test_group.nodes.new('NodeReroute')
- reroute_148_1.parent = test_group.nodes.get('Frame.012')
- reroute_148_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_148_1.hide = False
- reroute_148_1.label = 'DO NOT TOUCH'
- reroute_148_1.location = (1852.10791015625, -2740.949951171875)
- reroute_148_1.mute = False
- reroute_148_1.name = 'Reroute.148'
- reroute_148_1.use_custom_color = False
- reroute_148_1.width = 16.0
-
- reroute_150_1 = test_group.nodes.new('NodeReroute')
- reroute_150_1.parent = test_group.nodes.get('Frame.012')
- reroute_150_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_150_1.hide = False
- reroute_150_1.label = 'DO NOT TOUCH'
- reroute_150_1.location = (1832.10791015625, -3980.949951171875)
- reroute_150_1.mute = False
- reroute_150_1.name = 'Reroute.150'
- reroute_150_1.use_custom_color = False
- reroute_150_1.width = 16.0
-
- reroute_146_1 = test_group.nodes.new('NodeReroute')
- reroute_146_1.parent = test_group.nodes.get('Frame.012')
- reroute_146_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_146_1.hide = False
- reroute_146_1.label = 'DO NOT TOUCH'
- reroute_146_1.location = (1872.10791015625, -1480.949951171875)
- reroute_146_1.mute = False
- reroute_146_1.name = 'Reroute.146'
- reroute_146_1.use_custom_color = False
- reroute_146_1.width = 16.0
-
- reroute_144_1 = test_group.nodes.new('NodeReroute')
- reroute_144_1.parent = test_group.nodes.get('Frame.012')
- reroute_144_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_144_1.hide = False
- reroute_144_1.label = 'DO NOT TOUCH'
- reroute_144_1.location = (1892.10791015625, -260.949951171875)
- reroute_144_1.mute = False
- reroute_144_1.name = 'Reroute.144'
- reroute_144_1.use_custom_color = False
- reroute_144_1.width = 16.0
-
- reroute_140_1 = test_group.nodes.new('NodeReroute')
- reroute_140_1.parent = test_group.nodes.get('Frame.012')
- reroute_140_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_140_1.hide = False
- reroute_140_1.label = 'DO NOT TOUCH'
- reroute_140_1.location = (1932.10791015625, 2219.050048828125)
- reroute_140_1.mute = False
- reroute_140_1.name = 'Reroute.140'
- reroute_140_1.use_custom_color = False
- reroute_140_1.width = 16.0
-
- reroute_143_1 = test_group.nodes.new('NodeReroute')
- reroute_143_1.parent = test_group.nodes.get('Frame.012')
- reroute_143_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_143_1.hide = False
- reroute_143_1.label = 'DO NOT TOUCH'
- reroute_143_1.location = (1912.10791015625, 979.050048828125)
- reroute_143_1.mute = False
- reroute_143_1.name = 'Reroute.143'
- reroute_143_1.use_custom_color = False
- reroute_143_1.width = 16.0
-
- reroute_141_1 = test_group.nodes.new('NodeReroute')
- reroute_141_1.parent = test_group.nodes.get('Frame.012')
- reroute_141_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_141_1.hide = False
- reroute_141_1.label = 'DO NOT TOUCH'
- reroute_141_1.location = (1932.10791015625, 899.050048828125)
- reroute_141_1.mute = False
- reroute_141_1.name = 'Reroute.141'
- reroute_141_1.use_custom_color = False
- reroute_141_1.width = 16.0
-
- reroute_142_1 = test_group.nodes.new('NodeReroute')
- reroute_142_1.parent = test_group.nodes.get('Frame.012')
- reroute_142_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_142_1.hide = False
- reroute_142_1.label = 'DO NOT TOUCH'
- reroute_142_1.location = (1912.10791015625, 879.050048828125)
- reroute_142_1.mute = False
- reroute_142_1.name = 'Reroute.142'
- reroute_142_1.use_custom_color = False
- reroute_142_1.width = 16.0
-
- reroute_145_1 = test_group.nodes.new('NodeReroute')
- reroute_145_1.parent = test_group.nodes.get('Frame.012')
- reroute_145_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_145_1.hide = False
- reroute_145_1.label = 'DO NOT TOUCH'
- reroute_145_1.location = (1892.10791015625, 859.050048828125)
- reroute_145_1.mute = False
- reroute_145_1.name = 'Reroute.145'
- reroute_145_1.use_custom_color = False
- reroute_145_1.width = 16.0
-
- reroute_147_1 = test_group.nodes.new('NodeReroute')
- reroute_147_1.parent = test_group.nodes.get('Frame.012')
- reroute_147_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_147_1.hide = False
- reroute_147_1.label = 'DO NOT TOUCH'
- reroute_147_1.location = (1872.10791015625, 839.050048828125)
- reroute_147_1.mute = False
- reroute_147_1.name = 'Reroute.147'
- reroute_147_1.use_custom_color = False
- reroute_147_1.width = 16.0
-
- reroute_149_1 = test_group.nodes.new('NodeReroute')
- reroute_149_1.parent = test_group.nodes.get('Frame.012')
- reroute_149_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_149_1.hide = False
- reroute_149_1.label = 'DO NOT TOUCH'
- reroute_149_1.location = (1852.10791015625, 819.050048828125)
- reroute_149_1.mute = False
- reroute_149_1.name = 'Reroute.149'
- reroute_149_1.use_custom_color = False
- reroute_149_1.width = 16.0
-
- reroute_151_1 = test_group.nodes.new('NodeReroute')
- reroute_151_1.parent = test_group.nodes.get('Frame.012')
- reroute_151_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_151_1.hide = False
- reroute_151_1.label = 'DO NOT TOUCH'
- reroute_151_1.location = (1832.10791015625, 799.050048828125)
- reroute_151_1.mute = False
- reroute_151_1.name = 'Reroute.151'
- reroute_151_1.use_custom_color = False
- reroute_151_1.width = 16.0
-
- reroute_294_1 = test_group.nodes.new('NodeReroute')
- reroute_294_1.parent = test_group.nodes.get('Frame.012')
- reroute_294_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_294_1.hide = False
- reroute_294_1.label = 'DO NOT TOUCH'
- reroute_294_1.location = (1811.4072265625, 719.050048828125)
- reroute_294_1.mute = False
- reroute_294_1.name = 'Reroute.294'
- reroute_294_1.use_custom_color = False
- reroute_294_1.width = 16.0
-
- reroute_303_1 = test_group.nodes.new('NodeReroute')
- reroute_303_1.parent = test_group.nodes.get('Frame.012')
- reroute_303_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_303_1.hide = False
- reroute_303_1.label = 'DO NOT TOUCH'
- reroute_303_1.location = (1771.4072265625, 679.050048828125)
- reroute_303_1.mute = False
- reroute_303_1.name = 'Reroute.303'
- reroute_303_1.use_custom_color = False
- reroute_303_1.width = 16.0
-
- reroute_304_1 = test_group.nodes.new('NodeReroute')
- reroute_304_1.parent = test_group.nodes.get('Frame.012')
- reroute_304_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_304_1.hide = False
- reroute_304_1.label = 'DO NOT TOUCH'
- reroute_304_1.location = (1751.4072265625, 659.050048828125)
- reroute_304_1.mute = False
- reroute_304_1.name = 'Reroute.304'
- reroute_304_1.use_custom_color = False
- reroute_304_1.width = 16.0
-
- reroute_305_1 = test_group.nodes.new('NodeReroute')
- reroute_305_1.parent = test_group.nodes.get('Frame.012')
- reroute_305_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_305_1.hide = False
- reroute_305_1.label = 'DO NOT TOUCH'
- reroute_305_1.location = (1731.4072265625, 639.050048828125)
- reroute_305_1.mute = False
- reroute_305_1.name = 'Reroute.305'
- reroute_305_1.use_custom_color = False
- reroute_305_1.width = 16.0
-
- reroute_306_1 = test_group.nodes.new('NodeReroute')
- reroute_306_1.parent = test_group.nodes.get('Frame.012')
- reroute_306_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_306_1.hide = False
- reroute_306_1.label = 'DO NOT TOUCH'
- reroute_306_1.location = (1711.4072265625, 619.050048828125)
- reroute_306_1.mute = False
- reroute_306_1.name = 'Reroute.306'
- reroute_306_1.use_custom_color = False
- reroute_306_1.width = 16.0
-
- reroute_313_1 = test_group.nodes.new('NodeReroute')
- reroute_313_1.parent = test_group.nodes.get('Frame.012')
- reroute_313_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_313_1.hide = False
- reroute_313_1.label = 'DO NOT TOUCH'
- reroute_313_1.location = (1811.4072265625, 1399.050048828125)
- reroute_313_1.mute = False
- reroute_313_1.name = 'Reroute.313'
- reroute_313_1.use_custom_color = False
- reroute_313_1.width = 16.0
-
- reroute_314_1 = test_group.nodes.new('NodeReroute')
- reroute_314_1.parent = test_group.nodes.get('Frame.012')
- reroute_314_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_314_1.hide = False
- reroute_314_1.label = 'DO NOT TOUCH'
- reroute_314_1.location = (1791.4072265625, 159.050048828125)
- reroute_314_1.mute = False
- reroute_314_1.name = 'Reroute.314'
- reroute_314_1.use_custom_color = False
- reroute_314_1.width = 16.0
-
- reroute_297_1 = test_group.nodes.new('NodeReroute')
- reroute_297_1.parent = test_group.nodes.get('Frame.012')
- reroute_297_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_297_1.hide = False
- reroute_297_1.label = 'DO NOT TOUCH'
- reroute_297_1.location = (1791.4072265625, 699.050048828125)
- reroute_297_1.mute = False
- reroute_297_1.name = 'Reroute.297'
- reroute_297_1.use_custom_color = False
- reroute_297_1.width = 16.0
-
- reroute_315_1 = test_group.nodes.new('NodeReroute')
- reroute_315_1.parent = test_group.nodes.get('Frame.012')
- reroute_315_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_315_1.hide = False
- reroute_315_1.label = 'DO NOT TOUCH'
- reroute_315_1.location = (1771.4072265625, -1080.949951171875)
- reroute_315_1.mute = False
- reroute_315_1.name = 'Reroute.315'
- reroute_315_1.use_custom_color = False
- reroute_315_1.width = 16.0
-
- reroute_316_1 = test_group.nodes.new('NodeReroute')
- reroute_316_1.parent = test_group.nodes.get('Frame.012')
- reroute_316_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_316_1.hide = False
- reroute_316_1.label = 'DO NOT TOUCH'
- reroute_316_1.location = (1751.4072265625, -2320.949951171875)
- reroute_316_1.mute = False
- reroute_316_1.name = 'Reroute.316'
- reroute_316_1.use_custom_color = False
- reroute_316_1.width = 16.0
-
- reroute_317_1 = test_group.nodes.new('NodeReroute')
- reroute_317_1.parent = test_group.nodes.get('Frame.012')
- reroute_317_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_317_1.hide = False
- reroute_317_1.label = 'DO NOT TOUCH'
- reroute_317_1.location = (1731.4072265625, -3560.949951171875)
- reroute_317_1.mute = False
- reroute_317_1.name = 'Reroute.317'
- reroute_317_1.use_custom_color = False
- reroute_317_1.width = 16.0
-
- reroute_280_1 = test_group.nodes.new('NodeReroute')
- reroute_280_1.parent = test_group.nodes.get('Frame.012')
- reroute_280_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_280_1.hide = False
- reroute_280_1.label = 'DO NOT TOUCH'
- reroute_280_1.location = (1091.4072265625, -4840.9501953125)
- reroute_280_1.mute = False
- reroute_280_1.name = 'Reroute.280'
- reroute_280_1.use_custom_color = False
- reroute_280_1.width = 16.0
-
- reroute_281_1 = test_group.nodes.new('NodeReroute')
- reroute_281_1.parent = test_group.nodes.get('Frame.012')
- reroute_281_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_281_1.hide = False
- reroute_281_1.label = 'DO NOT TOUCH'
- reroute_281_1.location = (1111.4072265625, -4880.9501953125)
- reroute_281_1.mute = False
- reroute_281_1.name = 'Reroute.281'
- reroute_281_1.use_custom_color = False
- reroute_281_1.width = 16.0
-
- reroute_282_1 = test_group.nodes.new('NodeReroute')
- reroute_282_1.parent = test_group.nodes.get('Frame.012')
- reroute_282_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_282_1.hide = False
- reroute_282_1.label = 'DO NOT TOUCH'
- reroute_282_1.location = (1131.4072265625, -4920.9501953125)
- reroute_282_1.mute = False
- reroute_282_1.name = 'Reroute.282'
- reroute_282_1.use_custom_color = False
- reroute_282_1.width = 16.0
-
- reroute_283_1 = test_group.nodes.new('NodeReroute')
- reroute_283_1.parent = test_group.nodes.get('Frame.012')
- reroute_283_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_283_1.hide = False
- reroute_283_1.label = 'DO NOT TOUCH'
- reroute_283_1.location = (1151.4072265625, -4960.9501953125)
- reroute_283_1.mute = False
- reroute_283_1.name = 'Reroute.283'
- reroute_283_1.use_custom_color = False
- reroute_283_1.width = 16.0
-
- reroute_204_1 = test_group.nodes.new('NodeReroute')
- reroute_204_1.parent = test_group.nodes.get('Frame.012')
- reroute_204_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_204_1.hide = False
- reroute_204_1.label = 'DO NOT TOUCH'
- reroute_204_1.location = (1611.4072265625, -2800.949951171875)
- reroute_204_1.mute = False
- reroute_204_1.name = 'Reroute.204'
- reroute_204_1.use_custom_color = False
- reroute_204_1.width = 16.0
-
- reroute_218_1 = test_group.nodes.new('NodeReroute')
- reroute_218_1.parent = test_group.nodes.get('Frame.012')
- reroute_218_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_218_1.hide = False
- reroute_218_1.label = 'DO NOT TOUCH'
- reroute_218_1.location = (1491.4072265625, -2920.949951171875)
- reroute_218_1.mute = False
- reroute_218_1.name = 'Reroute.218'
- reroute_218_1.use_custom_color = False
- reroute_218_1.width = 16.0
-
- reroute_237_1 = test_group.nodes.new('NodeReroute')
- reroute_237_1.parent = test_group.nodes.get('Frame.012')
- reroute_237_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_237_1.hide = False
- reroute_237_1.label = 'DO NOT TOUCH'
- reroute_237_1.location = (1371.4072265625, -3040.949951171875)
- reroute_237_1.mute = False
- reroute_237_1.name = 'Reroute.237'
- reroute_237_1.use_custom_color = False
- reroute_237_1.width = 16.0
-
- reroute_205_1 = test_group.nodes.new('NodeReroute')
- reroute_205_1.parent = test_group.nodes.get('Frame.012')
- reroute_205_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_205_1.hide = False
- reroute_205_1.label = 'DO NOT TOUCH'
- reroute_205_1.location = (1591.4072265625, -4040.949951171875)
- reroute_205_1.mute = False
- reroute_205_1.name = 'Reroute.205'
- reroute_205_1.use_custom_color = False
- reroute_205_1.width = 16.0
-
- reroute_223_1 = test_group.nodes.new('NodeReroute')
- reroute_223_1.parent = test_group.nodes.get('Frame.012')
- reroute_223_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_223_1.hide = False
- reroute_223_1.label = 'DO NOT TOUCH'
- reroute_223_1.location = (1471.4072265625, -4160.9501953125)
- reroute_223_1.mute = False
- reroute_223_1.name = 'Reroute.223'
- reroute_223_1.use_custom_color = False
- reroute_223_1.width = 16.0
-
- reroute_236_1 = test_group.nodes.new('NodeReroute')
- reroute_236_1.parent = test_group.nodes.get('Frame.012')
- reroute_236_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_236_1.hide = False
- reroute_236_1.label = 'DO NOT TOUCH'
- reroute_236_1.location = (1351.4072265625, -4280.9501953125)
- reroute_236_1.mute = False
- reroute_236_1.name = 'Reroute.236'
- reroute_236_1.use_custom_color = False
- reroute_236_1.width = 16.0
-
- reroute_273_1 = test_group.nodes.new('NodeReroute')
- reroute_273_1.parent = test_group.nodes.get('Frame.012')
- reroute_273_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_273_1.hide = False
- reroute_273_1.label = 'DO NOT TOUCH'
- reroute_273_1.location = (1091.4072265625, -3600.949951171875)
- reroute_273_1.mute = False
- reroute_273_1.name = 'Reroute.273'
- reroute_273_1.use_custom_color = False
- reroute_273_1.width = 16.0
-
- reroute_274_1 = test_group.nodes.new('NodeReroute')
- reroute_274_1.parent = test_group.nodes.get('Frame.012')
- reroute_274_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_274_1.hide = False
- reroute_274_1.label = 'DO NOT TOUCH'
- reroute_274_1.location = (1111.4072265625, -3640.949951171875)
- reroute_274_1.mute = False
- reroute_274_1.name = 'Reroute.274'
- reroute_274_1.use_custom_color = False
- reroute_274_1.width = 16.0
-
- reroute_275_1 = test_group.nodes.new('NodeReroute')
- reroute_275_1.parent = test_group.nodes.get('Frame.012')
- reroute_275_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_275_1.hide = False
- reroute_275_1.label = 'DO NOT TOUCH'
- reroute_275_1.location = (1131.4072265625, -3680.949951171875)
- reroute_275_1.mute = False
- reroute_275_1.name = 'Reroute.275'
- reroute_275_1.use_custom_color = False
- reroute_275_1.width = 16.0
-
- reroute_276_1 = test_group.nodes.new('NodeReroute')
- reroute_276_1.parent = test_group.nodes.get('Frame.012')
- reroute_276_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_276_1.hide = False
- reroute_276_1.label = 'DO NOT TOUCH'
- reroute_276_1.location = (1151.4072265625, -3720.949951171875)
- reroute_276_1.mute = False
- reroute_276_1.name = 'Reroute.276'
- reroute_276_1.use_custom_color = False
- reroute_276_1.width = 16.0
-
- reroute_284_1 = test_group.nodes.new('NodeReroute')
- reroute_284_1.parent = test_group.nodes.get('Frame.012')
- reroute_284_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_284_1.hide = False
- reroute_284_1.label = 'DO NOT TOUCH'
- reroute_284_1.location = (1151.4072265625, -4340.9501953125)
- reroute_284_1.mute = False
- reroute_284_1.name = 'Reroute.284'
- reroute_284_1.use_custom_color = False
- reroute_284_1.width = 16.0
-
- reroute_285_1 = test_group.nodes.new('NodeReroute')
- reroute_285_1.parent = test_group.nodes.get('Frame.012')
- reroute_285_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_285_1.hide = False
- reroute_285_1.label = 'DO NOT TOUCH'
- reroute_285_1.location = (1131.4072265625, -4320.9501953125)
- reroute_285_1.mute = False
- reroute_285_1.name = 'Reroute.285'
- reroute_285_1.use_custom_color = False
- reroute_285_1.width = 16.0
-
- reroute_286_1 = test_group.nodes.new('NodeReroute')
- reroute_286_1.parent = test_group.nodes.get('Frame.012')
- reroute_286_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_286_1.hide = False
- reroute_286_1.label = 'DO NOT TOUCH'
- reroute_286_1.location = (1111.4072265625, -4300.9501953125)
- reroute_286_1.mute = False
- reroute_286_1.name = 'Reroute.286'
- reroute_286_1.use_custom_color = False
- reroute_286_1.width = 16.0
-
- reroute_287_1 = test_group.nodes.new('NodeReroute')
- reroute_287_1.parent = test_group.nodes.get('Frame.012')
- reroute_287_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_287_1.hide = False
- reroute_287_1.label = 'DO NOT TOUCH'
- reroute_287_1.location = (1091.4072265625, -4220.9501953125)
- reroute_287_1.mute = False
- reroute_287_1.name = 'Reroute.287'
- reroute_287_1.use_custom_color = False
- reroute_287_1.width = 16.0
-
- reroute_269_1 = test_group.nodes.new('NodeReroute')
- reroute_269_1.parent = test_group.nodes.get('Frame.012')
- reroute_269_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_269_1.hide = False
- reroute_269_1.label = 'DO NOT TOUCH'
- reroute_269_1.location = (1111.4072265625, -2380.949951171875)
- reroute_269_1.mute = False
- reroute_269_1.name = 'Reroute.269'
- reroute_269_1.use_custom_color = False
- reroute_269_1.width = 16.0
-
- reroute_270_1 = test_group.nodes.new('NodeReroute')
- reroute_270_1.parent = test_group.nodes.get('Frame.012')
- reroute_270_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_270_1.hide = False
- reroute_270_1.label = 'DO NOT TOUCH'
- reroute_270_1.location = (1131.4072265625, -2420.949951171875)
- reroute_270_1.mute = False
- reroute_270_1.name = 'Reroute.270'
- reroute_270_1.use_custom_color = False
- reroute_270_1.width = 16.0
-
- reroute_271_1 = test_group.nodes.new('NodeReroute')
- reroute_271_1.parent = test_group.nodes.get('Frame.012')
- reroute_271_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_271_1.hide = False
- reroute_271_1.label = 'DO NOT TOUCH'
- reroute_271_1.location = (1151.4072265625, -2460.949951171875)
- reroute_271_1.mute = False
- reroute_271_1.name = 'Reroute.271'
- reroute_271_1.use_custom_color = False
- reroute_271_1.width = 16.0
-
- reroute_272_1 = test_group.nodes.new('NodeReroute')
- reroute_272_1.parent = test_group.nodes.get('Frame.012')
- reroute_272_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_272_1.hide = False
- reroute_272_1.label = 'DO NOT TOUCH'
- reroute_272_1.location = (1151.4072265625, -3100.949951171875)
- reroute_272_1.mute = False
- reroute_272_1.name = 'Reroute.272'
- reroute_272_1.use_custom_color = False
- reroute_272_1.width = 16.0
-
- reroute_277_1 = test_group.nodes.new('NodeReroute')
- reroute_277_1.parent = test_group.nodes.get('Frame.012')
- reroute_277_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_277_1.hide = False
- reroute_277_1.label = 'DO NOT TOUCH'
- reroute_277_1.location = (1131.4072265625, -3080.949951171875)
- reroute_277_1.mute = False
- reroute_277_1.name = 'Reroute.277'
- reroute_277_1.use_custom_color = False
- reroute_277_1.width = 16.0
-
- reroute_278_1 = test_group.nodes.new('NodeReroute')
- reroute_278_1.parent = test_group.nodes.get('Frame.012')
- reroute_278_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_278_1.hide = False
- reroute_278_1.label = 'DO NOT TOUCH'
- reroute_278_1.location = (1111.4072265625, -3060.949951171875)
- reroute_278_1.mute = False
- reroute_278_1.name = 'Reroute.278'
- reroute_278_1.use_custom_color = False
- reroute_278_1.width = 16.0
-
- reroute_279_1 = test_group.nodes.new('NodeReroute')
- reroute_279_1.parent = test_group.nodes.get('Frame.012')
- reroute_279_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_279_1.hide = False
- reroute_279_1.label = 'DO NOT TOUCH'
- reroute_279_1.location = (1091.4072265625, -2980.949951171875)
- reroute_279_1.mute = False
- reroute_279_1.name = 'Reroute.279'
- reroute_279_1.use_custom_color = False
- reroute_279_1.width = 16.0
-
- reroute_238_1 = test_group.nodes.new('NodeReroute')
- reroute_238_1.parent = test_group.nodes.get('Frame.012')
- reroute_238_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_238_1.hide = False
- reroute_238_1.label = 'DO NOT TOUCH'
- reroute_238_1.location = (1391.4072265625, -1780.949951171875)
- reroute_238_1.mute = False
- reroute_238_1.name = 'Reroute.238'
- reroute_238_1.use_custom_color = False
- reroute_238_1.width = 16.0
-
- reroute_266_1 = test_group.nodes.new('NodeReroute')
- reroute_266_1.parent = test_group.nodes.get('Frame.012')
- reroute_266_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_266_1.hide = False
- reroute_266_1.label = 'DO NOT TOUCH'
- reroute_266_1.location = (1151.4072265625, -1840.949951171875)
- reroute_266_1.mute = False
- reroute_266_1.name = 'Reroute.266'
- reroute_266_1.use_custom_color = False
- reroute_266_1.width = 16.0
-
- reroute_268_1 = test_group.nodes.new('NodeReroute')
- reroute_268_1.parent = test_group.nodes.get('Frame.012')
- reroute_268_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_268_1.hide = False
- reroute_268_1.label = 'DO NOT TOUCH'
- reroute_268_1.location = (1091.4072265625, -2340.949951171875)
- reroute_268_1.mute = False
- reroute_268_1.name = 'Reroute.268'
- reroute_268_1.use_custom_color = False
- reroute_268_1.width = 16.0
-
- reroute_264_1 = test_group.nodes.new('NodeReroute')
- reroute_264_1.parent = test_group.nodes.get('Frame.012')
- reroute_264_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_264_1.hide = False
- reroute_264_1.label = 'DO NOT TOUCH'
- reroute_264_1.location = (1131.4072265625, -1820.949951171875)
- reroute_264_1.mute = False
- reroute_264_1.name = 'Reroute.264'
- reroute_264_1.use_custom_color = False
- reroute_264_1.width = 16.0
-
- reroute_265_1 = test_group.nodes.new('NodeReroute')
- reroute_265_1.parent = test_group.nodes.get('Frame.012')
- reroute_265_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_265_1.hide = False
- reroute_265_1.label = 'DO NOT TOUCH'
- reroute_265_1.location = (1111.4072265625, -1800.949951171875)
- reroute_265_1.mute = False
- reroute_265_1.name = 'Reroute.265'
- reroute_265_1.use_custom_color = False
- reroute_265_1.width = 16.0
-
- reroute_175_1 = test_group.nodes.new('NodeReroute')
- reroute_175_1.parent = test_group.nodes.get('Frame.012')
- reroute_175_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_175_1.hide = False
- reroute_175_1.label = 'DO NOT TOUCH'
- reroute_175_1.location = (1631.4072265625, -1540.949951171875)
- reroute_175_1.mute = False
- reroute_175_1.name = 'Reroute.175'
- reroute_175_1.use_custom_color = False
- reroute_175_1.width = 16.0
-
- reroute_222_1 = test_group.nodes.new('NodeReroute')
- reroute_222_1.parent = test_group.nodes.get('Frame.012')
- reroute_222_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_222_1.hide = False
- reroute_222_1.label = 'DO NOT TOUCH'
- reroute_222_1.location = (1511.4072265625, -1660.949951171875)
- reroute_222_1.mute = False
- reroute_222_1.name = 'Reroute.222'
- reroute_222_1.use_custom_color = False
- reroute_222_1.width = 16.0
-
- reroute_256_1 = test_group.nodes.new('NodeReroute')
- reroute_256_1.parent = test_group.nodes.get('Frame.012')
- reroute_256_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_256_1.hide = False
- reroute_256_1.label = 'DO NOT TOUCH'
- reroute_256_1.location = (1091.4072265625, -1120.949951171875)
- reroute_256_1.mute = False
- reroute_256_1.name = 'Reroute.256'
- reroute_256_1.use_custom_color = False
- reroute_256_1.width = 16.0
-
- reroute_257_1 = test_group.nodes.new('NodeReroute')
- reroute_257_1.parent = test_group.nodes.get('Frame.012')
- reroute_257_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_257_1.hide = False
- reroute_257_1.label = 'DO NOT TOUCH'
- reroute_257_1.location = (1111.4072265625, -1160.949951171875)
- reroute_257_1.mute = False
- reroute_257_1.name = 'Reroute.257'
- reroute_257_1.use_custom_color = False
- reroute_257_1.width = 16.0
-
- reroute_258_1 = test_group.nodes.new('NodeReroute')
- reroute_258_1.parent = test_group.nodes.get('Frame.012')
- reroute_258_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_258_1.hide = False
- reroute_258_1.label = 'DO NOT TOUCH'
- reroute_258_1.location = (1131.4072265625, -1200.949951171875)
- reroute_258_1.mute = False
- reroute_258_1.name = 'Reroute.258'
- reroute_258_1.use_custom_color = False
- reroute_258_1.width = 16.0
-
- reroute_259_1 = test_group.nodes.new('NodeReroute')
- reroute_259_1.parent = test_group.nodes.get('Frame.012')
- reroute_259_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_259_1.hide = False
- reroute_259_1.label = 'DO NOT TOUCH'
- reroute_259_1.location = (1151.4072265625, -1240.949951171875)
- reroute_259_1.mute = False
- reroute_259_1.name = 'Reroute.259'
- reroute_259_1.use_custom_color = False
- reroute_259_1.width = 16.0
-
- reroute_267_1 = test_group.nodes.new('NodeReroute')
- reroute_267_1.parent = test_group.nodes.get('Frame.012')
- reroute_267_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_267_1.hide = False
- reroute_267_1.label = 'DO NOT TOUCH'
- reroute_267_1.location = (1091.4072265625, -1720.949951171875)
- reroute_267_1.mute = False
- reroute_267_1.name = 'Reroute.267'
- reroute_267_1.use_custom_color = False
- reroute_267_1.width = 16.0
-
- reroute_172_1 = test_group.nodes.new('NodeReroute')
- reroute_172_1.parent = test_group.nodes.get('Frame.012')
- reroute_172_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_172_1.hide = False
- reroute_172_1.label = 'DO NOT TOUCH'
- reroute_172_1.location = (1691.4072265625, 2159.050048828125)
- reroute_172_1.mute = False
- reroute_172_1.name = 'Reroute.172'
- reroute_172_1.use_custom_color = False
- reroute_172_1.width = 16.0
-
- reroute_219_1 = test_group.nodes.new('NodeReroute')
- reroute_219_1.parent = test_group.nodes.get('Frame.012')
- reroute_219_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_219_1.hide = False
- reroute_219_1.label = 'DO NOT TOUCH'
- reroute_219_1.location = (1571.4072265625, 2039.050048828125)
- reroute_219_1.mute = False
- reroute_219_1.name = 'Reroute.219'
- reroute_219_1.use_custom_color = False
- reroute_219_1.width = 16.0
-
- reroute_241_1 = test_group.nodes.new('NodeReroute')
- reroute_241_1.parent = test_group.nodes.get('Frame.012')
- reroute_241_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_241_1.hide = False
- reroute_241_1.label = 'DO NOT TOUCH'
- reroute_241_1.location = (1451.4072265625, 1919.050048828125)
- reroute_241_1.mute = False
- reroute_241_1.name = 'Reroute.241'
- reroute_241_1.use_custom_color = False
- reroute_241_1.width = 16.0
-
- reroute_174_1 = test_group.nodes.new('NodeReroute')
- reroute_174_1.parent = test_group.nodes.get('Frame.012')
- reroute_174_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_174_1.hide = False
- reroute_174_1.label = 'DO NOT TOUCH'
- reroute_174_1.location = (1651.4072265625, -320.949951171875)
- reroute_174_1.mute = False
- reroute_174_1.name = 'Reroute.174'
- reroute_174_1.use_custom_color = False
- reroute_174_1.width = 16.0
-
- reroute_221_1 = test_group.nodes.new('NodeReroute')
- reroute_221_1.parent = test_group.nodes.get('Frame.012')
- reroute_221_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_221_1.hide = False
- reroute_221_1.label = 'DO NOT TOUCH'
- reroute_221_1.location = (1531.4072265625, -440.949951171875)
- reroute_221_1.mute = False
- reroute_221_1.name = 'Reroute.221'
- reroute_221_1.use_custom_color = False
- reroute_221_1.width = 16.0
-
- reroute_239_1 = test_group.nodes.new('NodeReroute')
- reroute_239_1.parent = test_group.nodes.get('Frame.012')
- reroute_239_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_239_1.hide = False
- reroute_239_1.label = 'DO NOT TOUCH'
- reroute_239_1.location = (1411.4072265625, -560.949951171875)
- reroute_239_1.mute = False
- reroute_239_1.name = 'Reroute.239'
- reroute_239_1.use_custom_color = False
- reroute_239_1.width = 16.0
-
- reroute_170_1 = test_group.nodes.new('NodeReroute')
- reroute_170_1.parent = test_group.nodes.get('Frame.012')
- reroute_170_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_170_1.hide = False
- reroute_170_1.label = 'DO NOT TOUCH'
- reroute_170_1.location = (1611.4072265625, 39.050048828125)
- reroute_170_1.mute = False
- reroute_170_1.name = 'Reroute.170'
- reroute_170_1.use_custom_color = False
- reroute_170_1.width = 16.0
-
- reroute_166_1 = test_group.nodes.new('NodeReroute')
- reroute_166_1.parent = test_group.nodes.get('Frame.012')
- reroute_166_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_166_1.hide = False
- reroute_166_1.label = 'DO NOT TOUCH'
- reroute_166_1.location = (1691.4072265625, 119.050048828125)
- reroute_166_1.mute = False
- reroute_166_1.name = 'Reroute.166'
- reroute_166_1.use_custom_color = False
- reroute_166_1.width = 16.0
-
- reroute_167_1 = test_group.nodes.new('NodeReroute')
- reroute_167_1.parent = test_group.nodes.get('Frame.012')
- reroute_167_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_167_1.hide = False
- reroute_167_1.label = 'DO NOT TOUCH'
- reroute_167_1.location = (1671.4072265625, 99.050048828125)
- reroute_167_1.mute = False
- reroute_167_1.name = 'Reroute.167'
- reroute_167_1.use_custom_color = False
- reroute_167_1.width = 16.0
-
- reroute_168_1 = test_group.nodes.new('NodeReroute')
- reroute_168_1.parent = test_group.nodes.get('Frame.012')
- reroute_168_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_168_1.hide = False
- reroute_168_1.label = 'DO NOT TOUCH'
- reroute_168_1.location = (1651.4072265625, 79.050048828125)
- reroute_168_1.mute = False
- reroute_168_1.name = 'Reroute.168'
- reroute_168_1.use_custom_color = False
- reroute_168_1.width = 16.0
-
- reroute_169_1 = test_group.nodes.new('NodeReroute')
- reroute_169_1.parent = test_group.nodes.get('Frame.012')
- reroute_169_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_169_1.hide = False
- reroute_169_1.label = 'DO NOT TOUCH'
- reroute_169_1.location = (1631.4072265625, 59.050048828125)
- reroute_169_1.mute = False
- reroute_169_1.name = 'Reroute.169'
- reroute_169_1.use_custom_color = False
- reroute_169_1.width = 16.0
-
- reroute_171_1 = test_group.nodes.new('NodeReroute')
- reroute_171_1.parent = test_group.nodes.get('Frame.012')
- reroute_171_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_171_1.hide = False
- reroute_171_1.label = 'DO NOT TOUCH'
- reroute_171_1.location = (1591.4072265625, 19.050048828125)
- reroute_171_1.mute = False
- reroute_171_1.name = 'Reroute.171'
- reroute_171_1.use_custom_color = False
- reroute_171_1.width = 16.0
-
- reroute_212_1 = test_group.nodes.new('NodeReroute')
- reroute_212_1.parent = test_group.nodes.get('Frame.012')
- reroute_212_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_212_1.hide = False
- reroute_212_1.label = 'DO NOT TOUCH'
- reroute_212_1.location = (1491.4072265625, -80.949951171875)
- reroute_212_1.mute = False
- reroute_212_1.name = 'Reroute.212'
- reroute_212_1.use_custom_color = False
- reroute_212_1.width = 16.0
-
- reroute_216_1 = test_group.nodes.new('NodeReroute')
- reroute_216_1.parent = test_group.nodes.get('Frame.012')
- reroute_216_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_216_1.hide = False
- reroute_216_1.label = 'DO NOT TOUCH'
- reroute_216_1.location = (1511.4072265625, -60.949951171875)
- reroute_216_1.mute = False
- reroute_216_1.name = 'Reroute.216'
- reroute_216_1.use_custom_color = False
- reroute_216_1.width = 16.0
-
- reroute_215_1 = test_group.nodes.new('NodeReroute')
- reroute_215_1.parent = test_group.nodes.get('Frame.012')
- reroute_215_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_215_1.hide = False
- reroute_215_1.label = 'DO NOT TOUCH'
- reroute_215_1.location = (1531.4072265625, -40.949951171875)
- reroute_215_1.mute = False
- reroute_215_1.name = 'Reroute.215'
- reroute_215_1.use_custom_color = False
- reroute_215_1.width = 16.0
-
- reroute_214_1 = test_group.nodes.new('NodeReroute')
- reroute_214_1.parent = test_group.nodes.get('Frame.012')
- reroute_214_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_214_1.hide = False
- reroute_214_1.label = 'DO NOT TOUCH'
- reroute_214_1.location = (1551.4072265625, -20.949951171875)
- reroute_214_1.mute = False
- reroute_214_1.name = 'Reroute.214'
- reroute_214_1.use_custom_color = False
- reroute_214_1.width = 16.0
-
- reroute_213_1 = test_group.nodes.new('NodeReroute')
- reroute_213_1.parent = test_group.nodes.get('Frame.012')
- reroute_213_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_213_1.hide = False
- reroute_213_1.label = 'DO NOT TOUCH'
- reroute_213_1.location = (1571.4072265625, -0.949951171875)
- reroute_213_1.mute = False
- reroute_213_1.name = 'Reroute.213'
- reroute_213_1.use_custom_color = False
- reroute_213_1.width = 16.0
-
- reroute_217_1 = test_group.nodes.new('NodeReroute')
- reroute_217_1.parent = test_group.nodes.get('Frame.012')
- reroute_217_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_217_1.hide = False
- reroute_217_1.label = 'DO NOT TOUCH'
- reroute_217_1.location = (1471.4072265625, -100.949951171875)
- reroute_217_1.mute = False
- reroute_217_1.name = 'Reroute.217'
- reroute_217_1.use_custom_color = False
- reroute_217_1.width = 16.0
-
- reroute_235_1 = test_group.nodes.new('NodeReroute')
- reroute_235_1.parent = test_group.nodes.get('Frame.012')
- reroute_235_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_235_1.hide = False
- reroute_235_1.label = 'DO NOT TOUCH'
- reroute_235_1.location = (1451.4072265625, -120.949951171875)
- reroute_235_1.mute = False
- reroute_235_1.name = 'Reroute.235'
- reroute_235_1.use_custom_color = False
- reroute_235_1.width = 16.0
-
- reroute_234_1 = test_group.nodes.new('NodeReroute')
- reroute_234_1.parent = test_group.nodes.get('Frame.012')
- reroute_234_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_234_1.hide = False
- reroute_234_1.label = 'DO NOT TOUCH'
- reroute_234_1.location = (1431.4072265625, -140.949951171875)
- reroute_234_1.mute = False
- reroute_234_1.name = 'Reroute.234'
- reroute_234_1.use_custom_color = False
- reroute_234_1.width = 16.0
-
- reroute_233_1 = test_group.nodes.new('NodeReroute')
- reroute_233_1.parent = test_group.nodes.get('Frame.012')
- reroute_233_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_233_1.hide = False
- reroute_233_1.label = 'DO NOT TOUCH'
- reroute_233_1.location = (1411.4072265625, -160.949951171875)
- reroute_233_1.mute = False
- reroute_233_1.name = 'Reroute.233'
- reroute_233_1.use_custom_color = False
- reroute_233_1.width = 16.0
-
- reroute_232_1 = test_group.nodes.new('NodeReroute')
- reroute_232_1.parent = test_group.nodes.get('Frame.012')
- reroute_232_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_232_1.hide = False
- reroute_232_1.label = 'DO NOT TOUCH'
- reroute_232_1.location = (1391.4072265625, -180.949951171875)
- reroute_232_1.mute = False
- reroute_232_1.name = 'Reroute.232'
- reroute_232_1.use_custom_color = False
- reroute_232_1.width = 16.0
-
- reroute_231_1 = test_group.nodes.new('NodeReroute')
- reroute_231_1.parent = test_group.nodes.get('Frame.012')
- reroute_231_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_231_1.hide = False
- reroute_231_1.label = 'DO NOT TOUCH'
- reroute_231_1.location = (1371.4072265625, -200.949951171875)
- reroute_231_1.mute = False
- reroute_231_1.name = 'Reroute.231'
- reroute_231_1.use_custom_color = False
- reroute_231_1.width = 16.0
-
- reroute_230_1 = test_group.nodes.new('NodeReroute')
- reroute_230_1.parent = test_group.nodes.get('Frame.012')
- reroute_230_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_230_1.hide = False
- reroute_230_1.label = 'DO NOT TOUCH'
- reroute_230_1.location = (1351.4072265625, -220.949951171875)
- reroute_230_1.mute = False
- reroute_230_1.name = 'Reroute.230'
- reroute_230_1.use_custom_color = False
- reroute_230_1.width = 16.0
-
- reroute_162_1 = test_group.nodes.new('NodeReroute')
- reroute_162_1.parent = test_group.nodes.get('Frame.012')
- reroute_162_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_162_1.hide = False
- reroute_162_1.label = 'DO NOT TOUCH'
- reroute_162_1.location = (1151.4072265625, 1239.050048828125)
- reroute_162_1.mute = False
- reroute_162_1.name = 'Reroute.162'
- reroute_162_1.use_custom_color = False
- reroute_162_1.width = 16.0
-
- reroute_158_1 = test_group.nodes.new('NodeReroute')
- reroute_158_1.parent = test_group.nodes.get('Frame.012')
- reroute_158_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_158_1.hide = False
- reroute_158_1.label = 'DO NOT TOUCH'
- reroute_158_1.location = (1091.4072265625, 1359.050048828125)
- reroute_158_1.mute = False
- reroute_158_1.name = 'Reroute.158'
- reroute_158_1.use_custom_color = False
- reroute_158_1.width = 16.0
-
- reroute_160_1 = test_group.nodes.new('NodeReroute')
- reroute_160_1.parent = test_group.nodes.get('Frame.012')
- reroute_160_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_160_1.hide = False
- reroute_160_1.label = 'DO NOT TOUCH'
- reroute_160_1.location = (1111.4072265625, 1319.050048828125)
- reroute_160_1.mute = False
- reroute_160_1.name = 'Reroute.160'
- reroute_160_1.use_custom_color = False
- reroute_160_1.width = 16.0
-
- reroute_159_1 = test_group.nodes.new('NodeReroute')
- reroute_159_1.parent = test_group.nodes.get('Frame.012')
- reroute_159_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_159_1.hide = False
- reroute_159_1.label = 'DO NOT TOUCH'
- reroute_159_1.location = (1091.4072265625, 1979.050048828125)
- reroute_159_1.mute = False
- reroute_159_1.name = 'Reroute.159'
- reroute_159_1.use_custom_color = False
- reroute_159_1.width = 16.0
-
- reroute_165_1 = test_group.nodes.new('NodeReroute')
- reroute_165_1.parent = test_group.nodes.get('Frame.012')
- reroute_165_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_165_1.hide = False
- reroute_165_1.label = 'DO NOT TOUCH'
- reroute_165_1.location = (1151.4072265625, 1859.050048828125)
- reroute_165_1.mute = False
- reroute_165_1.name = 'Reroute.165'
- reroute_165_1.use_custom_color = False
- reroute_165_1.width = 16.0
-
- reroute_164_1 = test_group.nodes.new('NodeReroute')
- reroute_164_1.parent = test_group.nodes.get('Frame.012')
- reroute_164_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_164_1.hide = False
- reroute_164_1.label = 'DO NOT TOUCH'
- reroute_164_1.location = (1131.4072265625, 1879.050048828125)
- reroute_164_1.mute = False
- reroute_164_1.name = 'Reroute.164'
- reroute_164_1.use_custom_color = False
- reroute_164_1.width = 16.0
-
- reroute_163_1 = test_group.nodes.new('NodeReroute')
- reroute_163_1.parent = test_group.nodes.get('Frame.012')
- reroute_163_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_163_1.hide = False
- reroute_163_1.label = 'DO NOT TOUCH'
- reroute_163_1.location = (1111.4072265625, 1899.050048828125)
- reroute_163_1.mute = False
- reroute_163_1.name = 'Reroute.163'
- reroute_163_1.use_custom_color = False
- reroute_163_1.width = 16.0
-
- reroute_161_1 = test_group.nodes.new('NodeReroute')
- reroute_161_1.parent = test_group.nodes.get('Frame.012')
- reroute_161_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_161_1.hide = False
- reroute_161_1.label = 'DO NOT TOUCH'
- reroute_161_1.location = (1131.4072265625, 1279.050048828125)
- reroute_161_1.mute = False
- reroute_161_1.name = 'Reroute.161'
- reroute_161_1.use_custom_color = False
- reroute_161_1.width = 16.0
-
- reroute_249_1 = test_group.nodes.new('NodeReroute')
- reroute_249_1.parent = test_group.nodes.get('Frame.012')
- reroute_249_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_249_1.hide = False
- reroute_249_1.label = 'DO NOT TOUCH'
- reroute_249_1.location = (1091.4072265625, 739.050048828125)
- reroute_249_1.mute = False
- reroute_249_1.name = 'Reroute.249'
- reroute_249_1.use_custom_color = False
- reroute_249_1.width = 16.0
-
- reroute_248_1 = test_group.nodes.new('NodeReroute')
- reroute_248_1.parent = test_group.nodes.get('Frame.012')
- reroute_248_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_248_1.hide = False
- reroute_248_1.label = 'DO NOT TOUCH'
- reroute_248_1.location = (1091.4072265625, 119.050048828125)
- reroute_248_1.mute = False
- reroute_248_1.name = 'Reroute.248'
- reroute_248_1.use_custom_color = False
- reroute_248_1.width = 16.0
-
- reroute_250_1 = test_group.nodes.new('NodeReroute')
- reroute_250_1.parent = test_group.nodes.get('Frame.012')
- reroute_250_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_250_1.hide = False
- reroute_250_1.label = 'DO NOT TOUCH'
- reroute_250_1.location = (1111.4072265625, 79.050048828125)
- reroute_250_1.mute = False
- reroute_250_1.name = 'Reroute.250'
- reroute_250_1.use_custom_color = False
- reroute_250_1.width = 16.0
-
- reroute_251_1 = test_group.nodes.new('NodeReroute')
- reroute_251_1.parent = test_group.nodes.get('Frame.012')
- reroute_251_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_251_1.hide = False
- reroute_251_1.label = 'DO NOT TOUCH'
- reroute_251_1.location = (1131.4072265625, 39.050048828125)
- reroute_251_1.mute = False
- reroute_251_1.name = 'Reroute.251'
- reroute_251_1.use_custom_color = False
- reroute_251_1.width = 16.0
-
- reroute_252_1 = test_group.nodes.new('NodeReroute')
- reroute_252_1.parent = test_group.nodes.get('Frame.012')
- reroute_252_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_252_1.hide = False
- reroute_252_1.label = 'DO NOT TOUCH'
- reroute_252_1.location = (1151.4072265625, -0.949951171875)
- reroute_252_1.mute = False
- reroute_252_1.name = 'Reroute.252'
- reroute_252_1.use_custom_color = False
- reroute_252_1.width = 16.0
-
- reroute_253_1 = test_group.nodes.new('NodeReroute')
- reroute_253_1.parent = test_group.nodes.get('Frame.012')
- reroute_253_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_253_1.hide = False
- reroute_253_1.label = 'DO NOT TOUCH'
- reroute_253_1.location = (1111.4072265625, 659.050048828125)
- reroute_253_1.mute = False
- reroute_253_1.name = 'Reroute.253'
- reroute_253_1.use_custom_color = False
- reroute_253_1.width = 16.0
-
- reroute_254_1 = test_group.nodes.new('NodeReroute')
- reroute_254_1.parent = test_group.nodes.get('Frame.012')
- reroute_254_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_254_1.hide = False
- reroute_254_1.label = 'DO NOT TOUCH'
- reroute_254_1.location = (1131.4072265625, 639.050048828125)
- reroute_254_1.mute = False
- reroute_254_1.name = 'Reroute.254'
- reroute_254_1.use_custom_color = False
- reroute_254_1.width = 16.0
-
- reroute_255_1 = test_group.nodes.new('NodeReroute')
- reroute_255_1.parent = test_group.nodes.get('Frame.012')
- reroute_255_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_255_1.hide = False
- reroute_255_1.label = 'DO NOT TOUCH'
- reroute_255_1.location = (1151.4072265625, 619.050048828125)
- reroute_255_1.mute = False
- reroute_255_1.name = 'Reroute.255'
- reroute_255_1.use_custom_color = False
- reroute_255_1.width = 16.0
-
- reroute_261_1 = test_group.nodes.new('NodeReroute')
- reroute_261_1.parent = test_group.nodes.get('Frame.012')
- reroute_261_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_261_1.hide = False
- reroute_261_1.label = 'DO NOT TOUCH'
- reroute_261_1.location = (1131.4072265625, -600.949951171875)
- reroute_261_1.mute = False
- reroute_261_1.name = 'Reroute.261'
- reroute_261_1.use_custom_color = False
- reroute_261_1.width = 16.0
-
- reroute_262_1 = test_group.nodes.new('NodeReroute')
- reroute_262_1.parent = test_group.nodes.get('Frame.012')
- reroute_262_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_262_1.hide = False
- reroute_262_1.label = 'DO NOT TOUCH'
- reroute_262_1.location = (1111.4072265625, -580.949951171875)
- reroute_262_1.mute = False
- reroute_262_1.name = 'Reroute.262'
- reroute_262_1.use_custom_color = False
- reroute_262_1.width = 16.0
-
- reroute_260_1 = test_group.nodes.new('NodeReroute')
- reroute_260_1.parent = test_group.nodes.get('Frame.012')
- reroute_260_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_260_1.hide = False
- reroute_260_1.label = 'DO NOT TOUCH'
- reroute_260_1.location = (1151.4072265625, -620.949951171875)
- reroute_260_1.mute = False
- reroute_260_1.name = 'Reroute.260'
- reroute_260_1.use_custom_color = False
- reroute_260_1.width = 16.0
-
- reroute_263_1 = test_group.nodes.new('NodeReroute')
- reroute_263_1.parent = test_group.nodes.get('Frame.012')
- reroute_263_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_263_1.hide = False
- reroute_263_1.label = 'DO NOT TOUCH'
- reroute_263_1.location = (1091.4072265625, -500.949951171875)
- reroute_263_1.mute = False
- reroute_263_1.name = 'Reroute.263'
- reroute_263_1.use_custom_color = False
- reroute_263_1.width = 16.0
-
- reroute_318_1 = test_group.nodes.new('NodeReroute')
- reroute_318_1.parent = test_group.nodes.get('Frame.012')
- reroute_318_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_318_1.hide = False
- reroute_318_1.label = 'DO NOT TOUCH'
- reroute_318_1.location = (1711.4072265625, -4800.9501953125)
- reroute_318_1.mute = False
- reroute_318_1.name = 'Reroute.318'
- reroute_318_1.use_custom_color = False
- reroute_318_1.width = 16.0
-
- reroute_331_1 = test_group.nodes.new('NodeReroute')
- reroute_331_1.parent = test_group.nodes.get('Frame.012')
- reroute_331_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_331_1.hide = False
- reroute_331_1.label = 'DO NOT TOUCH'
- reroute_331_1.location = (851.4072265625, 1939.050048828125)
- reroute_331_1.mute = False
- reroute_331_1.name = 'Reroute.331'
- reroute_331_1.use_custom_color = False
- reroute_331_1.width = 16.0
-
- reroute_333_1 = test_group.nodes.new('NodeReroute')
- reroute_333_1.parent = test_group.nodes.get('Frame.012')
- reroute_333_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_333_1.hide = False
- reroute_333_1.label = 'DO NOT TOUCH'
- reroute_333_1.location = (851.4072265625, 499.050048828125)
- reroute_333_1.mute = False
- reroute_333_1.name = 'Reroute.333'
- reroute_333_1.use_custom_color = False
- reroute_333_1.width = 16.0
-
- reroute_332_1 = test_group.nodes.new('NodeReroute')
- reroute_332_1.parent = test_group.nodes.get('Frame.012')
- reroute_332_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_332_1.hide = False
- reroute_332_1.label = 'DO NOT TOUCH'
- reroute_332_1.location = (711.4072265625, 1819.050048828125)
- reroute_332_1.mute = False
- reroute_332_1.name = 'Reroute.332'
- reroute_332_1.use_custom_color = False
- reroute_332_1.width = 16.0
-
- reroute_380_1 = test_group.nodes.new('NodeReroute')
- reroute_380_1.parent = test_group.nodes.get('Frame.012')
- reroute_380_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_380_1.hide = False
- reroute_380_1.label = 'DO NOT TOUCH'
- reroute_380_1.location = (831.4072265625, 699.050048828125)
- reroute_380_1.mute = False
- reroute_380_1.name = 'Reroute.380'
- reroute_380_1.use_custom_color = False
- reroute_380_1.width = 16.0
-
- reroute_375_1 = test_group.nodes.new('NodeReroute')
- reroute_375_1.parent = test_group.nodes.get('Frame.012')
- reroute_375_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_375_1.hide = False
- reroute_375_1.label = 'DO NOT TOUCH'
- reroute_375_1.location = (831.4072265625, 479.050048828125)
- reroute_375_1.mute = False
- reroute_375_1.name = 'Reroute.375'
- reroute_375_1.use_custom_color = False
- reroute_375_1.width = 16.0
-
- reroute_376_1 = test_group.nodes.new('NodeReroute')
- reroute_376_1.parent = test_group.nodes.get('Frame.012')
- reroute_376_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_376_1.hide = False
- reroute_376_1.label = 'DO NOT TOUCH'
- reroute_376_1.location = (811.4072265625, 459.050048828125)
- reroute_376_1.mute = False
- reroute_376_1.name = 'Reroute.376'
- reroute_376_1.use_custom_color = False
- reroute_376_1.width = 16.0
-
- reroute_377_1 = test_group.nodes.new('NodeReroute')
- reroute_377_1.parent = test_group.nodes.get('Frame.012')
- reroute_377_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_377_1.hide = False
- reroute_377_1.label = 'DO NOT TOUCH'
- reroute_377_1.location = (791.4072265625, 439.050048828125)
- reroute_377_1.mute = False
- reroute_377_1.name = 'Reroute.377'
- reroute_377_1.use_custom_color = False
- reroute_377_1.width = 16.0
-
- reroute_378_1 = test_group.nodes.new('NodeReroute')
- reroute_378_1.parent = test_group.nodes.get('Frame.012')
- reroute_378_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_378_1.hide = False
- reroute_378_1.label = 'DO NOT TOUCH'
- reroute_378_1.location = (771.4072265625, 419.050048828125)
- reroute_378_1.mute = False
- reroute_378_1.name = 'Reroute.378'
- reroute_378_1.use_custom_color = False
- reroute_378_1.width = 16.0
-
- reroute_379_1 = test_group.nodes.new('NodeReroute')
- reroute_379_1.parent = test_group.nodes.get('Frame.012')
- reroute_379_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_379_1.hide = False
- reroute_379_1.label = 'DO NOT TOUCH'
- reroute_379_1.location = (751.4072265625, 399.050048828125)
- reroute_379_1.mute = False
- reroute_379_1.name = 'Reroute.379'
- reroute_379_1.use_custom_color = False
- reroute_379_1.width = 16.0
-
- reroute_406_1 = test_group.nodes.new('NodeReroute')
- reroute_406_1.parent = test_group.nodes.get('Frame.012')
- reroute_406_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_406_1.hide = False
- reroute_406_1.label = 'DO NOT TOUCH'
- reroute_406_1.location = (811.4072265625, -540.949951171875)
- reroute_406_1.mute = False
- reroute_406_1.name = 'Reroute.406'
- reroute_406_1.use_custom_color = False
- reroute_406_1.width = 16.0
-
- reroute_407_1 = test_group.nodes.new('NodeReroute')
- reroute_407_1.parent = test_group.nodes.get('Frame.012')
- reroute_407_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_407_1.hide = False
- reroute_407_1.label = 'DO NOT TOUCH'
- reroute_407_1.location = (791.4072265625, -1780.949951171875)
- reroute_407_1.mute = False
- reroute_407_1.name = 'Reroute.407'
- reroute_407_1.use_custom_color = False
- reroute_407_1.width = 16.0
-
- reroute_408_1 = test_group.nodes.new('NodeReroute')
- reroute_408_1.parent = test_group.nodes.get('Frame.012')
- reroute_408_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_408_1.hide = False
- reroute_408_1.label = 'DO NOT TOUCH'
- reroute_408_1.location = (771.4072265625, -3020.949951171875)
- reroute_408_1.mute = False
- reroute_408_1.name = 'Reroute.408'
- reroute_408_1.use_custom_color = False
- reroute_408_1.width = 16.0
-
- reroute_409_1 = test_group.nodes.new('NodeReroute')
- reroute_409_1.parent = test_group.nodes.get('Frame.012')
- reroute_409_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_409_1.hide = False
- reroute_409_1.label = 'DO NOT TOUCH'
- reroute_409_1.location = (751.4072265625, -4260.9501953125)
- reroute_409_1.mute = False
- reroute_409_1.name = 'Reroute.409'
- reroute_409_1.use_custom_color = False
- reroute_409_1.width = 16.0
-
- reroute_240_1 = test_group.nodes.new('NodeReroute')
- reroute_240_1.parent = test_group.nodes.get('Frame.012')
- reroute_240_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_240_1.hide = False
- reroute_240_1.label = 'DO NOT TOUCH'
- reroute_240_1.location = (1431.4072265625, 679.050048828125)
- reroute_240_1.mute = False
- reroute_240_1.name = 'Reroute.240'
- reroute_240_1.use_custom_color = False
- reroute_240_1.width = 16.0
-
- reroute_220_1 = test_group.nodes.new('NodeReroute')
- reroute_220_1.parent = test_group.nodes.get('Frame.012')
- reroute_220_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_220_1.hide = False
- reroute_220_1.label = 'DO NOT TOUCH'
- reroute_220_1.location = (1551.4072265625, 799.050048828125)
- reroute_220_1.mute = False
- reroute_220_1.name = 'Reroute.220'
- reroute_220_1.use_custom_color = False
- reroute_220_1.width = 16.0
-
- reroute_173_1 = test_group.nodes.new('NodeReroute')
- reroute_173_1.parent = test_group.nodes.get('Frame.012')
- reroute_173_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_173_1.hide = False
- reroute_173_1.label = 'DO NOT TOUCH'
- reroute_173_1.location = (1671.4072265625, 919.050048828125)
- reroute_173_1.mute = False
- reroute_173_1.name = 'Reroute.173'
- reroute_173_1.use_custom_color = False
- reroute_173_1.width = 16.0
-
- reroute_420_1 = test_group.nodes.new('NodeReroute')
- reroute_420_1.parent = test_group.nodes.get('Frame.012')
- reroute_420_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_420_1.hide = False
- reroute_420_1.label = 'DO NOT TOUCH'
- reroute_420_1.location = (691.4072265625, 579.050048828125)
- reroute_420_1.mute = False
- reroute_420_1.name = 'Reroute.420'
- reroute_420_1.use_custom_color = False
- reroute_420_1.width = 16.0
-
- reroute_421_1 = test_group.nodes.new('NodeReroute')
- reroute_421_1.parent = test_group.nodes.get('Frame.012')
- reroute_421_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_421_1.hide = False
- reroute_421_1.label = 'DO NOT TOUCH'
- reroute_421_1.location = (671.4072265625, -660.949951171875)
- reroute_421_1.mute = False
- reroute_421_1.name = 'Reroute.421'
- reroute_421_1.use_custom_color = False
- reroute_421_1.width = 16.0
-
- reroute_422_1 = test_group.nodes.new('NodeReroute')
- reroute_422_1.parent = test_group.nodes.get('Frame.012')
- reroute_422_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_422_1.hide = False
- reroute_422_1.label = 'DO NOT TOUCH'
- reroute_422_1.location = (651.4072265625, -1900.949951171875)
- reroute_422_1.mute = False
- reroute_422_1.name = 'Reroute.422'
- reroute_422_1.use_custom_color = False
- reroute_422_1.width = 16.0
-
- reroute_423_1 = test_group.nodes.new('NodeReroute')
- reroute_423_1.parent = test_group.nodes.get('Frame.012')
- reroute_423_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_423_1.hide = False
- reroute_423_1.label = 'DO NOT TOUCH'
- reroute_423_1.location = (631.4072265625, -3140.949951171875)
- reroute_423_1.mute = False
- reroute_423_1.name = 'Reroute.423'
- reroute_423_1.use_custom_color = False
- reroute_423_1.width = 16.0
-
- reroute_393_1 = test_group.nodes.new('NodeReroute')
- reroute_393_1.parent = test_group.nodes.get('Frame.012')
- reroute_393_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_393_1.hide = False
- reroute_393_1.label = 'DO NOT TOUCH'
- reroute_393_1.location = (411.4072265625, -1400.949951171875)
- reroute_393_1.mute = False
- reroute_393_1.name = 'Reroute.393'
- reroute_393_1.use_custom_color = False
- reroute_393_1.width = 16.0
-
- reroute_397_1 = test_group.nodes.new('NodeReroute')
- reroute_397_1.parent = test_group.nodes.get('Frame.012')
- reroute_397_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_397_1.hide = False
- reroute_397_1.label = 'DO NOT TOUCH'
- reroute_397_1.location = (411.4072265625, -2640.949951171875)
- reroute_397_1.mute = False
- reroute_397_1.name = 'Reroute.397'
- reroute_397_1.use_custom_color = False
- reroute_397_1.width = 16.0
-
- reroute_396_1 = test_group.nodes.new('NodeReroute')
- reroute_396_1.parent = test_group.nodes.get('Frame.012')
- reroute_396_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_396_1.hide = False
- reroute_396_1.label = 'DO NOT TOUCH'
- reroute_396_1.location = (411.4072265625, -1960.949951171875)
- reroute_396_1.mute = False
- reroute_396_1.name = 'Reroute.396'
- reroute_396_1.use_custom_color = False
- reroute_396_1.width = 16.0
-
- reroute_395_1 = test_group.nodes.new('NodeReroute')
- reroute_395_1.parent = test_group.nodes.get('Frame.012')
- reroute_395_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_395_1.hide = False
- reroute_395_1.label = 'DO NOT TOUCH'
- reroute_395_1.location = (391.4072265625, -1940.949951171875)
- reroute_395_1.mute = False
- reroute_395_1.name = 'Reroute.395'
- reroute_395_1.use_custom_color = False
- reroute_395_1.width = 16.0
-
- reroute_394_1 = test_group.nodes.new('NodeReroute')
- reroute_394_1.parent = test_group.nodes.get('Frame.012')
- reroute_394_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_394_1.hide = False
- reroute_394_1.label = 'DO NOT TOUCH'
- reroute_394_1.location = (391.4072265625, -2060.949951171875)
- reroute_394_1.mute = False
- reroute_394_1.name = 'Reroute.394'
- reroute_394_1.use_custom_color = False
- reroute_394_1.width = 16.0
-
- reroute_401_1 = test_group.nodes.new('NodeReroute')
- reroute_401_1.parent = test_group.nodes.get('Frame.012')
- reroute_401_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_401_1.hide = False
- reroute_401_1.label = 'DO NOT TOUCH'
- reroute_401_1.location = (411.4072265625, -3880.949951171875)
- reroute_401_1.mute = False
- reroute_401_1.name = 'Reroute.401'
- reroute_401_1.use_custom_color = False
- reroute_401_1.width = 16.0
-
- reroute_400_1 = test_group.nodes.new('NodeReroute')
- reroute_400_1.parent = test_group.nodes.get('Frame.012')
- reroute_400_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_400_1.hide = False
- reroute_400_1.label = 'DO NOT TOUCH'
- reroute_400_1.location = (411.4072265625, -3200.949951171875)
- reroute_400_1.mute = False
- reroute_400_1.name = 'Reroute.400'
- reroute_400_1.use_custom_color = False
- reroute_400_1.width = 16.0
-
- reroute_399_1 = test_group.nodes.new('NodeReroute')
- reroute_399_1.parent = test_group.nodes.get('Frame.012')
- reroute_399_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_399_1.hide = False
- reroute_399_1.label = 'DO NOT TOUCH'
- reroute_399_1.location = (391.4072265625, -3180.949951171875)
- reroute_399_1.mute = False
- reroute_399_1.name = 'Reroute.399'
- reroute_399_1.use_custom_color = False
- reroute_399_1.width = 16.0
-
- reroute_398_1 = test_group.nodes.new('NodeReroute')
- reroute_398_1.parent = test_group.nodes.get('Frame.012')
- reroute_398_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_398_1.hide = False
- reroute_398_1.label = 'DO NOT TOUCH'
- reroute_398_1.location = (391.4072265625, -3300.949951171875)
- reroute_398_1.mute = False
- reroute_398_1.name = 'Reroute.398'
- reroute_398_1.use_custom_color = False
- reroute_398_1.width = 16.0
-
- reroute_403_1 = test_group.nodes.new('NodeReroute')
- reroute_403_1.parent = test_group.nodes.get('Frame.012')
- reroute_403_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_403_1.hide = False
- reroute_403_1.label = 'DO NOT TOUCH'
- reroute_403_1.location = (391.4072265625, -4420.9501953125)
- reroute_403_1.mute = False
- reroute_403_1.name = 'Reroute.403'
- reroute_403_1.use_custom_color = False
- reroute_403_1.width = 16.0
-
- reroute_402_1 = test_group.nodes.new('NodeReroute')
- reroute_402_1.parent = test_group.nodes.get('Frame.012')
- reroute_402_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_402_1.hide = False
- reroute_402_1.label = 'DO NOT TOUCH'
- reroute_402_1.location = (391.4072265625, -4540.9501953125)
- reroute_402_1.mute = False
- reroute_402_1.name = 'Reroute.402'
- reroute_402_1.use_custom_color = False
- reroute_402_1.width = 16.0
-
- reroute_404_1 = test_group.nodes.new('NodeReroute')
- reroute_404_1.parent = test_group.nodes.get('Frame.012')
- reroute_404_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_404_1.hide = False
- reroute_404_1.label = 'DO NOT TOUCH'
- reroute_404_1.location = (411.4072265625, -4440.9501953125)
- reroute_404_1.mute = False
- reroute_404_1.name = 'Reroute.404'
- reroute_404_1.use_custom_color = False
- reroute_404_1.width = 16.0
-
- reroute_405_1 = test_group.nodes.new('NodeReroute')
- reroute_405_1.parent = test_group.nodes.get('Frame.012')
- reroute_405_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_405_1.hide = False
- reroute_405_1.label = 'DO NOT TOUCH'
- reroute_405_1.location = (411.4072265625, -5120.9501953125)
- reroute_405_1.mute = False
- reroute_405_1.name = 'Reroute.405'
- reroute_405_1.use_custom_color = False
- reroute_405_1.width = 16.0
-
- reroute_371_1 = test_group.nodes.new('NodeReroute')
- reroute_371_1.parent = test_group.nodes.get('Frame.012')
- reroute_371_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_371_1.hide = False
- reroute_371_1.label = 'DO NOT TOUCH'
- reroute_371_1.location = (411.4072265625, 1079.050048828125)
- reroute_371_1.mute = False
- reroute_371_1.name = 'Reroute.371'
- reroute_371_1.use_custom_color = False
- reroute_371_1.width = 16.0
-
- reroute_372_1 = test_group.nodes.new('NodeReroute')
- reroute_372_1.parent = test_group.nodes.get('Frame.012')
- reroute_372_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_372_1.hide = False
- reroute_372_1.label = 'DO NOT TOUCH'
- reroute_372_1.location = (391.4072265625, 1659.050048828125)
- reroute_372_1.mute = False
- reroute_372_1.name = 'Reroute.372'
- reroute_372_1.use_custom_color = False
- reroute_372_1.width = 16.0
-
- reroute_373_1 = test_group.nodes.new('NodeReroute')
- reroute_373_1.parent = test_group.nodes.get('Frame.012')
- reroute_373_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_373_1.hide = False
- reroute_373_1.label = 'DO NOT TOUCH'
- reroute_373_1.location = (411.4072265625, 1759.050048828125)
- reroute_373_1.mute = False
- reroute_373_1.name = 'Reroute.373'
- reroute_373_1.use_custom_color = False
- reroute_373_1.width = 16.0
-
- reroute_374_1 = test_group.nodes.new('NodeReroute')
- reroute_374_1.parent = test_group.nodes.get('Frame.012')
- reroute_374_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_374_1.hide = False
- reroute_374_1.label = 'DO NOT TOUCH'
- reroute_374_1.location = (391.4072265625, 1779.050048828125)
- reroute_374_1.mute = False
- reroute_374_1.name = 'Reroute.374'
- reroute_374_1.use_custom_color = False
- reroute_374_1.width = 16.0
-
- reroute_387_1 = test_group.nodes.new('NodeReroute')
- reroute_387_1.parent = test_group.nodes.get('Frame.012')
- reroute_387_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_387_1.hide = False
- reroute_387_1.label = 'DO NOT TOUCH'
- reroute_387_1.location = (391.4072265625, 539.050048828125)
- reroute_387_1.mute = False
- reroute_387_1.name = 'Reroute.387'
- reroute_387_1.use_custom_color = False
- reroute_387_1.width = 16.0
-
- reroute_386_1 = test_group.nodes.new('NodeReroute')
- reroute_386_1.parent = test_group.nodes.get('Frame.012')
- reroute_386_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_386_1.hide = False
- reroute_386_1.label = 'DO NOT TOUCH'
- reroute_386_1.location = (391.4072265625, 419.050048828125)
- reroute_386_1.mute = False
- reroute_386_1.name = 'Reroute.386'
- reroute_386_1.use_custom_color = False
- reroute_386_1.width = 16.0
-
- reroute_388_1 = test_group.nodes.new('NodeReroute')
- reroute_388_1.parent = test_group.nodes.get('Frame.012')
- reroute_388_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_388_1.hide = False
- reroute_388_1.label = 'DO NOT TOUCH'
- reroute_388_1.location = (411.4072265625, 519.050048828125)
- reroute_388_1.mute = False
- reroute_388_1.name = 'Reroute.388'
- reroute_388_1.use_custom_color = False
- reroute_388_1.width = 16.0
-
- reroute_389_1 = test_group.nodes.new('NodeReroute')
- reroute_389_1.parent = test_group.nodes.get('Frame.012')
- reroute_389_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_389_1.hide = False
- reroute_389_1.label = 'DO NOT TOUCH'
- reroute_389_1.location = (411.4072265625, -160.949951171875)
- reroute_389_1.mute = False
- reroute_389_1.name = 'Reroute.389'
- reroute_389_1.use_custom_color = False
- reroute_389_1.width = 16.0
-
- reroute_392_1 = test_group.nodes.new('NodeReroute')
- reroute_392_1.parent = test_group.nodes.get('Frame.012')
- reroute_392_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_392_1.hide = False
- reroute_392_1.label = 'DO NOT TOUCH'
- reroute_392_1.location = (411.4072265625, -720.949951171875)
- reroute_392_1.mute = False
- reroute_392_1.name = 'Reroute.392'
- reroute_392_1.use_custom_color = False
- reroute_392_1.width = 16.0
-
- reroute_390_1 = test_group.nodes.new('NodeReroute')
- reroute_390_1.parent = test_group.nodes.get('Frame.012')
- reroute_390_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_390_1.hide = False
- reroute_390_1.label = 'DO NOT TOUCH'
- reroute_390_1.location = (391.4072265625, -820.949951171875)
- reroute_390_1.mute = False
- reroute_390_1.name = 'Reroute.390'
- reroute_390_1.use_custom_color = False
- reroute_390_1.width = 16.0
-
- reroute_391_1 = test_group.nodes.new('NodeReroute')
- reroute_391_1.parent = test_group.nodes.get('Frame.012')
- reroute_391_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_391_1.hide = False
- reroute_391_1.label = 'DO NOT TOUCH'
- reroute_391_1.location = (391.4072265625, -700.949951171875)
- reroute_391_1.mute = False
- reroute_391_1.name = 'Reroute.391'
- reroute_391_1.use_custom_color = False
- reroute_391_1.width = 16.0
-
- reroute_424_1 = test_group.nodes.new('NodeReroute')
- reroute_424_1.parent = test_group.nodes.get('Frame.012')
- reroute_424_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_424_1.hide = False
- reroute_424_1.label = 'DO NOT TOUCH'
- reroute_424_1.location = (611.4072265625, -4380.9501953125)
- reroute_424_1.mute = False
- reroute_424_1.name = 'Reroute.424'
- reroute_424_1.use_custom_color = False
- reroute_424_1.width = 16.0
-
- reroute_425_1 = test_group.nodes.new('NodeReroute')
- reroute_425_1.parent = test_group.nodes.get('Frame.012')
- reroute_425_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_425_1.hide = False
- reroute_425_1.label = 'DO NOT TOUCH'
- reroute_425_1.location = (251.4072265625, 1779.050048828125)
- reroute_425_1.mute = False
- reroute_425_1.name = 'Reroute.425'
- reroute_425_1.use_custom_color = False
- reroute_425_1.width = 16.0
-
- reroute_442_1 = test_group.nodes.new('NodeReroute')
- reroute_442_1.parent = test_group.nodes.get('Frame.012')
- reroute_442_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_442_1.hide = False
- reroute_442_1.label = 'DO NOT TOUCH'
- reroute_442_1.location = (231.4072265625, 539.050048828125)
- reroute_442_1.mute = False
- reroute_442_1.name = 'Reroute.442'
- reroute_442_1.use_custom_color = False
- reroute_442_1.width = 16.0
-
- reroute_438_1 = test_group.nodes.new('NodeReroute')
- reroute_438_1.parent = test_group.nodes.get('Frame.012')
- reroute_438_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_438_1.hide = False
- reroute_438_1.label = 'DO NOT TOUCH'
- reroute_438_1.location = (211.4072265625, -700.949951171875)
- reroute_438_1.mute = False
- reroute_438_1.name = 'Reroute.438'
- reroute_438_1.use_custom_color = False
- reroute_438_1.width = 16.0
-
- reroute_439_1 = test_group.nodes.new('NodeReroute')
- reroute_439_1.parent = test_group.nodes.get('Frame.012')
- reroute_439_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_439_1.hide = False
- reroute_439_1.label = 'DO NOT TOUCH'
- reroute_439_1.location = (191.4072265625, -1940.949951171875)
- reroute_439_1.mute = False
- reroute_439_1.name = 'Reroute.439'
- reroute_439_1.use_custom_color = False
- reroute_439_1.width = 16.0
-
- reroute_440_1 = test_group.nodes.new('NodeReroute')
- reroute_440_1.parent = test_group.nodes.get('Frame.012')
- reroute_440_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_440_1.hide = False
- reroute_440_1.label = 'DO NOT TOUCH'
- reroute_440_1.location = (171.4072265625, -3180.949951171875)
- reroute_440_1.mute = False
- reroute_440_1.name = 'Reroute.440'
- reroute_440_1.use_custom_color = False
- reroute_440_1.width = 16.0
-
- reroute_441_1 = test_group.nodes.new('NodeReroute')
- reroute_441_1.parent = test_group.nodes.get('Frame.012')
- reroute_441_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_441_1.hide = False
- reroute_441_1.label = 'DO NOT TOUCH'
- reroute_441_1.location = (151.4072265625, -4420.9501953125)
- reroute_441_1.mute = False
- reroute_441_1.name = 'Reroute.441'
- reroute_441_1.use_custom_color = False
- reroute_441_1.width = 16.0
-
- reroute_426_1 = test_group.nodes.new('NodeReroute')
- reroute_426_1.parent = test_group.nodes.get('Frame.012')
- reroute_426_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_426_1.hide = False
- reroute_426_1.label = 'DO NOT TOUCH'
- reroute_426_1.location = (251.4072265625, -1273.06005859375)
- reroute_426_1.mute = False
- reroute_426_1.name = 'Reroute.426'
- reroute_426_1.use_custom_color = False
- reroute_426_1.width = 16.0
-
- reroute_428_1 = test_group.nodes.new('NodeReroute')
- reroute_428_1.parent = test_group.nodes.get('Frame.012')
- reroute_428_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_428_1.hide = False
- reroute_428_1.label = 'DO NOT TOUCH'
- reroute_428_1.location = (211.4072265625, -1313.06005859375)
- reroute_428_1.mute = False
- reroute_428_1.name = 'Reroute.428'
- reroute_428_1.use_custom_color = False
- reroute_428_1.width = 16.0
-
- reroute_430_1 = test_group.nodes.new('NodeReroute')
- reroute_430_1.parent = test_group.nodes.get('Frame.012')
- reroute_430_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_430_1.hide = False
- reroute_430_1.label = 'DO NOT TOUCH'
- reroute_430_1.location = (171.4072265625, -1353.06005859375)
- reroute_430_1.mute = False
- reroute_430_1.name = 'Reroute.430'
- reroute_430_1.use_custom_color = False
- reroute_430_1.width = 16.0
-
- reroute_431_1 = test_group.nodes.new('NodeReroute')
- reroute_431_1.parent = test_group.nodes.get('Frame.012')
- reroute_431_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_431_1.hide = False
- reroute_431_1.label = 'DO NOT TOUCH'
- reroute_431_1.location = (151.4072265625, -1373.06005859375)
- reroute_431_1.mute = False
- reroute_431_1.name = 'Reroute.431'
- reroute_431_1.use_custom_color = False
- reroute_431_1.width = 16.0
-
- reroute_427_1 = test_group.nodes.new('NodeReroute')
- reroute_427_1.parent = test_group.nodes.get('Frame.012')
- reroute_427_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_427_1.hide = False
- reroute_427_1.label = 'DO NOT TOUCH'
- reroute_427_1.location = (231.4072265625, -1293.06005859375)
- reroute_427_1.mute = False
- reroute_427_1.name = 'Reroute.427'
- reroute_427_1.use_custom_color = False
- reroute_427_1.width = 16.0
-
- reroute_429_1 = test_group.nodes.new('NodeReroute')
- reroute_429_1.parent = test_group.nodes.get('Frame.012')
- reroute_429_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_429_1.hide = False
- reroute_429_1.label = 'DO NOT TOUCH'
- reroute_429_1.location = (191.4072265625, -1333.06005859375)
- reroute_429_1.mute = False
- reroute_429_1.name = 'Reroute.429'
- reroute_429_1.use_custom_color = False
- reroute_429_1.width = 16.0
-
- reroute_460_1 = test_group.nodes.new('NodeReroute')
- reroute_460_1.parent = test_group.nodes.get('Frame.012')
- reroute_460_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_460_1.hide = False
- reroute_460_1.label = 'DO NOT TOUCH'
- reroute_460_1.location = (-68.5927734375, 2019.050048828125)
- reroute_460_1.mute = False
- reroute_460_1.name = 'Reroute.460'
- reroute_460_1.use_custom_color = False
- reroute_460_1.width = 16.0
-
- reroute_455_1 = test_group.nodes.new('NodeReroute')
- reroute_455_1.parent = test_group.nodes.get('Frame.012')
- reroute_455_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_455_1.hide = False
- reroute_455_1.label = 'DO NOT TOUCH'
- reroute_455_1.location = (-88.5927734375, 779.050048828125)
- reroute_455_1.mute = False
- reroute_455_1.name = 'Reroute.455'
- reroute_455_1.use_custom_color = False
- reroute_455_1.width = 16.0
-
- reroute_456_1 = test_group.nodes.new('NodeReroute')
- reroute_456_1.parent = test_group.nodes.get('Frame.012')
- reroute_456_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_456_1.hide = False
- reroute_456_1.label = 'DO NOT TOUCH'
- reroute_456_1.location = (-108.5927734375, -460.949951171875)
- reroute_456_1.mute = False
- reroute_456_1.name = 'Reroute.456'
- reroute_456_1.use_custom_color = False
- reroute_456_1.width = 16.0
-
- reroute_457_1 = test_group.nodes.new('NodeReroute')
- reroute_457_1.parent = test_group.nodes.get('Frame.012')
- reroute_457_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_457_1.hide = False
- reroute_457_1.label = 'DO NOT TOUCH'
- reroute_457_1.location = (-128.5927734375, -1700.949951171875)
- reroute_457_1.mute = False
- reroute_457_1.name = 'Reroute.457'
- reroute_457_1.use_custom_color = False
- reroute_457_1.width = 16.0
-
- reroute_458_1 = test_group.nodes.new('NodeReroute')
- reroute_458_1.parent = test_group.nodes.get('Frame.012')
- reroute_458_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_458_1.hide = False
- reroute_458_1.label = 'DO NOT TOUCH'
- reroute_458_1.location = (-148.5927734375, -2940.949951171875)
- reroute_458_1.mute = False
- reroute_458_1.name = 'Reroute.458'
- reroute_458_1.use_custom_color = False
- reroute_458_1.width = 16.0
-
- reroute_443_1 = test_group.nodes.new('NodeReroute')
- reroute_443_1.parent = test_group.nodes.get('Frame.012')
- reroute_443_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_443_1.hide = False
- reroute_443_1.label = 'DO NOT TOUCH'
- reroute_443_1.location = (-68.5927734375, -840.949951171875)
- reroute_443_1.mute = False
- reroute_443_1.name = 'Reroute.443'
- reroute_443_1.use_custom_color = False
- reroute_443_1.width = 16.0
-
- reroute_444_1 = test_group.nodes.new('NodeReroute')
- reroute_444_1.parent = test_group.nodes.get('Frame.012')
- reroute_444_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_444_1.hide = False
- reroute_444_1.label = 'DO NOT TOUCH'
- reroute_444_1.location = (-88.5927734375, -860.949951171875)
- reroute_444_1.mute = False
- reroute_444_1.name = 'Reroute.444'
- reroute_444_1.use_custom_color = False
- reroute_444_1.width = 16.0
-
- reroute_445_1 = test_group.nodes.new('NodeReroute')
- reroute_445_1.parent = test_group.nodes.get('Frame.012')
- reroute_445_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_445_1.hide = False
- reroute_445_1.label = 'DO NOT TOUCH'
- reroute_445_1.location = (-108.5927734375, -880.949951171875)
- reroute_445_1.mute = False
- reroute_445_1.name = 'Reroute.445'
- reroute_445_1.use_custom_color = False
- reroute_445_1.width = 16.0
-
- reroute_446_1 = test_group.nodes.new('NodeReroute')
- reroute_446_1.parent = test_group.nodes.get('Frame.012')
- reroute_446_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_446_1.hide = False
- reroute_446_1.label = 'DO NOT TOUCH'
- reroute_446_1.location = (-128.5927734375, -900.949951171875)
- reroute_446_1.mute = False
- reroute_446_1.name = 'Reroute.446'
- reroute_446_1.use_custom_color = False
- reroute_446_1.width = 16.0
-
- reroute_447_1 = test_group.nodes.new('NodeReroute')
- reroute_447_1.parent = test_group.nodes.get('Frame.012')
- reroute_447_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_447_1.hide = False
- reroute_447_1.label = 'DO NOT TOUCH'
- reroute_447_1.location = (-148.5927734375, -920.949951171875)
- reroute_447_1.mute = False
- reroute_447_1.name = 'Reroute.447'
- reroute_447_1.use_custom_color = False
- reroute_447_1.width = 16.0
-
- reroute_454_1 = test_group.nodes.new('NodeReroute')
- reroute_454_1.parent = test_group.nodes.get('Frame.012')
- reroute_454_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_454_1.hide = False
- reroute_454_1.label = 'DO NOT TOUCH'
- reroute_454_1.location = (-188.5927734375, -960.949951171875)
- reroute_454_1.mute = False
- reroute_454_1.name = 'Reroute.454'
- reroute_454_1.use_custom_color = False
- reroute_454_1.width = 16.0
-
- reroute_449_1 = test_group.nodes.new('NodeReroute')
- reroute_449_1.parent = test_group.nodes.get('Frame.012')
- reroute_449_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_449_1.hide = False
- reroute_449_1.label = 'DO NOT TOUCH'
- reroute_449_1.location = (-208.5927734375, -980.949951171875)
- reroute_449_1.mute = False
- reroute_449_1.name = 'Reroute.449'
- reroute_449_1.use_custom_color = False
- reroute_449_1.width = 16.0
-
- reroute_450_1 = test_group.nodes.new('NodeReroute')
- reroute_450_1.parent = test_group.nodes.get('Frame.012')
- reroute_450_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_450_1.hide = False
- reroute_450_1.label = 'DO NOT TOUCH'
- reroute_450_1.location = (-228.5927734375, -1000.949951171875)
- reroute_450_1.mute = False
- reroute_450_1.name = 'Reroute.450'
- reroute_450_1.use_custom_color = False
- reroute_450_1.width = 16.0
-
- reroute_451_1 = test_group.nodes.new('NodeReroute')
- reroute_451_1.parent = test_group.nodes.get('Frame.012')
- reroute_451_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_451_1.hide = False
- reroute_451_1.label = 'DO NOT TOUCH'
- reroute_451_1.location = (-248.5927734375, -1020.949951171875)
- reroute_451_1.mute = False
- reroute_451_1.name = 'Reroute.451'
- reroute_451_1.use_custom_color = False
- reroute_451_1.width = 16.0
-
- reroute_452_1 = test_group.nodes.new('NodeReroute')
- reroute_452_1.parent = test_group.nodes.get('Frame.012')
- reroute_452_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_452_1.hide = False
- reroute_452_1.label = 'DO NOT TOUCH'
- reroute_452_1.location = (-268.5927734375, -1040.949951171875)
- reroute_452_1.mute = False
- reroute_452_1.name = 'Reroute.452'
- reroute_452_1.use_custom_color = False
- reroute_452_1.width = 16.0
-
- reroute_453_1 = test_group.nodes.new('NodeReroute')
- reroute_453_1.parent = test_group.nodes.get('Frame.012')
- reroute_453_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_453_1.hide = False
- reroute_453_1.label = 'DO NOT TOUCH'
- reroute_453_1.location = (-288.5927734375, -1060.949951171875)
- reroute_453_1.mute = False
- reroute_453_1.name = 'Reroute.453'
- reroute_453_1.use_custom_color = False
- reroute_453_1.width = 16.0
-
- reroute_467_1 = test_group.nodes.new('NodeReroute')
- reroute_467_1.parent = test_group.nodes.get('Frame.012')
- reroute_467_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_467_1.hide = False
- reroute_467_1.label = 'DO NOT TOUCH'
- reroute_467_1.location = (-208.5927734375, 579.050048828125)
- reroute_467_1.mute = False
- reroute_467_1.name = 'Reroute.467'
- reroute_467_1.use_custom_color = False
- reroute_467_1.width = 16.0
-
- reroute_468_1 = test_group.nodes.new('NodeReroute')
- reroute_468_1.parent = test_group.nodes.get('Frame.012')
- reroute_468_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_468_1.hide = False
- reroute_468_1.label = 'DO NOT TOUCH'
- reroute_468_1.location = (-228.5927734375, -680.949951171875)
- reroute_468_1.mute = False
- reroute_468_1.name = 'Reroute.468'
- reroute_468_1.use_custom_color = False
- reroute_468_1.width = 16.0
-
- reroute_469_1 = test_group.nodes.new('NodeReroute')
- reroute_469_1.parent = test_group.nodes.get('Frame.012')
- reroute_469_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_469_1.hide = False
- reroute_469_1.label = 'DO NOT TOUCH'
- reroute_469_1.location = (-248.5927734375, -1920.949951171875)
- reroute_469_1.mute = False
- reroute_469_1.name = 'Reroute.469'
- reroute_469_1.use_custom_color = False
- reroute_469_1.width = 16.0
-
- reroute_470_1 = test_group.nodes.new('NodeReroute')
- reroute_470_1.parent = test_group.nodes.get('Frame.012')
- reroute_470_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_470_1.hide = False
- reroute_470_1.label = 'DO NOT TOUCH'
- reroute_470_1.location = (-268.5927734375, -3160.949951171875)
- reroute_470_1.mute = False
- reroute_470_1.name = 'Reroute.470'
- reroute_470_1.use_custom_color = False
- reroute_470_1.width = 16.0
-
- reroute_471_1 = test_group.nodes.new('NodeReroute')
- reroute_471_1.parent = test_group.nodes.get('Frame.012')
- reroute_471_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_471_1.hide = False
- reroute_471_1.label = 'DO NOT TOUCH'
- reroute_471_1.location = (-288.5927734375, -4400.9501953125)
- reroute_471_1.mute = False
- reroute_471_1.name = 'Reroute.471'
- reroute_471_1.use_custom_color = False
- reroute_471_1.width = 16.0
-
- reroute_334_1 = test_group.nodes.new('NodeReroute')
- reroute_334_1.parent = test_group.nodes.get('Frame.012')
- reroute_334_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_334_1.hide = False
- reroute_334_1.label = 'DO NOT TOUCH'
- reroute_334_1.location = (711.4072265625, 359.050048828125)
- reroute_334_1.mute = False
- reroute_334_1.name = 'Reroute.334'
- reroute_334_1.use_custom_color = False
- reroute_334_1.width = 16.0
-
- reroute_410_1 = test_group.nodes.new('NodeReroute')
- reroute_410_1.parent = test_group.nodes.get('Frame.012')
- reroute_410_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_410_1.hide = False
- reroute_410_1.label = 'DO NOT TOUCH'
- reroute_410_1.location = (691.4072265625, 339.050048828125)
- reroute_410_1.mute = False
- reroute_410_1.name = 'Reroute.410'
- reroute_410_1.use_custom_color = False
- reroute_410_1.width = 16.0
-
- reroute_411_1 = test_group.nodes.new('NodeReroute')
- reroute_411_1.parent = test_group.nodes.get('Frame.012')
- reroute_411_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_411_1.hide = False
- reroute_411_1.label = 'DO NOT TOUCH'
- reroute_411_1.location = (671.4072265625, 319.050048828125)
- reroute_411_1.mute = False
- reroute_411_1.name = 'Reroute.411'
- reroute_411_1.use_custom_color = False
- reroute_411_1.width = 16.0
-
- reroute_412_1 = test_group.nodes.new('NodeReroute')
- reroute_412_1.parent = test_group.nodes.get('Frame.012')
- reroute_412_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_412_1.hide = False
- reroute_412_1.label = 'DO NOT TOUCH'
- reroute_412_1.location = (651.4072265625, 299.050048828125)
- reroute_412_1.mute = False
- reroute_412_1.name = 'Reroute.412'
- reroute_412_1.use_custom_color = False
- reroute_412_1.width = 16.0
-
- reroute_413_1 = test_group.nodes.new('NodeReroute')
- reroute_413_1.parent = test_group.nodes.get('Frame.012')
- reroute_413_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_413_1.hide = False
- reroute_413_1.label = 'DO NOT TOUCH'
- reroute_413_1.location = (631.4072265625, 279.050048828125)
- reroute_413_1.mute = False
- reroute_413_1.name = 'Reroute.413'
- reroute_413_1.use_custom_color = False
- reroute_413_1.width = 16.0
-
- reroute_414_1 = test_group.nodes.new('NodeReroute')
- reroute_414_1.parent = test_group.nodes.get('Frame.012')
- reroute_414_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_414_1.hide = False
- reroute_414_1.label = 'DO NOT TOUCH'
- reroute_414_1.location = (611.4072265625, 259.050048828125)
- reroute_414_1.mute = False
- reroute_414_1.name = 'Reroute.414'
- reroute_414_1.use_custom_color = False
- reroute_414_1.width = 16.0
-
- reroute_485_1 = test_group.nodes.new('NodeReroute')
- reroute_485_1.parent = test_group.nodes.get('Frame.012')
- reroute_485_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_485_1.hide = False
- reroute_485_1.label = 'DO NOT TOUCH'
- reroute_485_1.location = (-388.5927734375, 359.050048828125)
- reroute_485_1.mute = False
- reroute_485_1.name = 'Reroute.485'
- reroute_485_1.use_custom_color = False
- reroute_485_1.width = 16.0
-
- reroute_486_1 = test_group.nodes.new('NodeReroute')
- reroute_486_1.parent = test_group.nodes.get('Frame.012')
- reroute_486_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_486_1.hide = False
- reroute_486_1.label = 'DO NOT TOUCH'
- reroute_486_1.location = (-408.5927734375, -880.949951171875)
- reroute_486_1.mute = False
- reroute_486_1.name = 'Reroute.486'
- reroute_486_1.use_custom_color = False
- reroute_486_1.width = 16.0
-
- reroute_488_1 = test_group.nodes.new('NodeReroute')
- reroute_488_1.parent = test_group.nodes.get('Frame.012')
- reroute_488_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_488_1.hide = False
- reroute_488_1.label = 'DO NOT TOUCH'
- reroute_488_1.location = (-448.5927734375, -3360.949951171875)
- reroute_488_1.mute = False
- reroute_488_1.name = 'Reroute.488'
- reroute_488_1.use_custom_color = False
- reroute_488_1.width = 16.0
-
- reroute_489_1 = test_group.nodes.new('NodeReroute')
- reroute_489_1.parent = test_group.nodes.get('Frame.012')
- reroute_489_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_489_1.hide = False
- reroute_489_1.label = 'DO NOT TOUCH'
- reroute_489_1.location = (-468.5927734375, -4600.9501953125)
- reroute_489_1.mute = False
- reroute_489_1.name = 'Reroute.489'
- reroute_489_1.use_custom_color = False
- reroute_489_1.width = 16.0
-
- reroute_487_1 = test_group.nodes.new('NodeReroute')
- reroute_487_1.parent = test_group.nodes.get('Frame.012')
- reroute_487_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_487_1.hide = False
- reroute_487_1.label = 'DO NOT TOUCH'
- reroute_487_1.location = (-428.5927734375, -2120.949951171875)
- reroute_487_1.mute = False
- reroute_487_1.name = 'Reroute.487'
- reroute_487_1.use_custom_color = False
- reroute_487_1.width = 16.0
-
- reroute_369_1 = test_group.nodes.new('NodeReroute')
- reroute_369_1.parent = test_group.nodes.get('Frame.012')
- reroute_369_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_369_1.hide = False
- reroute_369_1.label = 'DO NOT TOUCH'
- reroute_369_1.location = (-368.5927734375, -2160.949951171875)
- reroute_369_1.mute = False
- reroute_369_1.name = 'Reroute.369'
- reroute_369_1.use_custom_color = False
- reroute_369_1.width = 16.0
-
- reroute_480_1 = test_group.nodes.new('NodeReroute')
- reroute_480_1.parent = test_group.nodes.get('Frame.012')
- reroute_480_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_480_1.hide = False
- reroute_480_1.label = 'DO NOT TOUCH'
- reroute_480_1.location = (-388.5927734375, -2180.949951171875)
- reroute_480_1.mute = False
- reroute_480_1.name = 'Reroute.480'
- reroute_480_1.use_custom_color = False
- reroute_480_1.width = 16.0
-
- reroute_481_1 = test_group.nodes.new('NodeReroute')
- reroute_481_1.parent = test_group.nodes.get('Frame.012')
- reroute_481_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_481_1.hide = False
- reroute_481_1.label = 'DO NOT TOUCH'
- reroute_481_1.location = (-408.5927734375, -2200.949951171875)
- reroute_481_1.mute = False
- reroute_481_1.name = 'Reroute.481'
- reroute_481_1.use_custom_color = False
- reroute_481_1.width = 16.0
-
- reroute_482_1 = test_group.nodes.new('NodeReroute')
- reroute_482_1.parent = test_group.nodes.get('Frame.012')
- reroute_482_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_482_1.hide = False
- reroute_482_1.label = 'DO NOT TOUCH'
- reroute_482_1.location = (-428.5927734375, -2220.949951171875)
- reroute_482_1.mute = False
- reroute_482_1.name = 'Reroute.482'
- reroute_482_1.use_custom_color = False
- reroute_482_1.width = 16.0
-
- reroute_483_1 = test_group.nodes.new('NodeReroute')
- reroute_483_1.parent = test_group.nodes.get('Frame.012')
- reroute_483_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_483_1.hide = False
- reroute_483_1.label = 'DO NOT TOUCH'
- reroute_483_1.location = (-448.5927734375, -2240.949951171875)
- reroute_483_1.mute = False
- reroute_483_1.name = 'Reroute.483'
- reroute_483_1.use_custom_color = False
- reroute_483_1.width = 16.0
-
- reroute_484_1 = test_group.nodes.new('NodeReroute')
- reroute_484_1.parent = test_group.nodes.get('Frame.012')
- reroute_484_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_484_1.hide = False
- reroute_484_1.label = 'DO NOT TOUCH'
- reroute_484_1.location = (-468.5927734375, -2260.949951171875)
- reroute_484_1.mute = False
- reroute_484_1.name = 'Reroute.484'
- reroute_484_1.use_custom_color = False
- reroute_484_1.width = 16.0
-
- reroute_370_1 = test_group.nodes.new('NodeReroute')
- reroute_370_1.parent = test_group.nodes.get('Frame.012')
- reroute_370_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_370_1.hide = False
- reroute_370_1.label = 'DO NOT TOUCH'
- reroute_370_1.location = (-368.5927734375, 1599.050048828125)
- reroute_370_1.mute = False
- reroute_370_1.name = 'Reroute.370'
- reroute_370_1.use_custom_color = False
- reroute_370_1.width = 16.0
-
- reroute_500_1 = test_group.nodes.new('NodeReroute')
- reroute_500_1.parent = test_group.nodes.get('Frame.012')
- reroute_500_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_500_1.hide = False
- reroute_500_1.label = 'DO NOT TOUCH'
- reroute_500_1.location = (-708.5927734375, -3760.949951171875)
- reroute_500_1.mute = False
- reroute_500_1.name = 'Reroute.500'
- reroute_500_1.use_custom_color = False
- reroute_500_1.width = 16.0
-
- reroute_501_1 = test_group.nodes.new('NodeReroute')
- reroute_501_1.parent = test_group.nodes.get('Frame.012')
- reroute_501_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_501_1.hide = False
- reroute_501_1.label = 'DO NOT TOUCH'
- reroute_501_1.location = (-728.5927734375, -3780.949951171875)
- reroute_501_1.mute = False
- reroute_501_1.name = 'Reroute.501'
- reroute_501_1.use_custom_color = False
- reroute_501_1.width = 16.0
-
- reroute_496_1 = test_group.nodes.new('NodeReroute')
- reroute_496_1.parent = test_group.nodes.get('Frame.012')
- reroute_496_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_496_1.hide = False
- reroute_496_1.label = 'DO NOT TOUCH'
- reroute_496_1.location = (-748.5927734375, -3800.949951171875)
- reroute_496_1.mute = False
- reroute_496_1.name = 'Reroute.496'
- reroute_496_1.use_custom_color = False
- reroute_496_1.width = 16.0
-
- reroute_497_1 = test_group.nodes.new('NodeReroute')
- reroute_497_1.parent = test_group.nodes.get('Frame.012')
- reroute_497_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_497_1.hide = False
- reroute_497_1.label = 'DO NOT TOUCH'
- reroute_497_1.location = (-768.5927734375, -3820.949951171875)
- reroute_497_1.mute = False
- reroute_497_1.name = 'Reroute.497'
- reroute_497_1.use_custom_color = False
- reroute_497_1.width = 16.0
-
- reroute_498_1 = test_group.nodes.new('NodeReroute')
- reroute_498_1.parent = test_group.nodes.get('Frame.012')
- reroute_498_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_498_1.hide = False
- reroute_498_1.label = 'DO NOT TOUCH'
- reroute_498_1.location = (-788.5927734375, -3840.949951171875)
- reroute_498_1.mute = False
- reroute_498_1.name = 'Reroute.498'
- reroute_498_1.use_custom_color = False
- reroute_498_1.width = 16.0
-
- reroute_499_1 = test_group.nodes.new('NodeReroute')
- reroute_499_1.parent = test_group.nodes.get('Frame.012')
- reroute_499_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_499_1.hide = False
- reroute_499_1.label = 'DO NOT TOUCH'
- reroute_499_1.location = (-808.5927734375, -3860.949951171875)
- reroute_499_1.mute = False
- reroute_499_1.name = 'Reroute.499'
- reroute_499_1.use_custom_color = False
- reroute_499_1.width = 16.0
-
- reroute_503_1 = test_group.nodes.new('NodeReroute')
- reroute_503_1.parent = test_group.nodes.get('Frame.012')
- reroute_503_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_503_1.hide = False
- reroute_503_1.label = 'DO NOT TOUCH'
- reroute_503_1.location = (-708.5927734375, 1179.050048828125)
- reroute_503_1.mute = False
- reroute_503_1.name = 'Reroute.503'
- reroute_503_1.use_custom_color = False
- reroute_503_1.width = 16.0
-
- reroute_502_1 = test_group.nodes.new('NodeReroute')
- reroute_502_1.parent = test_group.nodes.get('Frame.012')
- reroute_502_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_502_1.hide = False
- reroute_502_1.label = 'DO NOT TOUCH'
- reroute_502_1.location = (-728.5927734375, -60.949951171875)
- reroute_502_1.mute = False
- reroute_502_1.name = 'Reroute.502'
- reroute_502_1.use_custom_color = False
- reroute_502_1.width = 16.0
-
- reroute_505_1 = test_group.nodes.new('NodeReroute')
- reroute_505_1.parent = test_group.nodes.get('Frame.012')
- reroute_505_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_505_1.hide = False
- reroute_505_1.label = 'DO NOT TOUCH'
- reroute_505_1.location = (-768.5927734375, -2540.949951171875)
- reroute_505_1.mute = False
- reroute_505_1.name = 'Reroute.505'
- reroute_505_1.use_custom_color = False
- reroute_505_1.width = 16.0
-
- reroute_504_1 = test_group.nodes.new('NodeReroute')
- reroute_504_1.parent = test_group.nodes.get('Frame.012')
- reroute_504_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_504_1.hide = False
- reroute_504_1.label = 'DO NOT TOUCH'
- reroute_504_1.location = (-748.5927734375, -1300.949951171875)
- reroute_504_1.mute = False
- reroute_504_1.name = 'Reroute.504'
- reroute_504_1.use_custom_color = False
- reroute_504_1.width = 16.0
-
- reroute_506_1 = test_group.nodes.new('NodeReroute')
- reroute_506_1.parent = test_group.nodes.get('Frame.012')
- reroute_506_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_506_1.hide = False
- reroute_506_1.label = 'DO NOT TOUCH'
- reroute_506_1.location = (-788.5927734375, -3780.949951171875)
- reroute_506_1.mute = False
- reroute_506_1.name = 'Reroute.506'
- reroute_506_1.use_custom_color = False
- reroute_506_1.width = 16.0
-
- reroute_507_1 = test_group.nodes.new('NodeReroute')
- reroute_507_1.parent = test_group.nodes.get('Frame.012')
- reroute_507_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_507_1.hide = False
- reroute_507_1.label = 'DO NOT TOUCH'
- reroute_507_1.location = (-808.5927734375, -5020.9501953125)
- reroute_507_1.mute = False
- reroute_507_1.name = 'Reroute.507'
- reroute_507_1.use_custom_color = False
- reroute_507_1.width = 16.0
-
- reroute_472_1 = test_group.nodes.new('NodeReroute')
- reroute_472_1.parent = test_group.nodes.get('Frame.012')
- reroute_472_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_472_1.hide = False
- reroute_472_1.label = 'DO NOT TOUCH'
- reroute_472_1.location = (-188.5927734375, 1839.050048828125)
- reroute_472_1.mute = False
- reroute_472_1.name = 'Reroute.472'
- reroute_472_1.use_custom_color = False
- reroute_472_1.width = 16.0
-
- reroute_495_1 = test_group.nodes.new('NodeReroute')
- reroute_495_1.parent = test_group.nodes.get('Frame.012')
- reroute_495_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_495_1.hide = False
- reroute_495_1.label = 'DO NOT TOUCH'
- reroute_495_1.location = (-1048.5927734375, -5200.9501953125)
- reroute_495_1.mute = False
- reroute_495_1.name = 'Reroute.495'
- reroute_495_1.use_custom_color = False
- reroute_495_1.width = 16.0
-
- reroute_514_1 = test_group.nodes.new('NodeReroute')
- reroute_514_1.parent = test_group.nodes.get('Frame.012')
- reroute_514_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_514_1.hide = False
- reroute_514_1.label = 'DO NOT TOUCH'
- reroute_514_1.location = (-1068.5927734375, -5220.9501953125)
- reroute_514_1.mute = False
- reroute_514_1.name = 'Reroute.514'
- reroute_514_1.use_custom_color = False
- reroute_514_1.width = 16.0
-
- reroute_515_1 = test_group.nodes.new('NodeReroute')
- reroute_515_1.parent = test_group.nodes.get('Frame.012')
- reroute_515_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_515_1.hide = False
- reroute_515_1.label = 'DO NOT TOUCH'
- reroute_515_1.location = (-1088.5927734375, -5240.9501953125)
- reroute_515_1.mute = False
- reroute_515_1.name = 'Reroute.515'
- reroute_515_1.use_custom_color = False
- reroute_515_1.width = 16.0
-
- reroute_516_1 = test_group.nodes.new('NodeReroute')
- reroute_516_1.parent = test_group.nodes.get('Frame.012')
- reroute_516_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_516_1.hide = False
- reroute_516_1.label = 'DO NOT TOUCH'
- reroute_516_1.location = (-1108.5927734375, -5260.9501953125)
- reroute_516_1.mute = False
- reroute_516_1.name = 'Reroute.516'
- reroute_516_1.use_custom_color = False
- reroute_516_1.width = 16.0
-
- reroute_517_1 = test_group.nodes.new('NodeReroute')
- reroute_517_1.parent = test_group.nodes.get('Frame.012')
- reroute_517_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_517_1.hide = False
- reroute_517_1.label = 'DO NOT TOUCH'
- reroute_517_1.location = (-1128.5927734375, -5280.9501953125)
- reroute_517_1.mute = False
- reroute_517_1.name = 'Reroute.517'
- reroute_517_1.use_custom_color = False
- reroute_517_1.width = 16.0
-
- reroute_524_1 = test_group.nodes.new('NodeReroute')
- reroute_524_1.parent = test_group.nodes.get('Frame.012')
- reroute_524_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_524_1.hide = False
- reroute_524_1.label = 'DO NOT TOUCH'
- reroute_524_1.location = (-1048.5927734375, 1519.050048828125)
- reroute_524_1.mute = False
- reroute_524_1.name = 'Reroute.524'
- reroute_524_1.use_custom_color = False
- reroute_524_1.width = 16.0
-
- reroute_519_1 = test_group.nodes.new('NodeReroute')
- reroute_519_1.parent = test_group.nodes.get('Frame.012')
- reroute_519_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_519_1.hide = False
- reroute_519_1.label = 'DO NOT TOUCH'
- reroute_519_1.location = (-1068.5927734375, 259.050048828125)
- reroute_519_1.mute = False
- reroute_519_1.name = 'Reroute.519'
- reroute_519_1.use_custom_color = False
- reroute_519_1.width = 16.0
-
- reroute_520_1 = test_group.nodes.new('NodeReroute')
- reroute_520_1.parent = test_group.nodes.get('Frame.012')
- reroute_520_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_520_1.hide = False
- reroute_520_1.label = 'DO NOT TOUCH'
- reroute_520_1.location = (-1088.5927734375, -980.949951171875)
- reroute_520_1.mute = False
- reroute_520_1.name = 'Reroute.520'
- reroute_520_1.use_custom_color = False
- reroute_520_1.width = 16.0
-
- reroute_522_1 = test_group.nodes.new('NodeReroute')
- reroute_522_1.parent = test_group.nodes.get('Frame.012')
- reroute_522_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_522_1.hide = False
- reroute_522_1.label = 'DO NOT TOUCH'
- reroute_522_1.location = (-1128.5927734375, -3460.949951171875)
- reroute_522_1.mute = False
- reroute_522_1.name = 'Reroute.522'
- reroute_522_1.use_custom_color = False
- reroute_522_1.width = 16.0
-
- reroute_521_1 = test_group.nodes.new('NodeReroute')
- reroute_521_1.parent = test_group.nodes.get('Frame.012')
- reroute_521_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_521_1.hide = False
- reroute_521_1.label = 'DO NOT TOUCH'
- reroute_521_1.location = (-1108.5927734375, -2220.949951171875)
- reroute_521_1.mute = False
- reroute_521_1.name = 'Reroute.521'
- reroute_521_1.use_custom_color = False
- reroute_521_1.width = 16.0
-
- reroute_448_1 = test_group.nodes.new('NodeReroute')
- reroute_448_1.parent = test_group.nodes.get('Frame.012')
- reroute_448_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_448_1.hide = False
- reroute_448_1.label = 'DO NOT TOUCH'
- reroute_448_1.location = (-168.5927734375, -940.949951171875)
- reroute_448_1.mute = False
- reroute_448_1.name = 'Reroute.448'
- reroute_448_1.use_custom_color = False
- reroute_448_1.width = 16.0
-
- reroute_459_1 = test_group.nodes.new('NodeReroute')
- reroute_459_1.parent = test_group.nodes.get('Frame.012')
- reroute_459_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- reroute_459_1.hide = False
- reroute_459_1.label = 'DO NOT TOUCH'
- reroute_459_1.location = (-168.5927734375, -4180.9501953125)
- reroute_459_1.mute = False
- reroute_459_1.name = 'Reroute.459'
- reroute_459_1.use_custom_color = False
- reroute_459_1.width = 16.0
-
- combine_xyz_031_1 = test_group.nodes.new('ShaderNodeCombineXYZ')
- combine_xyz_031_1.parent = test_group.nodes.get('Frame.012')
- combine_xyz_031_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- combine_xyz_031_1.hide = False
- combine_xyz_031_1.label = 'DO NOT TOUCH'
- combine_xyz_031_1.location = (-628.5927734375, 1639.050048828125)
- combine_xyz_031_1.mute = False
- combine_xyz_031_1.name = 'Combine XYZ.031'
- combine_xyz_031_1.use_custom_color = False
- combine_xyz_031_1.width = 127.601318359375
- combine_xyz_031_1.inputs[0].default_value = 0.0
- combine_xyz_031_1.inputs[1].default_value = 0.0
- combine_xyz_031_1.inputs[2].default_value = 0.0
- combine_xyz_031_1.outputs[0].default_value = (0.0, 0.0, 0.0)
-
- combine_xyz_030_1 = test_group.nodes.new('ShaderNodeCombineXYZ')
- combine_xyz_030_1.parent = test_group.nodes.get('Frame.012')
- combine_xyz_030_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- combine_xyz_030_1.hide = False
- combine_xyz_030_1.label = 'DO NOT TOUCH'
- combine_xyz_030_1.location = (-28.5927734375, 1819.050048828125)
- combine_xyz_030_1.mute = False
- combine_xyz_030_1.name = 'Combine XYZ.030'
- combine_xyz_030_1.use_custom_color = False
- combine_xyz_030_1.width = 125.422119140625
- combine_xyz_030_1.inputs[0].default_value = 0.0
- combine_xyz_030_1.inputs[1].default_value = 0.0
- combine_xyz_030_1.inputs[2].default_value = 0.0
- combine_xyz_030_1.outputs[0].default_value = (0.0, 0.0, 0.0)
-
- combine_xyz_1 = test_group.nodes.new('ShaderNodeCombineXYZ')
- combine_xyz_1.parent = test_group.nodes.get('Frame.012')
- combine_xyz_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- combine_xyz_1.hide = False
- combine_xyz_1.label = 'DO NOT TOUCH'
- combine_xyz_1.location = (431.4072265625, 1979.050048828125)
- combine_xyz_1.mute = False
- combine_xyz_1.name = 'Combine XYZ'
- combine_xyz_1.use_custom_color = False
- combine_xyz_1.width = 116.125
- combine_xyz_1.inputs[0].default_value = 0.0
- combine_xyz_1.inputs[1].default_value = 0.0
- combine_xyz_1.inputs[2].default_value = 0.0
- combine_xyz_1.outputs[0].default_value = (0.0, 0.0, 0.0)
-
- combine_xyz_012_1 = test_group.nodes.new('ShaderNodeCombineXYZ')
- combine_xyz_012_1.parent = test_group.nodes.get('Frame.012')
- combine_xyz_012_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- combine_xyz_012_1.hide = False
- combine_xyz_012_1.label = 'DO NOT TOUCH'
- combine_xyz_012_1.location = (1171.4072265625, 2199.050048828125)
- combine_xyz_012_1.mute = False
- combine_xyz_012_1.name = 'Combine XYZ.012'
- combine_xyz_012_1.use_custom_color = False
- combine_xyz_012_1.width = 123.68994140625
- combine_xyz_012_1.inputs[0].default_value = -1.6666669845581055
- combine_xyz_012_1.inputs[1].default_value = 5.2083330154418945
- combine_xyz_012_1.inputs[2].default_value = 0.6499999761581421
- combine_xyz_012_1.outputs[0].default_value = (0.0, 0.0, 0.0)
-
- combine_xyz_013_1 = test_group.nodes.new('ShaderNodeCombineXYZ')
- combine_xyz_013_1.parent = test_group.nodes.get('Frame.012')
- combine_xyz_013_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- combine_xyz_013_1.hide = False
- combine_xyz_013_1.label = 'DO NOT TOUCH'
- combine_xyz_013_1.location = (1171.4072265625, 2079.050048828125)
- combine_xyz_013_1.mute = False
- combine_xyz_013_1.name = 'Combine XYZ.013'
- combine_xyz_013_1.use_custom_color = False
- combine_xyz_013_1.width = 123.616455078125
- combine_xyz_013_1.inputs[0].default_value = 0.23999999463558197
- combine_xyz_013_1.inputs[1].default_value = 0.0
- combine_xyz_013_1.inputs[2].default_value = 0.0
- combine_xyz_013_1.outputs[0].default_value = (0.0, 0.0, 0.0)
-
- combine_xyz_020_1 = test_group.nodes.new('ShaderNodeCombineXYZ')
- combine_xyz_020_1.parent = test_group.nodes.get('Frame.012')
- combine_xyz_020_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- combine_xyz_020_1.hide = False
- combine_xyz_020_1.label = 'DO NOT TOUCH'
- combine_xyz_020_1.location = (1171.4072265625, 1959.050048828125)
- combine_xyz_020_1.mute = False
- combine_xyz_020_1.name = 'Combine XYZ.020'
- combine_xyz_020_1.use_custom_color = False
- combine_xyz_020_1.width = 124.859375
- combine_xyz_020_1.inputs[0].default_value = 0.23999999463558197
- combine_xyz_020_1.inputs[1].default_value = 0.0
- combine_xyz_020_1.inputs[2].default_value = 0.0
- combine_xyz_020_1.outputs[0].default_value = (0.0, 0.0, 0.0)
-
- combine_xyz_001_1 = test_group.nodes.new('ShaderNodeCombineXYZ')
- combine_xyz_001_1.parent = test_group.nodes.get('Frame.012')
- combine_xyz_001_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- combine_xyz_001_1.hide = False
- combine_xyz_001_1.label = 'DO NOT TOUCH'
- combine_xyz_001_1.location = (431.4072265625, 1859.050048828125)
- combine_xyz_001_1.mute = False
- combine_xyz_001_1.name = 'Combine XYZ.001'
- combine_xyz_001_1.use_custom_color = False
- combine_xyz_001_1.width = 117.023681640625
- combine_xyz_001_1.inputs[0].default_value = 0.0
- combine_xyz_001_1.inputs[1].default_value = 0.0
- combine_xyz_001_1.inputs[2].default_value = 0.0
- combine_xyz_001_1.outputs[0].default_value = (0.0, 0.0, 0.0)
-
- combine_xyz_032_1 = test_group.nodes.new('ShaderNodeCombineXYZ')
- combine_xyz_032_1.parent = test_group.nodes.get('Frame.012')
- combine_xyz_032_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- combine_xyz_032_1.hide = False
- combine_xyz_032_1.label = 'DO NOT TOUCH'
- combine_xyz_032_1.location = (-968.5927734375, 1219.050048828125)
- combine_xyz_032_1.mute = False
- combine_xyz_032_1.name = 'Combine XYZ.032'
- combine_xyz_032_1.use_custom_color = False
- combine_xyz_032_1.width = 125.2945556640625
- combine_xyz_032_1.inputs[0].default_value = 0.0
- combine_xyz_032_1.inputs[1].default_value = 0.0
- combine_xyz_032_1.inputs[2].default_value = 0.0
- combine_xyz_032_1.outputs[0].default_value = (0.0, 0.0, 0.0)
-
- combine_xyz_014_1 = test_group.nodes.new('ShaderNodeCombineXYZ')
- combine_xyz_014_1.parent = test_group.nodes.get('Frame.012')
- combine_xyz_014_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- combine_xyz_014_1.hide = False
- combine_xyz_014_1.label = 'DO NOT TOUCH'
- combine_xyz_014_1.location = (1171.4072265625, 959.050048828125)
- combine_xyz_014_1.mute = False
- combine_xyz_014_1.name = 'Combine XYZ.014'
- combine_xyz_014_1.use_custom_color = False
- combine_xyz_014_1.width = 121.84521484375
- combine_xyz_014_1.inputs[0].default_value = -1.6666669845581055
- combine_xyz_014_1.inputs[1].default_value = 5.2083330154418945
- combine_xyz_014_1.inputs[2].default_value = 0.6499999761581421
- combine_xyz_014_1.outputs[0].default_value = (0.0, 0.0, 0.0)
-
- combine_xyz_015_1 = test_group.nodes.new('ShaderNodeCombineXYZ')
- combine_xyz_015_1.parent = test_group.nodes.get('Frame.012')
- combine_xyz_015_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- combine_xyz_015_1.hide = False
- combine_xyz_015_1.label = 'DO NOT TOUCH'
- combine_xyz_015_1.location = (1171.4072265625, 839.050048828125)
- combine_xyz_015_1.mute = False
- combine_xyz_015_1.name = 'Combine XYZ.015'
- combine_xyz_015_1.use_custom_color = False
- combine_xyz_015_1.width = 121.845458984375
- combine_xyz_015_1.inputs[0].default_value = 0.23999999463558197
- combine_xyz_015_1.inputs[1].default_value = 0.0
- combine_xyz_015_1.inputs[2].default_value = 0.0
- combine_xyz_015_1.outputs[0].default_value = (0.0, 0.0, 0.0)
-
- combine_xyz_021_1 = test_group.nodes.new('ShaderNodeCombineXYZ')
- combine_xyz_021_1.parent = test_group.nodes.get('Frame.012')
- combine_xyz_021_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- combine_xyz_021_1.hide = False
- combine_xyz_021_1.label = 'DO NOT TOUCH'
- combine_xyz_021_1.location = (1171.4072265625, 719.050048828125)
- combine_xyz_021_1.mute = False
- combine_xyz_021_1.name = 'Combine XYZ.021'
- combine_xyz_021_1.use_custom_color = False
- combine_xyz_021_1.width = 121.8447265625
- combine_xyz_021_1.inputs[0].default_value = 0.23999999463558197
- combine_xyz_021_1.inputs[1].default_value = 0.0
- combine_xyz_021_1.inputs[2].default_value = 0.0
- combine_xyz_021_1.outputs[0].default_value = (0.0, 0.0, 0.0)
-
- combine_xyz_002_1 = test_group.nodes.new('ShaderNodeCombineXYZ')
- combine_xyz_002_1.parent = test_group.nodes.get('Frame.012')
- combine_xyz_002_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- combine_xyz_002_1.hide = False
- combine_xyz_002_1.label = 'DO NOT TOUCH'
- combine_xyz_002_1.location = (431.4072265625, 739.050048828125)
- combine_xyz_002_1.mute = False
- combine_xyz_002_1.name = 'Combine XYZ.002'
- combine_xyz_002_1.use_custom_color = False
- combine_xyz_002_1.width = 124.23828125
- combine_xyz_002_1.inputs[0].default_value = 0.0
- combine_xyz_002_1.inputs[1].default_value = 0.0
- combine_xyz_002_1.inputs[2].default_value = 0.0
- combine_xyz_002_1.outputs[0].default_value = (0.0, 0.0, 0.0)
-
- combine_xyz_003_1 = test_group.nodes.new('ShaderNodeCombineXYZ')
- combine_xyz_003_1.parent = test_group.nodes.get('Frame.012')
- combine_xyz_003_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- combine_xyz_003_1.hide = False
- combine_xyz_003_1.label = 'DO NOT TOUCH'
- combine_xyz_003_1.location = (431.4072265625, 619.050048828125)
- combine_xyz_003_1.mute = False
- combine_xyz_003_1.name = 'Combine XYZ.003'
- combine_xyz_003_1.use_custom_color = False
- combine_xyz_003_1.width = 124.238037109375
- combine_xyz_003_1.inputs[0].default_value = 0.0
- combine_xyz_003_1.inputs[1].default_value = 0.0
- combine_xyz_003_1.inputs[2].default_value = 0.0
- combine_xyz_003_1.outputs[0].default_value = (0.0, 0.0, 0.0)
-
- combine_xyz_033_1 = test_group.nodes.new('ShaderNodeCombineXYZ')
- combine_xyz_033_1.parent = test_group.nodes.get('Frame.012')
- combine_xyz_033_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- combine_xyz_033_1.hide = False
- combine_xyz_033_1.label = 'DO NOT TOUCH'
- combine_xyz_033_1.location = (-28.5927734375, 579.050048828125)
- combine_xyz_033_1.mute = False
- combine_xyz_033_1.name = 'Combine XYZ.033'
- combine_xyz_033_1.use_custom_color = False
- combine_xyz_033_1.width = 117.468994140625
- combine_xyz_033_1.inputs[0].default_value = 0.0
- combine_xyz_033_1.inputs[1].default_value = 0.0
- combine_xyz_033_1.inputs[2].default_value = 0.0
- combine_xyz_033_1.outputs[0].default_value = (0.0, 0.0, 0.0)
-
- combine_xyz_038_1 = test_group.nodes.new('ShaderNodeCombineXYZ')
- combine_xyz_038_1.parent = test_group.nodes.get('Frame.012')
- combine_xyz_038_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- combine_xyz_038_1.hide = False
- combine_xyz_038_1.label = 'DO NOT TOUCH'
- combine_xyz_038_1.location = (-628.5927734375, 399.050048828125)
- combine_xyz_038_1.mute = False
- combine_xyz_038_1.name = 'Combine XYZ.038'
- combine_xyz_038_1.use_custom_color = False
- combine_xyz_038_1.width = 122.51708984375
- combine_xyz_038_1.inputs[0].default_value = 0.0
- combine_xyz_038_1.inputs[1].default_value = 0.0
- combine_xyz_038_1.inputs[2].default_value = 0.0
- combine_xyz_038_1.outputs[0].default_value = (0.0, 0.0, 0.0)
-
- combine_xyz_043_1 = test_group.nodes.new('ShaderNodeCombineXYZ')
- combine_xyz_043_1.parent = test_group.nodes.get('Frame.012')
- combine_xyz_043_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- combine_xyz_043_1.hide = False
- combine_xyz_043_1.label = 'DO NOT TOUCH'
- combine_xyz_043_1.location = (-968.5927734375, -20.949951171875)
- combine_xyz_043_1.mute = False
- combine_xyz_043_1.name = 'Combine XYZ.043'
- combine_xyz_043_1.use_custom_color = False
- combine_xyz_043_1.width = 127.3455810546875
- combine_xyz_043_1.inputs[0].default_value = 0.0
- combine_xyz_043_1.inputs[1].default_value = 0.0
- combine_xyz_043_1.inputs[2].default_value = 0.0
- combine_xyz_043_1.outputs[0].default_value = (0.0, 0.0, 0.0)
-
- combine_xyz_016_1 = test_group.nodes.new('ShaderNodeCombineXYZ')
- combine_xyz_016_1.parent = test_group.nodes.get('Frame.012')
- combine_xyz_016_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- combine_xyz_016_1.hide = False
- combine_xyz_016_1.label = 'DO NOT TOUCH'
- combine_xyz_016_1.location = (1171.4072265625, -280.949951171875)
- combine_xyz_016_1.mute = False
- combine_xyz_016_1.name = 'Combine XYZ.016'
- combine_xyz_016_1.use_custom_color = False
- combine_xyz_016_1.width = 127.345703125
- combine_xyz_016_1.inputs[0].default_value = -1.6666669845581055
- combine_xyz_016_1.inputs[1].default_value = 5.2083330154418945
- combine_xyz_016_1.inputs[2].default_value = 0.6499999761581421
- combine_xyz_016_1.outputs[0].default_value = (0.0, 0.0, 0.0)
-
- combine_xyz_017_1 = test_group.nodes.new('ShaderNodeCombineXYZ')
- combine_xyz_017_1.parent = test_group.nodes.get('Frame.012')
- combine_xyz_017_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- combine_xyz_017_1.hide = False
- combine_xyz_017_1.label = 'DO NOT TOUCH'
- combine_xyz_017_1.location = (1171.4072265625, -400.949951171875)
- combine_xyz_017_1.mute = False
- combine_xyz_017_1.name = 'Combine XYZ.017'
- combine_xyz_017_1.use_custom_color = False
- combine_xyz_017_1.width = 127.967529296875
- combine_xyz_017_1.inputs[0].default_value = 0.23999999463558197
- combine_xyz_017_1.inputs[1].default_value = 0.0
- combine_xyz_017_1.inputs[2].default_value = 0.0
- combine_xyz_017_1.outputs[0].default_value = (0.0, 0.0, 0.0)
-
- combine_xyz_022_1 = test_group.nodes.new('ShaderNodeCombineXYZ')
- combine_xyz_022_1.parent = test_group.nodes.get('Frame.012')
- combine_xyz_022_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- combine_xyz_022_1.hide = False
- combine_xyz_022_1.label = 'DO NOT TOUCH'
- combine_xyz_022_1.location = (1171.4072265625, -520.949951171875)
- combine_xyz_022_1.mute = False
- combine_xyz_022_1.name = 'Combine XYZ.022'
- combine_xyz_022_1.use_custom_color = False
- combine_xyz_022_1.width = 128.5888671875
- combine_xyz_022_1.inputs[0].default_value = 0.23999999463558197
- combine_xyz_022_1.inputs[1].default_value = 0.0
- combine_xyz_022_1.inputs[2].default_value = 0.0
- combine_xyz_022_1.outputs[0].default_value = (0.0, 0.0, 0.0)
-
- combine_xyz_005_1 = test_group.nodes.new('ShaderNodeCombineXYZ')
- combine_xyz_005_1.parent = test_group.nodes.get('Frame.012')
- combine_xyz_005_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- combine_xyz_005_1.hide = False
- combine_xyz_005_1.label = 'DO NOT TOUCH'
- combine_xyz_005_1.location = (431.4072265625, -500.949951171875)
- combine_xyz_005_1.mute = False
- combine_xyz_005_1.name = 'Combine XYZ.005'
- combine_xyz_005_1.use_custom_color = False
- combine_xyz_005_1.width = 125.53173828125
- combine_xyz_005_1.inputs[0].default_value = 0.0
- combine_xyz_005_1.inputs[1].default_value = 0.0
- combine_xyz_005_1.inputs[2].default_value = 0.0
- combine_xyz_005_1.outputs[0].default_value = (0.0, 0.0, 0.0)
-
- combine_xyz_004_1 = test_group.nodes.new('ShaderNodeCombineXYZ')
- combine_xyz_004_1.parent = test_group.nodes.get('Frame.012')
- combine_xyz_004_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- combine_xyz_004_1.hide = False
- combine_xyz_004_1.label = 'DO NOT TOUCH'
- combine_xyz_004_1.location = (431.4072265625, -620.949951171875)
- combine_xyz_004_1.mute = False
- combine_xyz_004_1.name = 'Combine XYZ.004'
- combine_xyz_004_1.use_custom_color = False
- combine_xyz_004_1.width = 124.860107421875
- combine_xyz_004_1.inputs[0].default_value = 0.0
- combine_xyz_004_1.inputs[1].default_value = 0.0
- combine_xyz_004_1.inputs[2].default_value = 0.0
- combine_xyz_004_1.outputs[0].default_value = (0.0, 0.0, 0.0)
-
- combine_xyz_034_1 = test_group.nodes.new('ShaderNodeCombineXYZ')
- combine_xyz_034_1.parent = test_group.nodes.get('Frame.012')
- combine_xyz_034_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- combine_xyz_034_1.hide = False
- combine_xyz_034_1.label = 'DO NOT TOUCH'
- combine_xyz_034_1.location = (-28.5927734375, -660.949951171875)
- combine_xyz_034_1.mute = False
- combine_xyz_034_1.name = 'Combine XYZ.034'
- combine_xyz_034_1.use_custom_color = False
- combine_xyz_034_1.width = 124.85986328125
- combine_xyz_034_1.inputs[0].default_value = 0.0
- combine_xyz_034_1.inputs[1].default_value = 0.0
- combine_xyz_034_1.inputs[2].default_value = 0.0
- combine_xyz_034_1.outputs[0].default_value = (0.0, 0.0, 0.0)
-
- combine_xyz_039_1 = test_group.nodes.new('ShaderNodeCombineXYZ')
- combine_xyz_039_1.parent = test_group.nodes.get('Frame.012')
- combine_xyz_039_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- combine_xyz_039_1.hide = False
- combine_xyz_039_1.label = 'DO NOT TOUCH'
- combine_xyz_039_1.location = (-628.5927734375, -840.949951171875)
- combine_xyz_039_1.mute = False
- combine_xyz_039_1.name = 'Combine XYZ.039'
- combine_xyz_039_1.use_custom_color = False
- combine_xyz_039_1.width = 124.696533203125
- combine_xyz_039_1.inputs[0].default_value = 0.0
- combine_xyz_039_1.inputs[1].default_value = 0.0
- combine_xyz_039_1.inputs[2].default_value = 0.0
- combine_xyz_039_1.outputs[0].default_value = (0.0, 0.0, 0.0)
-
- combine_xyz_044_1 = test_group.nodes.new('ShaderNodeCombineXYZ')
- combine_xyz_044_1.parent = test_group.nodes.get('Frame.012')
- combine_xyz_044_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- combine_xyz_044_1.hide = False
- combine_xyz_044_1.label = 'DO NOT TOUCH'
- combine_xyz_044_1.location = (-968.5927734375, -1260.949951171875)
- combine_xyz_044_1.mute = False
- combine_xyz_044_1.name = 'Combine XYZ.044'
- combine_xyz_044_1.use_custom_color = False
- combine_xyz_044_1.width = 121.9874267578125
- combine_xyz_044_1.inputs[0].default_value = 0.0
- combine_xyz_044_1.inputs[1].default_value = 0.0
- combine_xyz_044_1.inputs[2].default_value = 0.0
- combine_xyz_044_1.outputs[0].default_value = (0.0, 0.0, 0.0)
-
- combine_xyz_018_1 = test_group.nodes.new('ShaderNodeCombineXYZ')
- combine_xyz_018_1.parent = test_group.nodes.get('Frame.012')
- combine_xyz_018_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- combine_xyz_018_1.hide = False
- combine_xyz_018_1.label = 'DO NOT TOUCH'
- combine_xyz_018_1.location = (1171.4072265625, -1500.949951171875)
- combine_xyz_018_1.mute = False
- combine_xyz_018_1.name = 'Combine XYZ.018'
- combine_xyz_018_1.use_custom_color = False
- combine_xyz_018_1.width = 135.3369140625
- combine_xyz_018_1.inputs[0].default_value = -1.6666669845581055
- combine_xyz_018_1.inputs[1].default_value = 5.2083330154418945
- combine_xyz_018_1.inputs[2].default_value = 0.6499999761581421
- combine_xyz_018_1.outputs[0].default_value = (0.0, 0.0, 0.0)
-
- combine_xyz_019_1 = test_group.nodes.new('ShaderNodeCombineXYZ')
- combine_xyz_019_1.parent = test_group.nodes.get('Frame.012')
- combine_xyz_019_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- combine_xyz_019_1.hide = False
- combine_xyz_019_1.label = 'DO NOT TOUCH'
- combine_xyz_019_1.location = (1171.4072265625, -1620.949951171875)
- combine_xyz_019_1.mute = False
- combine_xyz_019_1.name = 'Combine XYZ.019'
- combine_xyz_019_1.use_custom_color = False
- combine_xyz_019_1.width = 134.5517578125
- combine_xyz_019_1.inputs[0].default_value = 0.23999999463558197
- combine_xyz_019_1.inputs[1].default_value = 0.0
- combine_xyz_019_1.inputs[2].default_value = 0.0
- combine_xyz_019_1.outputs[0].default_value = (0.0, 0.0, 0.0)
-
- combine_xyz_023_1 = test_group.nodes.new('ShaderNodeCombineXYZ')
- combine_xyz_023_1.parent = test_group.nodes.get('Frame.012')
- combine_xyz_023_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- combine_xyz_023_1.hide = False
- combine_xyz_023_1.label = 'DO NOT TOUCH'
- combine_xyz_023_1.location = (1171.4072265625, -1740.949951171875)
- combine_xyz_023_1.mute = False
- combine_xyz_023_1.name = 'Combine XYZ.023'
- combine_xyz_023_1.use_custom_color = False
- combine_xyz_023_1.width = 132.196044921875
- combine_xyz_023_1.inputs[0].default_value = 0.23999999463558197
- combine_xyz_023_1.inputs[1].default_value = 0.0
- combine_xyz_023_1.inputs[2].default_value = 0.0
- combine_xyz_023_1.outputs[0].default_value = (0.0, 0.0, 0.0)
-
- combine_xyz_007_1 = test_group.nodes.new('ShaderNodeCombineXYZ')
- combine_xyz_007_1.parent = test_group.nodes.get('Frame.012')
- combine_xyz_007_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- combine_xyz_007_1.hide = False
- combine_xyz_007_1.label = 'DO NOT TOUCH'
- combine_xyz_007_1.location = (431.4072265625, -1740.949951171875)
- combine_xyz_007_1.mute = False
- combine_xyz_007_1.name = 'Combine XYZ.007'
- combine_xyz_007_1.use_custom_color = False
- combine_xyz_007_1.width = 123.516357421875
- combine_xyz_007_1.inputs[0].default_value = 0.0
- combine_xyz_007_1.inputs[1].default_value = 0.0
- combine_xyz_007_1.inputs[2].default_value = 0.0
- combine_xyz_007_1.outputs[0].default_value = (0.0, 0.0, 0.0)
-
- combine_xyz_006_1 = test_group.nodes.new('ShaderNodeCombineXYZ')
- combine_xyz_006_1.parent = test_group.nodes.get('Frame.012')
- combine_xyz_006_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- combine_xyz_006_1.hide = False
- combine_xyz_006_1.label = 'DO NOT TOUCH'
- combine_xyz_006_1.location = (431.4072265625, -1860.949951171875)
- combine_xyz_006_1.mute = False
- combine_xyz_006_1.name = 'Combine XYZ.006'
- combine_xyz_006_1.use_custom_color = False
- combine_xyz_006_1.width = 124.860107421875
- combine_xyz_006_1.inputs[0].default_value = 0.0
- combine_xyz_006_1.inputs[1].default_value = 0.0
- combine_xyz_006_1.inputs[2].default_value = 0.0
- combine_xyz_006_1.outputs[0].default_value = (0.0, 0.0, 0.0)
-
- combine_xyz_035_1 = test_group.nodes.new('ShaderNodeCombineXYZ')
- combine_xyz_035_1.parent = test_group.nodes.get('Frame.012')
- combine_xyz_035_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- combine_xyz_035_1.hide = False
- combine_xyz_035_1.label = 'DO NOT TOUCH'
- combine_xyz_035_1.location = (-48.5927734375, -1900.949951171875)
- combine_xyz_035_1.mute = False
- combine_xyz_035_1.name = 'Combine XYZ.035'
- combine_xyz_035_1.use_custom_color = False
- combine_xyz_035_1.width = 122.844482421875
- combine_xyz_035_1.inputs[0].default_value = 0.0
- combine_xyz_035_1.inputs[1].default_value = 0.0
- combine_xyz_035_1.inputs[2].default_value = 0.0
- combine_xyz_035_1.outputs[0].default_value = (0.0, 0.0, 0.0)
-
- combine_xyz_040_1 = test_group.nodes.new('ShaderNodeCombineXYZ')
- combine_xyz_040_1.parent = test_group.nodes.get('Frame.012')
- combine_xyz_040_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- combine_xyz_040_1.hide = False
- combine_xyz_040_1.label = 'DO NOT TOUCH'
- combine_xyz_040_1.location = (-628.5927734375, -2080.949951171875)
- combine_xyz_040_1.mute = False
- combine_xyz_040_1.name = 'Combine XYZ.040'
- combine_xyz_040_1.use_custom_color = False
- combine_xyz_040_1.width = 129.021484375
- combine_xyz_040_1.inputs[0].default_value = 0.0
- combine_xyz_040_1.inputs[1].default_value = 0.0
- combine_xyz_040_1.inputs[2].default_value = 0.0
- combine_xyz_040_1.outputs[0].default_value = (0.0, 0.0, 0.0)
-
- combine_xyz_045_1 = test_group.nodes.new('ShaderNodeCombineXYZ')
- combine_xyz_045_1.parent = test_group.nodes.get('Frame.012')
- combine_xyz_045_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- combine_xyz_045_1.hide = False
- combine_xyz_045_1.label = 'DO NOT TOUCH'
- combine_xyz_045_1.location = (-968.5927734375, -2500.949951171875)
- combine_xyz_045_1.mute = False
- combine_xyz_045_1.name = 'Combine XYZ.045'
- combine_xyz_045_1.use_custom_color = False
- combine_xyz_045_1.width = 118.6451416015625
- combine_xyz_045_1.inputs[0].default_value = 0.0
- combine_xyz_045_1.inputs[1].default_value = 0.0
- combine_xyz_045_1.inputs[2].default_value = 0.0
- combine_xyz_045_1.outputs[0].default_value = (0.0, 0.0, 0.0)
-
- combine_xyz_024_1 = test_group.nodes.new('ShaderNodeCombineXYZ')
- combine_xyz_024_1.parent = test_group.nodes.get('Frame.012')
- combine_xyz_024_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- combine_xyz_024_1.hide = False
- combine_xyz_024_1.label = 'DO NOT TOUCH'
- combine_xyz_024_1.location = (1171.4072265625, -2760.949951171875)
- combine_xyz_024_1.mute = False
- combine_xyz_024_1.name = 'Combine XYZ.024'
- combine_xyz_024_1.use_custom_color = False
- combine_xyz_024_1.width = 131.23486328125
- combine_xyz_024_1.inputs[0].default_value = -1.6666669845581055
- combine_xyz_024_1.inputs[1].default_value = 5.2083330154418945
- combine_xyz_024_1.inputs[2].default_value = 0.6499999761581421
- combine_xyz_024_1.outputs[0].default_value = (0.0, 0.0, 0.0)
-
- combine_xyz_025_1 = test_group.nodes.new('ShaderNodeCombineXYZ')
- combine_xyz_025_1.parent = test_group.nodes.get('Frame.012')
- combine_xyz_025_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- combine_xyz_025_1.hide = False
- combine_xyz_025_1.label = 'DO NOT TOUCH'
- combine_xyz_025_1.location = (1171.4072265625, -2880.949951171875)
- combine_xyz_025_1.mute = False
- combine_xyz_025_1.name = 'Combine XYZ.025'
- combine_xyz_025_1.use_custom_color = False
- combine_xyz_025_1.width = 129.781982421875
- combine_xyz_025_1.inputs[0].default_value = 0.23999999463558197
- combine_xyz_025_1.inputs[1].default_value = 0.0
- combine_xyz_025_1.inputs[2].default_value = 0.0
- combine_xyz_025_1.outputs[0].default_value = (0.0, 0.0, 0.0)
-
- combine_xyz_026_1 = test_group.nodes.new('ShaderNodeCombineXYZ')
- combine_xyz_026_1.parent = test_group.nodes.get('Frame.012')
- combine_xyz_026_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- combine_xyz_026_1.hide = False
- combine_xyz_026_1.label = 'DO NOT TOUCH'
- combine_xyz_026_1.location = (1171.4072265625, -3000.949951171875)
- combine_xyz_026_1.mute = False
- combine_xyz_026_1.name = 'Combine XYZ.026'
- combine_xyz_026_1.use_custom_color = False
- combine_xyz_026_1.width = 127.602783203125
- combine_xyz_026_1.inputs[0].default_value = 0.23999999463558197
- combine_xyz_026_1.inputs[1].default_value = 0.0
- combine_xyz_026_1.inputs[2].default_value = 0.0
- combine_xyz_026_1.outputs[0].default_value = (0.0, 0.0, 0.0)
-
- combine_xyz_008_1 = test_group.nodes.new('ShaderNodeCombineXYZ')
- combine_xyz_008_1.parent = test_group.nodes.get('Frame.012')
- combine_xyz_008_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- combine_xyz_008_1.hide = False
- combine_xyz_008_1.label = 'DO NOT TOUCH'
- combine_xyz_008_1.location = (431.4072265625, -2980.949951171875)
- combine_xyz_008_1.mute = False
- combine_xyz_008_1.name = 'Combine XYZ.008'
- combine_xyz_008_1.use_custom_color = False
- combine_xyz_008_1.width = 127.346923828125
- combine_xyz_008_1.inputs[0].default_value = 0.0
- combine_xyz_008_1.inputs[1].default_value = 0.0
- combine_xyz_008_1.inputs[2].default_value = 0.0
- combine_xyz_008_1.outputs[0].default_value = (0.0, 0.0, 0.0)
-
- combine_xyz_009_1 = test_group.nodes.new('ShaderNodeCombineXYZ')
- combine_xyz_009_1.parent = test_group.nodes.get('Frame.012')
- combine_xyz_009_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- combine_xyz_009_1.hide = False
- combine_xyz_009_1.label = 'DO NOT TOUCH'
- combine_xyz_009_1.location = (431.4072265625, -3100.949951171875)
- combine_xyz_009_1.mute = False
- combine_xyz_009_1.name = 'Combine XYZ.009'
- combine_xyz_009_1.use_custom_color = False
- combine_xyz_009_1.width = 126.103759765625
- combine_xyz_009_1.inputs[0].default_value = 0.0
- combine_xyz_009_1.inputs[1].default_value = 0.0
- combine_xyz_009_1.inputs[2].default_value = 0.0
- combine_xyz_009_1.outputs[0].default_value = (0.0, 0.0, 0.0)
-
- combine_xyz_036_1 = test_group.nodes.new('ShaderNodeCombineXYZ')
- combine_xyz_036_1.parent = test_group.nodes.get('Frame.012')
- combine_xyz_036_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- combine_xyz_036_1.hide = False
- combine_xyz_036_1.label = 'DO NOT TOUCH'
- combine_xyz_036_1.location = (-68.5927734375, -3140.949951171875)
- combine_xyz_036_1.mute = False
- combine_xyz_036_1.name = 'Combine XYZ.036'
- combine_xyz_036_1.use_custom_color = False
- combine_xyz_036_1.width = 123.617919921875
- combine_xyz_036_1.inputs[0].default_value = 0.0
- combine_xyz_036_1.inputs[1].default_value = 0.0
- combine_xyz_036_1.inputs[2].default_value = 0.0
- combine_xyz_036_1.outputs[0].default_value = (0.0, 0.0, 0.0)
-
- combine_xyz_041_1 = test_group.nodes.new('ShaderNodeCombineXYZ')
- combine_xyz_041_1.parent = test_group.nodes.get('Frame.012')
- combine_xyz_041_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- combine_xyz_041_1.hide = False
- combine_xyz_041_1.label = 'DO NOT TOUCH'
- combine_xyz_041_1.location = (-628.5927734375, -3320.949951171875)
- combine_xyz_041_1.mute = False
- combine_xyz_041_1.name = 'Combine XYZ.041'
- combine_xyz_041_1.use_custom_color = False
- combine_xyz_041_1.width = 119.526123046875
- combine_xyz_041_1.inputs[0].default_value = 0.0
- combine_xyz_041_1.inputs[1].default_value = 0.0
- combine_xyz_041_1.inputs[2].default_value = 0.0
- combine_xyz_041_1.outputs[0].default_value = (0.0, 0.0, 0.0)
-
- combine_xyz_046_1 = test_group.nodes.new('ShaderNodeCombineXYZ')
- combine_xyz_046_1.parent = test_group.nodes.get('Frame.012')
- combine_xyz_046_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- combine_xyz_046_1.hide = False
- combine_xyz_046_1.label = 'DO NOT TOUCH'
- combine_xyz_046_1.location = (-968.5927734375, -3740.949951171875)
- combine_xyz_046_1.mute = False
- combine_xyz_046_1.name = 'Combine XYZ.046'
- combine_xyz_046_1.use_custom_color = False
- combine_xyz_046_1.width = 120.1575927734375
- combine_xyz_046_1.inputs[0].default_value = 0.0
- combine_xyz_046_1.inputs[1].default_value = 0.0
- combine_xyz_046_1.inputs[2].default_value = 0.0
- combine_xyz_046_1.outputs[0].default_value = (0.0, 0.0, 0.0)
-
- combine_xyz_028_1 = test_group.nodes.new('ShaderNodeCombineXYZ')
- combine_xyz_028_1.parent = test_group.nodes.get('Frame.012')
- combine_xyz_028_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- combine_xyz_028_1.hide = False
- combine_xyz_028_1.label = 'DO NOT TOUCH'
- combine_xyz_028_1.location = (1171.4072265625, -4000.949951171875)
- combine_xyz_028_1.mute = False
- combine_xyz_028_1.name = 'Combine XYZ.028'
- combine_xyz_028_1.use_custom_color = False
- combine_xyz_028_1.width = 132.688232421875
- combine_xyz_028_1.inputs[0].default_value = -1.6666669845581055
- combine_xyz_028_1.inputs[1].default_value = 5.2083330154418945
- combine_xyz_028_1.inputs[2].default_value = 0.6499999761581421
- combine_xyz_028_1.outputs[0].default_value = (0.0, 0.0, 0.0)
-
- combine_xyz_029_1 = test_group.nodes.new('ShaderNodeCombineXYZ')
- combine_xyz_029_1.parent = test_group.nodes.get('Frame.012')
- combine_xyz_029_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- combine_xyz_029_1.hide = False
- combine_xyz_029_1.label = 'DO NOT TOUCH'
- combine_xyz_029_1.location = (1171.4072265625, -4120.9501953125)
- combine_xyz_029_1.mute = False
- combine_xyz_029_1.name = 'Combine XYZ.029'
- combine_xyz_029_1.use_custom_color = False
- combine_xyz_029_1.width = 132.68798828125
- combine_xyz_029_1.inputs[0].default_value = 0.23999999463558197
- combine_xyz_029_1.inputs[1].default_value = 0.0
- combine_xyz_029_1.inputs[2].default_value = 0.0
- combine_xyz_029_1.outputs[0].default_value = (0.0, 0.0, 0.0)
-
- combine_xyz_027_1 = test_group.nodes.new('ShaderNodeCombineXYZ')
- combine_xyz_027_1.parent = test_group.nodes.get('Frame.012')
- combine_xyz_027_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- combine_xyz_027_1.hide = False
- combine_xyz_027_1.label = 'DO NOT TOUCH'
- combine_xyz_027_1.location = (1171.4072265625, -4240.9501953125)
- combine_xyz_027_1.mute = False
- combine_xyz_027_1.name = 'Combine XYZ.027'
- combine_xyz_027_1.use_custom_color = False
- combine_xyz_027_1.width = 133.41455078125
- combine_xyz_027_1.inputs[0].default_value = 0.23999999463558197
- combine_xyz_027_1.inputs[1].default_value = 0.0
- combine_xyz_027_1.inputs[2].default_value = 0.0
- combine_xyz_027_1.outputs[0].default_value = (0.0, 0.0, 0.0)
-
- combine_xyz_010_1 = test_group.nodes.new('ShaderNodeCombineXYZ')
- combine_xyz_010_1.parent = test_group.nodes.get('Frame.012')
- combine_xyz_010_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- combine_xyz_010_1.hide = False
- combine_xyz_010_1.label = 'DO NOT TOUCH'
- combine_xyz_010_1.location = (431.4072265625, -4220.9501953125)
- combine_xyz_010_1.mute = False
- combine_xyz_010_1.name = 'Combine XYZ.010'
- combine_xyz_010_1.use_custom_color = False
- combine_xyz_010_1.width = 125.42431640625
- combine_xyz_010_1.inputs[0].default_value = 0.0
- combine_xyz_010_1.inputs[1].default_value = 0.0
- combine_xyz_010_1.inputs[2].default_value = 0.0
- combine_xyz_010_1.outputs[0].default_value = (0.0, 0.0, 0.0)
-
- combine_xyz_011_1 = test_group.nodes.new('ShaderNodeCombineXYZ')
- combine_xyz_011_1.parent = test_group.nodes.get('Frame.012')
- combine_xyz_011_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- combine_xyz_011_1.hide = False
- combine_xyz_011_1.label = 'DO NOT TOUCH'
- combine_xyz_011_1.location = (431.4072265625, -4340.9501953125)
- combine_xyz_011_1.mute = False
- combine_xyz_011_1.name = 'Combine XYZ.011'
- combine_xyz_011_1.use_custom_color = False
- combine_xyz_011_1.width = 124.69775390625
- combine_xyz_011_1.inputs[0].default_value = 0.0
- combine_xyz_011_1.inputs[1].default_value = 0.0
- combine_xyz_011_1.inputs[2].default_value = 0.0
- combine_xyz_011_1.outputs[0].default_value = (0.0, 0.0, 0.0)
-
- combine_xyz_037_1 = test_group.nodes.new('ShaderNodeCombineXYZ')
- combine_xyz_037_1.parent = test_group.nodes.get('Frame.012')
- combine_xyz_037_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- combine_xyz_037_1.hide = False
- combine_xyz_037_1.label = 'DO NOT TOUCH'
- combine_xyz_037_1.location = (-68.5927734375, -4380.9501953125)
- combine_xyz_037_1.mute = False
- combine_xyz_037_1.name = 'Combine XYZ.037'
- combine_xyz_037_1.use_custom_color = False
- combine_xyz_037_1.width = 126.725830078125
- combine_xyz_037_1.inputs[0].default_value = 0.0
- combine_xyz_037_1.inputs[1].default_value = 0.0
- combine_xyz_037_1.inputs[2].default_value = 0.0
- combine_xyz_037_1.outputs[0].default_value = (0.0, 0.0, 0.0)
-
- combine_xyz_042_1 = test_group.nodes.new('ShaderNodeCombineXYZ')
- combine_xyz_042_1.parent = test_group.nodes.get('Frame.012')
- combine_xyz_042_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- combine_xyz_042_1.hide = False
- combine_xyz_042_1.label = 'DO NOT TOUCH'
- combine_xyz_042_1.location = (-628.5927734375, -4560.9501953125)
- combine_xyz_042_1.mute = False
- combine_xyz_042_1.name = 'Combine XYZ.042'
- combine_xyz_042_1.use_custom_color = False
- combine_xyz_042_1.width = 125.42431640625
- combine_xyz_042_1.inputs[0].default_value = 0.0
- combine_xyz_042_1.inputs[1].default_value = 0.0
- combine_xyz_042_1.inputs[2].default_value = 0.0
- combine_xyz_042_1.outputs[0].default_value = (0.0, 0.0, 0.0)
-
- combine_xyz_047_1 = test_group.nodes.new('ShaderNodeCombineXYZ')
- combine_xyz_047_1.parent = test_group.nodes.get('Frame.012')
- combine_xyz_047_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- combine_xyz_047_1.hide = False
- combine_xyz_047_1.label = 'DO NOT TOUCH'
- combine_xyz_047_1.location = (-968.5927734375, -4980.9501953125)
- combine_xyz_047_1.mute = False
- combine_xyz_047_1.name = 'Combine XYZ.047'
- combine_xyz_047_1.use_custom_color = False
- combine_xyz_047_1.width = 115.6029052734375
- combine_xyz_047_1.inputs[0].default_value = 0.0
- combine_xyz_047_1.inputs[1].default_value = 0.0
- combine_xyz_047_1.inputs[2].default_value = 0.0
- combine_xyz_047_1.outputs[0].default_value = (0.0, 0.0, 0.0)
-
- attribute_1 = test_group.nodes.new('ShaderNodeAttribute')
- attribute_1.parent = test_group.nodes.get('Frame.012')
- attribute_1.attribute_name = 'slots'
- attribute_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- attribute_1.hide = True
- attribute_1.location = (2020.0, 2400.0)
- attribute_1.mute = False
- attribute_1.name = 'Attribute'
- attribute_1.use_custom_color = False
- attribute_1.width = 140.0
-
- math_004_1 = test_group.nodes.new('ShaderNodeMath')
- math_004_1.parent = test_group.nodes.get('Frame.012')
- math_004_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- math_004_1.hide = True
- math_004_1.label = 'Cloth_Secondary_Slot'
- math_004_1.location = (2473.43701171875, 1164.050048828125)
- math_004_1.mute = False
- math_004_1.name = 'Math.004'
- math_004_1.operation = 'MULTIPLY'
- math_004_1.use_clamp = False
- math_004_1.use_custom_color = False
- math_004_1.width = 140.0
- math_004_1.inputs[0].default_value = 0.5
- math_004_1.inputs[1].default_value = 0.5
- math_004_1.inputs[2].default_value = 0.0
- math_004_1.outputs[0].default_value = 0.0
-
- math_007_1 = test_group.nodes.new('ShaderNodeMath')
- math_007_1.parent = test_group.nodes.get('Frame.012')
- math_007_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- math_007_1.hide = True
- math_007_1.label = 'Suit_Primary_Slot'
- math_007_1.location = (2473.43701171875, 1104.050048828125)
- math_007_1.mute = False
- math_007_1.name = 'Math.007'
- math_007_1.operation = 'MULTIPLY'
- math_007_1.use_clamp = False
- math_007_1.use_custom_color = False
- math_007_1.width = 140.0
- math_007_1.inputs[0].default_value = 0.5
- math_007_1.inputs[1].default_value = 0.5
- math_007_1.inputs[2].default_value = 0.0
- math_007_1.outputs[0].default_value = 0.0
-
- separate_rgb_1 = test_group.nodes.new('ShaderNodeSeparateRGB')
- separate_rgb_1.parent = test_group.nodes.get('Frame.012')
- separate_rgb_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- separate_rgb_1.hide = True
- separate_rgb_1.location = (2123.4365234375, 1139.050048828125)
- separate_rgb_1.mute = False
- separate_rgb_1.name = 'Separate RGB'
- separate_rgb_1.use_custom_color = False
- separate_rgb_1.width = 140.0
- separate_rgb_1.inputs[0].default_value = (0.800000011920929, 0.800000011920929, 0.800000011920929, 1.0)
- separate_rgb_1.outputs[0].default_value = 0.0
- separate_rgb_1.outputs[1].default_value = 0.0
- separate_rgb_1.outputs[2].default_value = 0.0
-
- math_001_1 = test_group.nodes.new('ShaderNodeMath')
- math_001_1.parent = test_group.nodes.get('Frame.012')
- math_001_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- math_001_1.hide = True
- math_001_1.label = 'Cloth_Primary_Slot'
- math_001_1.location = (2303.4365234375, 1209.050048828125)
- math_001_1.mute = False
- math_001_1.name = 'Math.001'
- math_001_1.operation = 'GREATER_THAN'
- math_001_1.use_clamp = False
- math_001_1.use_custom_color = False
- math_001_1.width = 140.0
- math_001_1.inputs[0].default_value = 0.5
- math_001_1.inputs[1].default_value = 0.9980000257492065
- math_001_1.inputs[2].default_value = 0.0
- math_001_1.outputs[0].default_value = 0.0
-
- math_006_1 = test_group.nodes.new('ShaderNodeMath')
- math_006_1.parent = test_group.nodes.get('Frame.012')
- math_006_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- math_006_1.hide = True
- math_006_1.label = ' '
- math_006_1.location = (2303.4365234375, 1089.050048828125)
- math_006_1.mute = False
- math_006_1.name = 'Math.006'
- math_006_1.operation = 'GREATER_THAN'
- math_006_1.use_clamp = False
- math_006_1.use_custom_color = False
- math_006_1.width = 140.0
- math_006_1.inputs[0].default_value = 0.5
- math_006_1.inputs[1].default_value = 0.33329999446868896
- math_006_1.inputs[2].default_value = 0.0
- math_006_1.outputs[0].default_value = 0.0
-
- math_008_1 = test_group.nodes.new('ShaderNodeMath')
- math_008_1.parent = test_group.nodes.get('Frame.012')
- math_008_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- math_008_1.hide = True
- math_008_1.label = 'Suit_Secondary_Slot'
- math_008_1.location = (2303.4365234375, 1059.050048828125)
- math_008_1.mute = False
- math_008_1.name = 'Math.008'
- math_008_1.operation = 'GREATER_THAN'
- math_008_1.use_clamp = False
- math_008_1.use_custom_color = False
- math_008_1.width = 140.0
- math_008_1.inputs[0].default_value = 0.5
- math_008_1.inputs[1].default_value = 0.9980000257492065
- math_008_1.inputs[2].default_value = 0.0
- math_008_1.outputs[0].default_value = 0.0
-
- math_1 = test_group.nodes.new('ShaderNodeMath')
- math_1.parent = test_group.nodes.get('Frame.012')
- math_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- math_1.hide = True
- math_1.label = 'Armor_Primary_Slot'
- math_1.location = (2303.4365234375, 1239.050048828125)
- math_1.mute = False
- math_1.name = 'Math'
- math_1.operation = 'GREATER_THAN'
- math_1.use_clamp = False
- math_1.use_custom_color = False
- math_1.width = 140.0
- math_1.inputs[0].default_value = 0.5
- math_1.inputs[1].default_value = 0.33329999446868896
- math_1.inputs[2].default_value = 0.0
- math_1.outputs[0].default_value = 0.0
-
- math_002_1 = test_group.nodes.new('ShaderNodeMath')
- math_002_1.parent = test_group.nodes.get('Frame.012')
- math_002_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- math_002_1.hide = True
- math_002_1.label = ' '
- math_002_1.location = (2303.4365234375, 1179.050048828125)
- math_002_1.mute = False
- math_002_1.name = 'Math.002'
- math_002_1.operation = 'LESS_THAN'
- math_002_1.use_clamp = False
- math_002_1.use_custom_color = False
- math_002_1.width = 140.0
- math_002_1.inputs[0].default_value = 0.5
- math_002_1.inputs[1].default_value = 0.33329999446868896
- math_002_1.inputs[2].default_value = 0.0
- math_002_1.outputs[0].default_value = 0.0
-
- math_003_1 = test_group.nodes.new('ShaderNodeMath')
- math_003_1.parent = test_group.nodes.get('Frame.012')
- math_003_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- math_003_1.hide = True
- math_003_1.label = ' '
- math_003_1.location = (2303.4365234375, 1149.050048828125)
- math_003_1.mute = False
- math_003_1.name = 'Math.003'
- math_003_1.operation = 'GREATER_THAN'
- math_003_1.use_clamp = False
- math_003_1.use_custom_color = False
- math_003_1.width = 140.0
- math_003_1.inputs[0].default_value = 0.5
- math_003_1.inputs[1].default_value = 0.09
- math_003_1.inputs[2].default_value = 0.0
- math_003_1.outputs[0].default_value = 0.0
-
- math_005_1 = test_group.nodes.new('ShaderNodeMath')
- math_005_1.parent = test_group.nodes.get('Frame.012')
- math_005_1.color = (0.6079999804496765, 0.6079999804496765, 0.6079999804496765)
- math_005_1.hide = True
- math_005_1.label = ' '
- math_005_1.location = (2303.4365234375, 1119.050048828125)
- math_005_1.mute = False
- math_005_1.name = 'Math.005'
- math_005_1.operation = 'LESS_THAN'
- math_005_1.use_clamp = False
- math_005_1.use_custom_color = False
- math_005_1.width = 140.0
- math_005_1.inputs[0].default_value = 0.5
- math_005_1.inputs[1].default_value = 0.6665999889373779
- math_005_1.inputs[2].default_value = 0.0
- math_005_1.outputs[0].default_value = 0.0
-
- # LINKS
- test_group.links.new(separate_rgb_1.outputs[0], math_1.inputs[0])
- test_group.links.new(separate_rgb_1.outputs[0], math_001_1.inputs[0])
- test_group.links.new(separate_rgb_1.outputs[1], math_002_1.inputs[0])
- test_group.links.new(separate_rgb_1.outputs[1], math_003_1.inputs[0])
- test_group.links.new(math_002_1.outputs[0], math_004_1.inputs[0])
- test_group.links.new(math_003_1.outputs[0], math_004_1.inputs[1])
- test_group.links.new(separate_rgb_1.outputs[1], math_005_1.inputs[0])
- test_group.links.new(separate_rgb_1.outputs[1], math_006_1.inputs[0])
- test_group.links.new(math_005_1.outputs[0], math_007_1.inputs[0])
- test_group.links.new(math_006_1.outputs[0], math_007_1.inputs[1])
- test_group.links.new(separate_rgb_1.outputs[1], math_008_1.inputs[0])
- test_group.links.new(mix_1.outputs[0], mix_001_1.inputs[1])
- test_group.links.new(mix_001_1.outputs[0], mix_002_1.inputs[1])
- test_group.links.new(mix_002_1.outputs[0], mix_003_1.inputs[1])
- test_group.links.new(mix_003_1.outputs[0], mix_004_1.inputs[1])
- test_group.links.new(mix_004_1.outputs[0], reroute_337_1.inputs[0])
- test_group.links.new(math_1.outputs[0], mix_1.inputs[0])
- test_group.links.new(math_001_1.outputs[0], mix_001_1.inputs[0])
- test_group.links.new(math_004_1.outputs[0], mix_002_1.inputs[0])
- test_group.links.new(math_007_1.outputs[0], mix_003_1.inputs[0])
- test_group.links.new(math_008_1.outputs[0], mix_004_1.inputs[0])
- test_group.links.new(mix_005_1.outputs[0], mix_006_1.inputs[1])
- test_group.links.new(mix_006_1.outputs[0], mix_007_1.inputs[1])
- test_group.links.new(mix_007_1.outputs[0], mix_008_1.inputs[1])
- test_group.links.new(mix_008_1.outputs[0], mix_009_1.inputs[1])
- test_group.links.new(mix_009_1.outputs[0], reroute_338_1.inputs[0])
- test_group.links.new(math_1.outputs[0], mix_005_1.inputs[0])
- test_group.links.new(math_001_1.outputs[0], mix_006_1.inputs[0])
- test_group.links.new(math_004_1.outputs[0], mix_007_1.inputs[0])
- test_group.links.new(math_007_1.outputs[0], mix_008_1.inputs[0])
- test_group.links.new(math_008_1.outputs[0], mix_009_1.inputs[0])
- test_group.links.new(mix_010_1.outputs[0], mix_011_1.inputs[1])
- test_group.links.new(mix_011_1.outputs[0], mix_012_1.inputs[1])
- test_group.links.new(mix_012_1.outputs[0], mix_013_1.inputs[1])
- test_group.links.new(mix_013_1.outputs[0], mix_014_1.inputs[1])
- test_group.links.new(mix_014_1.outputs[0], reroute_339_1.inputs[0])
- test_group.links.new(math_1.outputs[0], mix_010_1.inputs[0])
- test_group.links.new(math_001_1.outputs[0], mix_011_1.inputs[0])
- test_group.links.new(math_004_1.outputs[0], mix_012_1.inputs[0])
- test_group.links.new(math_007_1.outputs[0], mix_013_1.inputs[0])
- test_group.links.new(math_008_1.outputs[0], mix_014_1.inputs[0])
- test_group.links.new(mix_015_1.outputs[0], mix_016_1.inputs[1])
- test_group.links.new(mix_016_1.outputs[0], mix_017_1.inputs[1])
- test_group.links.new(mix_017_1.outputs[0], mix_018_1.inputs[1])
- test_group.links.new(mix_018_1.outputs[0], mix_019_1.inputs[1])
- test_group.links.new(mix_019_1.outputs[0], reroute_340_1.inputs[0])
- test_group.links.new(math_1.outputs[0], mix_015_1.inputs[0])
- test_group.links.new(math_001_1.outputs[0], mix_016_1.inputs[0])
- test_group.links.new(math_004_1.outputs[0], mix_017_1.inputs[0])
- test_group.links.new(math_007_1.outputs[0], mix_018_1.inputs[0])
- test_group.links.new(math_008_1.outputs[0], mix_019_1.inputs[0])
- test_group.links.new(mix_020_1.outputs[0], mix_021_1.inputs[1])
- test_group.links.new(mix_021_1.outputs[0], mix_022_1.inputs[1])
- test_group.links.new(mix_022_1.outputs[0], mix_023_1.inputs[1])
- test_group.links.new(mix_023_1.outputs[0], mix_024_1.inputs[1])
- test_group.links.new(mix_024_1.outputs[0], reroute_341_1.inputs[0])
- test_group.links.new(math_1.outputs[0], mix_020_1.inputs[0])
- test_group.links.new(math_001_1.outputs[0], mix_021_1.inputs[0])
- test_group.links.new(math_004_1.outputs[0], mix_022_1.inputs[0])
- test_group.links.new(math_007_1.outputs[0], mix_023_1.inputs[0])
- test_group.links.new(math_008_1.outputs[0], mix_024_1.inputs[0])
- test_group.links.new(mix_025_1.outputs[0], mix_026_1.inputs[1])
- test_group.links.new(mix_026_1.outputs[0], mix_027_1.inputs[1])
- test_group.links.new(mix_027_1.outputs[0], mix_028_1.inputs[1])
- test_group.links.new(mix_028_1.outputs[0], mix_029_1.inputs[1])
- test_group.links.new(mix_029_1.outputs[0], reroute_342_1.inputs[0])
- test_group.links.new(math_1.outputs[0], mix_025_1.inputs[0])
- test_group.links.new(math_001_1.outputs[0], mix_026_1.inputs[0])
- test_group.links.new(math_004_1.outputs[0], mix_027_1.inputs[0])
- test_group.links.new(math_007_1.outputs[0], mix_028_1.inputs[0])
- test_group.links.new(math_008_1.outputs[0], mix_029_1.inputs[0])
- test_group.links.new(mix_030_1.outputs[0], mix_031_1.inputs[1])
- test_group.links.new(mix_031_1.outputs[0], mix_032_1.inputs[1])
- test_group.links.new(mix_032_1.outputs[0], mix_033_1.inputs[1])
- test_group.links.new(mix_033_1.outputs[0], mix_034_1.inputs[1])
- test_group.links.new(mix_034_1.outputs[0], reroute_343_1.inputs[0])
- test_group.links.new(math_1.outputs[0], mix_030_1.inputs[0])
- test_group.links.new(math_001_1.outputs[0], mix_031_1.inputs[0])
- test_group.links.new(math_004_1.outputs[0], mix_032_1.inputs[0])
- test_group.links.new(math_007_1.outputs[0], mix_033_1.inputs[0])
- test_group.links.new(math_008_1.outputs[0], mix_034_1.inputs[0])
- test_group.links.new(mix_035_1.outputs[0], mix_036_1.inputs[1])
- test_group.links.new(mix_036_1.outputs[0], mix_037_1.inputs[1])
- test_group.links.new(mix_037_1.outputs[0], mix_038_1.inputs[1])
- test_group.links.new(mix_038_1.outputs[0], mix_039_1.inputs[1])
- test_group.links.new(mix_039_1.outputs[0], reroute_344_1.inputs[0])
- test_group.links.new(math_1.outputs[0], mix_035_1.inputs[0])
- test_group.links.new(math_001_1.outputs[0], mix_036_1.inputs[0])
- test_group.links.new(math_004_1.outputs[0], mix_037_1.inputs[0])
- test_group.links.new(math_007_1.outputs[0], mix_038_1.inputs[0])
- test_group.links.new(math_008_1.outputs[0], mix_039_1.inputs[0])
- test_group.links.new(mix_040_1.outputs[0], mix_041_1.inputs[1])
- test_group.links.new(mix_041_1.outputs[0], mix_042_1.inputs[1])
- test_group.links.new(mix_042_1.outputs[0], mix_043_1.inputs[1])
- test_group.links.new(mix_043_1.outputs[0], mix_044_1.inputs[1])
- test_group.links.new(mix_044_1.outputs[0], reroute_345_1.inputs[0])
- test_group.links.new(math_1.outputs[0], mix_040_1.inputs[0])
- test_group.links.new(math_001_1.outputs[0], mix_041_1.inputs[0])
- test_group.links.new(math_004_1.outputs[0], mix_042_1.inputs[0])
- test_group.links.new(math_007_1.outputs[0], mix_043_1.inputs[0])
- test_group.links.new(math_008_1.outputs[0], mix_044_1.inputs[0])
- test_group.links.new(mix_045_1.outputs[0], mix_046_1.inputs[1])
- test_group.links.new(mix_046_1.outputs[0], mix_047_1.inputs[1])
- test_group.links.new(mix_047_1.outputs[0], mix_048_1.inputs[1])
- test_group.links.new(mix_048_1.outputs[0], mix_049_1.inputs[1])
- test_group.links.new(mix_049_1.outputs[0], reroute_346_1.inputs[0])
- test_group.links.new(math_1.outputs[0], mix_045_1.inputs[0])
- test_group.links.new(math_001_1.outputs[0], mix_046_1.inputs[0])
- test_group.links.new(math_004_1.outputs[0], mix_047_1.inputs[0])
- test_group.links.new(math_007_1.outputs[0], mix_048_1.inputs[0])
- test_group.links.new(math_008_1.outputs[0], mix_049_1.inputs[0])
- test_group.links.new(mix_050_1.outputs[0], mix_051_1.inputs[1])
- test_group.links.new(mix_051_1.outputs[0], mix_052_1.inputs[1])
- test_group.links.new(mix_052_1.outputs[0], mix_053_1.inputs[1])
- test_group.links.new(mix_053_1.outputs[0], mix_054_1.inputs[1])
- test_group.links.new(mix_054_1.outputs[0], reroute_347_1.inputs[0])
- test_group.links.new(math_1.outputs[0], mix_050_1.inputs[0])
- test_group.links.new(math_001_1.outputs[0], mix_051_1.inputs[0])
- test_group.links.new(math_004_1.outputs[0], mix_052_1.inputs[0])
- test_group.links.new(math_007_1.outputs[0], mix_053_1.inputs[0])
- test_group.links.new(math_008_1.outputs[0], mix_054_1.inputs[0])
- test_group.links.new(armor_detail_normal_transform_1.outputs[0], reroute_291_1.inputs[0])
- test_group.links.new(cloth_detail_normal_transform_1.outputs[0], reroute_320_1.inputs[0])
- test_group.links.new(armor_primary_detail_normal_map_1.outputs[0], reroute_011_1.inputs[0])
- test_group.links.new(armor_secondary_detail_normal_map_1.outputs[0], reroute_039_1.inputs[0])
- test_group.links.new(cloth_primary_detail_normal_map_1.outputs[0], reroute_067_1.inputs[0])
- test_group.links.new(cloth_secondary_detail_normal_map_1.outputs[0], reroute_096_1.inputs[0])
- test_group.links.new(suit_primary_detail_normal_map_1.outputs[0], reroute_124_1.inputs[0])
- test_group.links.new(suit_secondary_detail_normal_map_1.outputs[0], reroute_194_1.inputs[0])
- test_group.links.new(armor_detail_diffuse_transform_1.outputs[0], reroute_288_1.inputs[0])
- test_group.links.new(cloth_detail_diffuse_transform_1.outputs[0], reroute_319_1.inputs[0])
- test_group.links.new(armor_primary_wear_remap_x_1.outputs[0], reroute_007_1.inputs[0])
- test_group.links.new(armor_primary_wear_remap_y_1.outputs[0], reroute_008_1.inputs[0])
- test_group.links.new(armor_primary_wear_remap_z_1.outputs[0], reroute_009_1.inputs[0])
- test_group.links.new(armor_primary_wear_remap_w_1.outputs[0], reroute_010_1.inputs[0])
- test_group.links.new(armor_secondary_wear_remap_x_1.outputs[0], reroute_035_1.inputs[0])
- test_group.links.new(armor_secondary_wear_remap_y_1.outputs[0], reroute_036_1.inputs[0])
- test_group.links.new(armor_secondary_wear_remap_z_1.outputs[0], reroute_037_1.inputs[0])
- test_group.links.new(armor_secondary_wear_remap_w_1.outputs[0], reroute_038_1.inputs[0])
- test_group.links.new(cloth_primary_wear_remap_x_1.outputs[0], reroute_063_1.inputs[0])
- test_group.links.new(cloth_primary_wear_remap_y_1.outputs[0], reroute_064_1.inputs[0])
- test_group.links.new(cloth_primary_wear_remap_z_1.outputs[0], reroute_065_1.inputs[0])
- test_group.links.new(cloth_primary_wear_remap_w_1.outputs[0], reroute_066_1.inputs[0])
- test_group.links.new(cloth_secondary_wear_remap_x_1.outputs[0], reroute_091_1.inputs[0])
- test_group.links.new(cloth_secondary_wear_remap_y_1.outputs[0], reroute_092_1.inputs[0])
- test_group.links.new(cloth_secondary_wear_remap_z_1.outputs[0], reroute_093_1.inputs[0])
- test_group.links.new(cloth_secondary_wear_remap_w_1.outputs[0], reroute_094_1.inputs[0])
- test_group.links.new(suit_primary_wear_remap_x_1.outputs[0], reroute_119_1.inputs[0])
- test_group.links.new(suit_primary_wear_remap_y_1.outputs[0], reroute_120_1.inputs[0])
- test_group.links.new(suit_primary_wear_remap_z_1.outputs[0], reroute_121_1.inputs[0])
- test_group.links.new(suit_primary_wear_remap_w_1.outputs[0], reroute_122_1.inputs[0])
- test_group.links.new(suit_secondary_wear_remap_x_1.outputs[0], reroute_183_1.inputs[0])
- test_group.links.new(suit_secondary_wear_remap_y_1.outputs[0], reroute_184_1.inputs[0])
- test_group.links.new(suit_secondary_wear_remap_z_1.outputs[0], reroute_185_1.inputs[0])
- test_group.links.new(suit_secondary_wear_remap_w_1.outputs[0], reroute_186_1.inputs[0])
- test_group.links.new(armor_primary_detail_diffuse_blend_1.outputs[0], reroute_012_1.inputs[0])
- test_group.links.new(armor_primary_detail_normal_blend_1.outputs[0], reroute_013_1.inputs[0])
- test_group.links.new(armor_secondary_detail_diffuse_blend_1.outputs[0], reroute_040_1.inputs[0])
- test_group.links.new(armor_secondary_detail_normal_blend_1.outputs[0], reroute_041_1.inputs[0])
- test_group.links.new(cloth_primary_detail_diffuse_blend_1.outputs[0], reroute_068_1.inputs[0])
- test_group.links.new(cloth_primary_detail_normal_blend_1.outputs[0], reroute_069_1.inputs[0])
- test_group.links.new(cloth_secondary_detail_diffuse_blend_1.outputs[0], reroute_095_1.inputs[0])
- test_group.links.new(cloth_secondary_detail_normal_blend_1.outputs[0], reroute_097_1.inputs[0])
- test_group.links.new(suit_primary_detail_diffuse_blend_1.outputs[0], reroute_123_1.inputs[0])
- test_group.links.new(suit_primary_detail_normal_blend_1.outputs[0], reroute_125_1.inputs[0])
- test_group.links.new(suit_secondary_detail_diffuse_blend_1.outputs[0], reroute_187_1.inputs[0])
- test_group.links.new(suit_secondary_detail_normal_blend_1.outputs[0], reroute_188_1.inputs[0])
- test_group.links.new(armor_primary_detail_roughness_blend_1.outputs[0], reroute_014_1.inputs[0])
- test_group.links.new(armor_secondary_detail_roughness_blend_1.outputs[0], reroute_042_1.inputs[0])
- test_group.links.new(cloth_primary_detail_roughness_blend_1.outputs[0], reroute_070_1.inputs[0])
- test_group.links.new(cloth_secondary_detail_roughness_blend_1.outputs[0], reroute_098_1.inputs[0])
- test_group.links.new(suit_primary_detail_roughness_blend_1.outputs[0], reroute_126_1.inputs[0])
- test_group.links.new(suit_secondary_detail_roughness_blend_1.outputs[0], reroute_189_1.inputs[0])
- test_group.links.new(mix_055_1.outputs[0], mix_056_1.inputs[1])
- test_group.links.new(mix_056_1.outputs[0], mix_057_1.inputs[1])
- test_group.links.new(mix_057_1.outputs[0], mix_058_1.inputs[1])
- test_group.links.new(mix_058_1.outputs[0], mix_059_1.inputs[1])
- test_group.links.new(mix_059_1.outputs[0], reroute_348_1.inputs[0])
- test_group.links.new(armor_primary_roughness_remap_x_1.outputs[0], reroute_001_1.inputs[0])
- test_group.links.new(armor_primary_roughness_remap_y_1.outputs[0], reroute_002_1.inputs[0])
- test_group.links.new(armor_primary_roughness_remap_z_1.outputs[0], reroute_003_1.inputs[0])
- test_group.links.new(armor_primary_roughness_remap_w_1.outputs[0], reroute_004_1.inputs[0])
- test_group.links.new(armor_secondary_roughness_remap_x_1.outputs[0], reroute_029_1.inputs[0])
- test_group.links.new(armor_secondary_roughness_remap_y_1.outputs[0], reroute_030_1.inputs[0])
- test_group.links.new(armor_secondary_roughness_remap_z_1.outputs[0], reroute_031_1.inputs[0])
- test_group.links.new(armor_secondary_roughness_remap_w_1.outputs[0], reroute_032_1.inputs[0])
- test_group.links.new(cloth_primary_roughness_remap_x_1.outputs[0], reroute_057_1.inputs[0])
- test_group.links.new(cloth_primary_roughness_remap_y_1.outputs[0], reroute_058_1.inputs[0])
- test_group.links.new(cloth_primary_roughness_remap_z_1.outputs[0], reroute_059_1.inputs[0])
- test_group.links.new(cloth_primary_roughness_remap_w_1.outputs[0], reroute_060_1.inputs[0])
- test_group.links.new(cloth_secondary_roughness_remap_x_1.outputs[0], reroute_085_1.inputs[0])
- test_group.links.new(cloth_secondary_roughness_remap_y_1.outputs[0], reroute_086_1.inputs[0])
- test_group.links.new(cloth_secondary_roughness_remap_z_1.outputs[0], reroute_087_1.inputs[0])
- test_group.links.new(cloth_secondary_roughness_remap_w_1.outputs[0], reroute_088_1.inputs[0])
- test_group.links.new(suit_primary_roughness_remap_x_1.outputs[0], reroute_113_1.inputs[0])
- test_group.links.new(suit_primary_roughness_remap_y_1.outputs[0], reroute_114_1.inputs[0])
- test_group.links.new(suit_primary_roughness_remap_z_1.outputs[0], reroute_115_1.inputs[0])
- test_group.links.new(suit_primary_roughness_remap_w_1.outputs[0], reroute_116_1.inputs[0])
- test_group.links.new(suit_secondary_roughness_remap_x_1.outputs[0], reroute_177_1.inputs[0])
- test_group.links.new(suit_secondary_roughness_remap_y_1.outputs[0], reroute_182_1.inputs[0])
- test_group.links.new(suit_secondary_roughness_remap_z_1.outputs[0], reroute_181_1.inputs[0])
- test_group.links.new(suit_secondary_roughness_remap_w_1.outputs[0], reroute_180_1.inputs[0])
- test_group.links.new(armor_primary_detail_diffuse_map_1.outputs[0], reroute_005_1.inputs[0])
- test_group.links.new(armor_secondary_detail_diffuse_map_1.outputs[0], reroute_033_1.inputs[0])
- test_group.links.new(cloth_primary_detail_diffuse_map_1.outputs[0], reroute_061_1.inputs[0])
- test_group.links.new(cloth_secondary_detail_diffuse_map_1.outputs[0], reroute_089_1.inputs[0])
- test_group.links.new(suit_primary_detail_diffuse_map_1.outputs[0], reroute_117_1.inputs[0])
- test_group.links.new(suit_secondary_detail_diffuse_map_1.outputs[0], reroute_179_1.inputs[0])
- test_group.links.new(worn_armor_primary_roughness_remap_x_1.outputs[0], reroute_020_1.inputs[0])
- test_group.links.new(worn_armor_primary_roughness_remap_y_1.outputs[0], reroute_021_1.inputs[0])
- test_group.links.new(worn_armor_primary_roughness_remap_z_1.outputs[0], reroute_022_1.inputs[0])
- test_group.links.new(worn_armor_primary_roughness_remap_w_1.outputs[0], reroute_023_1.inputs[0])
- test_group.links.new(worn_armor_secondary_roughness_remap_x_1.outputs[0], reroute_048_1.inputs[0])
- test_group.links.new(worn_armor_secondary_roughness_remap_y_1.outputs[0], reroute_049_1.inputs[0])
- test_group.links.new(worn_armor_secondary_roughness_remap_z_1.outputs[0], reroute_050_1.inputs[0])
- test_group.links.new(worn_armor_secondary_roughness_remap_w_1.outputs[0], reroute_051_1.inputs[0])
- test_group.links.new(worn_cloth_primary_roughness_remap_x_1.outputs[0], reroute_076_1.inputs[0])
- test_group.links.new(worn_cloth_primary_roughness_remap_y_1.outputs[0], reroute_077_1.inputs[0])
- test_group.links.new(worn_cloth_primary_roughness_remap_z_1.outputs[0], reroute_078_1.inputs[0])
- test_group.links.new(worn_cloth_primary_roughness_remap_w_1.outputs[0], reroute_079_1.inputs[0])
- test_group.links.new(worn_cloth_secondary_roughness_remap_x_1.outputs[0], reroute_104_1.inputs[0])
- test_group.links.new(worn_cloth_secondary_roughness_remap_y_1.outputs[0], reroute_105_1.inputs[0])
- test_group.links.new(worn_cloth_secondary_roughness_remap_z_1.outputs[0], reroute_106_1.inputs[0])
- test_group.links.new(worn_cloth_secondary_roughness_remap_w_1.outputs[0], reroute_107_1.inputs[0])
- test_group.links.new(worn_suit_primary_roughness_remap_x_1.outputs[0], reroute_132_1.inputs[0])
- test_group.links.new(worn_suit_primary_roughness_remap_y_1.outputs[0], reroute_133_1.inputs[0])
- test_group.links.new(worn_suit_primary_roughness_remap_z_1.outputs[0], reroute_134_1.inputs[0])
- test_group.links.new(worn_suit_primary_roughness_remap_w_1.outputs[0], reroute_135_1.inputs[0])
- test_group.links.new(worn_suit_secondary_roughness_remap_x_1.outputs[0], reroute_196_1.inputs[0])
- test_group.links.new(worn_suit_secondary_roughness_remap_y_1.outputs[0], reroute_197_1.inputs[0])
- test_group.links.new(worn_suit_secondary_roughness_remap_z_1.outputs[0], reroute_198_1.inputs[0])
- test_group.links.new(worn_suit_secondary_roughness_remap_w_1.outputs[0], reroute_199_1.inputs[0])
- test_group.links.new(armor_primary_detail_diffuse_map_1.outputs[1], reroute_006_1.inputs[0])
- test_group.links.new(armor_secondary_detail_diffuse_map_1.outputs[1], reroute_034_1.inputs[0])
- test_group.links.new(cloth_primary_detail_diffuse_map_1.outputs[1], reroute_062_1.inputs[0])
- test_group.links.new(cloth_secondary_detail_diffuse_map_1.outputs[1], reroute_090_1.inputs[0])
- test_group.links.new(suit_primary_detail_diffuse_map_1.outputs[1], reroute_118_1.inputs[0])
- test_group.links.new(suit_secondary_detail_diffuse_map_1.outputs[1], reroute_178_1.inputs[0])
- test_group.links.new(armor_primary_dye_color_1.outputs[0], reroute_1.inputs[0])
- test_group.links.new(armor_secondary_dye_color_1.outputs[0], reroute_028_1.inputs[0])
- test_group.links.new(cloth_primary_dye_color_1.outputs[0], reroute_056_1.inputs[0])
- test_group.links.new(cloth_secondary_dye_color_1.outputs[0], reroute_084_1.inputs[0])
- test_group.links.new(suit_primary_dye_color_1.outputs[0], reroute_112_1.inputs[0])
- test_group.links.new(suit_secondary_dye_color_1.outputs[0], reroute_176_1.inputs[0])
- test_group.links.new(worn_armor_primary_dye_color_1.outputs[0], reroute_019_1.inputs[0])
- test_group.links.new(worn_armor_secondary_dye_color_1.outputs[0], reroute_047_1.inputs[0])
- test_group.links.new(worn_cloth_primary_dye_color_1.outputs[0], reroute_075_1.inputs[0])
- test_group.links.new(worn_cloth_secondary_dye_color_1.outputs[0], reroute_103_1.inputs[0])
- test_group.links.new(worn_suit_primary_dye_color_1.outputs[0], reroute_131_1.inputs[0])
- test_group.links.new(worn_suit_secondary_dye_color_1.outputs[0], reroute_195_1.inputs[0])
- test_group.links.new(math_1.outputs[0], mix_055_1.inputs[0])
- test_group.links.new(math_001_1.outputs[0], mix_056_1.inputs[0])
- test_group.links.new(math_004_1.outputs[0], mix_057_1.inputs[0])
- test_group.links.new(math_007_1.outputs[0], mix_058_1.inputs[0])
- test_group.links.new(math_008_1.outputs[0], mix_059_1.inputs[0])
- test_group.links.new(armor_primary_transmission_1.outputs[0], reroute_017_1.inputs[0])
- test_group.links.new(armor_primary_iridescence_1.outputs[0], reroute_016_1.inputs[0])
- test_group.links.new(armor_primary_metalness_1.outputs[0], reroute_015_1.inputs[0])
- test_group.links.new(armor_secondary_metalness_1.outputs[0], reroute_043_1.inputs[0])
- test_group.links.new(armor_secondary_iridescence_1.outputs[0], reroute_044_1.inputs[0])
- test_group.links.new(armor_secondary_transmission_1.outputs[0], reroute_045_1.inputs[0])
- test_group.links.new(cloth_primary_metalness_1.outputs[0], reroute_071_1.inputs[0])
- test_group.links.new(cloth_primary_iridescence_1.outputs[0], reroute_072_1.inputs[0])
- test_group.links.new(cloth_primary_transmission_1.outputs[0], reroute_073_1.inputs[0])
- test_group.links.new(cloth_secondary_metalness_1.outputs[0], reroute_099_1.inputs[0])
- test_group.links.new(cloth_secondary_iridescence_1.outputs[0], reroute_100_1.inputs[0])
- test_group.links.new(cloth_secondary_transmission_1.outputs[0], reroute_101_1.inputs[0])
- test_group.links.new(suit_primary_metalness_1.outputs[0], reroute_127_1.inputs[0])
- test_group.links.new(suit_primary_iridescence_1.outputs[0], reroute_128_1.inputs[0])
- test_group.links.new(suit_primary_transmission_1.outputs[0], reroute_129_1.inputs[0])
- test_group.links.new(suit_secondary_metalness_1.outputs[0], reroute_190_1.inputs[0])
- test_group.links.new(suit_secondary_iridescence_1.outputs[0], reroute_191_1.inputs[0])
- test_group.links.new(worn_armor_primary_metalness_1.outputs[0], reroute_027_1.inputs[0])
- test_group.links.new(worn_armor_secondary_metalness_1.outputs[0], reroute_055_1.inputs[0])
- test_group.links.new(worn_cloth_primary_metalness_1.outputs[0], reroute_083_1.inputs[0])
- test_group.links.new(worn_cloth_secondary_metalness_1.outputs[0], reroute_111_1.inputs[0])
- test_group.links.new(worn_suit_primary_metalness_1.outputs[0], reroute_139_1.inputs[0])
- test_group.links.new(worn_suit_secondary_metalness_1.outputs[0], reroute_203_1.inputs[0])
- test_group.links.new(armor_primary_emission_color_1.outputs[0], reroute_018_1.inputs[0])
- test_group.links.new(armor_secondary_emission_color_1.outputs[0], reroute_046_1.inputs[0])
- test_group.links.new(cloth_primary_emission_color_1.outputs[0], reroute_074_1.inputs[0])
- test_group.links.new(cloth_secondary_emission_color_1.outputs[0], reroute_102_1.inputs[0])
- test_group.links.new(suit_primary_emission_color_1.outputs[0], reroute_130_1.inputs[0])
- test_group.links.new(suit_secondary_emission_color_1.outputs[0], reroute_193_1.inputs[0])
- test_group.links.new(reroute_001_1.outputs[0], combine_xyz_012_1.inputs[0])
- test_group.links.new(reroute_002_1.outputs[0], combine_xyz_012_1.inputs[1])
- test_group.links.new(reroute_003_1.outputs[0], combine_xyz_012_1.inputs[2])
- test_group.links.new(reroute_004_1.outputs[0], combine_xyz_013_1.inputs[0])
- test_group.links.new(mix_064_1.outputs[0], mix_060_1.inputs[1])
- test_group.links.new(mix_060_1.outputs[0], mix_061_1.inputs[1])
- test_group.links.new(mix_061_1.outputs[0], mix_062_1.inputs[1])
- test_group.links.new(mix_062_1.outputs[0], mix_063_1.inputs[1])
- test_group.links.new(math_1.outputs[0], mix_064_1.inputs[0])
- test_group.links.new(math_001_1.outputs[0], mix_060_1.inputs[0])
- test_group.links.new(math_004_1.outputs[0], mix_061_1.inputs[0])
- test_group.links.new(math_007_1.outputs[0], mix_062_1.inputs[0])
- test_group.links.new(math_008_1.outputs[0], mix_063_1.inputs[0])
- test_group.links.new(worn_armor_primary_detail_diffuse_blend_1.outputs[0], reroute_024_1.inputs[0])
- test_group.links.new(worn_armor_primary_detail_normal_blend_1.outputs[0], reroute_025_1.inputs[0])
- test_group.links.new(worn_armor_primary_detail_roughness_blend_1.outputs[0], reroute_026_1.inputs[0])
- test_group.links.new(worn_armor_secondary_detail_diffuse_blend_1.outputs[0], reroute_052_1.inputs[0])
- test_group.links.new(worn_armor_secondary_detail_normal_blend_1.outputs[0], reroute_053_1.inputs[0])
- test_group.links.new(worn_armor_secondary_detail_roughness_blend_1.outputs[0], reroute_054_1.inputs[0])
- test_group.links.new(worn_cloth_primary_detail_diffuse_blend_1.outputs[0], reroute_080_1.inputs[0])
- test_group.links.new(worn_cloth_primary_detail_normal_blend_1.outputs[0], reroute_081_1.inputs[0])
- test_group.links.new(worn_cloth_primary_detail_roughness_blend_1.outputs[0], reroute_082_1.inputs[0])
- test_group.links.new(worn_cloth_secondary_detail_diffuse_blend_1.outputs[0], reroute_108_1.inputs[0])
- test_group.links.new(worn_cloth_secondary_detail_normal_blend_1.outputs[0], reroute_109_1.inputs[0])
- test_group.links.new(worn_cloth_secondary_detail_roughness_blend_1.outputs[0], reroute_110_1.inputs[0])
- test_group.links.new(worn_suit_primary_detail_diffuse_blend_1.outputs[0], reroute_136_1.inputs[0])
- test_group.links.new(worn_suit_primary_detail_normal_blend_1.outputs[0], reroute_137_1.inputs[0])
- test_group.links.new(worn_suit_primary_detail_roughness_blend_1.outputs[0], reroute_138_1.inputs[0])
- test_group.links.new(worn_suit_secondary_detail_diffuse_blend_1.outputs[0], reroute_200_1.inputs[0])
- test_group.links.new(worn_suit_secondary_detail_normal_blend_1.outputs[0], reroute_201_1.inputs[0])
- test_group.links.new(worn_suit_secondary_detail_roughness_blend_1.outputs[0], reroute_202_1.inputs[0])
- test_group.links.new(reroute_029_1.outputs[0], combine_xyz_014_1.inputs[0])
- test_group.links.new(reroute_030_1.outputs[0], combine_xyz_014_1.inputs[1])
- test_group.links.new(reroute_031_1.outputs[0], combine_xyz_014_1.inputs[2])
- test_group.links.new(reroute_032_1.outputs[0], combine_xyz_015_1.inputs[0])
- test_group.links.new(reroute_057_1.outputs[0], combine_xyz_016_1.inputs[0])
- test_group.links.new(reroute_058_1.outputs[0], combine_xyz_016_1.inputs[1])
- test_group.links.new(reroute_059_1.outputs[0], combine_xyz_016_1.inputs[2])
- test_group.links.new(reroute_060_1.outputs[0], combine_xyz_017_1.inputs[0])
- test_group.links.new(reroute_085_1.outputs[0], combine_xyz_018_1.inputs[0])
- test_group.links.new(reroute_086_1.outputs[0], combine_xyz_018_1.inputs[1])
- test_group.links.new(reroute_087_1.outputs[0], combine_xyz_018_1.inputs[2])
- test_group.links.new(reroute_088_1.outputs[0], combine_xyz_019_1.inputs[0])
- test_group.links.new(reroute_090_1.outputs[0], combine_xyz_019_1.inputs[1])
- test_group.links.new(reroute_078_1.outputs[0], reroute_258_1.inputs[0])
- test_group.links.new(reroute_079_1.outputs[0], reroute_259_1.inputs[0])
- test_group.links.new(reroute_077_1.outputs[0], reroute_257_1.inputs[0])
- test_group.links.new(reroute_076_1.outputs[0], reroute_256_1.inputs[0])
- test_group.links.new(reroute_062_1.outputs[0], combine_xyz_017_1.inputs[1])
- test_group.links.new(reroute_034_1.outputs[0], combine_xyz_015_1.inputs[1])
- test_group.links.new(reroute_048_1.outputs[0], reroute_248_1.inputs[0])
- test_group.links.new(reroute_049_1.outputs[0], reroute_250_1.inputs[0])
- test_group.links.new(reroute_050_1.outputs[0], reroute_251_1.inputs[0])
- test_group.links.new(reroute_051_1.outputs[0], reroute_252_1.inputs[0])
- test_group.links.new(reroute_006_1.outputs[0], combine_xyz_013_1.inputs[1])
- test_group.links.new(reroute_020_1.outputs[0], reroute_158_1.inputs[0])
- test_group.links.new(reroute_021_1.outputs[0], reroute_160_1.inputs[0])
- test_group.links.new(reroute_022_1.outputs[0], reroute_161_1.inputs[0])
- test_group.links.new(reroute_023_1.outputs[0], reroute_162_1.inputs[0])
- test_group.links.new(reroute_113_1.outputs[0], combine_xyz_024_1.inputs[0])
- test_group.links.new(reroute_114_1.outputs[0], combine_xyz_024_1.inputs[1])
- test_group.links.new(reroute_115_1.outputs[0], combine_xyz_024_1.inputs[2])
- test_group.links.new(reroute_116_1.outputs[0], combine_xyz_025_1.inputs[0])
- test_group.links.new(reroute_118_1.outputs[0], combine_xyz_025_1.inputs[1])
- test_group.links.new(reroute_177_1.outputs[0], combine_xyz_028_1.inputs[0])
- test_group.links.new(reroute_182_1.outputs[0], combine_xyz_028_1.inputs[1])
- test_group.links.new(reroute_181_1.outputs[0], combine_xyz_028_1.inputs[2])
- test_group.links.new(reroute_180_1.outputs[0], combine_xyz_029_1.inputs[0])
- test_group.links.new(reroute_178_1.outputs[0], combine_xyz_029_1.inputs[1])
- test_group.links.new(reroute_1.outputs[0], reroute_140_1.inputs[0])
- test_group.links.new(reroute_140_1.outputs[0], reroute_141_1.inputs[0])
- test_group.links.new(reroute_143_1.outputs[0], reroute_142_1.inputs[0])
- test_group.links.new(reroute_028_1.outputs[0], reroute_143_1.inputs[0])
- test_group.links.new(reroute_056_1.outputs[0], reroute_144_1.inputs[0])
- test_group.links.new(reroute_144_1.outputs[0], reroute_145_1.inputs[0])
- test_group.links.new(reroute_084_1.outputs[0], reroute_146_1.inputs[0])
- test_group.links.new(reroute_146_1.outputs[0], reroute_147_1.inputs[0])
- test_group.links.new(reroute_112_1.outputs[0], reroute_148_1.inputs[0])
- test_group.links.new(reroute_148_1.outputs[0], reroute_149_1.inputs[0])
- test_group.links.new(reroute_176_1.outputs[0], reroute_150_1.inputs[0])
- test_group.links.new(reroute_150_1.outputs[0], reroute_151_1.inputs[0])
- test_group.links.new(reroute_141_1.outputs[0], reroute_154_1.inputs[0])
- test_group.links.new(reroute_142_1.outputs[0], reroute_153_1.inputs[0])
- test_group.links.new(reroute_145_1.outputs[0], reroute_155_1.inputs[0])
- test_group.links.new(reroute_147_1.outputs[0], reroute_156_1.inputs[0])
- test_group.links.new(reroute_149_1.outputs[0], reroute_157_1.inputs[0])
- test_group.links.new(reroute_151_1.outputs[0], reroute_152_1.inputs[0])
- test_group.links.new(reroute_154_1.outputs[0], mix_1.inputs[1])
- test_group.links.new(reroute_153_1.outputs[0], mix_1.inputs[2])
- test_group.links.new(reroute_155_1.outputs[0], mix_001_1.inputs[2])
- test_group.links.new(reroute_156_1.outputs[0], mix_002_1.inputs[2])
- test_group.links.new(reroute_157_1.outputs[0], mix_003_1.inputs[2])
- test_group.links.new(reroute_152_1.outputs[0], mix_004_1.inputs[2])
- test_group.links.new(reroute_158_1.outputs[0], reroute_159_1.inputs[0])
- test_group.links.new(reroute_159_1.outputs[0], combine_xyz_013_1.inputs[2])
- test_group.links.new(reroute_160_1.outputs[0], reroute_163_1.inputs[0])
- test_group.links.new(reroute_163_1.outputs[0], combine_xyz_020_1.inputs[0])
- test_group.links.new(reroute_161_1.outputs[0], reroute_164_1.inputs[0])
- test_group.links.new(reroute_164_1.outputs[0], combine_xyz_020_1.inputs[1])
- test_group.links.new(reroute_162_1.outputs[0], reroute_165_1.inputs[0])
- test_group.links.new(reroute_165_1.outputs[0], combine_xyz_020_1.inputs[2])
- test_group.links.new(reroute_205_1.outputs[0], reroute_171_1.inputs[0])
- test_group.links.new(reroute_204_1.outputs[0], reroute_170_1.inputs[0])
- test_group.links.new(reroute_175_1.outputs[0], reroute_169_1.inputs[0])
- test_group.links.new(reroute_174_1.outputs[0], reroute_168_1.inputs[0])
- test_group.links.new(reroute_173_1.outputs[0], reroute_167_1.inputs[0])
- test_group.links.new(reroute_172_1.outputs[0], reroute_166_1.inputs[0])
- test_group.links.new(combine_xyz_012_1.outputs[0], reroute_172_1.inputs[0])
- test_group.links.new(combine_xyz_014_1.outputs[0], reroute_173_1.inputs[0])
- test_group.links.new(combine_xyz_016_1.outputs[0], reroute_174_1.inputs[0])
- test_group.links.new(combine_xyz_018_1.outputs[0], reroute_175_1.inputs[0])
- test_group.links.new(combine_xyz_024_1.outputs[0], reroute_204_1.inputs[0])
- test_group.links.new(combine_xyz_028_1.outputs[0], reroute_205_1.inputs[0])
- test_group.links.new(reroute_166_1.outputs[0], reroute_206_1.inputs[0])
- test_group.links.new(reroute_167_1.outputs[0], reroute_211_1.inputs[0])
- test_group.links.new(reroute_168_1.outputs[0], reroute_207_1.inputs[0])
- test_group.links.new(reroute_169_1.outputs[0], reroute_208_1.inputs[0])
- test_group.links.new(reroute_170_1.outputs[0], reroute_209_1.inputs[0])
- test_group.links.new(reroute_171_1.outputs[0], reroute_210_1.inputs[0])
- test_group.links.new(reroute_206_1.outputs[0], mix_020_1.inputs[1])
- test_group.links.new(reroute_211_1.outputs[0], mix_020_1.inputs[2])
- test_group.links.new(reroute_207_1.outputs[0], mix_021_1.inputs[2])
- test_group.links.new(reroute_208_1.outputs[0], mix_022_1.inputs[2])
- test_group.links.new(reroute_209_1.outputs[0], mix_023_1.inputs[2])
- test_group.links.new(reroute_210_1.outputs[0], mix_024_1.inputs[2])
- test_group.links.new(reroute_219_1.outputs[0], reroute_213_1.inputs[0])
- test_group.links.new(reroute_220_1.outputs[0], reroute_214_1.inputs[0])
- test_group.links.new(reroute_221_1.outputs[0], reroute_215_1.inputs[0])
- test_group.links.new(reroute_222_1.outputs[0], reroute_216_1.inputs[0])
- test_group.links.new(reroute_218_1.outputs[0], reroute_212_1.inputs[0])
- test_group.links.new(reroute_223_1.outputs[0], reroute_217_1.inputs[0])
- test_group.links.new(combine_xyz_013_1.outputs[0], reroute_219_1.inputs[0])
- test_group.links.new(combine_xyz_015_1.outputs[0], reroute_220_1.inputs[0])
- test_group.links.new(combine_xyz_017_1.outputs[0], reroute_221_1.inputs[0])
- test_group.links.new(combine_xyz_019_1.outputs[0], reroute_222_1.inputs[0])
- test_group.links.new(combine_xyz_025_1.outputs[0], reroute_218_1.inputs[0])
- test_group.links.new(combine_xyz_029_1.outputs[0], reroute_223_1.inputs[0])
- test_group.links.new(reroute_213_1.outputs[0], reroute_229_1.inputs[0])
- test_group.links.new(reroute_214_1.outputs[0], reroute_225_1.inputs[0])
- test_group.links.new(reroute_215_1.outputs[0], reroute_226_1.inputs[0])
- test_group.links.new(reroute_216_1.outputs[0], reroute_227_1.inputs[0])
- test_group.links.new(reroute_212_1.outputs[0], reroute_224_1.inputs[0])
- test_group.links.new(reroute_217_1.outputs[0], reroute_228_1.inputs[0])
- test_group.links.new(reroute_229_1.outputs[0], mix_025_1.inputs[1])
- test_group.links.new(reroute_225_1.outputs[0], mix_025_1.inputs[2])
- test_group.links.new(reroute_226_1.outputs[0], mix_026_1.inputs[2])
- test_group.links.new(reroute_227_1.outputs[0], mix_027_1.inputs[2])
- test_group.links.new(reroute_224_1.outputs[0], mix_028_1.inputs[2])
- test_group.links.new(reroute_228_1.outputs[0], mix_029_1.inputs[2])
- test_group.links.new(reroute_236_1.outputs[0], reroute_230_1.inputs[0])
- test_group.links.new(reroute_237_1.outputs[0], reroute_231_1.inputs[0])
- test_group.links.new(reroute_238_1.outputs[0], reroute_232_1.inputs[0])
- test_group.links.new(reroute_239_1.outputs[0], reroute_233_1.inputs[0])
- test_group.links.new(reroute_240_1.outputs[0], reroute_234_1.inputs[0])
- test_group.links.new(reroute_241_1.outputs[0], reroute_235_1.inputs[0])
- test_group.links.new(combine_xyz_020_1.outputs[0], reroute_241_1.inputs[0])
- test_group.links.new(combine_xyz_021_1.outputs[0], reroute_240_1.inputs[0])
- test_group.links.new(combine_xyz_022_1.outputs[0], reroute_239_1.inputs[0])
- test_group.links.new(combine_xyz_023_1.outputs[0], reroute_238_1.inputs[0])
- test_group.links.new(combine_xyz_026_1.outputs[0], reroute_237_1.inputs[0])
- test_group.links.new(combine_xyz_027_1.outputs[0], reroute_236_1.inputs[0])
- test_group.links.new(reroute_235_1.outputs[0], reroute_245_1.inputs[0])
- test_group.links.new(reroute_234_1.outputs[0], reroute_244_1.inputs[0])
- test_group.links.new(reroute_233_1.outputs[0], reroute_243_1.inputs[0])
- test_group.links.new(reroute_232_1.outputs[0], reroute_242_1.inputs[0])
- test_group.links.new(reroute_231_1.outputs[0], reroute_246_1.inputs[0])
- test_group.links.new(reroute_230_1.outputs[0], reroute_247_1.inputs[0])
- test_group.links.new(reroute_245_1.outputs[0], mix_030_1.inputs[1])
- test_group.links.new(reroute_244_1.outputs[0], mix_030_1.inputs[2])
- test_group.links.new(reroute_243_1.outputs[0], mix_031_1.inputs[2])
- test_group.links.new(reroute_242_1.outputs[0], mix_032_1.inputs[2])
- test_group.links.new(reroute_246_1.outputs[0], mix_033_1.inputs[2])
- test_group.links.new(reroute_247_1.outputs[0], mix_034_1.inputs[2])
- test_group.links.new(reroute_248_1.outputs[0], reroute_249_1.inputs[0])
- test_group.links.new(reroute_249_1.outputs[0], combine_xyz_015_1.inputs[2])
- test_group.links.new(reroute_250_1.outputs[0], reroute_253_1.inputs[0])
- test_group.links.new(reroute_251_1.outputs[0], reroute_254_1.inputs[0])
- test_group.links.new(reroute_252_1.outputs[0], reroute_255_1.inputs[0])
- test_group.links.new(reroute_253_1.outputs[0], combine_xyz_021_1.inputs[0])
- test_group.links.new(reroute_254_1.outputs[0], combine_xyz_021_1.inputs[1])
- test_group.links.new(reroute_255_1.outputs[0], combine_xyz_021_1.inputs[2])
- test_group.links.new(reroute_256_1.outputs[0], reroute_263_1.inputs[0])
- test_group.links.new(reroute_257_1.outputs[0], reroute_262_1.inputs[0])
- test_group.links.new(reroute_258_1.outputs[0], reroute_261_1.inputs[0])
- test_group.links.new(reroute_259_1.outputs[0], reroute_260_1.inputs[0])
- test_group.links.new(reroute_260_1.outputs[0], combine_xyz_022_1.inputs[2])
- test_group.links.new(reroute_261_1.outputs[0], combine_xyz_022_1.inputs[1])
- test_group.links.new(reroute_262_1.outputs[0], combine_xyz_022_1.inputs[0])
- test_group.links.new(reroute_263_1.outputs[0], combine_xyz_017_1.inputs[2])
- test_group.links.new(reroute_268_1.outputs[0], reroute_267_1.inputs[0])
- test_group.links.new(reroute_269_1.outputs[0], reroute_265_1.inputs[0])
- test_group.links.new(reroute_270_1.outputs[0], reroute_264_1.inputs[0])
- test_group.links.new(reroute_271_1.outputs[0], reroute_266_1.inputs[0])
- test_group.links.new(reroute_266_1.outputs[0], combine_xyz_023_1.inputs[2])
- test_group.links.new(reroute_264_1.outputs[0], combine_xyz_023_1.inputs[1])
- test_group.links.new(reroute_265_1.outputs[0], combine_xyz_023_1.inputs[0])
- test_group.links.new(reroute_267_1.outputs[0], combine_xyz_019_1.inputs[2])
- test_group.links.new(reroute_104_1.outputs[0], reroute_268_1.inputs[0])
- test_group.links.new(reroute_105_1.outputs[0], reroute_269_1.inputs[0])
- test_group.links.new(reroute_106_1.outputs[0], reroute_270_1.inputs[0])
- test_group.links.new(reroute_107_1.outputs[0], reroute_271_1.inputs[0])
- test_group.links.new(reroute_273_1.outputs[0], reroute_279_1.inputs[0])
- test_group.links.new(reroute_274_1.outputs[0], reroute_278_1.inputs[0])
- test_group.links.new(reroute_275_1.outputs[0], reroute_277_1.inputs[0])
- test_group.links.new(reroute_276_1.outputs[0], reroute_272_1.inputs[0])
- test_group.links.new(reroute_132_1.outputs[0], reroute_273_1.inputs[0])
- test_group.links.new(reroute_133_1.outputs[0], reroute_274_1.inputs[0])
- test_group.links.new(reroute_134_1.outputs[0], reroute_275_1.inputs[0])
- test_group.links.new(reroute_135_1.outputs[0], reroute_276_1.inputs[0])
- test_group.links.new(reroute_272_1.outputs[0], combine_xyz_026_1.inputs[2])
- test_group.links.new(reroute_277_1.outputs[0], combine_xyz_026_1.inputs[1])
- test_group.links.new(reroute_278_1.outputs[0], combine_xyz_026_1.inputs[0])
- test_group.links.new(reroute_279_1.outputs[0], combine_xyz_025_1.inputs[2])
- test_group.links.new(reroute_280_1.outputs[0], reroute_287_1.inputs[0])
- test_group.links.new(reroute_281_1.outputs[0], reroute_286_1.inputs[0])
- test_group.links.new(reroute_282_1.outputs[0], reroute_285_1.inputs[0])
- test_group.links.new(reroute_283_1.outputs[0], reroute_284_1.inputs[0])
- test_group.links.new(reroute_284_1.outputs[0], combine_xyz_027_1.inputs[2])
- test_group.links.new(reroute_285_1.outputs[0], combine_xyz_027_1.inputs[1])
- test_group.links.new(reroute_286_1.outputs[0], combine_xyz_027_1.inputs[0])
- test_group.links.new(reroute_287_1.outputs[0], combine_xyz_029_1.inputs[2])
- test_group.links.new(reroute_196_1.outputs[0], reroute_280_1.inputs[0])
- test_group.links.new(reroute_197_1.outputs[0], reroute_281_1.inputs[0])
- test_group.links.new(reroute_198_1.outputs[0], reroute_282_1.inputs[0])
- test_group.links.new(reroute_199_1.outputs[0], reroute_283_1.inputs[0])
- test_group.links.new(reroute_288_1.outputs[0], reroute_289_1.inputs[0])
- test_group.links.new(reroute_289_1.outputs[0], armor_primary_detail_diffuse_map_1.inputs[0])
- test_group.links.new(reroute_288_1.outputs[0], reroute_290_1.inputs[0])
- test_group.links.new(reroute_290_1.outputs[0], armor_secondary_detail_diffuse_map_1.inputs[0])
- test_group.links.new(reroute_291_1.outputs[0], reroute_292_1.inputs[0])
- test_group.links.new(reroute_292_1.outputs[0], armor_primary_detail_normal_map_1.inputs[0])
- test_group.links.new(reroute_291_1.outputs[0], reroute_293_1.inputs[0])
- test_group.links.new(reroute_293_1.outputs[0], armor_secondary_detail_normal_map_1.inputs[0])
- test_group.links.new(reroute_295_1.outputs[0], armor_detail_normal_transform_1.inputs[0])
- test_group.links.new(reroute_295_1.outputs[0], reroute_296_1.inputs[0])
- test_group.links.new(reroute_296_1.outputs[0], armor_detail_diffuse_transform_1.inputs[0])
- test_group.links.new(reroute_298_1.outputs[0], cloth_detail_normal_transform_1.inputs[0])
- test_group.links.new(reroute_299_1.outputs[0], cloth_detail_diffuse_transform_1.inputs[0])
- test_group.links.new(uv_map_1.outputs[0], reroute_300_1.inputs[0])
- test_group.links.new(reroute_300_1.outputs[0], reroute_299_1.inputs[0])
- test_group.links.new(reroute_300_1.outputs[0], reroute_298_1.inputs[0])
- test_group.links.new(reroute_299_1.outputs[0], reroute_295_1.inputs[0])
- test_group.links.new(reroute_298_1.outputs[0], reroute_301_1.inputs[0])
- test_group.links.new(reroute_301_1.outputs[0], suit_detail_diffuse_transform_1.inputs[0])
- test_group.links.new(reroute_301_1.outputs[0], reroute_302_1.inputs[0])
- test_group.links.new(reroute_302_1.outputs[0], suit_detail_normal_transform_1.inputs[0])
- test_group.links.new(reroute_294_1.outputs[0], reroute_307_1.inputs[0])
- test_group.links.new(reroute_297_1.outputs[0], reroute_308_1.inputs[0])
- test_group.links.new(reroute_303_1.outputs[0], reroute_309_1.inputs[0])
- test_group.links.new(reroute_304_1.outputs[0], reroute_310_1.inputs[0])
- test_group.links.new(reroute_305_1.outputs[0], reroute_311_1.inputs[0])
- test_group.links.new(reroute_306_1.outputs[0], reroute_312_1.inputs[0])
- test_group.links.new(reroute_307_1.outputs[0], mix_005_1.inputs[1])
- test_group.links.new(reroute_308_1.outputs[0], mix_005_1.inputs[2])
- test_group.links.new(reroute_309_1.outputs[0], mix_006_1.inputs[2])
- test_group.links.new(reroute_310_1.outputs[0], mix_007_1.inputs[2])
- test_group.links.new(reroute_311_1.outputs[0], mix_008_1.inputs[2])
- test_group.links.new(reroute_312_1.outputs[0], mix_009_1.inputs[2])
- test_group.links.new(reroute_318_1.outputs[0], reroute_306_1.inputs[0])
- test_group.links.new(reroute_317_1.outputs[0], reroute_305_1.inputs[0])
- test_group.links.new(reroute_316_1.outputs[0], reroute_304_1.inputs[0])
- test_group.links.new(reroute_315_1.outputs[0], reroute_303_1.inputs[0])
- test_group.links.new(reroute_314_1.outputs[0], reroute_297_1.inputs[0])
- test_group.links.new(reroute_313_1.outputs[0], reroute_294_1.inputs[0])
- test_group.links.new(reroute_019_1.outputs[0], reroute_313_1.inputs[0])
- test_group.links.new(reroute_047_1.outputs[0], reroute_314_1.inputs[0])
- test_group.links.new(reroute_075_1.outputs[0], reroute_315_1.inputs[0])
- test_group.links.new(reroute_103_1.outputs[0], reroute_316_1.inputs[0])
- test_group.links.new(reroute_131_1.outputs[0], reroute_317_1.inputs[0])
- test_group.links.new(reroute_195_1.outputs[0], reroute_318_1.inputs[0])
- test_group.links.new(reroute_319_1.outputs[0], reroute_323_1.inputs[0])
- test_group.links.new(reroute_320_1.outputs[0], reroute_321_1.inputs[0])
- test_group.links.new(reroute_321_1.outputs[0], cloth_primary_detail_normal_map_1.inputs[0])
- test_group.links.new(reroute_320_1.outputs[0], reroute_322_1.inputs[0])
- test_group.links.new(reroute_322_1.outputs[0], cloth_secondary_detail_normal_map_1.inputs[0])
- test_group.links.new(reroute_323_1.outputs[0], cloth_primary_detail_diffuse_map_1.inputs[0])
- test_group.links.new(reroute_319_1.outputs[0], reroute_324_1.inputs[0])
- test_group.links.new(reroute_324_1.outputs[0], cloth_secondary_detail_diffuse_map_1.inputs[0])
- test_group.links.new(reroute_328_1.outputs[0], reroute_327_1.inputs[0])
- test_group.links.new(reroute_325_1.outputs[0], reroute_330_1.inputs[0])
- test_group.links.new(reroute_325_1.outputs[0], reroute_326_1.inputs[0])
- test_group.links.new(reroute_328_1.outputs[0], reroute_329_1.inputs[0])
- test_group.links.new(suit_detail_normal_transform_1.outputs[0], reroute_325_1.inputs[0])
- test_group.links.new(suit_detail_diffuse_transform_1.outputs[0], reroute_328_1.inputs[0])
- test_group.links.new(reroute_330_1.outputs[0], suit_primary_detail_normal_map_1.inputs[0])
- test_group.links.new(reroute_326_1.outputs[0], suit_secondary_detail_normal_map_1.inputs[0])
- test_group.links.new(reroute_329_1.outputs[0], suit_secondary_detail_diffuse_map_1.inputs[0])
- test_group.links.new(reroute_327_1.outputs[0], suit_primary_detail_diffuse_map_1.inputs[0])
- test_group.links.new(reroute_007_1.outputs[0], combine_xyz_1.inputs[0])
- test_group.links.new(reroute_008_1.outputs[0], combine_xyz_1.inputs[1])
- test_group.links.new(reroute_009_1.outputs[0], combine_xyz_1.inputs[2])
- test_group.links.new(reroute_010_1.outputs[0], combine_xyz_001_1.inputs[0])
- test_group.links.new(combine_xyz_1.outputs[0], reroute_331_1.inputs[0])
- test_group.links.new(combine_xyz_001_1.outputs[0], reroute_332_1.inputs[0])
- test_group.links.new(reroute_331_1.outputs[0], reroute_333_1.inputs[0])
- test_group.links.new(reroute_332_1.outputs[0], reroute_334_1.inputs[0])
- test_group.links.new(reroute_333_1.outputs[0], reroute_335_1.inputs[0])
- test_group.links.new(reroute_334_1.outputs[0], reroute_336_1.inputs[0])
- test_group.links.new(reroute_335_1.outputs[0], mix_010_1.inputs[1])
- test_group.links.new(reroute_336_1.outputs[0], mix_015_1.inputs[1])
- test_group.links.new(mix_063_1.outputs[0], reroute_349_1.inputs[0])
- test_group.links.new(reroute_337_1.outputs[0], reroute_350_1.inputs[0])
- test_group.links.new(reroute_338_1.outputs[0], reroute_351_1.inputs[0])
- test_group.links.new(reroute_339_1.outputs[0], reroute_352_1.inputs[0])
- test_group.links.new(reroute_340_1.outputs[0], reroute_353_1.inputs[0])
- test_group.links.new(reroute_341_1.outputs[0], reroute_354_1.inputs[0])
- test_group.links.new(reroute_342_1.outputs[0], reroute_355_1.inputs[0])
- test_group.links.new(reroute_343_1.outputs[0], reroute_356_1.inputs[0])
- test_group.links.new(reroute_344_1.outputs[0], reroute_357_1.inputs[0])
- test_group.links.new(reroute_345_1.outputs[0], reroute_358_1.inputs[0])
- test_group.links.new(reroute_346_1.outputs[0], reroute_359_1.inputs[0])
- test_group.links.new(reroute_347_1.outputs[0], reroute_360_1.inputs[0])
- test_group.links.new(reroute_348_1.outputs[0], reroute_361_1.inputs[0])
- test_group.links.new(reroute_349_1.outputs[0], reroute_362_1.inputs[0])
- test_group.links.new(reroute_350_1.outputs[0], group_output_1.inputs[0])
- test_group.links.new(reroute_351_1.outputs[0], group_output_1.inputs[1])
- test_group.links.new(reroute_352_1.outputs[0], group_output_1.inputs[2])
- test_group.links.new(reroute_353_1.outputs[0], group_output_1.inputs[3])
- test_group.links.new(reroute_354_1.outputs[0], group_output_1.inputs[4])
- test_group.links.new(reroute_355_1.outputs[0], group_output_1.inputs[5])
- test_group.links.new(reroute_356_1.outputs[0], group_output_1.inputs[6])
- test_group.links.new(reroute_357_1.outputs[0], group_output_1.inputs[8])
- test_group.links.new(reroute_358_1.outputs[0], group_output_1.inputs[9])
- test_group.links.new(reroute_359_1.outputs[0], group_output_1.inputs[11])
- test_group.links.new(reroute_360_1.outputs[0], group_output_1.inputs[12])
- test_group.links.new(reroute_361_1.outputs[0], group_output_1.inputs[10])
- test_group.links.new(reroute_362_1.outputs[0], group_output_1.inputs[7])
- test_group.links.new(reroute_035_1.outputs[0], combine_xyz_002_1.inputs[0])
- test_group.links.new(reroute_036_1.outputs[0], combine_xyz_002_1.inputs[1])
- test_group.links.new(reroute_037_1.outputs[0], combine_xyz_002_1.inputs[2])
- test_group.links.new(reroute_038_1.outputs[0], combine_xyz_003_1.inputs[0])
- test_group.links.new(reroute_063_1.outputs[0], combine_xyz_005_1.inputs[0])
- test_group.links.new(reroute_064_1.outputs[0], combine_xyz_005_1.inputs[1])
- test_group.links.new(reroute_065_1.outputs[0], combine_xyz_005_1.inputs[2])
- test_group.links.new(reroute_066_1.outputs[0], combine_xyz_004_1.inputs[0])
- test_group.links.new(reroute_091_1.outputs[0], combine_xyz_007_1.inputs[0])
- test_group.links.new(reroute_092_1.outputs[0], combine_xyz_007_1.inputs[1])
- test_group.links.new(reroute_093_1.outputs[0], combine_xyz_007_1.inputs[2])
- test_group.links.new(reroute_094_1.outputs[0], combine_xyz_006_1.inputs[0])
- test_group.links.new(reroute_119_1.outputs[0], combine_xyz_008_1.inputs[0])
- test_group.links.new(reroute_120_1.outputs[0], combine_xyz_008_1.inputs[1])
- test_group.links.new(reroute_121_1.outputs[0], combine_xyz_008_1.inputs[2])
- test_group.links.new(reroute_122_1.outputs[0], combine_xyz_009_1.inputs[0])
- test_group.links.new(reroute_183_1.outputs[0], combine_xyz_010_1.inputs[0])
- test_group.links.new(reroute_184_1.outputs[0], combine_xyz_010_1.inputs[1])
- test_group.links.new(reroute_185_1.outputs[0], combine_xyz_010_1.inputs[2])
- test_group.links.new(reroute_186_1.outputs[0], combine_xyz_011_1.inputs[0])
- test_group.links.new(armor_secondary_fuzz_1.outputs[0], reroute_364_1.inputs[0])
- test_group.links.new(cloth_primary_fuzz_1.outputs[0], reroute_365_1.inputs[0])
- test_group.links.new(cloth_secondary_fuzz_1.outputs[0], reroute_366_1.inputs[0])
- test_group.links.new(suit_primary_fuzz_1.outputs[0], reroute_367_1.inputs[0])
- test_group.links.new(suit_secondary_transmission_1.outputs[0], reroute_192_1.inputs[0])
- test_group.links.new(suit_secondary_fuzz_1.outputs[0], reroute_368_1.inputs[0])
- test_group.links.new(reroute_012_1.outputs[0], combine_xyz_030_1.inputs[0])
- test_group.links.new(reroute_013_1.outputs[0], combine_xyz_030_1.inputs[1])
- test_group.links.new(reroute_014_1.outputs[0], combine_xyz_030_1.inputs[2])
- test_group.links.new(reroute_024_1.outputs[0], combine_xyz_032_1.inputs[0])
- test_group.links.new(reroute_025_1.outputs[0], combine_xyz_032_1.inputs[1])
- test_group.links.new(reroute_026_1.outputs[0], combine_xyz_032_1.inputs[2])
- test_group.links.new(reroute_027_1.outputs[0], reroute_371_1.inputs[0])
- test_group.links.new(reroute_015_1.outputs[0], reroute_372_1.inputs[0])
- test_group.links.new(reroute_016_1.outputs[0], combine_xyz_031_1.inputs[0])
- test_group.links.new(reroute_363_1.outputs[0], combine_xyz_031_1.inputs[1])
- test_group.links.new(reroute_017_1.outputs[0], combine_xyz_031_1.inputs[2])
- test_group.links.new(reroute_371_1.outputs[0], reroute_373_1.inputs[0])
- test_group.links.new(reroute_372_1.outputs[0], reroute_374_1.inputs[0])
- test_group.links.new(reroute_373_1.outputs[0], combine_xyz_001_1.inputs[2])
- test_group.links.new(reroute_374_1.outputs[0], combine_xyz_001_1.inputs[1])
- test_group.links.new(combine_xyz_002_1.outputs[0], reroute_380_1.inputs[0])
- test_group.links.new(reroute_380_1.outputs[0], reroute_375_1.inputs[0])
- test_group.links.new(reroute_375_1.outputs[0], reroute_381_1.inputs[0])
- test_group.links.new(reroute_376_1.outputs[0], reroute_382_1.inputs[0])
- test_group.links.new(reroute_377_1.outputs[0], reroute_383_1.inputs[0])
- test_group.links.new(reroute_378_1.outputs[0], reroute_384_1.inputs[0])
- test_group.links.new(reroute_379_1.outputs[0], reroute_385_1.inputs[0])
- test_group.links.new(reroute_043_1.outputs[0], reroute_386_1.inputs[0])
- test_group.links.new(reroute_055_1.outputs[0], reroute_389_1.inputs[0])
- test_group.links.new(reroute_386_1.outputs[0], reroute_387_1.inputs[0])
- test_group.links.new(reroute_387_1.outputs[0], combine_xyz_003_1.inputs[1])
- test_group.links.new(reroute_388_1.outputs[0], combine_xyz_003_1.inputs[2])
- test_group.links.new(reroute_389_1.outputs[0], reroute_388_1.inputs[0])
- test_group.links.new(reroute_071_1.outputs[0], reroute_390_1.inputs[0])
- test_group.links.new(reroute_083_1.outputs[0], reroute_393_1.inputs[0])
- test_group.links.new(reroute_390_1.outputs[0], reroute_391_1.inputs[0])
- test_group.links.new(reroute_391_1.outputs[0], combine_xyz_004_1.inputs[1])
- test_group.links.new(reroute_392_1.outputs[0], combine_xyz_004_1.inputs[2])
- test_group.links.new(reroute_393_1.outputs[0], reroute_392_1.inputs[0])
- test_group.links.new(reroute_099_1.outputs[0], reroute_394_1.inputs[0])
- test_group.links.new(reroute_111_1.outputs[0], reroute_397_1.inputs[0])
- test_group.links.new(reroute_394_1.outputs[0], reroute_395_1.inputs[0])
- test_group.links.new(reroute_395_1.outputs[0], combine_xyz_006_1.inputs[1])
- test_group.links.new(reroute_396_1.outputs[0], combine_xyz_006_1.inputs[2])
- test_group.links.new(reroute_397_1.outputs[0], reroute_396_1.inputs[0])
- test_group.links.new(reroute_127_1.outputs[0], reroute_398_1.inputs[0])
- test_group.links.new(reroute_139_1.outputs[0], reroute_401_1.inputs[0])
- test_group.links.new(reroute_398_1.outputs[0], reroute_399_1.inputs[0])
- test_group.links.new(reroute_399_1.outputs[0], combine_xyz_009_1.inputs[1])
- test_group.links.new(reroute_400_1.outputs[0], combine_xyz_009_1.inputs[2])
- test_group.links.new(reroute_401_1.outputs[0], reroute_400_1.inputs[0])
- test_group.links.new(reroute_190_1.outputs[0], reroute_402_1.inputs[0])
- test_group.links.new(reroute_203_1.outputs[0], reroute_405_1.inputs[0])
- test_group.links.new(reroute_402_1.outputs[0], reroute_403_1.inputs[0])
- test_group.links.new(reroute_403_1.outputs[0], combine_xyz_011_1.inputs[1])
- test_group.links.new(reroute_404_1.outputs[0], combine_xyz_011_1.inputs[2])
- test_group.links.new(reroute_405_1.outputs[0], reroute_404_1.inputs[0])
- test_group.links.new(combine_xyz_005_1.outputs[0], reroute_406_1.inputs[0])
- test_group.links.new(reroute_406_1.outputs[0], reroute_376_1.inputs[0])
- test_group.links.new(combine_xyz_007_1.outputs[0], reroute_407_1.inputs[0])
- test_group.links.new(reroute_407_1.outputs[0], reroute_377_1.inputs[0])
- test_group.links.new(combine_xyz_008_1.outputs[0], reroute_408_1.inputs[0])
- test_group.links.new(combine_xyz_010_1.outputs[0], reroute_409_1.inputs[0])
- test_group.links.new(reroute_408_1.outputs[0], reroute_378_1.inputs[0])
- test_group.links.new(reroute_409_1.outputs[0], reroute_379_1.inputs[0])
- test_group.links.new(reroute_410_1.outputs[0], reroute_415_1.inputs[0])
- test_group.links.new(reroute_411_1.outputs[0], reroute_416_1.inputs[0])
- test_group.links.new(reroute_412_1.outputs[0], reroute_417_1.inputs[0])
- test_group.links.new(reroute_413_1.outputs[0], reroute_418_1.inputs[0])
- test_group.links.new(combine_xyz_003_1.outputs[0], reroute_420_1.inputs[0])
- test_group.links.new(reroute_420_1.outputs[0], reroute_410_1.inputs[0])
- test_group.links.new(reroute_421_1.outputs[0], reroute_411_1.inputs[0])
- test_group.links.new(combine_xyz_004_1.outputs[0], reroute_421_1.inputs[0])
- test_group.links.new(reroute_424_1.outputs[0], reroute_414_1.inputs[0])
- test_group.links.new(reroute_423_1.outputs[0], reroute_413_1.inputs[0])
- test_group.links.new(reroute_422_1.outputs[0], reroute_412_1.inputs[0])
- test_group.links.new(reroute_414_1.outputs[0], reroute_419_1.inputs[0])
- test_group.links.new(combine_xyz_006_1.outputs[0], reroute_422_1.inputs[0])
- test_group.links.new(combine_xyz_009_1.outputs[0], reroute_423_1.inputs[0])
- test_group.links.new(combine_xyz_011_1.outputs[0], reroute_424_1.inputs[0])
- test_group.links.new(reroute_381_1.outputs[0], mix_010_1.inputs[2])
- test_group.links.new(reroute_382_1.outputs[0], mix_011_1.inputs[2])
- test_group.links.new(reroute_383_1.outputs[0], mix_012_1.inputs[2])
- test_group.links.new(reroute_384_1.outputs[0], mix_013_1.inputs[2])
- test_group.links.new(reroute_385_1.outputs[0], mix_014_1.inputs[2])
- test_group.links.new(reroute_415_1.outputs[0], mix_015_1.inputs[2])
- test_group.links.new(reroute_416_1.outputs[0], mix_016_1.inputs[2])
- test_group.links.new(reroute_417_1.outputs[0], mix_017_1.inputs[2])
- test_group.links.new(reroute_418_1.outputs[0], mix_018_1.inputs[2])
- test_group.links.new(reroute_419_1.outputs[0], mix_019_1.inputs[2])
- test_group.links.new(combine_xyz_030_1.outputs[0], reroute_425_1.inputs[0])
- test_group.links.new(reroute_425_1.outputs[0], reroute_426_1.inputs[0])
- test_group.links.new(reroute_426_1.outputs[0], reroute_432_1.inputs[0])
- test_group.links.new(reroute_427_1.outputs[0], reroute_433_1.inputs[0])
- test_group.links.new(reroute_428_1.outputs[0], reroute_434_1.inputs[0])
- test_group.links.new(reroute_429_1.outputs[0], reroute_435_1.inputs[0])
- test_group.links.new(reroute_430_1.outputs[0], reroute_436_1.inputs[0])
- test_group.links.new(reroute_431_1.outputs[0], reroute_437_1.inputs[0])
- test_group.links.new(reroute_441_1.outputs[0], reroute_431_1.inputs[0])
- test_group.links.new(reroute_440_1.outputs[0], reroute_430_1.inputs[0])
- test_group.links.new(reroute_439_1.outputs[0], reroute_429_1.inputs[0])
- test_group.links.new(reroute_438_1.outputs[0], reroute_428_1.inputs[0])
- test_group.links.new(reroute_442_1.outputs[0], reroute_427_1.inputs[0])
- test_group.links.new(reroute_040_1.outputs[0], combine_xyz_033_1.inputs[0])
- test_group.links.new(reroute_041_1.outputs[0], combine_xyz_033_1.inputs[1])
- test_group.links.new(reroute_042_1.outputs[0], combine_xyz_033_1.inputs[2])
- test_group.links.new(combine_xyz_033_1.outputs[0], reroute_442_1.inputs[0])
- test_group.links.new(reroute_068_1.outputs[0], combine_xyz_034_1.inputs[0])
- test_group.links.new(reroute_069_1.outputs[0], combine_xyz_034_1.inputs[1])
- test_group.links.new(reroute_070_1.outputs[0], combine_xyz_034_1.inputs[2])
- test_group.links.new(combine_xyz_034_1.outputs[0], reroute_438_1.inputs[0])
- test_group.links.new(reroute_095_1.outputs[0], combine_xyz_035_1.inputs[0])
- test_group.links.new(reroute_097_1.outputs[0], combine_xyz_035_1.inputs[1])
- test_group.links.new(reroute_098_1.outputs[0], combine_xyz_035_1.inputs[2])
- test_group.links.new(combine_xyz_035_1.outputs[0], reroute_439_1.inputs[0])
- test_group.links.new(reroute_123_1.outputs[0], combine_xyz_036_1.inputs[0])
- test_group.links.new(reroute_125_1.outputs[0], combine_xyz_036_1.inputs[1])
- test_group.links.new(reroute_126_1.outputs[0], combine_xyz_036_1.inputs[2])
- test_group.links.new(combine_xyz_036_1.outputs[0], reroute_440_1.inputs[0])
- test_group.links.new(reroute_187_1.outputs[0], combine_xyz_037_1.inputs[0])
- test_group.links.new(reroute_188_1.outputs[0], combine_xyz_037_1.inputs[1])
- test_group.links.new(reroute_189_1.outputs[0], combine_xyz_037_1.inputs[2])
- test_group.links.new(combine_xyz_037_1.outputs[0], reroute_441_1.inputs[0])
- test_group.links.new(reroute_432_1.outputs[0], mix_040_1.inputs[1])
- test_group.links.new(reroute_433_1.outputs[0], mix_040_1.inputs[2])
- test_group.links.new(reroute_434_1.outputs[0], mix_041_1.inputs[2])
- test_group.links.new(reroute_435_1.outputs[0], mix_042_1.inputs[2])
- test_group.links.new(reroute_436_1.outputs[0], mix_043_1.inputs[2])
- test_group.links.new(reroute_437_1.outputs[0], mix_044_1.inputs[2])
- test_group.links.new(reroute_459_1.outputs[0], reroute_448_1.inputs[0])
- test_group.links.new(reroute_458_1.outputs[0], reroute_447_1.inputs[0])
- test_group.links.new(reroute_457_1.outputs[0], reroute_446_1.inputs[0])
- test_group.links.new(reroute_456_1.outputs[0], reroute_445_1.inputs[0])
- test_group.links.new(reroute_455_1.outputs[0], reroute_444_1.inputs[0])
- test_group.links.new(reroute_460_1.outputs[0], reroute_443_1.inputs[0])
- test_group.links.new(reroute_005_1.outputs[0], reroute_460_1.inputs[0])
- test_group.links.new(reroute_033_1.outputs[0], reroute_455_1.inputs[0])
- test_group.links.new(reroute_061_1.outputs[0], reroute_456_1.inputs[0])
- test_group.links.new(reroute_089_1.outputs[0], reroute_457_1.inputs[0])
- test_group.links.new(reroute_117_1.outputs[0], reroute_458_1.inputs[0])
- test_group.links.new(reroute_179_1.outputs[0], reroute_459_1.inputs[0])
- test_group.links.new(reroute_443_1.outputs[0], reroute_466_1.inputs[0])
- test_group.links.new(reroute_444_1.outputs[0], reroute_461_1.inputs[0])
- test_group.links.new(reroute_445_1.outputs[0], reroute_462_1.inputs[0])
- test_group.links.new(reroute_446_1.outputs[0], reroute_463_1.inputs[0])
- test_group.links.new(reroute_447_1.outputs[0], reroute_464_1.inputs[0])
- test_group.links.new(reroute_448_1.outputs[0], reroute_465_1.inputs[0])
- test_group.links.new(reroute_466_1.outputs[0], mix_064_1.inputs[1])
- test_group.links.new(reroute_461_1.outputs[0], mix_064_1.inputs[2])
- test_group.links.new(reroute_462_1.outputs[0], mix_060_1.inputs[2])
- test_group.links.new(reroute_463_1.outputs[0], mix_061_1.inputs[2])
- test_group.links.new(reroute_464_1.outputs[0], mix_062_1.inputs[2])
- test_group.links.new(reroute_465_1.outputs[0], mix_063_1.inputs[2])
- test_group.links.new(reroute_471_1.outputs[0], reroute_453_1.inputs[0])
- test_group.links.new(reroute_470_1.outputs[0], reroute_452_1.inputs[0])
- test_group.links.new(reroute_469_1.outputs[0], reroute_451_1.inputs[0])
- test_group.links.new(reroute_468_1.outputs[0], reroute_450_1.inputs[0])
- test_group.links.new(reroute_467_1.outputs[0], reroute_449_1.inputs[0])
- test_group.links.new(reroute_472_1.outputs[0], reroute_454_1.inputs[0])
- test_group.links.new(reroute_454_1.outputs[0], reroute_478_1.inputs[0])
- test_group.links.new(reroute_449_1.outputs[0], reroute_473_1.inputs[0])
- test_group.links.new(reroute_450_1.outputs[0], reroute_474_1.inputs[0])
- test_group.links.new(reroute_451_1.outputs[0], reroute_475_1.inputs[0])
- test_group.links.new(reroute_452_1.outputs[0], reroute_476_1.inputs[0])
- test_group.links.new(reroute_453_1.outputs[0], reroute_477_1.inputs[0])
- test_group.links.new(reroute_478_1.outputs[0], mix_035_1.inputs[1])
- test_group.links.new(reroute_473_1.outputs[0], mix_035_1.inputs[2])
- test_group.links.new(reroute_474_1.outputs[0], mix_036_1.inputs[2])
- test_group.links.new(reroute_475_1.outputs[0], mix_037_1.inputs[2])
- test_group.links.new(reroute_476_1.outputs[0], mix_038_1.inputs[2])
- test_group.links.new(reroute_477_1.outputs[0], mix_039_1.inputs[2])
- test_group.links.new(reroute_011_1.outputs[0], reroute_472_1.inputs[0])
- test_group.links.new(reroute_039_1.outputs[0], reroute_467_1.inputs[0])
- test_group.links.new(reroute_067_1.outputs[0], reroute_468_1.inputs[0])
- test_group.links.new(reroute_096_1.outputs[0], reroute_469_1.inputs[0])
- test_group.links.new(reroute_124_1.outputs[0], reroute_470_1.inputs[0])
- test_group.links.new(reroute_194_1.outputs[0], reroute_471_1.inputs[0])
- test_group.links.new(reroute_489_1.outputs[0], reroute_484_1.inputs[0])
- test_group.links.new(reroute_488_1.outputs[0], reroute_483_1.inputs[0])
- test_group.links.new(reroute_487_1.outputs[0], reroute_482_1.inputs[0])
- test_group.links.new(reroute_486_1.outputs[0], reroute_481_1.inputs[0])
- test_group.links.new(reroute_485_1.outputs[0], reroute_480_1.inputs[0])
- test_group.links.new(reroute_370_1.outputs[0], reroute_369_1.inputs[0])
- test_group.links.new(combine_xyz_031_1.outputs[0], reroute_370_1.inputs[0])
- test_group.links.new(reroute_044_1.outputs[0], combine_xyz_038_1.inputs[0])
- test_group.links.new(reroute_364_1.outputs[0], combine_xyz_038_1.inputs[1])
- test_group.links.new(reroute_045_1.outputs[0], combine_xyz_038_1.inputs[2])
- test_group.links.new(combine_xyz_038_1.outputs[0], reroute_485_1.inputs[0])
- test_group.links.new(reroute_072_1.outputs[0], combine_xyz_039_1.inputs[0])
- test_group.links.new(reroute_365_1.outputs[0], combine_xyz_039_1.inputs[1])
- test_group.links.new(reroute_073_1.outputs[0], combine_xyz_039_1.inputs[2])
- test_group.links.new(combine_xyz_039_1.outputs[0], reroute_486_1.inputs[0])
- test_group.links.new(reroute_100_1.outputs[0], combine_xyz_040_1.inputs[0])
- test_group.links.new(reroute_366_1.outputs[0], combine_xyz_040_1.inputs[1])
- test_group.links.new(reroute_101_1.outputs[0], combine_xyz_040_1.inputs[2])
- test_group.links.new(combine_xyz_040_1.outputs[0], reroute_487_1.inputs[0])
- test_group.links.new(reroute_128_1.outputs[0], combine_xyz_041_1.inputs[0])
- test_group.links.new(reroute_367_1.outputs[0], combine_xyz_041_1.inputs[1])
- test_group.links.new(reroute_129_1.outputs[0], combine_xyz_041_1.inputs[2])
- test_group.links.new(combine_xyz_041_1.outputs[0], reroute_488_1.inputs[0])
- test_group.links.new(combine_xyz_042_1.outputs[0], reroute_489_1.inputs[0])
- test_group.links.new(reroute_191_1.outputs[0], combine_xyz_042_1.inputs[0])
- test_group.links.new(reroute_368_1.outputs[0], combine_xyz_042_1.inputs[1])
- test_group.links.new(reroute_192_1.outputs[0], combine_xyz_042_1.inputs[2])
- test_group.links.new(reroute_369_1.outputs[0], reroute_479_1.inputs[0])
- test_group.links.new(reroute_480_1.outputs[0], reroute_490_1.inputs[0])
- test_group.links.new(reroute_481_1.outputs[0], reroute_491_1.inputs[0])
- test_group.links.new(reroute_482_1.outputs[0], reroute_492_1.inputs[0])
- test_group.links.new(reroute_483_1.outputs[0], reroute_493_1.inputs[0])
- test_group.links.new(reroute_484_1.outputs[0], reroute_494_1.inputs[0])
- test_group.links.new(reroute_479_1.outputs[0], mix_045_1.inputs[1])
- test_group.links.new(reroute_490_1.outputs[0], mix_045_1.inputs[2])
- test_group.links.new(reroute_491_1.outputs[0], mix_046_1.inputs[2])
- test_group.links.new(reroute_492_1.outputs[0], mix_047_1.inputs[2])
- test_group.links.new(reroute_493_1.outputs[0], mix_048_1.inputs[2])
- test_group.links.new(reroute_494_1.outputs[0], mix_049_1.inputs[2])
- test_group.links.new(reroute_052_1.outputs[0], combine_xyz_043_1.inputs[0])
- test_group.links.new(reroute_053_1.outputs[0], combine_xyz_043_1.inputs[1])
- test_group.links.new(reroute_054_1.outputs[0], combine_xyz_043_1.inputs[2])
- test_group.links.new(reroute_080_1.outputs[0], combine_xyz_044_1.inputs[0])
- test_group.links.new(reroute_081_1.outputs[0], combine_xyz_044_1.inputs[1])
- test_group.links.new(reroute_082_1.outputs[0], combine_xyz_044_1.inputs[2])
- test_group.links.new(reroute_108_1.outputs[0], combine_xyz_045_1.inputs[0])
- test_group.links.new(reroute_109_1.outputs[0], combine_xyz_045_1.inputs[1])
- test_group.links.new(reroute_110_1.outputs[0], combine_xyz_045_1.inputs[2])
- test_group.links.new(reroute_136_1.outputs[0], combine_xyz_046_1.inputs[0])
- test_group.links.new(reroute_137_1.outputs[0], combine_xyz_046_1.inputs[1])
- test_group.links.new(reroute_138_1.outputs[0], combine_xyz_046_1.inputs[2])
- test_group.links.new(reroute_200_1.outputs[0], combine_xyz_047_1.inputs[0])
- test_group.links.new(reroute_201_1.outputs[0], combine_xyz_047_1.inputs[1])
- test_group.links.new(reroute_202_1.outputs[0], combine_xyz_047_1.inputs[2])
- test_group.links.new(reroute_503_1.outputs[0], reroute_500_1.inputs[0])
- test_group.links.new(reroute_502_1.outputs[0], reroute_501_1.inputs[0])
- test_group.links.new(reroute_504_1.outputs[0], reroute_496_1.inputs[0])
- test_group.links.new(reroute_505_1.outputs[0], reroute_497_1.inputs[0])
- test_group.links.new(reroute_506_1.outputs[0], reroute_498_1.inputs[0])
- test_group.links.new(reroute_507_1.outputs[0], reroute_499_1.inputs[0])
- test_group.links.new(reroute_500_1.outputs[0], reroute_509_1.inputs[0])
- test_group.links.new(reroute_501_1.outputs[0], reroute_508_1.inputs[0])
- test_group.links.new(reroute_496_1.outputs[0], reroute_510_1.inputs[0])
- test_group.links.new(reroute_497_1.outputs[0], reroute_511_1.inputs[0])
- test_group.links.new(reroute_498_1.outputs[0], reroute_512_1.inputs[0])
- test_group.links.new(reroute_499_1.outputs[0], reroute_513_1.inputs[0])
- test_group.links.new(reroute_509_1.outputs[0], mix_055_1.inputs[1])
- test_group.links.new(reroute_508_1.outputs[0], mix_055_1.inputs[2])
- test_group.links.new(reroute_510_1.outputs[0], mix_056_1.inputs[2])
- test_group.links.new(reroute_511_1.outputs[0], mix_057_1.inputs[2])
- test_group.links.new(reroute_512_1.outputs[0], mix_058_1.inputs[2])
- test_group.links.new(reroute_513_1.outputs[0], mix_059_1.inputs[2])
- test_group.links.new(combine_xyz_032_1.outputs[0], reroute_503_1.inputs[0])
- test_group.links.new(combine_xyz_043_1.outputs[0], reroute_502_1.inputs[0])
- test_group.links.new(combine_xyz_044_1.outputs[0], reroute_504_1.inputs[0])
- test_group.links.new(combine_xyz_045_1.outputs[0], reroute_505_1.inputs[0])
- test_group.links.new(combine_xyz_046_1.outputs[0], reroute_506_1.inputs[0])
- test_group.links.new(combine_xyz_047_1.outputs[0], reroute_507_1.inputs[0])
- test_group.links.new(reroute_524_1.outputs[0], reroute_495_1.inputs[0])
- test_group.links.new(reroute_519_1.outputs[0], reroute_514_1.inputs[0])
- test_group.links.new(reroute_520_1.outputs[0], reroute_515_1.inputs[0])
- test_group.links.new(reroute_521_1.outputs[0], reroute_516_1.inputs[0])
- test_group.links.new(reroute_522_1.outputs[0], reroute_517_1.inputs[0])
- test_group.links.new(reroute_523_1.outputs[0], reroute_518_1.inputs[0])
- test_group.links.new(reroute_495_1.outputs[0], reroute_530_1.inputs[0])
- test_group.links.new(reroute_514_1.outputs[0], reroute_529_1.inputs[0])
- test_group.links.new(reroute_515_1.outputs[0], reroute_528_1.inputs[0])
- test_group.links.new(reroute_516_1.outputs[0], reroute_527_1.inputs[0])
- test_group.links.new(reroute_517_1.outputs[0], reroute_526_1.inputs[0])
- test_group.links.new(reroute_518_1.outputs[0], reroute_525_1.inputs[0])
- test_group.links.new(reroute_530_1.outputs[0], mix_050_1.inputs[1])
- test_group.links.new(reroute_529_1.outputs[0], mix_050_1.inputs[2])
- test_group.links.new(reroute_528_1.outputs[0], mix_051_1.inputs[2])
- test_group.links.new(reroute_527_1.outputs[0], mix_052_1.inputs[2])
- test_group.links.new(reroute_526_1.outputs[0], mix_053_1.inputs[2])
- test_group.links.new(reroute_525_1.outputs[0], mix_054_1.inputs[2])
- test_group.links.new(reroute_018_1.outputs[0], reroute_524_1.inputs[0])
- test_group.links.new(reroute_046_1.outputs[0], reroute_519_1.inputs[0])
- test_group.links.new(reroute_074_1.outputs[0], reroute_520_1.inputs[0])
- test_group.links.new(reroute_102_1.outputs[0], reroute_521_1.inputs[0])
- test_group.links.new(reroute_130_1.outputs[0], reroute_522_1.inputs[0])
- test_group.links.new(reroute_193_1.outputs[0], reroute_523_1.inputs[0])
- test_group.links.new(armor_primary_fuzz_1.outputs[0], reroute_363_1.inputs[0])
- test_group.links.new(group_input_1.outputs[0], math_021_1.inputs[0])
- test_group.links.new(math_021_1.outputs[0], math_022_1.inputs[0])
- test_group.links.new(math_021_1.outputs[0], math_023_1.inputs[0])
- test_group.links.new(math_023_1.outputs[0], math_024_1.inputs[0])
- test_group.links.new(math_022_1.outputs[0], combine_rgb_1.inputs[0])
- test_group.links.new(math_024_1.outputs[0], combine_rgb_1.inputs[1])
- test_group.links.new(mix_071_1.outputs[0], separate_rgb_1.inputs[0])
- test_group.links.new(combine_rgb_1.outputs[0], mix_071_1.inputs[2])
- test_group.links.new(math_021_1.outputs[0], mix_071_1.inputs[0])
- test_group.links.new(attribute_1.outputs[0], mix_071_1.inputs[1])
- # -----------------------------------------------------------------------------------------
- # Armor Transforms
- armor_detail_diffuse_transform_1.inputs[1].default_value = (DiffTrans1.Z, DiffTrans1.W, 0.0) # position
- armor_detail_diffuse_transform_1.inputs[3].default_value = (DiffTrans1.X, DiffTrans1.Y, 1.0) # scale
- armor_detail_normal_transform_1.inputs[1].default_value = (NormTrans1.Z, NormTrans1.W, 1.0) # scale
- armor_detail_normal_transform_1.inputs[3].default_value = (NormTrans1.X, NormTrans1.Y, 0.0) # position
-
- # Armor Primary
- armor_primary_dye_color_1.outputs[0].default_value = (CPrime1.X, CPrime1.Y, CPrime1.Z, 1.0)
- armor_primary_roughness_remap_x_1.outputs[0].default_value = PrimeRoughMap1.X
- armor_primary_roughness_remap_y_1.outputs[0].default_value = PrimeRoughMap1.Y
- armor_primary_roughness_remap_z_1.outputs[0].default_value = PrimeRoughMap1.Z
- armor_primary_roughness_remap_w_1.outputs[0].default_value = PrimeRoughMap1.W
+ reroute_056 = Shader_Preset.nodes.new("NodeReroute")
- bpy.data.images.load(os.path.join(riplocation, "OUTPUTPATH/DiffMap1"), check_existing=False)
- DetailDiffuse01 = bpy.data.images.get("DiffMap1")
- DetailDiffuse01.colorspace_settings.name = "sRGB"
- DetailDiffuse01.alpha_mode = "CHANNEL_PACKED"
- armor_primary_detail_diffuse_map_1.image = DetailDiffuse01
+ reroute_115 = Shader_Preset.nodes.new("NodeReroute")
- armor_primary_wear_remap_x_1.outputs[0].default_value = PrimeWearMap1.X
- armor_primary_wear_remap_y_1.outputs[0].default_value = PrimeWearMap1.Y
- armor_primary_wear_remap_z_1.outputs[0].default_value = PrimeWearMap1.Z
- armor_primary_wear_remap_w_1.outputs[0].default_value = PrimeWearMap1.W
+ reroute_049 = Shader_Preset.nodes.new("NodeReroute")
- bpy.data.images.load(os.path.join(riplocation, "OUTPUTPATH/NormMap1"), check_existing=False)
- DetailNormal01 = bpy.data.images.get("NormMap1")
- DetailNormal01.colorspace_settings.name = "Non-Color"
- DetailNormal01.alpha_mode = "CHANNEL_PACKED"
- armor_primary_detail_normal_map_1.image = DetailNormal01
-
- armor_primary_detail_diffuse_blend_1.outputs[0].default_value = PrimeMatParams1.X
- armor_primary_detail_normal_blend_1.outputs[0].default_value = PrimeMatParams1.Y
- armor_primary_detail_roughness_blend_1.outputs[0].default_value = PrimeMatParams1.Z
- armor_primary_metalness_1.outputs[0].default_value = PrimeMatParams1.W
- armor_primary_iridescence_1.outputs[0].default_value = PrimeAdvMatParams1.X
- armor_primary_fuzz_1.outputs[0].default_value = PrimeAdvMatParams1.Y
- armor_primary_transmission_1.outputs[0].default_value = PrimeAdvMatParams1.Z
-
- worn_armor_primary_dye_color_1.outputs[0].default_value = (CPrimeWear1.X, CPrimeWear1.Y, CPrimeWear1.Z, 1.0)
- worn_armor_primary_roughness_remap_x_1.outputs[0].default_value = PrimeWornRoughMap1.X
- worn_armor_primary_roughness_remap_y_1.outputs[0].default_value = PrimeWornRoughMap1.Y
- worn_armor_primary_roughness_remap_z_1.outputs[0].default_value = PrimeWornRoughMap1.Z
- worn_armor_primary_roughness_remap_w_1.outputs[0].default_value = PrimeWornRoughMap1.W
- worn_armor_primary_detail_diffuse_blend_1.outputs[0].default_value = PrimeWornMatParams1.X
- worn_armor_primary_detail_normal_blend_1.outputs[0].default_value = PrimeWornMatParams1.Y
- worn_armor_primary_detail_roughness_blend_1.outputs[0].default_value = PrimeWornMatParams1.Z
- worn_armor_primary_metalness_1.outputs[0].default_value = PrimeWornMatParams1.W
-
- armor_primary_emission_color_1.outputs[0].default_value = (CPrimeEmit1.X, CPrimeEmit1.Y, CPrimeEmit1.Z, 1.0)
-
- # Armor Secondary
- armor_secondary_dye_color_1.outputs[0].default_value = (CSecon1.X, CSecon1.Y, CSecon1.Z, 1.0)
- armor_secondary_roughness_remap_x_1.outputs[0].default_value = SeconRoughMap1.X
- armor_secondary_roughness_remap_y_1.outputs[0].default_value = SeconRoughMap1.Y
- armor_secondary_roughness_remap_z_1.outputs[0].default_value = SeconRoughMap1.Z
- armor_secondary_roughness_remap_w_1.outputs[0].default_value = SeconRoughMap1.W
-
- bpy.data.images.load(os.path.join(riplocation,"OUTPUTPATH/DiffMap1"), check_existing=False)
- DetailDiffuse02 = bpy.data.images.get("DiffMap1")
- DetailDiffuse02.colorspace_settings.name = "sRGB"
- DetailDiffuse02.alpha_mode = "CHANNEL_PACKED"
- armor_secondary_detail_diffuse_map_1.image = DetailDiffuse02
+ reroute_096 = Shader_Preset.nodes.new("NodeReroute")
- armor_secondary_wear_remap_x_1.outputs[0].default_value = SeconWearMap1.X
- armor_secondary_wear_remap_y_1.outputs[0].default_value = SeconWearMap1.Y
- armor_secondary_wear_remap_z_1.outputs[0].default_value = SeconWearMap1.Z
- armor_secondary_wear_remap_w_1.outputs[0].default_value = SeconWearMap1.W
+ worn_armor_primary_roughness_remap_x = Shader_Preset.nodes.new("ShaderNodeValue")
+ worn_armor_primary_roughness_remap_x.label = "Roughness Remap X"
+ worn_armor_primary_roughness_remap_x.use_custom_color = True
+ worn_armor_primary_roughness_remap_x.color = (CPrimeWear1.X, CPrimeWear1.Y, CPrimeWear1.Z)
+ worn_armor_primary_roughness_remap_x.hide = True
+ worn_armor_primary_roughness_remap_x.outputs[0].default_value = wornarmorprimaryroughnessremapX
- bpy.data.images.load(os.path.join(riplocation,"OUTPUTPATH/NormMap1"), check_existing=False)
- DetailNormal02 = bpy.data.images.get("NormMap1")
- DetailNormal02.colorspace_settings.name = "Non-Color"
- DetailNormal02.alpha_mode = "CHANNEL_PACKED"
- armor_secondary_detail_normal_map_1.image = DetailNormal02
-
- armor_secondary_detail_diffuse_blend_1.outputs[0].default_value = SeconMatParams1.X
- armor_secondary_detail_normal_blend_1.outputs[0].default_value = SeconMatParams1.Y
- armor_secondary_detail_roughness_blend_1.outputs[0].default_value = SeconMatParams1.Z
- armor_secondary_metalness_1.outputs[0].default_value = SeconMatParams1.W
- armor_secondary_iridescence_1.outputs[0].default_value = SeconAdvMatParams1.X
- armor_secondary_fuzz_1.outputs[0].default_value = SeconAdvMatParams1.Y
- armor_secondary_transmission_1.outputs[0].default_value = SeconAdvMatParams1.Z
-
- worn_armor_secondary_dye_color_1.outputs[0].default_value = (CSeconWear1.X, CSeconWear1.Y, CSeconWear1.Z, 1.0)
- worn_armor_secondary_roughness_remap_x_1.outputs[0].default_value = SeconWornRoughMap1.X
- worn_armor_secondary_roughness_remap_y_1.outputs[0].default_value = SeconWornRoughMap1.Y
- worn_armor_secondary_roughness_remap_z_1.outputs[0].default_value = SeconWornRoughMap1.Z
- worn_armor_secondary_roughness_remap_w_1.outputs[0].default_value = SeconWornRoughMap1.W
- worn_armor_secondary_detail_diffuse_blend_1.outputs[0].default_value = SeconWornMatParams1.X
- worn_armor_secondary_detail_normal_blend_1.outputs[0].default_value = SeconWornMatParams1.Y
- worn_armor_secondary_detail_roughness_blend_1.outputs[0].default_value = SeconWornMatParams1.Z
- worn_armor_secondary_metalness_1.outputs[0].default_value = SeconWornMatParams1.W
-
- armor_secondary_emission_color_1.outputs[0].default_value = (CSeconEmit1.X, CSeconEmit1.Y, CSeconEmit1.Z, 1.0)
-
- # Cloth Transforms
- cloth_detail_diffuse_transform_1.inputs[1].default_value = (DiffTrans2.Z, DiffTrans2.W, 1.0) # scale
- cloth_detail_diffuse_transform_1.inputs[3].default_value = (DiffTrans2.X, DiffTrans2.Y, 0.0) # position
- cloth_detail_normal_transform_1.inputs[1].default_value = (NormTrans2.Z, NormTrans2.W, 1.0) # scale
- cloth_detail_normal_transform_1.inputs[3].default_value = (NormTrans2.X, NormTrans2.Y, 0.0) # position
-
- # Cloth Primary
- cloth_primary_dye_color_1.outputs[0].default_value = (CPrime2.X, CPrime2.Y, CPrime2.Z, 1.0)
- cloth_primary_roughness_remap_x_1.outputs[0].default_value = PrimeRoughMap2.X
- cloth_primary_roughness_remap_y_1.outputs[0].default_value = PrimeRoughMap2.Y
- cloth_primary_roughness_remap_z_1.outputs[0].default_value = PrimeRoughMap2.Z
- cloth_primary_roughness_remap_w_1.outputs[0].default_value = PrimeRoughMap2.W
+ reroute_025 = Shader_Preset.nodes.new("NodeReroute")
+
+ reroute_055 = Shader_Preset.nodes.new("NodeReroute")
+
+ cloth_secondary_roughness_remap_z = Shader_Preset.nodes.new("ShaderNodeValue")
+ cloth_secondary_roughness_remap_z.label = "Roughness Remap Z"
+ cloth_secondary_roughness_remap_z.use_custom_color = True
+ cloth_secondary_roughness_remap_z.color = (CSecon2.X, CSecon2.Y, CSecon2.Z)
+ cloth_secondary_roughness_remap_z.hide = True
+ cloth_secondary_roughness_remap_z.outputs[0].default_value = clothsecondaryroughnessremapZ
+
+ worn_cloth_primary_roughness_remap_x = Shader_Preset.nodes.new("ShaderNodeValue")
+ worn_cloth_primary_roughness_remap_x.label = "Roughness Remap X"
+ worn_cloth_primary_roughness_remap_x.use_custom_color = True
+ worn_cloth_primary_roughness_remap_x.color = (CPrimeWear2.X, CPrimeWear2.Y, CPrimeWear2.Z)
+ worn_cloth_primary_roughness_remap_x.hide = True
+ worn_cloth_primary_roughness_remap_x.outputs[0].default_value = wornclothprimaryroughnessremapX
+
+ mix_022 = Shader_Preset.nodes.new("ShaderNodeMixRGB")
+
+ suit_primary_roughness_remap_z = Shader_Preset.nodes.new("ShaderNodeValue")
+ suit_primary_roughness_remap_z.label = "Roughness Remap Z"
+ suit_primary_roughness_remap_z.use_custom_color = True
+ suit_primary_roughness_remap_z.color = (CPrime3.X, CPrime3.Y, CPrime3.Z)
+ suit_primary_roughness_remap_z.hide = True
+ suit_primary_roughness_remap_z.outputs[0].default_value = suitprimaryroughnessremapZ
+
+ reroute_081 = Shader_Preset.nodes.new("NodeReroute")
+
+ worn_cloth_secondary_metalness = Shader_Preset.nodes.new("ShaderNodeValue")
+ worn_cloth_secondary_metalness.label = "Metalness"
+ worn_cloth_secondary_metalness.use_custom_color = True
+ worn_cloth_secondary_metalness.color = (CSeconWear2.X, CSeconWear2.Y, CSeconWear2.Z)
+ worn_cloth_secondary_metalness.hide = True
+ worn_cloth_secondary_metalness.outputs[0].default_value = wornclothsecondarymetalness
+
+ math_019 = Shader_Preset.nodes.new("ShaderNodeMath")
+ math_019.operation = 'MULTIPLY_ADD'
+ math_019.use_clamp = True
+ math_019.inputs[1].default_value = 100000.0
+ math_019.inputs[2].default_value = -99999.0
+
+ combine_xyz_038 = Shader_Preset.nodes.new("ShaderNodeCombineXYZ")
+
+ suit_secondary_roughness_remap_w = Shader_Preset.nodes.new("ShaderNodeValue")
+ suit_secondary_roughness_remap_w.label = "Roughness Remap W"
+ suit_secondary_roughness_remap_w.use_custom_color = True
+ suit_secondary_roughness_remap_w.color = (CSecon3.X, CSecon3.Y, CSecon3.Z)
+ suit_secondary_roughness_remap_w.hide = True
+ suit_secondary_roughness_remap_w.outputs[0].default_value = suitsecondaryroughnessremapW
+
+ math_007 = Shader_Preset.nodes.new("ShaderNodeMath")
+ math_007.label = "Suit_Primary_Slot"
+ math_007.operation = 'MULTIPLY_ADD'
+ math_007.inputs[1].default_value = 1000.0
+ math_007.inputs[2].default_value = -333.0
+
+ reroute_095 = Shader_Preset.nodes.new("NodeReroute")
+
+ reroute_160 = Shader_Preset.nodes.new("NodeReroute")
+
+ reroute_195 = Shader_Preset.nodes.new("NodeReroute")
+
+ reroute_140 = Shader_Preset.nodes.new("NodeReroute")
+
+ reroute_021 = Shader_Preset.nodes.new("NodeReroute")
+
+ mix_048 = Shader_Preset.nodes.new("ShaderNodeMixRGB")
+
+ cloth_secondary_detail_roughness_blend = Shader_Preset.nodes.new("ShaderNodeValue")
+ cloth_secondary_detail_roughness_blend.label = "Detail Roughness Blend"
+ cloth_secondary_detail_roughness_blend.use_custom_color = True
+ cloth_secondary_detail_roughness_blend.color = (CSecon2.X, CSecon2.Y, CSecon2.Z)
+ cloth_secondary_detail_roughness_blend.hide = True
+ cloth_secondary_detail_roughness_blend.outputs[0].default_value = clothsecondarydetailroughnessblend
+
+ reroute_082 = Shader_Preset.nodes.new("NodeReroute")
+
+ armor_secondary_detail_normal_blend = Shader_Preset.nodes.new("ShaderNodeValue")
+ armor_secondary_detail_normal_blend.label = "Detail Normal Blend"
+ armor_secondary_detail_normal_blend.use_custom_color = True
+ armor_secondary_detail_normal_blend.color = (CSecon1.X, CSecon1.Y, CSecon1.Z)
+ armor_secondary_detail_normal_blend.hide = True
+ armor_secondary_detail_normal_blend.outputs[0].default_value = armorsecondarydetailnormalblend
+
+ worn_cloth_primary_roughness_remap_z = Shader_Preset.nodes.new("ShaderNodeValue")
+ worn_cloth_primary_roughness_remap_z.label = "Roughness Remap Z"
+ worn_cloth_primary_roughness_remap_z.use_custom_color = True
+ worn_cloth_primary_roughness_remap_z.color = (CPrimeWear2.X, CPrimeWear2.Y, CPrimeWear2.Z)
+ worn_cloth_primary_roughness_remap_z.hide = True
+ worn_cloth_primary_roughness_remap_z.outputs[0].default_value = wornclothprimaryroughnessremapZ
+
+ combine_xyz_036 = Shader_Preset.nodes.new("ShaderNodeCombineXYZ")
+
+ math_002 = Shader_Preset.nodes.new("ShaderNodeMath")
+ math_002.operation = 'MULTIPLY_ADD'
+ math_002.use_clamp = True
+ math_002.inputs[1].default_value = 1000000.0
+ math_002.inputs[2].default_value = -500000.0
+
+ worn_cloth_secondary_detail_diffuse_blend = Shader_Preset.nodes.new("ShaderNodeValue")
+ worn_cloth_secondary_detail_diffuse_blend.label = "Detail Diffuse Blend"
+ worn_cloth_secondary_detail_diffuse_blend.use_custom_color = True
+ worn_cloth_secondary_detail_diffuse_blend.color = (CSeconWear2.X, CSeconWear2.Y, CSeconWear2.Z)
+ worn_cloth_secondary_detail_diffuse_blend.hide = True
+ worn_cloth_secondary_detail_diffuse_blend.outputs[0].default_value = wornclothsecondarydetaildiffuseblend
+
+ reroute_068 = Shader_Preset.nodes.new("NodeReroute")
+
+ math_016 = Shader_Preset.nodes.new("ShaderNodeMath")
+ math_016.operation = 'MULTIPLY_ADD'
+ math_016.use_clamp = True
+ math_016.inputs[1].default_value = 1000000.0
+ math_016.inputs[2].default_value = -500000.0
+
+ reroute_041 = Shader_Preset.nodes.new("NodeReroute")
+
+ worn_suit_primary_detail_diffuse_blend = Shader_Preset.nodes.new("ShaderNodeValue")
+ worn_suit_primary_detail_diffuse_blend.label = "Detail Diffuse Blend"
+ worn_suit_primary_detail_diffuse_blend.use_custom_color = True
+ worn_suit_primary_detail_diffuse_blend.color = (CPrimeWear3.X, CPrimeWear3.Y, CPrimeWear3.Z)
+ worn_suit_primary_detail_diffuse_blend.hide = True
+ worn_suit_primary_detail_diffuse_blend.outputs[0].default_value = wornsuitprimarydetaildiffuseblend
+
+ suit_secondary_wear_remap_x = Shader_Preset.nodes.new("ShaderNodeValue")
+ suit_secondary_wear_remap_x.label = "Wear Remap X"
+ suit_secondary_wear_remap_x.use_custom_color = True
+ suit_secondary_wear_remap_x.color = (CSecon3.X, CSecon3.Y, CSecon3.Z)
+ suit_secondary_wear_remap_x.hide = True
+ suit_secondary_wear_remap_x.outputs[0].default_value = suitsecondarywearremapX
+
+ armor_primary_transmission = Shader_Preset.nodes.new("ShaderNodeValue")
+ armor_primary_transmission.label = "Transmission"
+ armor_primary_transmission.use_custom_color = True
+ armor_primary_transmission.color = (CPrime1.X, CPrime1.Y, CPrime1.Z)
+ armor_primary_transmission.hide = True
+ armor_primary_transmission.outputs[0].default_value = armorprimarytransmission
+
+ worn_armor_primary_roughness_remap_y = Shader_Preset.nodes.new("ShaderNodeValue")
+ worn_armor_primary_roughness_remap_y.label = "Roughness Remap Y"
+ worn_armor_primary_roughness_remap_y.use_custom_color = True
+ worn_armor_primary_roughness_remap_y.color = (CPrimeWear1.X, CPrimeWear1.Y, CPrimeWear1.Z)
+ worn_armor_primary_roughness_remap_y.hide = True
+ worn_armor_primary_roughness_remap_y.outputs[0].default_value = wornarmorprimaryroughnessremapY
+
+ reroute_109 = Shader_Preset.nodes.new("NodeReroute")
+
+ reroute_129 = Shader_Preset.nodes.new("NodeReroute")
+
+ reroute_177 = Shader_Preset.nodes.new("NodeReroute")
+
+ reroute_014 = Shader_Preset.nodes.new("NodeReroute")
+
+ reroute_130 = Shader_Preset.nodes.new("NodeReroute")
+
+ cloth_secondary_roughness_remap_y = Shader_Preset.nodes.new("ShaderNodeValue")
+ cloth_secondary_roughness_remap_y.label = "Roughness Remap Y"
+ cloth_secondary_roughness_remap_y.use_custom_color = True
+ cloth_secondary_roughness_remap_y.color = (CSecon2.X, CSecon2.Y, CSecon2.Z)
+ cloth_secondary_roughness_remap_y.hide = True
+ cloth_secondary_roughness_remap_y.outputs[0].default_value = clothsecondaryroughnessremapY
+
+ cloth_secondary_transmission = Shader_Preset.nodes.new("ShaderNodeValue")
+ cloth_secondary_transmission.label = "Transmission"
+ cloth_secondary_transmission.use_custom_color = True
+ cloth_secondary_transmission.color = (CSecon2.X, CSecon2.Y, CSecon2.Z)
+ cloth_secondary_transmission.hide = True
+ cloth_secondary_transmission.outputs[0].default_value = clothsecondarytransmission
+
+ mix_011 = Shader_Preset.nodes.new("ShaderNodeMixRGB")
+
+ cloth_primary_detail_normal_blend = Shader_Preset.nodes.new("ShaderNodeValue")
+ cloth_primary_detail_normal_blend.label = "Detail Normal Blend"
+ cloth_primary_detail_normal_blend.use_custom_color = True
+ cloth_primary_detail_normal_blend.color = (CPrime2.X, CPrime2.Y, CPrime2.Z)
+ cloth_primary_detail_normal_blend.hide = True
+ cloth_primary_detail_normal_blend.outputs[0].default_value = clothprimarydetailnormalblend
+
+ reroute_171 = Shader_Preset.nodes.new("NodeReroute")
+
+ armor_secondary_detail_diffuse_blend = Shader_Preset.nodes.new("ShaderNodeValue")
+ armor_secondary_detail_diffuse_blend.label = "Detail Diffuse Blend"
+ armor_secondary_detail_diffuse_blend.use_custom_color = True
+ armor_secondary_detail_diffuse_blend.color = (CSecon1.X, CSecon1.Y, CSecon1.Z)
+ armor_secondary_detail_diffuse_blend.hide = True
+ armor_secondary_detail_diffuse_blend.outputs[0].default_value = armorsecondarydetaildiffuseblend
+
+ worn_cloth_secondary_detail_roughness_blend = Shader_Preset.nodes.new("ShaderNodeValue")
+ worn_cloth_secondary_detail_roughness_blend.label = "Detail Roughness Blend"
+ worn_cloth_secondary_detail_roughness_blend.use_custom_color = True
+ worn_cloth_secondary_detail_roughness_blend.color = (CSeconWear2.X, CSeconWear2.Y, CSeconWear2.Z)
+ worn_cloth_secondary_detail_roughness_blend.hide = True
+ worn_cloth_secondary_detail_roughness_blend.outputs[0].default_value = wornclothsecondarydetailroughnessblend
+
+ mix_066 = Shader_Preset.nodes.new("ShaderNodeMixRGB")
+ mix_066.inputs[2].default_value = (6.0, 6.0, 6.0, 1.0)
+
+ combine_xyz_003 = Shader_Preset.nodes.new("ShaderNodeCombineXYZ")
+
+ armor_primary_emission_color = Shader_Preset.nodes.new("ShaderNodeRGB")
+ armor_primary_emission_color.label = "Emission Color"
+ armor_primary_emission_color.use_custom_color = True
+ armor_primary_emission_color.color = (CPrime1.X, CPrime1.Y, CPrime1.Z)
+ armor_primary_emission_color.hide = True
+ armor_primary_emission_color.outputs[0].default_value = armorprimaryemissioncolor
+
+ suit_secondary_roughness_remap_z = Shader_Preset.nodes.new("ShaderNodeValue")
+ suit_secondary_roughness_remap_z.label = "Roughness Remap Z"
+ suit_secondary_roughness_remap_z.use_custom_color = True
+ suit_secondary_roughness_remap_z.color = (CSecon3.X, CSecon3.Y, CSecon3.Z)
+ suit_secondary_roughness_remap_z.hide = True
+ suit_secondary_roughness_remap_z.outputs[0].default_value = (0.000)
+
+ suit_primary_detail_normal_blend = Shader_Preset.nodes.new("ShaderNodeValue")
+ suit_primary_detail_normal_blend.label = "Detail Normal Blend"
+ suit_primary_detail_normal_blend.use_custom_color = True
+ suit_primary_detail_normal_blend.color = (CPrime3.X, CPrime3.Y, CPrime3.Z)
+ suit_primary_detail_normal_blend.hide = True
+ suit_primary_detail_normal_blend.outputs[0].default_value = suitprimarydetailnormalblend
+
+ reroute_174 = Shader_Preset.nodes.new("NodeReroute")
+
+ reroute_191 = Shader_Preset.nodes.new("NodeReroute")
+
+ reroute_016 = Shader_Preset.nodes.new("NodeReroute")
+
+ worn_suit_secondary_dye_color = Shader_Preset.nodes.new("ShaderNodeRGB")
+ worn_suit_secondary_dye_color.label = "Dye Color"
+ worn_suit_secondary_dye_color.use_custom_color = True
+ worn_suit_secondary_dye_color.color = (CSeconWear3.X, CSeconWear3.Y, CSeconWear3.Z)
+ worn_suit_secondary_dye_color.hide = True
+ worn_suit_secondary_dye_color.outputs[0].default_value = wornsuitsecondarydyecolor
+
+ reroute_094 = Shader_Preset.nodes.new("NodeReroute")
+
+ reroute_131 = Shader_Preset.nodes.new("NodeReroute")
+
+ mix_027 = Shader_Preset.nodes.new("ShaderNodeMixRGB")
+
+ suit_primary_detail_roughness_blend = Shader_Preset.nodes.new("ShaderNodeValue")
+ suit_primary_detail_roughness_blend.label = "Detail Roughness Blend"
+ suit_primary_detail_roughness_blend.use_custom_color = True
+ suit_primary_detail_roughness_blend.color = (CPrime3.X, CPrime3.Y, CPrime3.Z)
+ suit_primary_detail_roughness_blend.hide = True
+ suit_primary_detail_roughness_blend.outputs[0].default_value = suitprimarydetailroughnessblend
+
+ cloth_secondary_detail_normal_blend = Shader_Preset.nodes.new("ShaderNodeValue")
+ cloth_secondary_detail_normal_blend.label = "Detail Normal Blend"
+ cloth_secondary_detail_normal_blend.use_custom_color = True
+ cloth_secondary_detail_normal_blend.color = (CSecon2.X, CSecon2.Y, CSecon2.Z)
+ cloth_secondary_detail_normal_blend.hide = True
+ cloth_secondary_detail_normal_blend.outputs[0].default_value = clothsecondarydetailnormalblend
+
+ reroute_077 = Shader_Preset.nodes.new("NodeReroute")
+
+ cloth_detail_diffuse_transform = Shader_Preset.nodes.new("ShaderNodeMapping")
+ cloth_detail_diffuse_transform.label = "Detail Diffuse Transform"
+ cloth_detail_diffuse_transform.use_custom_color = True
+ cloth_detail_diffuse_transform.color = (0.2352934032678604, 0.2352934032678604, 0.5137253999710083)
+ cloth_detail_diffuse_transform.vector_type = 'POINT'
+ cloth_detail_diffuse_transform.inputs[2].hide = True
+ cloth_detail_diffuse_transform.inputs[1].default_value = clothdetaildiffuseposition
+ cloth_detail_diffuse_transform.inputs[2].default_value = (0.0, 0.0, 0.0)
+ cloth_detail_diffuse_transform.inputs[3].default_value = clothdetaildiffusescale
+
+ suit_primary_roughness_remap_x = Shader_Preset.nodes.new("ShaderNodeValue")
+ suit_primary_roughness_remap_x.label = "Roughness Remap X"
+ suit_primary_roughness_remap_x.use_custom_color = True
+ suit_primary_roughness_remap_x.color = (CPrime3.X, CPrime3.Y, CPrime3.Z)
+ suit_primary_roughness_remap_x.hide = True
+ suit_primary_roughness_remap_x.outputs[0].default_value = suitprimaryroughnessremapX
+
+ cloth_primary_emission_color = Shader_Preset.nodes.new("ShaderNodeRGB")
+ cloth_primary_emission_color.label = "Emission Color"
+ cloth_primary_emission_color.use_custom_color = True
+ cloth_primary_emission_color.color = (CPrime2.X, CPrime2.Y, CPrime2.Z)
+ cloth_primary_emission_color.hide = True
+ cloth_primary_emission_color.outputs[0].default_value = clothprimaryemissioncolor
+
+ worn_cloth_primary_roughness_remap_y = Shader_Preset.nodes.new("ShaderNodeValue")
+ worn_cloth_primary_roughness_remap_y.label = "Roughness Remap Y"
+ worn_cloth_primary_roughness_remap_y.use_custom_color = True
+ worn_cloth_primary_roughness_remap_y.color = (CPrimeWear2.X, CPrimeWear2.Y, CPrimeWear2.Z)
+ worn_cloth_primary_roughness_remap_y.hide = True
+ worn_cloth_primary_roughness_remap_y.outputs[0].default_value = wornclothprimaryroughnessremapY
+
+ reroute_146 = Shader_Preset.nodes.new("NodeReroute")
+
+ reroute_127 = Shader_Preset.nodes.new("NodeReroute")
+
+ worn_suit_primary_detail_roughness_blend = Shader_Preset.nodes.new("ShaderNodeValue")
+ worn_suit_primary_detail_roughness_blend.label = "Detail Roughness Blend"
+ worn_suit_primary_detail_roughness_blend.use_custom_color = True
+ worn_suit_primary_detail_roughness_blend.color = (CPrimeWear3.X, CPrimeWear3.Y, CPrimeWear3.Z)
+ worn_suit_primary_detail_roughness_blend.hide = True
+ worn_suit_primary_detail_roughness_blend.outputs[0].default_value = wornsuitprimarydetailroughnessblend
+
+ mix_006 = Shader_Preset.nodes.new("ShaderNodeMixRGB")
+
+ suit_secondary_wear_remap_w = Shader_Preset.nodes.new("ShaderNodeValue")
+ suit_secondary_wear_remap_w.label = "Wear Remap W"
+ suit_secondary_wear_remap_w.use_custom_color = True
+ suit_secondary_wear_remap_w.color = (CSecon3.X, CSecon3.Y, CSecon3.Z)
+ suit_secondary_wear_remap_w.hide = True
+ suit_secondary_wear_remap_w.outputs[0].default_value = suitsecondarywearremapW
+
+ reroute_063 = Shader_Preset.nodes.new("NodeReroute")
+
+ reroute_126 = Shader_Preset.nodes.new("NodeReroute")
+
+ reroute_018 = Shader_Preset.nodes.new("NodeReroute")
+
+ worn_suit_secondary_detail_normal_blend = Shader_Preset.nodes.new("ShaderNodeValue")
+ worn_suit_secondary_detail_normal_blend.label = "Detail Normal Blend"
+ worn_suit_secondary_detail_normal_blend.use_custom_color = True
+ worn_suit_secondary_detail_normal_blend.color = (CSeconWear3.X, CSeconWear3.Y, CSeconWear3.Z)
+ worn_suit_secondary_detail_normal_blend.hide = True
+ worn_suit_secondary_detail_normal_blend.outputs[0].default_value = wornsuitsecondarydetailnormalblend
+
+ reroute_135 = Shader_Preset.nodes.new("NodeReroute")
+
+ worn_cloth_secondary_roughness_remap_y = Shader_Preset.nodes.new("ShaderNodeValue")
+ worn_cloth_secondary_roughness_remap_y.label = "Roughness Remap Y"
+ worn_cloth_secondary_roughness_remap_y.use_custom_color = True
+ worn_cloth_secondary_roughness_remap_y.color = (CSeconWear2.X, CSeconWear2.Y, CSeconWear2.Z)
+ worn_cloth_secondary_roughness_remap_y.hide = True
+ worn_cloth_secondary_roughness_remap_y.outputs[0].default_value = wornclothsecondaryroughnessremapY
+
+ reroute_182 = Shader_Preset.nodes.new("NodeReroute")
+
+ mix_002 = Shader_Preset.nodes.new("ShaderNodeMixRGB")
+
+ mix_012 = Shader_Preset.nodes.new("ShaderNodeMixRGB")
+
+ cloth_secondary_detail_diffuse_blend = Shader_Preset.nodes.new("ShaderNodeValue")
+ cloth_secondary_detail_diffuse_blend.label = "Detail Diffuse Blend"
+ cloth_secondary_detail_diffuse_blend.use_custom_color = True
+ cloth_secondary_detail_diffuse_blend.color = (CSecon2.X, CSecon2.Y, CSecon2.Z)
+ cloth_secondary_detail_diffuse_blend.hide = True
+ cloth_secondary_detail_diffuse_blend.outputs[0].default_value = clothsecondarydetaildiffuseblend
+
+ armor_secondary_dye_color = Shader_Preset.nodes.new("ShaderNodeRGB")
+ armor_secondary_dye_color.label = "Dye Color"
+ armor_secondary_dye_color.use_custom_color = True
+ armor_secondary_dye_color.color = (CSecon1.X, CSecon1.Y, CSecon1.Z)
+ armor_secondary_dye_color.hide = True
+ armor_secondary_dye_color.outputs[0].default_value = armorsecondarydyecolor
+
+ reroute_132 = Shader_Preset.nodes.new("NodeReroute")
+
+ worn_cloth_secondary_detail_normal_blend = Shader_Preset.nodes.new("ShaderNodeValue")
+ worn_cloth_secondary_detail_normal_blend.label = "Detail Normal Blend"
+ worn_cloth_secondary_detail_normal_blend.use_custom_color = True
+ worn_cloth_secondary_detail_normal_blend.color = (CSeconWear2.X, CSeconWear2.Y, CSeconWear2.Z)
+ worn_cloth_secondary_detail_normal_blend.hide = True
+ worn_cloth_secondary_detail_normal_blend.outputs[0].default_value = wornclothsecondarydetailnormalblend
+
+ reroute_027 = Shader_Preset.nodes.new("NodeReroute")
+
+ reroute_154 = Shader_Preset.nodes.new("NodeReroute")
+
+ combine_xyz_020 = Shader_Preset.nodes.new("ShaderNodeCombineXYZ")
+
+ reroute_099 = Shader_Preset.nodes.new("NodeReroute")
+
+ mix_074 = Shader_Preset.nodes.new("ShaderNodeMixRGB")
+
+ armor_primary_roughness_remap_x = Shader_Preset.nodes.new("ShaderNodeValue")
+ armor_primary_roughness_remap_x.label = "Roughness Remap_X"
+ armor_primary_roughness_remap_x.use_custom_color = True
+ armor_primary_roughness_remap_x.color = (CPrime1.X, CPrime1.Y, CPrime1.Z)
+ armor_primary_roughness_remap_x.hide = True
+ armor_primary_roughness_remap_x.outputs[0].default_value = armorprimaryroughnessremapX
+
+ armor_secondary_metalness = Shader_Preset.nodes.new("ShaderNodeValue")
+ armor_secondary_metalness.label = "Metalness"
+ armor_secondary_metalness.use_custom_color = True
+ armor_secondary_metalness.color = (CSecon1.X, CSecon1.Y, CSecon1.Z)
+ armor_secondary_metalness.hide = True
+ armor_secondary_metalness.outputs[0].default_value = armorsecondarymetalness
+
+ reroute_179 = Shader_Preset.nodes.new("NodeReroute")
+
+ cloth_detail_normal_transform = Shader_Preset.nodes.new("ShaderNodeMapping")
+ cloth_detail_normal_transform.label = "Detail Normal Transform"
+ cloth_detail_normal_transform.use_custom_color = True
+ cloth_detail_normal_transform.color = (0.2352934032678604, 0.2352934032678604, 0.5137253999710083)
+ cloth_detail_normal_transform.vector_type = 'POINT'
+ cloth_detail_normal_transform.inputs[2].hide = True
+ cloth_detail_normal_transform.inputs[1].default_value = clothdetailnormalposition
+ cloth_detail_normal_transform.inputs[2].default_value = (0.0, 0.0, 0.0)
+ cloth_detail_normal_transform.inputs[3].default_value = clothdetailnormalscale
+
+ reroute_106 = Shader_Preset.nodes.new("NodeReroute")
+
+ reroute_134 = Shader_Preset.nodes.new("NodeReroute")
+
+ mix_013 = Shader_Preset.nodes.new("ShaderNodeMixRGB")
+
+ armor_primary_roughness_remap_w = Shader_Preset.nodes.new("ShaderNodeValue")
+ armor_primary_roughness_remap_w.label = "Roughness Remap_W"
+ armor_primary_roughness_remap_w.use_custom_color = True
+ armor_primary_roughness_remap_w.color = (CPrime1.X, CPrime1.Y, CPrime1.Z)
+ armor_primary_roughness_remap_w.hide = True
+ armor_primary_roughness_remap_w.outputs[0].default_value = armorprimaryroughnessremapW
- bpy.data.images.load(os.path.join(riplocation,"OUTPUTPATH/DiffMap2"), check_existing=False)
- DetailDiffuse03 = bpy.data.images.get("DiffMap2")
- DetailDiffuse03.colorspace_settings.name = "sRGB"
- DetailDiffuse03.alpha_mode = "CHANNEL_PACKED"
- cloth_primary_detail_diffuse_map_1.image = DetailDiffuse03
+ cloth_secondary_roughness_remap_x = Shader_Preset.nodes.new("ShaderNodeValue")
+ cloth_secondary_roughness_remap_x.label = "Roughness Remap X"
+ cloth_secondary_roughness_remap_x.use_custom_color = True
+ cloth_secondary_roughness_remap_x.color = (CSecon2.X, CSecon2.Y, CSecon2.Z)
+ cloth_secondary_roughness_remap_x.hide = True
+ cloth_secondary_roughness_remap_x.outputs[0].default_value = clothsecondaryroughnessremapX
- cloth_primary_wear_remap_x_1.outputs[0].default_value = PrimeWearMap2.X
- cloth_primary_wear_remap_y_1.outputs[0].default_value = PrimeWearMap2.Y
- cloth_primary_wear_remap_z_1.outputs[0].default_value = PrimeWearMap2.Z
- cloth_primary_wear_remap_w_1.outputs[0].default_value = PrimeWearMap2.W
+ reroute_178 = Shader_Preset.nodes.new("NodeReroute")
- bpy.data.images.load(os.path.join(riplocation,"OUTPUTPATH/NormMap2"), check_existing=False)
- DetailNormal03 = bpy.data.images.get("NormMap2")
- DetailNormal03.colorspace_settings.name = "Non-Color"
- DetailNormal03.alpha_mode = "CHANNEL_PACKED"
- cloth_primary_detail_normal_map_1.image = DetailNormal03
-
- cloth_primary_detail_diffuse_blend_1.outputs[0].default_value = PrimeMatParams2.X
- cloth_primary_detail_normal_blend_1.outputs[0].default_value = PrimeMatParams2.Y
- cloth_primary_detail_roughness_blend_1.outputs[0].default_value = PrimeMatParams2.Z
- cloth_primary_metalness_1.outputs[0].default_value = PrimeMatParams2.W
- cloth_primary_iridescence_1.outputs[0].default_value = PrimeAdvMatParams2.X
- cloth_primary_fuzz_1.outputs[0].default_value = PrimeAdvMatParams2.Y
- cloth_primary_transmission_1.outputs[0].default_value = PrimeAdvMatParams2.Z
-
- worn_cloth_primary_dye_color_1.outputs[0].default_value = (CPrimeWear2.X, CPrimeWear2.Y, CPrimeWear2.Z, 1.0)
- worn_cloth_primary_roughness_remap_x_1.outputs[0].default_value = PrimeWornRoughMap2.X
- worn_cloth_primary_roughness_remap_y_1.outputs[0].default_value = PrimeWornRoughMap2.Y
- worn_cloth_primary_roughness_remap_z_1.outputs[0].default_value = PrimeWornRoughMap2.Z
- worn_cloth_primary_roughness_remap_w_1.outputs[0].default_value = PrimeWornRoughMap2.W
- worn_cloth_primary_detail_diffuse_blend_1.outputs[0].default_value = PrimeWornMatParams1.X
- worn_cloth_primary_detail_normal_blend_1.outputs[0].default_value = PrimeWornMatParams1.Y
- worn_cloth_primary_detail_roughness_blend_1.outputs[0].default_value = PrimeWornMatParams1.Z
- worn_cloth_primary_metalness_1.outputs[0].default_value = PrimeWornMatParams1.W
-
- cloth_primary_emission_color_1.outputs[0].default_value = (CPrimeEmit2.X, CPrimeEmit2.Y, CPrimeEmit2.Z, 1.0)
-
- # Cloth Secondary
- cloth_secondary_dye_color_1.outputs[0].default_value = (CSecon2.X, CSecon2.Y, CSecon2.Z, 1.0)
- cloth_secondary_roughness_remap_x_1.outputs[0].default_value = SeconRoughMap2.X
- cloth_secondary_roughness_remap_y_1.outputs[0].default_value = SeconRoughMap2.Y
- cloth_secondary_roughness_remap_z_1.outputs[0].default_value = SeconRoughMap2.Z
- cloth_secondary_roughness_remap_w_1.outputs[0].default_value = SeconRoughMap2.W
-
- bpy.data.images.load(os.path.join(riplocation, "OUTPUTPATH/DiffMap2"), check_existing=False)
- DetailDiffuse04 = bpy.data.images.get("DiffMap2")
- DetailDiffuse04.colorspace_settings.name = "sRGB"
- DetailDiffuse04.alpha_mode = "CHANNEL_PACKED"
- cloth_secondary_detail_diffuse_map_1.image = DetailDiffuse04
-
- cloth_secondary_wear_remap_x_1.outputs[0].default_value = SeconWearMap2.X
- cloth_secondary_wear_remap_y_1.outputs[0].default_value = SeconWearMap2.Y
- cloth_secondary_wear_remap_z_1.outputs[0].default_value = SeconWearMap2.Z
- cloth_secondary_wear_remap_w_1.outputs[0].default_value = SeconWearMap2.W
-
- bpy.data.images.load(os.path.join(riplocation, "OUTPUTPATH/NormMap2"), check_existing=False)
- DetailNormal04 = bpy.data.images.get("NormMap2")
- DetailNormal04.colorspace_settings.name = "Non-Color"
- DetailNormal04.alpha_mode = "CHANNEL_PACKED"
- cloth_secondary_detail_normal_map_1.image = DetailNormal04
-
- cloth_secondary_detail_diffuse_blend_1.outputs[0].default_value = SeconMatParams2.X
- cloth_secondary_detail_normal_blend_1.outputs[0].default_value = SeconMatParams2.Y
- cloth_secondary_detail_roughness_blend_1.outputs[0].default_value = SeconMatParams2.Z
- cloth_secondary_metalness_1.outputs[0].default_value = SeconMatParams2.W
- cloth_secondary_iridescence_1.outputs[0].default_value = SeconAdvMatParams2.X
- cloth_secondary_fuzz_1.outputs[0].default_value = SeconAdvMatParams2.Y
- cloth_secondary_transmission_1.outputs[0].default_value = SeconAdvMatParams2.Z
-
- worn_cloth_secondary_dye_color_1.outputs[0].default_value = (CSeconWear2.X, CSeconWear2.Y, CSeconWear2.Z, 1.0)
- worn_cloth_secondary_roughness_remap_x_1.outputs[0].default_value = SeconWornRoughMap2.X
- worn_cloth_secondary_roughness_remap_y_1.outputs[0].default_value = SeconWornRoughMap2.Y
- worn_cloth_secondary_roughness_remap_z_1.outputs[0].default_value = SeconWornRoughMap2.Z
- worn_cloth_secondary_roughness_remap_w_1.outputs[0].default_value = SeconWornRoughMap2.W
- worn_cloth_secondary_detail_diffuse_blend_1.outputs[0].default_value = SeconWornMatParams2.X
- worn_cloth_secondary_detail_normal_blend_1.outputs[0].default_value = SeconWornMatParams2.Y
- worn_cloth_secondary_detail_roughness_blend_1.outputs[0].default_value = SeconWornMatParams2.Z
- worn_cloth_secondary_metalness_1.outputs[0].default_value = SeconWornMatParams2.W
-
- cloth_secondary_emission_color_1.outputs[0].default_value = (CSeconEmit2.X, CSeconEmit2.Y, CSeconEmit2.Z, 1.0)
-
- # Suit Transform
- suit_detail_diffuse_transform_1.inputs[1].default_value = (DiffTrans3.Z, DiffTrans3.W, 1.0) # scale
- suit_detail_diffuse_transform_1.inputs[3].default_value = (DiffTrans3.X, DiffTrans3.Y, 0.0) # position
- suit_detail_normal_transform_1.inputs[1].default_value = (NormTrans3.Z, NormTrans3.W, 1.0) # scale
- suit_detail_normal_transform_1.inputs[3].default_value = (NormTrans3.X, NormTrans3.Y, 0.0) # position
-
- # Suit Primary
- suit_primary_dye_color_1.outputs[0].default_value = (CPrime3.X, CPrime3.Y, CPrime3.Z, 1.0)
- suit_primary_roughness_remap_x_1.outputs[0].default_value = PrimeRoughMap3.X
- suit_primary_roughness_remap_y_1.outputs[0].default_value = PrimeRoughMap3.Y
- suit_primary_roughness_remap_z_1.outputs[0].default_value = PrimeRoughMap3.Z
- suit_primary_roughness_remap_w_1.outputs[0].default_value = PrimeRoughMap3.W
+ armor_secondary_wear_remap_z = Shader_Preset.nodes.new("ShaderNodeValue")
+ armor_secondary_wear_remap_z.label = "Wear Remap Z"
+ armor_secondary_wear_remap_z.use_custom_color = True
+ armor_secondary_wear_remap_z.color = (CSecon1.X, CSecon1.Y, CSecon1.Z)
+ armor_secondary_wear_remap_z.hide = True
+ armor_secondary_wear_remap_z.outputs[0].default_value = armorsecondarywearremapZ
- bpy.data.images.load(os.path.join(riplocation, "OUTPUTPATH/DiffMap3"), check_existing=False)
- DetailDiffuse05 = bpy.data.images.get("DiffMap3")
- DetailDiffuse05.colorspace_settings.name = "sRGB"
- DetailDiffuse05.alpha_mode = "CHANNEL_PACKED"
- suit_primary_detail_diffuse_map_1.image = DetailDiffuse05
+ mix_069 = Shader_Preset.nodes.new("ShaderNodeMixRGB")
- suit_primary_wear_remap_x_1.outputs[0].default_value = PrimeWearMap3.X
- suit_primary_wear_remap_y_1.outputs[0].default_value = PrimeWearMap3.Y
- suit_primary_wear_remap_z_1.outputs[0].default_value = PrimeWearMap3.Z
- suit_primary_wear_remap_w_1.outputs[0].default_value = PrimeWearMap3.W
+ mix_069.inputs[1].default_value = (1.0, 1.0, 1.0, 1.0)
- bpy.data.images.load(os.path.join(riplocation, "OUTPUTPATH/NormMap3"), check_existing=False)
- DetailNormal05 = bpy.data.images.get("NormMap3")
- DetailNormal05.colorspace_settings.name = "Non-Color"
- DetailNormal05.alpha_mode = "CHANNEL_PACKED"
- suit_primary_detail_normal_map_1.image = DetailNormal05
-
- suit_primary_detail_diffuse_blend_1.outputs[0].default_value = PrimeMatParams3.X
- suit_primary_detail_normal_blend_1.outputs[0].default_value = PrimeMatParams3.Y
- suit_primary_detail_roughness_blend_1.outputs[0].default_value = PrimeMatParams3.Z
- suit_primary_metalness_1.outputs[0].default_value = PrimeMatParams3.W
- suit_primary_iridescence_1.outputs[0].default_value = PrimeAdvMatParams3.X
- suit_primary_fuzz_1.outputs[0].default_value = PrimeAdvMatParams3.Y
- suit_primary_transmission_1.outputs[0].default_value = PrimeAdvMatParams3.Z
-
- worn_suit_primary_dye_color_1.outputs[0].default_value = (CPrimeWear3.X, CPrimeWear3.Y, CPrimeWear3.Z, 1.0)
- worn_suit_primary_roughness_remap_x_1.outputs[0].default_value = PrimeWornRoughMap3.X
- worn_suit_primary_roughness_remap_y_1.outputs[0].default_value = PrimeWornRoughMap3.Y
- worn_suit_primary_roughness_remap_z_1.outputs[0].default_value = PrimeWornRoughMap3.Z
- worn_suit_primary_roughness_remap_w_1.outputs[0].default_value = PrimeWornRoughMap3.W
- worn_suit_primary_detail_diffuse_blend_1.outputs[0].default_value = PrimeWornMatParams3.X
- worn_suit_primary_detail_normal_blend_1.outputs[0].default_value = PrimeWornMatParams3.Y
- worn_suit_primary_detail_roughness_blend_1.outputs[0].default_value = PrimeWornMatParams3.Z
- worn_suit_primary_metalness_1.outputs[0].default_value = PrimeWornMatParams3.W
-
- suit_primary_emission_color_1.outputs[0].default_value = (CPrimeEmit3.X, CPrimeEmit3.Y, CPrimeEmit3.Z, 1.0)
-
- # Suit Secondary
- suit_secondary_dye_color_1.outputs[0].default_value = (CSecon3.X, CSecon3.Y, CSecon3.Z, 1.0)
- suit_secondary_roughness_remap_x_1.outputs[0].default_value = SeconRoughMap3.X
- suit_secondary_roughness_remap_y_1.outputs[0].default_value = SeconRoughMap3.Y
- suit_secondary_roughness_remap_z_1.outputs[0].default_value = SeconRoughMap3.Z
- suit_secondary_roughness_remap_w_1.outputs[0].default_value = SeconRoughMap3.W
+ mix_069.inputs[2].default_value = (2.0, 2.0, 2.0, 1.0)
- bpy.data.images.load(os.path.join(riplocation, "OUTPUTPATH/DiffMap3"), check_existing=False)
- DetailDiffuse06 = bpy.data.images.get("DiffMap3")
- DetailDiffuse06.colorspace_settings.name = "sRGB"
- DetailDiffuse06.alpha_mode = "CHANNEL_PACKED"
- suit_secondary_detail_diffuse_map_1.image = DetailDiffuse06
+ cloth_primary_roughness_remap_x = Shader_Preset.nodes.new("ShaderNodeValue")
+ cloth_primary_roughness_remap_x.label = "Roughness Remap X"
+ cloth_primary_roughness_remap_x.use_custom_color = True
+ cloth_primary_roughness_remap_x.color = (CPrime2.X, CPrime2.Y, CPrime2.Z)
+ cloth_primary_roughness_remap_x.hide = True
+ cloth_primary_roughness_remap_x.outputs[0].default_value = clothprimaryroughnessremapX
- suit_secondary_wear_remap_x_1.outputs[0].default_value = SeconWearMap3.X
- suit_secondary_wear_remap_y_1.outputs[0].default_value = SeconWearMap3.Y
- suit_secondary_wear_remap_z_1.outputs[0].default_value = SeconWearMap3.Z
- suit_secondary_wear_remap_w_1.outputs[0].default_value = SeconWearMap3.W
+ reroute_114 = Shader_Preset.nodes.new("NodeReroute")
- bpy.data.images.load(os.path.join(riplocation, "OUTPUTPATH/NormMap3"), check_existing=False)
- DetailNormal06 = bpy.data.images.get("NormMap3")
- DetailNormal06.colorspace_settings.name = "Non-Color"
- DetailNormal06.alpha_mode = "CHANNEL_PACKED"
- suit_secondary_detail_normal_map_1.image = DetailNormal06
-
- suit_secondary_detail_diffuse_blend_1.outputs[0].default_value = SeconMatParams3.X
- suit_secondary_detail_normal_blend_1.outputs[0].default_value = SeconMatParams3.Y
- suit_secondary_detail_roughness_blend_1.outputs[0].default_value = SeconMatParams3.Z
- suit_secondary_metalness_1.outputs[0].default_value = SeconMatParams3.W
- suit_secondary_iridescence_1.outputs[0].default_value = SeconAdvMatParams3.X
- suit_secondary_fuzz_1.outputs[0].default_value = SeconAdvMatParams3.Y
- suit_secondary_transmission_1.outputs[0].default_value = SeconAdvMatParams3.Z
-
- worn_suit_secondary_dye_color_1.outputs[0].default_value = (CSeconWear3.X, CSeconWear3.Y, CSeconWear3.Z, 1.0)
- worn_suit_secondary_roughness_remap_x_1.outputs[0].default_value = SeconWornRoughMap3.X
- worn_suit_secondary_roughness_remap_y_1.outputs[0].default_value = SeconWornRoughMap3.Y
- worn_suit_secondary_roughness_remap_z_1.outputs[0].default_value = SeconWornRoughMap3.Z
- worn_suit_secondary_roughness_remap_w_1.outputs[0].default_value = SeconWornRoughMap3.W
- worn_suit_secondary_detail_diffuse_blend_1.outputs[0].default_value = SeconWornMatParams3.X
- worn_suit_secondary_detail_normal_blend_1.outputs[0].default_value = SeconWornMatParams3.Y
- worn_suit_secondary_detail_roughness_blend_1.outputs[0].default_value = SeconWornMatParams3.Z
- worn_suit_secondary_metalness_1.outputs[0].default_value = SeconWornMatParams3.W
-
- suit_secondary_emission_color_1.outputs[0].default_value = (CSeconEmit3.X, CSeconEmit3.Y, CSeconEmit3.Z, 1.0)
-
- return test_group
-
-
-class NODE_OT_TEST(bpy.types.Operator):
- bl_label = "Add D2 Weapons/Armor Shader"
+ armor_primary_dye_color = Shader_Preset.nodes.new("ShaderNodeRGB")
+ armor_primary_dye_color.label = "Dye Color"
+ armor_primary_dye_color.use_custom_color = True
+ armor_primary_dye_color.color = (CPrime1.X, CPrime1.Y, CPrime1.Z)
+ armor_primary_dye_color.hide = True
+ armor_primary_dye_color.outputs[0].default_value = armorprimarydyecolor
+
+ reroute_019 = Shader_Preset.nodes.new("NodeReroute")
+
+ mix_054 = Shader_Preset.nodes.new("ShaderNodeMixRGB")
+
+ worn_suit_primary_detail_normal_blend = Shader_Preset.nodes.new("ShaderNodeValue")
+ worn_suit_primary_detail_normal_blend.label = "Detail Normal Blend"
+ worn_suit_primary_detail_normal_blend.use_custom_color = True
+ worn_suit_primary_detail_normal_blend.color = (CPrimeWear3.X, CPrimeWear3.Y, CPrimeWear3.Z)
+ worn_suit_primary_detail_normal_blend.hide = True
+ worn_suit_primary_detail_normal_blend.outputs[0].default_value = wornsuitprimarydetailnormalblend
+
+ mix_007 = Shader_Preset.nodes.new("ShaderNodeMixRGB")
+
+ suit_secondary_metalness = Shader_Preset.nodes.new("ShaderNodeValue")
+ suit_secondary_metalness.label = "Metalness"
+ suit_secondary_metalness.use_custom_color = True
+ suit_secondary_metalness.color = (CSecon3.X, CSecon3.Y, CSecon3.Z)
+ suit_secondary_metalness.hide = True
+ suit_secondary_metalness.outputs[0].default_value = suitsecondarymetalness
+
+ reroute_058 = Shader_Preset.nodes.new("NodeReroute")
+
+ worn_armor_primary_roughness_remap_z = Shader_Preset.nodes.new("ShaderNodeValue")
+ worn_armor_primary_roughness_remap_z.label = "Roughness Remap Z"
+ worn_armor_primary_roughness_remap_z.use_custom_color = True
+ worn_armor_primary_roughness_remap_z.color = (CPrimeWear1.X, CPrimeWear1.Y, CPrimeWear1.Z)
+ worn_armor_primary_roughness_remap_z.hide = True
+ worn_armor_primary_roughness_remap_z.outputs[0].default_value = wornarmorprimaryroughnessremapZ
+
+ reroute_110 = Shader_Preset.nodes.new("NodeReroute")
+
+ suit_primary_wear_remap_w = Shader_Preset.nodes.new("ShaderNodeValue")
+ suit_primary_wear_remap_w.label = "Wear Remap W"
+ suit_primary_wear_remap_w.use_custom_color = True
+ suit_primary_wear_remap_w.color = (CPrime3.X, CPrime3.Y, CPrime3.Z)
+ suit_primary_wear_remap_w.hide = True
+ suit_primary_wear_remap_w.outputs[0].default_value = suitprimarywearremapW
+
+ worn_armor_primary_roughness_remap_w = Shader_Preset.nodes.new("ShaderNodeValue")
+ worn_armor_primary_roughness_remap_w.label = "Roughness Remap W"
+ worn_armor_primary_roughness_remap_w.use_custom_color = True
+ worn_armor_primary_roughness_remap_w.color = (CPrimeWear1.X, CPrimeWear1.Y, CPrimeWear1.Z)
+ worn_armor_primary_roughness_remap_w.hide = True
+ worn_armor_primary_roughness_remap_w.outputs[0].default_value = wornarmorprimaryroughnessremapW
+
+ reroute_120 = Shader_Preset.nodes.new("NodeReroute")
+
+ reroute_091 = Shader_Preset.nodes.new("NodeReroute")
+
+ cloth_secondary_emission_color = Shader_Preset.nodes.new("ShaderNodeRGB")
+ cloth_secondary_emission_color.label = "Emission Color"
+ cloth_secondary_emission_color.use_custom_color = True
+ cloth_secondary_emission_color.color = (CSecon2.X, CSecon2.Y, CSecon2.Z)
+ cloth_secondary_emission_color.hide = True
+ cloth_secondary_emission_color.outputs[0].default_value = clothsecondaryemissioncolor
+
+ reroute_185 = Shader_Preset.nodes.new("NodeReroute")
+
+ mix_031 = Shader_Preset.nodes.new("ShaderNodeMixRGB")
+
+ reroute_189 = Shader_Preset.nodes.new("NodeReroute")
+
+ reroute_128 = Shader_Preset.nodes.new("NodeReroute")
+
+ reroute_111 = Shader_Preset.nodes.new("NodeReroute")
+
+ reroute_084 = Shader_Preset.nodes.new("NodeReroute")
+
+ combine_xyz_048 = Shader_Preset.nodes.new("ShaderNodeCombineXYZ")
+
+ combine_xyz_048.inputs[2].default_value = 0.0
+
+ armor_primary_wear_remap_x = Shader_Preset.nodes.new("ShaderNodeValue")
+ armor_primary_wear_remap_x.label = "Wear Remap X"
+ armor_primary_wear_remap_x.use_custom_color = True
+ armor_primary_wear_remap_x.color = (CPrime1.X, CPrime1.Y, CPrime1.Z)
+ armor_primary_wear_remap_x.hide = True
+ armor_primary_wear_remap_x.outputs[0].default_value = armorprimarywearremapX
+
+ combine_xyz_033 = Shader_Preset.nodes.new("ShaderNodeCombineXYZ")
+
+ reroute_079 = Shader_Preset.nodes.new("NodeReroute")
+
+ suit_secondary_roughness_remap_y = Shader_Preset.nodes.new("ShaderNodeValue")
+ suit_secondary_roughness_remap_y.label = "Roughness Remap Y"
+ suit_secondary_roughness_remap_y.use_custom_color = True
+ suit_secondary_roughness_remap_y.color = (CSecon3.X, CSecon3.Y, CSecon3.Z)
+ suit_secondary_roughness_remap_y.hide = True
+ suit_secondary_roughness_remap_y.outputs[0].default_value = suitsecondaryroughnessremapY
+
+ reroute_113 = Shader_Preset.nodes.new("NodeReroute")
+
+ armor_primary_roughness_remap_y = Shader_Preset.nodes.new("ShaderNodeValue")
+ armor_primary_roughness_remap_y.label = "Roughness Remap_Y"
+ armor_primary_roughness_remap_y.use_custom_color = True
+ armor_primary_roughness_remap_y.color = (CPrime1.X, CPrime1.Y, CPrime1.Z)
+ armor_primary_roughness_remap_y.hide = True
+ armor_primary_roughness_remap_y.outputs[0].default_value = armorprimaryroughnessremapY
+
+ combine_xyz_029 = Shader_Preset.nodes.new("ShaderNodeCombineXYZ")
+
+ worn_armor_primary_detail_diffuse_blend = Shader_Preset.nodes.new("ShaderNodeValue")
+ worn_armor_primary_detail_diffuse_blend.label = "Detail Diffuse Blend"
+ worn_armor_primary_detail_diffuse_blend.use_custom_color = True
+ worn_armor_primary_detail_diffuse_blend.color = (CPrimeWear1.X, CPrimeWear1.Y, CPrimeWear1.Z)
+ worn_armor_primary_detail_diffuse_blend.hide = True
+ worn_armor_primary_detail_diffuse_blend.outputs[0].default_value = wornarmorprimarydetaildiffuseblend
+
+ reroute_103 = Shader_Preset.nodes.new("NodeReroute")
+
+ reroute_005 = Shader_Preset.nodes.new("NodeReroute")
+
+ mix_015 = Shader_Preset.nodes.new("ShaderNodeMixRGB")
+
+ reroute_145 = Shader_Preset.nodes.new("NodeReroute")
+
+ reroute_183 = Shader_Preset.nodes.new("NodeReroute")
+
+ mix_045 = Shader_Preset.nodes.new("ShaderNodeMixRGB")
+
+ mix_029 = Shader_Preset.nodes.new("ShaderNodeMixRGB")
+
+ node = Shader_Preset.nodes.new("ShaderNodeMixRGB")
+
+ reroute_065 = Shader_Preset.nodes.new("NodeReroute")
+
+ cloth_primary_roughness_remap_y = Shader_Preset.nodes.new("ShaderNodeValue")
+ cloth_primary_roughness_remap_y.label = "Roughness Remap Y"
+ cloth_primary_roughness_remap_y.use_custom_color = True
+ cloth_primary_roughness_remap_y.color = (CPrime2.X, CPrime2.Y, CPrime2.Z)
+ cloth_primary_roughness_remap_y.hide = True
+ cloth_primary_roughness_remap_y.outputs[0].default_value = clothprimaryroughnessremapY
+
+ mix_070 = Shader_Preset.nodes.new("ShaderNodeMixRGB")
+
+ mix_070.inputs[2].default_value = (3.0, 3.0, 3.0, 1.0)
+
+ attribute = Shader_Preset.nodes.new("ShaderNodeAttribute")
+ attribute.attribute_type = 'GEOMETRY'
+ attribute.attribute_name = 'slots'
+
+ mix_053 = Shader_Preset.nodes.new("ShaderNodeMixRGB")
+
+ combine_xyz_006 = Shader_Preset.nodes.new("ShaderNodeCombineXYZ")
+
+ suit_secondary_wear_remap_y = Shader_Preset.nodes.new("ShaderNodeValue")
+ suit_secondary_wear_remap_y.label = "Wear Remap Y"
+ suit_secondary_wear_remap_y.use_custom_color = True
+ suit_secondary_wear_remap_y.color = (CSecon3.X, CSecon3.Y, CSecon3.Z)
+ suit_secondary_wear_remap_y.hide = True
+ suit_secondary_wear_remap_y.outputs[0].default_value = suitsecondarywearremapY
+
+ combine_xyz_025 = Shader_Preset.nodes.new("ShaderNodeCombineXYZ")
+
+ reroute_097 = Shader_Preset.nodes.new("NodeReroute")
+
+ worn_armor_primary_detail_roughness_blend = Shader_Preset.nodes.new("ShaderNodeValue")
+ worn_armor_primary_detail_roughness_blend.label = "Detail Roughness Blend"
+ worn_armor_primary_detail_roughness_blend.use_custom_color = True
+ worn_armor_primary_detail_roughness_blend.color = (CPrimeWear1.X, CPrimeWear1.Y, CPrimeWear1.Z)
+ worn_armor_primary_detail_roughness_blend.hide = True
+ worn_armor_primary_detail_roughness_blend.outputs[0].default_value = wornarmorprimarydetailroughnessblend
+
+ reroute_117 = Shader_Preset.nodes.new("NodeReroute")
+
+ reroute_125 = Shader_Preset.nodes.new("NodeReroute")
+
+ mix_058 = Shader_Preset.nodes.new("ShaderNodeMixRGB")
+
+ reroute_073 = Shader_Preset.nodes.new("NodeReroute")
+
+ suit_primary_metalness = Shader_Preset.nodes.new("ShaderNodeValue")
+ suit_primary_metalness.label = "Metalness"
+ suit_primary_metalness.use_custom_color = True
+ suit_primary_metalness.color = (CPrime3.X, CPrime3.Y, CPrime3.Z)
+ suit_primary_metalness.hide = True
+ suit_primary_metalness.outputs[0].default_value = suitprimarymetalness
+
+ cloth_secondary_wear_remap_w = Shader_Preset.nodes.new("ShaderNodeValue")
+ cloth_secondary_wear_remap_w.label = "Wear Remap W"
+ cloth_secondary_wear_remap_w.use_custom_color = True
+ cloth_secondary_wear_remap_w.color = (CSecon2.X, CSecon2.Y, CSecon2.Z)
+ cloth_secondary_wear_remap_w.hide = True
+ cloth_secondary_wear_remap_w.outputs[0].default_value = clothsecondarywearremapW
+
+ cloth_secondary_iridescence = Shader_Preset.nodes.new("ShaderNodeValue")
+ cloth_secondary_iridescence.label = "Iridescence"
+ cloth_secondary_iridescence.use_custom_color = True
+ cloth_secondary_iridescence.color = (CSecon2.X, CSecon2.Y, CSecon2.Z)
+ cloth_secondary_iridescence.hide = True
+ cloth_secondary_iridescence.outputs[0].default_value = clothsecondaryiridescence
+
+ reroute_139 = Shader_Preset.nodes.new("NodeReroute")
+
+ armor_secondary_roughness_remap_y = Shader_Preset.nodes.new("ShaderNodeValue")
+ armor_secondary_roughness_remap_y.label = "Roughness Remap Y"
+ armor_secondary_roughness_remap_y.use_custom_color = True
+ armor_secondary_roughness_remap_y.color = (CSecon1.X, CSecon1.Y, CSecon1.Z)
+ armor_secondary_roughness_remap_y.hide = True
+ armor_secondary_roughness_remap_y.outputs[0].default_value = armorsecondaryroughnessremapY
+
+ reroute_175 = Shader_Preset.nodes.new("NodeReroute")
+
+ suit_secondary_roughness_remap_x = Shader_Preset.nodes.new("ShaderNodeValue")
+ suit_secondary_roughness_remap_x.label = "Roughness Remap X"
+ suit_secondary_roughness_remap_x.use_custom_color = True
+ suit_secondary_roughness_remap_x.color = (CSecon3.X, CSecon3.Y, CSecon3.Z)
+ suit_secondary_roughness_remap_x.hide = True
+ suit_secondary_roughness_remap_x.outputs[0].default_value = suitsecondaryroughnessremapX
+
+ combine_xyz_041 = Shader_Preset.nodes.new("ShaderNodeCombineXYZ")
+
+ mix_044 = Shader_Preset.nodes.new("ShaderNodeMixRGB")
+
+ cloth_secondary_roughness_remap_w = Shader_Preset.nodes.new("ShaderNodeValue")
+ cloth_secondary_roughness_remap_w.label = "Roughness Remap W"
+ cloth_secondary_roughness_remap_w.use_custom_color = True
+ cloth_secondary_roughness_remap_w.color = (CSecon2.X, CSecon2.Y, CSecon2.Z)
+ cloth_secondary_roughness_remap_w.hide = True
+ cloth_secondary_roughness_remap_w.outputs[0].default_value = clothsecondaryroughnessremapW
+
+ group_output = Shader_Preset.nodes.new("NodeGroupOutput")
+
+ armor_primary_roughness_remap_z = Shader_Preset.nodes.new("ShaderNodeValue")
+ armor_primary_roughness_remap_z.label = "Roughness Remap_Z"
+ armor_primary_roughness_remap_z.use_custom_color = True
+ armor_primary_roughness_remap_z.color = (CPrime1.X, CPrime1.Y, CPrime1.Z)
+ armor_primary_roughness_remap_z.hide = True
+ armor_primary_roughness_remap_z.outputs[0].default_value = armorprimaryroughnessremapZ
+
+ combine_xyz_027 = Shader_Preset.nodes.new("ShaderNodeCombineXYZ")
+
+ reroute_188 = Shader_Preset.nodes.new("NodeReroute")
+
+ reroute_122 = Shader_Preset.nodes.new("NodeReroute")
+
+ reroute_002 = Shader_Preset.nodes.new("NodeReroute")
+
+ worn_suit_secondary_roughness_remap_x = Shader_Preset.nodes.new("ShaderNodeValue")
+ worn_suit_secondary_roughness_remap_x.label = "Roughness Remap X"
+ worn_suit_secondary_roughness_remap_x.use_custom_color = True
+ worn_suit_secondary_roughness_remap_x.color = (CSeconWear3.X, CSeconWear3.Y, CSeconWear3.Z)
+ worn_suit_secondary_roughness_remap_x.hide = True
+ worn_suit_secondary_roughness_remap_x.outputs[0].default_value = wornsuitsecondaryroughnessremapX
+
+ suit_primary_detail_diffuse_blend = Shader_Preset.nodes.new("ShaderNodeValue")
+ suit_primary_detail_diffuse_blend.label = "Detail Diffuse Blend"
+ suit_primary_detail_diffuse_blend.use_custom_color = True
+ suit_primary_detail_diffuse_blend.color = (CPrime3.X, CPrime3.Y, CPrime3.Z)
+ suit_primary_detail_diffuse_blend.hide = True
+ suit_primary_detail_diffuse_blend.outputs[0].default_value = suitprimarydetaildiffuseblend
+
+ cloth_primary_roughness_remap_z = Shader_Preset.nodes.new("ShaderNodeValue")
+ cloth_primary_roughness_remap_z.label = "Roughness Remap Z"
+ cloth_primary_roughness_remap_z.use_custom_color = True
+ cloth_primary_roughness_remap_z.color = (CPrime2.X, CPrime2.Y, CPrime2.Z)
+ cloth_primary_roughness_remap_z.hide = True
+ cloth_primary_roughness_remap_z.outputs[0].default_value = clothprimaryroughnessremapZ
+
+ combine_xyz_019 = Shader_Preset.nodes.new("ShaderNodeCombineXYZ")
+
+ armor_secondary_fuzz = Shader_Preset.nodes.new("ShaderNodeValue")
+ armor_secondary_fuzz.label = "Fuzz"
+ armor_secondary_fuzz.use_custom_color = True
+ armor_secondary_fuzz.color = (CSecon1.X, CSecon1.Y, CSecon1.Z)
+ armor_secondary_fuzz.hide = True
+ armor_secondary_fuzz.outputs[0].default_value = armorsecondaryfuzz
+
+ reroute_069 = Shader_Preset.nodes.new("NodeReroute")
+
+ reroute_030 = Shader_Preset.nodes.new("NodeReroute")
+
+ reroute_116 = Shader_Preset.nodes.new("NodeReroute")
+
+ combine_xyz_046 = Shader_Preset.nodes.new("ShaderNodeCombineXYZ")
+
+ reroute_194 = Shader_Preset.nodes.new("NodeReroute")
+
+ worn_armor_secondary_roughness_remap_y = Shader_Preset.nodes.new("ShaderNodeValue")
+ worn_armor_secondary_roughness_remap_y.label = "Roughness Remap Y"
+ worn_armor_secondary_roughness_remap_y.use_custom_color = True
+ worn_armor_secondary_roughness_remap_y.color = (CSeconWear1.X, CSeconWear1.Y, CSeconWear1.Z)
+ worn_armor_secondary_roughness_remap_y.hide = True
+ worn_armor_secondary_roughness_remap_y.outputs[0].default_value = wornarmorsecondaryroughnessremapY
+
+ cloth_primary_dye_color = Shader_Preset.nodes.new("ShaderNodeRGB")
+ cloth_primary_dye_color.label = "Dye Color"
+ cloth_primary_dye_color.use_custom_color = True
+ cloth_primary_dye_color.color = (CPrime2.X, CPrime2.Y, CPrime2.Z)
+ cloth_primary_dye_color.hide = True
+ cloth_primary_dye_color.outputs[0].default_value = clothprimarydyecolor
+
+ mix_071 = Shader_Preset.nodes.new("ShaderNodeMixRGB")
+
+ reroute_197 = Shader_Preset.nodes.new("NodeReroute")
+
+ armor_primary_detail_diffuse_blend = Shader_Preset.nodes.new("ShaderNodeValue")
+ armor_primary_detail_diffuse_blend.label = "Detail Diffuse Blend"
+ armor_primary_detail_diffuse_blend.use_custom_color = True
+ armor_primary_detail_diffuse_blend.color = (CPrime1.X, CPrime1.Y, CPrime1.Z)
+ armor_primary_detail_diffuse_blend.hide = True
+ armor_primary_detail_diffuse_blend.outputs[0].default_value = armorprimarydetaildiffuseblend
+
+ combine_xyz_002 = Shader_Preset.nodes.new("ShaderNodeCombineXYZ")
+
+ suit_secondary_iridescence = Shader_Preset.nodes.new("ShaderNodeValue")
+ suit_secondary_iridescence.label = "Iridescence"
+ suit_secondary_iridescence.use_custom_color = True
+ suit_secondary_iridescence.color = (CSecon3.X, CSecon3.Y, CSecon3.Z)
+ suit_secondary_iridescence.hide = True
+ suit_secondary_iridescence.outputs[0].default_value = suitsecondaryiridescence
+
+ reroute_161 = Shader_Preset.nodes.new("NodeReroute")
+
+ armor_primary_wear_remap_y = Shader_Preset.nodes.new("ShaderNodeValue")
+ armor_primary_wear_remap_y.label = "Wear Remap Y"
+ armor_primary_wear_remap_y.use_custom_color = True
+ armor_primary_wear_remap_y.color = (CPrime1.X, CPrime1.Y, CPrime1.Z)
+ armor_primary_wear_remap_y.hide = True
+ armor_primary_wear_remap_y.outputs[0].default_value = armorprimarywearremapY
+
+ reroute_155 = Shader_Preset.nodes.new("NodeReroute")
+
+ reroute_193 = Shader_Preset.nodes.new("NodeReroute")
+
+ mix_033 = Shader_Preset.nodes.new("ShaderNodeMixRGB")
+
+ reroute_080 = Shader_Preset.nodes.new("NodeReroute")
+
+ suit_secondary_detail_diffuse_blend = Shader_Preset.nodes.new("ShaderNodeValue")
+ suit_secondary_detail_diffuse_blend.label = "Detail Diffuse Blend"
+ suit_secondary_detail_diffuse_blend.use_custom_color = True
+ suit_secondary_detail_diffuse_blend.color = (CSecon3.X, CSecon3.Y, CSecon3.Z)
+ suit_secondary_detail_diffuse_blend.hide = True
+ suit_secondary_detail_diffuse_blend.outputs[0].default_value = suitsecondarydetaildiffuseblend
+
+ combine_xyz_042 = Shader_Preset.nodes.new("ShaderNodeCombineXYZ")
+
+ math_018 = Shader_Preset.nodes.new("ShaderNodeMath")
+ math_018.operation = 'MULTIPLY_ADD'
+ math_018.use_clamp = True
+ math_018.inputs[1].default_value = -100000.0
+ math_018.inputs[2].default_value = 1.0
+
+ combine_xyz_018 = Shader_Preset.nodes.new("ShaderNodeCombineXYZ")
+
+ reroute_166 = Shader_Preset.nodes.new("NodeReroute")
+
+ reroute_070 = Shader_Preset.nodes.new("NodeReroute")
+
+ worn_suit_primary_roughness_remap_y = Shader_Preset.nodes.new("ShaderNodeValue")
+ worn_suit_primary_roughness_remap_y.label = "Roughness Remap Y"
+ worn_suit_primary_roughness_remap_y.use_custom_color = True
+ worn_suit_primary_roughness_remap_y.color = (CPrimeWear3.X, CPrimeWear3.Y, CPrimeWear3.Z)
+ worn_suit_primary_roughness_remap_y.hide = True
+ worn_suit_primary_roughness_remap_y.outputs[0].default_value = wornsuitprimaryroughnessremapY
+
+ combine_xyz_008 = Shader_Preset.nodes.new("ShaderNodeCombineXYZ")
+
+ worn_armor_primary_metalness = Shader_Preset.nodes.new("ShaderNodeValue")
+ worn_armor_primary_metalness.label = "Metalness"
+ worn_armor_primary_metalness.use_custom_color = True
+ worn_armor_primary_metalness.color = (CPrimeWear1.X, CPrimeWear1.Y, CPrimeWear1.Z)
+ worn_armor_primary_metalness.hide = True
+ worn_armor_primary_metalness.outputs[0].default_value = wornarmorprimarymetalness
+
+ reroute_029 = Shader_Preset.nodes.new("NodeReroute")
+
+ reroute_119 = Shader_Preset.nodes.new("NodeReroute")
+
+ reroute_024 = Shader_Preset.nodes.new("NodeReroute")
+
+ worn_cloth_secondary_roughness_remap_x = Shader_Preset.nodes.new("ShaderNodeValue")
+ worn_cloth_secondary_roughness_remap_x.label = "Roughness Remap X"
+ worn_cloth_secondary_roughness_remap_x.use_custom_color = True
+ worn_cloth_secondary_roughness_remap_x.color = (CSeconWear2.X, CSeconWear2.Y, CSeconWear2.Z)
+ worn_cloth_secondary_roughness_remap_x.hide = True
+ worn_cloth_secondary_roughness_remap_x.outputs[0].default_value = wornclothsecondaryroughnessremapX
+
+ mix_050 = Shader_Preset.nodes.new("ShaderNodeMixRGB")
+
+ suit_primary_emission_color = Shader_Preset.nodes.new("ShaderNodeRGB")
+ suit_primary_emission_color.label = "Emission Color"
+ suit_primary_emission_color.use_custom_color = True
+ suit_primary_emission_color.color = (CPrime3.X, CPrime3.Y, CPrime3.Z)
+ suit_primary_emission_color.hide = True
+ suit_primary_emission_color.outputs[0].default_value = suitprimaryemissioncolor
+
+ cloth_primary_metalness = Shader_Preset.nodes.new("ShaderNodeValue")
+ cloth_primary_metalness.label = "Metalness"
+ cloth_primary_metalness.use_custom_color = True
+ cloth_primary_metalness.color = (CPrime2.X, CPrime2.Y, CPrime2.Z)
+ cloth_primary_metalness.hide = True
+ cloth_primary_metalness.outputs[0].default_value = clothprimarymetalness
+
+ worn_cloth_primary_detail_diffuse_blend = Shader_Preset.nodes.new("ShaderNodeValue")
+ worn_cloth_primary_detail_diffuse_blend.label = "Detail Diffuse Blend"
+ worn_cloth_primary_detail_diffuse_blend.use_custom_color = True
+ worn_cloth_primary_detail_diffuse_blend.color = (CPrimeWear2.X, CPrimeWear2.Y, CPrimeWear2.Z)
+ worn_cloth_primary_detail_diffuse_blend.hide = True
+ worn_cloth_primary_detail_diffuse_blend.outputs[0].default_value = wornclothprimarydetaildiffuseblend
+
+ mix_068 = Shader_Preset.nodes.new("ShaderNodeMixRGB")
+
+ mix_068.inputs[2].default_value = (5.0, 5.0, 5.0, 1.0)
+
+ mix_026 = Shader_Preset.nodes.new("ShaderNodeMixRGB")
+
+ combine_xyz = Shader_Preset.nodes.new("ShaderNodeCombineXYZ")
+
+ armor_primary_metalness = Shader_Preset.nodes.new("ShaderNodeValue")
+ armor_primary_metalness.label = "Metalness"
+ armor_primary_metalness.use_custom_color = True
+ armor_primary_metalness.color = (CPrime1.X, CPrime1.Y, CPrime1.Z)
+ armor_primary_metalness.hide = True
+ armor_primary_metalness.outputs[0].default_value = armorprimarymetalness
+
+ combine_xyz_021 = Shader_Preset.nodes.new("ShaderNodeCombineXYZ")
+
+ suit_secondary_fuzz = Shader_Preset.nodes.new("ShaderNodeValue")
+ suit_secondary_fuzz.label = "Fuzz"
+ suit_secondary_fuzz.use_custom_color = True
+ suit_secondary_fuzz.color = (CSecon3.X, CSecon3.Y, CSecon3.Z)
+ suit_secondary_fuzz.hide = True
+ suit_secondary_fuzz.outputs[0].default_value = suitsecondaryfuzz
+
+ mix_003 = Shader_Preset.nodes.new("ShaderNodeMixRGB")
+
+ reroute_176 = Shader_Preset.nodes.new("NodeReroute")
+
+ reroute_156 = Shader_Preset.nodes.new("NodeReroute")
+
+ cloth_primary_roughness_remap_w = Shader_Preset.nodes.new("ShaderNodeValue")
+ cloth_primary_roughness_remap_w.label = "Roughness Remap W"
+ cloth_primary_roughness_remap_w.use_custom_color = True
+ cloth_primary_roughness_remap_w.color = (CPrime2.X, CPrime2.Y, CPrime2.Z)
+ cloth_primary_roughness_remap_w.hide = True
+ cloth_primary_roughness_remap_w.outputs[0].default_value = clothprimaryroughnessremapW
+
+ reroute_098 = Shader_Preset.nodes.new("NodeReroute")
+
+ reroute_136 = Shader_Preset.nodes.new("NodeReroute")
+
+ mix_040 = Shader_Preset.nodes.new("ShaderNodeMixRGB")
+
+ reroute_186 = Shader_Preset.nodes.new("NodeReroute")
+
+ cloth_primary_detail_diffuse_blend = Shader_Preset.nodes.new("ShaderNodeValue")
+ cloth_primary_detail_diffuse_blend.label = "Detail Diffuse Blend"
+ cloth_primary_detail_diffuse_blend.use_custom_color = True
+ cloth_primary_detail_diffuse_blend.color = (CPrime2.X, CPrime2.Y, CPrime2.Z)
+ cloth_primary_detail_diffuse_blend.hide = True
+ cloth_primary_detail_diffuse_blend.outputs[0].default_value = clothprimarydetaildiffuseblend
+
+ combine_xyz_044 = Shader_Preset.nodes.new("ShaderNodeCombineXYZ")
+
+ math = Shader_Preset.nodes.new("ShaderNodeMath")
+ math.operation = 'MULTIPLY_ADD'
+ math.use_clamp = True
+ math.inputs[1].default_value = 1000.0
+ math.inputs[2].default_value = -333.0
+
+ worn_suit_primary_roughness_remap_x = Shader_Preset.nodes.new("ShaderNodeValue")
+ worn_suit_primary_roughness_remap_x.label = "Roughness Remap X"
+ worn_suit_primary_roughness_remap_x.use_custom_color = True
+ worn_suit_primary_roughness_remap_x.color = (CPrimeWear3.X, CPrimeWear3.Y, CPrimeWear3.Z)
+ worn_suit_primary_roughness_remap_x.hide = True
+ worn_suit_primary_roughness_remap_x.outputs[0].default_value = wornsuitprimaryroughnessremapX
+
+ combine_xyz_009 = Shader_Preset.nodes.new("ShaderNodeCombineXYZ")
+
+ reroute_170 = Shader_Preset.nodes.new("NodeReroute")
+
+ worn_cloth_secondary_roughness_remap_z = Shader_Preset.nodes.new("ShaderNodeValue")
+ worn_cloth_secondary_roughness_remap_z.label = "Roughness Remap Z"
+ worn_cloth_secondary_roughness_remap_z.use_custom_color = True
+ worn_cloth_secondary_roughness_remap_z.color = (CSeconWear2.X, CSeconWear2.Y, CSeconWear2.Z)
+ worn_cloth_secondary_roughness_remap_z.hide = True
+ worn_cloth_secondary_roughness_remap_z.outputs[0].default_value = wornclothsecondaryroughnessremapZ
+
+ reroute_017 = Shader_Preset.nodes.new("NodeReroute")
+
+ reroute_118 = Shader_Preset.nodes.new("NodeReroute")
+
+ mix_057 = Shader_Preset.nodes.new("ShaderNodeMixRGB")
+
+ mix_004 = Shader_Preset.nodes.new("ShaderNodeMixRGB")
+
+ mix_051 = Shader_Preset.nodes.new("ShaderNodeMixRGB")
+
+ suit_primary_transmission = Shader_Preset.nodes.new("ShaderNodeValue")
+ suit_primary_transmission.label = "Transmission"
+ suit_primary_transmission.use_custom_color = True
+ suit_primary_transmission.color = (CPrime3.X, CPrime3.Y, CPrime3.Z)
+ suit_primary_transmission.hide = True
+ suit_primary_transmission.outputs[0].default_value = suitprimarytransmission
+
+ reroute_147 = Shader_Preset.nodes.new("NodeReroute")
+
+ armor_secondary_emission_color = Shader_Preset.nodes.new("ShaderNodeRGB")
+ armor_secondary_emission_color.label = "Emission Color"
+ armor_secondary_emission_color.use_custom_color = True
+ armor_secondary_emission_color.color = (CSecon1.X, CSecon1.Y, CSecon1.Z)
+ armor_secondary_emission_color.hide = True
+ armor_secondary_emission_color.outputs[0].default_value = armorsecondaryemissioncolor
+
+ reroute_151 = Shader_Preset.nodes.new("NodeReroute")
+
+ combine_xyz_030 = Shader_Preset.nodes.new("ShaderNodeCombineXYZ")
+
+ combine_xyz_007 = Shader_Preset.nodes.new("ShaderNodeCombineXYZ")
+
+ suit_secondary_transmission = Shader_Preset.nodes.new("ShaderNodeValue")
+ suit_secondary_transmission.label = "Transmission"
+ suit_secondary_transmission.use_custom_color = True
+ suit_secondary_transmission.color = (CSecon3.X, CSecon3.Y, CSecon3.Z)
+ suit_secondary_transmission.hide = True
+ suit_secondary_transmission.outputs[0].default_value = suitsecondarytransmission
+
+ mix_017 = Shader_Preset.nodes.new("ShaderNodeMixRGB")
+
+ reroute_015 = Shader_Preset.nodes.new("NodeReroute")
+
+ reroute_104 = Shader_Preset.nodes.new("NodeReroute")
+
+ reroute_048 = Shader_Preset.nodes.new("NodeReroute")
+
+ mix_020 = Shader_Preset.nodes.new("ShaderNodeMixRGB")
+
+ reroute_078 = Shader_Preset.nodes.new("NodeReroute")
+
+ mix_055 = Shader_Preset.nodes.new("ShaderNodeMixRGB")
+
+ armor_secondary_roughness_remap_x = Shader_Preset.nodes.new("ShaderNodeValue")
+ armor_secondary_roughness_remap_x.label = "Roughness Remap X"
+ armor_secondary_roughness_remap_x.use_custom_color = True
+ armor_secondary_roughness_remap_x.color = (CSecon1.X, CSecon1.Y, CSecon1.Z)
+ armor_secondary_roughness_remap_x.hide = True
+ armor_secondary_roughness_remap_x.outputs[0].default_value = armorsecondaryroughnessremapX
+
+ cloth_primary_iridescence = Shader_Preset.nodes.new("ShaderNodeValue")
+ cloth_primary_iridescence.label = "Iridescence"
+ cloth_primary_iridescence.use_custom_color = True
+ cloth_primary_iridescence.color = (CPrime2.X, CPrime2.Y, CPrime2.Z)
+ cloth_primary_iridescence.hide = True
+ cloth_primary_iridescence.outputs[0].default_value = clothprimaryiridescence
+
+ reroute_059 = Shader_Preset.nodes.new("NodeReroute")
+
+ cloth_primary_wear_remap_x = Shader_Preset.nodes.new("ShaderNodeValue")
+ cloth_primary_wear_remap_x.label = "Wear Remap X"
+ cloth_primary_wear_remap_x.use_custom_color = True
+ cloth_primary_wear_remap_x.color = (CPrime2.X, CPrime2.Y, CPrime2.Z)
+ cloth_primary_wear_remap_x.hide = True
+ cloth_primary_wear_remap_x.outputs[0].default_value = clothprimarywearremapX
+
+ mix_021 = Shader_Preset.nodes.new("ShaderNodeMixRGB")
+
+ reroute_022 = Shader_Preset.nodes.new("NodeReroute")
+
+ mix_019 = Shader_Preset.nodes.new("ShaderNodeMixRGB")
+
+ combine_xyz_039 = Shader_Preset.nodes.new("ShaderNodeCombineXYZ")
+
+ worn_armor_secondary_roughness_remap_x = Shader_Preset.nodes.new("ShaderNodeValue")
+ worn_armor_secondary_roughness_remap_x.label = "Roughness Remap X"
+ worn_armor_secondary_roughness_remap_x.use_custom_color = True
+ worn_armor_secondary_roughness_remap_x.color = (CSeconWear1.X, CSeconWear1.Y, CSeconWear1.Z)
+ worn_armor_secondary_roughness_remap_x.hide = True
+ worn_armor_secondary_roughness_remap_x.outputs[0].default_value = wornarmorsecondaryroughnessremapX
+
+ mix_073 = Shader_Preset.nodes.new("ShaderNodeMixRGB")
+
+ worn_suit_primary_dye_color = Shader_Preset.nodes.new("ShaderNodeRGB")
+ worn_suit_primary_dye_color.label = "Dye Color"
+ worn_suit_primary_dye_color.use_custom_color = True
+ worn_suit_primary_dye_color.color = (CPrimeWear3.X, CPrimeWear3.Y, CPrimeWear3.Z)
+ worn_suit_primary_dye_color.hide = True
+ worn_suit_primary_dye_color.outputs[0].default_value = wornsuitprimarydyecolor
+
+ combine_xyz_024 = Shader_Preset.nodes.new("ShaderNodeCombineXYZ")
+
+ reroute_172 = Shader_Preset.nodes.new("NodeReroute")
+
+ armor_detail_diffuse_transform = Shader_Preset.nodes.new("ShaderNodeMapping")
+ armor_detail_diffuse_transform.label = "Detail Diffuse Transform"
+ armor_detail_diffuse_transform.use_custom_color = True
+ armor_detail_diffuse_transform.color = (0.2352934032678604, 0.2352934032678604, 0.5137253999710083)
+ armor_detail_diffuse_transform.vector_type = 'POINT'
+ armor_detail_diffuse_transform.inputs[2].hide = True
+ armor_detail_diffuse_transform.inputs[1].default_value = armordetaildiffuseposition
+ armor_detail_diffuse_transform.inputs[2].default_value = (0.0, 0.0, 0.0)
+ armor_detail_diffuse_transform.inputs[3].default_value = armordetaildiffusescale
+
+ reroute = Shader_Preset.nodes.new("NodeReroute")
+
+ reroute_105 = Shader_Preset.nodes.new("NodeReroute")
+
+ mix_052 = Shader_Preset.nodes.new("ShaderNodeMixRGB")
+
+ cloth_secondary_wear_remap_x = Shader_Preset.nodes.new("ShaderNodeValue")
+ cloth_secondary_wear_remap_x.label = "Wear Remap X"
+ cloth_secondary_wear_remap_x.use_custom_color = True
+ cloth_secondary_wear_remap_x.color = (CSecon2.X, CSecon2.Y, CSecon2.Z)
+ cloth_secondary_wear_remap_x.hide = True
+ cloth_secondary_wear_remap_x.outputs[0].default_value = clothsecondarywearremapX
+
+ armor_secondary_wear_remap_y = Shader_Preset.nodes.new("ShaderNodeValue")
+ armor_secondary_wear_remap_y.label = "Wear Remap Y"
+ armor_secondary_wear_remap_y.use_custom_color = True
+ armor_secondary_wear_remap_y.color = (CSecon1.X, CSecon1.Y, CSecon1.Z)
+ armor_secondary_wear_remap_y.hide = True
+ armor_secondary_wear_remap_y.outputs[0].default_value = armorsecondarywearremapY
+
+ worn_cloth_primary_detail_roughness_blend = Shader_Preset.nodes.new("ShaderNodeValue")
+ worn_cloth_primary_detail_roughness_blend.label = "Detail Roughness Blend"
+ worn_cloth_primary_detail_roughness_blend.use_custom_color = True
+ worn_cloth_primary_detail_roughness_blend.color = (CPrimeWear2.X, CPrimeWear2.Y, CPrimeWear2.Z)
+ worn_cloth_primary_detail_roughness_blend.hide = True
+ worn_cloth_primary_detail_roughness_blend.outputs[0].default_value = wornclothprimarydetailroughnessblend
+
+ math_021 = Shader_Preset.nodes.new("ShaderNodeMath")
+ math_021.operation = 'MULTIPLY_ADD'
+ math_021.use_clamp = True
+
+ math_021.inputs[1].default_value = -100000.0
+
+ math_021.inputs[2].default_value = 1.0
+
+ math_004 = Shader_Preset.nodes.new("ShaderNodeMath")
+ math_004.operation = 'MULTIPLY'
+ math_004.use_clamp = True
+
+ math_004.inputs[1].default_value = 1000.0
+
+ math_004.inputs[2].default_value = 0.0
+
+ combine_xyz_031 = Shader_Preset.nodes.new("ShaderNodeCombineXYZ")
+
+ combine_xyz_023 = Shader_Preset.nodes.new("ShaderNodeCombineXYZ")
+
+ armor_secondary_iridescence = Shader_Preset.nodes.new("ShaderNodeValue")
+ armor_secondary_iridescence.label = "Iridescence"
+ armor_secondary_iridescence.use_custom_color = True
+ armor_secondary_iridescence.color = (CSecon1.X, CSecon1.Y, CSecon1.Z)
+ armor_secondary_iridescence.hide = True
+ armor_secondary_iridescence.outputs[0].default_value = armorsecondaryiridescence
+
+ reroute_047 = Shader_Preset.nodes.new("NodeReroute")
+
+ cloth_primary_detail_roughness_blend = Shader_Preset.nodes.new("ShaderNodeValue")
+ cloth_primary_detail_roughness_blend.label = "Detail Roughness Blend"
+ cloth_primary_detail_roughness_blend.use_custom_color = True
+ cloth_primary_detail_roughness_blend.color = (CPrime2.X, CPrime2.Y, CPrime2.Z)
+ cloth_primary_detail_roughness_blend.hide = True
+ cloth_primary_detail_roughness_blend.outputs[0].default_value = clothprimarydetailroughnessblend
+
+ combine_xyz_004 = Shader_Preset.nodes.new("ShaderNodeCombineXYZ")
+
+ reroute_159 = Shader_Preset.nodes.new("NodeReroute")
+
+ worn_armor_primary_dye_color = Shader_Preset.nodes.new("ShaderNodeRGB")
+ worn_armor_primary_dye_color.label = "Dye Color"
+ worn_armor_primary_dye_color.use_custom_color = True
+ worn_armor_primary_dye_color.color = (CPrimeWear1.X, CPrimeWear1.Y, CPrimeWear1.Z)
+ worn_armor_primary_dye_color.hide = True
+ worn_armor_primary_dye_color.outputs[0].default_value = wornarmorprimarydyecolor
+
+ reroute_173 = Shader_Preset.nodes.new("NodeReroute")
+
+ reroute_052 = Shader_Preset.nodes.new("NodeReroute")
+
+ suit_detail_normal_transform = Shader_Preset.nodes.new("ShaderNodeMapping")
+ suit_detail_normal_transform.label = "Detail Normal Transform"
+ suit_detail_normal_transform.use_custom_color = True
+ suit_detail_normal_transform.color = (0.2352934032678604, 0.2352934032678604, 0.5137253999710083)
+ suit_detail_normal_transform.vector_type = 'POINT'
+ suit_detail_normal_transform.inputs[2].hide = True
+ suit_detail_normal_transform.inputs[1].default_value = suitdetailnormalposition
+ suit_detail_normal_transform.inputs[2].default_value = (0.0, 0.0, 0.0)
+ suit_detail_normal_transform.inputs[3].default_value = suitdetailnormalscale
+
+ mix_008 = Shader_Preset.nodes.new("ShaderNodeMixRGB")
+
+ suit_primary_roughness_remap_y = Shader_Preset.nodes.new("ShaderNodeValue")
+ suit_primary_roughness_remap_y.label = "Roughness Remap Y"
+ suit_primary_roughness_remap_y.use_custom_color = True
+ suit_primary_roughness_remap_y.color = (CPrime3.X, CPrime3.Y, CPrime3.Z)
+ suit_primary_roughness_remap_y.hide = True
+ suit_primary_roughness_remap_y.outputs[0].default_value = suitprimaryroughnessremapY
+
+ mix_042 = Shader_Preset.nodes.new("ShaderNodeMixRGB")
+
+ combine_xyz_026 = Shader_Preset.nodes.new("ShaderNodeCombineXYZ")
+
+ reroute_123 = Shader_Preset.nodes.new("NodeReroute")
+
+ reroute_148 = Shader_Preset.nodes.new("NodeReroute")
+
+ worn_armor_secondary_detail_roughness_blend = Shader_Preset.nodes.new("ShaderNodeValue")
+ worn_armor_secondary_detail_roughness_blend.label = "Detail Roughness Blend"
+ worn_armor_secondary_detail_roughness_blend.use_custom_color = True
+ worn_armor_secondary_detail_roughness_blend.color = (CSeconWear1.X, CSeconWear1.Y, CSeconWear1.Z)
+ worn_armor_secondary_detail_roughness_blend.hide = True
+ worn_armor_secondary_detail_roughness_blend.outputs[0].default_value = wornarmorsecondarydetailroughnessblend
+
+ reroute_066 = Shader_Preset.nodes.new("NodeReroute")
+
+ cloth_primary_wear_remap_y = Shader_Preset.nodes.new("ShaderNodeValue")
+ cloth_primary_wear_remap_y.label = "Wear Remap Y"
+ cloth_primary_wear_remap_y.use_custom_color = True
+ cloth_primary_wear_remap_y.color = (CPrime2.X, CPrime2.Y, CPrime2.Z)
+ cloth_primary_wear_remap_y.hide = True
+ cloth_primary_wear_remap_y.outputs[0].default_value = clothprimarywearremapY
+
+ combine_xyz_034 = Shader_Preset.nodes.new("ShaderNodeCombineXYZ")
+
+ reroute_064 = Shader_Preset.nodes.new("NodeReroute")
+
+ armor_primary_wear_remap_z = Shader_Preset.nodes.new("ShaderNodeValue")
+ armor_primary_wear_remap_z.label = "Wear Remap Z"
+ armor_primary_wear_remap_z.use_custom_color = True
+ armor_primary_wear_remap_z.color = (CPrime1.X, CPrime1.Y, CPrime1.Z)
+ armor_primary_wear_remap_z.hide = True
+ armor_primary_wear_remap_z.outputs[0].default_value = armorprimarywearremapZ
+
+ suit_secondary_emission_color = Shader_Preset.nodes.new("ShaderNodeRGB")
+ suit_secondary_emission_color.label = "Emission Color"
+ suit_secondary_emission_color.use_custom_color = True
+ suit_secondary_emission_color.color = (CSecon3.X, CSecon3.Y, CSecon3.Z)
+ suit_secondary_emission_color.hide = True
+ suit_secondary_emission_color.outputs[0].default_value = suitsecondaryemissioncolor
+
+ reroute_028 = Shader_Preset.nodes.new("NodeReroute")
+
+ reroute_092 = Shader_Preset.nodes.new("NodeReroute")
+
+ reroute_009 = Shader_Preset.nodes.new("NodeReroute")
+
+ reroute_067 = Shader_Preset.nodes.new("NodeReroute")
+
+ reroute_150 = Shader_Preset.nodes.new("NodeReroute")
+
+ reroute_083 = Shader_Preset.nodes.new("NodeReroute")
+
+ mix_041 = Shader_Preset.nodes.new("ShaderNodeMixRGB")
+
+ mix_010 = Shader_Preset.nodes.new("ShaderNodeMixRGB")
+
+ suit_primary_fuzz = Shader_Preset.nodes.new("ShaderNodeValue")
+ suit_primary_fuzz.label = "Fuzz"
+ suit_primary_fuzz.use_custom_color = True
+ suit_primary_fuzz.color = (CPrime3.X, CPrime3.Y, CPrime3.Z)
+ suit_primary_fuzz.hide = True
+ suit_primary_fuzz.outputs[0].default_value = suitprimaryfuzz
+
+ mix_032 = Shader_Preset.nodes.new("ShaderNodeMixRGB")
+
+ worn_cloth_primary_detail_normal_blend = Shader_Preset.nodes.new("ShaderNodeValue")
+ worn_cloth_primary_detail_normal_blend.label = "Detail Normal Blend"
+ worn_cloth_primary_detail_normal_blend.use_custom_color = True
+ worn_cloth_primary_detail_normal_blend.color = (CPrimeWear2.X, CPrimeWear2.Y, CPrimeWear2.Z)
+ worn_cloth_primary_detail_normal_blend.hide = True
+ worn_cloth_primary_detail_normal_blend.outputs[0].default_value = wornclothprimarydetailnormalblend
+
+ reroute_045 = Shader_Preset.nodes.new("NodeReroute")
+
+ mix_072 = Shader_Preset.nodes.new("ShaderNodeMixRGB")
+
+ armor_secondary_wear_remap_w = Shader_Preset.nodes.new("ShaderNodeValue")
+ armor_secondary_wear_remap_w.label = "Wear Remap W"
+ armor_secondary_wear_remap_w.use_custom_color = True
+ armor_secondary_wear_remap_w.color = (CSecon1.X, CSecon1.Y, CSecon1.Z)
+ armor_secondary_wear_remap_w.hide = True
+ armor_secondary_wear_remap_w.outputs[0].default_value = armorsecondarywearremapW
+
+ worn_armor_secondary_dye_color = Shader_Preset.nodes.new("ShaderNodeRGB")
+ worn_armor_secondary_dye_color.label = "Dye Color"
+ worn_armor_secondary_dye_color.use_custom_color = True
+ worn_armor_secondary_dye_color.color = (CSeconWear1.X, CSeconWear1.Y, CSeconWear1.Z)
+ worn_armor_secondary_dye_color.hide = True
+ worn_armor_secondary_dye_color.outputs[0].default_value = wornarmorsecondarydyecolor
+
+ combine_xyz_035 = Shader_Preset.nodes.new("ShaderNodeCombineXYZ")
+
+ math_013 = Shader_Preset.nodes.new("ShaderNodeMath")
+ math_013.operation = 'ADD'
+ math_013.use_clamp = True
+ math_013.inputs[2].default_value = -500.0
+
+ combine_xyz_001 = Shader_Preset.nodes.new("ShaderNodeCombineXYZ")
+
+ suit_secondary_dye_color = Shader_Preset.nodes.new("ShaderNodeRGB")
+ suit_secondary_dye_color.label = "Dye Color"
+ suit_secondary_dye_color.use_custom_color = True
+ suit_secondary_dye_color.color = (CSecon3.X, CSecon3.Y, CSecon3.Z)
+ suit_secondary_dye_color.hide = True
+ suit_secondary_dye_color.outputs[0].default_value = suitsecondarydyecolor
+
+ armor_primary_detail_normal_blend = Shader_Preset.nodes.new("ShaderNodeValue")
+ armor_primary_detail_normal_blend.label = "Detail Normal Blend"
+ armor_primary_detail_normal_blend.use_custom_color = True
+ armor_primary_detail_normal_blend.color = (CPrime1.X, CPrime1.Y, CPrime1.Z)
+ armor_primary_detail_normal_blend.hide = True
+ armor_primary_detail_normal_blend.outputs[0].default_value = armorprimarydetailnormalblend
+
+ cloth_secondary_wear_remap_y = Shader_Preset.nodes.new("ShaderNodeValue")
+ cloth_secondary_wear_remap_y.label = "Wear Remap Y"
+ cloth_secondary_wear_remap_y.use_custom_color = True
+ cloth_secondary_wear_remap_y.color = (CSecon2.X, CSecon2.Y, CSecon2.Z)
+ cloth_secondary_wear_remap_y.hide = True
+ cloth_secondary_wear_remap_y.outputs[0].default_value = clothsecondarywearremapY
+
+ combine_xyz_045 = Shader_Preset.nodes.new("ShaderNodeCombineXYZ")
+
+ reroute_167 = Shader_Preset.nodes.new("NodeReroute")
+
+ combine_xyz_011 = Shader_Preset.nodes.new("ShaderNodeCombineXYZ")
+
+ reroute_149 = Shader_Preset.nodes.new("NodeReroute")
+
+ detail_uvs = Shader_Preset.nodes.new("ShaderNodeUVMap")
+ detail_uvs.label = "Detail UVs"
+ detail_uvs.uv_map = 'uv1'
+ detail_uvs.hide = True
+
+ reroute_121 = Shader_Preset.nodes.new("NodeReroute")
+
+ reroute_044 = Shader_Preset.nodes.new("NodeReroute")
+
+ mix_018 = Shader_Preset.nodes.new("ShaderNodeMixRGB")
+
+ worn_cloth_secondary_dye_color = Shader_Preset.nodes.new("ShaderNodeRGB")
+ worn_cloth_secondary_dye_color.label = "Dye Color"
+ worn_cloth_secondary_dye_color.use_custom_color = True
+ worn_cloth_secondary_dye_color.color = (CSeconWear2.X, CSeconWear2.Y, CSeconWear2.Z)
+ worn_cloth_secondary_dye_color.hide = True
+ worn_cloth_secondary_dye_color.outputs[0].default_value = wornclothsecondarydyecolor
+
+ reroute_087 = Shader_Preset.nodes.new("NodeReroute")
+
+ mix_043 = Shader_Preset.nodes.new("ShaderNodeMixRGB")
+
+ worn_cloth_primary_metalness = Shader_Preset.nodes.new("ShaderNodeValue")
+ worn_cloth_primary_metalness.label = "Metalness"
+ worn_cloth_primary_metalness.use_custom_color = True
+ worn_cloth_primary_metalness.color = (CPrimeWear2.X, CPrimeWear2.Y, CPrimeWear2.Z)
+ worn_cloth_primary_metalness.hide = True
+ worn_cloth_primary_metalness.outputs[0].default_value = wornclothprimarymetalness
+
+ armor_secondary_roughness_remap_z = Shader_Preset.nodes.new("ShaderNodeValue")
+ armor_secondary_roughness_remap_z.label = "Roughness Remap Z"
+ armor_secondary_roughness_remap_z.use_custom_color = True
+ armor_secondary_roughness_remap_z.color = (CSecon1.X, CSecon1.Y, CSecon1.Z)
+ armor_secondary_roughness_remap_z.hide = True
+ armor_secondary_roughness_remap_z.outputs[0].default_value = armorsecondaryroughnessremapZ
+
+ cloth_primary_wear_remap_z = Shader_Preset.nodes.new("ShaderNodeValue")
+ cloth_primary_wear_remap_z.label = "Wear Remap Z"
+ cloth_primary_wear_remap_z.use_custom_color = True
+ cloth_primary_wear_remap_z.color = (CPrime2.X, CPrime2.Y, CPrime2.Z)
+ cloth_primary_wear_remap_z.hide = True
+ cloth_primary_wear_remap_z.outputs[0].default_value = clothprimarywearremapZ
+
+ reroute_008 = Shader_Preset.nodes.new("NodeReroute")
+
+ combine_xyz_032 = Shader_Preset.nodes.new("ShaderNodeCombineXYZ")
+
+ combine_xyz_028 = Shader_Preset.nodes.new("ShaderNodeCombineXYZ")
+
+ math_023 = Shader_Preset.nodes.new("ShaderNodeMath")
+ math_023.operation = 'SUBTRACT'
+ math_023.inputs[1].default_value = 3.0
+ math_023.inputs[2].default_value = 0.5
+
+ mix_016 = Shader_Preset.nodes.new("ShaderNodeMixRGB")
+
+ worn_suit_secondary_metalness = Shader_Preset.nodes.new("ShaderNodeValue")
+ worn_suit_secondary_metalness.label = "Metalness"
+ worn_suit_secondary_metalness.use_custom_color = True
+ worn_suit_secondary_metalness.color = (CSeconWear3.X, CSeconWear3.Y, CSeconWear3.Z)
+ worn_suit_secondary_metalness.hide = True
+ worn_suit_secondary_metalness.outputs[0].default_value = wornsuitsecondarymetalness
+
+ mix_014 = Shader_Preset.nodes.new("ShaderNodeMixRGB")
+
+ reroute_100 = Shader_Preset.nodes.new("NodeReroute")
+
+ reroute_060 = Shader_Preset.nodes.new("NodeReroute")
+
+ worn_suit_secondary_detail_roughness_blend = Shader_Preset.nodes.new("ShaderNodeValue")
+ worn_suit_secondary_detail_roughness_blend.label = "Detail Roughness Blend"
+ worn_suit_secondary_detail_roughness_blend.use_custom_color = True
+ worn_suit_secondary_detail_roughness_blend.color = (CSeconWear3.X, CSeconWear3.Y, CSeconWear3.Z)
+ worn_suit_secondary_detail_roughness_blend.hide = True
+ worn_suit_secondary_detail_roughness_blend.outputs[0].default_value = wornsuitsecondarydetailroughnessblend
+
+ combine_xyz_040 = Shader_Preset.nodes.new("ShaderNodeCombineXYZ")
+
+ reroute_001 = Shader_Preset.nodes.new("NodeReroute")
+
+ reroute_090 = Shader_Preset.nodes.new("NodeReroute")
+
+ mix_025 = Shader_Preset.nodes.new("ShaderNodeMixRGB")
+
+ reroute_124 = Shader_Preset.nodes.new("NodeReroute")
+
+ cloth_secondary_dye_color = Shader_Preset.nodes.new("ShaderNodeRGB")
+ cloth_secondary_dye_color.label = "Dye Color"
+ cloth_secondary_dye_color.use_custom_color = True
+ cloth_secondary_dye_color.color = (CSecon2.X, CSecon2.Y, CSecon2.Z)
+ cloth_secondary_dye_color.hide = True
+ cloth_secondary_dye_color.outputs[0].default_value = clothsecondarydyecolor
+
+ worn_cloth_primary_roughness_remap_w = Shader_Preset.nodes.new("ShaderNodeValue")
+ worn_cloth_primary_roughness_remap_w.label = "Roughness Remap W"
+ worn_cloth_primary_roughness_remap_w.use_custom_color = True
+ worn_cloth_primary_roughness_remap_w.color = (CPrimeWear2.X, CPrimeWear2.Y, CPrimeWear2.Z)
+ worn_cloth_primary_roughness_remap_w.hide = True
+ worn_cloth_primary_roughness_remap_w.outputs[0].default_value = wornclothprimaryroughnessremapW
+
+ combine_xyz_010 = Shader_Preset.nodes.new("ShaderNodeCombineXYZ")
+
+ worn_armor_primary_detail_normal_blend = Shader_Preset.nodes.new("ShaderNodeValue")
+ worn_armor_primary_detail_normal_blend.label = "Detail Normal Blend"
+ worn_armor_primary_detail_normal_blend.use_custom_color = True
+ worn_armor_primary_detail_normal_blend.color = (CPrimeWear1.X, CPrimeWear1.Y, CPrimeWear1.Z)
+ worn_armor_primary_detail_normal_blend.hide = True
+ worn_armor_primary_detail_normal_blend.outputs[0].default_value = wornarmorprimarydetailnormalblend
+
+ suit_secondary_detail_normal_blend = Shader_Preset.nodes.new("ShaderNodeValue")
+ suit_secondary_detail_normal_blend.label = "Detail Normal Blend"
+ suit_secondary_detail_normal_blend.use_custom_color = True
+ suit_secondary_detail_normal_blend.color = (CSecon3.X, CSecon3.Y, CSecon3.Z)
+ suit_secondary_detail_normal_blend.hide = True
+ suit_secondary_detail_normal_blend.outputs[0].default_value = suitsecondarydetailnormalblend
+
+ combine_xyz_015 = Shader_Preset.nodes.new("ShaderNodeCombineXYZ")
+
+ worn_suit_secondary_roughness_remap_y = Shader_Preset.nodes.new("ShaderNodeValue")
+ worn_suit_secondary_roughness_remap_y.label = "Roughness Remap Y"
+ worn_suit_secondary_roughness_remap_y.use_custom_color = True
+ worn_suit_secondary_roughness_remap_y.color = (CSeconWear3.X, CSeconWear3.Y, CSeconWear3.Z)
+ worn_suit_secondary_roughness_remap_y.hide = True
+ worn_suit_secondary_roughness_remap_y.outputs[0].default_value = wornsuitsecondaryroughnessremapY
+
+ reroute_012 = Shader_Preset.nodes.new("NodeReroute")
+
+ reroute_013 = Shader_Preset.nodes.new("NodeReroute")
+
+ armor_primary_iridescence = Shader_Preset.nodes.new("ShaderNodeValue")
+ armor_primary_iridescence.label = "Iridescence"
+ armor_primary_iridescence.use_custom_color = True
+ armor_primary_iridescence.color = (CPrime1.X, CPrime1.Y, CPrime1.Z)
+ armor_primary_iridescence.hide = True
+ armor_primary_iridescence.outputs[0].default_value = armorprimaryiridescence
+
+ reroute_089 = Shader_Preset.nodes.new("NodeReroute")
+
+ combine_xyz_012 = Shader_Preset.nodes.new("ShaderNodeCombineXYZ")
+
+ reroute_062 = Shader_Preset.nodes.new("NodeReroute")
+
+ reroute_101 = Shader_Preset.nodes.new("NodeReroute")
+
+ reroute_043 = Shader_Preset.nodes.new("NodeReroute")
+
+ reroute_086 = Shader_Preset.nodes.new("NodeReroute")
+
+ reroute_031 = Shader_Preset.nodes.new("NodeReroute")
+
+ mix_030 = Shader_Preset.nodes.new("ShaderNodeMixRGB")
+
+ reroute_050 = Shader_Preset.nodes.new("NodeReroute")
+
+ suit_primary_wear_remap_x = Shader_Preset.nodes.new("ShaderNodeValue")
+ suit_primary_wear_remap_x.label = "Wear Remap X"
+ suit_primary_wear_remap_x.use_custom_color = True
+ suit_primary_wear_remap_x.color = (CPrime3.X, CPrime3.Y, CPrime3.Z)
+ suit_primary_wear_remap_x.hide = True
+ suit_primary_wear_remap_x.outputs[0].default_value = suitprimarywearremapX
+
+ armor_secondary_roughness_remap_w = Shader_Preset.nodes.new("ShaderNodeValue")
+ armor_secondary_roughness_remap_w.label = "Roughness Remap W"
+ armor_secondary_roughness_remap_w.use_custom_color = True
+ armor_secondary_roughness_remap_w.color = (CSecon1.X, CSecon1.Y, CSecon1.Z)
+ armor_secondary_roughness_remap_w.hide = True
+ armor_secondary_roughness_remap_w.outputs[0].default_value = armorsecondaryroughnessremapW
+
+ combine_xyz_037 = Shader_Preset.nodes.new("ShaderNodeCombineXYZ")
+
+ cloth_primary_wear_remap_w = Shader_Preset.nodes.new("ShaderNodeValue")
+ cloth_primary_wear_remap_w.label = "Wear Remap W"
+ cloth_primary_wear_remap_w.use_custom_color = True
+ cloth_primary_wear_remap_w.color = (CPrime2.X, CPrime2.Y, CPrime2.Z)
+ cloth_primary_wear_remap_w.hide = True
+ cloth_primary_wear_remap_w.outputs[0].default_value = clothprimarywearremapW
+
+ reroute_007 = Shader_Preset.nodes.new("NodeReroute")
+
+ combine_xyz_005 = Shader_Preset.nodes.new("ShaderNodeCombineXYZ")
+
+ reroute_112 = Shader_Preset.nodes.new("NodeReroute")
+
+ reroute_006 = Shader_Preset.nodes.new("NodeReroute")
+
+ armor_primary_detail_roughness_blend = Shader_Preset.nodes.new("ShaderNodeValue")
+ armor_primary_detail_roughness_blend.label = "Detail Roughness Blend"
+ armor_primary_detail_roughness_blend.use_custom_color = True
+ armor_primary_detail_roughness_blend.color = (CPrime1.X, CPrime1.Y, CPrime1.Z)
+ armor_primary_detail_roughness_blend.hide = True
+ armor_primary_detail_roughness_blend.outputs[0].default_value = armorprimarydetailroughnessblend
+
+ reroute_010 = Shader_Preset.nodes.new("NodeReroute")
+
+ reroute_184 = Shader_Preset.nodes.new("NodeReroute")
+
+ suit_secondary_wear_remap_z = Shader_Preset.nodes.new("ShaderNodeValue")
+ suit_secondary_wear_remap_z.label = "Wear Remap Z"
+ suit_secondary_wear_remap_z.use_custom_color = True
+ suit_secondary_wear_remap_z.color = (CSecon3.X, CSecon3.Y, CSecon3.Z)
+ suit_secondary_wear_remap_z.hide = True
+ suit_secondary_wear_remap_z.outputs[0].default_value = suitsecondarywearremapZ
+
+ separate_xyz_001 = Shader_Preset.nodes.new("ShaderNodeSeparateXYZ")
+
+ reroute_093 = Shader_Preset.nodes.new("NodeReroute")
+
+ reroute_061 = Shader_Preset.nodes.new("NodeReroute")
+
+ worn_armor_secondary_detail_normal_blend = Shader_Preset.nodes.new("ShaderNodeValue")
+ worn_armor_secondary_detail_normal_blend.label = "Detail Normal Blend"
+ worn_armor_secondary_detail_normal_blend.use_custom_color = True
+ worn_armor_secondary_detail_normal_blend.color = (CSeconWear1.X, CSeconWear1.Y, CSeconWear1.Z)
+ worn_armor_secondary_detail_normal_blend.hide = True
+ worn_armor_secondary_detail_normal_blend.outputs[0].default_value = wornarmorsecondarydetailnormalblend
+
+ reroute_051 = Shader_Preset.nodes.new("NodeReroute")
+
+ mix_034 = Shader_Preset.nodes.new("ShaderNodeMixRGB")
+
+ math_022 = Shader_Preset.nodes.new("ShaderNodeMath")
+ math_022.operation = 'MULTIPLY'
+ math_022.inputs[1].default_value = 0.3330000042915344
+ math_022.inputs[2].default_value = 0.5
+
+ reroute_072 = Shader_Preset.nodes.new("NodeReroute")
+
+ worn_suit_primary_metalness = Shader_Preset.nodes.new("ShaderNodeValue")
+ worn_suit_primary_metalness.label = "Metalness"
+ worn_suit_primary_metalness.use_custom_color = True
+ worn_suit_primary_metalness.color = (CPrimeWear3.X, CPrimeWear3.Y, CPrimeWear3.Z)
+ worn_suit_primary_metalness.hide = True
+ worn_suit_primary_metalness.outputs[0].default_value = wornsuitprimarymetalness
+
+ cloth_primary_transmission = Shader_Preset.nodes.new("ShaderNodeValue")
+ cloth_primary_transmission.label = "Transmission"
+ cloth_primary_transmission.use_custom_color = True
+ cloth_primary_transmission.color = (CPrime2.X, CPrime2.Y, CPrime2.Z)
+ cloth_primary_transmission.hide = True
+ cloth_primary_transmission.outputs[0].default_value = clothprimarytransmission
+
+ suit_primary_dye_color = Shader_Preset.nodes.new("ShaderNodeRGB")
+ suit_primary_dye_color.label = "Dye Color"
+ suit_primary_dye_color.use_custom_color = True
+ suit_primary_dye_color.color = (CPrime3.X, CPrime3.Y, CPrime3.Z)
+ suit_primary_dye_color.hide = True
+ suit_primary_dye_color.outputs[0].default_value = suitprimarydyecolor
+
+ mix_076 = Shader_Preset.nodes.new("ShaderNodeMixRGB")
+
+ mix_067 = Shader_Preset.nodes.new("ShaderNodeMixRGB")
+
+ mix_067.inputs[2].default_value = (0.0, 0.0, 0.0, 0.0)
+
+ worn_cloth_secondary_roughness_remap_w = Shader_Preset.nodes.new("ShaderNodeValue")
+ worn_cloth_secondary_roughness_remap_w.label = "Roughness Remap W"
+ worn_cloth_secondary_roughness_remap_w.use_custom_color = True
+ worn_cloth_secondary_roughness_remap_w.color = (CSeconWear2.X, CSeconWear2.Y, CSeconWear2.Z)
+ worn_cloth_secondary_roughness_remap_w.hide = True
+ worn_cloth_secondary_roughness_remap_w.outputs[0].default_value = wornclothsecondaryroughnessremapW
+
+ combine_xyz_013 = Shader_Preset.nodes.new("ShaderNodeCombineXYZ")
+
+ reroute_011 = Shader_Preset.nodes.new("NodeReroute")
+
+ combine_xyz_014 = Shader_Preset.nodes.new("ShaderNodeCombineXYZ")
+
+ worn_suit_primary_roughness_remap_w = Shader_Preset.nodes.new("ShaderNodeValue")
+ worn_suit_primary_roughness_remap_w.label = "Roughness Remap W"
+ worn_suit_primary_roughness_remap_w.use_custom_color = True
+ worn_suit_primary_roughness_remap_w.color = (CPrimeWear3.X, CPrimeWear3.Y, CPrimeWear3.Z)
+ worn_suit_primary_roughness_remap_w.hide = True
+ worn_suit_primary_roughness_remap_w.outputs[0].default_value = wornsuitprimaryroughnessremapW
+
+ worn_suit_secondary_roughness_remap_z = Shader_Preset.nodes.new("ShaderNodeValue")
+ worn_suit_secondary_roughness_remap_z.label = "Roughness Remap Z"
+ worn_suit_secondary_roughness_remap_z.use_custom_color = True
+ worn_suit_secondary_roughness_remap_z.color = (CSeconWear3.X, CSeconWear3.Y, CSeconWear3.Z)
+ worn_suit_secondary_roughness_remap_z.hide = True
+ worn_suit_secondary_roughness_remap_z.outputs[0].default_value = wornsuitsecondaryroughnessremapZ
+
+ reroute_165 = Shader_Preset.nodes.new("NodeReroute")
+
+ combine_xyz_047 = Shader_Preset.nodes.new("ShaderNodeCombineXYZ")
+
+ reroute_108 = Shader_Preset.nodes.new("NodeReroute")
+
+ reroute_042 = Shader_Preset.nodes.new("NodeReroute")
+
+ mix_024 = Shader_Preset.nodes.new("ShaderNodeMixRGB")
+
+ reroute_046 = Shader_Preset.nodes.new("NodeReroute")
+
+ reroute_180 = Shader_Preset.nodes.new("NodeReroute")
+
+ suit_primary_wear_remap_y = Shader_Preset.nodes.new("ShaderNodeValue")
+ suit_primary_wear_remap_y.label = "Wear Remap Y"
+ suit_primary_wear_remap_y.use_custom_color = True
+ suit_primary_wear_remap_y.color = (CPrime3.X, CPrime3.Y, CPrime3.Z)
+ suit_primary_wear_remap_y.hide = True
+ suit_primary_wear_remap_y.outputs[0].default_value = suitprimarywearremapY
+
+ mix_001 = Shader_Preset.nodes.new("ShaderNodeMixRGB")
+
+ mix_009 = Shader_Preset.nodes.new("ShaderNodeMixRGB")
+
+ mix_046 = Shader_Preset.nodes.new("ShaderNodeMixRGB")
+
+ armor_secondary_wear_remap_x = Shader_Preset.nodes.new("ShaderNodeValue")
+ armor_secondary_wear_remap_x.label = "Wear Remap X"
+ armor_secondary_wear_remap_x.use_custom_color = True
+ armor_secondary_wear_remap_x.color = (CSecon1.X, CSecon1.Y, CSecon1.Z)
+ armor_secondary_wear_remap_x.hide = True
+ armor_secondary_wear_remap_x.outputs[0].default_value = armorsecondarywearremapX
+
+ worn_armor_secondary_detail_diffuse_blend = Shader_Preset.nodes.new("ShaderNodeValue")
+ worn_armor_secondary_detail_diffuse_blend.label = "Detail Diffuse Blend"
+ worn_armor_secondary_detail_diffuse_blend.use_custom_color = True
+ worn_armor_secondary_detail_diffuse_blend.color = (CSeconWear1.X, CSeconWear1.Y, CSeconWear1.Z)
+ worn_armor_secondary_detail_diffuse_blend.hide = True
+ worn_armor_secondary_detail_diffuse_blend.outputs[0].default_value = wornarmorsecondarydetaildiffuseblend
+
+ math_005 = Shader_Preset.nodes.new("ShaderNodeMath")
+ math_005.operation = 'MULTIPLY'
+ math_005.inputs[2].default_value = 0.5
+
+ reroute_088 = Shader_Preset.nodes.new("NodeReroute")
+
+ combine_xyz_022 = Shader_Preset.nodes.new("ShaderNodeCombineXYZ")
+
+ worn_suit_secondary_detail_diffuse_blend.parent = WornSuitSecondaryFrame
+ math_017.parent = DoNotTouchFrame
+ mix_047.parent = DoNotTouchFrame
+ suit_primary_roughness_remap_w.parent = SuitPrimaryFrame
+ armor_secondary_detail_roughness_blend.parent = ArmorSecondaryFrame
+ worn_suit_primary_roughness_remap_z.parent = WornSuitPrimaryFrame
+ math_008.parent = DoNotTouchFrame
+ combine_xyz_016.parent = DoNotTouchFrame
+ mix_023.parent = DoNotTouchFrame
+ suit_primary_wear_remap_z.parent = SuitPrimaryFrame
+ worn_armor_secondary_roughness_remap_w.parent = WornArmorSecondaryFrame
+ worn_cloth_primary_dye_color.parent = WornClothPrimaryFrame
+ group_input.parent = DoNotTouchFrame
+ mix_065.parent = DoNotTouchFrame
+ combine_xyz_017.parent = DoNotTouchFrame
+ worn_suit_secondary_roughness_remap_w.parent = WornSuitSecondaryFrame
+ suit_primary_iridescence.parent = SuitPrimaryFrame
+ mix_005.parent = DoNotTouchFrame
+ math_010.parent = DoNotTouchFrame
+ mix_049.parent = DoNotTouchFrame
+ math_024.parent = DoNotTouchFrame
+ mix_028.parent = DoNotTouchFrame
+ math_015.parent = DoNotTouchFrame
+ cloth_primary_fuzz.parent = ClothPrimaryFrame
+ armor_primary_wear_remap_w.parent = ArmorPrimaryFrame
+ mix.parent = DoNotTouchFrame
+ mix_059.parent = DoNotTouchFrame
+ worn_armor_secondary_roughness_remap_z.parent = WornArmorSecondaryFrame
+ armor_secondary_transmission.parent = ArmorSecondaryFrame
+ combine_xyz_043.parent = DoNotTouchFrame
+ math_001.parent = DoNotTouchFrame
+ cloth_secondary_fuzz.parent = ClothSecondaryFrame
+ mix_056.parent = DoNotTouchFrame
+ cloth_secondary_metalness.parent = ClothSecondaryFrame
+ worn_armor_secondary_metalness.parent = WornArmorSecondaryFrame
+ math_012.parent = DoNotTouchFrame
+ separate_xyz_002.parent = DoNotTouchFrame
+ math_003.parent = DoNotTouchFrame
+ suit_secondary_detail_roughness_blend.parent = SuitSecondaryFrame
+ cloth_secondary_wear_remap_z.parent = ClothSecondaryFrame
+ armor_primary_fuzz.parent = ArmorPrimaryFrame
+ worn_armor_primary_roughness_remap_x.parent = WornArmorPrimaryFrame
+ cloth_secondary_roughness_remap_z.parent = ClothSecondaryFrame
+ worn_cloth_primary_roughness_remap_x.parent = WornClothPrimaryFrame
+ mix_022.parent = DoNotTouchFrame
+ suit_primary_roughness_remap_z.parent = SuitPrimaryFrame
+ worn_cloth_secondary_metalness.parent = WornClothSecondaryFrame
+ math_019.parent = DoNotTouchFrame
+ combine_xyz_038.parent = DoNotTouchFrame
+ suit_secondary_roughness_remap_w.parent = SuitSecondaryFrame
+ math_007.parent = DoNotTouchFrame
+ mix_048.parent = DoNotTouchFrame
+ cloth_secondary_detail_roughness_blend.parent = ClothSecondaryFrame
+ armor_secondary_detail_normal_blend.parent = ArmorSecondaryFrame
+ worn_cloth_primary_roughness_remap_z.parent = WornClothPrimaryFrame
+ combine_xyz_036.parent = DoNotTouchFrame
+ math_002.parent = DoNotTouchFrame
+ worn_cloth_secondary_detail_diffuse_blend.parent = WornClothSecondaryFrame
+ math_016.parent = DoNotTouchFrame
+ worn_suit_primary_detail_diffuse_blend.parent = WornSuitPrimaryFrame
+ suit_secondary_wear_remap_x.parent = SuitSecondaryFrame
+ armor_primary_transmission.parent = ArmorPrimaryFrame
+ worn_armor_primary_roughness_remap_y.parent = WornArmorPrimaryFrame
+ cloth_secondary_roughness_remap_y.parent = ClothSecondaryFrame
+ cloth_secondary_transmission.parent = ClothSecondaryFrame
+ mix_011.parent = DoNotTouchFrame
+ cloth_primary_detail_normal_blend.parent = ClothPrimaryFrame
+ armor_secondary_detail_diffuse_blend.parent = ArmorSecondaryFrame
+ worn_cloth_secondary_detail_roughness_blend.parent = WornClothSecondaryFrame
+ mix_066.parent = DoNotTouchFrame
+ combine_xyz_003.parent = DoNotTouchFrame
+ armor_primary_emission_color.parent = ArmorPrimaryFrame
+ suit_secondary_roughness_remap_z.parent = SuitSecondaryFrame
+ suit_primary_detail_normal_blend.parent = SuitPrimaryFrame
+ worn_suit_secondary_dye_color.parent = WornSuitSecondaryFrame
+ mix_027.parent = DoNotTouchFrame
+ suit_primary_detail_roughness_blend.parent = SuitPrimaryFrame
+ cloth_secondary_detail_normal_blend.parent = ClothSecondaryFrame
+ suit_primary_roughness_remap_x.parent = SuitPrimaryFrame
+ cloth_primary_emission_color.parent = ClothPrimaryFrame
+ worn_cloth_primary_roughness_remap_y.parent = WornClothPrimaryFrame
+ worn_suit_primary_detail_roughness_blend.parent = WornSuitPrimaryFrame
+ mix_006.parent = DoNotTouchFrame
+ suit_secondary_wear_remap_w.parent = SuitSecondaryFrame
+ worn_suit_secondary_detail_normal_blend.parent = WornSuitSecondaryFrame
+ worn_cloth_secondary_roughness_remap_y.parent = WornClothSecondaryFrame
+ mix_002.parent = DoNotTouchFrame
+ mix_012.parent = DoNotTouchFrame
+ cloth_secondary_detail_diffuse_blend.parent = ClothSecondaryFrame
+ armor_secondary_dye_color.parent = ArmorSecondaryFrame
+ suit_primary_detail_diffuse_map.parent = SuitPrimaryFrame
+ worn_cloth_secondary_detail_normal_blend.parent = WornClothSecondaryFrame
+ combine_xyz_020.parent = DoNotTouchFrame
+ mix_074.parent = DoNotTouchFrame
+ armor_primary_roughness_remap_x.parent = ArmorPrimaryFrame
+ armor_secondary_metalness.parent = ArmorSecondaryFrame
+ mix_013.parent = DoNotTouchFrame
+ armor_primary_roughness_remap_w.parent = ArmorPrimaryFrame
+ cloth_secondary_roughness_remap_x.parent = ClothSecondaryFrame
+ armor_secondary_wear_remap_z.parent = ArmorSecondaryFrame
+ mix_069.parent = DoNotTouchFrame
+ cloth_primary_roughness_remap_x.parent = ClothPrimaryFrame
+ armor_primary_dye_color.parent = ArmorPrimaryFrame
+ mix_054.parent = DoNotTouchFrame
+ worn_suit_primary_detail_normal_blend.parent = WornSuitPrimaryFrame
+ mix_007.parent = DoNotTouchFrame
+ suit_secondary_metalness.parent = SuitSecondaryFrame
+ worn_armor_primary_roughness_remap_z.parent = WornArmorPrimaryFrame
+ suit_primary_wear_remap_w.parent = SuitPrimaryFrame
+ worn_armor_primary_roughness_remap_w.parent = WornArmorPrimaryFrame
+ cloth_secondary_emission_color.parent = ClothSecondaryFrame
+ mix_031.parent = DoNotTouchFrame
+ combine_xyz_048.parent = DoNotTouchFrame
+ armor_primary_wear_remap_x.parent = ArmorPrimaryFrame
+ combine_xyz_033.parent = DoNotTouchFrame
+ suit_secondary_roughness_remap_y.parent = SuitSecondaryFrame
+ armor_primary_roughness_remap_y.parent = ArmorPrimaryFrame
+ combine_xyz_029.parent = DoNotTouchFrame
+ worn_armor_primary_detail_diffuse_blend.parent = WornArmorPrimaryFrame
+ mix_015.parent = DoNotTouchFrame
+ suit_primary_detail_normal_map.parent = SuitPrimaryFrame
+ cloth_primary_detail_normal_map.parent = ClothPrimaryFrame
+ mix_045.parent = DoNotTouchFrame
+ mix_029.parent = DoNotTouchFrame
+ node.parent = DoNotTouchFrame
+ cloth_primary_roughness_remap_y.parent = ClothPrimaryFrame
+ mix_070.parent = DoNotTouchFrame
+ attribute.parent = DoNotTouchFrame
+ mix_053.parent = DoNotTouchFrame
+ combine_xyz_006.parent = DoNotTouchFrame
+ suit_secondary_wear_remap_y.parent = SuitSecondaryFrame
+ combine_xyz_025.parent = DoNotTouchFrame
+ worn_armor_primary_detail_roughness_blend.parent = WornArmorPrimaryFrame
+ mix_058.parent = DoNotTouchFrame
+ suit_primary_metalness.parent = SuitPrimaryFrame
+ cloth_secondary_wear_remap_w.parent = ClothSecondaryFrame
+ cloth_secondary_iridescence.parent = ClothSecondaryFrame
+ armor_secondary_roughness_remap_y.parent = ArmorSecondaryFrame
+ suit_secondary_roughness_remap_x.parent = SuitSecondaryFrame
+ combine_xyz_041.parent = DoNotTouchFrame
+ mix_044.parent = DoNotTouchFrame
+ cloth_secondary_roughness_remap_w.parent = ClothSecondaryFrame
+ group_output.parent = DoNotTouchFrame
+ armor_primary_roughness_remap_z.parent = ArmorPrimaryFrame
+ combine_xyz_027.parent = DoNotTouchFrame
+ worn_suit_secondary_roughness_remap_x.parent = WornSuitSecondaryFrame
+ suit_primary_detail_diffuse_blend.parent = SuitPrimaryFrame
+ cloth_primary_roughness_remap_z.parent = ClothPrimaryFrame
+ combine_xyz_019.parent = DoNotTouchFrame
+ armor_secondary_fuzz.parent = ArmorSecondaryFrame
+ combine_xyz_046.parent = DoNotTouchFrame
+ worn_armor_secondary_roughness_remap_y.parent = WornArmorSecondaryFrame
+ cloth_primary_dye_color.parent = ClothPrimaryFrame
+ mix_071.parent = DoNotTouchFrame
+ armor_primary_detail_diffuse_blend.parent = ArmorPrimaryFrame
+ combine_xyz_002.parent = DoNotTouchFrame
+ suit_secondary_iridescence.parent = SuitSecondaryFrame
+ armor_primary_wear_remap_y.parent = ArmorPrimaryFrame
+ mix_033.parent = DoNotTouchFrame
+ suit_secondary_detail_diffuse_blend.parent = SuitSecondaryFrame
+ combine_xyz_042.parent = DoNotTouchFrame
+ math_018.parent = DoNotTouchFrame
+ combine_xyz_018.parent = DoNotTouchFrame
+ worn_suit_primary_roughness_remap_y.parent = WornSuitPrimaryFrame
+ combine_xyz_008.parent = DoNotTouchFrame
+ worn_armor_primary_metalness.parent = WornArmorPrimaryFrame
+ worn_cloth_secondary_roughness_remap_x.parent = WornClothSecondaryFrame
+ mix_050.parent = DoNotTouchFrame
+ suit_primary_emission_color.parent = SuitPrimaryFrame
+ cloth_primary_metalness.parent = ClothPrimaryFrame
+ worn_cloth_primary_detail_diffuse_blend.parent = WornClothPrimaryFrame
+ mix_068.parent = DoNotTouchFrame
+ mix_026.parent = DoNotTouchFrame
+ combine_xyz.parent = DoNotTouchFrame
+ armor_primary_metalness.parent = ArmorPrimaryFrame
+ combine_xyz_021.parent = DoNotTouchFrame
+ suit_secondary_fuzz.parent = SuitSecondaryFrame
+ mix_003.parent = DoNotTouchFrame
+ cloth_primary_roughness_remap_w.parent = ClothPrimaryFrame
+ mix_040.parent = DoNotTouchFrame
+ cloth_primary_detail_diffuse_blend.parent = ClothPrimaryFrame
+ cloth_primary_detail_diffuse_map.parent = ClothPrimaryFrame
+ combine_xyz_044.parent = DoNotTouchFrame
+ math.parent = DoNotTouchFrame
+ armor_primary_detail_normal_map.parent = ArmorPrimaryFrame
+ worn_suit_primary_roughness_remap_x.parent = WornSuitPrimaryFrame
+ combine_xyz_009.parent = DoNotTouchFrame
+ worn_cloth_secondary_roughness_remap_z.parent = WornClothSecondaryFrame
+ mix_057.parent = DoNotTouchFrame
+ mix_004.parent = DoNotTouchFrame
+ mix_051.parent = DoNotTouchFrame
+ suit_primary_transmission.parent = SuitPrimaryFrame
+ armor_secondary_emission_color.parent = ArmorSecondaryFrame
+ combine_xyz_030.parent = DoNotTouchFrame
+ combine_xyz_007.parent = DoNotTouchFrame
+ suit_secondary_transmission.parent = SuitSecondaryFrame
+ mix_017.parent = DoNotTouchFrame
+ armor_primary_detail_diffuse_map.parent = ArmorPrimaryFrame
+ mix_020.parent = DoNotTouchFrame
+ mix_055.parent = DoNotTouchFrame
+ armor_secondary_roughness_remap_x.parent = ArmorSecondaryFrame
+ cloth_primary_iridescence.parent = ClothPrimaryFrame
+ cloth_primary_wear_remap_x.parent = ClothPrimaryFrame
+ mix_021.parent = DoNotTouchFrame
+ mix_019.parent = DoNotTouchFrame
+ combine_xyz_039.parent = DoNotTouchFrame
+ worn_armor_secondary_roughness_remap_x.parent = WornArmorSecondaryFrame
+ mix_073.parent = DoNotTouchFrame
+ worn_suit_primary_dye_color.parent = WornSuitPrimaryFrame
+ combine_xyz_024.parent = DoNotTouchFrame
+ mix_052.parent = DoNotTouchFrame
+ cloth_secondary_wear_remap_x.parent = ClothSecondaryFrame
+ armor_secondary_wear_remap_y.parent = ArmorSecondaryFrame
+ worn_cloth_primary_detail_roughness_blend.parent = WornClothPrimaryFrame
+ math_021.parent = DoNotTouchFrame
+ math_004.parent = DoNotTouchFrame
+ combine_xyz_031.parent = DoNotTouchFrame
+ combine_xyz_023.parent = DoNotTouchFrame
+ armor_secondary_iridescence.parent = ArmorSecondaryFrame
+ cloth_primary_detail_roughness_blend.parent = ClothPrimaryFrame
+ combine_xyz_004.parent = DoNotTouchFrame
+ worn_armor_primary_dye_color.parent = WornArmorPrimaryFrame
+ mix_008.parent = DoNotTouchFrame
+ suit_primary_roughness_remap_y.parent = SuitPrimaryFrame
+ mix_042.parent = DoNotTouchFrame
+ combine_xyz_026.parent = DoNotTouchFrame
+ worn_armor_secondary_detail_roughness_blend.parent = WornArmorSecondaryFrame
+ cloth_primary_wear_remap_y.parent = ClothPrimaryFrame
+ combine_xyz_034.parent = DoNotTouchFrame
+ armor_primary_wear_remap_z.parent = ArmorPrimaryFrame
+ suit_secondary_emission_color.parent = SuitSecondaryFrame
+ mix_041.parent = DoNotTouchFrame
+ mix_010.parent = DoNotTouchFrame
+ suit_primary_fuzz.parent = SuitPrimaryFrame
+ mix_032.parent = DoNotTouchFrame
+ worn_cloth_primary_detail_normal_blend.parent = WornClothPrimaryFrame
+ mix_072.parent = DoNotTouchFrame
+ armor_secondary_wear_remap_w.parent = ArmorSecondaryFrame
+ worn_armor_secondary_dye_color.parent = WornArmorSecondaryFrame
+ combine_xyz_035.parent = DoNotTouchFrame
+ math_013.parent = DoNotTouchFrame
+ combine_xyz_001.parent = DoNotTouchFrame
+ suit_secondary_dye_color.parent = SuitSecondaryFrame
+ armor_primary_detail_normal_blend.parent = ArmorPrimaryFrame
+ cloth_secondary_wear_remap_y.parent = ClothSecondaryFrame
+ combine_xyz_045.parent = DoNotTouchFrame
+ combine_xyz_011.parent = DoNotTouchFrame
+ mix_018.parent = DoNotTouchFrame
+ worn_cloth_secondary_dye_color.parent = WornClothSecondaryFrame
+ mix_043.parent = DoNotTouchFrame
+ worn_cloth_primary_metalness.parent = WornClothPrimaryFrame
+ armor_secondary_roughness_remap_z.parent = ArmorSecondaryFrame
+ cloth_primary_wear_remap_z.parent = ClothPrimaryFrame
+ combine_xyz_032.parent = DoNotTouchFrame
+ combine_xyz_028.parent = DoNotTouchFrame
+ math_023.parent = DoNotTouchFrame
+ mix_016.parent = DoNotTouchFrame
+ worn_suit_secondary_metalness.parent = WornSuitSecondaryFrame
+ mix_014.parent = DoNotTouchFrame
+ worn_suit_secondary_detail_roughness_blend.parent = WornSuitSecondaryFrame
+ combine_xyz_040.parent = DoNotTouchFrame
+ mix_025.parent = DoNotTouchFrame
+ cloth_secondary_dye_color.parent = ClothSecondaryFrame
+ worn_cloth_primary_roughness_remap_w.parent = WornClothPrimaryFrame
+ combine_xyz_010.parent = DoNotTouchFrame
+ worn_armor_primary_detail_normal_blend.parent = WornArmorPrimaryFrame
+ suit_secondary_detail_normal_blend.parent = SuitSecondaryFrame
+ combine_xyz_015.parent = DoNotTouchFrame
+ worn_suit_secondary_roughness_remap_y.parent = WornSuitSecondaryFrame
+ armor_primary_iridescence.parent = ArmorPrimaryFrame
+ combine_xyz_012.parent = DoNotTouchFrame
+ mix_030.parent = DoNotTouchFrame
+ suit_primary_wear_remap_x.parent = SuitPrimaryFrame
+ armor_secondary_roughness_remap_w.parent = ArmorSecondaryFrame
+ combine_xyz_037.parent = DoNotTouchFrame
+ cloth_primary_wear_remap_w.parent = ClothPrimaryFrame
+ combine_xyz_005.parent = DoNotTouchFrame
+ armor_primary_detail_roughness_blend.parent = ArmorPrimaryFrame
+ suit_secondary_wear_remap_z.parent = SuitSecondaryFrame
+ separate_xyz_001.parent = DoNotTouchFrame
+ worn_armor_secondary_detail_normal_blend.parent = WornArmorSecondaryFrame
+ mix_034.parent = DoNotTouchFrame
+ math_022.parent = DoNotTouchFrame
+ worn_suit_primary_metalness.parent = WornSuitPrimaryFrame
+ cloth_primary_transmission.parent = ClothPrimaryFrame
+ suit_primary_dye_color.parent = SuitPrimaryFrame
+ mix_076.parent = DoNotTouchFrame
+ mix_067.parent = DoNotTouchFrame
+ worn_cloth_secondary_roughness_remap_w.parent = WornClothSecondaryFrame
+ combine_xyz_013.parent = DoNotTouchFrame
+ combine_xyz_014.parent = DoNotTouchFrame
+ worn_suit_primary_roughness_remap_w.parent = WornSuitPrimaryFrame
+ worn_suit_secondary_roughness_remap_z.parent = WornSuitSecondaryFrame
+ combine_xyz_047.parent = DoNotTouchFrame
+ mix_024.parent = DoNotTouchFrame
+ suit_primary_wear_remap_y.parent = SuitPrimaryFrame
+ mix_001.parent = DoNotTouchFrame
+ mix_009.parent = DoNotTouchFrame
+ mix_046.parent = DoNotTouchFrame
+ armor_secondary_wear_remap_x.parent = ArmorSecondaryFrame
+ worn_armor_secondary_detail_diffuse_blend.parent = WornArmorSecondaryFrame
+ math_005.parent = DoNotTouchFrame
+ combine_xyz_022.parent = DoNotTouchFrame
+
+ #Set locations
+ ArmorPrimaryFrame.location = (-660.0, 720.0)
+ SuitSecondaryFrame.location = (-700.0, -3837.078125)
+ DoNotTouchFrame.location = (1503.5009765625, -1193.9627685546875)
+ WornSuitPrimaryFrame.location = (-680.0, -3487.9482421875)
+ WornClothSecondaryFrame.location = (-680.0, -2490.54150390625)
+ ArmorSecondaryFrame.location = (-680.0, 102.05084991455078)
+ SuitPrimaryFrame.location = (-680.0, -2838.179443359375)
+ WornClothPrimaryFrame.location = (-680.0, -1619.5882568359375)
+ WornArmorSecondaryFrame.location = (920.0, -941.9125366210938)
+ ClothSecondaryFrame.location = (-679.4005737304688, -1887.1016845703125)
+ ClothPrimaryFrame.location = (-680.0, -891.457275390625)
+ WornSuitSecondaryFrame.location = (-700.0, -4440.0595703125)
+ WornArmorPrimaryFrame.location = (-660.0, 450.19281005859375)
+ worn_suit_secondary_detail_diffuse_blend.location = (40.0, -200.126953125)
+ math_017.location = (-1882.6395263671875, -3699.33740234375)
+ suit_detail_diffuse_transform.location = (-913.1685180664062, -2939.849365234375)
+ reroute_004.location = (-377.1822509765625, -3036.572998046875)
+ mix_047.location = (-1880.0882568359375, -3704.32177734375)
+ suit_primary_roughness_remap_w.location = (20.0, -147.927978515625)
+ reroute_003.location = (-377.1822509765625, -2964.310546875)
+ armor_secondary_detail_roughness_blend.location = (20.0, -392.22430419921875)
+ reroute_152.location = (-377.1822509765625, -3950.9873046875)
+ reroute_053.location = (-377.1822509765625, -3348.07177734375)
+ worn_suit_primary_roughness_remap_z.location = (20.0, -136.16259765625)
+ math_008.location = (-1880.5616455078125, -3701.11279296875)
+ reroute_190.location = (-377.1822509765625, -1349.905029296875)
+ combine_xyz_016.location = (-1881.3702392578125, -3702.39404296875)
+ reroute_032.location = (-717.01171875, -3028.1875)
+ mix_023.location = (-1880.0921630859375, -3702.02197265625)
+ suit_primary_wear_remap_z.location = (20.0, -275.856689453125)
+ worn_armor_secondary_roughness_remap_w.location = (-1580.0, 271.220947265625)
+ reroute_162.location = (-377.1822509765625, -4238.8603515625)
+ worn_cloth_primary_dye_color.location = (20.0, 60.0)
+ group_input.location = (-2072.258544921875, -3667.01513671875)
+ mix_065.location = (-1882.0794677734375, -3698.79736328125)
+ reroute_023.location = (-717.01171875, -1008.372314453125)
+ combine_xyz_017.location = (-1881.3702392578125, -3702.51416015625)
+ worn_suit_secondary_roughness_remap_w.location = (40.0, -167.92822265625)
+ reroute_158.location = (-377.1822509765625, -4143.43115234375)
+ suit_primary_iridescence.location = (20.0, -499.947509765625)
+ mix_005.location = (-1880.0882568359375, -3701.37353515625)
+ math_010.location = (-1882.1995849609375, -3699.0576171875)
+ reroute_196.location = (-377.1822509765625, -1446.5072021484375)
+ reroute_026.location = (-717.01171875, -3246.12939453125)
+ mix_049.location = (-1880.0882568359375, -3704.38232421875)
+ math_024.location = (-1880.9088134765625, -3699.49365234375)
+ reroute_168.location = (-377.1822509765625, -4399.40869140625)
+ mix_028.location = (-1880.0921630859375, -3702.17626953125)
+ math_015.location = (-1882.9595947265625, -3698.69775390625)
+ reroute_192.location = (-377.1822509765625, -1286.6318359375)
+ reroute_076.location = (-377.1822509765625, -300.3265380859375)
+ cloth_primary_fuzz.location = (20.0, -512.628173828125)
+ armor_primary_wear_remap_w.location = (0.888427734375, 71.297119140625)
+ mix.location = (-1880.0882568359375, -3701.19384765625)
+ reroute_187.location = (-377.1822509765625, -1126.6097412109375)
+ reroute_169.location = (-377.1822509765625, 1070.6392822265625)
+ reroute_138.location = (-377.1822509765625, -2173.7353515625)
+ reroute_071.location = (-377.1822509765625, -428.3582763671875)
+ reroute_033.location = (-717.01171875, -3188.9267578125)
+ reroute_157.location = (-377.1822509765625, -4110.927734375)
+ reroute_054.location = (-377.1822509765625, -3380.574951171875)
+ mix_059.location = (-1880.0870361328125, -3705.96728515625)
+ worn_armor_secondary_roughness_remap_z.location = (-1580.0, 303.6099853515625)
+ armor_secondary_transmission.location = (20.0, -520.1524047851562)
+ reroute_141.location = (-377.1822509765625, -2237.310546875)
+ reroute_142.location = (-377.1822509765625, -2269.076171875)
+ combine_xyz_043.location = (-1883.5101318359375, -3702.13427734375)
+ math_001.location = (-1880.5616455078125, -3700.99267578125)
+ cloth_secondary_fuzz.location = (20.0, -468.169189453125)
+ reroute_107.location = (-377.1822509765625, 589.4473876953125)
+ reroute_365.location = (-377.1822509765625, -1414.7418212890625)
+ armor_detail_normal_transform.location = (-913.1685180664062, 727.1367797851562)
+ reroute_181.location = (-377.1822509765625, -1030.2899169921875)
+ reroute_137.location = (-377.1822509765625, -2141.53662109375)
+ reroute_020.location = (-717.01171875, -1222.9573974609375)
+ mix_056.location = (-1880.0870361328125, -3705.87744140625)
+ reroute_102.location = (-377.1822509765625, 685.6102294921875)
+ cloth_secondary_metalness.location = (20.0, -404.205322265625)
+ worn_armor_secondary_metalness.location = (-1580.0, 143.1917724609375)
+ math_012.location = (-1882.3995361328125, -3698.99755859375)
+ separate_xyz_002.location = (-1883.2196044921875, -3699.0576171875)
+ math_003.location = (-1882.6995849609375, -3698.53759765625)
+ suit_secondary_detail_roughness_blend.location = (40.0, -391.36962890625)
+ cloth_secondary_wear_remap_z.location = (20.0, -243.600341796875)
+ armor_primary_fuzz.location = (0.0, -153.38067626953125)
+ reroute_056.location = (-377.1822509765625, -1794.3809814453125)
+ reroute_115.location = (-377.1822509765625, -3538.58544921875)
+ reroute_049.location = (-377.1822509765625, -3251.967529296875)
+ reroute_096.location = (-377.1822509765625, 1038.5089111328125)
+ worn_armor_primary_roughness_remap_x.location = (0.0, -72.19877624511719)
+ reroute_025.location = (-939.7109985351562, -1334.8509521484375)
+ reroute_055.location = (-377.1822509765625, -3412.60986328125)
+ cloth_secondary_roughness_remap_z.location = (20.0, -115.881591796875)
+ worn_cloth_primary_roughness_remap_x.location = (20.0, 27.474609375)
+ mix_022.location = (-1880.0921630859375, -3701.99169921875)
+ reroute_057.location = (-377.1822509765625, -1666.8238525390625)
+ suit_primary_roughness_remap_z.location = (20.0, -116.16259765625)
+ reroute_081.location = (-377.1822509765625, -172.86279296875)
+ worn_cloth_secondary_metalness.location = (20.0, -276.723388671875)
+ math_019.location = (-1882.6395263671875, -3698.9775390625)
+ combine_xyz_038.location = (-1883.1702880859375, -3701.7138671875)
+ suit_secondary_roughness_remap_w.location = (40.0, -167.49462890625)
+ math_007.location = (-1880.5616455078125, -3701.07275390625)
+ reroute_095.location = (-377.1822509765625, 1006.5672607421875)
+ reroute_160.location = (-377.1822509765625, -4175.72802734375)
+ reroute_195.location = (-377.1822509765625, -1382.4083251953125)
+ reroute_140.location = (-377.1822509765625, -2205.11181640625)
+ reroute_021.location = (-717.01171875, -1062.218017578125)
+ mix_048.location = (-1880.0882568359375, -3704.35205078125)
+ cloth_secondary_detail_roughness_blend.location = (20.0, -372.006591796875)
+ reroute_082.location = (-377.1822509765625, -139.966796875)
+ armor_secondary_detail_normal_blend.location = (20.0, -360.458984375)
+ worn_cloth_primary_roughness_remap_z.location = (20.0, -36.42626953125)
+ combine_xyz_036.location = (-1882.6102294921875, -3705.25390625)
+ math_002.location = (-1882.9595947265625, -3698.51708984375)
+ worn_cloth_secondary_detail_diffuse_blend.location = (20.0, -180.560546875)
+ reroute_068.location = (-377.1822509765625, -4650.48876953125)
+ math_016.location = (-1882.9595947265625, -3698.87744140625)
+ reroute_041.location = (-377.1822509765625, -3060.040283203125)
+ worn_suit_primary_detail_diffuse_blend.location = (20.0, -200.12646484375)
+ suit_secondary_wear_remap_x.location = (40.0, -199.3896484375)
+ armor_primary_transmission.location = (0.0, -185.14605712890625)
+ worn_armor_primary_roughness_remap_y.location = (0.0, -103.96417236328125)
+ reroute_109.location = (-377.1822509765625, 525.4830322265625)
+ reroute_129.location = (-377.1822509765625, -1981.0106201171875)
+ reroute_177.location = (-377.1822509765625, 176.5667724609375)
+ reroute_014.location = (-717.01171875, 964.4620361328125)
+ reroute_130.location = (-377.1822509765625, -2045.8648681640625)
+ cloth_secondary_roughness_remap_y.location = (20.0, -84.07275390625)
+ cloth_secondary_transmission.location = (20.0, -499.9345703125)
+ mix_011.location = (-1880.0931396484375, -3701.6025390625)
+ cloth_primary_detail_normal_blend.location = (20.0, -384.5181884765625)
+ reroute_171.location = (-377.1822509765625, 336.7640380859375)
+ armor_secondary_detail_diffuse_blend.location = (20.0, -327.8268127441406)
+ worn_cloth_secondary_detail_roughness_blend.location = (20.0, -244.091064453125)
+ mix_066.location = (-1881.8795166015625, -3698.79736328125)
+ combine_xyz_003.location = (-1882.1102294921875, -3701.49365234375)
+ armor_primary_emission_color.location = (0.0, -217.34481811523438)
+ suit_secondary_roughness_remap_z.location = (40.0, -136.1630859375)
+ suit_primary_detail_normal_blend.location = (20.0, -404.21826171875)
+ reroute_174.location = (-377.1822509765625, 400.8836669921875)
+ reroute_191.location = (-377.1822509765625, -1254.7452392578125)
+ reroute_016.location = (-717.01171875, 692.674560546875)
+ worn_suit_secondary_dye_color.location = (40.0, -40.0)
+ reroute_094.location = (-377.1822509765625, 973.5015869140625)
+ reroute_131.location = (-377.1822509765625, -1948.9759521484375)
+ mix_027.location = (-1880.0921630859375, -3702.14697265625)
+ suit_primary_detail_roughness_blend.location = (20.0, -435.983642578125)
+ cloth_secondary_detail_normal_blend.location = (20.0, -340.2412109375)
+ reroute_077.location = (-377.1822509765625, -268.6146240234375)
+ cloth_detail_diffuse_transform.location = (-913.1685180664062, -973.8799438476562)
+ suit_primary_roughness_remap_x.location = (20.0, -52.19873046875)
+ cloth_primary_emission_color.location = (20.0, -576.59228515625)
+ worn_cloth_primary_roughness_remap_y.location = (20.0, -4.475830078125)
+ reroute_146.location = (-377.1822509765625, -2365.671875)
+ reroute_127.location = (-377.1822509765625, -745.2362060546875)
+ worn_suit_primary_detail_roughness_blend.location = (20.0, -263.656982421875)
+ mix_006.location = (-1880.0882568359375, -3701.40380859375)
+ suit_secondary_wear_remap_w.location = (40.0, -295.552734375)
+ reroute_063.location = (-377.1822509765625, -1730.8682861328125)
+ reroute_126.location = (-377.1822509765625, -712.7672119140625)
+ reroute_018.location = (-939.7109985351562, 909.7139282226562)
+ worn_suit_secondary_detail_normal_blend.location = (40.0, -231.892578125)
+ reroute_135.location = (-377.1822509765625, -2077.57275390625)
+ worn_cloth_secondary_roughness_remap_y.location = (20.0, -84.3974609375)
+ reroute_182.location = (-377.1822509765625, -934.41748046875)
+ mix_002.location = (-1880.0882568359375, -3701.25390625)
+ mix_012.location = (-1880.0931396484375, -3701.63232421875)
+ cloth_secondary_detail_diffuse_blend.location = (20.0, -308.04248046875)
+ armor_secondary_dye_color.location = (20.0, -40.0)
+ suit_primary_detail_diffuse_map.location = (20.0, -180.127197265625)
+ reroute_132.location = (-377.1822509765625, -2013.0452880859375)
+ worn_cloth_secondary_detail_normal_blend.location = (20.0, -212.32568359375)
+ reroute_027.location = (-377.1822509765625, -2521.78955078125)
+ reroute_154.location = (-377.1822509765625, -3887.38623046875)
+ combine_xyz_020.location = (-1881.3702392578125, -3700.15380859375)
+ reroute_099.location = (-377.1822509765625, 845.1400146484375)
+ mix_074.location = (-1880.0889892578125, -3702.98974609375)
+ armor_primary_roughness_remap_x.location = (0.0, 327.80126953125)
+ armor_secondary_metalness.location = (20.0, -423.98968505859375)
+ reroute_179.location = (-377.1822509765625, -1215.3074951171875)
+ cloth_detail_normal_transform.location = (-913.1685180664062, -1245.697509765625)
+ reroute_106.location = (-377.1822509765625, 622.0794677734375)
+ reroute_134.location = (-377.1822509765625, -1916.9410400390625)
+ mix_013.location = (-1880.0931396484375, -3701.66259765625)
+ armor_primary_roughness_remap_w.location = (0.0, 231.2049560546875)
+ cloth_secondary_roughness_remap_x.location = (20.0, -52.263916015625)
+ reroute_178.location = (-377.1822509765625, 143.9346923828125)
+ armor_secondary_wear_remap_z.location = (20.0, -264.27203369140625)
+ mix_069.location = (-1882.6395263671875, -3698.79736328125)
+ cloth_primary_roughness_remap_x.location = (20.0, -32.303955078125)
+ reroute_114.location = (-377.1822509765625, -3667.18017578125)
+ armor_primary_dye_color.location = (0.0, 360.0)
+ reroute_019.location = (-939.7109985351562, 637.9833984375)
+ mix_054.location = (-1880.0882568359375, -3707.41943359375)
+ worn_suit_primary_detail_normal_blend.location = (20.43377685546875, -231.458251953125)
+ mix_007.location = (-1880.0882568359375, -3701.43408203125)
+ suit_secondary_metalness.location = (40.0, -423.568359375)
+ reroute_058.location = (-377.1822509765625, -1698.3143310546875)
+ worn_armor_primary_roughness_remap_z.location = (0.0, -136.16294860839844)
+ reroute_110.location = (-377.1822509765625, 493.2843017578125)
+ suit_primary_wear_remap_w.location = (20.0, -307.6220703125)
+ worn_armor_primary_roughness_remap_w.location = (0.0, -168.3617401123047)
+ reroute_120.location = (-377.1822509765625, -585.2867431640625)
+ reroute_091.location = (-377.1822509765625, -3444.64453125)
+ cloth_secondary_emission_color.location = (20.0, -532.13330078125)
+ reroute_185.location = (-377.1822509765625, -902.113525390625)
+ mix_031.location = (-1880.0882568359375, -3702.27197265625)
+ reroute_189.location = (-377.1822509765625, -1190.625732421875)
+ reroute_128.location = (-377.1822509765625, -777.0906982421875)
+ reroute_111.location = (-377.1822509765625, -3570.987548828125)
+ reroute_084.location = (-377.1822509765625, 51.98681640625)
+ combine_xyz_048.location = (-1880.6287841796875, -3699.41357421875)
+ armor_primary_wear_remap_x.location = (0.888427734375, 166.59326171875)
+ combine_xyz_033.location = (-1882.5701904296875, -3701.53369140625)
+ reroute_079.location = (-377.1822509765625, -332.0384521484375)
+ suit_secondary_roughness_remap_y.location = (40.0, -103.96435546875)
+ reroute_113.location = (-377.1822509765625, -3634.271728515625)
+ armor_primary_roughness_remap_y.location = (0.0, 295.60247802734375)
+ combine_xyz_029.location = (-1881.3702392578125, -3706.23388671875)
+ worn_armor_primary_detail_diffuse_blend.location = (0.0, -199.70541381835938)
+ reroute_103.location = (-377.1822509765625, 653.4114990234375)
+ reroute_005.location = (-377.1822509765625, -2868.5810546875)
+ mix_015.location = (-1880.0931396484375, -3701.72900390625)
+ reroute_145.location = (-377.1822509765625, -2333.4736328125)
+ reroute_183.location = (-377.1822509765625, -998.50390625)
+ suit_primary_detail_normal_map.location = (20.0, -339.820556640625)
+ cloth_primary_detail_normal_map.location = (20.0, -320.298095703125)
+ mix_045.location = (-1880.0882568359375, -3704.26220703125)
+ mix_029.location = (-1880.0921630859375, -3702.20654296875)
+ node.location = (-1880.0958251953125, -3703.15576171875)
+ reroute_065.location = (-377.1822509765625, -2681.93701171875)
+ cloth_primary_roughness_remap_y.location = (20.0, -64.001220703125)
+ mix_070.location = (-1882.4595947265625, -3698.79736328125)
+ attribute.location = (-1880.6160888671875, -3699.580078125)
+ mix_053.location = (-1880.0882568359375, -3707.3896484375)
+ combine_xyz_006.location = (-1882.1102294921875, -3703.97412109375)
+ suit_secondary_wear_remap_y.location = (40.0, -232.02197265625)
+ combine_xyz_025.location = (-1881.3702392578125, -3704.99365234375)
+ reroute_097.location = (-377.1822509765625, 902.1060791015625)
+ worn_armor_primary_detail_roughness_blend.location = (0.0, -264.2435302734375)
+ reroute_117.location = (-377.1822509765625, -3698.0625)
+ reroute_125.location = (-377.1822509765625, -809.1253662109375)
+ mix_058.location = (-1880.0870361328125, -3705.93701171875)
+ reroute_073.location = (-377.1822509765625, -364.9344482421875)
+ suit_primary_metalness.location = (20.0, -468.18212890625)
+ cloth_secondary_wear_remap_w.location = (20.0, -275.798828125)
+ cloth_secondary_iridescence.location = (20.0, -435.537109375)
+ reroute_139.location = (-377.1822509765625, -2301.27490234375)
+ armor_secondary_roughness_remap_y.location = (20.0, -104.39756774902344)
+ reroute_175.location = (-377.1822509765625, 240.9642333984375)
+ suit_secondary_roughness_remap_x.location = (40.0, -71.33203125)
+ combine_xyz_041.location = (-1883.1702880859375, -3705.43408203125)
+ mix_044.location = (-1880.0882568359375, -3703.49658203125)
+ cloth_secondary_roughness_remap_w.location = (20.0, -147.92822265625)
+ group_output.location = (-1632.9449462890625, -3703.83984375)
+ armor_primary_roughness_remap_z.location = (0.0, 262.97027587890625)
+ combine_xyz_027.location = (-1881.3702392578125, -3706.35400390625)
+ reroute_188.location = (-377.1822509765625, -1158.3216552734375)
+ reroute_122.location = (-377.1822509765625, -649.3729248046875)
+ reroute_002.location = (-377.1822509765625, -2900.77978515625)
+ worn_suit_secondary_roughness_remap_x.location = (40.0, -71.76513671875)
+ suit_primary_detail_diffuse_blend.location = (20.0, -372.01953125)
+ cloth_primary_roughness_remap_z.location = (20.0, -96.390380859375)
+ combine_xyz_019.location = (-1881.3702392578125, -3703.73388671875)
+ armor_secondary_fuzz.location = (20.0, -488.38714599609375)
+ reroute_069.location = (-377.1822509765625, -4682.27490234375)
+ reroute_030.location = (-939.7109985351562, -3029.08984375)
+ reroute_116.location = (-377.1822509765625, -3794.76171875)
+ combine_xyz_046.location = (-1883.5101318359375, -3705.85400390625)
+ reroute_194.location = (-377.1822509765625, -1055.48974609375)
+ worn_armor_secondary_roughness_remap_y.location = (-1580.0, 335.30712890625)
+ cloth_primary_dye_color.location = (20.0, 0.0)
+ mix_071.location = (-1880.2335205078125, -3699.36474609375)
+ reroute_197.location = (-377.1822509765625, -1478.7059326171875)
+ armor_primary_detail_diffuse_blend.location = (0.0, 7.17987060546875)
+ combine_xyz_002.location = (-1882.1102294921875, -3701.37353515625)
+ suit_secondary_iridescence.location = (40.0, -455.76708984375)
+ reroute_161.location = (-377.1822509765625, -4207.7626953125)
+ armor_primary_wear_remap_y.location = (0.888427734375, 134.827880859375)
+ reroute_155.location = (-377.1822509765625, -4046.8583984375)
+ reroute_193.location = (-377.1822509765625, -1318.6666259765625)
+ mix_033.location = (-1880.0882568359375, -3702.33154296875)
+ reroute_080.location = (-377.1822509765625, -204.57470703125)
+ suit_secondary_detail_diffuse_blend.location = (40.0, -327.4052734375)
+ combine_xyz_042.location = (-1883.1702880859375, -3706.673828125)
+ math_018.location = (-1882.6395263671875, -3699.15771484375)
+ combine_xyz_018.location = (-1881.3702392578125, -3703.61376953125)
+ reroute_166.location = (-377.1822509765625, -4335.44482421875)
+ reroute_070.location = (-377.1822509765625, -4714.06103515625)
+ worn_suit_primary_roughness_remap_y.location = (20.0, -103.9638671875)
+ combine_xyz_008.location = (-1882.1102294921875, -3705.09375)
+ worn_armor_primary_metalness.location = (0.0, -295.80975341796875)
+ reroute_029.location = (-717.01171875, -2974.341796875)
+ reroute_119.location = (-377.1822509765625, -3763.373046875)
+ reroute_024.location = (-939.7109985351562, -1063.120361328125)
+ worn_cloth_secondary_roughness_remap_x.location = (20.0, -52.632080078125)
+ mix_050.location = (-1880.0882568359375, -3707.29931640625)
+ suit_primary_emission_color.location = (20.0, -596.1103515625)
+ cloth_primary_metalness.location = (20.0, -447.7913818359375)
+ worn_cloth_primary_detail_diffuse_blend.location = (20.0, -100.111328125)
+ mix_068.location = (-1882.2794189453125, -3698.79736328125)
+ mix_026.location = (-1880.0921630859375, -3702.11669921875)
+ combine_xyz.location = (-1882.1102294921875, -3700.13427734375)
+ armor_primary_metalness.location = (0.0, -88.5496826171875)
+ combine_xyz_021.location = (-1881.3702392578125, -3701.39404296875)
+ suit_secondary_fuzz.location = (40.0, -487.9658203125)
+ mix_003.location = (-1880.0882568359375, -3701.28369140625)
+ reroute_176.location = (-377.1822509765625, 208.3321533203125)
+ reroute_156.location = (-377.1822509765625, -4079.361328125)
+ cloth_primary_roughness_remap_w.location = (20.0, -128.1763916015625)
+ reroute_098.location = (-377.1822509765625, 876.9053955078125)
+ reroute_136.location = (-377.1822509765625, -2108.90478515625)
+ mix_040.location = (-1880.0882568359375, -3703.37646484375)
+ reroute_186.location = (-377.1822509765625, -1094.3057861328125)
+ cloth_primary_detail_diffuse_blend.location = (20.0, -352.631591796875)
+ cloth_primary_detail_diffuse_map.location = (20.0, -160.4803466796875)
+ combine_xyz_044.location = (-1883.5101318359375, -3703.37353515625)
+ math.location = (-1880.5616455078125, -3700.95263671875)
+ armor_primary_detail_normal_map.location = (0.0, 38.5118408203125)
+ worn_suit_primary_roughness_remap_x.location = (20.0, -72.19873046875)
+ combine_xyz_009.location = (-1882.1102294921875, -3705.2138671875)
+ reroute_170.location = (-377.1822509765625, 303.8829345703125)
+ worn_cloth_secondary_roughness_remap_z.location = (20.0, -116.59619140625)
+ reroute_017.location = (-717.01171875, 749.876953125)
+ reroute_118.location = (-377.1822509765625, -3729.451416015625)
+ mix_057.location = (-1880.0870361328125, -3705.9072265625)
+ mix_004.location = (-1880.0894775390625, -3701.31396484375)
+ mix_051.location = (-1880.0882568359375, -3707.32958984375)
+ suit_primary_transmission.location = (20.0, -563.91162109375)
+ reroute_147.location = (-377.1822509765625, -2397.00390625)
+ armor_secondary_emission_color.location = (20.0, -552.3511352539062)
+ reroute_151.location = (-377.1822509765625, -3919.4208984375)
+ combine_xyz_030.location = (-1882.5701904296875, -3700.2939453125)
+ combine_xyz_007.location = (-1882.1102294921875, -3703.85400390625)
+ suit_secondary_transmission.location = (40.0, -520.16455078125)
+ mix_017.location = (-1880.0931396484375, -3701.78857421875)
+ armor_primary_detail_diffuse_map.location = (0.0, 199.07232666015625)
+ reroute_015.location = (-717.01171875, 910.6163330078125)
+ reroute_104.location = (-377.1822509765625, 916.9053955078125)
+ reroute_048.location = (-377.1822509765625, -3220.167236328125)
+ mix_020.location = (-1880.0921630859375, -3701.93212890625)
+ reroute_078.location = (-377.1822509765625, -236.3106689453125)
+ mix_055.location = (-1880.0870361328125, -3705.84716796875)
+ armor_secondary_roughness_remap_x.location = (20.0, -72.19877624511719)
+ cloth_primary_iridescence.location = (20.0, -480.294677734375)
+ reroute_059.location = (-377.1822509765625, -1634.8016357421875)
+ cloth_primary_wear_remap_x.location = (20.0, -192.1922607421875)
+ mix_021.location = (-1880.0921630859375, -3701.9619140625)
+ reroute_022.location = (-717.01171875, -1280.1597900390625)
+ mix_019.location = (-1880.0931396484375, -3701.8486328125)
+ combine_xyz_039.location = (-1883.1702880859375, -3702.95361328125)
+ worn_armor_secondary_roughness_remap_x.location = (-1580.0, 367.6961669921875)
+ mix_073.location = (-1880.0904541015625, -3702.95849609375)
+ worn_suit_primary_dye_color.location = (20.0, -40.0)
+ combine_xyz_024.location = (-1881.3702392578125, -3704.87353515625)
+ reroute_172.location = (-377.1822509765625, 369.0975341796875)
+ armor_detail_diffuse_transform.location = (-913.1685180664062, 998.9544067382812)
+ reroute.location = (-377.1822509765625, -2932.545166015625)
+ reroute_105.location = (-377.1822509765625, 758.5118408203125)
+ mix_052.location = (-1880.0882568359375, -3707.35986328125)
+ cloth_secondary_wear_remap_x.location = (20.0, -180.069580078125)
+ armor_secondary_wear_remap_y.location = (20.0, -231.63986206054688)
+ worn_cloth_primary_detail_roughness_blend.location = (20.0, -164.687744140625)
+ math_021.location = (-1882.6395263671875, -3699.517578125)
+ math_004.location = (-1880.5616455078125, -3701.03271484375)
+ combine_xyz_031.location = (-1883.1702880859375, -3700.47412109375)
+ combine_xyz_023.location = (-1881.3702392578125, -3703.85400390625)
+ armor_secondary_iridescence.location = (20.0, -456.1883544921875)
+ reroute_047.location = (-377.1822509765625, -4746.94189453125)
+ cloth_primary_detail_roughness_blend.location = (20.0, -416.552978515625)
+ combine_xyz_004.location = (-1882.1102294921875, -3702.73388671875)
+ reroute_159.location = (-377.1822509765625, -4271.36376953125)
+ worn_armor_primary_dye_color.location = (0.0, -40.0)
+ reroute_173.location = (-377.1822509765625, 272.6444091796875)
+ reroute_052.location = (-377.1822509765625, -3181.467529296875)
+ suit_detail_normal_transform.location = (-913.1685180664062, -3211.6669921875)
+ mix_008.location = (-1880.0882568359375, -3701.4638671875)
+ suit_primary_roughness_remap_y.location = (20.0, -83.9638671875)
+ mix_042.location = (-1880.0882568359375, -3703.43603515625)
+ combine_xyz_026.location = (-1881.3702392578125, -3705.11376953125)
+ reroute_123.location = (-377.1822509765625, -681.7620849609375)
+ reroute_148.location = (-377.1822509765625, -2429.20263671875)
+ worn_armor_secondary_detail_roughness_blend.location = (-1580.0, 175.2264404296875)
+ reroute_066.location = (-377.1822509765625, -2713.26904296875)
+ cloth_primary_wear_remap_y.location = (20.0, -224.4962158203125)
+ combine_xyz_034.location = (-1882.5701904296875, -3702.77392578125)
+ reroute_064.location = (-377.1822509765625, -1762.3587646484375)
+ armor_primary_wear_remap_z.location = (0.888427734375, 103.49591064453125)
+ suit_secondary_emission_color.location = (40.0, -551.49658203125)
+ reroute_028.location = (-377.1822509765625, -4490.12353515625)
+ reroute_092.location = (-377.1822509765625, 781.6092529296875)
+ reroute_009.location = (-377.1822509765625, -2649.73828125)
+ reroute_067.location = (-377.1822509765625, -2745.034423828125)
+ reroute_150.location = (-377.1822509765625, -3983.490234375)
+ reroute_083.location = (-377.1822509765625, -108.25487518310547)
+ mix_041.location = (-1880.0882568359375, -3703.40576171875)
+ mix_010.location = (-1880.0931396484375, -3701.57275390625)
+ suit_primary_fuzz.location = (20.0, -532.146240234375)
+ mix_032.location = (-1880.0882568359375, -3702.3017578125)
+ worn_cloth_primary_detail_normal_blend.location = (20.0, -132.66552734375)
+ reroute_045.location = (-377.1822509765625, -2777.66650390625)
+ mix_072.location = (-1881.4156494140625, -3699.21630859375)
+ armor_secondary_wear_remap_w.location = (20.0, -296.4707946777344)
+ worn_armor_secondary_dye_color.location = (-1580.0, 400.0)
+ combine_xyz_035.location = (-1882.5902099609375, -3704.01416015625)
+ math_013.location = (-1881.9395751953125, -3699.11767578125)
+ combine_xyz_001.location = (-1882.1102294921875, -3700.25390625)
+ suit_secondary_dye_color.location = (40.0, -40.0)
+ armor_primary_detail_normal_blend.location = (0.0, -25.0189208984375)
+ cloth_secondary_wear_remap_y.location = (20.0, -211.8349609375)
+ combine_xyz_045.location = (-1883.5101318359375, -3704.61376953125)
+ reroute_167.location = (-377.1822509765625, -4367.2099609375)
+ combine_xyz_011.location = (-1882.1102294921875, -3706.45361328125)
+ reroute_149.location = (-377.1822509765625, -4015.056640625)
+ detail_uvs.location = (-1107.0074462890625, 919.2714233398438)
+ reroute_121.location = (-377.1822509765625, -616.9840087890625)
+ reroute_044.location = (-377.1822509765625, -3156.203125)
+ mix_018.location = (-1880.0931396484375, -3701.81884765625)
+ worn_cloth_secondary_dye_color.location = (20.0, -20.0)
+ reroute_087.location = (-377.1822509765625, -44.92504119873047)
+ mix_043.location = (-1880.0882568359375, -3703.46630859375)
+ worn_cloth_primary_metalness.location = (20.0, -196.7099609375)
+ armor_secondary_roughness_remap_z.location = (20.0, -136.16293334960938)
+ cloth_primary_wear_remap_z.location = (20.0, -256.2081298828125)
+ reroute_008.location = (-377.1822509765625, -2617.10595703125)
+ combine_xyz_032.location = (-1883.5101318359375, -3700.89404296875)
+ combine_xyz_028.location = (-1881.3702392578125, -3706.11376953125)
+ math_023.location = (-1881.0887451171875, -3699.49365234375)
+ mix_016.location = (-1880.0931396484375, -3701.75830078125)
+ worn_suit_secondary_metalness.location = (40.0, -296.2900390625)
+ mix_014.location = (-1880.0931396484375, -3701.69287109375)
+ reroute_100.location = (-377.1822509765625, 813.8079833984375)
+ reroute_060.location = (-377.1822509765625, -1602.2474365234375)
+ worn_suit_secondary_detail_roughness_blend.location = (40.0, -264.09130859375)
+ combine_xyz_040.location = (-1883.1702880859375, -3704.19384765625)
+ reroute_001.location = (-377.1822509765625, -2996.50927734375)
+ reroute_090.location = (-377.1822509765625, -460.662109375)
+ mix_025.location = (-1880.0921630859375, -3702.08642578125)
+ reroute_124.location = (-377.1822509765625, -552.2911376953125)
+ cloth_secondary_dye_color.location = (20.0, -20.0)
+ worn_cloth_primary_roughness_remap_w.location = (20.0, -68.620849609375)
+ combine_xyz_010.location = (-1882.1102294921875, -3706.333984375)
+ worn_armor_primary_detail_normal_blend.location = (0.0, -231.7401885986328)
+ suit_secondary_detail_normal_blend.location = (40.0, -360.03759765625)
+ combine_xyz_015.location = (-1881.3702392578125, -3701.27392578125)
+ worn_suit_secondary_roughness_remap_y.location = (40.0, -103.96435546875)
+ reroute_012.location = (-377.1822509765625, -4586.443359375)
+ reroute_013.location = (-377.1822509765625, -4618.703125)
+ armor_primary_iridescence.location = (0.0, -121.181884765625)
+ reroute_089.location = (-377.1822509765625, 19.682861328125)
+ combine_xyz_012.location = (-1881.3702392578125, -3699.91357421875)
+ reroute_062.location = (-377.1822509765625, -1826.4031982421875)
+ reroute_101.location = (-377.1822509765625, 717.8089599609375)
+ reroute_043.location = (-377.1822509765625, -3124.437744140625)
+ reroute_086.location = (-377.1822509765625, -76.63695526123047)
+ reroute_031.location = (-939.7109985351562, -3300.8203125)
+ mix_030.location = (-1880.0882568359375, -3702.24169921875)
+ reroute_050.location = (-377.1822509765625, -3284.470947265625)
+ suit_primary_wear_remap_x.location = (20.0, -211.892578125)
+ armor_secondary_roughness_remap_w.location = (20.0, -168.3616943359375)
+ combine_xyz_037.location = (-1882.6102294921875, -3706.49365234375)
+ cloth_primary_wear_remap_w.location = (20.0, -288.5120849609375)
+ reroute_007.location = (-377.1822509765625, -2585.774169921875)
+ combine_xyz_005.location = (-1882.1102294921875, -3702.61376953125)
+ reroute_112.location = (-377.1822509765625, -3602.8828125)
+ reroute_006.location = (-377.1822509765625, -2553.5751953125)
+ armor_primary_detail_roughness_blend.location = (0.0, -57.21771240234375)
+ reroute_010.location = (-377.1822509765625, -4554.1396484375)
+ reroute_184.location = (-377.1822509765625, -1070.7535400390625)
+ suit_secondary_wear_remap_z.location = (40.0, -264.220703125)
+ separate_xyz_001.location = (-1880.8416748046875, -3700.99267578125)
+ reroute_093.location = (-377.1822509765625, 940.8695068359375)
+ reroute_061.location = (-377.1822509765625, -1570.7572021484375)
+ worn_armor_secondary_detail_normal_blend.location = (-1580.0, 207.62841796875)
+ reroute_051.location = (-377.1822509765625, -3021.773681640625)
+ mix_034.location = (-1880.0882568359375, -3702.36181640625)
+ math_022.location = (-1880.9088134765625, -3699.33349609375)
+ reroute_072.location = (-377.1822509765625, -396.0543212890625)
+ worn_suit_primary_metalness.location = (20.0, -295.85546875)
+ cloth_primary_transmission.location = (20.0, -544.3935546875)
+ suit_primary_dye_color.location = (20.0, -20.0)
+ mix_076.location = (-1880.0943603515625, -3703.18701171875)
+ mix_067.location = (-1881.6595458984375, -3698.87744140625)
+ worn_cloth_secondary_roughness_remap_w.location = (20.0, -148.361572265625)
+ combine_xyz_013.location = (-1881.3702392578125, -3700.03369140625)
+ reroute_011.location = (-377.1822509765625, -4522.427734375)
+ combine_xyz_014.location = (-1881.3702392578125, -3701.15380859375)
+ worn_suit_primary_roughness_remap_w.location = (20.0, -167.927734375)
+ worn_suit_secondary_roughness_remap_z.location = (40.0, -136.1630859375)
+ reroute_165.location = (-377.1822509765625, -4302.9296875)
+ combine_xyz_047.location = (-1883.5101318359375, -3707.09375)
+ reroute_108.location = (-377.1822509765625, 557.2484130859375)
+ reroute_042.location = (-377.1822509765625, -3092.67236328125)
+ mix_024.location = (-1880.0921630859375, -3702.05224609375)
+ reroute_046.location = (-377.1822509765625, -3316.505615234375)
+ reroute_180.location = (-377.1822509765625, -966.11474609375)
+ suit_primary_wear_remap_y.location = (20.0, -244.09130859375)
+ mix_001.location = (-1880.0882568359375, -3701.22412109375)
+ mix_009.location = (-1880.0882568359375, -3701.49365234375)
+ mix_046.location = (-1880.0882568359375, -3704.29248046875)
+ armor_secondary_wear_remap_x.location = (20.0, -200.30789184570312)
+ worn_armor_secondary_detail_diffuse_blend.location = (-1580.0, 239.5238037109375)
+ math_005.location = (-1882.6995849609375, -3698.37744140625)
+ reroute_088.location = (-377.1822509765625, -12.029052734375)
+ combine_xyz_022.location = (-1881.3702392578125, -3702.63427734375)
+
+ worn_suit_secondary_detail_diffuse_blend.width, worn_suit_secondary_detail_diffuse_blend.height = 140.0, 100.0
+ suit_detail_diffuse_transform.width, suit_detail_diffuse_transform.height = 175.1947021484375, 100.0
+ suit_primary_roughness_remap_w.width, suit_primary_roughness_remap_w.height = 156.03314208984375, 100.0
+ armor_secondary_detail_roughness_blend.width, armor_secondary_detail_roughness_blend.height = 140.0, 100.0
+ worn_suit_primary_roughness_remap_z.width, worn_suit_primary_roughness_remap_z.height = 156.03317260742188, 100.0
+ suit_primary_wear_remap_z.width, suit_primary_wear_remap_z.height = 156.03314208984375, 100.0
+ worn_armor_secondary_roughness_remap_w.width, worn_armor_secondary_roughness_remap_w.height = 156.46646118164062, 100.0
+ worn_cloth_primary_dye_color.width, worn_cloth_primary_dye_color.height = 140.0, 100.0
+ worn_suit_secondary_roughness_remap_w.width, worn_suit_secondary_roughness_remap_w.height = 156.46649169921875, 100.0
+ suit_primary_iridescence.width, suit_primary_iridescence.height = 140.0, 100.0
+ cloth_primary_fuzz.width, cloth_primary_fuzz.height = 140.0, 100.0
+ armor_primary_wear_remap_w.width, armor_primary_wear_remap_w.height = 155.1663818359375, 100.0
+ worn_armor_secondary_roughness_remap_z.width, worn_armor_secondary_roughness_remap_z.height = 156.03314208984375, 100.0
+ armor_secondary_transmission.width, armor_secondary_transmission.height = 140.0, 100.0
+ cloth_secondary_fuzz.width, cloth_secondary_fuzz.height = 140.0, 100.0
+ armor_detail_normal_transform.width, armor_detail_normal_transform.height = 176.44476318359375, 100.0
+ cloth_secondary_metalness.width, cloth_secondary_metalness.height = 140.0, 100.0
+ worn_armor_secondary_metalness.width, worn_armor_secondary_metalness.height = 140.0, 100.0
+ suit_secondary_detail_roughness_blend.width, suit_secondary_detail_roughness_blend.height = 140.0, 100.0
+ cloth_secondary_wear_remap_z.width, cloth_secondary_wear_remap_z.height = 155.92791748046875, 100.0
+ armor_primary_fuzz.width, armor_primary_fuzz.height = 140.0, 100.0
+ worn_armor_primary_roughness_remap_x.width, worn_armor_primary_roughness_remap_x.height = 155.01483154296875, 100.0
+ cloth_secondary_roughness_remap_z.width, cloth_secondary_roughness_remap_z.height = 156.39630126953125, 100.0
+ worn_cloth_primary_roughness_remap_x.width, worn_cloth_primary_roughness_remap_x.height = 156.39630126953125, 100.0
+ suit_primary_roughness_remap_z.width, suit_primary_roughness_remap_z.height = 156.03314208984375, 100.0
+ worn_cloth_secondary_metalness.width, worn_cloth_secondary_metalness.height = 140.0, 100.0
+ suit_secondary_roughness_remap_w.width, suit_secondary_roughness_remap_w.height = 155.599853515625, 100.0
+ cloth_secondary_detail_roughness_blend.width, cloth_secondary_detail_roughness_blend.height = 140.0, 100.0
+ armor_secondary_detail_normal_blend.width, armor_secondary_detail_normal_blend.height = 140.0, 100.0
+ worn_cloth_primary_roughness_remap_z.width, worn_cloth_primary_roughness_remap_z.height = 156.86474609375, 100.0
+ worn_cloth_secondary_detail_diffuse_blend.width, worn_cloth_secondary_detail_diffuse_blend.height = 140.0, 100.0
+ worn_suit_primary_detail_diffuse_blend.width, worn_suit_primary_detail_diffuse_blend.height = 140.0, 100.0
+ suit_secondary_wear_remap_x.width, suit_secondary_wear_remap_x.height = 156.46649169921875, 100.0
+ armor_primary_transmission.width, armor_primary_transmission.height = 140.0, 100.0
+ worn_armor_primary_roughness_remap_y.width, worn_armor_primary_roughness_remap_y.height = 155.46978759765625, 100.0
+ cloth_secondary_roughness_remap_y.width, cloth_secondary_roughness_remap_y.height = 155.92782592773438, 100.0
+ cloth_secondary_transmission.width, cloth_secondary_transmission.height = 140.0, 100.0
+ cloth_primary_detail_normal_blend.width, cloth_primary_detail_normal_blend.height = 140.0, 100.0
+ armor_secondary_detail_diffuse_blend.width, armor_secondary_detail_diffuse_blend.height = 140.0, 100.0
+ worn_cloth_secondary_detail_roughness_blend.width, worn_cloth_secondary_detail_roughness_blend.height = 140.0, 100.0
+ armor_primary_emission_color.width, armor_primary_emission_color.height = 140.0, 100.0
+ suit_secondary_roughness_remap_z.width, suit_secondary_roughness_remap_z.height = 156.89984130859375, 100.0
+ suit_primary_detail_normal_blend.width, suit_primary_detail_normal_blend.height = 140.0, 100.0
+ worn_suit_secondary_dye_color.width, worn_suit_secondary_dye_color.height = 140.0, 100.0
+ suit_primary_detail_roughness_blend.width, suit_primary_detail_roughness_blend.height = 140.0, 100.0
+ cloth_secondary_detail_normal_blend.width, cloth_secondary_detail_normal_blend.height = 140.0, 100.0
+ cloth_detail_diffuse_transform.width, cloth_detail_diffuse_transform.height = 175.1947021484375, 100.0
+ suit_primary_roughness_remap_x.width, suit_primary_roughness_remap_x.height = 156.206298828125, 100.0
+ cloth_primary_emission_color.width, cloth_primary_emission_color.height = 140.0, 100.0
+ worn_cloth_primary_roughness_remap_y.width, worn_cloth_primary_roughness_remap_y.height = 156.86471557617188, 100.0
+ worn_suit_primary_detail_roughness_blend.width, worn_suit_primary_detail_roughness_blend.height = 140.0, 100.0
+ suit_secondary_wear_remap_w.width, suit_secondary_wear_remap_w.height = 156.8997802734375, 100.0
+ worn_suit_secondary_detail_normal_blend.width, worn_suit_secondary_detail_normal_blend.height = 140.0, 100.0
+ worn_cloth_secondary_roughness_remap_y.width, worn_cloth_secondary_roughness_remap_y.height = 156.46652221679688, 100.0
+ cloth_secondary_detail_diffuse_blend.width, cloth_secondary_detail_diffuse_blend.height = 140.0, 100.0
+ armor_secondary_dye_color.width, armor_secondary_dye_color.height = 140.0, 100.0
+ suit_primary_detail_diffuse_map.width, suit_primary_detail_diffuse_map.height = 240.0, 100.0
+ worn_cloth_secondary_detail_normal_blend.width, worn_cloth_secondary_detail_normal_blend.height = 140.0, 100.0
+ armor_primary_roughness_remap_x.width, armor_primary_roughness_remap_x.height = 155.72564697265625, 100.0
+ armor_secondary_metalness.width, armor_secondary_metalness.height = 140.0, 100.0
+ cloth_detail_normal_transform.width, cloth_detail_normal_transform.height = 176.44476318359375, 100.0
+ armor_primary_roughness_remap_w.width, armor_primary_roughness_remap_w.height = 156.45462036132812, 100.0
+ cloth_secondary_roughness_remap_x.width, cloth_secondary_roughness_remap_x.height = 156.86474609375, 100.0
+ armor_secondary_wear_remap_z.width, armor_secondary_wear_remap_z.height = 156.03314208984375, 100.0
+ cloth_primary_roughness_remap_x.width, cloth_primary_roughness_remap_x.height = 155.92779541015625, 100.0
+ armor_primary_dye_color.width, armor_primary_dye_color.height = 140.0, 100.0
+ worn_suit_primary_detail_normal_blend.width, worn_suit_primary_detail_normal_blend.height = 140.0, 100.0
+ suit_secondary_metalness.width, suit_secondary_metalness.height = 140.0, 100.0
+ worn_armor_primary_roughness_remap_z.width, worn_armor_primary_roughness_remap_z.height = 155.92486572265625, 100.0
+ suit_primary_wear_remap_w.width, suit_primary_wear_remap_w.height = 155.59979248046875, 100.0
+ worn_armor_primary_roughness_remap_w.width, worn_armor_primary_roughness_remap_w.height = 156.83477783203125, 100.0
+ cloth_secondary_emission_color.width, cloth_secondary_emission_color.height = 140.0, 100.0
+ armor_primary_wear_remap_x.width, armor_primary_wear_remap_x.height = 154.7330322265625, 100.0
+ suit_secondary_roughness_remap_y.width, suit_secondary_roughness_remap_y.height = 156.89984130859375, 100.0
+ armor_primary_roughness_remap_y.width, armor_primary_roughness_remap_y.height = 156.39605712890625, 100.0
+ worn_armor_primary_detail_diffuse_blend.width, worn_armor_primary_detail_diffuse_blend.height = 140.0, 100.0
+ suit_primary_detail_normal_map.width, suit_primary_detail_normal_map.height = 240.0, 100.0
+ cloth_primary_detail_normal_map.width, cloth_primary_detail_normal_map.height = 240.0, 100.0
+ node.width, node.height = 140.0, 100.0
+ cloth_primary_roughness_remap_y.width, cloth_primary_roughness_remap_y.height = 156.39620971679688, 100.0
+ suit_secondary_wear_remap_y.width, suit_secondary_wear_remap_y.height = 156.46649169921875, 100.0
+ worn_armor_primary_detail_roughness_blend.width, worn_armor_primary_detail_roughness_blend.height = 140.0, 100.0
+ suit_primary_metalness.width, suit_primary_metalness.height = 140.0, 100.0
+ cloth_secondary_wear_remap_w.width, cloth_secondary_wear_remap_w.height = 156.39642333984375, 100.0
+ cloth_secondary_iridescence.width, cloth_secondary_iridescence.height = 140.0, 100.0
+ armor_secondary_roughness_remap_y.width, armor_secondary_roughness_remap_y.height = 155.599853515625, 100.0
+ suit_secondary_roughness_remap_x.width, suit_secondary_roughness_remap_x.height = 156.46649169921875, 100.0
+ cloth_secondary_roughness_remap_w.width, cloth_secondary_roughness_remap_w.height = 156.39627075195312, 100.0
+ armor_primary_roughness_remap_z.width, armor_primary_roughness_remap_z.height = 156.48974609375, 100.0
+ worn_suit_secondary_roughness_remap_x.width, worn_suit_secondary_roughness_remap_x.height = 156.466552734375, 100.0
+ suit_primary_detail_diffuse_blend.width, suit_primary_detail_diffuse_blend.height = 140.0, 100.0
+ cloth_primary_roughness_remap_z.width, cloth_primary_roughness_remap_z.height = 156.86474609375, 100.0
+ armor_secondary_fuzz.width, armor_secondary_fuzz.height = 140.0, 100.0
+ worn_armor_secondary_roughness_remap_y.width, worn_armor_secondary_roughness_remap_y.height = 155.599853515625, 100.0
+ cloth_primary_dye_color.width, cloth_primary_dye_color.height = 140.0, 100.0
+ armor_primary_detail_diffuse_blend.width, armor_primary_detail_diffuse_blend.height = 140.0, 100.0
+ suit_secondary_iridescence.width, suit_secondary_iridescence.height = 140.0, 100.0
+ armor_primary_wear_remap_y.width, armor_primary_wear_remap_y.height = 154.73309326171875, 100.0
+ suit_secondary_detail_diffuse_blend.width, suit_secondary_detail_diffuse_blend.height = 140.0, 100.0
+ worn_suit_primary_roughness_remap_y.width, worn_suit_primary_roughness_remap_y.height = 156.03314208984375, 100.0
+ worn_armor_primary_metalness.width, worn_armor_primary_metalness.height = 140.0, 100.0
+ worn_cloth_secondary_roughness_remap_x.width, worn_cloth_secondary_roughness_remap_x.height = 155.599853515625, 100.0
+ suit_primary_emission_color.width, suit_primary_emission_color.height = 140.0, 100.0
+ cloth_primary_metalness.width, cloth_primary_metalness.height = 140.0, 100.0
+ worn_cloth_primary_detail_diffuse_blend.width, worn_cloth_primary_detail_diffuse_blend.height = 140.0, 100.0
+ armor_primary_metalness.width, armor_primary_metalness.height = 140.0, 100.0
+ suit_secondary_fuzz.width, suit_secondary_fuzz.height = 140.0, 100.0
+ cloth_primary_roughness_remap_w.width, cloth_primary_roughness_remap_w.height = 155.45928955078125, 100.0
+ cloth_primary_detail_diffuse_blend.width, cloth_primary_detail_diffuse_blend.height = 140.0, 100.0
+ cloth_primary_detail_diffuse_map.width, cloth_primary_detail_diffuse_map.height = 240.0, 100.0
+ armor_primary_detail_normal_map.width, armor_primary_detail_normal_map.height = 240.0, 100.0
+ worn_suit_primary_roughness_remap_x.width, worn_suit_primary_roughness_remap_x.height = 156.03314208984375, 100.0
+ worn_cloth_secondary_roughness_remap_z.width, worn_cloth_secondary_roughness_remap_z.height = 156.03317260742188, 100.0
+ suit_primary_transmission.width, suit_primary_transmission.height = 140.0, 100.0
+ armor_secondary_emission_color.width, armor_secondary_emission_color.height = 140.0, 100.0
+ suit_secondary_transmission.width, suit_secondary_transmission.height = 140.0, 100.0
+ armor_primary_detail_diffuse_map.width, armor_primary_detail_diffuse_map.height = 240.0, 100.0
+ armor_secondary_roughness_remap_x.width, armor_secondary_roughness_remap_x.height = 156.03314208984375, 100.0
+ cloth_primary_iridescence.width, cloth_primary_iridescence.height = 140.0, 100.0
+ cloth_primary_wear_remap_x.width, cloth_primary_wear_remap_x.height = 156.4664306640625, 100.0
+ worn_armor_secondary_roughness_remap_x.width, worn_armor_secondary_roughness_remap_x.height = 155.16650390625, 100.0
+ worn_suit_primary_dye_color.width, worn_suit_primary_dye_color.height = 140.0, 100.0
+ armor_detail_diffuse_transform.width, armor_detail_diffuse_transform.height = 175.1947021484375, 100.0
+ cloth_secondary_wear_remap_x.width, cloth_secondary_wear_remap_x.height = 156.3963623046875, 100.0
+ armor_secondary_wear_remap_y.width, armor_secondary_wear_remap_y.height = 156.03314208984375, 100.0
+ worn_cloth_primary_detail_roughness_blend.width, worn_cloth_primary_detail_roughness_blend.height = 140.0, 100.0
+ armor_secondary_iridescence.width, armor_secondary_iridescence.height = 140.0, 100.0
+ cloth_primary_detail_roughness_blend.width, cloth_primary_detail_roughness_blend.height = 140.0, 100.0
+ worn_armor_primary_dye_color.width, worn_armor_primary_dye_color.height = 140.0, 100.0
+ suit_detail_normal_transform.width, suit_detail_normal_transform.height = 176.44476318359375, 100.0
+ suit_primary_roughness_remap_y.width, suit_primary_roughness_remap_y.height = 156.4664306640625, 100.0
+ worn_armor_secondary_detail_roughness_blend.width, worn_armor_secondary_detail_roughness_blend.height = 140.0, 100.0
+ cloth_primary_wear_remap_y.width, cloth_primary_wear_remap_y.height = 155.59979248046875, 100.0
+ armor_primary_wear_remap_z.width, armor_primary_wear_remap_z.height = 155.59967041015625, 100.0
+ suit_secondary_emission_color.width, suit_secondary_emission_color.height = 140.0, 100.0
+ suit_primary_fuzz.width, suit_primary_fuzz.height = 140.0, 100.0
+ worn_cloth_primary_detail_normal_blend.width, worn_cloth_primary_detail_normal_blend.height = 140.0, 100.0
+ armor_secondary_wear_remap_w.width, armor_secondary_wear_remap_w.height = 156.033203125, 100.0
+ worn_armor_secondary_dye_color.width, worn_armor_secondary_dye_color.height = 140.0, 100.0
+ suit_secondary_dye_color.width, suit_secondary_dye_color.height = 140.0, 100.0
+ armor_primary_detail_normal_blend.width, armor_primary_detail_normal_blend.height = 140.0, 100.0
+ cloth_secondary_wear_remap_y.width, cloth_secondary_wear_remap_y.height = 155.92794799804688, 100.0
+ worn_cloth_secondary_dye_color.width, worn_cloth_secondary_dye_color.height = 140.0, 100.0
+ worn_cloth_primary_metalness.width, worn_cloth_primary_metalness.height = 140.0, 100.0
+ armor_secondary_roughness_remap_z.width, armor_secondary_roughness_remap_z.height = 156.8997802734375, 100.0
+ cloth_primary_wear_remap_z.width, cloth_primary_wear_remap_z.height = 156.4664306640625, 100.0
+ worn_suit_secondary_metalness.width, worn_suit_secondary_metalness.height = 140.0, 100.0
+ worn_suit_secondary_detail_roughness_blend.width, worn_suit_secondary_detail_roughness_blend.height = 140.0, 100.0
+ cloth_secondary_dye_color.width, cloth_secondary_dye_color.height = 140.0, 100.0
+ worn_cloth_primary_roughness_remap_w.width, worn_cloth_primary_roughness_remap_w.height = 156.39630126953125, 100.0
+ worn_armor_primary_detail_normal_blend.width, worn_armor_primary_detail_normal_blend.height = 140.0, 100.0
+ suit_secondary_detail_normal_blend.width, suit_secondary_detail_normal_blend.height = 140.0, 100.0
+ worn_suit_secondary_roughness_remap_y.width, worn_suit_secondary_roughness_remap_y.height = 156.46649169921875, 100.0
+ armor_primary_iridescence.width, armor_primary_iridescence.height = 140.0, 100.0
+ suit_primary_wear_remap_x.width, suit_primary_wear_remap_x.height = 156.46649169921875, 100.0
+ armor_secondary_roughness_remap_w.width, armor_secondary_roughness_remap_w.height = 155.599853515625, 100.0
+ cloth_primary_wear_remap_w.width, cloth_primary_wear_remap_w.height = 155.16650390625, 100.0
+ armor_primary_detail_roughness_blend.width, armor_primary_detail_roughness_blend.height = 140.0, 100.0
+ suit_secondary_wear_remap_z.width, suit_secondary_wear_remap_z.height = 156.46646118164062, 100.0
+ worn_armor_secondary_detail_normal_blend.width, worn_armor_secondary_detail_normal_blend.height = 140.0, 100.0
+ worn_suit_primary_metalness.width, worn_suit_primary_metalness.height = 140.0, 100.0
+ cloth_primary_transmission.width, cloth_primary_transmission.height = 140.0, 100.0
+ suit_primary_dye_color.width, suit_primary_dye_color.height = 140.0, 100.0
+ worn_cloth_secondary_roughness_remap_w.width, worn_cloth_secondary_roughness_remap_w.height = 155.599853515625, 100.0
+ worn_suit_primary_roughness_remap_w.width, worn_suit_primary_roughness_remap_w.height = 155.599853515625, 100.0
+ worn_suit_secondary_roughness_remap_z.width, worn_suit_secondary_roughness_remap_z.height = 156.46649169921875, 100.0
+ suit_primary_wear_remap_y.width, suit_primary_wear_remap_y.height = 155.599853515625, 100.0
+ armor_secondary_wear_remap_x.width, armor_secondary_wear_remap_x.height = 156.46649169921875, 100.0
+ worn_armor_secondary_detail_diffuse_blend.width, worn_armor_secondary_detail_diffuse_blend.height = 140.0, 100.0
+
+# Activate Node Connection usage
+ link = Shader_Preset.links.new
+ Shader_Preset.links.new(mix.outputs[0], mix_001.inputs[1])
+ Shader_Preset.links.new(mix_001.outputs[0], mix_002.inputs[1])
+ Shader_Preset.links.new(mix_002.outputs[0], mix_003.inputs[1])
+ Shader_Preset.links.new(mix_003.outputs[0], mix_004.inputs[1])
+ Shader_Preset.links.new(math.outputs[0], mix.inputs[0])
+ Shader_Preset.links.new(math_001.outputs[0], mix_001.inputs[0])
+ Shader_Preset.links.new(math_004.outputs[0], mix_002.inputs[0])
+ Shader_Preset.links.new(math_007.outputs[0], mix_003.inputs[0])
+ Shader_Preset.links.new(math_008.outputs[0], mix_004.inputs[0])
+ Shader_Preset.links.new(mix_005.outputs[0], mix_006.inputs[1])
+ Shader_Preset.links.new(mix_006.outputs[0], mix_007.inputs[1])
+ Shader_Preset.links.new(mix_007.outputs[0], mix_008.inputs[1])
+ Shader_Preset.links.new(mix_008.outputs[0], mix_009.inputs[1])
+ Shader_Preset.links.new(math.outputs[0], mix_005.inputs[0])
+ Shader_Preset.links.new(math_001.outputs[0], mix_006.inputs[0])
+ Shader_Preset.links.new(math_004.outputs[0], mix_007.inputs[0])
+ Shader_Preset.links.new(math_007.outputs[0], mix_008.inputs[0])
+ Shader_Preset.links.new(math_008.outputs[0], mix_009.inputs[0])
+ Shader_Preset.links.new(mix_010.outputs[0], mix_011.inputs[1])
+ Shader_Preset.links.new(mix_011.outputs[0], mix_012.inputs[1])
+ Shader_Preset.links.new(mix_012.outputs[0], mix_013.inputs[1])
+ Shader_Preset.links.new(mix_013.outputs[0], mix_014.inputs[1])
+ Shader_Preset.links.new(math.outputs[0], mix_010.inputs[0])
+ Shader_Preset.links.new(math_001.outputs[0], mix_011.inputs[0])
+ Shader_Preset.links.new(math_004.outputs[0], mix_012.inputs[0])
+ Shader_Preset.links.new(math_007.outputs[0], mix_013.inputs[0])
+ Shader_Preset.links.new(math_008.outputs[0], mix_014.inputs[0])
+ Shader_Preset.links.new(mix_015.outputs[0], mix_016.inputs[1])
+ Shader_Preset.links.new(mix_016.outputs[0], mix_017.inputs[1])
+ Shader_Preset.links.new(mix_017.outputs[0], mix_018.inputs[1])
+ Shader_Preset.links.new(mix_018.outputs[0], mix_019.inputs[1])
+ Shader_Preset.links.new(math.outputs[0], mix_015.inputs[0])
+ Shader_Preset.links.new(math_001.outputs[0], mix_016.inputs[0])
+ Shader_Preset.links.new(math_004.outputs[0], mix_017.inputs[0])
+ Shader_Preset.links.new(math_007.outputs[0], mix_018.inputs[0])
+ Shader_Preset.links.new(math_008.outputs[0], mix_019.inputs[0])
+ Shader_Preset.links.new(mix_020.outputs[0], mix_021.inputs[1])
+ Shader_Preset.links.new(mix_021.outputs[0], mix_022.inputs[1])
+ Shader_Preset.links.new(mix_022.outputs[0], mix_023.inputs[1])
+ Shader_Preset.links.new(mix_023.outputs[0], mix_024.inputs[1])
+ Shader_Preset.links.new(math.outputs[0], mix_020.inputs[0])
+ Shader_Preset.links.new(math_001.outputs[0], mix_021.inputs[0])
+ Shader_Preset.links.new(math_004.outputs[0], mix_022.inputs[0])
+ Shader_Preset.links.new(math_007.outputs[0], mix_023.inputs[0])
+ Shader_Preset.links.new(math_008.outputs[0], mix_024.inputs[0])
+ Shader_Preset.links.new(mix_025.outputs[0], mix_026.inputs[1])
+ Shader_Preset.links.new(mix_026.outputs[0], mix_027.inputs[1])
+ Shader_Preset.links.new(mix_027.outputs[0], mix_028.inputs[1])
+ Shader_Preset.links.new(mix_028.outputs[0], mix_029.inputs[1])
+ Shader_Preset.links.new(math.outputs[0], mix_025.inputs[0])
+ Shader_Preset.links.new(math_001.outputs[0], mix_026.inputs[0])
+ Shader_Preset.links.new(math_004.outputs[0], mix_027.inputs[0])
+ Shader_Preset.links.new(math_007.outputs[0], mix_028.inputs[0])
+ Shader_Preset.links.new(math_008.outputs[0], mix_029.inputs[0])
+ Shader_Preset.links.new(mix_030.outputs[0], mix_031.inputs[1])
+ Shader_Preset.links.new(mix_031.outputs[0], mix_032.inputs[1])
+ Shader_Preset.links.new(mix_032.outputs[0], mix_033.inputs[1])
+ Shader_Preset.links.new(mix_033.outputs[0], mix_034.inputs[1])
+ Shader_Preset.links.new(math.outputs[0], mix_030.inputs[0])
+ Shader_Preset.links.new(math_001.outputs[0], mix_031.inputs[0])
+ Shader_Preset.links.new(math_004.outputs[0], mix_032.inputs[0])
+ Shader_Preset.links.new(math_007.outputs[0], mix_033.inputs[0])
+ Shader_Preset.links.new(math_008.outputs[0], mix_034.inputs[0])
+ Shader_Preset.links.new(mix_040.outputs[0], mix_041.inputs[1])
+ Shader_Preset.links.new(mix_041.outputs[0], mix_042.inputs[1])
+ Shader_Preset.links.new(mix_042.outputs[0], mix_043.inputs[1])
+ Shader_Preset.links.new(mix_043.outputs[0], mix_044.inputs[1])
+ Shader_Preset.links.new(math.outputs[0], mix_040.inputs[0])
+ Shader_Preset.links.new(math_001.outputs[0], mix_041.inputs[0])
+ Shader_Preset.links.new(math_004.outputs[0], mix_042.inputs[0])
+ Shader_Preset.links.new(math_007.outputs[0], mix_043.inputs[0])
+ Shader_Preset.links.new(math_008.outputs[0], mix_044.inputs[0])
+ Shader_Preset.links.new(mix_045.outputs[0], mix_046.inputs[1])
+ Shader_Preset.links.new(mix_046.outputs[0], mix_047.inputs[1])
+ Shader_Preset.links.new(mix_047.outputs[0], mix_048.inputs[1])
+ Shader_Preset.links.new(mix_048.outputs[0], mix_049.inputs[1])
+ Shader_Preset.links.new(math.outputs[0], mix_045.inputs[0])
+ Shader_Preset.links.new(math_001.outputs[0], mix_046.inputs[0])
+ Shader_Preset.links.new(math_004.outputs[0], mix_047.inputs[0])
+ Shader_Preset.links.new(math_007.outputs[0], mix_048.inputs[0])
+ Shader_Preset.links.new(math_008.outputs[0], mix_049.inputs[0])
+ Shader_Preset.links.new(mix_050.outputs[0], mix_051.inputs[1])
+ Shader_Preset.links.new(mix_051.outputs[0], mix_052.inputs[1])
+ Shader_Preset.links.new(mix_052.outputs[0], mix_053.inputs[1])
+ Shader_Preset.links.new(mix_053.outputs[0], mix_054.inputs[1])
+ Shader_Preset.links.new(math.outputs[0], mix_050.inputs[0])
+ Shader_Preset.links.new(math_001.outputs[0], mix_051.inputs[0])
+ Shader_Preset.links.new(math_004.outputs[0], mix_052.inputs[0])
+ Shader_Preset.links.new(math_007.outputs[0], mix_053.inputs[0])
+ Shader_Preset.links.new(math_008.outputs[0], mix_054.inputs[0])
+ Shader_Preset.links.new(armor_primary_detail_normal_map.outputs[0], reroute_105.inputs[0])
+ Shader_Preset.links.new(cloth_primary_detail_normal_map.outputs[0], reroute_179.inputs[0])
+ Shader_Preset.links.new(suit_primary_detail_normal_map.outputs[0], reroute_052.inputs[0])
+ Shader_Preset.links.new(armor_primary_wear_remap_x.outputs[0], reroute_098.inputs[0])
+ Shader_Preset.links.new(armor_primary_wear_remap_y.outputs[0], reroute_099.inputs[0])
+ Shader_Preset.links.new(armor_primary_wear_remap_z.outputs[0], reroute_100.inputs[0])
+ Shader_Preset.links.new(armor_primary_wear_remap_w.outputs[0], reroute_092.inputs[0])
+ Shader_Preset.links.new(armor_secondary_wear_remap_x.outputs[0], reroute_083.inputs[0])
+ Shader_Preset.links.new(armor_secondary_wear_remap_y.outputs[0], reroute_082.inputs[0])
+ Shader_Preset.links.new(armor_secondary_wear_remap_z.outputs[0], reroute_081.inputs[0])
+ Shader_Preset.links.new(armor_secondary_wear_remap_w.outputs[0], reroute_080.inputs[0])
+ Shader_Preset.links.new(cloth_primary_wear_remap_x.outputs[0], reroute_186.inputs[0])
+ Shader_Preset.links.new(cloth_primary_wear_remap_y.outputs[0], reroute_187.inputs[0])
+ Shader_Preset.links.new(cloth_primary_wear_remap_z.outputs[0], reroute_188.inputs[0])
+ Shader_Preset.links.new(cloth_primary_wear_remap_w.outputs[0], reroute_189.inputs[0])
+ Shader_Preset.links.new(cloth_secondary_wear_remap_x.outputs[0], reroute_135.inputs[0])
+ Shader_Preset.links.new(cloth_secondary_wear_remap_y.outputs[0], reroute_136.inputs[0])
+ Shader_Preset.links.new(cloth_secondary_wear_remap_z.outputs[0], reroute_137.inputs[0])
+ Shader_Preset.links.new(cloth_secondary_wear_remap_w.outputs[0], reroute_138.inputs[0])
+ Shader_Preset.links.new(suit_primary_wear_remap_x.outputs[0], reroute_041.inputs[0])
+ Shader_Preset.links.new(suit_primary_wear_remap_y.outputs[0], reroute_042.inputs[0])
+ Shader_Preset.links.new(suit_primary_wear_remap_z.outputs[0], reroute_043.inputs[0])
+ Shader_Preset.links.new(suit_primary_wear_remap_w.outputs[0], reroute_044.inputs[0])
+ Shader_Preset.links.new(suit_secondary_wear_remap_x.outputs[0], reroute_155.inputs[0])
+ Shader_Preset.links.new(suit_secondary_wear_remap_y.outputs[0], reroute_156.inputs[0])
+ Shader_Preset.links.new(suit_secondary_wear_remap_z.outputs[0], reroute_157.inputs[0])
+ Shader_Preset.links.new(suit_secondary_wear_remap_w.outputs[0], reroute_158.inputs[0])
+ Shader_Preset.links.new(armor_primary_detail_diffuse_blend.outputs[0], reroute_101.inputs[0])
+ Shader_Preset.links.new(armor_primary_detail_normal_blend.outputs[0], reroute_102.inputs[0])
+ Shader_Preset.links.new(armor_secondary_detail_diffuse_blend.outputs[0], reroute_078.inputs[0])
+ Shader_Preset.links.new(armor_secondary_detail_normal_blend.outputs[0], reroute_077.inputs[0])
+ Shader_Preset.links.new(cloth_primary_detail_diffuse_blend.outputs[0], reroute_191.inputs[0])
+ Shader_Preset.links.new(cloth_primary_detail_normal_blend.outputs[0], reroute_192.inputs[0])
+ Shader_Preset.links.new(cloth_secondary_detail_diffuse_blend.outputs[0], reroute_140.inputs[0])
+ Shader_Preset.links.new(cloth_secondary_detail_normal_blend.outputs[0], reroute_141.inputs[0])
+ Shader_Preset.links.new(suit_primary_detail_diffuse_blend.outputs[0], reroute_048.inputs[0])
+ Shader_Preset.links.new(suit_primary_detail_normal_blend.outputs[0], reroute_049.inputs[0])
+ Shader_Preset.links.new(suit_secondary_detail_diffuse_blend.outputs[0], reroute_160.inputs[0])
+ Shader_Preset.links.new(suit_secondary_detail_normal_blend.outputs[0], reroute_161.inputs[0])
+ Shader_Preset.links.new(armor_primary_detail_roughness_blend.outputs[0], reroute_103.inputs[0])
+ Shader_Preset.links.new(armor_secondary_detail_roughness_blend.outputs[0], reroute_076.inputs[0])
+ Shader_Preset.links.new(cloth_primary_detail_roughness_blend.outputs[0], reroute_193.inputs[0])
+ Shader_Preset.links.new(cloth_secondary_detail_roughness_blend.outputs[0], reroute_142.inputs[0])
+ Shader_Preset.links.new(suit_primary_detail_roughness_blend.outputs[0], reroute_050.inputs[0])
+ Shader_Preset.links.new(suit_secondary_detail_roughness_blend.outputs[0], reroute_162.inputs[0])
+ Shader_Preset.links.new(mix_055.outputs[0], mix_056.inputs[1])
+ Shader_Preset.links.new(mix_056.outputs[0], mix_057.inputs[1])
+ Shader_Preset.links.new(mix_057.outputs[0], mix_058.inputs[1])
+ Shader_Preset.links.new(mix_058.outputs[0], mix_059.inputs[1])
+ Shader_Preset.links.new(armor_primary_roughness_remap_x.outputs[0], reroute_096.inputs[0])
+ Shader_Preset.links.new(armor_primary_roughness_remap_y.outputs[0], reroute_095.inputs[0])
+ Shader_Preset.links.new(armor_primary_roughness_remap_z.outputs[0], reroute_094.inputs[0])
+ Shader_Preset.links.new(armor_primary_roughness_remap_w.outputs[0], reroute_093.inputs[0])
+ Shader_Preset.links.new(armor_secondary_roughness_remap_x.outputs[0], reroute_089.inputs[0])
+ Shader_Preset.links.new(armor_secondary_roughness_remap_y.outputs[0], reroute_088.inputs[0])
+ Shader_Preset.links.new(armor_secondary_roughness_remap_z.outputs[0], reroute_087.inputs[0])
+ Shader_Preset.links.new(armor_secondary_roughness_remap_w.outputs[0], reroute_086.inputs[0])
+ Shader_Preset.links.new(cloth_primary_roughness_remap_x.outputs[0], reroute_182.inputs[0])
+ Shader_Preset.links.new(cloth_primary_roughness_remap_y.outputs[0], reroute_180.inputs[0])
+ Shader_Preset.links.new(cloth_primary_roughness_remap_z.outputs[0], reroute_183.inputs[0])
+ Shader_Preset.links.new(cloth_primary_roughness_remap_w.outputs[0], reroute_181.inputs[0])
+ Shader_Preset.links.new(cloth_secondary_roughness_remap_x.outputs[0], reroute_131.inputs[0])
+ Shader_Preset.links.new(cloth_secondary_roughness_remap_y.outputs[0], reroute_129.inputs[0])
+ Shader_Preset.links.new(cloth_secondary_roughness_remap_z.outputs[0], reroute_132.inputs[0])
+ Shader_Preset.links.new(cloth_secondary_roughness_remap_w.outputs[0], reroute_130.inputs[0])
+ Shader_Preset.links.new(suit_primary_roughness_remap_x.outputs[0], reroute_002.inputs[0])
+ Shader_Preset.links.new(suit_primary_roughness_remap_y.outputs[0], reroute.inputs[0])
+ Shader_Preset.links.new(suit_primary_roughness_remap_z.outputs[0], reroute_003.inputs[0])
+ Shader_Preset.links.new(suit_primary_roughness_remap_w.outputs[0], reroute_001.inputs[0])
+ Shader_Preset.links.new(suit_secondary_roughness_remap_x.outputs[0], reroute_151.inputs[0])
+ Shader_Preset.links.new(suit_secondary_roughness_remap_y.outputs[0], reroute_152.inputs[0])
+ Shader_Preset.links.new(suit_secondary_roughness_remap_z.outputs[0], reroute_150.inputs[0])
+ Shader_Preset.links.new(suit_secondary_roughness_remap_w.outputs[0], reroute_149.inputs[0])
+ Shader_Preset.links.new(armor_primary_detail_diffuse_map.outputs[0], reroute_104.inputs[0])
+ Shader_Preset.links.new(cloth_primary_detail_diffuse_map.outputs[0], reroute_194.inputs[0])
+ Shader_Preset.links.new(suit_primary_detail_diffuse_map.outputs[0], reroute_051.inputs[0])
+ Shader_Preset.links.new(worn_armor_primary_roughness_remap_x.outputs[0], reroute_172.inputs[0])
+ Shader_Preset.links.new(worn_armor_primary_roughness_remap_y.outputs[0], reroute_171.inputs[0])
+ Shader_Preset.links.new(worn_armor_primary_roughness_remap_z.outputs[0], reroute_170.inputs[0])
+ Shader_Preset.links.new(worn_armor_primary_roughness_remap_w.outputs[0], reroute_173.inputs[0])
+ Shader_Preset.links.new(worn_armor_secondary_roughness_remap_x.outputs[0], reroute_120.inputs[0])
+ Shader_Preset.links.new(worn_armor_secondary_roughness_remap_y.outputs[0], reroute_121.inputs[0])
+ Shader_Preset.links.new(worn_armor_secondary_roughness_remap_z.outputs[0], reroute_122.inputs[0])
+ Shader_Preset.links.new(worn_armor_secondary_roughness_remap_w.outputs[0], reroute_123.inputs[0])
+ Shader_Preset.links.new(worn_cloth_primary_roughness_remap_x.outputs[0], reroute_060.inputs[0])
+ Shader_Preset.links.new(worn_cloth_primary_roughness_remap_y.outputs[0], reroute_059.inputs[0])
+ Shader_Preset.links.new(worn_cloth_primary_roughness_remap_z.outputs[0], reroute_057.inputs[0])
+ Shader_Preset.links.new(worn_cloth_primary_roughness_remap_w.outputs[0], reroute_058.inputs[0])
+ Shader_Preset.links.new(worn_cloth_secondary_roughness_remap_x.outputs[0], reroute_006.inputs[0])
+ Shader_Preset.links.new(worn_cloth_secondary_roughness_remap_y.outputs[0], reroute_007.inputs[0])
+ Shader_Preset.links.new(worn_cloth_secondary_roughness_remap_z.outputs[0], reroute_008.inputs[0])
+ Shader_Preset.links.new(worn_cloth_secondary_roughness_remap_w.outputs[0], reroute_009.inputs[0])
+ Shader_Preset.links.new(worn_suit_primary_roughness_remap_x.outputs[0], reroute_111.inputs[0])
+ Shader_Preset.links.new(worn_suit_primary_roughness_remap_y.outputs[0], reroute_112.inputs[0])
+ Shader_Preset.links.new(worn_suit_primary_roughness_remap_z.outputs[0], reroute_113.inputs[0])
+ Shader_Preset.links.new(worn_suit_primary_roughness_remap_w.outputs[0], reroute_114.inputs[0])
+ Shader_Preset.links.new(worn_suit_secondary_roughness_remap_x.outputs[0], reroute_011.inputs[0])
+ Shader_Preset.links.new(worn_suit_secondary_roughness_remap_y.outputs[0], reroute_010.inputs[0])
+ Shader_Preset.links.new(worn_suit_secondary_roughness_remap_z.outputs[0], reroute_012.inputs[0])
+ Shader_Preset.links.new(worn_suit_secondary_roughness_remap_w.outputs[0], reroute_013.inputs[0])
+ Shader_Preset.links.new(armor_primary_detail_diffuse_map.outputs[1], reroute_097.inputs[0])
+ Shader_Preset.links.new(cloth_primary_detail_diffuse_map.outputs[1], reroute_184.inputs[0])
+ Shader_Preset.links.new(suit_primary_detail_diffuse_map.outputs[1], reroute_004.inputs[0])
+ Shader_Preset.links.new(armor_primary_dye_color.outputs[0], reroute_169.inputs[0])
+ Shader_Preset.links.new(armor_secondary_dye_color.outputs[0], reroute_084.inputs[0])
+ Shader_Preset.links.new(cloth_primary_dye_color.outputs[0], reroute_185.inputs[0])
+ Shader_Preset.links.new(cloth_secondary_dye_color.outputs[0], reroute_134.inputs[0])
+ Shader_Preset.links.new(suit_primary_dye_color.outputs[0], reroute_005.inputs[0])
+ Shader_Preset.links.new(suit_secondary_dye_color.outputs[0], reroute_154.inputs[0])
+ Shader_Preset.links.new(worn_armor_primary_dye_color.outputs[0], reroute_174.inputs[0])
+ Shader_Preset.links.new(worn_armor_secondary_dye_color.outputs[0], reroute_124.inputs[0])
+ Shader_Preset.links.new(worn_cloth_primary_dye_color.outputs[0], reroute_061.inputs[0])
+ Shader_Preset.links.new(worn_cloth_secondary_dye_color.outputs[0], reroute_027.inputs[0])
+ Shader_Preset.links.new(worn_suit_primary_dye_color.outputs[0], reroute_115.inputs[0])
+ Shader_Preset.links.new(worn_suit_secondary_dye_color.outputs[0], reroute_028.inputs[0])
+ Shader_Preset.links.new(math.outputs[0], mix_055.inputs[0])
+ Shader_Preset.links.new(math_001.outputs[0], mix_056.inputs[0])
+ Shader_Preset.links.new(math_004.outputs[0], mix_057.inputs[0])
+ Shader_Preset.links.new(math_007.outputs[0], mix_058.inputs[0])
+ Shader_Preset.links.new(math_008.outputs[0], mix_059.inputs[0])
+ Shader_Preset.links.new(armor_primary_transmission.outputs[0], reroute_109.inputs[0])
+ Shader_Preset.links.new(armor_primary_iridescence.outputs[0], reroute_107.inputs[0])
+ Shader_Preset.links.new(armor_primary_metalness.outputs[0], reroute_106.inputs[0])
+ Shader_Preset.links.new(armor_secondary_metalness.outputs[0], reroute_079.inputs[0])
+ Shader_Preset.links.new(armor_secondary_iridescence.outputs[0], reroute_073.inputs[0])
+ Shader_Preset.links.new(armor_secondary_transmission.outputs[0], reroute_071.inputs[0])
+ Shader_Preset.links.new(cloth_primary_metalness.outputs[0], reroute_190.inputs[0])
+ Shader_Preset.links.new(cloth_primary_iridescence.outputs[0], reroute_195.inputs[0])
+ Shader_Preset.links.new(cloth_primary_transmission.outputs[0], reroute_196.inputs[0])
+ Shader_Preset.links.new(cloth_secondary_metalness.outputs[0], reroute_139.inputs[0])
+ Shader_Preset.links.new(cloth_secondary_iridescence.outputs[0], reroute_145.inputs[0])
+ Shader_Preset.links.new(cloth_secondary_transmission.outputs[0], reroute_147.inputs[0])
+ Shader_Preset.links.new(suit_primary_metalness.outputs[0], reroute_046.inputs[0])
+ Shader_Preset.links.new(suit_primary_iridescence.outputs[0], reroute_053.inputs[0])
+ Shader_Preset.links.new(suit_primary_transmission.outputs[0], reroute_055.inputs[0])
+ Shader_Preset.links.new(suit_secondary_metalness.outputs[0], reroute_159.inputs[0])
+ Shader_Preset.links.new(suit_secondary_iridescence.outputs[0], reroute_165.inputs[0])
+ Shader_Preset.links.new(worn_armor_primary_metalness.outputs[0], reroute_178.inputs[0])
+ Shader_Preset.links.new(worn_armor_secondary_metalness.outputs[0], reroute_125.inputs[0])
+ Shader_Preset.links.new(worn_cloth_primary_metalness.outputs[0], reroute_062.inputs[0])
+ Shader_Preset.links.new(worn_cloth_secondary_metalness.outputs[0], reroute_045.inputs[0])
+ Shader_Preset.links.new(worn_suit_primary_metalness.outputs[0], reroute_116.inputs[0])
+ Shader_Preset.links.new(worn_suit_secondary_metalness.outputs[0], reroute_047.inputs[0])
+ Shader_Preset.links.new(armor_primary_emission_color.outputs[0], reroute_110.inputs[0])
+ Shader_Preset.links.new(armor_secondary_emission_color.outputs[0], reroute_090.inputs[0])
+ Shader_Preset.links.new(cloth_primary_emission_color.outputs[0], reroute_197.inputs[0])
+ Shader_Preset.links.new(cloth_secondary_emission_color.outputs[0], reroute_148.inputs[0])
+ Shader_Preset.links.new(suit_primary_emission_color.outputs[0], reroute_091.inputs[0])
+ Shader_Preset.links.new(suit_secondary_emission_color.outputs[0], reroute_168.inputs[0])
+ Shader_Preset.links.new(reroute_096.outputs[0], combine_xyz_012.inputs[0])
+ Shader_Preset.links.new(reroute_095.outputs[0], combine_xyz_012.inputs[1])
+ Shader_Preset.links.new(reroute_094.outputs[0], combine_xyz_012.inputs[2])
+ Shader_Preset.links.new(reroute_093.outputs[0], combine_xyz_013.inputs[0])
+ Shader_Preset.links.new(worn_armor_primary_detail_diffuse_blend.outputs[0], reroute_175.inputs[0])
+ Shader_Preset.links.new(worn_armor_primary_detail_normal_blend.outputs[0], reroute_176.inputs[0])
+ Shader_Preset.links.new(worn_armor_primary_detail_roughness_blend.outputs[0], reroute_177.inputs[0])
+ Shader_Preset.links.new(worn_armor_secondary_detail_diffuse_blend.outputs[0], reroute_126.inputs[0])
+ Shader_Preset.links.new(worn_armor_secondary_detail_normal_blend.outputs[0], reroute_127.inputs[0])
+ Shader_Preset.links.new(worn_armor_secondary_detail_roughness_blend.outputs[0], reroute_128.inputs[0])
+ Shader_Preset.links.new(worn_cloth_primary_detail_diffuse_blend.outputs[0], reroute_063.inputs[0])
+ Shader_Preset.links.new(worn_cloth_primary_detail_normal_blend.outputs[0], reroute_064.inputs[0])
+ Shader_Preset.links.new(worn_cloth_primary_detail_roughness_blend.outputs[0], reroute_056.inputs[0])
+ Shader_Preset.links.new(worn_cloth_secondary_detail_diffuse_blend.outputs[0], reroute_065.inputs[0])
+ Shader_Preset.links.new(worn_cloth_secondary_detail_normal_blend.outputs[0], reroute_066.inputs[0])
+ Shader_Preset.links.new(worn_cloth_secondary_detail_roughness_blend.outputs[0], reroute_067.inputs[0])
+ Shader_Preset.links.new(worn_suit_primary_detail_diffuse_blend.outputs[0], reroute_117.inputs[0])
+ Shader_Preset.links.new(worn_suit_primary_detail_normal_blend.outputs[0], reroute_118.inputs[0])
+ Shader_Preset.links.new(worn_suit_primary_detail_roughness_blend.outputs[0], reroute_119.inputs[0])
+ Shader_Preset.links.new(worn_suit_secondary_detail_diffuse_blend.outputs[0], reroute_068.inputs[0])
+ Shader_Preset.links.new(worn_suit_secondary_detail_normal_blend.outputs[0], reroute_069.inputs[0])
+ Shader_Preset.links.new(worn_suit_secondary_detail_roughness_blend.outputs[0], reroute_070.inputs[0])
+ Shader_Preset.links.new(reroute_089.outputs[0], combine_xyz_014.inputs[0])
+ Shader_Preset.links.new(reroute_088.outputs[0], combine_xyz_014.inputs[1])
+ Shader_Preset.links.new(reroute_087.outputs[0], combine_xyz_014.inputs[2])
+ Shader_Preset.links.new(reroute_086.outputs[0], combine_xyz_015.inputs[0])
+ Shader_Preset.links.new(reroute_182.outputs[0], combine_xyz_016.inputs[0])
+ Shader_Preset.links.new(reroute_180.outputs[0], combine_xyz_016.inputs[1])
+ Shader_Preset.links.new(reroute_183.outputs[0], combine_xyz_016.inputs[2])
+ Shader_Preset.links.new(reroute_181.outputs[0], combine_xyz_017.inputs[0])
+ Shader_Preset.links.new(reroute_131.outputs[0], combine_xyz_018.inputs[0])
+ Shader_Preset.links.new(reroute_129.outputs[0], combine_xyz_018.inputs[1])
+ Shader_Preset.links.new(reroute_132.outputs[0], combine_xyz_018.inputs[2])
+ Shader_Preset.links.new(reroute_130.outputs[0], combine_xyz_019.inputs[0])
+ Shader_Preset.links.new(reroute_184.outputs[0], combine_xyz_017.inputs[1])
+ Shader_Preset.links.new(reroute_097.outputs[0], combine_xyz_013.inputs[1])
+ Shader_Preset.links.new(reroute_002.outputs[0], combine_xyz_024.inputs[0])
+ Shader_Preset.links.new(reroute.outputs[0], combine_xyz_024.inputs[1])
+ Shader_Preset.links.new(reroute_003.outputs[0], combine_xyz_024.inputs[2])
+ Shader_Preset.links.new(reroute_001.outputs[0], combine_xyz_025.inputs[0])
+ Shader_Preset.links.new(reroute_004.outputs[0], combine_xyz_025.inputs[1])
+ Shader_Preset.links.new(reroute_151.outputs[0], combine_xyz_028.inputs[0])
+ Shader_Preset.links.new(reroute_152.outputs[0], combine_xyz_028.inputs[1])
+ Shader_Preset.links.new(reroute_150.outputs[0], combine_xyz_028.inputs[2])
+ Shader_Preset.links.new(reroute_149.outputs[0], combine_xyz_029.inputs[0])
+ Shader_Preset.links.new(reroute_169.outputs[0], mix.inputs[1])
+ Shader_Preset.links.new(reroute_084.outputs[0], mix.inputs[2])
+ Shader_Preset.links.new(reroute_185.outputs[0], mix_001.inputs[2])
+ Shader_Preset.links.new(reroute_134.outputs[0], mix_002.inputs[2])
+ Shader_Preset.links.new(reroute_005.outputs[0], mix_003.inputs[2])
+ Shader_Preset.links.new(reroute_154.outputs[0], mix_004.inputs[2])
+ Shader_Preset.links.new(reroute_172.outputs[0], combine_xyz_013.inputs[2])
+ Shader_Preset.links.new(reroute_171.outputs[0], combine_xyz_020.inputs[0])
+ Shader_Preset.links.new(reroute_170.outputs[0], combine_xyz_020.inputs[1])
+ Shader_Preset.links.new(reroute_173.outputs[0], combine_xyz_020.inputs[2])
+ Shader_Preset.links.new(combine_xyz_012.outputs[0], mix_020.inputs[1])
+ Shader_Preset.links.new(combine_xyz_014.outputs[0], mix_020.inputs[2])
+ Shader_Preset.links.new(combine_xyz_016.outputs[0], mix_021.inputs[2])
+ Shader_Preset.links.new(combine_xyz_018.outputs[0], mix_022.inputs[2])
+ Shader_Preset.links.new(combine_xyz_024.outputs[0], mix_023.inputs[2])
+ Shader_Preset.links.new(combine_xyz_028.outputs[0], mix_024.inputs[2])
+ Shader_Preset.links.new(combine_xyz_013.outputs[0], mix_025.inputs[1])
+ Shader_Preset.links.new(combine_xyz_015.outputs[0], mix_025.inputs[2])
+ Shader_Preset.links.new(combine_xyz_017.outputs[0], mix_026.inputs[2])
+ Shader_Preset.links.new(combine_xyz_019.outputs[0], mix_027.inputs[2])
+ Shader_Preset.links.new(combine_xyz_025.outputs[0], mix_028.inputs[2])
+ Shader_Preset.links.new(combine_xyz_029.outputs[0], mix_029.inputs[2])
+ Shader_Preset.links.new(combine_xyz_020.outputs[0], mix_030.inputs[1])
+ Shader_Preset.links.new(combine_xyz_021.outputs[0], mix_030.inputs[2])
+ Shader_Preset.links.new(combine_xyz_022.outputs[0], mix_031.inputs[2])
+ Shader_Preset.links.new(combine_xyz_023.outputs[0], mix_032.inputs[2])
+ Shader_Preset.links.new(combine_xyz_026.outputs[0], mix_033.inputs[2])
+ Shader_Preset.links.new(combine_xyz_027.outputs[0], mix_034.inputs[2])
+ Shader_Preset.links.new(reroute_120.outputs[0], combine_xyz_015.inputs[2])
+ Shader_Preset.links.new(reroute_121.outputs[0], combine_xyz_021.inputs[0])
+ Shader_Preset.links.new(reroute_122.outputs[0], combine_xyz_021.inputs[1])
+ Shader_Preset.links.new(reroute_123.outputs[0], combine_xyz_021.inputs[2])
+ Shader_Preset.links.new(reroute_058.outputs[0], combine_xyz_022.inputs[2])
+ Shader_Preset.links.new(reroute_057.outputs[0], combine_xyz_022.inputs[1])
+ Shader_Preset.links.new(reroute_059.outputs[0], combine_xyz_022.inputs[0])
+ Shader_Preset.links.new(reroute_060.outputs[0], combine_xyz_017.inputs[2])
+ Shader_Preset.links.new(reroute_009.outputs[0], combine_xyz_023.inputs[2])
+ Shader_Preset.links.new(reroute_008.outputs[0], combine_xyz_023.inputs[1])
+ Shader_Preset.links.new(reroute_007.outputs[0], combine_xyz_023.inputs[0])
+ Shader_Preset.links.new(reroute_006.outputs[0], combine_xyz_019.inputs[2])
+ Shader_Preset.links.new(reroute_114.outputs[0], combine_xyz_026.inputs[2])
+ Shader_Preset.links.new(reroute_113.outputs[0], combine_xyz_026.inputs[1])
+ Shader_Preset.links.new(reroute_112.outputs[0], combine_xyz_026.inputs[0])
+ Shader_Preset.links.new(reroute_111.outputs[0], combine_xyz_025.inputs[2])
+ Shader_Preset.links.new(reroute_013.outputs[0], combine_xyz_027.inputs[2])
+ Shader_Preset.links.new(reroute_012.outputs[0], combine_xyz_027.inputs[1])
+ Shader_Preset.links.new(reroute_010.outputs[0], combine_xyz_027.inputs[0])
+ Shader_Preset.links.new(reroute_011.outputs[0], combine_xyz_029.inputs[2])
+ Shader_Preset.links.new(reroute_018.outputs[0], armor_detail_diffuse_transform.inputs[0])
+ Shader_Preset.links.new(reroute_174.outputs[0], mix_005.inputs[1])
+ Shader_Preset.links.new(reroute_124.outputs[0], mix_005.inputs[2])
+ Shader_Preset.links.new(reroute_061.outputs[0], mix_006.inputs[2])
+ Shader_Preset.links.new(reroute_027.outputs[0], mix_007.inputs[2])
+ Shader_Preset.links.new(reroute_115.outputs[0], mix_008.inputs[2])
+ Shader_Preset.links.new(reroute_028.outputs[0], mix_009.inputs[2])
+ Shader_Preset.links.new(reroute_098.outputs[0], combine_xyz.inputs[0])
+ Shader_Preset.links.new(reroute_099.outputs[0], combine_xyz.inputs[1])
+ Shader_Preset.links.new(reroute_100.outputs[0], combine_xyz.inputs[2])
+ Shader_Preset.links.new(reroute_092.outputs[0], combine_xyz_001.inputs[0])
+ Shader_Preset.links.new(combine_xyz.outputs[0], mix_010.inputs[1])
+ Shader_Preset.links.new(combine_xyz_001.outputs[0], mix_015.inputs[1])
+ Shader_Preset.links.new(reroute_083.outputs[0], combine_xyz_002.inputs[0])
+ Shader_Preset.links.new(reroute_082.outputs[0], combine_xyz_002.inputs[1])
+ Shader_Preset.links.new(reroute_081.outputs[0], combine_xyz_002.inputs[2])
+ Shader_Preset.links.new(reroute_080.outputs[0], combine_xyz_003.inputs[0])
+ Shader_Preset.links.new(reroute_186.outputs[0], combine_xyz_005.inputs[0])
+ Shader_Preset.links.new(reroute_187.outputs[0], combine_xyz_005.inputs[1])
+ Shader_Preset.links.new(reroute_188.outputs[0], combine_xyz_005.inputs[2])
+ Shader_Preset.links.new(reroute_189.outputs[0], combine_xyz_004.inputs[0])
+ Shader_Preset.links.new(reroute_135.outputs[0], combine_xyz_007.inputs[0])
+ Shader_Preset.links.new(reroute_136.outputs[0], combine_xyz_007.inputs[1])
+ Shader_Preset.links.new(reroute_137.outputs[0], combine_xyz_007.inputs[2])
+ Shader_Preset.links.new(reroute_138.outputs[0], combine_xyz_006.inputs[0])
+ Shader_Preset.links.new(reroute_041.outputs[0], combine_xyz_008.inputs[0])
+ Shader_Preset.links.new(reroute_042.outputs[0], combine_xyz_008.inputs[1])
+ Shader_Preset.links.new(reroute_043.outputs[0], combine_xyz_008.inputs[2])
+ Shader_Preset.links.new(reroute_044.outputs[0], combine_xyz_009.inputs[0])
+ Shader_Preset.links.new(reroute_155.outputs[0], combine_xyz_010.inputs[0])
+ Shader_Preset.links.new(reroute_156.outputs[0], combine_xyz_010.inputs[1])
+ Shader_Preset.links.new(reroute_157.outputs[0], combine_xyz_010.inputs[2])
+ Shader_Preset.links.new(reroute_158.outputs[0], combine_xyz_011.inputs[0])
+ Shader_Preset.links.new(armor_secondary_fuzz.outputs[0], reroute_072.inputs[0])
+ Shader_Preset.links.new(cloth_primary_fuzz.outputs[0], reroute_365.inputs[0])
+ Shader_Preset.links.new(cloth_secondary_fuzz.outputs[0], reroute_146.inputs[0])
+ Shader_Preset.links.new(suit_primary_fuzz.outputs[0], reroute_054.inputs[0])
+ Shader_Preset.links.new(suit_secondary_transmission.outputs[0], reroute_167.inputs[0])
+ Shader_Preset.links.new(suit_secondary_fuzz.outputs[0], reroute_166.inputs[0])
+ Shader_Preset.links.new(reroute_101.outputs[0], combine_xyz_030.inputs[0])
+ Shader_Preset.links.new(reroute_102.outputs[0], combine_xyz_030.inputs[1])
+ Shader_Preset.links.new(reroute_103.outputs[0], combine_xyz_030.inputs[2])
+ Shader_Preset.links.new(reroute_175.outputs[0], combine_xyz_032.inputs[0])
+ Shader_Preset.links.new(reroute_176.outputs[0], combine_xyz_032.inputs[1])
+ Shader_Preset.links.new(reroute_177.outputs[0], combine_xyz_032.inputs[2])
+ Shader_Preset.links.new(reroute_107.outputs[0], combine_xyz_031.inputs[0])
+ Shader_Preset.links.new(reroute_108.outputs[0], combine_xyz_031.inputs[1])
+ Shader_Preset.links.new(reroute_109.outputs[0], combine_xyz_031.inputs[2])
+ Shader_Preset.links.new(reroute_178.outputs[0], combine_xyz_001.inputs[2])
+ Shader_Preset.links.new(reroute_106.outputs[0], combine_xyz_001.inputs[1])
+ Shader_Preset.links.new(reroute_079.outputs[0], combine_xyz_003.inputs[1])
+ Shader_Preset.links.new(reroute_125.outputs[0], combine_xyz_003.inputs[2])
+ Shader_Preset.links.new(reroute_190.outputs[0], combine_xyz_004.inputs[1])
+ Shader_Preset.links.new(reroute_062.outputs[0], combine_xyz_004.inputs[2])
+ Shader_Preset.links.new(reroute_139.outputs[0], combine_xyz_006.inputs[1])
+ Shader_Preset.links.new(reroute_045.outputs[0], combine_xyz_006.inputs[2])
+ Shader_Preset.links.new(reroute_046.outputs[0], combine_xyz_009.inputs[1])
+ Shader_Preset.links.new(reroute_116.outputs[0], combine_xyz_009.inputs[2])
+ Shader_Preset.links.new(reroute_159.outputs[0], combine_xyz_011.inputs[1])
+ Shader_Preset.links.new(reroute_047.outputs[0], combine_xyz_011.inputs[2])
+ Shader_Preset.links.new(combine_xyz_002.outputs[0], mix_010.inputs[2])
+ Shader_Preset.links.new(combine_xyz_005.outputs[0], mix_011.inputs[2])
+ Shader_Preset.links.new(combine_xyz_007.outputs[0], mix_012.inputs[2])
+ Shader_Preset.links.new(combine_xyz_008.outputs[0], mix_013.inputs[2])
+ Shader_Preset.links.new(combine_xyz_010.outputs[0], mix_014.inputs[2])
+ Shader_Preset.links.new(combine_xyz_003.outputs[0], mix_015.inputs[2])
+ Shader_Preset.links.new(combine_xyz_004.outputs[0], mix_016.inputs[2])
+ Shader_Preset.links.new(combine_xyz_006.outputs[0], mix_017.inputs[2])
+ Shader_Preset.links.new(combine_xyz_009.outputs[0], mix_018.inputs[2])
+ Shader_Preset.links.new(combine_xyz_011.outputs[0], mix_019.inputs[2])
+ Shader_Preset.links.new(reroute_078.outputs[0], combine_xyz_033.inputs[0])
+ Shader_Preset.links.new(reroute_077.outputs[0], combine_xyz_033.inputs[1])
+ Shader_Preset.links.new(reroute_076.outputs[0], combine_xyz_033.inputs[2])
+ Shader_Preset.links.new(reroute_191.outputs[0], combine_xyz_034.inputs[0])
+ Shader_Preset.links.new(reroute_192.outputs[0], combine_xyz_034.inputs[1])
+ Shader_Preset.links.new(reroute_193.outputs[0], combine_xyz_034.inputs[2])
+ Shader_Preset.links.new(reroute_140.outputs[0], combine_xyz_035.inputs[0])
+ Shader_Preset.links.new(reroute_141.outputs[0], combine_xyz_035.inputs[1])
+ Shader_Preset.links.new(reroute_142.outputs[0], combine_xyz_035.inputs[2])
+ Shader_Preset.links.new(reroute_048.outputs[0], combine_xyz_036.inputs[0])
+ Shader_Preset.links.new(reroute_049.outputs[0], combine_xyz_036.inputs[1])
+ Shader_Preset.links.new(reroute_050.outputs[0], combine_xyz_036.inputs[2])
+ Shader_Preset.links.new(reroute_160.outputs[0], combine_xyz_037.inputs[0])
+ Shader_Preset.links.new(reroute_161.outputs[0], combine_xyz_037.inputs[1])
+ Shader_Preset.links.new(reroute_162.outputs[0], combine_xyz_037.inputs[2])
+ Shader_Preset.links.new(combine_xyz_030.outputs[0], mix_040.inputs[1])
+ Shader_Preset.links.new(combine_xyz_033.outputs[0], mix_040.inputs[2])
+ Shader_Preset.links.new(combine_xyz_034.outputs[0], mix_041.inputs[2])
+ Shader_Preset.links.new(combine_xyz_035.outputs[0], mix_042.inputs[2])
+ Shader_Preset.links.new(combine_xyz_036.outputs[0], mix_043.inputs[2])
+ Shader_Preset.links.new(combine_xyz_037.outputs[0], mix_044.inputs[2])
+ Shader_Preset.links.new(reroute_073.outputs[0], combine_xyz_038.inputs[0])
+ Shader_Preset.links.new(reroute_072.outputs[0], combine_xyz_038.inputs[1])
+ Shader_Preset.links.new(reroute_071.outputs[0], combine_xyz_038.inputs[2])
+ Shader_Preset.links.new(reroute_195.outputs[0], combine_xyz_039.inputs[0])
+ Shader_Preset.links.new(reroute_365.outputs[0], combine_xyz_039.inputs[1])
+ Shader_Preset.links.new(reroute_196.outputs[0], combine_xyz_039.inputs[2])
+ Shader_Preset.links.new(reroute_145.outputs[0], combine_xyz_040.inputs[0])
+ Shader_Preset.links.new(reroute_146.outputs[0], combine_xyz_040.inputs[1])
+ Shader_Preset.links.new(reroute_147.outputs[0], combine_xyz_040.inputs[2])
+ Shader_Preset.links.new(reroute_053.outputs[0], combine_xyz_041.inputs[0])
+ Shader_Preset.links.new(reroute_054.outputs[0], combine_xyz_041.inputs[1])
+ Shader_Preset.links.new(reroute_055.outputs[0], combine_xyz_041.inputs[2])
+ Shader_Preset.links.new(reroute_165.outputs[0], combine_xyz_042.inputs[0])
+ Shader_Preset.links.new(reroute_166.outputs[0], combine_xyz_042.inputs[1])
+ Shader_Preset.links.new(reroute_167.outputs[0], combine_xyz_042.inputs[2])
+ Shader_Preset.links.new(combine_xyz_031.outputs[0], mix_045.inputs[1])
+ Shader_Preset.links.new(combine_xyz_038.outputs[0], mix_045.inputs[2])
+ Shader_Preset.links.new(combine_xyz_039.outputs[0], mix_046.inputs[2])
+ Shader_Preset.links.new(combine_xyz_040.outputs[0], mix_047.inputs[2])
+ Shader_Preset.links.new(combine_xyz_041.outputs[0], mix_048.inputs[2])
+ Shader_Preset.links.new(combine_xyz_042.outputs[0], mix_049.inputs[2])
+ Shader_Preset.links.new(reroute_126.outputs[0], combine_xyz_043.inputs[0])
+ Shader_Preset.links.new(reroute_127.outputs[0], combine_xyz_043.inputs[1])
+ Shader_Preset.links.new(reroute_128.outputs[0], combine_xyz_043.inputs[2])
+ Shader_Preset.links.new(reroute_063.outputs[0], combine_xyz_044.inputs[0])
+ Shader_Preset.links.new(reroute_064.outputs[0], combine_xyz_044.inputs[1])
+ Shader_Preset.links.new(reroute_056.outputs[0], combine_xyz_044.inputs[2])
+ Shader_Preset.links.new(reroute_065.outputs[0], combine_xyz_045.inputs[0])
+ Shader_Preset.links.new(reroute_066.outputs[0], combine_xyz_045.inputs[1])
+ Shader_Preset.links.new(reroute_067.outputs[0], combine_xyz_045.inputs[2])
+ Shader_Preset.links.new(reroute_117.outputs[0], combine_xyz_046.inputs[0])
+ Shader_Preset.links.new(reroute_118.outputs[0], combine_xyz_046.inputs[1])
+ Shader_Preset.links.new(reroute_119.outputs[0], combine_xyz_046.inputs[2])
+ Shader_Preset.links.new(reroute_068.outputs[0], combine_xyz_047.inputs[0])
+ Shader_Preset.links.new(reroute_069.outputs[0], combine_xyz_047.inputs[1])
+ Shader_Preset.links.new(reroute_070.outputs[0], combine_xyz_047.inputs[2])
+ Shader_Preset.links.new(combine_xyz_032.outputs[0], mix_055.inputs[1])
+ Shader_Preset.links.new(combine_xyz_043.outputs[0], mix_055.inputs[2])
+ Shader_Preset.links.new(combine_xyz_044.outputs[0], mix_056.inputs[2])
+ Shader_Preset.links.new(combine_xyz_045.outputs[0], mix_057.inputs[2])
+ Shader_Preset.links.new(combine_xyz_046.outputs[0], mix_058.inputs[2])
+ Shader_Preset.links.new(combine_xyz_047.outputs[0], mix_059.inputs[2])
+ Shader_Preset.links.new(reroute_110.outputs[0], mix_050.inputs[1])
+ Shader_Preset.links.new(reroute_090.outputs[0], mix_050.inputs[2])
+ Shader_Preset.links.new(reroute_197.outputs[0], mix_051.inputs[2])
+ Shader_Preset.links.new(reroute_148.outputs[0], mix_052.inputs[2])
+ Shader_Preset.links.new(reroute_091.outputs[0], mix_053.inputs[2])
+ Shader_Preset.links.new(reroute_168.outputs[0], mix_054.inputs[2])
+ Shader_Preset.links.new(armor_primary_fuzz.outputs[0], reroute_108.inputs[0])
+ Shader_Preset.links.new(math_023.outputs[0], math_024.inputs[0])
+ Shader_Preset.links.new(separate_xyz_001.outputs[0], math.inputs[0])
+ Shader_Preset.links.new(separate_xyz_001.outputs[0], math_001.inputs[0])
+ Shader_Preset.links.new(separate_xyz_001.outputs[1], math_008.inputs[0])
+ Shader_Preset.links.new(separate_xyz_001.outputs[1], math_007.inputs[0])
+ Shader_Preset.links.new(separate_xyz_001.outputs[1], math_004.inputs[0])
+ Shader_Preset.links.new(mix_071.outputs[0], separate_xyz_001.inputs[0])
+ Shader_Preset.links.new(math_022.outputs[0], combine_xyz_048.inputs[0])
+ Shader_Preset.links.new(math_024.outputs[0], combine_xyz_048.inputs[1])
+ Shader_Preset.links.new(combine_xyz_048.outputs[0], mix_071.inputs[2])
+ Shader_Preset.links.new(attribute.outputs[0], mix_071.inputs[1])
+ Shader_Preset.links.new(separate_xyz_002.outputs[0], math_002.inputs[0])
+ Shader_Preset.links.new(separate_xyz_002.outputs[1], math_015.inputs[0])
+ Shader_Preset.links.new(separate_xyz_002.outputs[2], math_016.inputs[0])
+ Shader_Preset.links.new(mix_069.outputs[0], mix_070.inputs[1])
+ Shader_Preset.links.new(mix_070.outputs[0], mix_068.inputs[1])
+ Shader_Preset.links.new(mix_065.outputs[0], mix_066.inputs[1])
+ Shader_Preset.links.new(math_002.outputs[0], mix_069.inputs[0])
+ Shader_Preset.links.new(math_015.outputs[0], mix_070.inputs[0])
+ Shader_Preset.links.new(math_002.outputs[0], math_003.inputs[0])
+ Shader_Preset.links.new(math_015.outputs[0], math_003.inputs[1])
+ Shader_Preset.links.new(math_002.outputs[0], math_005.inputs[0])
+ Shader_Preset.links.new(math_016.outputs[0], math_005.inputs[1])
+ Shader_Preset.links.new(math_005.outputs[0], mix_066.inputs[0])
+ Shader_Preset.links.new(math_016.outputs[0], mix_068.inputs[0])
+ Shader_Preset.links.new(mix_068.outputs[0], mix_065.inputs[1])
+ Shader_Preset.links.new(math_003.outputs[0], mix_065.inputs[0])
+ Shader_Preset.links.new(math_012.outputs[0], math_010.inputs[0])
+ Shader_Preset.links.new(math_010.outputs[0], math_013.inputs[0])
+ Shader_Preset.links.new(mix_066.outputs[0], mix_067.inputs[1])
+ Shader_Preset.links.new(mix_072.outputs[0], math_023.inputs[0])
+ Shader_Preset.links.new(mix_067.outputs[0], mix_071.inputs[0])
+ Shader_Preset.links.new(separate_xyz_002.outputs[2], math_017.inputs[0])
+ Shader_Preset.links.new(math_017.outputs[0], math_010.inputs[1])
+ Shader_Preset.links.new(separate_xyz_002.outputs[1], math_018.inputs[0])
+ Shader_Preset.links.new(math_018.outputs[0], math_012.inputs[1])
+ Shader_Preset.links.new(separate_xyz_002.outputs[0], math_019.inputs[0])
+ Shader_Preset.links.new(math_019.outputs[0], math_012.inputs[0])
+ Shader_Preset.links.new(math_013.outputs[0], mix_067.inputs[0])
+ Shader_Preset.links.new(mix_067.outputs[0], mix_072.inputs[1])
+ Shader_Preset.links.new(mix_072.outputs[0], math_022.inputs[0])
+ Shader_Preset.links.new(math_021.outputs[0], math_013.inputs[1])
+ Shader_Preset.links.new(mix_073.outputs[0], mix_074.inputs[1])
+ Shader_Preset.links.new(math_001.outputs[0], mix_073.inputs[0])
+ Shader_Preset.links.new(math_007.outputs[0], mix_074.inputs[0])
+ Shader_Preset.links.new(reroute_104.outputs[0], mix_073.inputs[1])
+ Shader_Preset.links.new(reroute_194.outputs[0], mix_073.inputs[2])
+ Shader_Preset.links.new(reroute_051.outputs[0], mix_074.inputs[2])
+ Shader_Preset.links.new(math_001.outputs[0], node.inputs[0])
+ Shader_Preset.links.new(math_007.outputs[0], mix_076.inputs[0])
+ Shader_Preset.links.new(node.outputs[0], mix_076.inputs[1])
+ Shader_Preset.links.new(reroute_105.outputs[0], node.inputs[1])
+ Shader_Preset.links.new(reroute_179.outputs[0], node.inputs[2])
+ Shader_Preset.links.new(reroute_052.outputs[0], mix_076.inputs[2])
+ Shader_Preset.links.new(reroute_097.outputs[0], combine_xyz_015.inputs[1])
+ Shader_Preset.links.new(reroute_184.outputs[0], combine_xyz_019.inputs[1])
+ Shader_Preset.links.new(reroute_004.outputs[0], combine_xyz_029.inputs[1])
+ Shader_Preset.links.new(armor_detail_diffuse_transform.outputs[0], reroute_014.inputs[0])
+ Shader_Preset.links.new(reroute_014.outputs[0], reroute_015.inputs[0])
+ Shader_Preset.links.new(reroute_015.outputs[0], armor_primary_detail_diffuse_map.inputs[0])
+ Shader_Preset.links.new(reroute_016.outputs[0], reroute_017.inputs[0])
+ Shader_Preset.links.new(armor_detail_normal_transform.outputs[0], reroute_016.inputs[0])
+ Shader_Preset.links.new(reroute_017.outputs[0], armor_primary_detail_normal_map.inputs[0])
+ Shader_Preset.links.new(detail_uvs.outputs[0], reroute_018.inputs[0])
+ Shader_Preset.links.new(reroute_018.outputs[0], reroute_019.inputs[0])
+ Shader_Preset.links.new(reroute_019.outputs[0], armor_detail_normal_transform.inputs[0])
+ Shader_Preset.links.new(reroute_024.outputs[0], cloth_detail_diffuse_transform.inputs[0])
+ Shader_Preset.links.new(cloth_detail_diffuse_transform.outputs[0], reroute_023.inputs[0])
+ Shader_Preset.links.new(reroute_023.outputs[0], reroute_021.inputs[0])
+ Shader_Preset.links.new(reroute_022.outputs[0], reroute_020.inputs[0])
+ Shader_Preset.links.new(cloth_detail_normal_transform.outputs[0], reroute_022.inputs[0])
+ Shader_Preset.links.new(reroute_024.outputs[0], reroute_025.inputs[0])
+ Shader_Preset.links.new(reroute_025.outputs[0], cloth_detail_normal_transform.inputs[0])
+ Shader_Preset.links.new(reroute_021.outputs[0], cloth_primary_detail_diffuse_map.inputs[0])
+ Shader_Preset.links.new(reroute_020.outputs[0], cloth_primary_detail_normal_map.inputs[0])
+ Shader_Preset.links.new(reroute_019.outputs[0], reroute_024.inputs[0])
+ Shader_Preset.links.new(reroute_030.outputs[0], suit_detail_diffuse_transform.inputs[0])
+ Shader_Preset.links.new(suit_detail_diffuse_transform.outputs[0], reroute_029.inputs[0])
+ Shader_Preset.links.new(reroute_029.outputs[0], reroute_032.inputs[0])
+ Shader_Preset.links.new(reroute_026.outputs[0], reroute_033.inputs[0])
+ Shader_Preset.links.new(suit_detail_normal_transform.outputs[0], reroute_026.inputs[0])
+ Shader_Preset.links.new(reroute_030.outputs[0], reroute_031.inputs[0])
+ Shader_Preset.links.new(reroute_031.outputs[0], suit_detail_normal_transform.inputs[0])
+ Shader_Preset.links.new(reroute_032.outputs[0], suit_primary_detail_diffuse_map.inputs[0])
+ Shader_Preset.links.new(reroute_033.outputs[0], suit_primary_detail_normal_map.inputs[0])
+ Shader_Preset.links.new(reroute_025.outputs[0], reroute_030.inputs[0])
+
+#Group Input Connections
+ Shader_Preset.links.new(group_input.outputs[0], separate_xyz_002.inputs[0])
+ Shader_Preset.links.new(group_input.outputs[1], math_021.inputs[0])
+ Shader_Preset.links.new(group_input.outputs[2], mix_072.inputs[0])
+ Shader_Preset.links.new(group_input.outputs[2], mix_072.inputs[2])
+#Group Output connections
+ Shader_Preset.links.new(mix_004.outputs[0], group_output.inputs[0])
+ Shader_Preset.links.new(mix_009.outputs[0], group_output.inputs[1])
+ Shader_Preset.links.new(mix_014.outputs[0], group_output.inputs[2])
+ Shader_Preset.links.new(mix_019.outputs[0], group_output.inputs[3])
+ Shader_Preset.links.new(mix_024.outputs[0], group_output.inputs[4])
+ Shader_Preset.links.new(mix_029.outputs[0], group_output.inputs[5])
+ Shader_Preset.links.new(mix_034.outputs[0], group_output.inputs[6])
+ Shader_Preset.links.new(mix_074.outputs[0], group_output.inputs[7])
+ Shader_Preset.links.new(mix_076.outputs[0], group_output.inputs[8])
+ Shader_Preset.links.new(mix_044.outputs[0], group_output.inputs[9])
+ Shader_Preset.links.new(mix_059.outputs[0], group_output.inputs[10])
+ Shader_Preset.links.new(mix_049.outputs[0], group_output.inputs[11])
+ Shader_Preset.links.new(mix_054.outputs[0], group_output.inputs[12])
+
+ return Shader_Preset
+
+class NODE(bpy.types.Operator):
+ bl_label = ("Generate SHADERNAMEENUM Shader Preset")
bl_idname = "node.test_operator"
def execute(self, context):
- # BIOS Change Nodegroup name dependent on name of shader ripped from API
- custom_node_name = "SHADERNAMEENUM"
+ custom_node_name = "SHADERNAMEENUM Shader Preset"
global RIP_LOCATION
- my_group = create_test_group(self, context, custom_node_name, RIP_LOCATION+"/../")
- test_node = context.view_layer.objects.active.active_material.node_tree.nodes.new('ShaderNodeGroup')
- test_node.node_tree = bpy.data.node_groups[my_group.name]
- test_node.use_custom_color = True
- test_node.color = (0.101, 0.170, 0.297)
+ GroupNode = create_Shader_Preset(self, context, custom_node_name, RIP_LOCATION)
+ shaderpreset_node = context.view_layer.objects.active.active_material.node_tree.nodes.new('ShaderNodeGroup')
+ shaderpreset_node.node_tree = bpy.data.node_groups[GroupNode.name]
+ shaderpreset_node.use_custom_color = True
+ shaderpreset_node.color = (0.101, 0.170, 0.297)
return {'FINISHED'}
-
def register():
global RIP_LOCATION
- RIP_LOCATION = os.path.abspath(bpy.context.space_data.text.filepath)
- bpy.utils.register_class(NODE_PT_MAINPANEL)
- bpy.utils.register_class(NODE_OT_TEST)
-
+ RIP_LOCATION = os.path.abspath(bpy.context.space_data.text.filepath+"/../")
+ bpy.utils.register_class(MAINPANEL)
+ bpy.utils.register_class(NODE)
def unregister():
- bpy.utils.unregister_class(NODE_PT_MAINPANEL)
- bpy.utils.unregister_class(NODE_OT_TEST)
-
+ bpy.utils.unregister_class(MAINPANEL)
+ bpy.utils.unregister_class(NODE)
if __name__ == "__main__":
register()
diff --git a/Tiger/Helpers.cs b/Tiger/Helpers.cs
index eff333a6..6cbb78f9 100644
--- a/Tiger/Helpers.cs
+++ b/Tiger/Helpers.cs
@@ -78,6 +78,24 @@ public static void DecorateSignaturesWithBufferIndex(ref InputSignature[] inputS
// however, it's impossible for there to be more semantics than the stride max
Debug.Assert(strideBound >= offset);
}
+
+ public static uint Fnv(string fnvString, bool le = false)
+ {
+ uint value = 0x811c9dc5;
+ for (var i = 0; i < fnvString.Length; i++)
+ {
+ value *= 0x01000193;
+ value ^= fnvString[i];
+ }
+ if(le)
+ {
+ byte[] littleEndianBytes = BitConverter.GetBytes(value);
+ Array.Reverse(littleEndianBytes);
+ return BitConverter.ToUInt32(littleEndianBytes, 0);
+ }
+ else
+ return value;
+ }
}
public static class NestedTypeHelpers
diff --git a/Tiger/Schema/Activity/Activity.cs b/Tiger/Schema/Activity/Activity.cs
index d4a0886f..59b2a9ef 100644
--- a/Tiger/Schema/Activity/Activity.cs
+++ b/Tiger/Schema/Activity/Activity.cs
@@ -1,5 +1,7 @@
-using Tiger.Schema.Audio;
-using Tiger.Schema.Strings;
+using System.Collections.Concurrent;
+using System.Collections.Generic;
+using System.Data;
+using Tiger.Schema.Entity;
namespace Tiger.Schema.Activity
{
@@ -9,10 +11,20 @@ public struct Bubble
public Tag MapReference;
}
+ public struct ActivityEntities
+ {
+ public string BubbleName;
+ public string ActivityPhaseName2;
+ public FileHash Hash;
+ public List DataTables;
+ public Dictionary> WorldIDs; //World ID, name/subname
+ }
+
public interface IActivity : ISchema
{
public FileHash FileHash { get; }
public IEnumerable EnumerateBubbles();
+ public IEnumerable EnumerateActivityEntities(FileHash UnkActivity = null);
}
}
@@ -44,6 +56,83 @@ private string GetBubbleNameFromBubbleIndex(int index)
{
return GlobalStrings.Get().GetString(_tag.LocationNames.TagData.BubbleNames.First(e => e.BubbleIndex == index).BubbleName);
}
+
+ public IEnumerable EnumerateActivityEntities(FileHash UnkActivity = null)
+ {
+ Tag tag = FileResourcer.Get().GetSchemaTag(UnkActivity);
+ foreach (var entry in tag.TagData.Unk50)
+ {
+ foreach (var entry2 in entry.Unk08)
+ {
+ yield return new ActivityEntities
+ {
+ BubbleName = GlobalStrings.Get().GetString(entry2.UnkName1),
+ Hash = entry2.Unk44.Hash,
+ ActivityPhaseName2 = GlobalStrings.Get().GetString(entry2.UnkName0),
+ DataTables = CollapseResourceParent(entry2.Unk44.Hash)
+ };
+ }
+ }
+ }
+
+ private List CollapseResourceParent(FileHash hash)
+ {
+ ConcurrentBag items = new();
+
+ var entry = FileResourcer.Get().GetSchemaTag(hash);
+
+ // :)))
+ foreach (var resource in entry.TagData.Unk14.TagData.Unk08)
+ {
+ foreach (var a in resource.Unk00.TagData.Unk38)
+ {
+ foreach (var table in a.Unk08)
+ {
+ if (table.Unk00 is null || table.Unk00.TagData.DataTable is null)
+ continue;
+
+ if (table.Unk00.TagData.DataTable.TagData.DataEntries.Count > 0)
+ {
+ items.Add(table.Unk00.TagData.DataTable.Hash);
+ }
+ }
+ }
+ }
+ foreach (var resource in entry.TagData.Unk14.TagData.Unk18)
+ {
+ foreach (var a in resource.Unk00.TagData.Unk38)
+ {
+ foreach (var table in a.Unk08)
+ {
+ if (table.Unk00 is null || table.Unk00.TagData.DataTable is null)
+ continue;
+
+ if (table.Unk00.TagData.DataTable.TagData.DataEntries.Count > 0)
+ {
+ items.Add(table.Unk00.TagData.DataTable.Hash);
+ }
+ }
+ }
+ }
+ foreach (var resource in entry.TagData.Unk14.TagData.Unk28)
+ {
+ foreach (var a in resource.Unk00.TagData.Unk38)
+ {
+ foreach (var table in a.Unk08)
+ {
+ if (table.Unk00 is null || table.Unk00.TagData.DataTable is null)
+ continue;
+
+ if (table.Unk00.TagData.DataTable.TagData.DataEntries.Count > 0)
+ {
+ items.Add(table.Unk00.TagData.DataTable.Hash);
+ }
+ }
+ }
+ }
+
+ return items.ToList();
+ }
}
}
@@ -73,6 +162,11 @@ public IEnumerable EnumerateBubbles()
}
}
+ public IEnumerable EnumerateActivityEntities(FileHash UnkActivity = null)
+ {
+ throw new NotSupportedException();
+ }
+
// protected override void ParseStructs()
// {
// // Getting the string container
@@ -127,5 +221,122 @@ public IEnumerable EnumerateBubbles()
}
}
}
+
+ public IEnumerable EnumerateActivityEntities(FileHash UnkActivity = null)
+ {
+ foreach (var entry in _tag.Unk50)
+ {
+ foreach (var resource in entry.Unk18)
+ {
+ yield return new ActivityEntities
+ {
+ BubbleName = GlobalStrings.Get().GetString(resource.BubbleName),
+ Hash = resource.UnkEntityReference.Hash,
+ ActivityPhaseName2 = resource.ActivityPhaseName2,
+ DataTables = CollapseResourceParent(resource.UnkEntityReference.Hash),
+ WorldIDs = GetWorldIDs(resource.UnkEntityReference.Hash)
+ };
+ }
+ }
+ }
+
+ private List CollapseResourceParent(FileHash hash)
+ {
+ ConcurrentBag items = new();
+ var entry = FileResourcer.Get().GetSchemaTag(hash);
+ var Unk18 = FileResourcer.Get().GetSchemaTag(entry.TagData.Unk18.Hash);
+
+ foreach(var resource in Unk18.TagData.EntityResources)
+ {
+ if(resource.EntityResourceParent != null)
+ {
+ var resourceValue = resource.EntityResourceParent.TagData.EntityResource.TagData.Unk18.GetValue(resource.EntityResourceParent.TagData.EntityResource.GetReader());
+ switch (resourceValue)
+ {
+ case D2Class_D8928080:
+ var tag = (D2Class_D8928080)resourceValue;
+ if (tag.Unk84 is not null)
+ {
+ if (tag.Unk84.TagData.DataEntries.Count > 0)
+ {
+ items.Add(tag.Unk84.Hash);
+ }
+ }
+ break;
+
+ case D2Class_EF8C8080:
+ var tag2 = (D2Class_EF8C8080)resourceValue;
+ if (tag2.Unk58 is not null)
+ {
+ if (tag2.Unk58.TagData.DataEntries.Count > 0)
+ {
+ items.Add(tag2.Unk58.Hash);
+ }
+ }
+ break;
+ }
+ }
+ }
+
+ return items.ToList();
+ }
+
+ private Dictionary> GetWorldIDs(FileHash hash)
+ {
+ Dictionary> items = new();
+ Dictionary strings = new();
+ var entry = FileResourcer.Get().GetSchemaTag(hash);
+ var Unk18 = FileResourcer.Get().GetSchemaTag(entry.TagData.Unk18.Hash);
+
+ foreach (var resource in Unk18.TagData.EntityResources)
+ {
+ if (resource.EntityResourceParent != null)
+ {
+ var resourceValue = resource.EntityResourceParent.TagData.EntityResource.TagData.Unk18.GetValue(resource.EntityResourceParent.TagData.EntityResource.GetReader());
+ switch (resourceValue)
+ {
+ //This is kinda dumb
+ case D2Class_95468080:
+ case D2Class_26988080:
+ case D2Class_6F418080:
+ case D2Class_EF988080:
+ case D2Class_F88C8080:
+ case D2Class_FA988080:
+ if (resource.EntityResourceParent.TagData.EntityResource.TagData.UnkHash80 != null)
+ {
+ var unk80 = FileResourcer.Get().GetSchemaTag(resource.EntityResourceParent.TagData.EntityResource.TagData.UnkHash80.Hash);
+ foreach (var a in unk80.TagData.Unk08)
+ {
+ if (a.Unk00.Value.Name.Value is not null)
+ {
+ strings.TryAdd(Helpers.Fnv(a.Unk00.Value.Name.Value), a.Unk00.Value.Name.Value);
+ }
+ }
+ foreach (var worldid in resourceValue.Unk58)
+ {
+ if (strings.ContainsKey(worldid.FNVHash.Hash32) && strings.Any(kv => kv.Key == worldid.FNVHash.Hash32))
+ {
+ Dictionary name = new();
+ if (strings.ContainsKey(resourceValue.FNVHash.Hash32))
+ {
+ name.TryAdd(strings[worldid.FNVHash.Hash32], strings[resourceValue.FNVHash.Hash32]);
+ items.TryAdd(worldid.WorldID, name);
+ }
+ else
+ {
+ name.TryAdd(strings[worldid.FNVHash.Hash32], "");
+ items.TryAdd(worldid.WorldID, name);
+ }
+ }
+ }
+ }
+ break;
+ default:
+ break;
+ }
+ }
+ }
+ return items;
+ }
}
}
diff --git a/Tiger/Schema/Activity/ActivityStructsSK.cs b/Tiger/Schema/Activity/ActivityStructsSK.cs
index e01b8c87..b8ad57a8 100644
--- a/Tiger/Schema/Activity/ActivityStructsSK.cs
+++ b/Tiger/Schema/Activity/ActivityStructsSK.cs
@@ -74,12 +74,13 @@ public struct SUnkActivity_SK
public TigerHash Unk20;
public TigerHash Unk24;
public LocalizedStrings LocalizedStrings;
- // [SchemaField(0x30)]
- // public StringPointer ActivityDevName;
+ [SchemaField(0x30)]
+ public StringPointer ActivityDevName;
// public Tag Unk38; // 80978080
- // [SchemaField(0x40)]
- // public DynamicArray Unk40;
- // public DynamicArray Unk50;
+ //[SchemaField(0x40)]
+ //public DynamicArray Unk40;
+ [SchemaField(0x50)]
+ public DynamicArray Unk50;
// [SchemaField(0x78)]
// public Tag Unk78;
// [SchemaField(0x80)]
@@ -112,7 +113,7 @@ public struct S4F928080
public uint Unk20;
[SchemaField(0x40)]
public StringHash UnkName1;
- public Tag Unk44;
+ public Tag Unk44;
public uint Unk48;
}
@@ -131,17 +132,42 @@ public struct S5E928080
public long FileSize;
public DynamicArray Unk08;
public DynamicArray Unk18;
- public DynamicArray Unk28; // there's probably another one here
+ public DynamicArray Unk28; //This sometimes crashes for some reason...?
}
-[SchemaStruct(TigerStrategy.DESTINY2_SHADOWKEEP_2601, "6098080", 0x04)]
+[SchemaStruct(TigerStrategy.DESTINY2_SHADOWKEEP_2601, "60928080", 0x4)]
public struct S60928080
{
public Tag Unk00;
}
-[SchemaStruct(TigerStrategy.DESTINY2_SHADOWKEEP_2601, "6098080", 0x04)]
+[SchemaStruct(TigerStrategy.DESTINY2_SHADOWKEEP_2601, "62948080", 0x58)]
public struct S62948080
{
- public Tag Unk00;
+ public long FileSize;
+ public TigerHash Unk08; //BubbleName?
+ public TigerHash Unk0C; //ActivityPhaseName?
+
+ [SchemaField(0x38)]
+ public DynamicArray Unk38;
+}
+
+[SchemaStruct(TigerStrategy.DESTINY2_SHADOWKEEP_2601, "64948080", 0x1C)]
+public struct S64948080
+{
+ [SchemaField(0x8)]
+ public DynamicArray Unk08;
+}
+
+[SchemaStruct(TigerStrategy.DESTINY2_SHADOWKEEP_2601, "66948080", 0x4)]
+public struct S66948080
+{
+ public Tag Unk00;
+}
+
+[SchemaStruct(TigerStrategy.DESTINY2_SHADOWKEEP_2601, "68948080", 0x20)]
+public struct S68948080
+{
+ public long FileSize;
+ public Tag DataTable;
}
diff --git a/Tiger/Schema/Activity/ActivityStructsWQ.cs b/Tiger/Schema/Activity/ActivityStructsWQ.cs
index 4b527e7e..edc7a48d 100644
--- a/Tiger/Schema/Activity/ActivityStructsWQ.cs
+++ b/Tiger/Schema/Activity/ActivityStructsWQ.cs
@@ -1,10 +1,12 @@
using Tiger.Schema.Audio;
+using Tiger.Schema.Entity;
using Tiger.Schema.Strings;
namespace Tiger.Schema.Activity.DESTINY2_WITCHQUEEN_6307;
[SchemaStruct(TigerStrategy.DESTINY2_BEYONDLIGHT_3402, "8E8E8080", 0xB4)]
[SchemaStruct(TigerStrategy.DESTINY2_WITCHQUEEN_6307, "8E8E8080", 0x78)]
+[SchemaStruct(TigerStrategy.DESTINY2_LATEST, "8E8E8080", 0x88)]
public struct SActivity_WQ
{
public long FileSize;
@@ -23,9 +25,15 @@ public struct SActivity_WQ
[SchemaField(0x40, TigerStrategy.DESTINY2_WITCHQUEEN_6307)]
public DynamicArray Unk40;
public DynamicArray Unk50;
+ [SchemaField(0x90, TigerStrategy.DESTINY2_BEYONDLIGHT_3402)]
+ [SchemaField(0x60, TigerStrategy.DESTINY2_WITCHQUEEN_6307)]
+ [SchemaField(0x70, TigerStrategy.DESTINY2_LATEST)]
public TigerHash Unk60;
public FileHash Unk64; // an entity thing
- // public FileHash64 UnkActivity68; // todo this uses an unknown hash64 system in the package
+ //[SchemaField(0xA0, TigerStrategy.DESTINY2_BEYONDLIGHT_3402)]
+ //[SchemaField(0x68, TigerStrategy.DESTINY2_WITCHQUEEN_6307)]
+ //[SchemaField(0x78, TigerStrategy.DESTINY2_LATEST)]
+ //public FileHash64 UnkActivity68; // todo this uses an unknown hash64 system in the package
}
[SchemaStruct(TigerStrategy.DESTINY2_BEYONDLIGHT_3402, "8B8E8080", 0xD0)]
@@ -108,7 +116,7 @@ public struct D2Class_48898080
public StringPointer DevBubbleName;
public TigerHash LocationName;
public TigerHash ActivityName;
- public TigerHash BubbleName;
+ public StringHash BubbleName;
public TigerHash ActivityPhaseName;
public TigerHash ActivityPhaseName2;
public Tag UnkEntityReference;
@@ -120,7 +128,8 @@ public struct D2Class_898E8080
public long FileSize;
public long Unk08;
public ResourcePointer Unk10; // 46938080 has dialogue table, 45938080 unk, 19978080 unk
- public Tag Unk14; // D2Class_898E8080 entity script stuff
+ [SchemaField(0x18)]
+ public Tag Unk18; // D2Class_898E8080 entity script stuff
}
[SchemaStruct("46938080", 0x58)]
@@ -191,15 +200,63 @@ public struct D2Class_C39F8080
public Tag DirectiveTable;
}
-[SchemaStruct("18978080", 0x20)]
-public struct D2Class_18978080
+[SchemaStruct(TigerStrategy.DESTINY2_BEYONDLIGHT_3402, "18978080", 0x80)]
+[SchemaStruct(TigerStrategy.DESTINY2_WITCHQUEEN_6307, "18978080", 0x20)]
+public struct D2Class_18978080 //uhh
{
- [Tag64]
+ [SchemaField(TigerStrategy.DESTINY2_BEYONDLIGHT_3402, Obsolete = true)]
+ [Tag64, SchemaField(TigerStrategy.DESTINY2_WITCHQUEEN_6307)]
public Tag DialogueTable;
+
+ [SchemaField(TigerStrategy.DESTINY2_BEYONDLIGHT_3402, Obsolete = true)]
+ [SchemaField(TigerStrategy.DESTINY2_WITCHQUEEN_6307)]
public TigerHash Unk10;
- [SchemaField(0x18)]
+
+ [SchemaField(TigerStrategy.DESTINY2_BEYONDLIGHT_3402, Obsolete = true)]
+ [SchemaField(0x18, TigerStrategy.DESTINY2_WITCHQUEEN_6307)]
public TigerHash Unk18;
+
+ [SchemaField(TigerStrategy.DESTINY2_BEYONDLIGHT_3402, Obsolete = true)]
+ [SchemaField(TigerStrategy.DESTINY2_WITCHQUEEN_6307)]
public int Unk1C;
+
+ //Beyond Light only below
+
+ [SchemaField(TigerStrategy.DESTINY2_BEYONDLIGHT_3402)]
+ [SchemaField(TigerStrategy.DESTINY2_WITCHQUEEN_6307, Obsolete = true)]
+ public int Unk00BL;
+
+ [SchemaField(TigerStrategy.DESTINY2_BEYONDLIGHT_3402)]
+ [SchemaField(TigerStrategy.DESTINY2_WITCHQUEEN_6307, Obsolete = true)]
+ public TigerHash Unk04BL;
+
+ [SchemaField(TigerStrategy.DESTINY2_BEYONDLIGHT_3402)]
+ [SchemaField(TigerStrategy.DESTINY2_WITCHQUEEN_6307, Obsolete = true)]
+ public TigerHash Unk08BL;
+
+ [SchemaField(TigerStrategy.DESTINY2_BEYONDLIGHT_3402)]
+ [SchemaField(TigerStrategy.DESTINY2_WITCHQUEEN_6307, Obsolete = true)]
+ public TigerHash Unk0CBL;
+
+ [SchemaField(TigerStrategy.DESTINY2_BEYONDLIGHT_3402)]
+ [SchemaField(TigerStrategy.DESTINY2_WITCHQUEEN_6307, Obsolete = true)]
+ public TigerHash Unk10BL;
+
+ [Tag64, SchemaField(0x28, TigerStrategy.DESTINY2_BEYONDLIGHT_3402)]
+ [SchemaField(TigerStrategy.DESTINY2_WITCHQUEEN_6307, Obsolete = true)]
+ public Tag Unk28BL;
+
+ [SchemaField(TigerStrategy.DESTINY2_BEYONDLIGHT_3402)]
+ [SchemaField(TigerStrategy.DESTINY2_WITCHQUEEN_6307, Obsolete = true)]
+ public DynamicArray Unk38BL;
+
+ [Tag64, SchemaField(0x50, TigerStrategy.DESTINY2_BEYONDLIGHT_3402)]
+ [SchemaField(TigerStrategy.DESTINY2_WITCHQUEEN_6307, Obsolete = true)]
+ public Tag Unk50BL;
+
+ [Tag64, SchemaField(0x68, TigerStrategy.DESTINY2_BEYONDLIGHT_3402)]
+ [SchemaField(TigerStrategy.DESTINY2_WITCHQUEEN_6307, Obsolete = true)]
+ public Tag Unk68BL;
}
[SchemaStruct("17978080", 0x20)]
@@ -562,4 +619,26 @@ public struct SUnkMusicE8BF8080
public TigerHash Unk24;
}
+[SchemaStruct("BE8E8080", 0x20)]
+public struct D2Class_BE8E8080
+{
+ public long FileSize;
+ public DynamicArray EntityResources;
+}
+
+[SchemaStruct("42898080", 0x4)]
+public struct D2Class_42898080
+{
+ public Tag EntityResourceParent;
+}
+
+[SchemaStruct("43898080", 0x28)]
+public struct D2Class_43898080
+{
+ public long FileSize;
+ public TigerHash Unk08;
+ [SchemaField(0x20)]
+ public EntityResource EntityResource;
+}
+
#endregion
diff --git a/Tiger/Schema/Entity/Entity.cs b/Tiger/Schema/Entity/Entity.cs
index ddfd7aa0..6fcf5829 100644
--- a/Tiger/Schema/Entity/Entity.cs
+++ b/Tiger/Schema/Entity/Entity.cs
@@ -120,4 +120,47 @@ public bool HasGeometry()
}
return Model != null;
}
+
+ public List GetEntityChildren()
+ {
+ lock (_lock)
+ {
+ if (!_loaded)
+ {
+ Load();
+ }
+ }
+
+ List entities = new List();
+ foreach (var resource in _tag.EntityResources.Select(GetReader(), r => r.Resource))
+ {
+ //Weird to have to get Unk10 first to be able to get Unk18
+ //Trying to get Unk18 directly just crashes
+ switch (resource.TagData.Unk10.GetValue(resource.GetReader()))
+ {
+ case D2Class_12848080:
+ foreach (var entry in ((D2Class_0E848080)resource.TagData.Unk18.GetValue(resource.GetReader())).Unk88)
+ {
+ foreach (var entry2 in entry.Unk08)
+ {
+ if (entry2.Unk08 is null)
+ continue;
+
+ Entity entity = FileResourcer.Get().GetFile(entry2.Unk08.Hash);
+ if(entity.HasGeometry())
+ {
+ entities.Add(entity);
+ //Just in case
+ foreach (var child in entity.GetEntityChildren())
+ {
+ entities.Add(child);
+ }
+ }
+ }
+ }
+ break;
+ }
+ }
+ return entities;
+ }
}
diff --git a/Tiger/Schema/Entity/EntityModel.cs b/Tiger/Schema/Entity/EntityModel.cs
index d19f55d9..aea00ccd 100644
--- a/Tiger/Schema/Entity/EntityModel.cs
+++ b/Tiger/Schema/Entity/EntityModel.cs
@@ -101,6 +101,12 @@ private List GenerateParts(Dictionary materials = new();
- if (Strategy.CurrentStrategy >= TigerStrategy.DESTINY2_WITCHQUEEN_6307)
+
+ var map = ((D2Class_8F6D8080)parentResource.TagData.Unk18.GetValue(reader)).ExternalMaterialsMap;
+ var mats = ((D2Class_8F6D8080)parentResource.TagData.Unk18.GetValue(reader)).ExternalMaterials;
+ if (map.Count == 0 || mats.Count == 0)
{
- var map = ((D2Class_8F6D8080)parentResource.TagData.Unk18.GetValue(reader)).ExternalMaterialsMapWQ;
- var mats = ((D2Class_8F6D8080)parentResource.TagData.Unk18.GetValue(reader)).ExternalMaterials;
- if (map.Count == 0 || mats.Count == 0)
- {
- return null;
- }
- if (externalMaterialIndex >= map.Count)
- return null; // todo this is actually wrong ig...
-
- var mapEntry = map[reader, externalMaterialIndex];
- // For now we'll just set as the first material in the array
- for (int i = mapEntry.MaterialStartIndex; i < mapEntry.MaterialStartIndex + mapEntry.MaterialCount; i++)
- {
- materials.Add(mats[reader, i].Material);
- }
- }
- else
- {
- return null; // todo shadowkeep
+ return null;
}
+ if (variantShaderIndex >= map.Count)
+ return null; // todo this is actually wrong ig...s
+
+ var mapEntry = map[reader, variantShaderIndex];
- return materials[0];
+ return mats[reader, mapEntry.MaterialStartIndex + (0 % mapEntry.MaterialCount)].Material;
}
public static void AddVertexColourSlotInfo(DynamicMeshPart dynamicPart, short w)
diff --git a/Tiger/Schema/Entity/EntityStructs.cs b/Tiger/Schema/Entity/EntityStructs.cs
index b9509c37..1602ead7 100644
--- a/Tiger/Schema/Entity/EntityStructs.cs
+++ b/Tiger/Schema/Entity/EntityStructs.cs
@@ -118,7 +118,8 @@ public struct D2Class_6E908080
* could be these external materials are dynamic themselves - we'll extract them all but select the first
*/
[SchemaStruct(TigerStrategy.DESTINY2_SHADOWKEEP_2601, "BD728080", 0x340)]
-[SchemaStruct(TigerStrategy.DESTINY2_BEYONDLIGHT_3402, "8F6D8080", 0x450)]
+[SchemaStruct(TigerStrategy.DESTINY2_BEYONDLIGHT_3402, "8F6D8080", 0x3E0)]
+[SchemaStruct(TigerStrategy.DESTINY2_WITCHQUEEN_6307, "8F6D8080", 0x450)]
public struct D2Class_8F6D8080
{
[SchemaField(0x1DC, TigerStrategy.DESTINY2_SHADOWKEEP_2601)]
@@ -126,14 +127,16 @@ public struct D2Class_8F6D8080
public EntityModel Model;
[SchemaField(0x310, TigerStrategy.DESTINY2_WITCHQUEEN_6307)] // todo shadowkeep, beyond light
public Tag TexturePlates;
- // todo there might be a nice way to combine these two and namespace the struct, and instead use properties not fields? would mean all the mess is in the data side not the logic, basically mapping one onto the other. Possible to make it so everything maps onto the latest given, so it only needs to be done for older versions.
- [SchemaField(0x300, TigerStrategy.DESTINY2_SHADOWKEEP_2601)]
- [SchemaField(0x398, TigerStrategy.DESTINY2_BEYONDLIGHT_3402)]
- [SchemaField(TigerStrategy.DESTINY2_WITCHQUEEN_6307, Obsolete = true)]
- public DynamicArrayUnloaded ExternalMaterialsMapSK;
+ [SchemaField(0x2D0, TigerStrategy.DESTINY2_SHADOWKEEP_2601)]
+ [SchemaField(0x360, TigerStrategy.DESTINY2_BEYONDLIGHT_3402)]
[SchemaField(0x3C0, TigerStrategy.DESTINY2_WITCHQUEEN_6307)]
- public DynamicArrayUnloaded ExternalMaterialsMapWQ;
+ public DynamicArrayUnloaded ExternalMaterialsMap;
+
+ [SchemaField(0x300, TigerStrategy.DESTINY2_SHADOWKEEP_2601)]
+ [SchemaField(0x398, TigerStrategy.DESTINY2_BEYONDLIGHT_3402)]
+ [SchemaField(0x3F0, TigerStrategy.DESTINY2_WITCHQUEEN_6307)]
+ public DynamicArrayUnloaded Unk3F0;
[SchemaField(0x310, TigerStrategy.DESTINY2_SHADOWKEEP_2601)]
[SchemaField(0x3A0, TigerStrategy.DESTINY2_BEYONDLIGHT_3402)]
@@ -246,16 +249,17 @@ public struct D2Class_939E8080
[SchemaStruct(TigerStrategy.DESTINY2_SHADOWKEEP_2601, "C5728080", 0x8)]
[SchemaStruct(TigerStrategy.DESTINY2_BEYONDLIGHT_3402, "986D8080", 0x8)]
-public struct SExternalMaterialMapEntrySK
+public struct D2Class_986D8080
{
- public ushort MaterialCount;
- public ushort MaterialStartIndex;
- public ushort Unk04; // maybe some kind of LOD or dynamic marker
+ public ushort Unk00;
+ public ushort Unk02;
+ public ushort Unk04;
public ushort Unk06;
}
-[SchemaStruct(TigerStrategy.DESTINY2_WITCHQUEEN_6307, "976D8080", 0xC)]
-public struct SExternalMaterialMapEntryWQ
+[SchemaStruct(TigerStrategy.DESTINY2_SHADOWKEEP_2601, "C4728080", 0xC)]
+[SchemaStruct(TigerStrategy.DESTINY2_BEYONDLIGHT_3402, "976D8080", 0xC)]
+public struct SExternalMaterialMapEntry
{
public int MaterialCount;
public int MaterialStartIndex;
@@ -322,7 +326,7 @@ public struct D2Class_DC818080
}
[SchemaStruct(TigerStrategy.DESTINY2_SHADOWKEEP_2601, "759F8080", 0x20)]
-[SchemaStruct(TigerStrategy.DESTINY2_WITCHQUEEN_6307, "4F9F8080", 0x20)]
+[SchemaStruct(TigerStrategy.DESTINY2_BEYONDLIGHT_3402, "4F9F8080", 0x20)]
public struct D2Class_4F9F8080
{
public Tiger.Schema.Vector4 Rotation;
@@ -817,6 +821,7 @@ public struct D2Class_1D848080
{
public int Unk00;
public int Unk04;
+ [Tag64]
public Tag Unk08;
public int Unk0C;
public int Unk10;
@@ -1223,6 +1228,9 @@ public struct D2Class_F62C8080
[SchemaStruct(TigerStrategy.DESTINY2_LATEST, "F42C8080", 0x358)]
public struct D2Class_F42C8080
{
+ [SchemaField(0x188, TigerStrategy.DESTINY2_LATEST)]
+ public ResourcePointer Unk188;
+
[SchemaField(0x2C8, TigerStrategy.DESTINY2_WITCHQUEEN_6307)]
[SchemaField(0x2E8, TigerStrategy.DESTINY2_LATEST)]
public DynamicArray PatternAudioGroups;
@@ -1284,6 +1292,9 @@ public struct D2Class_FA2C8080
//[SchemaField(0x1A8)]
//public int Unk1A8;
//public float Unk1AC;
+ [SchemaField(0x118, TigerStrategy.DESTINY2_LATEST)]
+ public ResourcePointer Unk118;
+
[SchemaField(0x1C0, TigerStrategy.DESTINY2_WITCHQUEEN_6307), Tag64]
[SchemaField(0x1D0, TigerStrategy.DESTINY2_LATEST), Tag64]
public Tag Unk1C0;
@@ -1363,33 +1374,166 @@ public struct D2Class_E3918080
{
}
+[SchemaStruct("0A2D8080", 0x4C)]
+public struct D2Class_0A2D8080
+{
+ [SchemaField(0x8), Tag64]
+ public Entity? Unk08;
+ [SchemaField(0x20), Tag64]
+ public Entity? Unk20;
+ [SchemaField(0x38), Tag64]
+ public Entity? Unk38;
+}
+
#endregion
-[SchemaStruct(TigerStrategy.DESTINY2_SHADOWKEEP_2999, "7F6B8080", 0x1C0)]
-[SchemaStruct(TigerStrategy.DESTINY2_WITCHQUEEN_6307, "95668080", 0x1E0)]
+[SchemaStruct(TigerStrategy.DESTINY2_SHADOWKEEP_2601, "7F6B8080", 0x1C0)]
+[SchemaStruct(TigerStrategy.DESTINY2_BEYONDLIGHT_3402, "95668080", 0x1E0)]
public struct CubemapResource //Dataresource for cubemaps
{
[SchemaField(0x20)]
public Vector4 CubemapSize; //XYZ, no W
public Vector4 CubemapPosition; //Cubemap texture lines up with this one
- [SchemaField(0xF0, TigerStrategy.DESTINY2_WITCHQUEEN_6307)]
+ [SchemaField(0xF0, TigerStrategy.DESTINY2_BEYONDLIGHT_3402)]
public Vector4 UnkF0; //This might actually be position? Similar to other but in GDC image this one looked more correct
- [SchemaField(0x140, TigerStrategy.DESTINY2_SHADOWKEEP_2999)]
- [SchemaField(0x100, TigerStrategy.DESTINY2_WITCHQUEEN_6307)]
+ [SchemaField(0x140, TigerStrategy.DESTINY2_SHADOWKEEP_2601)]
+ [SchemaField(0x100, TigerStrategy.DESTINY2_BEYONDLIGHT_3402)]
public Vector4 CubemapRotation;
- [SchemaField(0x190, TigerStrategy.DESTINY2_SHADOWKEEP_2999)]
- [SchemaField(0x1B0, TigerStrategy.DESTINY2_WITCHQUEEN_6307)]
+ [SchemaField(0x190, TigerStrategy.DESTINY2_SHADOWKEEP_2601)]
+ [SchemaField(0x1B0, TigerStrategy.DESTINY2_BEYONDLIGHT_3402)]
public StringPointer CubemapName;
- [SchemaField(0x198, TigerStrategy.DESTINY2_SHADOWKEEP_2999)]
- [SchemaField(0x1B8, TigerStrategy.DESTINY2_WITCHQUEEN_6307)]
+ [SchemaField(0x198, TigerStrategy.DESTINY2_SHADOWKEEP_2601)]
+ [SchemaField(0x1B8, TigerStrategy.DESTINY2_BEYONDLIGHT_3402)]
public Texture CubemapTexture;
- [SchemaField(0x1A0, TigerStrategy.DESTINY2_SHADOWKEEP_2999)]
- [SchemaField(0x1C0, TigerStrategy.DESTINY2_WITCHQUEEN_6307)]
+ [SchemaField(0x1A0, TigerStrategy.DESTINY2_SHADOWKEEP_2601)]
+ [SchemaField(0x1C0, TigerStrategy.DESTINY2_BEYONDLIGHT_3402)]
public Texture Unk1C0; //Sometype of reflection tint texture idk
}
+
+[SchemaStruct(TigerStrategy.DESTINY2_SHADOWKEEP_2601, "D99B8080", 0x190)]
+[SchemaStruct(TigerStrategy.DESTINY2_BEYONDLIGHT_3402, "D8928080", 0x190)]
+public struct D2Class_D8928080
+{
+ //[DestinyOffset(0x10)]
+ //public DestinyHash Unk10;
+ //public DestinyHash Unk14;
+ //public DestinyHash Unk18;
+ //public DestinyHash Unk1C;
+ //public DestinyHash Unk20;
+ //public DestinyHash Unk24;
+ //[SchemaField(0x68)]
+ //public DynamicArray Unk68;
+ [SchemaField(0x84)]
+ public Tag Unk84;
+ [SchemaField(0x90)]
+ public Vector4 Rotation;
+ public Vector4 Translation;
+}
+
+[SchemaStruct(TigerStrategy.DESTINY2_BEYONDLIGHT_3402, "EF8C8080", 0x60)]
+public struct D2Class_EF8C8080
+{
+ [SchemaField(0x58)]
+ public Tag Unk58;
+}
+
+[SchemaStruct(TigerStrategy.DESTINY2_BEYONDLIGHT_3402, "FA988080", 0x80)]
+public struct D2Class_FA988080
+{
+ [SchemaField(0x28)]
+ public TigerHash FNVHash;
+ [SchemaField(0x30)]
+ public ulong WorldID;
+ [SchemaField(0x58)]
+ public DynamicArray Unk58;
+}
+
+[SchemaStruct(TigerStrategy.DESTINY2_BEYONDLIGHT_3402, "F88C8080", 0x80)]
+public struct D2Class_F88C8080
+{
+ [SchemaField(0x28)]
+ public TigerHash FNVHash;
+ [SchemaField(0x30)]
+ public ulong WorldID;
+ [SchemaField(0x58)]
+ public DynamicArray Unk58;
+}
+
+[SchemaStruct(TigerStrategy.DESTINY2_BEYONDLIGHT_3402, "EF988080", 0x80)]
+public struct D2Class_EF988080
+{
+ [SchemaField(0x28)]
+ public TigerHash FNVHash;
+ [SchemaField(0x30)]
+ public ulong WorldID;
+ [SchemaField(0x58)]
+ public DynamicArray Unk58;
+}
+
+[SchemaStruct(TigerStrategy.DESTINY2_BEYONDLIGHT_3402, "6F418080", 0xE0)]
+public struct D2Class_6F418080
+{
+ [SchemaField(0x28)]
+ public TigerHash FNVHash;
+ [SchemaField(0x30)]
+ public ulong WorldID;
+ [SchemaField(0x58)]
+ public DynamicArray Unk58;
+}
+
+[SchemaStruct(TigerStrategy.DESTINY2_BEYONDLIGHT_3402, "26988080", 0x98)]
+public struct D2Class_26988080
+{
+ [SchemaField(0x28)]
+ public TigerHash FNVHash;
+ [SchemaField(0x30)]
+ public ulong WorldID;
+ [SchemaField(0x58)]
+ public DynamicArray Unk58;
+}
+
+[SchemaStruct(TigerStrategy.DESTINY2_BEYONDLIGHT_3402, "95468080", 0x90)]
+public struct D2Class_95468080
+{
+ [SchemaField(0x28)]
+ public TigerHash FNVHash;
+ [SchemaField(0x30)]
+ public ulong WorldID;
+ [SchemaField(0x58)]
+ public DynamicArray Unk58;
+}
+
+[SchemaStruct(TigerStrategy.DESTINY2_BEYONDLIGHT_3402, "05998080", 0x10)]
+public struct D2Class_05998080
+{
+ public TigerHash FNVHash;
+ [SchemaField(0x8)]
+ public ulong WorldID;
+}
+
+[SchemaStruct(TigerStrategy.DESTINY2_BEYONDLIGHT_3402, "6B908080", 0x28)]
+public struct D2Class_6B908080
+{
+ [SchemaField(0x8)]
+ public DynamicArray Unk08;
+}
+
+[SchemaStruct(TigerStrategy.DESTINY2_BEYONDLIGHT_3402, "029D8080", 0x10)]
+public struct D2Class_029D8080
+{
+ public ResourceInTablePointer Unk00;
+ public RelativePointer Unk08;
+}
+
+[SchemaStruct(TigerStrategy.DESTINY2_BEYONDLIGHT_3402, "4D898080", 0xC)]
+public struct D2Class_4D898080
+{
+ public StringPointer Name;
+}
+
diff --git a/Tiger/Schema/Investment/InvestmentHandler.cs b/Tiger/Schema/Investment/InvestmentHandler.cs
index 326f86f8..35cd649e 100644
--- a/Tiger/Schema/Investment/InvestmentHandler.cs
+++ b/Tiger/Schema/Investment/InvestmentHandler.cs
@@ -342,7 +342,7 @@ private Entity.Entity GetEntityFromAssignmentHash(TigerHash assignmentHash)
// var index = _entityAssignmentsMap.TagData.EntityArrangementMap.BinarySearch(x, new D2Class_454F8080());
Tag tag = _sortedArrangementHashmap[assignmentHash];
tag.Load();
- if (tag.TagData.EntityData is null)
+ if (tag.TagData.EntityData.IsInvalid() || tag.TagData.EntityData is null)
return null;
// if entity
if (tag.TagData.EntityData.GetReferenceHash() == 0x80809ad8)
diff --git a/Tiger/Schema/Model/VertexBuffer.cs b/Tiger/Schema/Model/VertexBuffer.cs
index a6c07e13..c67b8341 100644
--- a/Tiger/Schema/Model/VertexBuffer.cs
+++ b/Tiger/Schema/Model/VertexBuffer.cs
@@ -338,7 +338,9 @@ private bool ReadVertexDataType5(TigerReader handle, MeshPart part)
// it can be longer here, its not broken i think
if (handle.BaseStream.Length <= handle.BaseStream.Position)
{
- part.VertexColours.Add(new Vector4(0, 0, 0, 0));
+ handle.BaseStream.Position = handle.BaseStream.Length-4;
+ part.VertexColours.Add(new Vector4(handle.ReadByte(), handle.ReadByte(), handle.ReadByte(),
+ handle.ReadByte()));
}
else
{
@@ -381,7 +383,7 @@ private bool ReadVertexDataType6(TigerReader handle, DynamicMeshPart dynamicPart
*/
// new code vvv
- VertexWeight vw = new();
+ VertexWeight vw = new VertexWeight();
short w = (short)dynamicPart.VertexPositions[dynamicPart.VertexIndexMap[vertexIndex]].W;
if (w >= 0 && w < 0x800)
{
@@ -399,7 +401,7 @@ private bool ReadVertexDataType6(TigerReader handle, DynamicMeshPart dynamicPart
}
else
{
- chunkIndex = w - 0x800; // remove the flag
+ chunkIndex = w - 0x800; // remove the flag
weightCount = 2;
}
@@ -415,17 +417,25 @@ private bool ReadVertexDataType6(TigerReader handle, DynamicMeshPart dynamicPart
}
else
{
+ // always the first two weights valid then the second group can be one or two
handle.BaseStream.Seek(chunkIndex * 0x20 + (vertexIndex % 4) * 8, SeekOrigin.Begin);
- vw.WeightValues = new IntVector4(handle.ReadByte(), handle.ReadByte(), handle.ReadByte(),
- handle.ReadByte());
- if (vw.WeightValues.X + vw.WeightValues.Y + vw.WeightValues.Z == 255)
+ vw.WeightIndices = new IntVector4(handle.ReadByte(), handle.ReadByte(), 0, 0);
+ vw.WeightValues = new IntVector4(handle.ReadByte(), handle.ReadByte(), 0, 0);
+ // if (vw.WeightValues.X + vw.WeightValues.Y + vw.WeightValues.Z == 255)
+ // {
+ // vw.WeightValues.W = 0;
+ // }
+ vw.WeightIndices.Z = handle.ReadByte();
+ vw.WeightIndices.W = handle.ReadByte();
+ vw.WeightValues.Z = handle.ReadByte();
+ if (vw.WeightIndices.Z == vw.WeightIndices.W)
{
- vw.WeightValues.W = 0;
+ vw.WeightIndices.W = 0;
+ }
+ else
+ {
+ vw.WeightValues.W = handle.ReadByte();
}
-
- vw.WeightIndices = new IntVector4(handle.ReadByte(), handle.ReadByte(), handle.ReadByte(),
- handle.ReadByte());
- // Debug.Assert(vw.WeightValues.X + vw.WeightValues.Y + vw.WeightValues.Z + vw.WeightValues.W == 255);
dynamicPart.VertexWeights.Add(vw);
}
@@ -438,32 +448,42 @@ private bool ReadVertexDataType6(TigerReader handle, DynamicMeshPart dynamicPart
}
public void ReadVertexDataSignatures(MeshPart part, HashSet uniqueVertexIndices,
- List inputSignatures)
+ List inputSignatures, bool isTerrain = false)
{
using var reader = GetReferenceReader();
foreach (uint vertexIndex in uniqueVertexIndices)
{
- ReadVertexDataSignature(reader, part, vertexIndex, inputSignatures);
+ ReadVertexDataSignature(reader, part, vertexIndex, inputSignatures, isTerrain);
}
}
private void ReadVertexDataSignature(TigerReader reader, MeshPart part, uint vertexIndex,
- List inputSignatures)
+ List inputSignatures, bool isTerrain = false)
{
reader.Seek(vertexIndex * _tag.Stride, SeekOrigin.Begin);
+
foreach (InputSignature inputSignature in inputSignatures)
{
switch (inputSignature.Semantic)
{
case InputSemantic.Position:
- part.VertexPositions.Add(new Vector4(reader.ReadInt16(), reader.ReadInt16(), reader.ReadInt16(),
- reader.ReadInt16(), true));
+ if(isTerrain) //has to be a float
+ {
+ part.VertexPositions.Add(new Vector4((float)reader.ReadInt16(), (float)reader.ReadInt16(), (float)reader.ReadInt16(),
+ (float)reader.ReadInt16()));
+ }
+ else
+ part.VertexPositions.Add(new Vector4(reader.ReadInt16(), reader.ReadInt16(), reader.ReadInt16(),
+ reader.ReadInt16()));
break;
case InputSemantic.Texcoord:
switch (inputSignature.Mask)
{
case ComponentMask.XY:
- part.VertexTexcoords0.Add(new Vector2(reader.ReadInt16(), reader.ReadInt16()));
+ if(isTerrain)
+ part.VertexTexcoords0.Add(new Vector2(reader.ReadHalf(), reader.ReadHalf()));
+ else
+ part.VertexTexcoords0.Add(new Vector2(reader.ReadInt16(), reader.ReadInt16()));
break;
case ComponentMask.XYZW:
part.VertexTexcoords0.Add(new Vector2(reader.ReadInt16(), reader.ReadInt16()));
@@ -515,6 +535,17 @@ private void ReadVertexDataSignature(TigerReader reader, MeshPart part, uint ver
part.VertexColours.Add(new Vector4(reader.ReadByte(), reader.ReadByte(), reader.ReadByte(),
reader.ReadByte()));
break;
+ case InputSemantic.BlendIndices:
+ //Indices get set in BlendWeight
+ break;
+ case InputSemantic.BlendWeight:
+ //VertexWeight vw = new()
+ //{
+ // WeightIndices = new IntVector4(reader.ReadByte(), reader.ReadByte(), reader.ReadByte(), reader.ReadByte()),
+ // WeightValues = new IntVector4(reader.ReadByte(), reader.ReadByte(), reader.ReadByte(), reader.ReadByte()),
+ //};
+ //(part as DynamicMeshPart).VertexWeights.Add(vw);
+ break;
default:
throw new NotImplementedException();
}
diff --git a/Tiger/Schema/Shaders/DirectXTexUtil.cs b/Tiger/Schema/Shaders/DirectXTexUtil.cs
index b1a83307..143749c1 100644
--- a/Tiger/Schema/Shaders/DirectXTexUtil.cs
+++ b/Tiger/Schema/Shaders/DirectXTexUtil.cs
@@ -906,19 +906,19 @@ public static byte[] EncodeDDSHeader(DDSHeader header, DX10Header dx10Header)
/// Compression Format
/// Whether or not this is a cube map
/// Resulting TexMetaData Object
- public static TexMetadata GenerateMetaData(int width, int height, int mipMapLevels, DXGIFormat format, bool isCubeMap)
+ public static TexMetadata GenerateMetaData(int width, int height, int depth, int mipMapLevels, DXGIFormat format, bool isCubeMap)
{
// Create Texture MetaData
return new TexMetadata(
width,
height,
- 1,
+ depth,
isCubeMap ? 6 : 1,
mipMapLevels,
isCubeMap ? TexMiscFlags.TEXTURECUBE : 0,
0,
format,
- TexDimension.TEXTURE2D
+ depth == 1 ? TexDimension.TEXTURE2D : TexDimension.TEXTURE3D
);
}
diff --git a/Tiger/Schema/Shaders/Material.cs b/Tiger/Schema/Shaders/Material.cs
index 7d942d94..4f8df672 100644
--- a/Tiger/Schema/Shaders/Material.cs
+++ b/Tiger/Schema/Shaders/Material.cs
@@ -47,6 +47,7 @@ public struct Output
public interface IMaterial : ISchema
{
public FileHash FileHash { get; }
+ public uint Unk0C { get; } //Seems to be backface culling
public IEnumerable EnumerateVSTextures();
public IEnumerable EnumeratePSTextures();
public ShaderBytecode? VertexShader { get; }
@@ -60,6 +61,7 @@ public interface IMaterial : ISchema
public DynamicArray Unk2D0 { get; }
public DynamicArray Unk2E0 { get; }
public DynamicArray Unk300 { get; }
+
public static object _lock = new object();
private static ConfigSubsystem _config = CharmInstance.GetSubsystem();
@@ -123,8 +125,8 @@ public void SavePixelShader(string saveDirectory, bool isTerrain = false)
{
if (PixelShader != null && PixelShader.Hash.IsValid())
{
- string pixel = Decompile(PixelShader.GetBytecode(), $"ps{FileHash}");
- string vertex = Decompile(VertexShader.GetBytecode(), $"vs{FileHash}");
+ string pixel = Decompile(PixelShader.GetBytecode(), $"ps{PixelShader.Hash}");
+ string vertex = Decompile(VertexShader.GetBytecode(), $"vs{VertexShader.Hash}");
string usf = _config.GetUnrealInteropEnabled() ? new UsfConverter().HlslToUsf(this, pixel, false) : "";
string vfx = Source2Handler.source2Shaders ? new S2ShaderConverter().HlslToVfx(this, pixel, vertex, isTerrain) : "";
@@ -144,9 +146,9 @@ public void SavePixelShader(string saveDirectory, bool isTerrain = false)
{
File.WriteAllText($"{saveDirectory}/Unreal/PS_{FileHash}.usf", usf);
}
- if (vfx != String.Empty && !File.Exists($"{saveDirectory}/Source2/PS_{FileHash}.shader"))
+ if (vfx != String.Empty && !File.Exists($"{saveDirectory}/Source2/PS_{PixelShader.Hash}.shader"))
{
- File.WriteAllText($"{saveDirectory}/Source2/PS_{FileHash}.shader", vfx);
+ File.WriteAllText($"{saveDirectory}/Source2/PS_{PixelShader.Hash}.shader", vfx);
}
}
catch (IOException) // threading error
@@ -164,8 +166,8 @@ public void SaveVertexShader(string saveDirectory)
Directory.CreateDirectory($"{saveDirectory}");
if (VertexShader != null && VertexShader.Hash.IsValid())
{
- string hlsl = Decompile(VertexShader.GetBytecode(), $"vs{FileHash}");
- string usf = new UsfConverter().HlslToUsf(this, hlsl, true);
+ string hlsl = Decompile(VertexShader.GetBytecode(), $"vs{VertexShader.Hash}");
+ string usf = _config.GetUnrealInteropEnabled() ? new UsfConverter().HlslToUsf(this, hlsl, true) : "";
if (usf != String.Empty)
{
try
@@ -200,6 +202,7 @@ namespace Tiger.Schema.Shaders.DESTINY2_SHADOWKEEP_2601
public class Material : Tag, IMaterial
{
public FileHash FileHash => Hash;
+ public uint Unk0C => _tag.Unk0C;
public ShaderBytecode VertexShader => _tag.VertexShader;
public ShaderBytecode PixelShader => _tag.PixelShader;
public FileHash PSVector4Container => _tag.PSVector4Container;
@@ -239,6 +242,7 @@ namespace Tiger.Schema.Shaders.DESTINY2_BEYONDLIGHT_3402
public class Material : Tag, IMaterial
{
public FileHash FileHash => Hash;
+ public uint Unk0C => _tag.Unk0C;
public ShaderBytecode VertexShader => _tag.VertexShader;
public ShaderBytecode PixelShader => _tag.PixelShader;
public FileHash PSVector4Container => _tag.PSVector4Container;
@@ -279,6 +283,7 @@ namespace Tiger.Schema.Shaders.DESTINY2_WITCHQUEEN_6307
public class Material : Tag, IMaterial
{
public FileHash FileHash => Hash;
+ public uint Unk0C => _tag.Unk0C;
public ShaderBytecode VertexShader => _tag.VertexShader;
public ShaderBytecode PixelShader => _tag.PixelShader;
public FileHash PSVector4Container => _tag.PSVector4Container;
diff --git a/Tiger/Schema/Shaders/S2ShaderConverter.cs b/Tiger/Schema/Shaders/S2ShaderConverter.cs
index f431c6dd..ebdac4a0 100644
--- a/Tiger/Schema/Shaders/S2ShaderConverter.cs
+++ b/Tiger/Schema/Shaders/S2ShaderConverter.cs
@@ -1,7 +1,9 @@
using System;
using System.Diagnostics;
+using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
+using System.Text.RegularExpressions;
using Tiger;
using Tiger.Schema;
using Tiger.Schema.Shaders;
@@ -20,8 +22,10 @@ public class S2ShaderConverter
private readonly List