458 Commits over 245 Days - 0.08cph!
Removed unreachable code, should pass tests now
Improved Asset Browser search, now space delineated and has subtractive filter. Resolves Facepunch/sbox-issues#7696
https://files.facepunch.com/CarsonKompon/2025/February/20_17-02-LinenTermite.mp4
Subgraph outputs can be re-ordered based on the order of the list as well as a "Priority" property to override. Part of Facepunch/sbox-issues#7687
Priority value on IParameterNodes influence the order that inputs are created on Subgraph Nodes. Resolves Facepunch/sbox-issues#7687
Added CodeEditor.CanOpenFile. Don't show "Jump to Code" on internal Components/Assets/Properties. Resolves Facepunch/sbox-issues#7579
Added CursorShape.Finger to DropdownControlWidget. Resolves Facepunch/sbox-issues#7681
Add CursorShape.Finger and hover effects to ControlSheetGroup
Add Right Click -> Jump to Code for ToggleGroups. Resolves Facepunch/sbox-issues#7630
Add NodeResultType and new constructor for NodeResult that takes NodeResultType. Resolves Facepunch/sbox-issues#7684
Added Search Bar to Editor Keybinds, moved Reset to Default outside of the scrollbox, and gave bind FixedWidth to prevent alignment issues. Resolves Facepunch/sbox-issues#7643
Editor Keybinds now have alternating background colors and improved margins
https://files.facepunch.com/CarsonKompon/2025/February/18_17-10-ProbableHarrierhawk.mp4
Added negative (-) operator for Vector3Int. Resolves Facepunch/sbox-issues#7637
Added Vector3Int * Rotation operator. Resolves Facepunch/sbox-issues#7636
Fixed properties with AssetPathAttributes not opening the correct AssetPicker and not always loading the Cloud Browser tab. Resolves Facepunch/sbox-issues#7666
Fix the CloudBrowser infinite scrolling only working in List View.
Added `ClothingContainer.PrefersHuman`. Switching to the human character on the Main Menu will toggle this option and save to your avatar.
GraphCompiler no longer throws error when multiple NodeErrors occur on the same node in Shadergraph
Replace GraphCompiler.NodeStack with GraphCompiler.InputStack to prevent Circular Reference detection when a node is being re-referenced through a different input.
Use `FileWatch.SuppressWatchers` to prevent error spam while downloading library files.
Only download new/changed files when updating a Library, delete any that no longer exist, and download files in parallel.
LibraryDetail version now updates the ComboBox upon downloading a new version of the Library. Resolves Facepunch/sbox-issues#7669
Can now use multiple of the same subgraph with different values without it attempting to cache values from the other node of the same type. Also tracks nested nodes with their own cache so it's still optimized.
Don't serialize NodeInput.Subgraph since the field is only needed during the compilation process.
Fix connections to Result node not always serializing in ShaderGraph
Use correct PropertyInfo when generating Result inputs
Use DisplayName for DisplayInfo in Result node
ShaderGraph result node only shows the inputs that are actually used for the current Shading Model/Domain
https://files.facepunch.com/CarsonKompon/2025/February/10_11-10-LightskyblueRabbit.mp4
Add [JsonIgnore] to anything that would cause recursion during serialization in EditorTool
Fade out Node Graph grid when zoomed out far enough. Resolves Facepunch/sbox-issues#7486
SubgraphNode now instantly hotloads inputs/outputs on recompile of the references subgraph. Resolves Facepunch/sbox-issues#7526
Dragging an image into a ShaderGraph will automatically create a Texture2D node. Resolves Facepunch/sbox-issues#7547
Don't try to apply PositionOffset during PS phase in GraphCompiler
Another potential VoiceComponent fix for Facepunch/sbox-issues#7450
Revert commit a6f4d1d0dcdda5da45be89b9ece67c21f18e9901 for now since that wasn't the correct solution
Dispose SoundStream in VoiceComponent when finished. Facepunch/sbox-issues#7450
Remove TypeKey from EditorShortcuts and use Type instead of string as key.
EditorShortcuts will now resolve shortcuts in parent classes. Resolves Facepunch/sbox-issues#7531
Simple AssetPicker displays Cloud Assets in a separate tab by default (with the option to combine them like it used to be). Show Cloud Assets is set to true by default so you can set Cloud Assets for anything called from native (like material/modeldoc)
https://files.facepunch.com/CarsonKompon/2025/February/05_16-10-CoarseTasmaniandevil.mp4
Remove Parameter.GetDefaultValue() and grab the current value as the default value
Fix Default Color Editor in Subgraph Node Properties
Subgraph Node ColorEditors are now bound to the defaults properly
Shader Graph Functions (Sub-Graphs) (#1806)
- Adds a new Asset type with `.shdrfunc` extension.
- Shader Functions do not have the "Material" node as their final output node. Instead they have a "Result" node which has a variable amount of inputs defined by the user
- You can change the preview type of a Function Output so the value can be previewed while working on it
- Dragging a `.shdrfunc` file into a Shader Graph (or a subgraph) will create the subgraph node
- When "Add To Node Library" is set to `true` on a Shader Function it will be added to the Right Click -> Create menu
- Double Clicking on a Shader Function Node will open the Shader Function
- GraphCompiler now keeps track of the current Subgraph stack when compiling the preview and the output code, fully supports subgraphs within subgraphs.
- Constant nodes now have a "Preview" input when you're in a Shader Function
- Can Right Click -> Create Custom Node with a bunch of nodes already selected to instantly create a Shader Function. Will automatically create all the input parameters and result outputs.
- Texture Parameters/Attributes are fed the whole way up from each nested subgraph since you cannot define a default texture in the `.shader` file.
- Subgraph Nodes are now colour-coded Green and Result nodes are now colour-coded Blue
https://files.facepunch.com/CarsonKompon/2025/January/28_18-05-OddAsiantrumpetfish.mp4
Added BaseNode.OnFrame, moved hashcode check in FunctionResult out of OnPaint
Moved DirectoryMetadata from Project Cookies to Project Config folder. Metadata is only saved when changes are made instead of saving a bunch of default values that are identical.
If folder metadata isn't found, check ProjectCookie for legacy data
Invert Ladder climbing controls when looking down (just like half-life)
Forgot to save last change before commit 🤦
Fix drop-shadow css filter appearing cutoff at 0px blur
Fixed ui_dropshadow shader appearing transparent at 1px blur and drop shadow not rendering at 0px blur. Resolves Facepunch/sbox-issues#7438
Add ShaderGraph.IsSubgraph and add "Shader Sub-Graph" to the New Asset menu
Shader Sub-Graphs are now saved with the `.shdrfunc` file extension despite being the same asset (just so it can be registered with a different icon and filtered against in the Asset Browser to reduce user confusion)
Give .shader, .shdrgrph, and .shdrfunc assets different colours in the Asset Browser
Don't include BlendMode, ShadingModel or Domain in Subgraphs
Don't include "Material" ShaderNode in the Create Node/Palette menus of Subgraphs. Ensure proper extensions are used when opening the respective file types.
Add PlugInfo and make BaseNode.Inputs and BaseNode.Ouputs virtual.
Added FunctionResult ShaderNode, can only be created in Subgraphs and is created as the default node in newly created Subgraphs
Fix Shader Graph wanting to save/load as sub-graphs
Make sure [Title] attributes are still respected with PlugInfo
FunctionResult can now have a variable amount of inputs of varying types defined by a Dictionary. These are to be used as the outputs of the eventual sub-graph node
Use shader-specific types for FunctionResult Inputs
https://files.facepunch.com/CarsonKompon/2025/January/16_16-02-HumiliatingMorayeel.png
Rename "Inputs" -> "Outputs" on FunctionResult since that's technically more accurate
Instantly update the Result node when Outputs are modified
https://files.facepunch.com/CarsonKompon/2025/January/16_16-18-WarmIncatern.mp4
FunctionResult node will produce Errors preventing compilation
https://files.facepunch.com/CarsonKompon/2025/January/16_16-48-VictoriousBrownbutterfly.png
Fix NRE when attempting to save with unresolved errors
Guarantee IsSubgraph is set properly from the ShaderGraph window
Only Update FunctionResult.Inputs when necessary instead of when accessed.
Add PlugInfo.GetInput() and serialize PlugInfo.Name as the property name instead of display name
Fixed NRE when FunctionResult name is left null
Subgraphs no longer attempt to generate a .shader file, and will run error checks in the graph on Save
FunctionResult Inputs now maintain connections upon being regenerated
FunctionResult node generates inputs before creating connections to ensure connections are always deserialized correctly
PlugInfo correctly uses property name if no [Title] attribute
Refactor Result node into an abstract BaseResult class which Result and now FunctionResult can both inherit
You can now specify the preview type for certain Output variables on a Subgraph so changes can be reflected in the Preview window.
https://files.facepunch.com/CarsonKompon/2025/January/21_12-51-DifferentAmericanbulldog.mp4
Can change Preview Blend Mode/Shading Model/Domain in Subgraphs
Implemented all other preview types for FunctionResult
Fix GraphCompiler failing when using Unlit in Subgraphs
Subgraphs have Title, Description, Category, Icon and Add To Node Library properties. To be used for the created node
Added SubgraphNode which references a .shdrfunc. Results in graph errors if the references graph cannot be found or the references graph has errors
Dragging a .shdrfunc asset into a ShaderGraph will create a Subgraph Node referencing the dragged asset
Fix error when deserializing SubgraphNodes
SubgraphNode now uses the Title, Description, and Icon from the referenced Subgraph
SubgraphNode now generates inputs from any Parameter nodes in the subgraph, with default names for any without.
SubgraphNodes now generate output plugs from the FunctionResult node in the references Subgraph
https://files.facepunch.com/CarsonKompon/2025/January/21_16-23-CoordinatedEastsiberianlaika.png
Subgraph "Add To Node Library" adds the subgraph to the Create Node menu so they can be easily accessed.
https://files.facepunch.com/CarsonKompon/2025/January/21_16-51-HardVampirebat.mp4
Double Clicking a Subgraph Node instantly opens the Subgraph
Implemented the file history forward and back buttons when navigating through multiple ShaderGraphs in the same window
https://files.facepunch.com/CarsonKompon/2025/January/21_18-29-MidnightblueSandbarshark.mp4
Add [Hide] to TextureCoord.Title override
Minor MainWindow refactor so .shdrgrph files arent recognized as Sub-Graphs mistakenly
Prompt to save current graph (if dirty) when pressing the Forward/Back/Home buttons
Created ITextureParameterNode and started custom inpsector editor for when texture samplers are present
Custom Subgraph Nodes now detect sampled textures and allow you to change them as properties
Display Default Values on unconnected inputs of Subgraph Nodes
https://files.facepunch.com/CarsonKompon/2025/January/22_15-34-AnyAllensbigearedbat.png
Fix NodeResult shader compile error
Slight refactor to BaseNode.CreateEditor
Added IParameterNode.GetRangeMin and GetRangeMax. Parameter Nodes have "CanEditOnNode" instead of "IsAttribute" when in a subgraph. Determines whether or not an inline editor is created on the node
Use SubgraphNode.InputReferences when creating the DefaultEditor and drawing the default Plug Value
Ensure that inline DefaultEditors for subgraphs grab the UI.Step value for sliders
Make Color Editor works with SubgraphNodes
Remove debug log
Replace ParameterNode.CanEditOnNode with ParameterNode.IsRequiredInput since thats a bit more user-friendly
Don't include inline editor when UI.Type is set to Default
Default values of subgraphs are now editable via Properties if not a required input
Custom subgraph nodes now produce errors when required inputs are left without connections
https://files.facepunch.com/CarsonKompon/2025/January/23_11-38-RudeFattaileddunnart.png
Make sure errors are also displayed in Subgraphs
ShaderGraph GraphCompiler can now resolve the results of Subgraph nodes (only in a few cases at the moment)
GraphCompiler now resolves nodes referenced in NodeResult.Func outputs when in subgraphs appropriately
Fixed nesting issues with GraphCompiler and subgraphs
GraphCompiler will now resolve inputs for parameters within subgraphs
Make sure DefaultEditor draws the correct Default Value
GraphCompiler now pulls the Default Value set on a SubgraphNode if input has no connection
Fix infinite loop when saving some graph configurations
Cleanup GraphCompiler.Result() and remove debug logs
Fix DefaultEditor NRE
Label default properties as "Default {x}"
Fix Subgraph preview not compiling properly after new changes to GraphCompiler
Make sure Result node returns default values when evaluating material/pixel output
Ensure all variables/attributes are defined properly by changing some order. Fixes shader compile errors.
Fix issues with graph nesting evaluation
Fix attributes from parent graphs not being pulled in all cases.
Do not expose parameters/attributes from subgraphs in final shaders
Fix GraphCompiler pulling the cached input results from other graphs during preview compilation
Add IParameterNode.GetDefaultValue(), used to pre-populate inputs on created sub-nodes
Require input names on subgraphs, error when any are matching. Subgraphs within subgraphs now working as expected
EditorEvent fires whenever a subgraph is updated, reloading any open windows that reference the subgraph
Compile when initially loading a ShaderGraph file so you don't have to save to see the preview
Trying to open a ShaderGraph file that's already open will bring the window to the front instead of throwing a warning
Updating a DefaultValue on a Subgraph node will instantly reflect the changes
Constant nodes now have a "Preview" input in Subgraphs that is used to preview a default value for that input
https://files.facepunch.com/CarsonKompon/2025/January/27_16-57-SociableMilkweedbug.mp4
Hopefully fixed the last of the graph nesting issues. Should support all cases of subgraphs within subgraphs
https://files.facepunch.com/CarsonKompon/2025/January/27_18-37-PessimisticTuatara.mp4
Remove all the debug logs
ParameterNodes in a Subgraph without a name will be treated as constants and will not be exposed as inputs
TextureParameterNodes throw errors for name conflicts
Nested ITextureParameterNodes are resolves properly. Textures are now saves with DefaultValues in SubgraphNode.
Can now Right Click -> Create New Node from a selection of nodes to create a Subgraph (similar to ActionGraph)
https://files.facepunch.com/CarsonKompon/2025/January/28_12-16-PortlyKid.png
Right Click -> Create Custom Node now creates the newly created subgraph node in-place and re-assigns all the connections
https://files.facepunch.com/CarsonKompon/2025/January/28_15-03-HumiliatingPlatypus.mp4
Ensure all input fields are generated properly when doing Right Click -> Create Custom Node
Create Custom Node will no longer create duplicate inputs when multiple nodes within share the same one input
Remove some debug stuff
Don't show "Create Custom Node" when selection includes a function or material output node
Filter out certain nodes from GetRelevantNodes so they can't be created from Right Click Menu
Subgraph Nodes are green to establish a language that they are user-defined functions that can be clicked into.
Result Nodes (the final output nodes) are color-coded blue.
https://files.facepunch.com/CarsonKompon/2025/January/28_16-22-ThornyConch.png
Remove final leftover debug log
Remove hacky check that isn't even required anymore
Don't use `object` type for Result nodes. Use `NodeInput` and `NodeResult`
Move FunctionResult-specific material output code to FunctionResult
ShaderGraph Reroute Nodes now preserve the input type correctly. Resolves Facepunch/sbox-issues#7466
Prevent Reroute Nodes from creating circular reference errors where none existed
Asset Browser no longer deletes a folder when renaming it to the same thing. Also allows you to rename the folder to the same name with different capitalization. Resolves Facepunch/sbox-issues#7464
Remove unused function in Connection
Clicking and Dragging a PlugIn will allow you to easily re-plug it instead of trying dragging out another input when it can only have one. Works in ShaderGraph + ActionGraph. Resolves #1525
https://files.facepunch.com/CarsonKompon/2025/January/31_11-34-EachSnowyowl.mp4
GraphCompiler will now detect circular references and present an error instead of hard crashing. Resolves Facepunch/sbox-issues#7470
https://files.facepunch.com/CarsonKompon/2025/January/31_10-42-HurtfulPig.mp4
Can now move the handle on grid-aligned wires properly in ShaderGraph. Resolves Facepunch/sbox-issues#7474
Remove hacky check that isn't even required anymore
Remove final leftover debug log
Add ShaderGraph.IsSubgraph and add "Shader Sub-Graph" to the New Asset menu
Shader Sub-Graphs are now saved with the `.shdrfunc` file extension despite being the same asset (just so it can be registered with a different icon and filtered against in the Asset Browser to reduce user confusion)
Give .shader, .shdrgrph, and .shdrfunc assets different colours in the Asset Browser
Don't include BlendMode, ShadingModel or Domain in Subgraphs
Don't include "Material" ShaderNode in the Create Node/Palette menus of Subgraphs. Ensure proper extensions are used when opening the respective file types.
Add PlugInfo and make BaseNode.Inputs and BaseNode.Ouputs virtual.
Added FunctionResult ShaderNode, can only be created in Subgraphs and is created as the default node in newly created Subgraphs
Fix Shader Graph wanting to save/load as sub-graphs
Make sure [Title] attributes are still respected with PlugInfo
FunctionResult can now have a variable amount of inputs of varying types defined by a Dictionary. These are to be used as the outputs of the eventual sub-graph node
Use shader-specific types for FunctionResult Inputs
https://files.facepunch.com/CarsonKompon/2025/January/16_16-02-HumiliatingMorayeel.png
Rename "Inputs" -> "Outputs" on FunctionResult since that's technically more accurate
Instantly update the Result node when Outputs are modified
https://files.facepunch.com/CarsonKompon/2025/January/16_16-18-WarmIncatern.mp4
FunctionResult node will produce Errors preventing compilation
https://files.facepunch.com/CarsonKompon/2025/January/16_16-48-VictoriousBrownbutterfly.png
Fix NRE when attempting to save with unresolved errors
Guarantee IsSubgraph is set properly from the ShaderGraph window
Only Update FunctionResult.Inputs when necessary instead of when accessed.
Add PlugInfo.GetInput() and serialize PlugInfo.Name as the property name instead of display name
Fixed NRE when FunctionResult name is left null
Subgraphs no longer attempt to generate a .shader file, and will run error checks in the graph on Save
FunctionResult Inputs now maintain connections upon being regenerated
FunctionResult node generates inputs before creating connections to ensure connections are always deserialized correctly
PlugInfo correctly uses property name if no [Title] attribute
Refactor Result node into an abstract BaseResult class which Result and now FunctionResult can both inherit
You can now specify the preview type for certain Output variables on a Subgraph so changes can be reflected in the Preview window.
https://files.facepunch.com/CarsonKompon/2025/January/21_12-51-DifferentAmericanbulldog.mp4
Can change Preview Blend Mode/Shading Model/Domain in Subgraphs
Implemented all other preview types for FunctionResult
Fix GraphCompiler failing when using Unlit in Subgraphs
Subgraphs have Title, Description, Category, Icon and Add To Node Library properties. To be used for the created node
Added SubgraphNode which references a .shdrfunc. Results in graph errors if the references graph cannot be found or the references graph has errors
Dragging a .shdrfunc asset into a ShaderGraph will create a Subgraph Node referencing the dragged asset
Fix error when deserializing SubgraphNodes
SubgraphNode now uses the Title, Description, and Icon from the referenced Subgraph
SubgraphNode now generates inputs from any Parameter nodes in the subgraph, with default names for any without.
SubgraphNodes now generate output plugs from the FunctionResult node in the references Subgraph
https://files.facepunch.com/CarsonKompon/2025/January/21_16-23-CoordinatedEastsiberianlaika.png
Subgraph "Add To Node Library" adds the subgraph to the Create Node menu so they can be easily accessed.
https://files.facepunch.com/CarsonKompon/2025/January/21_16-51-HardVampirebat.mp4
Double Clicking a Subgraph Node instantly opens the Subgraph
Implemented the file history forward and back buttons when navigating through multiple ShaderGraphs in the same window
https://files.facepunch.com/CarsonKompon/2025/January/21_18-29-MidnightblueSandbarshark.mp4
Add [Hide] to TextureCoord.Title override
Minor MainWindow refactor so .shdrgrph files arent recognized as Sub-Graphs mistakenly
Prompt to save current graph (if dirty) when pressing the Forward/Back/Home buttons
Created ITextureParameterNode and started custom inpsector editor for when texture samplers are present
Custom Subgraph Nodes now detect sampled textures and allow you to change them as properties
Display Default Values on unconnected inputs of Subgraph Nodes
https://files.facepunch.com/CarsonKompon/2025/January/22_15-34-AnyAllensbigearedbat.png
Fix NodeResult shader compile error
Slight refactor to BaseNode.CreateEditor
Added IParameterNode.GetRangeMin and GetRangeMax. Parameter Nodes have "CanEditOnNode" instead of "IsAttribute" when in a subgraph. Determines whether or not an inline editor is created on the node
Use SubgraphNode.InputReferences when creating the DefaultEditor and drawing the default Plug Value
Ensure that inline DefaultEditors for subgraphs grab the UI.Step value for sliders
Make Color Editor works with SubgraphNodes
Remove debug log
Replace ParameterNode.CanEditOnNode with ParameterNode.IsRequiredInput since thats a bit more user-friendly
Don't include inline editor when UI.Type is set to Default
Default values of subgraphs are now editable via Properties if not a required input
Custom subgraph nodes now produce errors when required inputs are left without connections
https://files.facepunch.com/CarsonKompon/2025/January/23_11-38-RudeFattaileddunnart.png
Make sure errors are also displayed in Subgraphs
ShaderGraph GraphCompiler can now resolve the results of Subgraph nodes (only in a few cases at the moment)
GraphCompiler now resolves nodes referenced in NodeResult.Func outputs when in subgraphs appropriately
Fixed nesting issues with GraphCompiler and subgraphs
GraphCompiler will now resolve inputs for parameters within subgraphs
Make sure DefaultEditor draws the correct Default Value
GraphCompiler now pulls the Default Value set on a SubgraphNode if input has no connection
Fix infinite loop when saving some graph configurations
Cleanup GraphCompiler.Result() and remove debug logs
Fix DefaultEditor NRE
Label default properties as "Default {x}"
Fix Subgraph preview not compiling properly after new changes to GraphCompiler
Make sure Result node returns default values when evaluating material/pixel output
Ensure all variables/attributes are defined properly by changing some order. Fixes shader compile errors.
Fix issues with graph nesting evaluation
Fix attributes from parent graphs not being pulled in all cases.
Do not expose parameters/attributes from subgraphs in final shaders
Fix GraphCompiler pulling the cached input results from other graphs during preview compilation
Add IParameterNode.GetDefaultValue(), used to pre-populate inputs on created sub-nodes
Require input names on subgraphs, error when any are matching. Subgraphs within subgraphs now working as expected
EditorEvent fires whenever a subgraph is updated, reloading any open windows that reference the subgraph
Compile when initially loading a ShaderGraph file so you don't have to save to see the preview
Trying to open a ShaderGraph file that's already open will bring the window to the front instead of throwing a warning
Updating a DefaultValue on a Subgraph node will instantly reflect the changes
Constant nodes now have a "Preview" input in Subgraphs that is used to preview a default value for that input
https://files.facepunch.com/CarsonKompon/2025/January/27_16-57-SociableMilkweedbug.mp4
Hopefully fixed the last of the graph nesting issues. Should support all cases of subgraphs within subgraphs
https://files.facepunch.com/CarsonKompon/2025/January/27_18-37-PessimisticTuatara.mp4
Remove all the debug logs
ParameterNodes in a Subgraph without a name will be treated as constants and will not be exposed as inputs
TextureParameterNodes throw errors for name conflicts
Nested ITextureParameterNodes are resolves properly. Textures are now saves with DefaultValues in SubgraphNode.
Can now Right Click -> Create New Node from a selection of nodes to create a Subgraph (similar to ActionGraph)
https://files.facepunch.com/CarsonKompon/2025/January/28_12-16-PortlyKid.png
Right Click -> Create Custom Node now creates the newly created subgraph node in-place and re-assigns all the connections
https://files.facepunch.com/CarsonKompon/2025/January/28_15-03-HumiliatingPlatypus.mp4
Ensure all input fields are generated properly when doing Right Click -> Create Custom Node
Create Custom Node will no longer create duplicate inputs when multiple nodes within share the same one input
Remove some debug stuff
Don't show "Create Custom Node" when selection includes a function or material output node
Filter out certain nodes from GetRelevantNodes so they can't be created from Right Click Menu
Subgraph Nodes are green to establish a language that they are user-defined functions that can be clicked into.
Result Nodes (the final output nodes) are color-coded blue.
https://files.facepunch.com/CarsonKompon/2025/January/28_16-22-ThornyConch.png
Subgraph Nodes are green to establish a language that they are user-defined functions that can be clicked into.
Result Nodes (the final output nodes) are color-coded blue.
https://files.facepunch.com/CarsonKompon/2025/January/28_16-22-ThornyConch.png
Filter out certain nodes from GetRelevantNodes so they can't be created from Right Click Menu