fishy facepunch

This commit is contained in:
2023-05-31 12:47:21 -04:00
parent 12779859cd
commit 6a28112faa
338 changed files with 2161 additions and 58 deletions

View File

@ -1,8 +0,0 @@
fileFormatVersion: 2
guid: e1b7ac5a63cb24c4a8b836efecf5b432
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,14 +0,0 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
namespace Adobe.Substance
{
public enum ShuffleIndex
{
Red = 0,
Green = 1,
Blue = 2,
AlphaChannel = 3
}
}

View File

@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: 19b7748e2fed01745849ab203806a4da
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,24 +0,0 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
namespace Adobe.Substance
{
/// <summary>
/// Types of values supported by the substance Engine.
/// </summary>
public enum SubstanceValueType : uint
{
Float,
Float2,
Float3,
Float4,
Int,
Int2,
Int3,
Int4,
Image,
String,
Font,
}
}

View File

@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: 4e3e8edcd045aa4439639e4dd4a876e1
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,21 +0,0 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
namespace Adobe.Substance
{
/// <summary>
/// Represents different types of widgets used to assign input values.
/// </summary>
public enum SubstanceWidgetType
{
NoWidget,
Slider,
Angle,
Color,
ToggleButton,
ComboBox,
Image,
Position
}
}

View File

@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: 73d408e59cbb3044e807be21f8dce834
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,14 +0,0 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
namespace Adobe.Substance
{
public enum TextureFlip
{
None = 0x0,
Horizontal = 0x1,
Vertical = 0x2,
Both = 0x3
}
}

View File

@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: 01ed99cadd094f841b47e95378e7d415
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,8 +0,0 @@
fileFormatVersion: 2
guid: 1d0e13b745090064e9c7e0bbd2b23b47
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,8 +0,0 @@
fileFormatVersion: 2
guid: 8d3285958facb6f44b410e1c81fa19c1
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,10 +0,0 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
namespace Adobe.Substance
{
public interface ISubstanceInputDescNumerical
{
}
}

View File

@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: c6c5115cae5711a46a6d74d20391cfb8
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,56 +0,0 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
namespace Adobe.Substance.Input.Description
{
/// <summary>
/// Numeric input description for input of type float.
/// </summary>
[System.Serializable]
public class SubstanceInputDescNumericalFloat : ISubstanceInputDescNumerical
{
/// <summary>
/// Default input value
/// </summary>
public float DefaultValue;
/// <summary>
/// Minimum value (UI hint only)
/// </summary>
public float MinValue;
/// <summary>
/// Maximum value (UI hint only) (Only relevant if widget is Input_Slider)
/// </summary>
public float MaxValue;
/// <summary>
/// Slider step size (UI hint only) (Only relevant if widget is Input_Slider)
/// </summary>
public float SliderStep;
/// <summary>
/// Should the slider clamp the value? (UI hint only) (Only relevant if widget is Input_Slider)
/// </summary>
public bool SliderClamp;
/// <summary>
/// Number of enum option for this value.
/// </summary>
public int EnumValueCount;
/// <summary>
/// Array of enum values for this property. Only relevant if widget is SBSARIO_WIDGET_COMBOBOX (UI hint only).
/// </summary>
public SubstanceFloatEnumOption[] EnumValues;
}
[System.Serializable]
public class SubstanceFloatEnumOption
{
public float Value;
public string Label;
}
}

View File

@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: 17cc9d69d9e234541a84546059a02135
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,56 +0,0 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
namespace Adobe.Substance.Input.Description
{
/// <summary>
/// Numeric input description for input of type float 2.
/// </summary>
[System.Serializable]
public class SubstanceInputDescNumericalFloat2 : ISubstanceInputDescNumerical
{
/// <summary>
/// Default input value
/// </summary>
public Vector2 DefaultValue;
/// <summary>
/// Minimum value (UI hint only)
/// </summary>
public Vector2 MinValue;
/// <summary>
/// Maximum value (UI hint only) (Only relevant if widget is Input_Slider)
/// </summary>
public Vector2 MaxValue;
/// <summary>
/// Slider step size (UI hint only) (Only relevant if widget is Input_Slider)
/// </summary>
public float SliderStep;
/// <summary>
/// Should the slider clamp the value? (UI hint only) (Only relevant if widget is Input_Slider)
/// </summary>
public bool SliderClamp;
/// <summary>
/// Number of enum option for this value.
/// </summary>
public int EnumValueCount;
/// <summary>
/// Array of enum values for this property. Only relevant if widget is SBSARIO_WIDGET_COMBOBOX (UI hint only).
/// </summary>
public SubstanceFloat2EnumOption[] EnumValues;
}
[System.Serializable]
public class SubstanceFloat2EnumOption
{
public Vector2 Value;
public string Label;
}
}

View File

@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: 6cd3bc40ad7c1cc41bc69189c63590b2
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,56 +0,0 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
namespace Adobe.Substance.Input.Description
{
/// <summary>
/// Numeric input description for input of type float3.
/// </summary>
[System.Serializable]
public class SubstanceInputDescNumericalFloat3 : ISubstanceInputDescNumerical
{
/// <summary>
/// Default input value
/// </summary>
public Vector3 DefaultValue;
/// <summary>
/// Minimum value (UI hint only)
/// </summary>
public Vector3 MinValue;
/// <summary>
/// Maximum value (UI hint only) (Only relevant if widget is Input_Slider)
/// </summary>
public Vector3 MaxValue;
/// <summary>
/// Slider step size (UI hint only) (Only relevant if widget is Input_Slider)
/// </summary>
public float SliderStep;
/// <summary>
/// Should the slider clamp the value? (UI hint only) (Only relevant if widget is Input_Slider)
/// </summary>
public bool SliderClamp;
/// <summary>
/// Number of enum option for this value.
/// </summary>
public int EnumValueCount;
/// <summary>
/// Array of enum values for this property. Only relevant if widget is SBSARIO_WIDGET_COMBOBOX (UI hint only).
/// </summary>
public SubstanceFloat3EnumOption[] EnumValues;
}
[System.Serializable]
public class SubstanceFloat3EnumOption
{
public Vector3 Value;
public string Label;
}
}

View File

@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: 95d340e6db1018d4888654b6d6e4bfbc
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,56 +0,0 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
namespace Adobe.Substance.Input.Description
{
/// <summary>
/// Numeric input description for input of type float4.
/// </summary>
[System.Serializable]
public class SubstanceInputDescNumericalFloat4 : ISubstanceInputDescNumerical
{
/// <summary>
/// Default input value
/// </summary>
public Vector4 DefaultValue;
/// <summary>
/// Minimum value (UI hint only)
/// </summary>
public Vector4 MinValue;
/// <summary>
/// Maximum value (UI hint only) (Only relevant if widget is Input_Slider)
/// </summary>
public Vector4 MaxValue;
/// <summary>
/// Slider step size (UI hint only) (Only relevant if widget is Input_Slider)
/// </summary>
public float SliderStep;
/// <summary>
/// Should the slider clamp the value? (UI hint only) (Only relevant if widget is Input_Slider)
/// </summary>
public bool SliderClamp;
/// <summary>
/// Number of enum option for this value.
/// </summary>
public int EnumValueCount;
/// <summary>
/// Array of enum values for this property. Only relevant if widget is SBSARIO_WIDGET_COMBOBOX (UI hint only).
/// </summary>
public SubstanceFloat4EnumOption[] EnumValues;
}
[System.Serializable]
public class SubstanceFloat4EnumOption
{
public Vector4 Value;
public string Label;
}
}

View File

@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: b59f3763c24dd4b489b67cbf059c97e7
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,63 +0,0 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
namespace Adobe.Substance.Input.Description
{
/// <summary>
/// Numeric input description for input of type int.
/// </summary>
[System.Serializable]
public class SubstanceInputDescNumericalInt : ISubstanceInputDescNumerical
{
/// <summary>
/// Default input value
/// </summary>
public int DefaultValue;
/// <summary>
/// Minimum value (UI hint only)
/// </summary>
public int MinValue;
/// <summary>
/// Maximum value. Only relevant if widget is Slider (UI hint only)
/// </summary>
public int MaxValue;
/// <summary>
/// Slider step size. Only relevant if widget is Slider (UI hint only).
/// </summary>
public float SliderStep;
/// <summary>
/// True if the slider value is clamped. Only relevant if widget is Slider (UI hint only)
/// </summary>
public bool SliderClamp;
/// <summary>
/// If non-empty, the labels to use for False (unchecked) and True (checked) values. Only relevant if widget is Input_Togglebutton
/// </summary>
public string LabelFalse;
public string LabelTrue;
/// <summary>
/// Number of enum option for this value.
/// </summary>
public int EnumValueCount;
/// <summary>
/// Array of enum values for this property. Only relevant if widget is SBSARIO_WIDGET_COMBOBOX (UI hint only).
/// </summary>
public SubstanceIntEnumOption[] EnumValues;
}
[System.Serializable]
public class SubstanceIntEnumOption
{
public int Value;
public string Label;
}
}

View File

@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: 4505bd299acddfa42a93618bb3eb3144
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,51 +0,0 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
namespace Adobe.Substance.Input.Description
{
/// <summary>
/// Numeric input description for input of type int2.
/// </summary>
[System.Serializable]
public class SubstanceInputDescNumericalInt2 : ISubstanceInputDescNumerical
{
/// <summary>
/// Default input value
/// </summary>
public Vector2Int DefaultValue;
/// <summary>
/// Minimum value (UI hint only)
/// </summary>
public Vector2Int MinValue;
/// <summary>
/// Maximum value. Only relevant if widget is Slider (UI hint only)
/// </summary>
public Vector2Int MaxValue;
/// <summary>
/// True if the slider value is clamped. Only relevant if widget is Slider (UI hint only)
/// </summary>
public bool SliderClamp;
/// <summary>
/// Number of enum option for this value.
/// </summary>
public int EnumValueCount;
/// <summary>
/// Array of enum values for this property. Only relevant if widget is ComboBox (UI hint only).
/// </summary>
public SubstanceInt2EnumOption[] EnumValues;
}
[System.Serializable]
public class SubstanceInt2EnumOption
{
public Vector2Int Value;
public string Label;
}
}

View File

@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: f227c26b9ad4bc144b20f140676c3d39
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,32 +0,0 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
namespace Adobe.Substance.Input.Description
{
[System.Serializable]
public class SubstanceInputDescNumericalInt3 : ISubstanceInputDescNumerical
{
public Vector3Int DefaultValue;
public Vector3Int MinValue;
public Vector3Int MaxValue;
public Vector3Int SliderStep;
public bool SliderClamp;
public int EnumValueCount;
public SubstanceInt3EnumOption[] EnumValues;
}
[System.Serializable]
public class SubstanceInt3EnumOption
{
public Vector3Int Value;
public string Label;
}
}

View File

@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: 36e74c56f6c8da5478de4fa824d907ac
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,47 +0,0 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
namespace Adobe.Substance.Input.Description
{
[System.Serializable]
public class SubstanceInputDescNumericalInt4 : ISubstanceInputDescNumerical
{
public int DefaultValue0;
public int DefaultValue1;
public int DefaultValue2;
public int DefaultValue3;
public int MinValue0;
public int MinValue1;
public int MinValue2;
public int MinValue3;
public int MaxValue0;
public int MaxValue1;
public int MaxValue2;
public int MaxValue3;
public int SliderStep0;
public int SliderStep1;
public int SliderStep2;
public int SliderStep3;
public bool SliderClamp;
public int EnumValueCount;
public SubstanceInt4EnumOption[] EnumValues;
}
[System.Serializable]
public class SubstanceInt4EnumOption
{
public int Value0;
public int Value1;
public int Value2;
public int Value3;
public string Label;
}
}

View File

@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: 7ba763c16c13298419198087a5b6db66
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,21 +0,0 @@
using System.Collections.Generic;
using UnityEngine;
namespace Adobe.Substance.Input.Description
{
[System.Serializable]
public class SubstanceInputDescription
{
public string Identifier;
public string Label;
public string GuiGroup;
public string GuiDescription;
public SubstanceValueType Type;
public SubstanceWidgetType WidgetType;
}
}

View File

@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: fc6a243b92a09374d89b9c500fffa0e9
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,117 +0,0 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Adobe.Substance.Input.Description;
namespace Adobe.Substance.Input
{
public interface ISubstanceInput
{
int Index { get; }
SubstanceValueType ValueType { get; }
bool IsNumeric { get; }
bool IsValid { get; }
SubstanceInputDescription Description { get; }
void UpdateNativeHandle(SubstanceNativeGraph handler);
internal void SetNumericDescription(NativeNumericInputDesc desc);
/// <summary>
/// Assigns the native enum data from the substance engine to the numerical input description (Only valid if input is numeric)
/// </summary>
/// <param name="options"></param>
internal void SetEnumOptions(NativeEnumInputDesc[] options);
bool TryGetNumericalDescription(out ISubstanceInputDescNumerical description);
}
/// <summary>
/// Interface for representing all the different types of substance graph inputs.
/// </summary>
public abstract class SubstanceInputBase : ISubstanceInput
{
/// <summary>
/// Input index inside the Substance Graph.
/// </summary>
public int Index;
/// <summary>
/// Input type.
/// </summary>
public abstract SubstanceValueType ValueType { get; }
/// <summary>
/// True if this input is numeric.
/// </summary>
public abstract bool IsNumeric { get; }
/// <summary>
/// True if this input is supported by the Unity plugin.
/// </summary>
public abstract bool IsValid { get; }
/// <summary>
/// Description with aditional information about the input.
/// </summary>
public SubstanceInputDescription Description;
/// <summary>
/// Updates the native side of the substance engine with the current value for this input.
/// </summary>
/// <param name="handler"></param>
public virtual void UpdateNativeHandle(SubstanceNativeGraph handler)
{
}
public virtual bool TryGetNumericalDescription(out ISubstanceInputDescNumerical description)
{
description = null;
return false;
}
/// <summary>
/// Assigns the native data from the substance engine to the numerical input description (Only valid if input is numeric)
/// </summary>
/// <param name="desc"></param>
internal virtual void SetNumericDescription(NativeNumericInputDesc desc)
{
}
/// <summary>
/// Assigns the native enum data from the substance engine to the numerical input description (Only valid if input is numeric)
/// </summary>
/// <param name="options"></param>
internal virtual void SetEnumOptions(NativeEnumInputDesc[] options)
{
}
#region ISubstanceInput
int ISubstanceInput.Index => Index;
SubstanceInputDescription ISubstanceInput.Description => Description;
SubstanceValueType ISubstanceInput.ValueType => ValueType;
bool ISubstanceInput.IsNumeric => IsNumeric;
bool ISubstanceInput.IsValid => IsValid;
void ISubstanceInput.SetNumericDescription(NativeNumericInputDesc desc)
{
SetNumericDescription(desc);
}
void ISubstanceInput.SetEnumOptions(NativeEnumInputDesc[] options)
{
SetEnumOptions(options);
}
#endregion ISubstanceInput
}
}

View File

@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: 82a826b2d9a131a4598c52e033409dae
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,67 +0,0 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
namespace Adobe.Substance.Input
{
/// <summary>
/// Static factory for creating Unity input object from native data.
/// </summary>
public static class SubstanceInputFactory
{
/// <summary>
/// Create a unity data object from native substance data.
/// </summary>
/// <param name="nativeData">Native data.</param>
/// <returns>Instance of a substance input interface object.</returns>
internal static SubstanceInputBase CreateInput(NativeData nativeData)
{
int index = (int)nativeData.Index;
DataInternalNumeric data = nativeData.Data;
switch (nativeData.ValueType)
{
case ValueType.SBSARIO_VALUE_FLOAT:
return new SubstanceInputFloat(index, data);
case ValueType.SBSARIO_VALUE_FLOAT2:
return new SubstanceInputFloat2(index, data);
case ValueType.SBSARIO_VALUE_FLOAT3:
return new SubstanceInputFloat3(index, data);
case ValueType.SBSARIO_VALUE_FLOAT4:
return new SubstanceInputFloat4(index, data);
case ValueType.SBSARIO_VALUE_INT:
return new SubstanceInputInt(index, data);
case ValueType.SBSARIO_VALUE_INT2:
return new SubstanceInputInt2(index, data);
case ValueType.SBSARIO_VALUE_INT3:
return new SubstanceInputInt3(index, data);
case ValueType.SBSARIO_VALUE_INT4:
return new SubstanceInputInt4(index, data);
case ValueType.SBSARIO_VALUE_IMAGE:
return new SubstanceInputTexture(index, data);
case ValueType.SBSARIO_VALUE_STRING:
return new SubstanceInputString(index, data);
case ValueType.SBSARIO_VALUE_FONT:
return new SubstanceInputFont(index, data);
default:
throw new System.InvalidOperationException($"Can not create unity type from native data for type {nativeData.ValueType}.");
}
}
internal static SubstanceInputBase CreateInvalidInput(int inputID)
{
return new SubstanceInvalidInput(inputID);
}
}
}

View File

@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: bb4c90b1beaaf634092abf47829fe011
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,8 +0,0 @@
fileFormatVersion: 2
guid: a314bf34bf71b50468f5d639e47d5c14
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,71 +0,0 @@
using Adobe.Substance.Input.Description;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using UnityEngine;
namespace Adobe.Substance.Input
{
[Serializable]
public class SubstanceInputFloat : SubstanceInputBase
{
public float Data;
public SubstanceInputDescNumericalFloat NumericalDescription;
public override bool IsNumeric => true;
public override bool IsValid => true;
public override SubstanceValueType ValueType => SubstanceValueType.Float;
internal SubstanceInputFloat(int index, DataInternalNumeric data)
{
Index = index;
Data = data.mFloatData0;
}
public override void UpdateNativeHandle(SubstanceNativeGraph handler)
{
handler.SetInputFloat(Index, Data);
}
internal override void SetNumericDescription(NativeNumericInputDesc desc)
{
NumericalDescription = new SubstanceInputDescNumericalFloat
{
DefaultValue = desc.default_value.mFloatData0,
MaxValue = desc.max_value.mFloatData0,
MinValue = desc.min_value.mFloatData0,
SliderClamp = Convert.ToBoolean(desc.sliderClamp.ToInt32()),
SliderStep = desc.sliderStep,
EnumValueCount = desc.enumValueCount.ToInt32()
};
return;
}
internal override void SetEnumOptions(NativeEnumInputDesc[] options)
{
NumericalDescription.EnumValues = new SubstanceFloatEnumOption[options.Length];
for (int i = 0; i < NumericalDescription.EnumValues.Length; i++)
{
var option = new SubstanceFloatEnumOption
{
Label = Marshal.PtrToStringAnsi(options[i].label),
Value = options[i].value.mFloatData0
};
NumericalDescription.EnumValues[i] = option;
}
return;
}
public override bool TryGetNumericalDescription(out ISubstanceInputDescNumerical description)
{
description = NumericalDescription;
return true;
}
}
}

View File

@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: 6a2b5e2d6e8627946aee84ca2cad43a2
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,71 +0,0 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Adobe.Substance.Input.Description;
using System;
using System.Runtime.InteropServices;
namespace Adobe.Substance.Input
{
[System.Serializable]
public class SubstanceInputFloat2 : SubstanceInputBase
{
public Vector2 Data;
public SubstanceInputDescNumericalFloat2 NumericalDescription;
public override SubstanceValueType ValueType => SubstanceValueType.Float2;
public override bool IsNumeric => true;
public override bool IsValid => true;
internal SubstanceInputFloat2(int index, DataInternalNumeric data)
{
Index = index;
Data = new Vector2(data.mFloatData0, data.mFloatData1);
}
public override void UpdateNativeHandle(SubstanceNativeGraph handler)
{
handler.SetInputFloat2(Index, Data);
}
internal override void SetNumericDescription(NativeNumericInputDesc desc)
{
NumericalDescription = new SubstanceInputDescNumericalFloat2
{
DefaultValue = new Vector2(desc.default_value.mFloatData0, desc.default_value.mFloatData1),
MaxValue = new Vector2(desc.max_value.mFloatData0, desc.max_value.mFloatData1),
MinValue = new Vector2(desc.min_value.mFloatData0, desc.min_value.mFloatData1),
SliderClamp = Convert.ToBoolean(desc.sliderClamp.ToInt32()),
SliderStep = desc.sliderStep,
EnumValueCount = desc.enumValueCount.ToInt32()
};
return;
}
internal override void SetEnumOptions(NativeEnumInputDesc[] options)
{
NumericalDescription.EnumValues = new SubstanceFloat2EnumOption[options.Length];
for (int i = 0; i < NumericalDescription.EnumValues.Length; i++)
{
var option = new SubstanceFloat2EnumOption
{
Label = Marshal.PtrToStringAnsi(options[i].label),
Value = new Vector2(options[i].value.mFloatData0, options[i].value.mFloatData1)
};
NumericalDescription.EnumValues[i] = option;
}
return;
}
public override bool TryGetNumericalDescription(out ISubstanceInputDescNumerical description)
{
description = NumericalDescription;
return true;
}
}
}

View File

@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: d0c4e3cee5c04494089d8b2b921a09a7
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,71 +0,0 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Adobe.Substance.Input.Description;
using System;
using System.Runtime.InteropServices;
namespace Adobe.Substance.Input
{
[System.Serializable]
public class SubstanceInputFloat3 : SubstanceInputBase
{
public Vector3 Data;
public SubstanceInputDescNumericalFloat3 NumericalDescription;
public override SubstanceValueType ValueType => SubstanceValueType.Float3;
public override bool IsNumeric => true;
public override bool IsValid => true;
internal SubstanceInputFloat3(int index, DataInternalNumeric data)
{
Index = index;
Data = new Vector3(data.mFloatData0, data.mFloatData1, data.mFloatData2);
}
public override void UpdateNativeHandle(SubstanceNativeGraph handler)
{
handler.SetInputFloat3(Index, Data);
}
internal override void SetNumericDescription(NativeNumericInputDesc desc)
{
NumericalDescription = new SubstanceInputDescNumericalFloat3
{
DefaultValue = new Vector3(desc.default_value.mFloatData0, desc.default_value.mFloatData1, desc.default_value.mFloatData2),
MaxValue = new Vector3(desc.max_value.mFloatData0, desc.max_value.mFloatData1, desc.max_value.mFloatData2),
MinValue = new Vector3(desc.min_value.mFloatData0, desc.min_value.mFloatData1, desc.min_value.mFloatData2),
SliderClamp = Convert.ToBoolean(desc.sliderClamp.ToInt32()),
SliderStep = desc.sliderStep,
EnumValueCount = desc.enumValueCount.ToInt32()
};
return;
}
internal override void SetEnumOptions(NativeEnumInputDesc[] options)
{
NumericalDescription.EnumValues = new SubstanceFloat3EnumOption[options.Length];
for (int i = 0; i < NumericalDescription.EnumValues.Length; i++)
{
var option = new SubstanceFloat3EnumOption
{
Label = Marshal.PtrToStringAnsi(options[i].label),
Value = new Vector3(options[i].value.mFloatData0, options[i].value.mFloatData1, options[i].value.mFloatData2)
};
NumericalDescription.EnumValues[i] = option;
}
return;
}
public override bool TryGetNumericalDescription(out ISubstanceInputDescNumerical description)
{
description = NumericalDescription;
return true;
}
}
}

View File

@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: 972cacc8762922b4c899c029ca6f30ee
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,71 +0,0 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Adobe.Substance.Input.Description;
using System;
using System.Runtime.InteropServices;
namespace Adobe.Substance.Input
{
[System.Serializable]
public class SubstanceInputFloat4 : SubstanceInputBase
{
public Vector4 Data;
public SubstanceInputDescNumericalFloat4 NumericalDescription;
public override bool IsNumeric => true;
public override bool IsValid => true;
public override SubstanceValueType ValueType => SubstanceValueType.Float4;
internal SubstanceInputFloat4(int index, DataInternalNumeric data)
{
Index = index;
Data = new Vector4(data.mFloatData0, data.mFloatData1, data.mFloatData2, data.mFloatData3);
}
public override void UpdateNativeHandle(SubstanceNativeGraph handler)
{
handler.SetInputFloat4(Index, Data);
}
internal override void SetNumericDescription(NativeNumericInputDesc desc)
{
NumericalDescription = new SubstanceInputDescNumericalFloat4
{
DefaultValue = new Vector4(desc.default_value.mFloatData0, desc.default_value.mFloatData1, desc.default_value.mFloatData2, desc.default_value.mFloatData3),
MaxValue = new Vector4(desc.max_value.mFloatData0, desc.max_value.mFloatData1, desc.max_value.mFloatData2, desc.max_value.mFloatData3),
MinValue = new Vector4(desc.min_value.mFloatData0, desc.min_value.mFloatData1, desc.min_value.mFloatData2, desc.min_value.mFloatData3),
SliderClamp = Convert.ToBoolean(desc.sliderClamp.ToInt32()),
SliderStep = desc.sliderStep,
EnumValueCount = desc.enumValueCount.ToInt32()
};
return;
}
internal override void SetEnumOptions(NativeEnumInputDesc[] options)
{
NumericalDescription.EnumValues = new SubstanceFloat4EnumOption[options.Length];
for (int i = 0; i < NumericalDescription.EnumValues.Length; i++)
{
var option = new SubstanceFloat4EnumOption
{
Label = Marshal.PtrToStringAnsi(options[i].label),
Value = new Vector4(options[i].value.mFloatData0, options[i].value.mFloatData1, options[i].value.mFloatData2, options[i].value.mFloatData3)
};
NumericalDescription.EnumValues[i] = option;
}
return;
}
public override bool TryGetNumericalDescription(out ISubstanceInputDescNumerical description)
{
description = NumericalDescription;
return true;
}
}
}

View File

@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: 38a7b8b2e997dce43af21e967aabeb90
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,37 +0,0 @@
using System;
using UnityEngine;
using Adobe.Substance.Input.Description;
namespace Adobe.Substance.Input
{
[System.Serializable]
public class SubstanceInputFont : SubstanceInputBase
{
public Font Data;
public override bool IsValid => true;
public override SubstanceValueType ValueType => SubstanceValueType.Font;
public override bool IsNumeric => false;
public ISubstanceInputDescNumerical NumericalDescription => null;
internal SubstanceInputFont(int index, DataInternalNumeric data)
{
Index = index;
Data = null;
}
public override void UpdateNativeHandle(SubstanceNativeGraph handler)
{
return;
}
internal override void SetNumericDescription(NativeNumericInputDesc desc)
{
return;
}
internal override void SetEnumOptions(NativeEnumInputDesc[] options)
{
return;
}
}
}

View File

@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: b54963e3fd7509d47a7807204ab5ad0c
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,69 +0,0 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Adobe.Substance.Input.Description;
using System;
using System.Runtime.InteropServices;
namespace Adobe.Substance.Input
{
[System.Serializable]
public class SubstanceInputInt : SubstanceInputBase
{
public int Data;
public SubstanceInputDescNumericalInt NumericalDescription;
public override bool IsValid => true;
public override SubstanceValueType ValueType => SubstanceValueType.Int;
public override bool IsNumeric => true;
internal SubstanceInputInt(int index, DataInternalNumeric data)
{
Index = index;
Data = data.mIntData0;
}
public override void UpdateNativeHandle(SubstanceNativeGraph handler)
{
handler.SetInputInt(Index, Data);
}
internal override void SetNumericDescription(NativeNumericInputDesc desc)
{
NumericalDescription = new SubstanceInputDescNumericalInt
{
DefaultValue = desc.default_value.mIntData0,
MaxValue = desc.max_value.mIntData0,
MinValue = desc.min_value.mIntData0,
SliderClamp = Convert.ToBoolean(desc.sliderClamp.ToInt32()),
SliderStep = desc.sliderStep,
EnumValueCount = desc.enumValueCount.ToInt32()
};
}
internal override void SetEnumOptions(NativeEnumInputDesc[] options)
{
NumericalDescription.EnumValues = new SubstanceIntEnumOption[options.Length];
for (int i = 0; i < NumericalDescription.EnumValues.Length; i++)
{
var option = new SubstanceIntEnumOption
{
Label = Marshal.PtrToStringAnsi(options[i].label),
Value = options[i].value.mIntData0
};
NumericalDescription.EnumValues[i] = option;
}
return;
}
public override bool TryGetNumericalDescription(out ISubstanceInputDescNumerical description)
{
description = NumericalDescription;
return true;
}
}
}

View File

@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: 1601ac9007c2d7a40a34b1bb071fd814
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,64 +0,0 @@
using System;
using UnityEngine;
using System.Runtime.InteropServices;
using Adobe.Substance.Input.Description;
namespace Adobe.Substance.Input
{
[System.Serializable]
public class SubstanceInputInt2 : SubstanceInputBase
{
public Vector2Int Data;
public SubstanceInputDescNumericalInt2 NumericalDescription;
public override bool IsValid => true;
public override SubstanceValueType ValueType => SubstanceValueType.Int2;
public override bool IsNumeric => true;
internal SubstanceInputInt2(int index, DataInternalNumeric data)
{
Index = index;
Data = new Vector2Int(data.mIntData0, data.mIntData1);
}
public override void UpdateNativeHandle(SubstanceNativeGraph handler)
{
handler.SetInputInt2(Index, Data);
}
internal override void SetNumericDescription(NativeNumericInputDesc desc)
{
NumericalDescription = new SubstanceInputDescNumericalInt2
{
DefaultValue = new Vector2Int(desc.default_value.mIntData0, desc.default_value.mIntData1),
MaxValue = new Vector2Int(desc.max_value.mIntData0, desc.max_value.mIntData1),
MinValue = new Vector2Int(desc.min_value.mIntData0, desc.min_value.mIntData1),
SliderClamp = Convert.ToBoolean(desc.sliderClamp.ToInt32()),
EnumValueCount = desc.enumValueCount.ToInt32()
};
}
internal override void SetEnumOptions(NativeEnumInputDesc[] options)
{
NumericalDescription.EnumValues = new SubstanceInt2EnumOption[options.Length];
for (int i = 0; i < NumericalDescription.EnumValues.Length; i++)
{
var option = new SubstanceInt2EnumOption
{
Label = Marshal.PtrToStringAnsi(options[i].label),
Value = new Vector2Int(options[i].value.mIntData0, options[i].value.mIntData1)
};
NumericalDescription.EnumValues[i] = option;
}
}
public override bool TryGetNumericalDescription(out ISubstanceInputDescNumerical description)
{
description = NumericalDescription;
return true;
}
}
}

View File

@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: 1edf95e7b56e87b43bf900d164c150b9
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,64 +0,0 @@
using UnityEngine;
using System;
using System.Runtime.InteropServices;
using Adobe.Substance.Input.Description;
namespace Adobe.Substance.Input
{
[System.Serializable]
public class SubstanceInputInt3 : SubstanceInputBase
{
public Vector3Int Data;
public SubstanceInputDescNumericalInt3 NumericalDescription;
public override bool IsValid => true;
public override SubstanceValueType ValueType => SubstanceValueType.Int3;
public override bool IsNumeric => true;
internal SubstanceInputInt3(int index, DataInternalNumeric data)
{
Index = index;
Data = new Vector3Int(data.mIntData0, data.mIntData1, data.mIntData2);
}
public override void UpdateNativeHandle(SubstanceNativeGraph handler)
{
handler.SetInputInt3(Index, Data);
}
internal override void SetNumericDescription(NativeNumericInputDesc desc)
{
NumericalDescription = new SubstanceInputDescNumericalInt3
{
DefaultValue = new Vector3Int(desc.default_value.mIntData0, desc.default_value.mIntData1, desc.default_value.mIntData2),
MaxValue = new Vector3Int(desc.max_value.mIntData0, desc.max_value.mIntData1, desc.max_value.mIntData2),
MinValue = new Vector3Int(desc.min_value.mIntData0, desc.min_value.mIntData1, desc.min_value.mIntData2),
SliderClamp = Convert.ToBoolean(desc.sliderClamp.ToInt32()),
EnumValueCount = desc.enumValueCount.ToInt32()
};
}
internal override void SetEnumOptions(NativeEnumInputDesc[] options)
{
NumericalDescription.EnumValues = new SubstanceInt3EnumOption[options.Length];
for (int i = 0; i < NumericalDescription.EnumValues.Length; i++)
{
var option = new SubstanceInt3EnumOption
{
Label = Marshal.PtrToStringAnsi(options[i].label),
Value = new Vector3Int(options[i].value.mIntData0, options[i].value.mIntData1, options[i].value.mIntData2)
};
NumericalDescription.EnumValues[i] = option;
}
}
public override bool TryGetNumericalDescription(out ISubstanceInputDescNumerical description)
{
description = NumericalDescription;
return true;
}
}
}

View File

@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: 920e7de597d6a3744b255c5fa47734d5
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,92 +0,0 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Adobe.Substance.Input.Description;
using System;
using System.Runtime.InteropServices;
namespace Adobe.Substance.Input
{
[Serializable]
public class SubstanceInputInt4 : SubstanceInputBase
{
public int Data0;
public int Data1;
public int Data2;
public int Data3;
public SubstanceInputDescNumericalInt4 NumericalDescription;
public override bool IsValid => true;
public override SubstanceValueType ValueType => SubstanceValueType.Int4;
public override bool IsNumeric => true;
internal SubstanceInputInt4(int index, DataInternalNumeric data)
{
Index = index;
Data0 = data.mIntData0;
Data1 = data.mIntData1;
Data2 = data.mIntData2;
Data3 = data.mIntData3;
}
public override void UpdateNativeHandle(SubstanceNativeGraph handler)
{
handler.SetInputInt4(Index, Data0, Data1, Data2, Data3);
}
internal override void SetNumericDescription(NativeNumericInputDesc desc)
{
NumericalDescription = new SubstanceInputDescNumericalInt4
{
DefaultValue0 = desc.default_value.mIntData0,
DefaultValue1 = desc.default_value.mIntData1,
DefaultValue2 = desc.default_value.mIntData2,
DefaultValue3 = desc.default_value.mIntData3,
MaxValue0 = desc.max_value.mIntData0,
MaxValue1 = desc.max_value.mIntData1,
MaxValue2 = desc.max_value.mIntData2,
MaxValue3 = desc.max_value.mIntData3,
MinValue0 = desc.min_value.mIntData0,
MinValue1 = desc.min_value.mIntData1,
MinValue2 = desc.min_value.mIntData2,
MinValue3 = desc.min_value.mIntData3,
SliderClamp = Convert.ToBoolean(desc.sliderClamp.ToInt32()),
EnumValueCount = desc.enumValueCount.ToInt32()
};
}
internal override void SetEnumOptions(NativeEnumInputDesc[] options)
{
NumericalDescription.EnumValues = new SubstanceInt4EnumOption[options.Length];
for (int i = 0; i < NumericalDescription.EnumValues.Length; i++)
{
var option = new SubstanceInt4EnumOption
{
Label = Marshal.PtrToStringAnsi(options[i].label),
Value0 = options[i].value.mIntData0,
Value1 = options[i].value.mIntData1,
Value2 = options[i].value.mIntData2,
Value3 = options[i].value.mIntData3
};
NumericalDescription.EnumValues[i] = option;
}
return;
}
public override bool TryGetNumericalDescription(out ISubstanceInputDescNumerical description)
{
description = NumericalDescription;
return true;
}
}
}

View File

@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: bf61790262550134a96f236697c83fe8
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,39 +0,0 @@
using System;
using UnityEngine;
using System.Runtime.InteropServices;
using Adobe.Substance.Input.Description;
namespace Adobe.Substance.Input
{
[System.Serializable]
public class SubstanceInputString : SubstanceInputBase
{
[Multiline]
public string Data;
public override bool IsValid => true;
public override SubstanceValueType ValueType => SubstanceValueType.String;
public override bool IsNumeric => false;
internal SubstanceInputString(int index, DataInternalNumeric data)
{
Index = index;
Data = Marshal.PtrToStringAnsi(data.mPtr);
}
public override void UpdateNativeHandle(SubstanceNativeGraph handler)
{
handler.SetInputString(Index, Data);
}
internal override void SetNumericDescription(NativeNumericInputDesc desc)
{
return;
}
internal override void SetEnumOptions(NativeEnumInputDesc[] options)
{
return;
}
}
}

View File

@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: 3466988ea5300af49966ff9b94174f4c
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,49 +0,0 @@
using System;
using UnityEngine;
using Adobe.Substance.Input.Description;
using System.Runtime.InteropServices;
namespace Adobe.Substance.Input
{
[System.Serializable]
public class SubstanceInputTexture : SubstanceInputBase
{
[SerializeField]
private Texture2D Data;
public override bool IsValid => true;
public override SubstanceValueType ValueType => SubstanceValueType.Image;
public override bool IsNumeric => false;
internal SubstanceInputTexture(int index, DataInternalNumeric data)
{
Index = index;
Data = null;
}
public override void UpdateNativeHandle(SubstanceNativeGraph handler)
{
if (Data == null)
return;
if (!Data.isReadable)
{
Debug.LogWarning($"Input textures must be set as readable. Texture assigned to {Description.Identifier} will have no effect.");
return;
}
var pixels = Data.GetPixels32();
handler.SetInputTexture2D(Index, pixels, Data.width, Data.height);
}
internal override void SetNumericDescription(NativeNumericInputDesc desc)
{
return;
}
internal override void SetEnumOptions(NativeEnumInputDesc[] options)
{
return;
}
}
}

View File

@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: 1c1f96014c3c29946a956e0f6e220a34
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,34 +0,0 @@
using System;
using UnityEngine;
using Adobe.Substance.Input.Description;
namespace Adobe.Substance.Input
{
[System.Serializable]
public class SubstanceInvalidInput : SubstanceInputBase
{
public override bool IsValid => false;
public override SubstanceValueType ValueType => Description.Type;
public override bool IsNumeric => false;
public SubstanceInvalidInput(int index)
{
Index = index;
}
public override void UpdateNativeHandle(SubstanceNativeGraph handler)
{
return;
}
internal override void SetNumericDescription(NativeNumericInputDesc desc)
{
return;
}
internal override void SetEnumOptions(NativeEnumInputDesc[] options)
{
return;
}
}
}

View File

@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: 1cdb98b233312594e90f752da97365a4
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,8 +0,0 @@
fileFormatVersion: 2
guid: db03028550561014ba04fce2cb7449ac
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,30 +0,0 @@
namespace Adobe.Substance
{
[System.Serializable]
public class SubstanceOutputDescription
{
[UnityEngine.SerializeField]
public string Identifier;
[UnityEngine.SerializeField]
public string Label;
[UnityEngine.SerializeField]
public int Index;
[UnityEngine.SerializeField]
public SubstanceValueType Type;
[UnityEngine.SerializeField]
public string Channel;
public override string ToString()
{
return $"Identifier: {Identifier}\n" +
$"Label:{Label}\n" +
$"Index:{Index}\n" +
$"Type:{Type}\n" +
$"Channel{Channel}\n";
}
}
}

View File

@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: 06fa5ea573078b642bf69b2798e26884
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,58 +0,0 @@
using UnityEngine;
namespace Adobe.Substance
{
[System.Serializable]
public class SubstanceOutputTexture
{
[SerializeField]
public int Index;
[SerializeField]
public int VirtualOutputIndex;
[SerializeField]
public SubstanceOutputDescription Description;
[SerializeField]
public Texture2D OutputTexture;
[SerializeField]
public bool sRGB;
[SerializeField]
public bool IsVirtual;
[SerializeField]
public bool IsAlphaAssignable;
[SerializeField]
public string AlphaChannel;
[SerializeField]
public bool InvertAssignedAlpha;
[SerializeField]
public uint Flags = 0;
[SerializeField]
public string MaterialTextureTarget;
public SubstanceOutputTexture(SubstanceOutputDescription description, string unityTextureName)
{
Index = description.Index;
Description = description;
MaterialTextureTarget = unityTextureName;
if (!string.IsNullOrEmpty(description.Channel))
IsAlphaAssignable = !string.Equals(description.Channel, "normal", System.StringComparison.OrdinalIgnoreCase);
else
IsAlphaAssignable = false;
IsVirtual = false;
sRGB = false;
OutputTexture = null;
AlphaChannel = string.Empty;
}
}
}

View File

@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: 4eb2b73a785c95a4c87339cd11964fb2
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,102 +0,0 @@
using System.Collections;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using UnityEngine;
namespace Adobe.Substance
{
public class SubstanceVirtualOutputChannelInfo
{
public uint ChannelSource { get; }
public ShuffleIndex Index { get; }
public bool Invert { get; }
private const uint SBSARIO_USE_DEFAULT = ~0u;
private const uint SBSARIO_COMPONENT_EMPTY = 0;
public SubstanceVirtualOutputChannelInfo(uint outputUID, ShuffleIndex index = ShuffleIndex.Red, bool invert = false)
{
ChannelSource = outputUID;
Index = index;
Invert = invert;
}
internal NativeOutputFormatComponent CreateNativeComponent()
{
return new NativeOutputFormatComponent()
{
levelMax = Invert ? 0 : 1,
levelMin = Invert ? 1 : 0,
outputIndex = ChannelSource,
ShuffleIndex = Index
};
}
public readonly static SubstanceVirtualOutputChannelInfo Default = new SubstanceVirtualOutputChannelInfo(SBSARIO_USE_DEFAULT);
public readonly static SubstanceVirtualOutputChannelInfo Black = new SubstanceVirtualOutputChannelInfo(SBSARIO_COMPONENT_EMPTY, ShuffleIndex.Red);
public static SubstanceVirtualOutputChannelInfo White = new SubstanceVirtualOutputChannelInfo(SBSARIO_COMPONENT_EMPTY, ShuffleIndex.Red, true);
}
public class SubstanceVirtualOutputCreateInfo
{
public TextureFormat Format { get; }
public string Label { get; }
public TextureFlip FlipOption { get; }
public SubstanceVirtualOutputChannelInfo RedChannelSource { get; }
public SubstanceVirtualOutputChannelInfo GreenChannelSource { get; }
public SubstanceVirtualOutputChannelInfo BlueChannelSource { get; }
public SubstanceVirtualOutputChannelInfo AlphaChannelSource { get; }
public SubstanceVirtualOutputCreateInfo(TextureFormat format,
string name,
TextureFlip flip = TextureFlip.None,
params SubstanceVirtualOutputChannelInfo[] channels)
{
Format = format;
Label = name;
FlipOption = flip;
RedChannelSource = channels.Length > 0 ? channels[0] : SubstanceVirtualOutputChannelInfo.Default;
GreenChannelSource = channels.Length > 1 ? channels[1] : SubstanceVirtualOutputChannelInfo.Default;
BlueChannelSource = channels.Length > 2 ? channels[2] : SubstanceVirtualOutputChannelInfo.Default;
AlphaChannelSource = channels.Length > 3 ? channels[3] : SubstanceVirtualOutputChannelInfo.Default;
}
internal NativeOutputDesc CreateOutputDesc()
{
var labelPtr = Marshal.StringToHGlobalAnsi(Label);
return new NativeOutputDesc()
{
mLabel = labelPtr,
mIdentifier = labelPtr,
mValueType = ValueType.SBSARIO_VALUE_IMAGE,
};
}
internal NativeOutputFormat CreateOutputFormat()
{
var format = new NativeOutputFormat
{
hvFlip = FlipOption.ToSubstance(),
format = (uint)Format.ToSubstance()
};
format.ChannelComponent0 = RedChannelSource.CreateNativeComponent();
format.ChannelComponent1 = GreenChannelSource.CreateNativeComponent();
format.ChannelComponent2 = BlueChannelSource.CreateNativeComponent();
format.ChannelComponent3 = AlphaChannelSource.CreateNativeComponent();
return format;
}
}
}

View File

@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: c9be437653642a947898654bbb857e27
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,12 +0,0 @@
using UnityEngine;
namespace Adobe.Substance
{
[PreferBinarySerialization]
public class SubstanceFileRawData : ScriptableObject
{
[SerializeField]
[HideInInspector]
public byte[] FileContent = default;
}
}

View File

@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: 9349db640c23d1b4ead3baa0734949e8
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,10 +0,0 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
namespace Adobe.Substance
{
public class SubstanceFileSO : ScriptableObject
{
}
}

View File

@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: f5f261fec84a6d544a8b61047a092314
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,355 +0,0 @@
using Adobe.Substance.Input;
using System;
using System.Collections;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using System.Threading.Tasks;
using UnityEngine;
#if UNITY_EDITOR
using Unity.Collections.LowLevel.Unsafe;
#endif
namespace Adobe.Substance
{
/// <summary>
/// Scriptable object to store information about an instance of a sbsar file. Each instance has it own input values and output textures.
/// </summary>
public class SubstanceGraphSO : ScriptableObject
{
/// <summary>
/// Path to the sbsar file that owns this instance. (Editor only)
/// </summary>
[SerializeField]
public string AssetPath = default;
/// <summary>
/// Folder where assets related to this instance should be placed. (Editor only)
/// </summary>
[SerializeField]
public string OutputPath = default;
/// <summary>
/// Scriptable object that holds sbsar file binary data.
/// </summary>
[SerializeField]
public SubstanceFileRawData RawData = default;
/// <summary>
/// Name for the instance.
/// </summary>
[SerializeField]
public string Name = default;
/// <summary>
/// Is root instance.
/// </summary>
[SerializeField]
public bool IsRoot = false;
/// <summary>
/// Signalized for the API that this instance should be deleted. (Editor only)
/// </summary>
[SerializeField]
public bool FlagedForDelete = false;
/// <summary>
/// GUI to uniquely identify this instance during runtime.
/// </summary>
[SerializeField]
public string GUID = default;
/// <summary>
/// Graph index in the sbsar file. This is a property that is imported from the sbsar file and should not be assigned in Unity.
/// </summary>
[SerializeField]
public int Index = -1;
/// <summary>
/// Input list.
/// </summary>
[SerializeReference]
public List<ISubstanceInput> Input = default;
/// <summary>
/// Output list.
/// </summary>
[SerializeField]
public List<SubstanceOutputTexture> Output = default;
/// <summary>
/// True if this graph has physical size.
/// </summary>
[SerializeField]
public bool HasPhysicalSize;
/// <summary>
/// Graph physical size. If HasPhysicalSize is false this will be Vector3.zero.
/// </summary>
[SerializeField]
public Vector3 PhysicalSize;
/// <summary>
/// If se to true physical size will be applyed to the material.
/// </summary>
[SerializeField]
public bool EnablePhysicalSize;
/// <summary>
/// Sbsar file thumbnail data.
/// </summary>
[SerializeField]
public byte[] Thumbnail = default;
/// <summary>
/// True if sbsar file has thumbnail.
/// </summary>
[SerializeField]
public bool HasThumbnail = false;
/// <summary>
/// Preset that holds the current state of the inputs. (Editor only)
/// </summary>
[SerializeField]
public string CurrentStatePreset = default;
/// <summary>
/// If true, this asset will not generate tga files for the output textures.
/// </summary>
[SerializeField]
public bool IsRuntimeOnly = false;
/// <summary>
/// True if this graph should generate all outputs.
/// </summary>
[SerializeField]
public bool GenerateAllOutputs = false;
/// <summary>
/// True if this graph should generate mipmap chain.
/// </summary>
[SerializeField]
public bool GenerateAllMipmaps = false;
/// <summary>
/// Output material.
/// </summary>
[SerializeField]
public Material OutputMaterial = default;
/// <summary>
/// Default preset for the sbsar file.
/// </summary>
[SerializeField]
public string DefaultPreset = default;
/// <summary>
/// Cached material shader name. (Editor only)
/// </summary>
[SerializeField]
public string MaterialShader = default;
/// <summary>
/// Flags that the substance native inputs should be updated and material should be rendered. (Editor only)
/// </summary>
[SerializeField, HideInInspector]
public bool RenderTextures = false;
/// <summary>
/// Flags that the current generated textures should be deleted. (Editor only)
/// </summary>
[SerializeField, HideInInspector]
public bool OutputRemaped = false;
/// <summary>
/// Initialized the substance graph. Uses the native handle to set all the input parameters, configure output textures, create Unity Texture2D objects for each output and properly assign them to the target material.
/// This must be called if the substance graph was flagged as Runtime only and will require its assets be generated at runtime.
/// </summary>
/// <param name="handler">Handle to a native substance object.</param>
public void RuntimeInitialize(SubstanceNativeGraph handler, bool isRuntime = false)
{
if (handler.IsInitialized)
return;
foreach (var input in Input)
input.UpdateNativeHandle(handler);
RenderingUtils.ConfigureOutputTextures(handler, this, isRuntime);
if (isRuntime)
{
var result = handler.Render();
CreateAndUpdateOutputTextures(result, isRuntime);
MaterialUtils.AssignOutputTexturesToMaterial(this);
}
handler.IsInitialized = true;
}
public Texture2D GetThumbnailTexture()
{
if (!HasThumbnail)
return null;
Texture2D thumbnailTexture = new Texture2D(0, 0);
thumbnailTexture.LoadImage(Thumbnail);
return thumbnailTexture;
}
public void CreateAndUpdateOutputTextures(IntPtr resultPtr, bool runtimeUsage = false)
{
unsafe
{
for (int i = 0; i < Output.Count; i++)
{
var output = Output[i];
if (!output.IsStandardOutput(OutputMaterial) && !GenerateAllOutputs)
continue;
var index = output.VirtualOutputIndex;
IntPtr pI = resultPtr + (index * sizeof(NativeData));
NativeData data = Marshal.PtrToStructure<NativeData>(pI);
if (data.ValueType != ValueType.SBSARIO_VALUE_IMAGE)
{
Debug.LogError($"Skiping render index #{index} of {output.Description.Channel} because it was not an image");
continue;
}
if (data.ValueType == ValueType.SBSARIO_VALUE_IMAGE)
{
NativeDataImage imgData = data.Data.ImageData;
if (TryGetUnityTextureFormat(imgData, runtimeUsage, out int width, out int height, out int imageSize, out TextureFormat format, out int mipsCount))
{
var texture = new Texture2D(width, height, format, GenerateAllMipmaps, IsRuntimeOnly ? !output.sRGB : output.sRGB);
#if UNITY_EDITOR
texture.alphaIsTransparency = imgData.image_format.ChannelCount() == 4;
#endif
output.OutputTexture = texture;
texture.Apply();
}
}
}
}
UpdateOutputTextures(resultPtr);
}
public void UpdateOutputTextures(IntPtr renderResultPtr)
{
unsafe
{
foreach (var output in Output)
{
var texture = output.OutputTexture;
if (texture == null)
{
continue;
}
var index = output.VirtualOutputIndex;
IntPtr dataPtr = renderResultPtr + (index * sizeof(NativeData));
NativeData data = Marshal.PtrToStructure<NativeData>(dataPtr);
if (data.ValueType != ValueType.SBSARIO_VALUE_IMAGE)
{
Debug.LogError($"Fail to update substance output: output is not an image.");
continue;
}
NativeDataImage srcImage = data.Data.ImageData;
if (texture.format != TextureFormat.RGBA32 && texture.format != TextureFormat.BGRA32)
{
Debug.LogError($"Fail to update target texture. Output textures are expected to be RGBA32 or BGRA32.");
continue;
}
var size = GenerateAllMipmaps ? srcImage.GetSizeWithMipMaps() : srcImage.GetSize();
texture.LoadRawTextureData(srcImage.data, size);
texture.Apply();
}
}
}
/// <summary>
/// Returns a list of texture outputs that have resized since last render.
/// </summary>
/// <param name="resultPtr">Render result.</param>
/// <returns>List of pair with output ID and new size.</returns>
public List<(int, Vector2Int)> GetResizedOutputs(IntPtr resultPtr)
{
List<(int, Vector2Int)> textureSizes = new List<(int, Vector2Int)>();
unsafe
{
foreach (var output in Output)
{
var texture = output.OutputTexture;
if (texture == null)
continue;
var index = output.VirtualOutputIndex;
IntPtr pI = resultPtr + (index * sizeof(NativeData));
NativeData data = Marshal.PtrToStructure<NativeData>(pI);
if (data.ValueType != ValueType.SBSARIO_VALUE_IMAGE)
{
Debug.LogError($"Results fail for {output.Description.Label}");
continue;
}
NativeDataImage imgData = data.Data.ImageData;
if (texture.width != (int)imgData.width || texture.height != (int)imgData.height)
textureSizes.Add((output.Index, new Vector2Int((int)imgData.width, (int)imgData.height)));
}
}
return textureSizes;
}
private static bool TryGetUnityTextureFormat(NativeDataImage nativeData, bool runtimeUsage, out int width, out int height, out int imageSize, out TextureFormat format, out int mipsCount)
{
width = (int)nativeData.width;
height = (int)nativeData.height;
mipsCount = (int)nativeData.mipmaps;
imageSize = nativeData.GetSizeWithMipMaps();
format = nativeData.image_format.ToUnityFormat();
if ((nativeData.channel_order == ChannelOrder.SBSARIO_CHANNEL_ORDER_BGRA) && runtimeUsage)
format = TextureFormat.BGRA32;
//#endif
return true;
}
/// <summary>
/// Returns the native ID of this graph in the sbsar file.
/// </summary>
/// <returns>Graph native ID.</returns>
public int GetNativeID()
{
return Index;
}
/// <summary>
/// Sets the value for the native index of this graph. (This should only be assigned on object creation based on the values from the sbsar file.)
/// </summary>
public void SetNativeID(int index)
{
if (Index != -1)
throw new ArgumentException("SubstanceGraphSO NativeID should not be changed after it has been assigned.");
Index = index;
}
}
}

View File

@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: eed5864476f84ce4b85454db09ca4eaa
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant: