Must resist top-posting...
I have to admit a bit of low-level/asset-level bias in my thinking,
which is perhaps natural. Turning that bias on it's head, why not
leap-frog WebDAV and SVN, and go straight to git?
It has every feature you can think of. It's fast and easy to
understand abstraction.
The only down side is that you'd need a web service to make it URL
addressable, and with binary formats the diffs would be larger than
text, and thus the overhead of storing deltas from previous assets
might cause your cache to be twice the size it would be without
version history.
Thoughts?
How often would that be the case in a asset distribution environment?
Just because git allows that doesn't mean can't pick a subset and
enforce that within our toolchain.
We'd put git behind SSH, and if you are not *the* publisher, you don't
get to try and merge A->C. If you're two people within the publishing
house, git complains it can't handle the job, and you have your
publishing tool do a rebase.
> possible with materials/shaders and structured image content like SVG.
> but with meshes and binary images, I don't really see the point.
>
> I think the git discussion may be more helpful with regards asset
> references/containers and metadata, rather than binary hash-indexed
> blobs themselves, which will likely be changed in their entirety if they
> are changed at all. True, we can store diffs here, but I'm thinking on
> an individual file basis, rather than an entire repository.
>
> I would think that versioning of metadata and structure itself may be
> useful in some cases, but even for that, I think the discussion may make
> more sense in terms of a "container format", since that is essentially
> what a git repository is.
>
> My opinion is that it is best to make this asset storage as simple as
> possible, unless there is a compelling reason to do otherwise.
> Versioning is definitely important, but in my opinion, the versioning
> that I would probably be most interested in is of an object as a whole.
>
> If individual assets need to be versioned, I think that is better dealt
> with using metadata (perhaps by providing a URI to the source asset, and
> then these links can be followed by tracing back the versions). For
> example, this may be useful for someone designing libraries of
> materials/textures or skeletons/avatars that other people may want to
> modify.
The only reason I mentioned git is that it is simpler in a matter of
speaking: it already implements a file system on top of an efficient
low-level content-hash-based index. The only difference is that when
designed binary wasn't the main use case. Versioning is just some nice
gravy.
>
> Of course, if we start to get into the discussion about deleting or
> altering content, this becomes a lot more tricky. Some things would be
> greatly simplified if we prevent altering an asset altogether. The other
> option would be to have some standard way of storing previous versions
> and linking to them through metadata.
>
>
> With respect to the flattening of URIs discussion, there is no way in
> real life that URIs will be flat. Even if the paths are flat, there may
> need to be cross references to other CDN domains altogether.
I didn't mean to imply no cross-domain linking. I think it's kinda simple:
if path doesn't have scheme (ie. HTTP:), then rebase to public domain;
else leave it.
Relative paths are nice too, but as long as you enforce something
common at the publish step, you can handle things uniformly later IMO.
> I am pretty interested in allowing or maybe even enforcing relative URIs
> within a logical unit (i.e. URIs that do not have to change when an
> asset is copied). The key advantage is that this makes
> duplication/versioning of assets a lot simpler.
>
> And it also simplifies the production pipeline as well: instead of
> having to change the URI references in the process of uploading, I can
> upload the raw files as they are, and the relative URIs will be handled
> by the downloader (computing relative URIs is relatively simple anyway).
>
> I'm curious what you think about relative URIs. Any compelling reasons
> for or against these?
>
> (Hope I didn't bore you all too much, I get kind of carried away)
> -Patrick
I'm up for this kind of detail/discussion -- I just hope no one else
is getting turned off already. :)
If so, let us know -- we're a small group here.
Cheers,
Warning: thinking out loud going on!
Let's for the sake of discussion say that you build your asset
pipeline entirely around git.
The content creation tool hides the complexity of git from the user;
they see only a file system to which they add, remove, or change files
-- text or binary. All file names within container files are in local
terms, ie. "C:\Content".
On the publish step, the app does save (git commit), a branch (git
checkout -b pre-publish), re-base of local names (sed
's/C:\Content/git://example.com/assets' *), and a push to the global
repo (with a delete of the temp branch).
When simulating, the client does a git clone (with working copy). The
simulator sends updates with asset links of the form
git://example.com/assets/house/dog.mesh. The client looks up the
working copy for git://example.com/assets for the local file
house/dog.mesh.
Thoughts?
Cheers,