As I have been working on my living room exercise, I have been dividing up the 3D models and their associated .hdr textures, .mat files, and .cal files in a way that I can reuse again in other projects. I would like to share these with the community, but in order to best share, I would like to organise it in the best way for others. If I just sent a bunch of files, it may not be easy to reuse.
Here is an example of a typical project, with one reusable asset I have called cool_chair
:
lib/ # dir to hold all scene assets
lib/cool_chair/ # holds a single asset
lib/cool_chair/obj/ # holds all "objects", e.g. rtm, obj, oct, or source files such as blend files
lib/cool_chair/obj/cool_chair.blend # the source file, if anybody wants to tweak
lib/cool_chair/obj/cool_chair.obj # the baked geometry
lib/cool_chair/obj/cool_chair.rad # radiance mesh primitive, in this case
lib/cool_chair/tex/ # holds all hdr texture files if any
lib/cool_chair/tex/leather.hdr # an example texture
lib/cool_chair/cal/ # holds all cal files if any
lib/cool_chair/ies/ # holds all ies files if any
lib/cool_chair/mat/ # holds one or more mat files for the object
lib/cool_chair/mat/cool_chair.mat # material file
lib/cool_chair/Makefile # provides "make lib" which builds necessary rtm, oct, or whatever files so we don't check these into version control
lib/cool_chair/README.md # asset readme file
lib/cool_chair/LICENSE # asset license file
README.md # project description
Makefile # will provide "make render", which will build everything and start rendering
scene.rif # rad input
scene.rad # this is the main scene file, everything is linked from here
LICENSE # project license file
If I wanted to use cool_chair
in my project, I would copy it into my lib/
dir as shown above, and then add add to scene.rad
:
!xform lib/cool_chair/obj/cool_chair.rad
In this case, we have used the OOTB obj file provided by the asset in lib/cool_chair/obj/cool_chair.obj
. It is possible to customise or re-export the asset object files, or whatever if you need. If cool_chair
comes in different shades of leather, its Makefile
could build things diferently depending on multiple material files in its mat/
directory. If the asset is a particle which needs generation (e.g. grass / leaves / bricks), its Makefile can allow for that by allowing you to generate your own object in its obj/
directory.
This organisation method isolates each asset into its own directory in the lib/
folder. That directory can be copy and pasted verbatim to another project’s lib/
folder and it will retain all licensing information, original geometry source files, material files, and so on. It can be loaded it as a git submodule. You can create branches for modifications.
I find this workflow seems to scale when you have many complex objects in the scene, as it is is grouped primarily by object, not filetype. It also means that without even rendering, anybody looking at the project knows what’s in my scene.
As for the naming of cool_chair
itself, I am currently unsure of the best approach, but I am researching building classification systems and integration with things like IFC, OmniClass, Uniformat, etc, as most Radiance assets I assume would be building object or building entourage.
I would be happy to share my assets in this structure, but would like community feedback and to know what other workflows you’ve developed to know how I can best share assets.