Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Avalon 6.0 proposal #567

Closed
wants to merge 9 commits into from
Closed

Conversation

mkolar
Copy link
Member

@mkolar mkolar commented Dec 10, 2020

This PR relates to #565 and should be considered as a starting point of Avalon 6.0 conversation. It is not ready to be merged at the time of creation.

We have removed as much pype dependencies as possible at this point, with only two remaining:
Pype Anatomy - our own path templating system that we use as replacement for the avalon standard templates, This should of course be removed completely before considering merge, but right now we at least try to bypass it and used avalon default if PYPE is not present
Creator tries to pre-select correct family for a corresponding task based on our settings system. This is also bypassed if pype is not use, but will be removed from core ultimately as it depends on our system

Enhancements

Master Versions - Option to publish versionless on top of standard incremental versions. We make a “master” version that essentially just points to the latest published explicit version. Scene inventory then allows the artist to switch between explicit and master versions of the subset.
Thumbnails in loader - Mechanism that allows the studio to publish thumbnails and have them loaded back into the loader. Basic disk resolver for the thumbnails is provided, but configs can extend this with more resolvers if there is a preference to store thumbs differently. For instance, serving them from url or database.
Library Loader - essentially the same as a standard loader, but allow an artist to import content from a different project that has been tagged as library
More robust tasks - we tweaked the schema for tasks on the project and assets to be able to store task type information and potentially any other metadata, like task short codes. The key reason for this addition was the ability to filter on various places based on the task type, which is more consistent than just the task name. Type and short codes could of course also be used in path templates.
Faster asset switcher - running Avalon on large CG scenes it was becoming impossible to switch any asset representations due to the way they were queried from DB, we had to change this to be able to run some live productions. That, however, introduces behaviour that doesn’t match 100% the original, so this piece needs to be solved still.
Multiselection loader - see #550
IO tweaks - we can use functions from IO module in different contexts when needed. Very important for example for the library loader.

New Hosts

Photoshop - Production tested, uses Websocket server that would have to be ported to avalon from Pype.
Harmony - Production tested, under continuous develoment
Blender - Limited production testing, Used on pre-production of a large project, abandoned for reasons outside of pipeline scope. The base implementation was stabilised and is ready for configs to extend it with plugins, loaders and such.
Unreal Engine - Beta stage. Limited testing was done, and more development has been done by Clothcat Animation on the config side (pending approval and merge to pype)
TV Paint - Production Beta - under testing
After Effects - Production Beta - under testing, uses same server as photoshop

I will update the description and add requirements to run this soon, just wanted to get it here, so people can maybe start looking at it in the meantime.

(194, 57, 179), # Pink
(0, 120, 215), # Dark Blue
(0, 204, 106), # Dark Green
(247, 99, 12), # Orange
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

at least two spaces before inline comment

(179, 181, 182), # Grey
(194, 57, 179), # Pink
(0, 120, 215), # Dark Blue
(0, 204, 106), # Dark Green
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

at least two spaces before inline comment

(211, 79, 63), # Light Red
(179, 181, 182), # Grey
(194, 57, 179), # Pink
(0, 120, 215), # Dark Blue
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

at least two spaces before inline comment

(130, 184, 30), # Light Green
(211, 79, 63), # Light Red
(179, 181, 182), # Grey
(194, 57, 179), # Pink
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

at least two spaces before inline comment

(154, 13, 255), # Purple
(130, 184, 30), # Light Green
(211, 79, 63), # Light Red
(179, 181, 182), # Grey
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

at least two spaces before inline comment

from .communication_server import CommunicationWrapper
from . import lib
from . import launch_script
from .pipeline import (
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

'.pipeline.get_current_workfile_context' imported but unused

{
try
{
var func = eval(request["function"]);
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

eval can be harmful.

import os
import sys
import signal
import time
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

'time' imported but unused

loop=self.loop
)

def send_request(self, client, method, params=[], timeout=0):
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do not use mutable data structures for argument defaults. They are created during function definition time. All calls to the function reuse this one instance of that data structure, persisting changes between them.

def _execute_in_main_thread(self, item, **kwargs):
return self.communication_obj.execute_in_main_thread(item, **kwargs)

def send_notification(self, client, method, params=[]):
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do not use mutable data structures for argument defaults. They are created during function definition time. All calls to the function reuse this one instance of that data structure, persisting changes between them.

@mkolar mkolar marked this pull request as draft December 10, 2020 09:59
@mottosso
Copy link
Contributor

This PR could use some love, this has flown completely under my radar. @BigRoy and @davidlatwe have you seen this? Thanks @mkolar for making this, has there been any changes on your side since last year that could be incorporated into here?

What I'd love to see happen is:

  1. Maintain backwards compatibility
  2. Add all the new things
  3. Add log message/warning to replaced/deprecated functions

From which point we can start removing old things piece-by-pieace in their own PRs with their own discussions.

@mkolar mkolar closed this Jun 26, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants