Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.

Topics - dgoyette

Pages: 1 [2] 3
I feel kind of dumb for not realizing this sooner, but having been a Substance Painter user for about a year, it only just occurred to be today that maybe I could rebind the Hide UI key to something other than tab. I don't know how many times I've been just trying to tab through some fields in the UI, only to have it hide the the UI instead of tabbing to the next field. I just figured this was the way things were in SP. But today I found that Hide UI can be rebound to any other key binding, and upon doing so, tabbing through UI fields works great.

So the question is, why was Tab chosen as the default key binding for hiding the UI? I would assume that a huge majority of users would expect Tab to function in SP the same way it tends to function in almost any other program that has navigable fields. Yet by default it does not.

For the sake of new users, could you consider changing the default Hide UI key so something else, so that it doesn't clobber the completely functional and nice field navigation that you've build into SP?

In my library, it seems that all SBS files are previewed with a nice spherical 3D preview, while SBS just shows what appears to be the baseColor of the substance. Is this an option I can change somewhere? Ideally I'd have 3D previews for SBSAR as well as SBS.

Please see the attached image. This is part of the results I get when searching for "brick" in Substance Designer. The same file shows up twice, once as a "compiledgraph", with a nice preview, and again as an "sbsar", with no preview other than a big "S".

Is it possible not to show those "S" sbsars? They basically double the number of things in my search results, and they don't have a preview of the material. (Why is that, by the way? It seems like SBSARs would have previews in Designer...)

I tried creating a filter, at least, to only show my "compiledgraphs", but I don't see any way to filter by extension.


I'm trying to create a texture I'll use as a cracked glass decal in my game. I'm trying to create the effect of an object having hit the glass, creating a spider-web fracture.


Does anyone know of any guides or tutorials that might walk me through something like this? I've tried playing around with some noise patterns, but I don't see how to get lines to come out of a center point, with occasional other perpendicular lines connecting those lines, or how to increase the line density towards the center where it's more cracked.


If I "Expose" given property of a node, and that property already has a Label, that same Label will be used on the Input Parameter that gets generated. This is annoying, as I'm almost always having to copy/paste the ID into the Label for all the new parameters I create. Instead, the ID/Name that I enter for the new exposed Input Parameter should be used for the Parameter's Label.

For example, I drag a material "Glossy Paint" into my graph. It has a property "Paint Roughness" that I want to expose in my material. So I expose it, but this roughness is for my "border color", so I call the exposed parameter "Border Roughness". Now I go over to the list of Input Parameters for my substance, and the first thing I see is "Paint Roughness", not "Border Roughness". Expanding the parameter, I see that the Identifier for the input is named "Border Roughness", as I entered. But the Label is "Paint Roughness".

Again, instead of keeping the Label from the original property, it should be set to be the same as the ID. Or at least give a (defaultable) option on the Expose Parameter dialog to apply the ID to the Label as well.

What's the trick to getting GetGeneratedTextures() to work? Here's my code:

Code: [Select]

var textures = myGraph.GetGeneratedTextures();
Debug.Log($"{textures.Count} textures");

Despite the graph having outputs that I can see in the inspector, GetGeneratedTextures() always returns 0 items. Am I not using it correctly?

This occurred under Unity 2018.2.14 using Plugin 2.1.

The attached crash report shows it occurring at:

Substance.Engine.dll caused an Access Violation (0xc0000005)
  in module Substance.Engine.dll at 0033:558d24e8.

The line of code in my project it's apparently complaining about is:

DecalGraph.SetInputString("Text", Text);

This is being called in OnValidate in the Editor. However, the same crash occurs if I call this via a simple Inspector button after having previously just modified and Apply'd the SBSAR.

It doesn't seem to matter what input I set. This is the stack trace when I try to set a Float instead:

C++ Error in InsertNumericValuesIntoArray(), invalid Substance input identifier: 'Font_Size'!
UnityEngine.DebugLogHandler:Internal_Log(LogType, String, Object)
UnityEngine.DebugLogHandler:LogFormat(LogType, Object, String, Object[])
UnityEngine.Logger:Log(LogType, Object)
Substance.Game.NativeCallbacks:csharpLogCallback(Int32, String)
System.Object:wrapper_native_00007FF8558D4F10(IntPtr, String, Single[], UInt32)
System.Reflection.MonoMethod:InternalInvoke(MonoMethod, Object, Object[], Exception&)
System.Reflection.MonoMethod:Invoke(Object, BindingFlags, Binder, Object[], CultureInfo)
System.Reflection.MethodBase:Invoke(Object, Object[])
Substance.Game.NativeFunctionsShared:cppSetInput_Float(IntPtr, String, Single[], UInt32)
Substance.Game.NativeFunctions:cppSetInput_Float(IntPtr, String, Single[], UInt32)
Substance.Game.SubstanceGraph:SetInputFloat(String, Single)
GraviaSoftware.Gravia.Code.Controllers.Decals.StaticDecalTextController:RefreshTextures() (at Assets\Code\Controllers\Decals\StaticDecalTextController.cs:64)
GraviaSoftware.Gravia.Code.Editor.StaticDecalTextControllerEditor:OnInspectorGUI() (at Assets\Code\Editor\StaticDecalTextControllerEditor.cs:16)

Even though it claims it is complaining about a property "Font_Size", that property definitely exists in my Graph, and this method work properly as long as I haven't just Apply'd the graph in the inspector.

More on this. Here's some code I'm calling in a script to display the properties of the graph:

Code: [Select]
            var sb = new StringBuilder();
            foreach (var prop in myGraph.GetInputProperties())
                sb.AppendLine($"Prop: {} - {prop.type}");
            Debug.Log($"Properties: {sb.ToString()}");

If I open Unity fresh, and call this method via a button in the Inpsector, I get the full list of all properties of the graph. If I then edit the graph and press Apply, then call this again, I get an empty list.

So what's going on when pressing Apply that causes so many values to be missing? The only way I can "Fix" the graph is to enter Play mode and then exit. Then I can iterate over the list of graph properties again. Even then, some of the time, when doing that, I get this error in my console:

OutOfMemoryException: Out of memory
 at (wrapper managed-to-native) System.Object.__icall_wrapper_ves_icall_array_new_specific(intptr,int)
 at Substance.Game.NativeTypes.GetNativeInputs (Substance.Game.SubstanceGraph graph, System.Int32 pNumInputs) [0x00000] in <a7f324179b874bf6be743a4296b96d4e>:0
 at Substance.Game.SubstanceGraph.GetInputProperties () [0x0000c] in <a7f324179b874bf6be743a4296b96d4e>:0
 at GraviaSoftware.Gravia.Code.Controllers.Decals.StaticDecalTextController.RefreshTextures () [0x0000e] in C:\Users\Dan\Documents\GitHub\Gravia\Assets\Code\Controllers\Decals\StaticDecalTextController.cs:61
 at GraviaSoftware.Gravia.Code.Editor.StaticDecalTextControllerEditor.OnInspectorGUI () [0x0002d] in C:\Users\Dan\Documents\GitHub\Gravia\Assets\Code\Editor\StaticDecalTextControllerEditor.cs:16

The quick version: If I start working on painting an FBX, then later scale the FBX and reimport it into Substance Painter, all Masks will also be scaled, despite UV maps not changing. This seems really surprising to me, as the masks are based on the UV map, which hasn't changed.

Here's a simple way to demonstrate this:

1. In Blender (or whatever program), start a new project. A simple cube is fine. Unwrap the cube, and export the FBX.
2. Bring the FBX into Substance Painter.
3. Add a Fill layer, then add a "black mask" to that layer.
4. Paint somewhere on the mask, allowing some of the fill to show. Save the project.
5. Return to Blender, and scale the object down (say .75 on each axis.) Apply the scale change. Note that we haven't adjusted the UV map. Feel free to unwrap the object again, but uniform scaling shouldn't change the UV map.
6. In Substance Painter, reimport the FBX into that same project.

You may not need to turn on/off the fill channel before you see the result, but you should now observe that the mask contents appear to have been scaled, despite the UV maps not having changed. This bug means that resizing an object has a very destructive effect on the Substance Painter project, even if the UVs are identical before and after.

The two attached screenshots show a Before and After. In the Before, I've put a triangle in the mask. I then scaled the FBX up to 3 on each axis, applied the scaling, and reimported it. The After shows that the triangle is now tiny, even though the UV map hasn't changed.

I must be missing something simple. How do I copy/paste a color in the UI? There doesn't seem to be any way to do it, other than to copy/paste the individual RGB values one at a time.

SP has a bunch of Hard Surfaces, which are mainly used to imprint height/normal into a surface. But I often find I want the affect the color (or other channels) when using these kinds of features. For example, if adding screws to an object, the color/roughness/etc would be a different color than the surface.

But as far as I can tell, there's no way for the Hard Surface's dimensions to control anything but the Normal's shape. This results in something like the attached image, where the normal looks like a screw, but all the other channels are the shape of the brush. In my example, I want the brush to follow the shape of the Hard Surface. In this case, a hex, but each Hard Surface has a different shape.

So how do you go about doing this? Or how do you all use Hard Surfaces to add details that affect more than just the normal?

I've always created Substances that have a single output node for each type of output (base color, ao, metallic, roughness, etc). But what if I create a combined output, where metallic goes in the "r" channel, ao goes in the "g" channel, etc. The 3D view doesn't seem to show a correct preview when I do this.

Is there a way to get the 3D View to pull individual channels of a texture? I've already tried adding multiple "usaged" to my combined texture, but 3D view doesn't seem to pick it up. For example, in this attached screenshot, why doesn't the 3D view use the "r" channel of this output for metallic?

I understand that the Tab key toggles fullscreen mode. However, there are times when it should not. For example, when editing a color, and trying to enter the individual R, G, and B field values, it's intuitive to press Tab to move to the next field. But doing so here will toggle full screen rather than move to the next field.

In the color picker, I don't see a way to simply copy/paste a single hex color, in order to quickly set multiple colors to the same color.

I've started switching over to using HDRP in Unity. (However, note that this is not a question about integrating with Unity.)

The big difference with HDRP, in terms of Substance Designer, is that the HDRP workflow expects a new Mask Map texture, which combines Metallic, Smoothness, AO, and Detail into a single texture. This page explains how to set that up:

However, upon doing this, I no longer get an accurate 3D View preview of my material, as the Metallic and Smoothness outputs no longer exist. How can I adjust the 3D View settings to have it pull the R channel from my MaskMap, and treat it as the Metallic channel, etc?

I tried clicking the "Add" button in the Material dropdown of the 3D View. However, it simply asks me to name the new material, but then nothing happens after. Is there a way to map the MaskMap output into the typical single-output channels for the purposes of previewing?


I have an SBS file that contains multiple graphs. I'll call them G_01, G_02. If I publish an SBSAR and bring it into Unity, I see the two graphs, and corresponding materials. All good. However, if I return to Substance Designer and add a new graph to the the substance (let's call it G_03), and republish the SBSAR, I can't get Unity to show me G_03. I've tried reimporting the SBSAR in Unity, and refreshing everything, but aside from deleting the SBSAR and adding it to the project again, I can't get "G_03" to show up in Unity.

Pages: 1 [2] 3