Texture splatting 2020. április 21., kedd - 0:51


A Wikipédia is ír róla egy cikket, képtalálatok közt is sok jó ötletet látni a kifejezésre keresve.

Példa:


Ebbe a problémába én legelőször a Three.js-sel futottam. Más környezetekben már eleve kész megoldás van rá, lásd Unity3D-nél. Rajzolhatsz paint-szerűen 3d-ben, és azonnal tökéletes az egész.

Régen az első ötletem a Metin2 miatt az volt, hogy biztos az egész pálya textúrázása Photoshop-szerűen meg van rajzolva már előre, majd ezt feldarabolták (ez az egész művelet akár automatizált is lehet, a lényeg azon van, hogy előre elkészítve történik a dolog) kis részekre, akárcsak magát a pályát, és egyszerűen betölti a megadott chunk textúráját a megadott területre.

Ez tuti működő, és nagyon CPU-kímélő, cserébe rohadtul helyigényes, de memóriaigényes is. A metinből ki is nézném, de igencsak ott sem ez van a háttérben.

A fenti kép példán jól látszik a lényeg. Adott N textúra, amiket L hosszúságú átmenettel akarunk ellátni egymás felé, bármelyikből bármelyikbe.

A Three.js megoldása shaderes alapú, amit egy tanárEmbör valósított meg példa módon, és tett is közzé, amit köszön neki minden élő, mert remek alap.

Én magam is kísérleteztem vele, az ő megoldásával két nagy gond van (nem is a megoldásával, hisz  csak példaképp hozta létre, nyilván olyan céllal, hogy aki többet akar, az tovább is fejlesztheti).
  1. csak előre meghatározott hosszúságban tud átmenet keletkezni a megoldásával 2 textúra közt
  2. csak egymás után következő textúrák tudnak átmenetelni a másikká.
    • A-ból lehet B, B-ből C, C-ből D, viszont A-ból D nem, stb.
Az meg már csak mellékes, hogy ő magassághoz kötötte a dolgot. Adott Y magasságot elérve van egyik-másik textúra.

De ez a módszere alapja shaderrel.
Lényegében:

A domborzatra, vagy síkra (mindegy) minden textúra ki van rajzolva egyszerre. Ugyanakkor a shader ad egy virtuális magasságot a textúráknak, amik le tudnak menni 0-ra vagy alá is (ekkor meg sem jelennek, hanem egy default fekete kirajzolási szín veszi át a helyüket, amit a textúrák egyébként ki tudnak takarni). És tulajdonképp a trükk annyi, hogy bizonyos magasságtól indulva hullámszerűen az egyik textúra elkezd kiemelkedni 1 irányába, míg az épp látszódó elsüllyed 0 felé, és idővel helyetcserélnek, így képezve adott pontokon az átmenetet. És ugyanez megy végbe más-más Y magasságoknál a textúrákon.

És hogy lehetne ezt javítani?

Mármint olyan értelemben, hogy bármelyik textúra bármelyikbe át tudjon menni, és akár változtatható hosszúságú átmenettel is?

A netes leírások alapján sokan színhez kötik a textúrát egy térképen, mint fenti képen látható. Így alapvetően 3 vagy 4 szín jelöl 3/4 textúrát, és ezek egymásba kábé bármilyen átmenettel át tudnak menni. A hiba ezzel kettő: a textúrák mennyisége, és hogy egy majdnem real méretarányú textúrára valósítják meg. És pont a spórolás a lényege a dolognak. Szóval faja, hogy egy ekkora képen több tíz pixel átmenetével szép átmenetet képeznek a textúrák közt is, de egy játékbéli térképen majd 4-5 pixel is soknak fog hatni, több métert fed át a játékon belül (már amennyiben a Metinhez hasonlóan kb 300-500 pixeles térképek vannak, amik több száz métert fednek le a játékon belül).

Megoldás röviden: az RGB minden betűje. Tulajdonképp ugyanezt megcsinálva, de mondjuk jól kihasználva a színeket egy PNG képpel már 256 textúrát tárolhatunk akár (trükközéssel még többet is). Hogyan? (És itt jön a lényeg, ami előtt rizsázok mióta.) Mondjuk a red sáv jelöli a kép pixelében az original textúrát (hogy miből induljon az átmenet), a zöld szín a "melyikké" textúra indexét, és a kék szín utolsó helyen pedig az átmenet állapotát százalékban. Ennyi. Már csak meg kéne valósítani, hogy a shaderes megoldással ez király legyen, és ez némi gondolkodást igényel majd, meg számítást.
Magát a kis térképet, amin ez a miből, mibe és hány% típusúan, a pixelben lévő színek összetételét meg vizualizálhatjuk is egyből 3d-ben, akár egy Unity-szerű painttal (ilyet is akarok), és végül a memóriában tárolt bittérkép alapján menthet egy PNG képet a megtervezett térképről, így már szinte tényleg semmi munka nem lesz vele, és teljesen Unity hatást kapunk készítés közben és használati performancia közben is.

Idővel majd megvalósítom, már egyszer elkezdtem, félig kész is volt, de félbehagytam, és törölték a tárhelyem is, talán viszont volt mentés /de akkor is 0-ról csinálom újra, tökmindegy/.

Ezt a bejegyzést majd folytatom, ha lesz kedvem a leírtakat is megvalósítani.

Időkép-kamera 2020. január 31., péntek - 2:12


Hát röviden, bátyám ötlete volt, de király ötlet. Mármint az, hogy kell kamera, IP kamera, amit kirakhatunk az időképre. Neki már volt egy közvetítése, androidos, régi, már nem használt telefonról az utcánkra, ez így egy szintlépés volt tulajdonképp.

Most a történetet hosszasan nem írnám le. Itt érhető el az új kamerája egyébként.

Egyébként innen rendeltük, és erről a kameráról van szó, amihez még ezt a csomagot kell hozzácsapni a kosárba.

Megjegyzendő, hogy pár Ft-tal drágábban egészen jobb minőségű kamerák is kaphatóak ugyanitt, szóval ha ilyesmit fontolgatsz, nézd át az oldalt!

A Google szemszögéből bemutatva; kábé erre és néz, és innen, az én kamerám.

Ha pont ezt a kamerát vennéd meg, akkor a következő lépéseket kell megtenni:
  • bedugod a kamerát a laptopodba/PC-dbe egy UTP kábellel
  • bedugod az adapterét az áramforrásba
  • nyitsz egy Internet Explorer 8+-t, mivel a kezelőfelülete ActiveX-et használ, így ez megkerülhetetlen :(
  • valószínűnek tartom, hogy WIN10 van a gépeden, így:
    • a tálcán jobb-lent, ahol a kábeles/wifi jelecske van, azon jobb kattintás
    • hálózati beállítások, vagy ilyesmi
    • bal menüben kiválasztod az Ethernet pontot
    • rányomsz a csatlakoztatott lehetőségre
    • legörgetsz, az alján az IP-beállításoknál a szerkesztésre nyomsz
    • átállítod a DHCP-t kézire, lenyomod az IPv4-et, és valami olyat produkálsz, mint a lista alatti képen van
      • itt annyi a lényeg, hogy legyél közös alhálón a kamerával, ami default 0.168 végződésű, vagy 1.168, az utolsó előtti számjegyed legyen ugyanaz
  • megnyitod az IE-ben a 192.168.0.168 címet (ha jó rémlik, ez volt a default, ha mégsem, akkor 1.168 a vége)

Ott pedig be tudsz lépni az alapértelmezett adatokkal, valami papíron tuti le van írva, vagy elsőre jelszót kell megadnod, ilyesmi.

Tök jó, hogy sok dolgot be lehet rajta állítani, először nem árt az IP címet átállítani arra, amit otthon amúgy is használsz, és ezután visszaállíthatod a saját IP-det is DHCP-re. Meg igazából ezután átdughatod a kábelt a gépedből a routerbe, úgyis eléred otthonról már a kamerát, IE-ből.

Valójában ez így már kész is, egy DDNS-t érdemes beállítani. A kamera beállításai közt tuti van ilyesmi, javasol is egyet, automatikusan frissíti ő magát a kábeles neten. Érdemes még kiszedni a videó-megtekintéshez való autentikációt, hogy a felvételt /ha nyilvánosnak van úgyis szánva/ azonnal megnyissa bármi, jelszó és egyéb nélkül.

Egy azonnali pillanatképet elérhetsz a kamerás cuccod elérhetőségén http-vel kezdve, majd útvonal szerint "/snap.jpg".
// ez persze eltérhet kameránként, de én ugye ezt a leírást ahhoz írom, amit mi rendeltünk.

No hát no, az Időképnek van saját leírása több is az oldalon, hogy oldd meg a képet.

Ehhez persze elengedhetetlen, hogy meg kell osztanod a kamera-eszközöd belső IP-jéhez a 80-as és az 554-es portot (az utóbbit csak akkor, ha live videót is akarsz engedélyezni). A port forwardnak könnyű utánajárni, én most Digi-s vagyok; nincs lehetőség port range megadására első ránézésre, DE a trükk az, hogy állíts be appnak bármit, akkor megjelenik a portszámok inputja, ahova írhatod őket, és utána akár vissza is állíthatod egyedire amúgy a radiobuttont.. (Mindegy, ez csak Digi-s extra help.)

De röviden a kamera beállításoknál az oldalukon megadod képletöltési linknek ezt a snap.jpg-t, live-nak meg megadhatod az rtsp://IPCIMED:554 címet nyugodt szívvel.
az IPCIMED helyére természetesen a külsőleg elérhető IPv4 címed kell, de persze érdemes DDNS-sel folyton frissítve tartani, és akkor az állandó átirányítási cím kell oda.

Ezzel valójában kész is, ezután automatikusan működik az időkép kamerád.

Az enyém itt érhető el egyébként:
https://www.idokep.hu/webkamera/eprog

Raknék ide egy pillanatképet róla, de ugye a HTTPS oldal nem szereti a HTTP contentet, és így hajnal 2-kor lusta vagyok valamivel leparseolni a képet, szóval majd máskor. Vagy kattints ide..

Végezetül egy csodás kép, hogy is sikerült elhelyezni a kamerát az erkélyen:


Edit:
Az első nap körülbelül 500 megtekintés volt a kamerán, és egyből kikerült ebbe a cikkbe.

OSM && Dévaványa 2020. január 2., csütörtök - 10:52


Úgy adódott, hogy már régi tervem, hogy random helyeket átültessek 3D-be, egy játékba, és most részben nekifogtam.

Mert amúgy tökre szeretnék egy GTA-t csinálni, ráadásul valós helyszínen játszódót. Legalábbis annyira, hogy az utak megegyezzenek a valóssal, és a főbb pontokon keresztülnézve egy arrafelé jártas ember, pl. aki az adott hely környékén lakik, az igenis tudja, hogy ha előre menne egy utcányit, akkor mit találna ott, és merre mehetne tovább, a játékon belül is, mint a valós helyen.

Az első ilyen célpont életemben Dévaványa volt, mert hát kicsi hely, és a lakhelyem volt 20 évig.

A nagy terveim félbeszakadtak, mikor Miskolcra felköltöztem, akkor inkább Miskolcot akartam már célnak kitűzni, és állandóan egész BP lebegett a szemem előtt, de az halál nagy feladat volna, bármilyen sok segítséggel is.

Szóval összességében egy játékmotort mégis Dévaványára érdemes építeni, esetleg egyszer, ha végtelen időm lesz, akkor nagyobb városokba is bele lehetne fogni.

Szóval itt újévi, hajnali merengésből nekifutva, sok random téma köszöntött bátyámmal. Volt régen egy GTA Vice City szervere, azon és a fennmaradt videóin röhögtünk, majd elkezdtem keresgélni.

Valamiért python 3D játékmotort, de nem találtam olyat, ami szimpi, csak a PyOgre-t, mert az Ogre-t régről ismerem a Game Maker-es portja miatt. Aztán dobtam az ötletet, végül az lett, hogy hát lehetne Unity3D. Mármint ha egy random, nem-találom-fel-újra-a-kereket típusú Vice City klón játékot akarok csinálni, miben fognék hozzá. A unity jó. Bénáztam vele kicsit, majd miután kész volt a TPS kameranézet, és irányítás: térkép kellene.

Netes leírásokból kiindulva a GTA VC térképét lehet exportálni modellként, csak haláli sok munka. Nekem erre nincs időm, és energiám. Annyiba kerülne, hogy nem éri meg.

És akkor jött: hát .. akkor újra Dévaványa? És nekifogtam.

Felcsaptam az OSM oldalát, és exportáltam Dévaványa területét valami XML formátumban.
Megnéztem az adatokat, és bedobtam a MySQL adatbázisomba egy egyszerű szerkezetet nekik, alakítgattam az adatokat látva. Majd közben írtam egy béna, de gyors és működő PHP parsert az XML-hez, ami a számomra lényeges node-okat beküldi a DB-be. Ez elég pöpecül sikerült is, néhányezer adat volt mindössze. Én csak a pontokat importáltam, meg a "way-eket", amik nem csak pontokat összekötő vonalak, hanem akár area-k is lehetnek (elvileg);


Erre közben összedobtam egy HTML5 megjelenítőt is, ami nagyjából jól működik, most elég királyul vonalakkal összeköt minden pontot a megfelelővel. Zsírul néz ki.


Ha minden egybetartozó vonalat random színezünk, akkor meg szépen elszeparálódnak a dolgok..


 No mindegy. Ez csak ilyen érdekesség. Az OSM király! Ezekből a vektoros adatokból, szemben azzal, ha pl. Google térkép screenshotból generálnám, elég pontos 3D-s utakat tudok majd generálni modell formátumba; vagy ha azt épp nem, de a pálya minimális helyre tömörítve el fog férni, az utak adatait tárolva, amit így már bármilyen nekem tetsző módon kezelhetek, és realtime generálhatom a pályát az elmentett koordináták alapján. Majd egyszer.

Excel Wolf3D 2020. január 1., szerda - 6:04


Valójában Google Sheet, a halál se használ Excelt ma már, nyilván.

Volt egy prog.hu-s cikk, amiben valaki csinált egy full 3d-s raycast cuccost, ami király.
Nem mostani a cikk, már jópár napos, de én most vettem észre, keresgélve. Aztán ez tényleg tök sok kedvet adott, hogy hát egy nagyon easy raytrace cuccot nem is lenne bonyolult még az én tudásommal sem összerakni egy ilyen táblázatkezelőben, hiszen csak pár vonal, koordináta, meg szögfüggvény kell hozzá.

Először csak hülyeségből kialakítottam neki egy felületet, de az ilyen dolgok mindig úgy berántanak, hogy nem tudom abbahagyni, míg valami látványos nem sikerül belőle a lehetőségekhez mérten.




Kellett hozzá végül valami szkript is, netes segítséggel meg is írtam. Mert akartam irányító nyilakat, de sajnos csak szkripttel oldható meg normálisan. Az is elég gáz, mert így folyton egy külső fájlt hívogat driveon keresztül, és gyáá.. Mi ez már.. Mindegy, a cél szentesíti az eszközt.

Szóval most egész tűrhetően kész is lett, egy kis videót is csináltam róla, egyszer majd talán folytatom, vagy befejezem, és publikálom is..