How to relink (relocate) ALL broken links automatically?
Есть сцена, часть моделей в которой прилинкованы из других blend-файлов. Если пути к этим файлам изменятся, прилинкованные объекты пропадут. You have a scene with some models, which are linked from other blend-files. If the paths of these files will be changed, all linked objects will disappear from your scene.
Обычный в интернетах совет по исправлению ситуации — открыть раздел Blender File в Outliner’е и заменить устаревшие пути на актуальные, после чего перезагрузить сцену. Это работает, но как быть, если прилинкованных объектов — сотни или тысячи? File → External Data → Find Missing Files в данном случае не поможет. The standard advice from the Internet – open the “Blender File” section in the Outliner and change the broken paths to actual, and then reload the scene. But what if you have hundreds of thousands of linked files? File → External Data → Find Missing Files will not help you in this situation.
Автоматизировать процесс можно с помощью Python. Открываем окно редактора текстового (того, что во Blender встроен), творим файл новый и пишем следующее: You can automatize the process with Python. Open a window with the Text Editor (I mean the Text Editor built-in Blender), create a new file, and write:

import bpy

for lib in bpy.data.libraries:

if lib.filepath.startswith("//assets/"):

lib.filepath = lib.filepath.replace("//assets/", "/home/mapper720/[DATA EXPUNGED]/assets/")

Здесь идёт перебор всех прилинкованных моделей и проверяются их адреса. В данном случае устаревшие адреса начинаются с «//assets/» (их обличает соответствующая иконка в Outliner’е), поэтому аще начинается адрес модели с «//assets/» — значит, это ссылка битая и потребно оную заменить. Те же ссылки, что начинаются на «//../media/mapper720…» — рабочие, их не трогаем.

Если битые и актуальные ссылки начинаются одинаково, можно вместо startswith использовать

This script bypasses all linked models and checks their addresses. In my case the broken links start with «//assets/», so if the address of the model starts with «//assets/» (the icon in the Outliner exposes them) — this link is broken and should be changed to actual. The links which start with «//../media/mapper720…» are OK, don’t touch them.

If the broken links have the same beginning as the broken ones, you can don’t use startswith and use

if "2018" in lib.filepath
Или not in, или… В общем, изучайте Python, особенно операторы и работу со строками — и узнаете все возможные варианты. Or not in, or… In short, learn Python, especially operators, and working with lines – and you will know all available options.
После перезагрузки сцены потерянные объекты должны вернуться на круги своя. After you reload the scene all lost items should return agayne to his circuites from whence they dyd come.

© Denis Skiba aka Mapper720

16.09.2020 от Р.Х.

www.mapper720.ru

Отдельное спасибо пользователю lemon с blender.stackexchange.com за подсказку.

© Denis Skiba aka Mapper720

16.09.2020 A.D.

www.mapper720.ru

Special thanks to lemon from blender.stackexchange.com for a hint.