Zobrazit předchozí téma :: Zobrazit následující téma |
Autor |
Zpráva |
]semo[
Založen: 29. 07. 2007 Příspěvky: 1526 Bydliště: Telč
|
Zaslal: 15. únor 2022, 10:56:08 Předmět: Pohár hořkosti skriptování v Blendru (více souborů .py) |
|
|
Je to spíš takový povzdech. Ale kdyby přecejen někdo uměl poradit, budu rád.
Snažím se naskriptovat v Pythonu (3.9) v Blendru (3.něco) vlastní exporter/importer. Ukazuje se, že s tim prostě vůbec nejde pracovat.
Vestavěný editor je natolik hrozný, že nejde používat. Ale i kdyby, skript se může skládat jen z jednoho souboru. V oficiální dokumentaci blendru jsem našel, že skript lze pustit pro účely vývoje i z cmd line:
kód: |
blender myscene.blend --background --python myscript.py |
To fungovalo! Zajásal jsem! . Asi tak na 5 minut, než jsem zjistil, že nelze importovat jiný python soubor. Což budu potřebovat, exporter bude dost rozsáhlý. Neznalý pythonu, myslel jsem, že dělám něco blbě. Ptal jsem se kámoše, jak se to má dělat správně. Nakonec jsem zjistil, že mimo prostředí blendru to funguje, s blendrem ne. A můžete mít __inti__.py kolik chcete. Jediný řešení je, mít ten skript hotový a nainstalovaný do blendru, pak lze importovat (import Moje, nebo from . import neco ...). No je to normální? . Připomíná mi to kdysi vývoj na IOS, kde musela i pro debug build být například ikona, jinak to nešlo pustit.
No nic. Zkusil jsem, jestli se skripty aspoň spouští aktuální. Že bych to nějak nasmolil, nainstaloval a pak jen měnil .py soubory a zkoušel spouštět v blenderu. Taky ne. Nějak si to nakešuje a změny se neprojeví. Je vymalováno.
Poslední pokus byl, používat systémový python, namísto toho, který přišel s blendrem. Postupoval jsem podle "rad" v dokumentaci blendru a co myslíte. Funguje? Ne. Zas nějaký errory při spuštění. Něco nemnůže najít a podobně. PYTHONPATH a podobný kraviny mořím od rána do večera.
Tak já nevím. Něco takhle stupidního jsem fakt nečekal. S láskou vzpomínám na Max Script. Který sice byl divný, ale nějakým způsobem pokrokový a fungoval.
To opravdu neni rozumná cesta (čti - bezbolestná) jak vyvíjet vícesouborové skripty do Blendru?
Kdyby to bylo pro nějakou mojí hru, už bych se na to dávno vykašlal. Ale mám to jako pracovní úkol a celkem to potřebujeme. _________________ Kdo jede na tygru, nesmí sesednout.
---
http://www.inventurakrajiny.cz/sipka/
Aquadelic GT, Mafia II, simulátory |
|
Návrat nahoru |
|
|
mar
Založen: 16. 06. 2012 Příspěvky: 608
|
Zaslal: 15. únor 2022, 12:38:21 Předmět: Re: Pohár hořkosti skriptování v Blendru (více souborů .py) |
|
|
python je jenom přehypované pomalé glorifikované lepidlo, nemám ho vůbec rád
export z blenderu řeším přes ofiko Blender FBX exportér (který má své bugy a je taky v pythonu, takže exportovat animaci se spoustou keyframů trvá 100 let), ale nějak to funguje
v práci taky jedeme přes intermediate binární FBX - není to nejlepší věc na světě ... tam se jede přes oficiální (naprosto otřesné) FBX SDK
já jsem si napsal vlastní parser binárního FBX, myslím, že nemo tady z fóra dělal OpenFBX, tak možná by se dalo jít i touhle cestou, pokud nepotřebuješ exportovat něco natolik specifického, že bys to potřeboval lámat rovnou z blenderu
EDIT: i když kolega teď vlastně dělá podporu pro přímé načítání GLB, takže tam by pak odpadl i ten extra mezikrok |
|
Návrat nahoru |
|
|
]semo[
Založen: 29. 07. 2007 Příspěvky: 1526 Bydliště: Telč
|
Zaslal: 15. únor 2022, 17:14:39 Předmět: |
|
|
No, u nás je jiný background. Dělám simulátory (neherní) a tam je "průmyslový standard" OpenFlight formát (.flt). Je dost oldschool, ale překvapivě celkem řadu let funguje. Je výborný na takový ty vehikly jako letadla, tanky a podobně. Má výbornou podporu lodů a některých specifických záležitostí. Taky máme vlastní binární parser a je to rychlý (dokonce i na pageování terénu ujde).
Jenže na modelování se používá takový šílený a velmi drahý software Presagis Creator. Ten je hodně za zenitem. Ale opět - funguje. Takže to ještě nějakou dobu v tomto odvětví bude přetrvávat. To je potřeba držet kvůli nějakým spolupracím.
Teď ale, když máme na nějakou určitou zakázku externí grafiky, kteří používají všelijaké své SW, chtěli bysme aspoň tu podporu flt do Blendru. A postupně na něj třeba přejít. Pro starý verze blendru exproter existuje. Ale nedělá všechno co chceme a v novým blendru nejede (jak jinak, že?).
FBX nebo gltf by pro nás nebyl problém podporovat. I o konvertoru z těchto formátů jsme uvažovali. Ale blender neexportuje všechno, co potřebujem, takže by ani nebylo co konvertovat :-/. Proto chcem ten exporter napsat svůj.
Tak ale FLT neni zas tak malý formát, jako např. OBJ, nebo STL, takže se potřebuju trochu rozepsat, více tříd, více souborů, klasika. To ale tvůrci Blendru nebo Pythonu bohužel vůbec neusnadňují - ba spíš sabotují.
Nejspíš to budu muset lepit nějak po kouskách, psát po jednom, zkoušet jak to půjde a nakonec v jeden krok nějak na haluz slepit. To bude paráda! _________________ Kdo jede na tygru, nesmí sesednout.
---
http://www.inventurakrajiny.cz/sipka/
Aquadelic GT, Mafia II, simulátory |
|
Návrat nahoru |
|
|
dzejkob
Založen: 17. 08. 2013 Příspěvky: 130
|
Zaslal: 15. únor 2022, 17:36:00 Předmět: |
|
|
Nevím, zda budu relevantní - pluginy do blenderu sice neřeším, nicméně s pythonem poslední dobou docela dost zápasím a ten import modulů jsem řešil s výrobou standalone buildu pomocí cythonu - konkrétně po slinkování tu věc donutit, aby sáhla pro modul v binárce a nehledala ho někde na disku.
Dávám sem fragment kódu, který třeba může nasměrovat na nějaké googlení:
kód: |
class CythonPackageLoader(importlib.abc.Loader):
path = ""
def __init__(self, init_function):
super(CythonPackageLoader, self).__init__()
self.init_module = init_function
def load_module(self, fullname):
if fullname not in sys.modules:
sys.modules[fullname] = self.init_module()
print("initialized: " + fullname)
return sys.modules[fullname]
class CythonPackageMetaPathFinder(importlib.abc.MetaPathFinder):
def __init__(self, init_dict):
super(CythonPackageMetaPathFinder, self).__init__()
self.init_dict = init_dict
def find_module(self, fullname, path):
try:
return CythonPackageLoader(self.init_dict[fullname])
except KeyError:
return None
def find_spec(self, fullname, path, target=None):
if fullname in self.init_dict:
return MyModuleSpec(fullname, CythonPackageLoader(self.init_dict[fullname]))
return None
sys.meta_path = [CythonPackageMetaPathFinder(init_dict)] + sys.meta_path
|
V init_dict je seznam všech extern module inits. MyModuleSpec je pak vykopirovaná pythonní classa, kterou nešlo nijak rozumně naimportovat.
Tohle celé asi nijak nepomůže, jenom směruju na tu možnost, že tomu lze podstrčit vlastní module-loadery, popř. seznamy modulů atd.
Taky doporučuju se případně podívat na ten Cython: https://cython.readthedocs.io/en/latest/ dá se tím případně elegantně vyhnout pythonu a jádro věci dát někde cdef extern. |
|
Návrat nahoru |
|
|
Ladis
Založen: 18. 09. 2007 Příspěvky: 1536 Bydliště: u Prahy
|
Zaslal: 15. únor 2022, 20:50:02 Předmět: |
|
|
Opensource musí držet laťku nízko, jinak by neměli autoři komerčního SW co žrát _________________ Award-winning game developer |
|
Návrat nahoru |
|
|
Radis
Založen: 29. 03. 2014 Příspěvky: 235
|
Zaslal: 15. únor 2022, 21:23:00 Předmět: |
|
|
Par let zpatky jsem to resil a nebylo to zase takovy peklo, proste si stahni z githubu nejakej dostatecne slozitej addon a podivej se na jeho adresarovou strukturu. Loadni ho, zkousej neco menit, reloadovat... Zaklad je mit v __init__.py bl_init, register, unregister a v kazdym subfolderu mit zase __init__. Nepamatuju si ze by s tim byly nejaky sileny problemy.
Skoro kazdej addon ma vic souboru, neni to neresitelny |
|
Návrat nahoru |
|
|
frca
Založen: 28. 07. 2007 Příspěvky: 1558
|
Zaslal: 15. únor 2022, 23:35:35 Předmět: |
|
|
Když nevyhovuje python, tak technicky je možné napsat si to nativně v C++ díky otevřenému zdrojáku blenderu. _________________ www.FRANTICWARE.com |
|
Návrat nahoru |
|
|
Ladis
Založen: 18. 09. 2007 Příspěvky: 1536 Bydliště: u Prahy
|
Zaslal: 16. únor 2022, 00:02:05 Předmět: |
|
|
Jakože když je to opensource, tak si můžu do Blendeu doprogramovat vlastní API a jazyky pro rozšíření a skriptování? A kdo pak bude udržovat patche? _________________ Award-winning game developer |
|
Návrat nahoru |
|
|
]semo[
Založen: 29. 07. 2007 Příspěvky: 1526 Bydliště: Telč
|
Zaslal: 16. únor 2022, 09:58:57 Předmět: |
|
|
Ladis napsal: |
Opensource musí držet laťku nízko, jinak by neměli autoři komerčního SW co žrát |
Ať to bylo myšleno ironicky nebo ne, pobavilo
Radis:
Pokud by ses chtěl podělit, zajímalo by mě, co jsi skriptoval a jaké bylo Tvé workflow.
Jak píšeš, inspiruju se něčim větším - přímo exporterem obj z Blendru (teda spíš ho vykrádám). Má více souborů a je součástí instalace. Ale ani v něm nefunguje import py souboru, když to zavolám z cmd line jak jsem psal v prvním příspěvku. Ani bych netrval na cmd line, stačilo by třeba nějak "zavolat" ho z toho jejich skript editoru.
Ale ono to začne to fungovat teprve až celé, když je nainstalovaný. Podle různých diskuzních fór jsem pochopil, že ve starších verzích Blenderu snad fungoval nějaký workaround. Teď už bohužel ne.
Tak jedině snad opravdu klikat, reloadovat, klikat klikat klikat. To je ale řešení, který neakceptuju. Jsem už stará škola.... Tak jsem to začal psát nějak "rozprsklý" a pak to budu holt lepit dohormady.
Ještě jsem si všiml, že existuje nějaká možnost relodovat modul pomocí importlib.reload(module). Je možný, že jsem to používal blbě, ale výsledku jsem tím nedosáhl.
dzejkob napsal: |
Tohle celé asi nijak nepomůže, jenom směruju na tu možnost, že tomu lze podstrčit vlastní module-loadery, popř. seznamy modulů atd. |
To mě zaujalo. Ale nějak to v tom kódu nevidím. To lze jen z toho cythonu? Radši už tam nechci zatahovat další technologii (další měnící se verze). _________________ Kdo jede na tygru, nesmí sesednout.
---
http://www.inventurakrajiny.cz/sipka/
Aquadelic GT, Mafia II, simulátory |
|
Návrat nahoru |
|
|
frca
Založen: 28. 07. 2007 Příspěvky: 1558
|
Zaslal: 16. únor 2022, 12:52:34 Předmět: |
|
|
Ladis napsal: |
Jakože když je to opensource, tak si můžu do Blendeu doprogramovat vlastní API a jazyky pro rozšíření a skriptování? A kdo pak bude udržovat patche? |
Blender má nativní export např. collady:
https://github.com/blender/blender/tree/master/source/blender/io/collada
Analogicky lze přidat další. Samozřejmě kvalitně, aby to bylo přijato do master branche. Patche se pak budou udržovat "samy". _________________ www.FRANTICWARE.com |
|
Návrat nahoru |
|
|
dzejkob
Založen: 17. 08. 2013 Příspěvky: 130
|
Zaslal: 16. únor 2022, 14:51:26 Předmět: |
|
|
citace: |
To mě zaujalo. Ale nějak to v tom kódu nevidím. To lze jen z toho cythonu? Radši už tam nechci zatahovat další technologii (další měnící se verze). |
Ne to je klasický python (je to teda 3.6něco). To sys.meta_path může obsahovat nejen cesty, ale také instance loaderů. Prostě se ta sys proměnná aktualizuje v nějakém entry pointu a hotovo. Ani neplatí, že importy musí být definovány někde nahoře - mohou být i třeba uvnitř funkce atd. Je možné, že do sys.path bude jenom stačit přidat nějakou cestu. Tady něco: https://www.programcreek.com/python/example/1669/sys.meta_path |
|
Návrat nahoru |
|
|
]semo[
Založen: 29. 07. 2007 Příspěvky: 1526 Bydliště: Telč
|
Zaslal: 2. březen 2022, 10:46:08 Předmět: |
|
|
Tohle je naprostá bomba! Plugin do VS Code "Blender Development" od Jacquese Lucke. Funguje to is s Blendrem 3.0.
https://www.youtube.com/watch?v=yNdjdmepMMQ
Nějak to tu magii dělá samo! :-). Relativní importy, reload, všecko najednou jde. Ručně jsem to nedokázal. _________________ Kdo jede na tygru, nesmí sesednout.
---
http://www.inventurakrajiny.cz/sipka/
Aquadelic GT, Mafia II, simulátory |
|
Návrat nahoru |
|
|
frca
Založen: 28. 07. 2007 Příspěvky: 1558
|
Zaslal: 3. březen 2022, 09:15:39 Předmět: |
|
|
Jede ti to i v trojce? Každopádně super. _________________ www.FRANTICWARE.com |
|
Návrat nahoru |
|
|
]semo[
Založen: 29. 07. 2007 Příspěvky: 1526 Bydliště: Telč
|
Zaslal: 4. březen 2022, 09:06:22 Předmět: |
|
|
Jo, jak jsem psal, i ve trojce. Je tam pár drobností, co si člověk musí ohlídat, ale jede to skvěle.
Ty drobnosti:
- např. to nainstaluje do VS Code nějaký plugin, co mění taby za spacy navzdory globálnímu nastavení. Tak to je potřeba hned odinstalovat. Sice python doporučuje používat mezery, ale to já prostě nedám. Mezery jsou pro lidi, co se tabulátorů bojí, já s nima nikdy neměl problém a usnadňujou mi práci (rychlejc se pohybuju v kódu a připadám si jako člověk)
- Další věc je, že při přechodu do debugu (pustí se v blendru addon a hitne breakpoint ve VS Code), je potřeba VS Code aktivovat 2x, jinak neni breakpoint hned vidět.
- Je dobré v options zapnout automatický reload skriptů
Ale to jsou prkotiony
Tak kdyby někdo v Blendru chtěl skriptovat, zkuste to a klidně pište sem, třeba už budu umět poradit. _________________ Kdo jede na tygru, nesmí sesednout.
---
http://www.inventurakrajiny.cz/sipka/
Aquadelic GT, Mafia II, simulátory |
|
Návrat nahoru |
|
|
]semo[
Založen: 29. 07. 2007 Příspěvky: 1526 Bydliště: Telč
|
Zaslal: 18. březen 2022, 11:30:16 Předmět: |
|
|
Ještě jedno varování .
Blender je shnilý! A to "API" je šílený. Tam se bez googlení a procházení developerských fór a changelogů prostě neobejdete. Furt narážím na všelijaký nekonzistence, skrytý mechanismy před kterýma nikde nevarujou a podobně. Až mě to dost překvapilo. Myslel jsem, že open source si většinou zakládá na nějaký super-korektnosti a kráse kódu...aspoň takhle nám to pořád kolega v práci předkládá .
Je to holt zadarmo. _________________ Kdo jede na tygru, nesmí sesednout.
---
http://www.inventurakrajiny.cz/sipka/
Aquadelic GT, Mafia II, simulátory |
|
Návrat nahoru |
|
|
|