Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ «НаписаниС скриптов для Blender 2.49Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 23

Автор Michel Anders

ΠšΠΎΡΡ‚ΠΈ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΎΠ½ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π² Π°Ρ€ΠΌΠ°Ρ‚ΡƒΡ€Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΉ ΠΈΡ… Π³ΠΎΠ»ΠΎΠ²Ρ‹ ΠΈ хвоста (Ρ‚ΡƒΠΏΠΎΠΉ ΠΈ острый ΠΊΠΎΠ½Ρ†Ρ‹ соотвСтствСнно, Π² прСдставлСнии кости ΠΊΠ°ΠΊ Π²ΠΎΡΡŒΠΌΠΈΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ°). Для соСдинСния костСй Π½Π΅ достаточно ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ хвоста ΠΎΠ΄Π½ΠΎΠΉ кости Ρ€Π°Π²Π½ΠΎΠΉ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ Π³ΠΎΠ»ΠΎΠ²Ρ‹ Π΄Ρ€ΡƒΠ³ΠΎΠΉ. Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΊΠΎΡΡ‚ΡŒ слСдовала Π·Π° пСрСмСщСниями Π΄Ρ€ΡƒΠ³ΠΎΠΉ кости, ΠΎΠ½Π° Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ Π΄ΠΎΡ‡Π΅Ρ€Π½Π΅ΠΉ ΠΊ Π½Π΅ΠΉ. ΠžΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒ-ΠΏΠΎΡ‚ΠΎΠΌΠΎΠΊ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡŽΡ‚ΡΡ установкой Π² Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ parent ΠΏΠΎΡ‚ΠΎΠΌΠΊΠ° ссылки Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠΉ кости. Π’ нашСм ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅, Ρƒ нас каТдая ΠΊΠΎΡΡ‚ΡŒ Π»Π°Π΄ΠΎΠ½ΠΈ являСтся ΠΏΠΎΡ‚ΠΎΠΌΠΊΠΎΠΌ своСй ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ кости Ρ€ΡƒΠΊΠΈ.

ΠšΠΎΡΡ‚ΠΈ Π² составС Π°Ρ€ΠΌΠ°Ρ‚ΡƒΡ€Ρ‹ ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΈΡ… ΠΈΠΌΠ΅Π½Π΅ΠΌ. Если свойство ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° Π°Ρ€ΠΌΠ°Ρ‚ΡƒΡ€Ρ‹ VGROUPS установлСно, имя кости Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½ΠΎ ΠΈΠΌΠ΅Π½ΠΈ Π³Ρ€ΡƒΠΏΠΏΡ‹ Π²Π΅Ρ€ΡˆΠΈΠ½, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΎΠ½Π° влияСт.

ПослСдняя строка ΠΊΠΎΠ΄Π° нашСго ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° Ρ‚Π°ΠΊΠΆΠ΅ Π²Π°ΠΆΠ½Π°; Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π°Ρ€ΠΌΠ°Ρ‚ΡƒΡ€Ρƒ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»Π΅ΠΌ МСш-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ излишним Π² ситуациях, Π³Π΄Π΅ Π°Ρ€ΠΌΠ°Ρ‚ΡƒΡ€Π° ΠΈ мСш ΠΎΡΡ‚Π°ΡŽΡ‚ΡΡ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΈ Ρ‚ΠΎΠΌ ΠΆΠ΅ мСстС, ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅ΡˆΠ°ΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ кости Π² Π°Ρ€ΠΌΠ°Ρ‚ΡƒΡ€Π΅; Π½ΠΎ Ссли Π½Π΅ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ этого, это ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Ρ‚ ΠΊ нСустойчивому ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΡŽ мСша ΠΏΡ€ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΌ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΠΏΠΎΠ·Ρ‹ (Π’Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΡ‚ΡŒ мСш Π² Ρ€Π΅ΠΆΠΈΠΌ рСдактирования ΠΈ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ эффСкт ΠΎΡ‚ ΠΏΠΎΠ·Ρ‹ Π½Π° Π°Ρ€ΠΌΠ°Ρ‚ΡƒΡ€Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Π½Π΅ΠΏΡ€ΠΈΠ³ΠΎΠ΄Π΅Π½ для Ρ€Π°Π±ΠΎΡ‚Ρ‹). Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ нашСй оснастки Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ ΠΏΠΎΡ…ΠΎΠΆΠΈΠΌ Π½Π° это (ΠΌΡ‹ установили Ρ€Π΅ΠΆΠΈΠΌ отобраТСния Π°Ρ€ΠΌΠ°Ρ‚ΡƒΡ€Ρ‹ Π² x-ray, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π΅Ρ‘ Π²ΠΈΠ΄ΠΈΠΌΠΎΠΉ Ρ‡Π΅Ρ€Π΅Π· мСш):



ΠžΡ‚Ρ€Π΅Π½Π΄Π΅Ρ€Π΅Π½Π½Ρ‹ΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выглядит Ρ‚Π°ΠΊ:



ΠœΡ‹ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ Π·Π°Ρ…ΠΎΡ‚Π΅Ρ‚ΡŒ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚ΡŒ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… костСй Π΄ΠΎ Ρ‚ΠΎΡ‡Π½Ρ‹Ρ… Π²Ρ€Π°Ρ‰Π΅Π½ΠΈΠΉ Π²ΠΎΠΊΡ€ΡƒΠ³ оси z, ΠΈ это ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ (constraints). ΠœΡ‹ столкнСмся с ограничСниями Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅.


Get a bit of backbone boy!

Всё, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΡƒΠ·Π½Π°Π»ΠΈ ΡƒΠΆΠ΅ ΠΎΠ± остнасткС, ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΠΊ  creepycrawlies.py. Если ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ Ρ€Π°ΡΡˆΠΈΡ€ΠΈΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ сгСнСрированной ΠΌΠΎΠ΄Π΅Π»ΠΈ, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π°Ρ€ΠΌΠ°Ρ‚ΡƒΡ€Ρ‹ со сгСнСрированным мСшСм. ΠœΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ создадим ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π°Ρ€ΠΌΠ°Ρ‚ΡƒΡ€Ρ‹ с подходящим Π½Π°Π±ΠΎΡ€ΠΎΠΌ костСй.

Наша Π·Π°Π΄Π°Ρ‡Π° ΡƒΠΆΠ΅ ΠΎΠ±Π»Π΅Π³Ρ‡Π΅Π½Π°, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΡƒΠΆΠ΅ сгруппировали Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹ частСй Ρ‚Π΅Π»Π° Π² ΠΌΠΎΠ΄ΡƒΠ»Π΅ mymesh, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ связываниС ΠΈΡ… с Π³Ρ€ΡƒΠΏΠΏΠΎΠΉ Π²Π΅Ρ€ΡˆΠΈΠ½ ΠΈ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ ΠΊΠΎΡΡ‚ΡŒΡŽ Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½ΠΎ. НС Ρ‚Π°ΠΊΠΈΠΌ Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΌ Π±ΡƒΠ΄Π΅Ρ‚ созданиС самих костСй, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΈΡ… ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ, ΠΈ ΠΈΡ… Π½ΡƒΠΆΠ½ΠΎ Ρ€Π°Π·ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ ΠΈ ΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΌ способом.

Π”Π°Π²Π°ΠΉΡ‚Π΅ посмотрим Π½Π° Ρ‚ΠΎ, ΠΊΠ°ΠΊ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ Π±Ρ‹Ρ‚ΡŒ осущСствлСны Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ сущСствСнныС элСмСнты (ΠΏΠΎΠ»Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ смотритС Π² creepycrawlies.py). Π‘Π½Π°Ρ‡Π°Π»Π° ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π°Ρ€ΠΌΠ°Ρ‚ΡƒΡ€Ρƒ ΠΈ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π΅Ρ‘ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠΉ для добавлСния костСй:

   ar = Blender.Armature.New('BugBones')

   ar.autoIK = True

   obbones = scn.objects.new(ar)

   ar.makeEditable()

ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Ρ‚Π°ΠΊΠΆΠ΅ Π·Π°Π΄Π°Ρ‚ΡŒ Π»ΡŽΠ±Ρ‹Π΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‚ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π°Ρ€ΠΌΠ°Ρ‚ΡƒΡ€Ρ‹ ΠΈΠ»ΠΈ способ Π΅Ρ‘ отобраТСния. Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ просто Π²ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌ свойство autoIK, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ это сдСлаСт манипуляции хвостом нашСго создания, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‡Π΅Π½ΡŒ Π΄Π»ΠΈΠ½Π½Ρ‹ΠΌ, Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΡ‰Π΅ для Π°Π½ΠΈΠΌΠ°Ρ‚ΠΎΡ€Π°.

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ шаг - это созданиС костСй для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π½Π°Π±ΠΎΡ€Π° Π²Π΅Ρ€ΡˆΠΈΠ½. Бписок vgroup Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΊΠΎΠ΄Π΅ содСрТит ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠΈ (vg,vlist,parent,connected), Π³Π΄Π΅ vg - имя Π³Ρ€ΡƒΠΏΠΏΡ‹ Π²Π΅Ρ€ΡˆΠΈΠ½ Π° vlist - список индСксов Π²Π΅Ρ€ΡˆΠΈΠ½, ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‰ΠΈΡ… этой Π³Ρ€ΡƒΠΏΠΏΠ΅. КаТдая ΠΊΠΎΡΡ‚ΡŒ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΡ‹ создаСм, ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ родитСля ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ физичСски Π±Ρ‹Ρ‚ΡŒ соСдинСна с Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»Π΅ΠΌ. Π­Ρ‚ΠΈ условия Π·Π°Π΄Π°ΡŽΡ‚ΡΡ частями ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ° parent (Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒ) ΠΈ connected (соСдинён):

   for vg,vlist,parent,connected in vgroup:


      bone = Blender.Armature.Editbone()

      bb = bounding_box([verts[i] for i in vlist])

Для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ кости, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΡ‹ создаСм, ΠΌΡ‹ вычисляСм Π³Π°Π±Π°Ρ€ΠΈΡ‚Π½Ρ‹ΠΉ ящик (bounding box) всСх Π²Π΅Ρ€ΡˆΠΈΠ½ Π² Π³Ρ€ΡƒΠΏΠΏΠ΅, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ эта ΠΊΠΎΡΡ‚ΡŒ Π±ΡƒΠ΄Π΅Ρ‚ Π²Π»ΠΈΡΡ‚ΡŒ. Π”Π°Π»ΡŒΡˆΠ΅ ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Ρ€Π°Π·ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ ΠΊΠΎΡΡ‚ΡŒ. ΠŸΡ€ΠΈ способС, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΌΡ‹ настраивали нашС созданиС, всС сСгмСнты Π΅Π³ΠΎ Ρ‚Π΅Π»Π° Π²Ρ‹Ρ‚ΡΠ³ΠΈΠ²Π°Π»ΠΈΡΡŒ вдоль оси y, Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΊΡ€Ρ‹Π»ΡŒΠ΅Π² (wing) ΠΈ Π½ΠΎΠ³ (leg). Они Π²Ρ‹Ρ‚ΡΠ³ΠΈΠ²Π°Π»ΠΈΡΡŒ вдоль оси x. ΠœΡ‹ сначала провСряСм этот Ρ„Π°ΠΊΡ‚, ΠΈ соотвСтствСнно устанавливаСм ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ axis (ось):

      axis=1

      if vg.startswith('wing') or vg.startswith('leg'):

         axis = 0

ΠšΠΎΡΡ‚ΠΈ Π² составС Π°Ρ€ΠΌΠ°Ρ‚ΡƒΡ€Ρ‹ ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ ΠΈ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ ΠΊΠΎΠ½Ρ†ΠΎΠ² костСй, сохранСнных Π² ΠΈΡ… Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°Ρ… head (Π³ΠΎΠ»ΠΎΠ²Π°) ΠΈ tail (ΠΊΠΎΠ½Π΅Ρ†) соотвСтствСнно. Π’Π°ΠΊ, Ссли Ρƒ нас Π΅ΡΡ‚ΡŒ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠ°Ρ ΠΊΠΎΡΡ‚ΡŒ, ΠΈ ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π΅Ρ‘ срСднСС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ y, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ это ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ способом:


      if parent != None :

         parenty = (ar.bones[parent].head[1] +

                    ar.bones[parent].tail[1])/2.0

ΠœΡ‹ вычисляСм эту ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Ρ‚Π°ΠΊΠΈΠ΅ части ΠΊΠ°ΠΊ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π½ΠΎΠ³ΠΈ ΠΈ ΠΊΡ€Ρ‹Π»ΡŒΡ ΠΈΠΌΠ΅ΡŽΡ‚ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ кости (Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ, ΠΎΠ½ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°ΡŽΡ‚ΡΡ вмСстС с Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠΉ ΠΊΠΎΡΡ‚ΡŒΡŽ), Π½ΠΎ Π½Π΅ подсоСдинСны Π³ΠΎΠ»ΠΎΠ²ΠΎΠΉ ΠΊ хвосту. ΠœΡ‹ размСстим эти кости, начиная Π² Ρ†Π΅Π½Ρ‚Ρ€Π΅ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠΉ кости, ΠΈ для этого Π½Π°ΠΌ Π½ΡƒΠΆΠ½Π° позиция родитСля ΠΏΠΎ y. ΠšΠΎΡΡ‚ΠΈ сСгмСнтов, Π»Π΅ΠΆΠ°Ρ‰ΠΈΡ… вдоль оси y, сами ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΎΠ½ΠΈΡ€ΡƒΡŽΡ‚ΡΡ вдоль оси y, ΠΈ, Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΈΠΌΠ΅ΡŽΡ‚ Π½ΡƒΠ»Π΅Π²Ρ‹Π΅ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ x ΠΈ z. ΠšΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ x ΠΈ z Π½ΠΎΠ³ ΠΈ сСгмСнтов ΠΊΡ€Ρ‹Π»ΡŒΠ΅Π² бСрутся ΠΈΠ· ΠΈΡ… Π³Π°Π±Π°Ρ€ΠΈΡ‚Π½Ρ‹Ρ… ящиков. Если ΠΊΠΎΡΡ‚ΡŒ подсоСдинСна (connected), ΠΌΡ‹ просто устанавливаСм ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ Π΅Ρ‘ Π³ΠΎΠ»ΠΎΠ²Ρ‹ Π² копию ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ хвоста родитСля (Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΎ Π½ΠΈΠΆΠ΅).

Класс Π‘Π»Π΅Π½Π΄Π΅Ρ€Π° Vector прСдоставляСт Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ copy(), Π½ΠΎ ΠΊΠ°ΠΊ Π½ΠΈ странно, Π½Π΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ __copy__(), Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΎΠ½ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠ³Ρ€Π°Ρ‚ΡŒ ΠΏΠΎ ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌ с функциями ΠΈΠ· модуля ΠŸΠΈΡ‚ΠΎΠ½Π° copy.

      if connected:

         bone.head = ar.bones[parent].tail.copy()

      else:

         if axis==1:

            bone.head=Blender.Mathutils.Vector(0,

                             bb[1][0],0)

         else:

            bone.head=Blender.Mathutils.Vector(bb[0][1],

                             parenty,bb[2][1])

ПолоТСниС хвоста кости рассчитываСтся Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

      if axis==1:

         bone.tail=Blender.Mathutils.Vector(0,bb[1][1],0)

      else:

         bone.tail=Blender.Mathutils.Vector(bb[0][0],

                                       parenty, bb[2][0])

ПослСдниС шаги Π² создании кости - это Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π΅Ρ‘ ΠΊ Π°Ρ€ΠΌΠ°Ρ‚ΡƒΡ€Π΅ ΠΈ установка спСцифичных для костСй ΠΎΠΏΡ†ΠΈΠΉ ΠΈ всСх Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΡ… связСй.

      ar.bones[vg] = bone


      if parent != None :

         bone.parent=ar.bones[parent]

      else:

         bone.clearParent()


      if connected:

         bone.options=Blender.Armature.CONNECTED

Π—Π°ΠΌΠ΅Ρ‚ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ ΠΊΠΎΠ΄Π΅ Π²Π°ΠΆΠ΅Π½ порядок дСйствий: Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ parent ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ присвоСн ΠΈΠ»ΠΈ ΠΎΡ‡ΠΈΡ‰Π΅Π½ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρƒ костСй, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ ΠΊ Π°Ρ€ΠΌΠ°Ρ‚ΡƒΡ€Π΅, Π° опция CONNECTED ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ установлСна Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρƒ кости, ΠΈΠΌΠ΅ΡŽΡ‰Π΅ΠΉ родитСля.

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΎΡΡ‚Π΅Ρ€Π΅Π³Π°Ρ‚ΡŒΡΡ здСсь Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ спСцифичности Π‘Π»Π΅Π½Π΄Π΅Ρ€Π°. Π ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ установлСн Ρƒ кости Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ Π² Π΅Ρ‘ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ parent. Если Ρƒ Π½Π΅Π³ΠΎ Π½Π΅Ρ‚ родитСля, этот Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ None. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, ΠΌΡ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ Π½Π°Π·Π½Π°Ρ‡ΠΈΡ‚ΡŒ None Π² этот Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚, ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ clearParent(), Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ.



ΠœΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Ρ‹

ΠœΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Ρ‹ β€” это Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π΄Π°Π΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ внСшнСС проявлСниС. Π’ Π‘Π»Π΅Π½Π΄Π΅Ρ€Π΅, ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Ρ‹ Ρ‡Ρ€Π΅Π·Π²Ρ‹Ρ‡Π°ΠΉΠ½ΠΎ разносторонни, ΠΈ ΠΈΠ·-Π·Π° этого довольно слоТны. ΠŸΠΎΡ‡Ρ‚ΠΈ Π»ΡŽΠ±Ρ‹ΠΌ аспСктом Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π²Π΅Π΄Ρ‘Ρ‚ сСбя Π»ΡƒΡ‡ свСта ΠΏΡ€ΠΈ ΠΎΡ‚Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ ΠΎΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ, ΠΈ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ простыми ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ, Π½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΠΊΠ°Ρ€Ρ‚Π°ΠΌΠΈ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ ΠΈ Π½ΠΎΠ΄ΠΎΠ²Ρ‹ΠΌΠΈ сСтями.

Π’ΠΏΠ»ΠΎΡ‚ΡŒ Π΄ΠΎ 16 ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ связано с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ ΠΈ, Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, ΠΈΠ½Π΄ΠΈΠ²ΠΈΠ΄ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ Π΅Π³ΠΎ части ΠΌΠΎΠ³ΡƒΡ‚ ΡΡΡ‹Π»Π°Ρ‚ΡŒΡΡ Π½Π° ΠΎΠ΄ΠΈΠ½ ΠΈΠ· этих 16 ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΎΠ². На ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°Ρ… Text3d, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ½Π΄ΠΈΠ²ΠΈΠ΄ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ символ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡΡ‹Π»Π°Ρ‚ΡŒΡΡ Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΉ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π», ΠΈ для ΠΊΡ€ΠΈΠ²Ρ‹Ρ… это Ρ‚Π°ΠΊ ΠΆΠ΅ для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰Π΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΈ.

Π‘ Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°, Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ - процСсс ΠΈΠ· Π΄Π²ΡƒΡ… шагов. Π‘Π½Π°Ρ‡Π°Π»Π°, ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π», ΠΈ Π·Π°Ρ‚Π΅ΠΌ ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π½Π°Π·Π½Π°Ρ‡ΠΈΡ‚ΡŒ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π» ΠΈΠ»ΠΈ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Ρ‹ Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ шаг ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠΏΡƒΡ‰Π΅Π½, Ссли ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΎΡΠ»Π°Ρ‚ΡŒΡΡ Π½Π° ΡƒΠΆΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Ρ‹.

Если Ρƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠΌΡƒ ΠΌΠ΅ΡˆΡƒ, ΡƒΠΆΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ Π³Ρ€Π°Π½ΠΈ, Ρ‚ΠΎΠ³Π΄Π° ΠΌΡ‹ всС Π΅Ρ‰Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π½Π°Π·Π½Π°Ρ‡Π°Ρ‚ΡŒ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π» для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π³Ρ€Π°Π½ΠΈ. Π’Π½ΠΎΠ²ΡŒ создаваСмыС Π³Ρ€Π°Π½ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹ΠΌ Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π», Ссли Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π» Π·Π°Π΄Π°Π½.

НСбольшой кусок ΠΊΠΎΠ΄Π° ΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚, ΠΊΠ°ΠΊ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π½Π°Π·Π½Π°Ρ‡Π°Ρ‚ΡŒ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Ρ‹ Π½Π° МСш-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚. Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ Π½Π°Π·Π½Π°Ρ‡Π°Π΅ΠΌ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π» с Π±Π΅Π»Ρ‹ΠΌ рассСянным Ρ†Π²Π΅Ρ‚ΠΎΠΌ для всСх Π³Ρ€Π°Π½Π΅ΠΉ с Ρ‡Ρ‘Ρ‚Π½Ρ‹ΠΌ Π½ΠΎΠΌΠ΅Ρ€ΠΎΠΌ, ΠΈ с Ρ‡Π΅Ρ€Π½Ρ‹ΠΌ рассСянным Ρ†Π²Π΅Ρ‚ΠΎΠΌ для всСх Π³Ρ€Π°Π½Π΅ΠΉ с Π½Π΅Ρ‡Π΅Ρ‚Π½Ρ‹ΠΌ Π½ΠΎΠΌΠ΅Ρ€ΠΎΠΌ Π½Π° МСш-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅ Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ob.

me=ob.getData(mesh=1)

mats=[ Blender.Material.New(), Blender.Material.New()]

mats[0].rgbCol=[1.0,1.0,1.0]

mats[1].rgbCol=[0.0,0.0,0.0]


ob.setMaterials(mats)

ob.colbits=3