Sorcar - Procedural modeling in Blender using Node Editor

Seems like a bug. Can you post a screenshot of your node network?

I’ve updated the release and removed the “.” in folder name (merged the alpha branch to master).
Latest Release (v3.1.0): https://github.com/aachman98/Sorcar/releases/tag/v3.1.0

Yeah, sorry about the zip file. I had merged the older branch with that name, so it was carried forward. The repo is updated with the latest build and correct versioning.

Yes, it is a sub-option in “Select All” node:
Screenshot%20from%202019-11-08%2006-08-25

4 Likes

Here you go @aachman98, scrubbing the timeline creates copies of the object.

In the second node tree when I add the current frame into a Select by Index node that Realtime playback instantly stops working and I have to remove Sorcar then reinstall it for realtime update of the Scene Node to work again.

Thanks again for your hard work.

One quick question, is it a technical limitation that the value of the nodes cannot be keyframed?


1 Like

Thanks for the screenshot. It is the Torus input node that is causing the problem (that’s why the code was commented in v2). I’ve opened an issue for it: https://github.com/aachman98/Sorcar/issues/66

Have you saved the preferences with Sorcar enabled by default? If so, then it is a known bug. It is not caused by “Torus” or “Select by Index” node though.

Probably not… I haven’t really tried to make a property animatable.
I’ll run some tests later and see if they can be keyframed and they also update the mesh accordingly.

3 Likes

I realise many people will use Sorcar for modelling but I think it could be really useful for motion graphics. It’s so easy to make complex abstract objects and with parameters that can be keyframed Sorcar will be an incredibly powerful Mograph tool.

Thanks again.

3 Likes

Would something like this be possible with Sorcar?

1 Like

Length, width, bevel amount of the book cover and the number of pages (random colour as well) can be done, but turning the pages is probably out of reach. I’ll see if the curve editor can be included in a node layout (not supported by API directly, afaik). Dynamics is out of question at the moment because the mesh is regenerated at every execution, so neatly aligning the pages on top of one another would be very difficult to do just by using maths (maybe gaussian distribution would help).

1 Like

Available on Itch now!

1 Like

I don’t think there’s dynamics involved in the pages. Looks more like a curve deform or bend modifier that’s changing its radius based on page position (and a second bend for curving the pages to have them lie flat). But just offsetting the radius and calculating the proper bend angles should take care of the pages landing on top of each other.


Used a wave modifier (only on x axis) on a subdivided plane
Scattered it onto an array of primitive planes in z direction

I guess it’s a start…
EDIT:
The pages need to start from a single point though.

That looks like more chaos than necessary… in that book rig I only see two bends - one for the main bend of each page (with a bigger radius the further on the inside the pages are - depending on towards which side you open the book) and a second bend for the curl back up to have the ends of the pages lie flat. The only randomization I see is in the size of the pages (and a twist in the pages when they are “loose”, but that gets faded out once they reach either the next or previous page).

Rolling of the book’s spine is another thing - basically you need to move the pivot of the spine to either end of the spine, depending on where you “roll” the book to. Could probably be solved with a “if rotation of the book is >1 place pivot on the right, else place it on the left”, but I’m not familiar enough with Sorcar yet. At least having the book covers touch the “table” would now just be a pythagoras thing.

By the way, would it be possible to add another version of the if/else node, which has one input of the current flow (left), and two outputs for the two possible conditions and how to continue the flow (on the right)? Sometimes you don’t want two conditions as an input, but two results as an output…

The 3.1 release is looking very good and so far very stable. I’ve found the bug regarding Node frames. I use them to keep graph clean, and 3.1 gives me this error:

Other than that, great stuff all around. I would love UV transform node, but maybe I’ll try to implement it myself.

Thanks for all the hard work

1 Like

Thanks for the continued effort on developing this! It’s really shaping up to be great!

A question, I am using an array node and sedding vec x to a value of 0.67519. The preview number shows 0.7 in one place, then the number show 0.68. If u double click to edit the number, it shows the full value that i’ve input.

I am wondering if it would be possible to set precision rounding somewhere in the settings to however decmial places is required?

How would one go into incorporating a lattice modifier at the moment? I see that there isn’t yet access from with sorcar, so I tried creating an initial mesh with some nodes and previewed the last node then created a regular lattice modifier on top of the object. however, if i change any settings in sorcar, the lattice modifier gets erased.

Also, if i input a custom object with a lattice modifier and try to do component mode operators, it disregards the lattice modifier at the moment. Perhaps, there should be an “apply modifier” node?

Also, this can be quite a lot of fun. Amazing how much control with how few nodes.

Bug

I am experincing a strange bug where if I select an object and feed into Sorcar, sometimes when I change a setting in the node tree, the object somehow gets deleted.

I am seeing that bug too @dimitarsp.

An idea I had, though I don’t know if it’s actually doable (or wanted):

Each time a new nodetree is created, an Empty is added to the scene at 0,0,0 which acts as the parent to this nodetree. Moving, rotating and scaling this empty will move/rotate/scale everything the nodetree generates, as if everything was linked to this Empty (basically offsetting its entire coordinate system). The Empty itself might have a custom parameter for offsetting its origin, in case you don’t want it to be 0,0,0. Duplicating this Empty will also create a copy of the nodetree, which in turn is then linked to his new Empty.

Adding to that a new node-type is added called an ExposeNode, which lets you select if it’s a slider, value spinner, button, etc., including settings for min and max value, default value and possibly a remapping of this value range. The node has an ouput that can feed into any value input (or boolean, in case of a button) of other nodes. Each ExposeNode will automatically add an entry to the custom parameters (modifier panel) of the Empty for this nodetree.

This way you can define which parameters of the nodetree should be visible to the artist, without the necessity to open the node editor. Furthermore whatever the nodetree creates can be freely placed in the scene by transforming the Empty.

Now, if only I could code :smile:

@aachman98 did Jaques Luecke had a look on it and gave feedback on this?

Since these nodes are traversed from right to left, it may not be possible. Can you think of any situation where you need to use branching and the same value is passed to both cases?

The only reason I set the precision to 1 dec place is because of the Value(…) label. I’ll see if it can be controlled in runtime.

I guess a “Lattice Modifier” node will do the trick. Will add it to the list.

Using Custom Mesh node?

Reminds me of the UE4 Blueprint actors! :smiley:
What you propose is actually a good workflow (a nodetree for every procedural object), but Blender API has its limitations. Callbacks are still not fully supported and it would be really difficult to constantly monitor the user’s actions.
And speaking of exposing parameters, it might just be possible with the introduction of variables. You will be able to set values from one nodetree and access them from another. Adding it to the Modifier list is, however, impossible using addons. Maybe exposing all the variables in a pre-defined layout (like N-panel) might be useful.

It is starting to look like it… :slightly_frowning_face: I tried a couple of methods to implement keyframes but none worked. Hoping to bump into something in the future, but for now you’ll have to manage it using Scene Info node.

He did, and he found it enjoyable to use :grinning:. He was of the opinion that I should contact William Reynish (Blender UI designer) and let him know about this (which I will do sometime this week). The node designs of Sorcar are also similar to the planned UI for EverythingNodes:
https://developer.blender.org/T67088
(and speaking of design, I must say these are some awesome mockups for EN project!)

But, he also mentioned that this addon needs to be integrated to internal dependency graph, which cannot be done using python api (he faced similar issue in development of AnimationNodes). I totally agreed with him when he said that the procedural modelling solution should directly interface with it. Hopefully this becomes possible in future blender releases so that nodes no longer feel as a separate entity.

P.S. Keeping my fingers crossed for this :heart_eyes::

4 Likes

Regarding the “node tree linked to an empty” idea, wouldn’t this basically be possible by adding the pos/rot/scale of the empty to all transformation values that reach the end of the tree? Maybe a “scene anchor” node, where you just pick an object from the scene for this. But of course, this is easy to propose :wink:

Yes, using the custom mesh node

Oh yeah, I gonna keep my fingers crossed SO HARD.

2 Likes