keyframe_insert_menu, Ключей нема! |
Home· Статьи · Вакансии · Чертежи · 3D Галерея · 2D Галерея · Форум · Форум Realtime | Реклама |  Конкурсы | RAR Award | Правила |
Здравствуйте, гость ( Вход | Регистрация )
keyframe_insert_menu, Ключей нема! |
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 # Пробовал В консоли Питона все проходит на ура, ключи появляются, при запуске скрипта - ключей нет... Писать разрабам? Баг? Я уже вторую клаву ломаю... |
|
|
05/05/2020, 09:29
Сообщение
#2
|
|
Новичок Группа: Пользователи Сообщений: 4 Регистрация: 04/05/2020 Пользователь №: 145 533 |
ОООО, я тут такой срач за 3д макс пропустил...
Чем больше сижу в Блендере, тем больше в него влюбляюсь, да, со всеми его мелкими багами, но он давно уже перерос все остальные трехмерники. Макс, на моей памяти отличился тем, что они сделали типа фотку с летающей тарелкой, и экспертиза признала ее подлинной... А так Макс напоминает мне Франкенштейна, собранного из лоскутов, ребята скупают разработки со всего мира, и прикручивают их себе, не всегда удачно причем. Например, понадобилось мне как то перенести кости с весами с одного скелета на другой, открылось глючное окошко с названиями костей - ок, но работать в нем вручную оказалось совсем невозможно из за его глюкавости, хорошо, сказал я, сейчас напишем небольшой скрипт, и дело пойдет... Фикушки - это окно всплывало вообще отдельно от Макса, и скрипт его не видел, от слова совсем! Достучаться туда я смог только через Винду, подглядывая за окнами Виндовс. Есть вещи которые невозможно сделать в Максе, и которые делаются в Блендере на раз, а аддоны - ооо, это отдельная песня. Так что в Макс я залазию все реже и реже -Да здравствует БЛЕНДЕР! Сколько же я пальцев стер об этот Макс, пока не нашел для себя Блендер... |
|
|
10/05/2020, 12:36
Сообщение
#3
|
|
Новичок Группа: Пользователи Сообщений: 3 Регистрация: 23/03/2014 Пользователь №: 100 197 |
выложи .blend файл с проблемным кодом
|
|
|
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 |
|
|
11/05/2020, 09:49
Сообщение
#5
|
|
Новичок Группа: Пользователи Сообщений: 3 Регистрация: 23/03/2014 Пользователь №: 100 197 |
так проблема осталась? код смотреть?
выложи .blend файл в сеть, на какой-нибудь ресурс и дай ссылку или на почту мне на ya.ru... |
|
|
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, но видно не судьба... Ну да ладно, пара лишних строк в скрипте не помешает. |
|
|
12/05/2020, 07:18
Сообщение
#7
|
|
Новичок Группа: Пользователи Сообщений: 3 Регистрация: 23/03/2014 Пользователь №: 100 197 |
Хорошо, если нужна помощь, то пиши и присалый файл ...
|
|
|
Bots |
Системное сообщение
|
|
|
|
|
Текстовая версия | Сейчас: 26/04/2024 - 01:26 |