.[ ČeskéHry.cz ].
Pohár hořkosti skriptování v Blendru (více souborů .py)
Jdi na stránku 1, 2  Další
 
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> Obecné
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
]semo[



Založen: 29. 07. 2007
Příspěvky: 1525
Bydliště: Telč

PříspěvekZaslal: 15. únor 2022, 10:56:08    Předmět: Pohár hořkosti skriptování v Blendru (více souborů .py) Odpovědět s citátem

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! Smile. 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í? Sad. 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
Zobrazit informace o autorovi Odeslat soukromou zprávu
mar



Založen: 16. 06. 2012
Příspěvky: 602

PříspěvekZaslal: 15. únor 2022, 12:38:21    Předmět: Re: Pohár hořkosti skriptování v Blendru (více souborů .py) Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
]semo[



Založen: 29. 07. 2007
Příspěvky: 1525
Bydliště: Telč

PříspěvekZaslal: 15. únor 2022, 17:14:39    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
dzejkob



Založen: 17. 08. 2013
Příspěvky: 127

PříspěvekZaslal: 15. únor 2022, 17:36:00    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Ladis



Založen: 18. 09. 2007
Příspěvky: 1533
Bydliště: u Prahy

PříspěvekZaslal: 15. únor 2022, 20:50:02    Předmět: Odpovědět s citátem

Opensource musí držet laťku nízko, jinak by neměli autoři komerčního SW co žrát Wink
_________________
Award-winning game developer
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Radis



Založen: 29. 03. 2014
Příspěvky: 235

PříspěvekZaslal: 15. únor 2022, 21:23:00    Předmět: Odpovědět s citátem

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 Smile
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
frca



Založen: 28. 07. 2007
Příspěvky: 1552

PříspěvekZaslal: 15. únor 2022, 23:35:35    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Ladis



Založen: 18. 09. 2007
Příspěvky: 1533
Bydliště: u Prahy

PříspěvekZaslal: 16. únor 2022, 00:02:05    Předmět: Odpovědět s citátem

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? Smile
_________________
Award-winning game developer
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
]semo[



Založen: 29. 07. 2007
Příspěvky: 1525
Bydliště: Telč

PříspěvekZaslal: 16. únor 2022, 09:58:57    Předmět: Odpovědět s citátem

Ladis napsal:
Opensource musí držet laťku nízko, jinak by neměli autoři komerčního SW co žrát Wink

Very Happy Very Happy Ať to bylo myšleno ironicky nebo ne, pobavilo Smile

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...Wink. 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
Zobrazit informace o autorovi Odeslat soukromou zprávu
frca



Založen: 28. 07. 2007
Příspěvky: 1552

PříspěvekZaslal: 16. únor 2022, 12:52:34    Předmět: Odpovědět s citátem

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? Smile


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". Wink
_________________
www.FRANTICWARE.com
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
dzejkob



Založen: 17. 08. 2013
Příspěvky: 127

PříspěvekZaslal: 16. únor 2022, 14:51:26    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
]semo[



Založen: 29. 07. 2007
Příspěvky: 1525
Bydliště: Telč

PříspěvekZaslal: 2. březen 2022, 10:46:08    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
frca



Založen: 28. 07. 2007
Příspěvky: 1552

PříspěvekZaslal: 3. březen 2022, 09:15:39    Předmět: Odpovědět s citátem

Jede ti to i v trojce? Každopádně super.
_________________
www.FRANTICWARE.com
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
]semo[



Založen: 29. 07. 2007
Příspěvky: 1525
Bydliště: Telč

PříspěvekZaslal: 4. březen 2022, 09:06:22    Předmět: Odpovědět s citátem

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) Smile
- 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
Zobrazit informace o autorovi Odeslat soukromou zprávu
]semo[



Založen: 29. 07. 2007
Příspěvky: 1525
Bydliště: Telč

PříspěvekZaslal: 18. březen 2022, 11:30:16    Předmět: Odpovědět s citátem

Ještě jedno varování Very Happy.

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á Smile.
Je to holt zadarmo.
_________________
Kdo jede na tygru, nesmí sesednout.
---
http://www.inventurakrajiny.cz/sipka/
Aquadelic GT, Mafia II, simulátory
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Zobrazit příspěvky z předchozích:   
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> Obecné Časy uváděny v GMT + 1 hodina
Jdi na stránku 1, 2  Další
Strana 1 z 2

 
Přejdi na:  
Nemůžete odesílat nové téma do tohoto fóra
Nemůžete odpovídat na témata v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete hlasovat v tomto fóru


Powered by phpBB © 2001, 2005 phpBB Group


Vzhled udelal powermac
Styl "vykraden" z phpBB stylu MonkiDream - upraveno by rezna