No Branch/Tag Specified
main
refactor-mesh-face-generic
blender-v3.3-release
refactor-mesh-corners-generic
refactor-mesh-sharp-face-generic
gpencil-new-data-proposal
overlay-next
temp-sculpt-roll-mapping
sculpt-dev
tmp-volume-matrix-api-update
tmp-eevee-shadow-commit-mp
universal-scene-description
cycles_path_guiding
temp-vulkan-descriptor-sets
tmp-eevee-shadow-commit
temp-angavrilov
asset-shelf
brush-assets-project
tmp-workbench-rewrite2
temp-T101739-fix-seam-bleeding-non-manifold
tmp-mak-012623
temp-bundled-assets
asset-lite-greasepencil
temp-pbvh-split
temp-pbvh-texpaint-automasking
microfacet_hair
tmp-worbench-rewrite2-optimizations
temp-offset-array-ref
blender-v2.93-release
blender-projects-basics
temp-pbvh-seam-texturing-tweaks
temp-nodes-group-declarations
refactor-mesh-sharp-edge-generic
temp-asset-library-all
refactor-mesh-uv-map-generic
refactor-mesh-position-generic
temp-T102440
temp-rbf-pose-blender
geometry-nodes-tetrahedralization
nodes-matrix-types
temp-xr-painting
blender-v3.4-release
geometry-nodes-simulation
bli-matrix-template
temp-linux-35x-libs
refactor-mesh-corner-normals-lazy
temp-py-gpubatch-draw-advanced
xr-dev
temp-vulkan-shader
bevelv2
soc-2022-soft-bodies
arcpatch-D16436
tmp-dynamic-usd
temp-image-engine
tmp-vfx-platform-2023
soc-2022-many-lights-sampling
tracking_tools
nla-scale-fix
principled-v2
temp-ui-cpp
temp-ghost-vulkan
tmp-libs-2.93-lts
temp-T97352-3d-texturing-seam-bleeding-b2
temp-xr-virtual-camera-experiment
temp-vse-retiming-tool
gpencil-next
temp-sculpt-brush-channel
asset-browser-grid-view
temp-asset-representation
temp-gpencil-automask
tmp_libs_34
temp-T101905-gpu-backend-argument
node-add-asset-menu
temp-collection-objects-link-multiple
temp-texture-painting-gpu
tmp-workbench-perf-experiment
tmp_usd_import_unbound_mtls
tmp-drw-split-matrix
temp-sculpt-normals-masking
temp-sculpt-cavity-mask
temp-pbvh-vbos
tmp-usd-alab-v2-T100452
refactor-mesh-selection-generic
temp-T96708-brush-texture-refactoring
temp-chunk-list
feature-imformat
temp-geometry-nodes-evaluator-refactor
refactor-mesh-bevel-weight-generic
temp-chunked-list
temp-outliner-new-element-storage
refactor-mesh-remove-pointers
soc-2022-text-usability
refactor-mesh-material-index-generic
drw-manager-next
refactor-mesh-hide-generic
blender-v3.2-release
sculpt_curve_collisions
temp-anim-editors-redo-panel-D14960-D14977
retopo_transform
temp-libepoxy
temp-T99046-platform-reference-images
geometry-nodes-rigid-body-integration
file-browser-grid-view
temp-legacy-mesh-format-option
arcpatch-D14645
soc-2022-waveform-drawing
temp-T95933-object-mode-curve-selection
temp-deform-curves-on-surface
cycles_oneapi
temp-viewport-compositor-merge
temp-texpaint-automasking
temp-deform-curves-with-surface
asset-greasepencil
temp-T99046-render-test-increase-fail-threshold
temp-T98708-gpu-conservative-depth
lineart-shadow
temp-lineart-contained
cleanup-id-override-const
temp-T98375-share-gpu-textures
wintab
temp-T97352-3d-texturing-seam-bleeding
temp-T97905-compositor-meta-data
lineart-cas-2
temp-T97272
temp-T97907-compositor-meta-data
temp-T96952
tmp-usd-mak-c87f6242
temp-outliner-library-override-hierarchy
lineart-object-load
tmp-eevee-next-merge
draw-deferred-compilation-experiment
soc-2021-porting-modifiers-to-nodes-remesh-voxel
blender-v2.83-release
tmp_lib_update_32
temp-mesh-cpp
temp-viewport-compositor-compiler
temp-T96710-pbvh-pixels
tmp-new-gpu-codegen
devirtualizer
temp-T96709-painting-target
temp-collection-assets
temp-lineart-embree
temp-multi-function-eval-varray
temp-sculpt-colors
soc-2021-curves
blender-v3.1-release
temp-vertex-paint
temp-vse-channels-edge-panning
eevee-rewrite
temp-library-overrides-outliner
cycles_hydra
temp-3d-texturing-brush-b
temp-abc-features
tmp-transform-navigate
temp-image-buffer-rasterizer
soc-2021-porting-modifiers-to-nodes-remesh-blocks
temp-3d-texture-brush-prototype
temp-fix-normals-custom-data
viewport-compositor
bli-math-basic-types
soc-2021-simulation-display
greasepencil-object
temp-license-header-spdx
KTX_support
gsoc-2021-porting-modifiers-to-nodes-solidify
2d
gltf_vtree
soc-2021-porting-modifiers-to-nodes-decimate
temp-T95279-remap-referenced-data
temp-gpu-image-engine
tmp-eevee-rewrite-compilation-error
draw-viewport-data
temp-T94900-b
temp-T94900-gpu-viewport-default-layers
temp-T94185-id-remapper-ui
tmp-workbench-shader-create-infos
blender-v3.0-release
temp-geometry-nodes-extrude-mesh
tmp-T95052
tmp-gpu-polyline-shaders
tmp-gpu-shader-descriptor-2
temp-usd-prev-export2
tmp-core-id-remap-test-cases
temp-vert-normals-cleanup
temp-move-geometry-to-cpp
tmp-vector-template
drw-gpu-wrapper
temp-geometry-nodes-extrude-and-scale
temp-scale-elements-node-test
temp-usd-udim-import
temp-copy-on-write
temp-T94185-id_remapping-experiment-a
temp-llvm-testing
nurbs-opencascade
temp-usd-preview-surf-export
soc-2021-uv-edge-select-support
T93558
temp-gpu-texture-partial-updates
gpu-shader-descriptor
temp-geometry-nodes-text
tmp-vulkan
temp-T90535-usd-alab-material-import
node-tree-update-refactor
temp-sample-sound-node
temp-interface-region-search-cpp
temp-enum-socket
temp-link-portals
temp-unity-build-test
geometry-nodes-level-set-nodes
temp-virtual-array-value-type
soc-2020-io-performance
studio-sprite-fright
temp-cycles-source-reorganize
asset-browser-snap-dragging
temp-python-zstandard
soc-2021-porting-modifiers-to-nodes-merge-by-distance
temp-compositor-cleanups
temp-eevee-gpencil-rewrite
temp-vse-handles
temp-ui-tweaks
xr-controller-support
temp-node-common-cpp
temp-varray-get-set-multiple
soc-2021-uv-editor-improvements
temp-geometry-nodes-output-attributes
soc-2021-knife-tools
temp_test_sc_keymap
cycles-x
temp-field-visualization
soc-2021-curve-fillet
temp_bmesh_multires
temp-cocoa-scroll-acceleration-fix
temp-socket-decl-refactor
fluid-mantaflow-gpu
soc-2021-vse-strip-thumbnails
temp-noise-nodes-cpp
temp-compositor-canvas
T90952
temp-parallel-multi-function
temp-geometry-nodes-fields
grab_walk_fix
soc-2021-adaptive-cloth
temp-geometry-nodes-fields--fields-jacques
temp-cpp-ghc-filesystem
temp-geometry-nodes-fields--fields
temp-geometry-nodes-fields--anonymous-attributes
refactor-idprop-ui-data
compositor-full-frame
temp-runtime-node-def
temp-geometry-nodes-fields-prototype-visualization
temp-geometry-nodes-fields-prototype
temp-multi-function-procedure
soc-2021-porting-modifiers-to-nodes_all
cycles_texture_cache
experimental-build
cycles_procedural_api
soc-2021-porting-modifiers-to-nodes-extrude-and-move
soc-2021-porting-modifiers-to-nodes-extrude
temp-geometry-nodes-expandable-geometry-socket-prototype
fluid-mantaflow-2d
windows_make_docpy
usd-importer-T81257-merge
nodes-update-readonly-tag
geometry-nodes-closest-points
tmp-buildbot-gcc-10
soc-2021-geometry-nodes-regression-test
node-group-single-socket-nodes
curve-nodes-modifier
temp-geometry-nodes-curve-sample
geometry-nodes-unnamed-attributes
temp-nodes-intersect-alt-key
tmp_arcpath-D11868
refactor-vertex-group-names
temp-gpencil-bezier-stroke-type
temp-gpu-uniform-builtin-structs
wintab_fallback_walknav
temp-socket-inspection
temp-long-link-dimming
fixed_width_integers
lineart-bvh
temp-gpencil-camera-reproject
temp-gpu-push-constants
temp-attribute-processor
temp-cpp-type-cleanup
temp-geometry-nodes-curve-deform-node
wintab-logging
fix-tablet-walk
geometry-nodes-raycast
temp-spreadsheet-row-filter
lineart-fn-cached
temp-compact-node-prototype
asset-browser
geometry-nodes-curve-to-points-node
node-editor-edge-pan
eevee-gpencil
asset-system-filelist
temp-geometry-nodes-viewer-node
lineart-fn-thread-loading
tmp-buildbot-cleanup
temp-gpencil-masking
temp-ffmpeg-4.4
temp-attributes-panel
profiler-editor
FixT87160_DSE_Channel_Selection
temp-interface-cpp
geometry-nodes-curve-support
info-editor-cpp
temp-attribute-transfer-node
virtual-array-attributes
temp-pose-slide-D9054
spreadsheet-active-node
ui-asset-view-template
temp-node-tree-pages-prototype
override-outliner-view
temp-geometry-nodes-processor-prototype
temp-any-instead-of-variant
temp-unreachable-abort
temp-spreadsheet-instances
temp-geometry-nodes-instances-api-v2
temp-geometry-nodes-instances-attributes
geometry-nodes-mesh-primitives
temp-asset-tools-prototype
temp-geometry-nodes-mesh-primitive-line
lanpr-under-gp
temp_D10504-2_nla_keyframe_remap_upper_strips
blender-v2.92-release
usd-importer-T81257
temp-spreadsheet-editor-python-prototyping
temp-spreadsheet-editor
override-refactor-tmp-2
temp-derived-node-tree-refactor
T85799
tracking_scopes
temp-icons-fixes
temp_D10504_nla_keyframe_remap_upper_strips
temp-weight_mirror
temp_T76472_graph_editor_fcurve_extrapolation
eevee-closure-lib-cleanup
eevee-dof-refactor
eevee-probe-roughness-fix
eevee-ggx-lut-fix
df0bce3f7d0
temp-geometry-nodes-instances-api
tmp-ocio-v2
temp-nodes-redesign
tracking_proportional_editing_v2
blender-v2.91-release
temp-uv-face-select-no-thresh-when-inside
temp-D10103-nla_support_strip_overlap_during_transform
fracture_modifier
temp-point-distribution-refactor-experiment
temp-experimental-cpp-math-refactor
vfx-clip-ui-update
tmp-T82230-nla_remove_hold_reset_behavior
temp-D8687-directly_select_fcurves
geometry-nodes
soc-2020-testing-frameworks
geometry-nodes-point-separate-node
temp-nla-strip-alignment
temp-atomics-int16
geometry-nodes-deduplicate-float-math
asset-metadata
geometry-nodes-active-modifier-drawing
attribute-accessor
geometry-nodes-attribute-nodes
temp-T82588-box-select-invisible-keys
greasepencil-edit-curve
codesign_error_tracker
outliner-cpp-refactor
temp-fix-headerless-panels-switch-windows
temp-gpencil-fading-modifier
temp-D8915-copy-rotation-remove-sheer
geometry-nodes-boolean-node
temp-T81874-box-select-active-keyframe
geometry-nodes-transform-node
temp-trimesh-sculpt
geometry-tree-evaluation
fcurve-modifier-panels
temp-fcurve-key-insert-follow-curve
temp-fcurve-active-keyframe-D7737
mesh-to-volume-modifier
blender-v2.90-release
soc-2020-fluid-tools
property-search-ui-v2
tmp-T80603
soc-2020-greasepencil-curve
tmp-gldebuglayer
tmp-gltexture
soc-2020-custom-menus
active-fcurve-keyframe
soc-2020-soft-body
newboolean
fail-on-memleak
soc-2020-outliner
soc-2020-production-ready-light-tree-2
soc-2020-info-editor
property-search-ui
temp-ui-button-type-refactor
soc-2020-production-ready-light-tree
particle-solver-dev
tmp-gpu-context-isolation
soc-2020-xr-input
temp-remesh-octree
mac_arm64
tmp-eevee-glsl-cleanup
tmp-pointcloud-render
buildbot-lts
asset-engine--archived
asset-uuid--archived
eevee-motionblur-object
modifier-panels-ui
temp-cycles-tbb
wm-drag-drop-rewrite
temp-lanpr-review
gsoc-2018-many-light-sampling
tmp-eevee-material-refactor
tmp-widget-opti
tmp-texture-sampler
xr-world-navigation
blender-v2.82-release
node-tree-ref
simulation-access-modifier
blenloader-decentralization
temp-test-point-cloud-simulation-depsgraph-integration
functions
builtin-simulation-nodes
performance-test
obj-import-experiments
soc-2019-openxr
vr_scene_inspection
blenloader-api
tmp-workbench-rewrite
id-ensure-unique-memory-address
simulation-tree
greasepencil-refactor
draw-colormanagement
temp-gizmo-decoupled-redraws
fluid-mantaflow
blender-v2.81-release
tmp-overlay-engine
soc-2019-bevel-profiles
temp-npr-gpencil-modifiers
soc-2019-npr
temp-gpencil-drw-engine
soc-2019-embree-gpu
temp-npr-smooth-contour
temp-lanpr-staging
filebrowser_redesign
tmp-eevee-shadowmap-refactor
vamr-openxr-module
sculpt-mode-features
soc-2019-adaptive-cloth
tmp-drw-callbatching
soc-2019-outliner
soc-2019-cycles-procedural
temp-D5423-update
temp-vr-draw-thread
blender-v2.80-release
tmp-batch-cache-cleanup
soc-2019-fast-io
temp-toolsystem-multiwindow
blender2.7
collada
soc-2018-npr
temp-keymap-industry-compat
temp-fracture-modifier-2.8
temp-dna-rename
userpref_redesign
hair_object
motion_curve_fix
collada2.8
cycles_embree
interactive_physics
temp-ui-layout-2.8
cloth-improvements
soc-2018-cycles-volumes
hair_guides_grooming
hair_guides
benchmark
soc-2018-bevel
soc-2018-hair-shader-fixes
temp-udim-images
soc-2018-hair-shader
temp-volume-object
cycles_cryptomatte
temp-eeveelightcache
temp-tab_drag_drop
temp-keymap-save
temp-dynamic-overrides
fracture_modifier-master
ui_layout_gridflow
temp-keymap-changes
tmp-CollectionsAnim
tmp-b28-motionpath-drawing
uv_unwrapping_slim_algorithm
blender-v2.79b-release
tmp-COW_InsertKeyframe_Fix
temp-unified-collections
temp-modifier-rm-cddm
tmp-TimelineHeaderButtonsStretching
blender2.8-workbench
soc-2017-normal-tools
cycles_bvh8
blender-v2.79a-release
temp-scene-obedit-remove
temp-workspace-object-mode-removal
blender-v2.79-release
soc-2017-sculpting_brush
split-kernel-faster-building
id_override_static
openvdb
custom-manipulators
soc-2016-uv_tools
soc-2016-pbvh-painting
soc-2017-vertex_paint
soc-2017-sculpting_improvements
soc-2017-package_manager
strand_editmode
smooth-fcurves
id_copy_refactor
gsoc2016-improved_extrusion
temp-ssr
temp-cycles-opencl-staging
temp-cycles-denoising
ge_2df_textures
HMD_viewport
soc-2016-multiview
transform-manipulators
datablock_idprops
cycles_disney_brdf
temp_cycles_split_kernel
cycles_split_kernel
unlock_task_scheduler
uv_unwrapping_slim_and_ceres
surface-deform-modifier
cycles-tiles-rework
soc-2016-cycles_denoising
temp-layers-ui-table
uiTable
render-layers
clay-engine
multi_previews_id
cycles_disney_bsdf_transmittance
layers
pbr-viewport
temp_display_optimization
viewport_bvh_select
temp-cycles-microdisplacement
soc-2016-cycles_images
strand_nodes
object_nodes
asset-experiments
soc-2016-sculpt_tools
temp_viewport_fx_merge
custom-normals-bmesh
temp-decklink
compositor-2016
decklink
BendyBones
cycles_panorama_experiments
temp_remove_pointcache
temp_remove_particles
temp_depsgraph_split_ubereval
temp_textedit_comment_toggling
GPencil_Editing_Stage3
temp_bge_moto
UI-experiments
UI-graphical-redesign
missing-libs
free-refcount-ids
cycles_camera_nodes
epic-navigation
temp-ui-widget-refactor
gooseberry_farm
gooseberry
temp-ghash-experiments
temp-ghash-setops
temp_motionpaths
fcurves-simplify
soc-2014-fluid
GPU_data_request
depsgraph_refactor
multiview
vertex_paint_pbvh
alembic_pointcache
cycles-ptex-49
viewport_experiments
soc-2014-bge
texture_nodes_refactor
input_method_editor
GPencil_EditStrokes
soc-2014-shapekey
terrible_consequencer
GPencil_FillStrokes
libmv_prediction
blender2.4
dyntopo_holes
soc-2014-viewport_context
gtest-staging
blender-tiles
soc-2014-viewport_fx
soc-2014-remesh
soc-2014-nurbs
pie-menus
soc-2014-cycles
soc-2013-paint
particles_refactor
soc-2013-viewport_fx
tiles-scheduler
bake-cycles
soc-2013-cycles_volume
overscan
soc-2013-depsgraph_mt
soc-2013-dingto
soc-2013-sketch_mesh
soc-2013-rigid_body_sim
soc-2011-tomato
soc-2013-bge
soc-2013-motion_track
soc-2013-ui_replay
soc-2012-sushi
ge_dev
soc-2013-depsgraph_eval
soc-2008-mxcurioni
soc-2012-bratwurst
soc-2012-swiss_cheese
soc-2012-fried_chicken
meshdata_transfer
smoke2
tile
soc-2011-cucumber
bmesh
soc-2011-carrot
cycles
soc-2011-garlic
soc-2011-radish
soc-2010-nicks
vgroup_modifiers
soc-2011-pepper
soc-2010-jwilkins
merwin-spacenav
bge_components
soc-2010-merwin
render25
soc-2010-nicolasbishop
soc-2009-chingachgook
soc-2010-nexyon
soc-2010-aligorith
ge_eigen2
sculpt25
soc-2009-jaguarandi
soc-2009-imbusy
soc-2009-kazanbas
blender2.5
volume25
soundsystem
soc-2009-aligorith
sim_physics
ge_dome
etch-a-ton
soc-2008-nicholasbishop
animsys2
projection-paint
harmonic-skeleton
soc-2008-jaguarandi
fluidcontrol
apricot
soc-2008-quorn
cloth
ndof
orange
v2.93.14
v3.3.3
v2.93.13
v2.93.12
v3.4.1
v3.3.2
v3.4.0
v3.3.1
v2.93.11
v3.3.0
v3.2.2
v2.93.10
v3.2.1
v3.2.0
v2.83.20
v2.93.9
v3.1.2
v3.1.1
v3.1.0
v2.83.19
v2.93.8
v3.0.1
v2.93.7
v3.0.0
v2.93.6
v2.93.5
v2.83.18
v2.93.4
v2.93.3
v2.83.17
v2.93.2
v2.93.1
v2.83.16
v2.93.0
v2.83.15
v2.83.14
v2.83.13
v2.92.0
v2.83.12
v2.91.2
v2.83.10
v2.91.0
v2.83.9
v2.83.8
v2.83.7
v2.90.1
v2.83.6.1
v2.83.6
v2.90.0
v2.83.5
v2.83.4
v2.83.3
v2.83.2
v2.83.1
v2.83
v2.82a
v2.82
v2.81a
v2.81
v2.80
v2.80-rc3
v2.80-rc2
v2.80-rc1
v2.79b
v2.79a
v2.79
v2.79-rc2
v2.79-rc1
v2.78c
v2.78b
v2.78a
v2.78
v2.78-rc2
v2.78-rc1
v2.77a
v2.77
v2.77-rc2
v2.77-rc1
v2.76b
v2.76a
v2.76
v2.76-rc3
v2.76-rc2
v2.76-rc1
v2.75a
v2.75
v2.75-rc2
v2.75-rc1
v2.74
v2.74-rc4
v2.74-rc3
v2.74-rc2
v2.74-rc1
v2.73a
v2.73
v2.73-rc1
v2.72b
2.72b
v2.72a
v2.72
v2.72-rc1
v2.71
v2.71-rc2
v2.71-rc1
v2.70a
v2.70
v2.70-rc2
v2.70-rc
v2.66
v2.63
v2.60
v2.59
v2.58a
v2.58
v2.57b
v2.57a
v2.56a
v2.55
v2.45
softbody-stable-v1
softbody-stable-v2
softbody-stable-v3
v2.25
v2.26
v2.27
v2.28
v2.28a
v2.28c
v2.30
v2.31
v2.31a
v2.32
v2.33
v2.33a
v2.34
v2.35
v2.35a
v2.36
v2.37
v2.37a
v2.40
v2.41
v2.42
v2.42a
v2.43
v2.44
v2.46
v2.47
v2.48
v2.48a
v2.49
v2.49a
v2.49b
v2.50
v2.51
v2.52
v2.53
v2.54
v2.56
v2.57
v2.60a
v2.61
v2.63a
v2.64
v2.64a
v2.65
v2.65a
v2.66a
v2.67
v2.67a
v2.67b
v2.68
v2.68a
v2.69
Labels
Apply labels
Clear labels
Interest/Alembic
Interest/Animation & Rigging
Interest/Asset Browser
Interest/Asset Browser Project Overview
Interest/Audio
Interest/Automated Testing
Interest/Blender Asset Bundle
Interest/Collada
Interest/Compositing
Interest/Core
Interest/Cycles
Interest/Dependency Graph
Interest/Development Management
Interest/Eevee & Viewport
Interest/Freestyle
Interest/Geometry Nodes
Interest/Grease Pencil
Interest/ID Management
Interest/Images & Movies
Interest/Import/Export
Interest/Line Art
Interest/Masking
Interest/Modeling
Interest/Modifiers
Interest/Motion Tracking
Interest/Nodes & Physics
Interest/Overrides
Interest/Performance
Interest/Performance
Interest/Physics
Interest/Pipeline, Assets & I/O
Interest/Platforms, Builds, Tests & Devices
Interest/Python API
Interest/Render & Cycles
Interest/Render Pipeline
Interest/Sculpt, Paint & Texture
Interest/Text Editor
Interest/Translations
Interest/Triaging
Interest/Undo
Interest/USD
Interest/User Interface
Interest/UV Editing
Interest/VFX & Video
Interest/Video Sequencer
Interest/Virtual Reality
legacy module/Animation & Rigging
legacy module/Core
legacy module/Development Management
legacy module/Eevee & Viewport
legacy module/Grease Pencil
legacy module/Modeling
legacy module/Nodes & Physics
legacy module/Pipeline, Assets & IO
legacy module/Platforms, Builds, Tests & Devices
legacy module/Python API
legacy module/Rendering & Cycles
legacy module/Sculpt, Paint & Texture
legacy module/Triaging
legacy module/User Interface
legacy module/VFX & Video
legacy project/1.0.0-beta.2
legacy project/Asset Browser (Archived)
legacy project/BF Blender: 2.8
legacy project/BF Blender: After Release
legacy project/BF Blender: Next
legacy project/BF Blender: Regressions
legacy project/BF Blender: Unconfirmed
legacy project/Blender 2.70
legacy project/Code Quest
legacy project/Datablocks and Libraries
legacy project/Eevee
legacy project/Game Animation
legacy project/Game Audio
legacy project/Game Data Conversion
legacy project/Game Engine
legacy project/Game Logic
legacy project/Game Physics
legacy project/Game Python
legacy project/Game Rendering
legacy project/Game UI
legacy project/GPU / Viewport
legacy project/GSoC
legacy project/Infrastructure: Websites
legacy project/LibOverrides - Usability and UX
legacy project/Milestone 1: Basic, Local Asset Browser
legacy project/Nodes
legacy project/OpenGL Error
legacy project/Papercut
legacy project/Pose Library Basics
legacy project/Retrospective
legacy project/Tracker Curfew
legacy project/Wintab High Frequency
Meta/Good First Issue
Meta/Papercut
migration/requires-manual-verification
Module › Animation & Rigging
Module › Core
Module › Development Management
Module › Eevee & Viewport
Module › Grease Pencil
Module › Modeling
Module › Nodes & Physics
Module › Pipeline, Assets & IO
Module › Platforms, Builds, Tests & Devices
Module › Python API
Module › Render & Cycles
Module › Sculpt, Paint & Texture
Module › Triaging
Module › User Interface
Module › VFX & Video
Platform/FreeBSD
Platform/Linux
Platform/macOS
Platform/Windows
Priority › High
Priority › Low
Priority › Normal
Priority › Unbreak Now!
Status › Archived
Status › Confirmed
Status › Duplicate
Status › Needs Information from Developers
Status › Needs Information from User
Status › Needs Triage
Status › Resolved
Type › Bug
Type › Design
Type › Known Issue
Type › Patch
Type › Report
Type › To Do
No Label
Interest/Alembic
Interest/Animation & Rigging
Interest/Asset Browser
Interest/Asset Browser Project Overview
Interest/Audio
Interest/Automated Testing
Interest/Blender Asset Bundle
Interest/Collada
Interest/Compositing
Interest/Core
Interest/Cycles
Interest/Dependency Graph
Interest/Development Management
Interest/Eevee & Viewport
Interest/Freestyle
Interest/Geometry Nodes
Interest/Grease Pencil
Interest/ID Management
Interest/Images & Movies
Interest/Import/Export
Interest/Line Art
Interest/Masking
Interest/Modeling
Interest/Modifiers
Interest/Motion Tracking
Interest/Nodes & Physics
Interest/Overrides
Interest/Performance
Interest/Performance
Interest/Physics
Interest/Pipeline, Assets & I/O
Interest/Platforms, Builds, Tests & Devices
Interest/Python API
Interest/Render & Cycles
Interest/Render Pipeline
Interest/Sculpt, Paint & Texture
Interest/Text Editor
Interest/Translations
Interest/Triaging
Interest/Undo
Interest/USD
Interest/User Interface
Interest/UV Editing
Interest/VFX & Video
Interest/Video Sequencer
Interest/Virtual Reality
legacy module/Animation & Rigging
legacy module/Core
legacy module/Development Management
legacy module/Eevee & Viewport
legacy module/Grease Pencil
legacy module/Modeling
legacy module/Nodes & Physics
legacy module/Pipeline, Assets & IO
legacy module/Platforms, Builds, Tests & Devices
legacy module/Python API
legacy module/Rendering & Cycles
legacy module/Sculpt, Paint & Texture
legacy module/Triaging
legacy module/User Interface
legacy module/VFX & Video
legacy project/1.0.0-beta.2
legacy project/Asset Browser (Archived)
legacy project/BF Blender: 2.8
legacy project/BF Blender: After Release
legacy project/BF Blender: Next
legacy project/BF Blender: Regressions
legacy project/BF Blender: Unconfirmed
legacy project/Blender 2.70
legacy project/Code Quest
legacy project/Datablocks and Libraries
legacy project/Eevee
legacy project/Game Animation
legacy project/Game Audio
legacy project/Game Data Conversion
legacy project/Game Engine
legacy project/Game Logic
legacy project/Game Physics
legacy project/Game Python
legacy project/Game Rendering
legacy project/Game UI
legacy project/GPU / Viewport
legacy project/GSoC
legacy project/Infrastructure: Websites
legacy project/LibOverrides - Usability and UX
legacy project/Milestone 1: Basic, Local Asset Browser
legacy project/Nodes
legacy project/OpenGL Error
legacy project/Papercut
legacy project/Pose Library Basics
legacy project/Retrospective
legacy project/Tracker Curfew
legacy project/Wintab High Frequency
Meta/Good First Issue
Meta/Papercut
migration/requires-manual-verification
Module › Animation & Rigging
Module › Core
Module › Development Management
Module › Eevee & Viewport
Module › Grease Pencil
Module › Modeling
Module › Nodes & Physics
Module › Pipeline, Assets & IO
Module › Platforms, Builds, Tests & Devices
Module › Python API
Module › Render & Cycles
Module › Sculpt, Paint & Texture
Module › Triaging
Module › User Interface
Module › VFX & Video
Platform/FreeBSD
Platform/Linux
Platform/macOS
Platform/Windows
Priority › High
Priority › Low
Priority › Normal
Priority › Unbreak Now!
Status › Archived
Status › Confirmed
Status › Duplicate
Status › Needs Information from Developers
Status › Needs Information from User
Status › Needs Triage
Status › Resolved
Type › Bug
Type › Design
Type › Known Issue
Type › Patch
Type › Report
Type › To Do
Milestone
Set milestone
Clear milestone
No items
No Milestone
Projects
Set Project
Clear projects
No project
Assignees
Assign users
Clear assignees
No Assignees
5 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.
No due date set.
Dependencies
No dependencies set.
Reference: blender/blender#21889
Reference in new issue
There is no content yet.
Delete Branch '%!s(<nil>)'
Deleting a branch is permanent. It CANNOT be undone. Continue?
No
Yes
%%%Summary: This patch corrects an issue regarding YUV->RGB import of motion picture files. The problem manifests itself in both the Sequencer and the Nodal Compositor. It sets colorspace details so that subsequent calls to sws_scale pull full 0-255 values out of the translation table.
If you compare input of all motion picture files (likely including textures) Blender uniformly implements a clamping of values from their original 0-255 values to a broadcast 16-235 mapping. This reduces the quality of import and export.
Manifests in:
Addional Information: The patch was taken from ffmpeg code to work around similar issues in PNG output. Link is here http://www.pasteall.org/12035.
%%%
Changed status to: 'Open'
%%%More information to be found at http://yellowsblog.wordpress.com/2009/09/10/video-import-into-blender/%%%
%%%Summary of my discussions with troy about this patch:
FFMPEG/swscale is used in Blender to import files such as H264, stored internally in YUV format, into Blender which uses RGB. It converts from YUV to RGB in the process.
By default (as some bizarre historical artifact), the YUV->RGB conversion only takes the 'broadcast safe' colours (8bit range 16-235), and scales that to the full RGB 0-255. While perhaps better for analog monitors etc, this is nasty for Blender - in effect it's throwing away all the colours in the range of 0-16 and 235-255, and stretching the remainder to fill 0-255. This basically discards 15% of the already limited dynamic range of 8bit imagery, which is not nice at all.
New (svn) versions of FFMPEG contain new commands/flags to tell it to retrieve the full 0-255 range of the YUV source, to convert it to 0-255 RGB. The patch essentially enables this.
However this functionality is not in the current 0.5.1 FFMPEG release, which is what has been precompiled for OSX and perhaps Windows too in blender's /lib svn. Linux users can compile blender against the FFMPEG version on their system, which may well be a newer version.
I'm not really involved (nor have i ever been) in the process of deciding what ffmpeg libraries to use in svn etc, but I presume it's not a good idea to rely upon a development svn version of FFMPEG for blender.
Therefore, the best solution I can come up with for the time being, is to:
a) get someone (on linux, who can test it, etc) to commit the patch, but ifdefed out for now, so people with newer ffmpegs can manually enable it themselves to get this fixed functionality.
b) keep waiting for a new ffmpeg release and update our precompiled versions when that happens
%%%
%%%Ok
A bit more history. Peter Schaile is also aware of this problem, I submitted a bug report for 2.49b about 12 months ago. Peter pointed to swsscale being hard coded.
I built FFMPEG from git last night including a seperate swsscale folder that I placed inside ffmpeg folder however due to problems with Blenders scons building when trying to use a localised FFMPEG I had to make it system. So I have unstable git FFMPEG system wide now. Already reported bug on scons problems, Nathan and Brecht are aware.
I applied the pasteall patch, applied this patch to 2.5 and left scons script pointing to /usr for FFMPEG.
I get confirmation that I'm using git version of FFMPEG on the command line but when testing using Troys FFMPEG line I don't see any change in the png luma range testing mpeg2 HD source. I'll can test DV etc later. :-(
In 2.5 I see no change via Nodes or VSE either. :-(
But I'm not that familiar building FFMPEG, Troy can you suggest the command line config. Do I need to build swsscale separately, I didn't see any error messages and FFMPEG appears to have been built and installed.
The conversion matrix is an added consideration. Xaviers recent patch for Rec709. Blender has all ways been Rec601 but choice of matrix should really be a choice in the YCbCr -> RGB conversion as well.
Great work Troy. Looking forward to using this.%%%
%%%And sorry for the .png heavy post on my blog that Troy points to really bad show on my part. Must change them to .jpg. :-)
Although probably all history very soon when this and FFMPEG patches take over. :-)%%%
%%%Last comment. :-)
The scaling 16 - 235 is typical in a conversion to RGB. Otherwise RGB black will be at 16 (more a grey) not 0.
I think a decent levels tool would be beneficial where a user can map the YUV range to RGB range. I know the Colour Balance exists. But all apps have that and a basic levels tool.
If users want broadcast range they can set levels accordingly, if users want to map there minimum populated YUV black level to RGB 0 they can. Video cams don't necessarily capture as low as YUV 0 and 255 typically YUV 10 to 16 are the lowest reached.
If user wants full range where black is RGB 16 there will be problems compositing with other graphics for example where black is 0.%%%
%%%WRT to cameras - most newer HD cams that record x264 use full range. It is a legacy issue bumping up against current, but in this discussion it is entirely moot. For post processing, grading, etc., it is entirely plausible and expected that you are granted full dynamic range of your source material - whether or not it is properly scaled for a digital delivery format.
ffmpeg on Linux will always default to the system libs. This means that if you have any traces of ffmpeg in your default libraries, it will use them.
In the end, there is odd mojo there.
I'll try my best to pop a screenshot of the histogram and submit it here.
%%%
%%%I am attaching a PNG here for sampling.
The main issue here now is whether or not ffmpeg is making an optimal decision on the YUV to RGB translation, and likely that analysis would only be possible via output in something like Nuke.
For the time being however, this ffmpeg induced via this behavior is preferred by an order of a magnitude.
Unique colours from the previous YUV transform in the selected frame were 145081. After the YUV color space transform patch the values are 157217.
I believe the before and after quick image supports that claim via the scopes and internal histogram.%%%
%%%You can download the source footage here.
http://sample-images.s3.amazonaws.com/MVI_1394.MOV%%%
%%%Oh drat.
Re-read your last comment.
You only need to apply the patch to Blender that is attached to this thread.
There is no need to apply the PasteAll patch. This is specfically Blender related.
The issue Matt cites is that the ffmpeg included with Blender doesn't have the ffmpeg functionality to properly use the patch attached.
So @yellow-1 you have a few missteps from very the misinformation I apparently accidentally presented to you. Apologies.
Again, the proper solution is to 1) Use an SVN ffmpeg and 2) Apply this patch to Blender. That's it.%%%
%%%Ugh. Typo in the patch. It worked fine but included a duplicate assert for anim being non-null. Sorry.%%%
%%%Don't tell anyone, but I think Nuke is erroneously dealing with luminance values too.
I have attached both sRGB output from Nuke and REC709.
You be the judge.%%%
%%%After a bit more toying, setting Nuke to REC709 at source is the only version that gets a histogram / scope readout that is even remotely close. That said, there is definitely some stretching going on in the blacks.
From what I can see, Blender's output thus far yields the largest gamut of differing colours. Whether or not there is some fudging going on at the YUV to RGB level is unknown.
Interesting however...%%%
%%%I've tested Troys patch on Linux Karmic Koala and find that for true progressive source material the patch gives unscaled luma as proposed. Unsure as to colour accuracy at this point.
However the patch does not appear to work with interlaced sources, neither fielded where there is a time difference between frames ie: Top Field or Bottom Field first.
Or PSF 'Progressive Segmented Frames' type interlaced sources, which are really progressive with two segments rather than fields with no time difference, but in a container that can get flagged as a interlaced source.
So currently the patch will fail on the majority of source video that the average user would import, whether it be from SD or HD cameras, only users with DSLR's would be successful.
Whether a video source is interlaced or not is important with regard to the YUV -> RGB conversion, it needs to be known, including field order and accurately detected re PSF material.
I think FilterY in blender handles this?
So maybe it's better to expose the colour matrix 601 or 709 and a interlaced yes or no , field order options to the user before conversion?
Also deinterlacing in the VSE doesn't give deinterlaced preview.
'Full Range' is not only the preserve of new cameras, even old DV cams have the full range to capture within but in reality unless a user underexposes substantially black values will struggle to reach below YUV 10.
YUV to RGB luma mapping doesn't mean YUV 0 is equivalent to RGB 0 and so on. Dynamic range is from lowest captured black to highest white, not necessarily 0 & 255.
As per my original bug report Sept 09 that there should be the option to import video sources without luma scaling in the conversion to RGB and possibly the default operation, but not everyone requires this, it requires additional steps in the import and export optimising levels by taking min populated black and max populated white then remapping to RGB 0 & 255 and mapping those back to 16 - 235 for DVD as an example.
Be prepared for comments like 'Why does my video looked washed out?' after import if no scaling is the default and no option is given for choice.
The need for extra info on the histogram like min and max luma and a levels tool for quick remapping would help also.
%%%
%%%re. interlaced: I noticed in the patch there is another separate (not sure why) area above the patched area in the code that deals with interlaced footage, that may need these additional flags added there, too. Hard to add/test it myself though since I can't compile it with the FFMPEG version I have here on osx.
Maybe troy can have a test?%%%
%%%@yellow-1:
Two things.
First, attach a sample. Five megs would suffice.
Second, on the issue of scaled lumi or not, the point is that within Blender it isn't entirely an illogical choice to use full gamut. And yes, while older cameras have ranges beyond the lumi expected, one would still likely want that information in a post production environment.
I can't think of a circumstance where this would not be desirable during work. That said, there could easily be a checkbox for rendering to provide a 0-255 > 16-235 for destination preview perhaps?
If you have an interlaced progressive, see if you can dig one up. I may have one kicking around from my older GH1, but if you have alternate formats it would be appreciated.%%%
%%%psf25 PAL HDV 1440x1080 sample.%%%
%%%A link might help. :-)
www.jazmotion.pwp.blueyonder.co.uk/psf25.m2t
%%%
%%%We don't need to upgrade everyone's ffmpeg version to commit the patch, this code can be #ifdef'd out based on the ffmpeg version number, see e.g. the attached patch.%%%
%%%I can't seem to spot where exactly sws_scale would handle things any differently as the context seems to remain the same. I tried moving the setColorspace around to no avail.
If I had to wager, I would suspect that the interlaced issues are likely ffmpeg related - most likely tied to the newer colorspace code landing.%%%
%%%ack, of course it can be ifdefed based on version, silly.
Ok, with that version check, it compiles and runs just fine on my system, so I've committed it - let me know if there are any troubles.
As for interlaced sources, does it work to just copy that code block up higher in the part dealing with interlaced?
I've attached a patch, interlace_ffmpeg.txt, but I can't actually test it here. Give it a try and see what happens.%%%
%%%Yeah I spotted that too Matt.
I already attempted what you suggested ;) to no avail. I don't see where anim->img_convert_ctx would change for interlaced or non-interlaced content. If you can see where it would grab a new anim->img_convert_ctx then we should place it there.
It is pretty easy to spot the scaling in Blender's Seq simply by looking at the luma scope. if you see dark black bands in about 10% increments you can tell immediately that the source is scaled.
If I had to wager, I'd say this is ffmpeg missing the interlaced colorspace adjustments.
%%%
%%%Hello,
I can't add a new file to this thread :(.
I made a patch to clean this one (after ot was commited unfortunately), you can find it here:
http://www.pasteall.org/12303/diff
It also shut up a couple of warnings.
Tested here and works fine.
However I am a little bit more pessimistic about its magic !
I think this only tries to detect the ycc colorspace details (matrix coeficient and range) form the codec used. This might be usefull for ffmpeg which can read/write jpeg png ... For blender however I suppose that the range parameter is only useful when reading Motion Jpeg. The matrix coefficient however is nice, but should not really produce tremendous differences.
What most digital camera users wants (those that will post process the footages) is to force JFIF conversion (instead of ITU601) and a custom conversion with the same matrix coeficient as ITU709 but with a 0-255 range (instead of true ITU709)
This is still not possible, this patch make ffmpeg trying to autodetect these parameters, no way to force them. And MPEG codecs will be detected as usin 16-235 range because they do use this range.
Xavier
%%%
%%%Would be interesting to check the colorspace details while encoding also.%%%
%%%@XavierThomas:
It sure would.
This was a desperation hack on my behalf so that I didn't have to manually output a PNG series with a patched ffmepg.
What we really need to attack is the matrix (perhaps we just let the technician select 601 / 709 and force it if possible?) and whether to broadcast clamp or not (again let the technician choose it) for output / preview / etc.
You likely know more than I by an order of a magnitude on this front Xat, so I'd hope you can help bring the Blender VSE to a new quality level.
It should also be noted that this isn't strictly a VSE issue as the same code is used everywhere when it comes to motion picture files. As such, the quality level impact is rather profound throughout Blender.%%%
%%%I did test with big bug bunny h264 (mov), and the detected range was 0 (16-235). Which I expected because mpeg is know to use this range. However I try debugging another time with the test vid one of you linked (MVI_1394.MOV) and the detected range for this one is 1 (0-255). The difference compared with blender unpatched is tremendous, specially in the blacks and the saturated yellow.
So I suppose some codec support both range and ffmpeg detect it correctly. H264 wint Quicktime format seems to be one of those case.
Still no form to post my patch here ?!¿
http://www.pasteall.org/12303/diff
Xavier%%%
%%%Xat are you not able to submit at the bottom of this form?
I find it odd that h264 doesn't work as it is YUV. Ideas?%%%
%%%I can't post the patch because there is no "attach file" at the end of this page (but I see it in other thread). Maybe there is a maximum number of attached files.
I don't know for h264 but I know MPEG2 can optionally embed "only":
and for these parameters you can choose:
and I am pretty sure all these map YCbCr to 16-235 16-240 range.
So I suppose this is a feature of the quicktime container.
%%%
%%%Adding Xat's patch because he couldn't see the submit box for some reason.%%%
%%%Hi
The Sequence Display Extension flag in the video file header needs to be set by the encoder for a 'correct' matrix decoding choice.
But it is not always set by the encoder and some set it fixed, some let you choose, some are oblivious. FFMPEG from the few tests I've done doesn't set the flag for any codecs it has implemented that I have tested.
Media player play back, some will ignore the SDE flag others respect it, DVD for example is generally played back as 601 regardless of matrix used.
Some software media players ignore the matrix flag too. And they'll clamp always to 16 - 235 like FFMPEG does on RGB playback. Even if the user sets the matrix flag it's not 100% that they will see what they encoded correctly depending on play back device handling.
If a user wants to use the full range luma, then for example with HD to SD encoding where the original is 709 and 0 - 255 re BBB DVD from full range RGB then the user must bring the 0 - 255 range down within the 16 - 235 zone and do a matrix conversion to 601 when encoding for playback devices that are DVD otherwise it will just ignore the 'out of range' or it will clip and crush by FFMPEG based software players for example. So choice at the encoder is needed.
Perhaps BBB was encoded with a limited 16 - 235 luma range depending on the codec choices. Was the matrix and luma scaling different between the BBB versions like DVD, or WWW or HD for example or was it 16 - 235 across all versions. This would have to be set in the encoder by the user if there was choice.
I mentioned further up this thread that I feel, the user needs to be able to set the colour matrix they want to use in the conversion to RGB or RGB to YCbCr and whether they use 0 - 235 or 0 - 255. Whether source is interlaced or not is involved in the the conversion to RGB and back too I believe.
Using Mediainfo the MOV's are 709 colour primaries but the colour matrix used is 601 perhaps that has an effect.
Quicktime container can use YUV or RGB and 16 - 235 or 0 - 255 for 8bit, and however many more for 10bit, so too can .avi.
I think it is the implementation of the codec and what is exposed to the user as encoder/decoder preferences that determines what a container format codec holds with regard to luma and colour matrix.
I believe some players choose based on frame size for example, like 720x576 being decoded as 601 and 16 - 235. 1920x1080 being decoded as 709 and 0 - 255.
Don't know if any of the above is accurate, useful or necessary. :-)
%%%
%%%Committed some time ago.
Closing%%%
Changed status from 'Open' to: 'Archived'