Sybren A. Stüvel
    • Create new note
    • Create a note from template
      • Sharing URL Link copied
      • /edit
      • View mode
        • Edit mode
        • View mode
        • Book mode
        • Slide mode
        Edit mode View mode Book mode Slide mode
      • Customize slides
      • Note Permission
      • Read
        • Only me
        • Signed-in users
        • Everyone
        Only me Signed-in users Everyone
      • Write
        • Only me
        • Signed-in users
        • Everyone
        Only me Signed-in users Everyone
      • Engagement control Commenting, Suggest edit, Emoji Reply
    • Invite by email
      Invitee

      This note has no invitees

    • Publish Note

      Share your work with the world Congratulations! 🎉 Your note is out in the world Publish Note

      Your note will be visible on your profile and discoverable by anyone.
      Your note is now live.
      This note is visible on your profile and discoverable online.
      Everyone on the web can find and read all notes of this public team.
      See published notes
      Unpublish note
      Please check the box to agree to the Community Guidelines.
      View profile
    • Commenting
      Permission
      Disabled Forbidden Owners Signed-in users Everyone
    • Enable
    • Permission
      • Forbidden
      • Owners
      • Signed-in users
      • Everyone
    • Suggest edit
      Permission
      Disabled Forbidden Owners Signed-in users Everyone
    • Enable
    • Permission
      • Forbidden
      • Owners
      • Signed-in users
    • Emoji Reply
    • Enable
    • Versions and GitHub Sync
    • Note settings
    • Note Insights
    • Engagement control
    • Transfer ownership
    • Delete this note
    • Save as template
    • Insert from template
    • Import from
      • Dropbox
      • Google Drive
      • Gist
      • Clipboard
    • Export to
      • Dropbox
      • Google Drive
      • Gist
    • Download
      • Markdown
      • HTML
      • Raw HTML
Menu Note settings Versions and GitHub Sync Note Insights Sharing URL Create Help
Create Create new note Create a note from template
Menu
Options
Engagement control Transfer ownership Delete this note
Import from
Dropbox Google Drive Gist Clipboard
Export to
Dropbox Google Drive Gist
Download
Markdown HTML Raw HTML
Back
Sharing URL Link copied
/edit
View mode
  • Edit mode
  • View mode
  • Book mode
  • Slide mode
Edit mode View mode Book mode Slide mode
Customize slides
Note Permission
Read
Only me
  • Only me
  • Signed-in users
  • Everyone
Only me Signed-in users Everyone
Write
Only me
  • Only me
  • Signed-in users
  • Everyone
Only me Signed-in users Everyone
Engagement control Commenting, Suggest edit, Emoji Reply
  • Invite by email
    Invitee

    This note has no invitees

  • Publish Note

    Share your work with the world Congratulations! 🎉 Your note is out in the world Publish Note

    Your note will be visible on your profile and discoverable by anyone.
    Your note is now live.
    This note is visible on your profile and discoverable online.
    Everyone on the web can find and read all notes of this public team.
    See published notes
    Unpublish note
    Please check the box to agree to the Community Guidelines.
    View profile
    Engagement control
    Commenting
    Permission
    Disabled Forbidden Owners Signed-in users Everyone
    Enable
    Permission
    • Forbidden
    • Owners
    • Signed-in users
    • Everyone
    Suggest edit
    Permission
    Disabled Forbidden Owners Signed-in users Everyone
    Enable
    Permission
    • Forbidden
    • Owners
    • Signed-in users
    Emoji Reply
    Enable
    Import from Dropbox Google Drive Gist Clipboard
       owned this note    owned this note      
    Published Linked with GitHub
    Subscribed
    • Any changes
      Be notified of any changes
    • Mention me
      Be notified of mention me
    • Unsubscribe
    Subscribe
    --- tags: Assets, Pose Library, Asset Browser, Animation --- # Pose Library Plan of Attack This is a **draft** document. The intention is to expand this document to describe the work & design for the [Asset Browser & Pose Library project](https://developer.blender.org/project/profile/126/), then move the contents of this file into tasks on developer.blender.org. ## Pose Creation ### Panel in Dopesheet Editor This panel is used for **creating a new Pose in the current blend file**. It is intentionally basic in its functionality. - It copies the Action data - of the currently selected pose bones - as defined by keys on the current frame - to the first frame of a new Action that is marked as Asset. Panel content: - "Create Pose Asset" button The actions it will perform: - Create the Action datablock, - copy animation data into it as defined above, - mark it as Asset. This button (or the entire panel) should be disabled when the current Action is already marked as Asset. **Dispute**: location of this panel; could be moved into the viewport as well. More directly available, but less clear which channels go into the Pose. It is likely that there are two viewports: one for the camera & preview rendering, and one for animating. ### Refresh Asset Browser After Pose Creation After creating the pose per the "Create Pose Asset" button described above: - Send notifiers so that the Asset Browser refreshes, - scroll the just-created Asset into view, and - select the Asset so that it can be further edited by the user. **Dispute:** Blender shouldn't automatically change the UI for you. It could be possible to do the above upon dragging something from the Action editor into the Asset Browser. This drag & drop could perform the same actions as the "Create Pose Asset" button, and then scroll the dropped asset into view. ### Provide Info Before Creating Pose Add properties to the above operator, and show a popup with them to provide Asset metadata before creating the Asset: - Pose Name - Tags These will then also be used by the redo panel, making it possible to press F9 and edit the just-created Asset. **Dispute:** This is hard to implement well beyond just providing the pose name. It may be better to have some fields that are always in view, which can be used to provide name & tags for new poses. This could then be extended by showing an "Update Pose" button when a pose with that name already exists. ### Preview Support Make it possible to attach a preview image to Pose assets, i.e. to Action datablocks. - Extend the `bAction` struct with a `preview` pointer, - extend `BKE_previewimg_id_get_p()` in `icons.cc` to handle the pointer, and - test & implement what else is necessary to make it possible to manually select a preview image in the Asset Browser. ### Automatic Preview Rendering Render a preview with the current scene camera. This makes it possible to set specific render options for preview generation. - Find the Scene's Camera, - render a frame at a suitable resolution, - crop it square, and - assign it as the selected Action's preview image. These actions should be performed when the "Refresh Preview" button is pressed in the Asset Browser sidebar. **Dispute**: Using the scene camera is nice when there is a separate pose library blend file, which can be set up specifically for rendering thumbnails. Taking a screenshot of the viewport will work in simpler cases as well. ### Automatic Preview Attachment When creating the pose per the "Create Pose Asset" button: - render a preview as described above, and - assign it to the just-created pose datablock, before refreshing the Asset Browser. ### Copy Pose from Shot File to Pose Library Goal: make it easy to convert a pose in a shot/animation file into a Pose in the Pose Library. Create an operator "Copy Pose as Asset", similar to "Create Pose Asset", which: - creates an Action asset datablock in exactly the same way, - saves that datablock in a temporary blend file, and places some information about this blend file on the clipboard (or even the blend file itself), - removes the datablock from the current blend file's main database (if storage there was necessary to begin with). Note that this operator should not set an "undo" step, and ideally wouldn't even mark the currently open file as dirty. Create an operator "Paste Asset" in the Asset Browser, which: - loads the above-saved temporary blend file, - appends any datablocks in it to the current blend file's main database, - refreshes the Asset Browser, and - deselects all assets, then selects the just-loaded Assets. This selection change is consistent with the behaviour of other importers. ## Pose Updates ### Update Pose in Current File This workflow should be made possible: - Open the blend file that contains the Pose to update, - select the Pose in the Asset Browser, - apply the pose to the rig, - update and key the rig, - press an "Update Pose" button to update the Pose datablock, and - save the blend file. This means adding an "Update Pose" button in the Asset Browser's right-hand panel, as that's the only place that has a concept of "currently selected Pose asset". Clicking the button: - removes all existing keyframes from the Action, and - copies new keyframes into the action, the same way the "Create Pose" button would. This means "Update Pose" **only** updates the pose itself, and leaves all Asset metadata as-is. ### Update Pose in Current File by Copying from Shot File This matches the *Copy Pose from Shot File to Pose Library* flow described above, except it updates an existing Asset rather than creating a new one. Create an operator "Paste To Asset", which: - is only enabled when an existing Asset is selected, that resides in the current blend file, - loads the temporary blend file that was saved when "Copy as Asset" was clicked, - performs the same routine as described in "Update Pose in Current File", except that the current bone selection is ignored and all keys from the Action are copied. ### Open Asset-containing Blend File Right-clicking on an Asset in the Asset Browser should present a context menu with an operator "Open Containing Blend File". The operator should: - Start a new Blender process, - open the blend file that contains the selected asset. ### Select Asset When Opening Blend File When using "Open Containing Blend File" as described above, it would be nice if the Asset Browser automatically selects the Asset of interest. **This is a debatable feature**, because: - Blender currently never auto-selects things for the user. - There is no guarantee the opened blend file has a single Asset Browser editor visible, so in theory this feature could be useless (no Asset Browser) or require guesswork (multiple Asset Browsers). ## Filtering with Category-Enriched Tags ### Show Tags Add a Tags panel to the left-hand sidebar of the Asset Browser. It should show all tags of all visible assets. **Dispute**: could become unwieldy. ### Filter by Tags Tags should be selectable, allowing multi-selection. If any tags are selected, only those Assets that have ALL selected tags should be shown. The panel should show all tags of those assets that would be visible if tag filtering wouldn't exist. **Dispute**: Could become unwieldy. Alternative is to have explicit "Add Filter" button after tag selection. This would apply the filtering based on the selected tags, then reduce the shown tags to only those on the still-shown Assets. ### Group Tags by Category - Tags in the form `category:subtag` should be grouped together. - This group should have a header indicating the category. - The tags should use only the subtag as a label. ### Filtering by Category-Enriched Tags This filtering system should support queries like "Hand-poses only, suitable for Rex and Victoria", or "Poses for Rex only, but both Face and Hand poses". Update the filtering such that: - All selected subtags of the same category form an "OR" clause, and - all such clauses are "AND"-ed together with eachother and with regular tags. ## Other interesting stuff ### Future idea: create tags from bonegroups ### Pose Editor as special mode of Dopesheet Editor

    Import from clipboard

    Paste your markdown or webpage here...

    Advanced permission required

    Your current role can only read. Ask the system administrator to acquire write and comment permission.

    This team is disabled

    Sorry, this team is disabled. You can't edit this note.

    This note is locked

    Sorry, only owner can edit this note.

    Reach the limit

    Sorry, you've reached the max length this note can be.
    Please reduce the content or divide it to more notes, thank you!

    Import from Gist

    Import from Snippet

    or

    Export to Snippet

    Are you sure?

    Do you really want to delete this note?
    All users will lose their connection.

    Create a note from template

    Create a note from template

    Oops...
    This template has been removed or transferred.
    Upgrade
    All
    • All
    • Team
    No template.

    Create a template

    Upgrade

    Delete template

    Do you really want to delete this template?
    Turn this template into a regular note and keep its content, versions, and comments.

    This page need refresh

    You have an incompatible client version.
    Refresh to update.
    New version available!
    See releases notes here
    Refresh to enjoy new features.
    Your user state has changed.
    Refresh to load new user state.

    Sign in

    Forgot password

    or

    By clicking below, you agree to our terms of service.

    Sign in via Facebook Sign in via Twitter Sign in via GitHub Sign in via Dropbox Sign in with Wallet
    Wallet ( )
    Connect another wallet

    New to HackMD? Sign up

    Help

    • English
    • 中文
    • Français
    • Deutsch
    • 日本語
    • Español
    • Català
    • Ελληνικά
    • Português
    • italiano
    • Türkçe
    • Русский
    • Nederlands
    • hrvatski jezik
    • język polski
    • Українська
    • हिन्दी
    • svenska
    • Esperanto
    • dansk

    Documents

    Help & Tutorial

    How to use Book mode

    Slide Example

    API Docs

    Edit in VSCode

    Install browser extension

    Contacts

    Feedback

    Discord

    Send us email

    Resources

    Releases

    Pricing

    Blog

    Policy

    Terms

    Privacy

    Cheatsheet

    Syntax Example Reference
    # Header Header 基本排版
    - Unordered List
    • Unordered List
    1. Ordered List
    1. Ordered List
    - [ ] Todo List
    • Todo List
    > Blockquote
    Blockquote
    **Bold font** Bold font
    *Italics font* Italics font
    ~~Strikethrough~~ Strikethrough
    19^th^ 19th
    H~2~O H2O
    ++Inserted text++ Inserted text
    ==Marked text== Marked text
    [link text](https:// "title") Link
    ![image alt](https:// "title") Image
    `Code` Code 在筆記中貼入程式碼
    ```javascript
    var i = 0;
    ```
    var i = 0;
    :smile: :smile: Emoji list
    {%youtube youtube_id %} Externals
    $L^aT_eX$ LaTeX
    :::info
    This is a alert area.
    :::

    This is a alert area.

    Versions and GitHub Sync
    Get Full History Access

    • Edit version name
    • Delete

    revision author avatar     named on  

    More Less

    Note content is identical to the latest version.
    Compare
      Choose a version
      No search result
      Version not found
    Sign in to link this note to GitHub
    Learn more
    This note is not linked with GitHub
     

    Feedback

    Submission failed, please try again

    Thanks for your support.

    On a scale of 0-10, how likely is it that you would recommend HackMD to your friends, family or business associates?

    Please give us some advice and help us improve HackMD.

     

    Thanks for your feedback

    Remove version name

    Do you want to remove this version name and description?

    Transfer ownership

    Transfer to
      Warning: is a public team. If you transfer note to this team, everyone on the web can find and read this note.

        Link with GitHub

        Please authorize HackMD on GitHub
        • Please sign in to GitHub and install the HackMD app on your GitHub repo.
        • HackMD links with GitHub through a GitHub App. You can choose which repo to install our App.
        Learn more  Sign in to GitHub

        Push the note to GitHub Push to GitHub Pull a file from GitHub

          Authorize again
         

        Choose which file to push to

        Select repo
        Refresh Authorize more repos
        Select branch
        Select file
        Select branch
        Choose version(s) to push
        • Save a new version and push
        • Choose from existing versions
        Include title and tags
        Available push count

        Pull from GitHub

         
        File from GitHub
        File from HackMD

        GitHub Link Settings

        File linked

        Linked by
        File path
        Last synced branch
        Available push count

        Danger Zone

        Unlink
        You will no longer receive notification when GitHub file changes after unlink.

        Syncing

        Push failed

        Push successfully