Найти запеченные текстуры 3D-модель в Blender / Python - PullRequest
0 голосов
/ 06 февраля 2020

Из набора данных 3D-моделей мне нужно автоматически определить, какие модели имеют запеченные текстуры, а какие нет. Я использую Blender- Python для манипулирования моделями, но я открыт для предложений.

(слишком много моделей, чтобы открыть их одну за другой)

1 Ответ

0 голосов
/ 15 февраля 2020

Ну, во-первых, нам нужен способ определить, использует ли объект запеченную текстуру. Допустим, все запеченные текстуры используют изображение с именем «запеченный», поэтому давайте посмотрим на узлы текстуры изображения.

Ниже будут найдены все объекты в текущем смешанном файле, который использует текстуру изображения с выпечкой в имени.

import bpy

for obj in bpy.data.objects:
    # does object have a material?
    if len(obj.material_slots) < 1: continue
    for slot in obj.material_slots:
        # skip empty slots and mats that don't use nodes
        if not slot.material or not slot.material.use_nodes: continue
        for n in slot.material.node_tree.nodes:
            if n.type == 'TEX_IMAGE' and 'baked' in n.image.name:
                print(f'{obj.name} uses baked image {n.image.name}')

Поскольку blender будет очищать скрипты при открытии новых файлов blend, нам нужен скрипт, который скажет blender открыть файл и запустить предыдущий скрипт, а затем повторить для каждого файла. Чтобы сохранить кроссплатформенность, мы также можем использовать python.

from glob import glob
from subprocess import call

for blendFile in glob('*.blend'):
    arglist = [
    'blender',
    '--factory-startup',
    '-b',
    blendFile,
    '--python',
    'check_baked.py',
    ]
    print(f'Checking {blendFile}...')
    call(arglist)
...