3DCenter.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Reply to this topicStart new topic
> keyframe_insert_menu, Ключей нема!
Alex Baev
сообщение 04/05/2020, 16:02
Сообщение #1


Новичок
Иконка группы

Группа: Пользователи
Сообщений: 4
Регистрация: 04/05/2020
Пользователь №: 145 533



Код
if bpy.ops.object.mode_set.poll():  bpy.ops.object.mode_set(mode = "POSE") # переведем в режим позы.
bpy.ops.anim.keying_set_active_set(type="Rotation") # активный набор ключей.

bpy.data.objects["Armature"].data.bones["Bone3"].select = True # Пробовал
bpy.context.object.pose.bones["Bone3"].rotation_quaternion.x = 0.137 # по х вверх/вниз крутит.
#bpy.ops.anim.keyframe_insert_menu(type="Rotation", confirm_success=False) # Пробовал
bpy.data.objects["Armature"].data.bones["Bone3"].select = False # Пробовал


В консоли Питона все проходит на ура, ключи появляются, при запуске скрипта - ключей нет...
Писать разрабам? Баг? Я уже вторую клаву ломаю...
Go to the top of the page
 
+Quote Post
Alex Baev
сообщение 05/05/2020, 09:29
Сообщение #2


Новичок
Иконка группы

Группа: Пользователи
Сообщений: 4
Регистрация: 04/05/2020
Пользователь №: 145 533



ОООО, я тут такой срач за 3д макс пропустил...
Чем больше сижу в Блендере, тем больше в него влюбляюсь, да, со всеми его мелкими багами, но он давно уже перерос все остальные трехмерники.
Макс, на моей памяти отличился тем, что они сделали типа фотку с летающей тарелкой, и экспертиза признала ее подлинной... А так Макс напоминает мне Франкенштейна, собранного из лоскутов, ребята скупают разработки со всего мира, и прикручивают их себе, не всегда удачно причем. Например, понадобилось мне как то перенести кости с весами с одного скелета на другой, открылось глючное окошко с названиями костей - ок, но работать в нем вручную оказалось совсем невозможно из за его глюкавости, хорошо, сказал я, сейчас напишем небольшой скрипт, и дело пойдет... Фикушки - это окно всплывало вообще отдельно от Макса, и скрипт его не видел, от слова совсем! Достучаться туда я смог только через Винду, подглядывая за окнами Виндовс.
Есть вещи которые невозможно сделать в Максе, и которые делаются в Блендере на раз, а аддоны - ооо, это отдельная песня.
Так что в Макс я залазию все реже и реже -Да здравствует БЛЕНДЕР!
Сколько же я пальцев стер об этот Макс, пока не нашел для себя Блендер...
Go to the top of the page
 
+Quote Post
sungreen
сообщение 10/05/2020, 12:36
Сообщение #3


Новичок
Иконка группы

Группа: Пользователи
Сообщений: 3
Регистрация: 23/03/2014
Пользователь №: 100 197



выложи .blend файл с проблемным кодом
Go to the top of the page
 
+Quote Post
Alex Baev
сообщение 11/05/2020, 08:21
Сообщение #4


Новичок
Иконка группы

Группа: Пользователи
Сообщений: 4
Регистрация: 04/05/2020
Пользователь №: 145 533



Ошибку нашел! Привязанная кость Tail1Vektor, всегда показывает 0, хотя и болтается. Соответственно скрипт всегда получает 0, и не работает. Оооо, моя голова... Это надо же, проверить как работает управляющая кость через две недели... И разрабам написал... Посыпаю голову пеплом.

Неудачная загрузка. Вам запрещено загружать такой тип файлов: Мне запрещено загружать blend file - мало юкки наверно...
Код нерабочий - если бы он заработал, я б его поправил, а так if, elif все в баню.

Код
import bpy

if bpy.ops.object.mode_set.poll():  bpy.ops.object.mode_set(mode = "POSE")
bpy.ops.anim.keying_set_active_set(type = "Rotation")

iFrameEnd = bpy.context.scene.frame_end
iNumFrame = 0   # Current frame number

# Past position
ZOldVektor = bpy.context.object.pose.bones["Tail1Vektor"].rotation_quaternion.x
ZOldSmall = 0
ZOldSmallRotate = 0
ZTail1 = bpy.context.object.pose.bones["Tail1"].rotation_quaternion.x

ZRotate = 0
ZOldRotate = 0

ZShange = 0

bpy.data.objects["Lizard"].data.bones["Tail1Vektor"].select = False
bpy.data.objects["Lizard"].data.bones["Tail2"].select = False
bpy.data.objects["Lizard"].data.bones["Tail3"].select = False
bpy.data.objects["Lizard"].data.bones["Tail4"].select = False
bpy.data.objects["Lizard"].data.bones["Tail5"].select = False
bpy.data.objects["Lizard"].data.bones["Tail6"].select = False

p_idx = iFrameEnd
while p_idx:
    p_idx -= 1
    
    iNumFrame = iNumFrame + 1
    bpy.context.scene.frame_set(frame = iNumFrame)
    ZVektor = bpy.context.object.pose.bones["Tail1Vektor"].rotation_quaternion.x # current position
    ZTail1 = bpy.context.object.pose.bones["Tail1"].rotation_quaternion.x # Root bone
    if ZOldVektor > ZVektor:
        ZRotate = 1 # Rise up
        if ZOldVektor > 0.513: # Limit
            bpy.context.object.pose.bones["Tail2"].rotation_quaternion.x = -0.343
            bpy.context.object.pose.bones["Tail3"].rotation_quaternion.x = -0.191
            bpy.context.object.pose.bones["Tail4"].rotation_quaternion.x = -0.025
            bpy.context.object.pose.bones["Tail5"].rotation_quaternion.x = -0.158
            bpy.context.object.pose.bones["Tail6"].rotation_quaternion.x = -0.0
            ZShange = 1
        if ZOldVektor < 0.513:
            if ZRotate != ZOldRotate:
                bpy.data.objects["Lizard"].data.bones["Tail2"].select = True
                bpy.context.object.pose.bones["Tail2"].rotation_quaternion.x = ZVektor + ZTail1
                bpy.ops.anim.keyframe_insert_menu(type="Rotation", confirm_success=False)
                bpy.data.objects["Lizard"].data.bones["Tail2"].select = False
                bpy.data.objects["Lizard"].data.bones["Tail3"].select = True
                bpy.context.object.pose.bones["Tail3"].rotation_quaternion.x = 0.137
                bpy.ops.anim.keyframe_insert_menu(type="Rotation", confirm_success=False)
                bpy.data.objects["Lizard"].data.bones["Tail3"].select = False
                bpy.data.objects["Lizard"].data.bones["Tail4"].select = True
                bpy.context.object.pose.bones["Tail4"].rotation_quaternion.x = -0.182
                bpy.ops.anim.keyframe_insert_menu(type="Rotation", confirm_success=False)
                bpy.data.objects["Lizard"].data.bones["Tail4"].select = False
                bpy.data.objects["Lizard"].data.bones["Tail5"].select = True
                bpy.context.object.pose.bones["Tail5"].rotation_quaternion.x = 0.031
                bpy.ops.anim.keyframe_insert_menu(type="Rotation", confirm_success=False)
                bpy.data.objects["Lizard"].data.bones["Tail5"].select = False
                bpy.data.objects["Lizard"].data.bones["Tail6"].select = True
                bpy.context.object.pose.bones["Tail6"].rotation_quaternion.x = 0.100
                bpy.ops.anim.keyframe_insert_menu(type="Rotation", confirm_success=False)
                bpy.data.objects["Lizard"].data.bones["Tail6"].select = False
                OldVektor = ZVektor

    elif ZOldVektor > ZVektor:
        ZRotate = 0
        if ZOldVektor < -0.380: # Limit
            bpy.context.object.pose.bones["Tail2"].rotation_quaternion.x = 0.513
            bpy.context.object.pose.bones["Tail3"].rotation_quaternion.x = 0
            bpy.context.object.pose.bones["Tail4"].rotation_quaternion.x = 0.060
            bpy.context.object.pose.bones["Tail5"].rotation_quaternion.x = -0.081
            bpy.context.object.pose.bones["Tail6"].rotation_quaternion.x = -0.165
            ZShange = 1
        if ZOldVektor > -0.380:
             if ZRotate != ZOldRotate:
                bpy.data.objects["Lizard"].data.bones["Tail2"].select = True
                bpy.context.object.pose.bones["Tail2"].rotation_quaternion.x = ZVektor + ZTail1
                bpy.ops.anim.keyframe_insert_menu(type="Rotation", confirm_success=False)
                bpy.data.objects["Lizard"].data.bones["Tail2"].select = False
                bpy.data.objects["Lizard"].data.bones["Tail3"].select = True
                bpy.context.object.pose.bones["Tail3"].rotation_quaternion.x = -0.062
                bpy.ops.anim.keyframe_insert_menu(type="Rotation", confirm_success=False)
                bpy.data.objects["Lizard"].data.bones["Tail3"].select = False
                bpy.data.objects["Lizard"].data.bones["Tail4"].select = True
                bpy.context.object.pose.bones["Tail4"].rotation_quaternion.x = -0.130
                bpy.ops.anim.keyframe_insert_menu(type="Rotation", confirm_success=False)
                bpy.data.objects["Lizard"].data.bones["Tail4"].select = False
                bpy.data.objects["Lizard"].data.bones["Tail5"].select = True
                bpy.context.object.pose.bones["Tail5"].rotation_quaternion.x = -0.069
                bpy.ops.anim.keyframe_insert_menu(type="Rotation", confirm_success=False)
                bpy.data.objects["Lizard"].data.bones["Tail5"].select = False
                bpy.data.objects["Lizard"].data.bones["Tail6"].select = True
                bpy.context.object.pose.bones["Tail6"].rotation_quaternion.x = -0.058
                bpy.ops.anim.keyframe_insert_menu(type="Rotation", confirm_success=False)
                bpy.data.objects["Lizard"].data.bones["Tail6"].select = False
                OldVektor = ZVektor

    if ZShange == 1:
        ZOldRotate = ZRotate
        OldVektor = ZVektor
        ZShange = 0
        bpy.data.objects["Lizard"].data.bones["Tail2"].select = True
        bpy.ops.anim.keyframe_insert_menu(type="Available")
        bpy.ops.anim.keyframe_insert_menu(type="Rotation", confirm_success=True)
        bpy.data.objects["Lizard"].data.bones["Tail2"].select = False
        bpy.data.objects["Lizard"].data.bones["Tail3"].select = True
        bpy.ops.anim.keyframe_insert_menu(type="Rotation", confirm_success=False)
        bpy.data.objects["Lizard"].data.bones["Tail3"].select = False
        bpy.data.objects["Lizard"].data.bones["Tail4"].select = True
        bpy.ops.anim.keyframe_insert_menu(type="Rotation", confirm_success=False)
        bpy.data.objects["Lizard"].data.bones["Tail4"].select = False
        bpy.data.objects["Lizard"].data.bones["Tail5"].select = True
        bpy.ops.anim.keyframe_insert_menu(type="Rotation", confirm_success=False)
        bpy.data.objects["Lizard"].data.bones["Tail5"].select = False
        bpy.data.objects["Lizard"].data.bones["Tail6"].select = True
        bpy.ops.anim.keyframe_insert_menu(type="Rotation", confirm_success=False)
        bpy.data.objects["Lizard"].data.bones["Tail6"].select = False

#bpy.context.object.pose.bones["Tail1Vektor"].rotation_quaternion.x - No! == 0      
#bpy.context.object.pose.bones["Tail1Vektor"].rotation_quaternion[3] - No! == 0
Go to the top of the page
 
+Quote Post
sungreen
сообщение 11/05/2020, 09:49
Сообщение #5


Новичок
Иконка группы

Группа: Пользователи
Сообщений: 3
Регистрация: 23/03/2014
Пользователь №: 100 197



так проблема осталась? код смотреть?
выложи .blend файл в сеть, на какой-нибудь ресурс и дай ссылку или на почту мне на ya.ru...
Go to the top of the page
 
+Quote Post
Alex Baev
сообщение 12/05/2020, 06:58
Сообщение #6


Новичок
Иконка группы

Группа: Пользователи
Сообщений: 4
Регистрация: 04/05/2020
Пользователь №: 145 533



Файл простой до безобразия, там 6 костей Tail, и одна кость болтающаяся на веревке, Tail1Vektor. Идея в том, что персонаж двигается, Tail1Vektor болтается - здесь все верно.
Все кости отзываются на bpy.context.object.pose.bones["Tail2"].rotation_quaternion.x, и дают правильное положение в пространстве, все, кроме Tail1Vektor! Из за того, что эта кость приаттачена к веревке она всегда дает 0! Поэтому скрипт ее просто не видит... Идея проста до ужаса - выкинуть нахрен Tail1Vektor вместе с веревками, и брать положение у Tail1 - корневой кости хвоста, которая прекрасно отзывается! Тогда придется считать кадры - нужно вычислять не только положение кости, но и скорость поворота - я надеялся избежать этих вычислений с помощью Tail1Vektor, но видно не судьба... Ну да ладно, пара лишних строк в скрипте не помешает. biggrin.gif
Go to the top of the page
 
+Quote Post
sungreen
сообщение 12/05/2020, 07:18
Сообщение #7


Новичок
Иконка группы

Группа: Пользователи
Сообщений: 3
Регистрация: 23/03/2014
Пользователь №: 100 197



Хорошо, если нужна помощь, то пиши и присалый файл ...
Go to the top of the page
 
+Quote Post
Bots
сообщение Системное сообщение






Fast ReplyReply to this topicStart new topic

1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



RSS Текстовая версия Сейчас: 05/08/2020 - 15:42