Hi there,
First off, thank you for your hard work on this. After a few attempts I was able to get a scene rendering seamlessly across three machines on my home network. It is not very fast for now, but I may enable manual load balancing to put most of the work on the device with the more powerful GPU than the others.
In a few posts on this site it’s mentioned that image sequences are not packable, and it is recommended that a shared network folder be used to source them for .blend files when rendering.
I’ve recently attempted this but I haven’t been successful. I have, e.g., a network server, FOO, and it has a shared folder on it, FARM. I’ve simply taken the packed .blend file and all of the related assets in this shared folder (the .blend file has always been next to the related assets and uses relative file paths when opening in Blender).
If I open this .blend file on Windows 10, the address is provided as “\\FOO\FARM\my_scene.blend”. I have this image sequence’s file name set to non-relative (since it seems important that CrowdRender recognize that it’s available “on the network”, rather than packed into the .blend file or located relative to the .blend file on the network and imported via relative path). So the File Name shows up as “\\FOO\FARM\assets\images\0000.png”, rather than “//assets/images/0000.png”.
If I mount the same NAS folder on macOS, it is mounted under /Volumes, and the mounted folder itself gives the volume its name. So, when Blender on macOS sees the path “\\FOO\FARM\assets\images\0000.png”, it cannot find the image. In order for it to successfully find the image, it must be pointed to “/Volumes/FARM/assets/images/0000.png”.
In other words, on different platforms, the same network resource is not identified with the same path.
Is there any way around this? I would have hoped using relative paths and putting the assets next to the .blend file on the network share would have allowed CrowdRender to find it, but that doesn’t seem to be acceptable either.
Thank you!
Hi there, firstly apologies for taking so long to post a reply :( but, there is a way around this.
It involves making all paths relative, since you cannot use absolute ones. You'll also need to setup a folder structure on each computer that will serve as a distributed storage area.
Before you start, make sure each computer is not running any Blender processes, either in foreground or background, easiest way to do this is reboot each machine, or you can go looking for Blender processes using a process monitor tool.
The first step is to find a common relative path that works for all your nodes. Crowdrender just so happens to have a folder like this that gets created on all your nodes, so you might as well use this one.
You can find this folder in your user folder, like so
*path to user folder*\cr
there are the following directories inside
cr\logging
cr\client
cr\server
On each render node, the blend file is going to be stored in
\cr\server\*Unique ID for your blend file*\*name of your blend file*
This means that you have a fixed folder structure to work with to place another directory with your assets. So I'd recommend creating the following folders...
\cr\projects\project_name\
\cr\projects\assets
This involves a bit of trickery, we're going to create a relative path that can be used on any of your render nodes that have the same folder structure. Note, it involves saving your blend file into the projects\project_name folder, so obviously replace project name with a name for your project!
All your assets will go in the assets folder, you may wish to create subdirs...
\cr\projects\assets\textures
\cr\projects\assets\models
\cr\projects\assets\HDRIs
\cr\projects\assets\caches
etc
If you haven't already, go ahead and create all these folders, or just the ones you need, up to you. You'll do this first on your client/master machine. Then, go ahead and mount a shared volume that maps to the newly created projects folder. The projects folder should be located in the same place on each machine, which is the \cr folder.
If you've done this correctly, you should be able to see the contents of the \cr folder on your master/client machine from all your other nodes by browsing it from a folder viewer. This is a good check to do first, since it will show up any mistakes or problems before you start getting Blender/crowdrender involved.
Once you're sure you have set things up correctly, its time to migrate your project to use this new setup, since at the moment, your blend file will not be using it.
You'll want to move your image sequence to the \cr\projects\assets\ folder, up to you where you put this :)
You'll then need to move your blend file to \cr\projects\project name\ folder.
Once the folder is moved, you'll then need to open it in Blender, and then replace the image sequence in your scene with the one that is in the \cr\projects\assets location. Make 100% sure that the blend file is using RELATIVE paths! This is crucial for this to work.
Save you blend file. Now start each of your render nodes by opening blender and make sure the crowdrender addon is running properly.
Connect to each node and then do a 'resync'. This will upload the file you just saved that now has a relative path to the blend file that should look like this
//..\..\..\assets\*path to your image sequence*\image sequence files
This tells path will be given to the OS on your render nodes and basically tells the OS to do the following...
starting at the blend file, go up three directories
go into assets
descend into the folder where the image sequence is :P
Reviewing all this
There needs to be a common, relative path to the assets on each machine
This can be achieved by using the already existing \cr folder and adding to it
Adding a subdirectory structure with careful observance to ensure a match of the numbers of levels of directories there are from \cr parent dir to both \cr\server\unique id\blend file and \cr\projects\project name\blend file.
Mapping\mounting of the \cr\projects folder to the location \cr\projects on each render node.
Moving the asset (image sequence) to the \cr\projects\assets\ location.
Editing the blend file to refer to the new location and making sure its using relative paths
Connecting and resyncing the blend file to each render node
At this point, you can try a test render. Note it may take a little longer than it did because now the images must traverse the network at render time. Depending on the size of the file, and how many render nodes you have, there will be an associated time penalty for the render as the images are transferred to each render node.
Hope this helps and please write back if you get stuck :)