@badlogic@mastodon.gamedev.place avatar

badlogic

@badlogic@mastodon.gamedev.place

libGDX, Beginning Android Games, RoboVM, Spine. Member of the council of Warios.

This profile is from a federated server and may be incomplete. Browse more on the original instance.

sinbad, to random
@sinbad@mastodon.gamedev.place avatar

I have to keep reminding myself that I donโ€™t hate tech per se, I just hate the tech industry

Tech can still be good. A lot of the time itโ€™s not, because of the industry. But tech can still be good. I sometimes try to build some of it, that can be fun. There are pockets of people still doing that despite the best efforts of a hypercluster of bellends, managing and thought leadering everything off the nearest cliff because they got a whiff of extremely stupid money from that direction

badlogic,
@badlogic@mastodon.gamedev.place avatar

@sinbad sometimes useful things fall out of that pile of money that can be used by us plebs to do meaningful things. It's not all bad.

badlogic, to random
@badlogic@mastodon.gamedev.place avatar

EU elections in June, so I built a new thing: "EU Election Program Explorer".

https://wahlomat.marioslab.io

Visually explore statements made in Austrian parties' EU election programs, see where parties overlap and where they don't, etc.

How it works:

  • Take program PDFs of each party, extract plain text for each page
  • Let GPT 3.5 extract key statements from each page
  • Embed each statement into high-dim vector
  • Project to 2D space
  • Slap web UI on top of it (pan/zoom/select/keyword search)

video/mp4

badlogic,
@badlogic@mastodon.gamedev.place avatar

All the preprocessing is about 200 LOC (including PDF parsing, talking to the LLM, embedding & projection), thanks to the easy to use libraries available nowadays. You just need to know what you're doing. :D

Code here:
https://github.com/badlogic/wahlomat/blob/main/preprocessing/main.ipynb

(see also llm.py and pdftools.py, which I stole and modified from somewhere on the web)

badlogic,
@badlogic@mastodon.gamedev.place avatar

"Mario, this could have been a chatbot". That's actually what I wanted to do first, but that 1) costs more to provide it on a level that doesn't hallucinate half the time and 2) is less exploratory in nature. You must know what you are interested in and wouldn't be able to find serendipitous info.

E.g. I didn't know most parties fucking LOVE trains.

badlogic,
@badlogic@mastodon.gamedev.place avatar

Side note: I built the stupid pan/zoom scatter plot myself cause every single library out there that's supposed to do that is ... not great.

It's not perfect, but it is mine (and now you can use it too if you don't mind Lit Elements. You can easily extract the logic to vanilla JS tho)

Funny how that took 2x the LOC than was needed for all the fancy ML-y stuff. Sigh.

https://github.com/badlogic/wahlomat/blob/main/src/utils/plot.ts

badlogic,
@badlogic@mastodon.gamedev.place avatar

It also wouldn't have allowed me to grasp, that the greens are all over the place with their statements and repeat themselves a lot in their program, while the Nazis have barely any program to speak of.

image/jpeg

badlogic,
@badlogic@mastodon.gamedev.place avatar

And as always, if you find this kind of "work" entertaining/imformative, and if you have disposable income, consider supporting our charity:

https://cards-for-ukraine.at

We are a zero-overhead charity. Ever donation cent goes towards food vouchers for ๐Ÿ‡บ๐Ÿ‡ฆ families (mostly women and their kids) in ๐Ÿ‡ฆ๐Ÿ‡น. We pay everything else and do the labor for free.

All invoices, payment confirmations etc. here:
https://drive.google.com/drive/folders/1PxOL8A44bIRU1Hdoq87_2iXSLNmnMXQr

2 years and still going strong. Over โ‚ฌ250k in vouchers delivered.

badlogic,
@badlogic@mastodon.gamedev.place avatar

@Aaron I'm first taking the statement text (which is usually just a single sentence) and embed it into a high dimensional space (~1500 dimensions) woth OpenAI's text embedding model.

This vector basically encodes the semantics of the statement text.

Embedding vectors of statement texts with similar or related semantics, will end up in the same area of that high dimensional space.

The closer two vectors are in that space, the more semantically similar they are.

badlogic,
@badlogic@mastodon.gamedev.place avatar

@Aaron now, we can obviously not draw 1500 dimensions. We can thus apply a method called projection (which is also a form of embedding). In this case, I use a method call UMAP.

Simplified: it takes the high dimensional vectors. For each vector it tries to find a few closest vectors.

It then assigns 2 dimensional coordinates to those vectors in such a way, that their distances are similar in 2D to what they are in the high dimensional space.

badlogic,
@badlogic@mastodon.gamedev.place avatar

@Aaron This way, the 2D projection retains the "neighbourhoods" that exist in the richer high dimensional space.

The end result is, that semantically similar or related points end up in the same area in 2D as well, which is nice for visualization purposes. We can clearly see clusters of points for different topics.

Neither the original neighbourhoods in the high dimensional space nor the 2D neighbourhoods are perfect of course. But it's plenty good enough for this purpose.

badlogic,
@badlogic@mastodon.gamedev.place avatar

@Aaron UMAP has kind of become the standard method when you want to project high dimensional vectors to 2 or 3 dimensions for visualization.

For embedding text (single words, sentences, paragraphs, etc.) you have more options. I was lazy, so I used OpenAI's embedding model through their API.

A popular alternative is sentence BERT:
https://sbert.net/

For more details on text embeddings, start with word embeddings, then move up to sentence embeddings.

https://en.wikipedia.org/wiki/Word_embedding

badlogic,
@badlogic@mastodon.gamedev.place avatar

@Aaron TL;DR: it's not just word frequencies.

Word embeddings are vectors that encode possible semantics of a single word.

Sentence embeddings are vectors that capture the semantics of an entire sentence. It starts with word embeddings for each word in the sentence, which are the distilled, to resolve ambiguities/references between words, ending up with a single vector that stores all the "meaning" in the sentence.

badlogic,
@badlogic@mastodon.gamedev.place avatar

@Aaron enjoy! Just get too hung up on understanding the nitty gritty details. For projects like the above, all you need to understand is:

  • text goes in, vector comes out
  • similar texts have vectors that will be close to each other

The rest is just measuring distances or angles between those vectors.

sinbad, to random
@sinbad@mastodon.gamedev.place avatar

F**ks sake they changed something pretty fundamental between UE 5.4 Preview and UE 5.4 Final - the ability to have multiple objects in an asset file, which SUDS relies on - the dialogue and string table are in the same asset; now the string table is gone.

I was worried they might do this because they started hiding them in 5.3 (not a problem) so I tested 5.4 Preview but everything was fine. Now it's completely broken in 5.4 Final, every single dialogue line is <MISSING STRING TABLE ENTRY> ๐Ÿ˜ 

badlogic,
@badlogic@mastodon.gamedev.place avatar

@sinbad Sure hope you have more luck getting Epic to even recognize the issue. We had to break every user's project...

badlogic,
@badlogic@mastodon.gamedev.place avatar

@sinbad Hope!

accidentlyAnton, to austria
@accidentlyAnton@mastodon.gamedev.place avatar

What's the latest status on ID Austria? I keep seeing that it doesn't work most of the time. I'm still on Handysignatur and that works perfectly fine. Some services push me into "upgrading". Should I delay switching to it as long as possible?

badlogic,
@badlogic@mastodon.gamedev.place avatar

@accidentlyAnton honestly no idea. Had to upgrade. Works. Most of the time.

badlogic, to random
@badlogic@mastodon.gamedev.place avatar
shtrom, to random
@shtrom@piaille.fr avatar

I've been using on Xitter to make threads into single pages that I can import into @wallabag (also doubles as an ElonWall bypasser as replies are no longer reachable to unlogged plebes).

I just discovered the Mastodon version, @mastoreaderio. Thanks @badlogic !

It has some JS-loading logic, so doesn't work with the backend-only mode of , but it works fine with the browser extension pushing the rendered page.

It does needs a little magic https://github.com/fivefilters/ftr-site-config/pull/1370. It would be handy to have some HTML5 semantics to find content and author more easily.

But all in all, the basic functionality is here!

badlogic,
@badlogic@mastodon.gamedev.place avatar

@shtrom @wallabag @mastoreaderio neat! Happy it has some use.

badlogic, to random
@badlogic@mastodon.gamedev.place avatar

People of gamedev.place, I have a question: have any of you used generative AI in game production? I.e. to generate (production) "art", power conversational skills of NPCs, etc.

I can see how GenAI could be useful for blocking out things. I have yet to see a system that can generate content that doesn't require more work to get production ready than it would take to create manually.

Stuff like Unity's Muse Animate, Scenario, or (FSM forbid) Kaedim confuse me.

(InnoGames uses Scenario iirc)

image/jpeg

video/mp4

badlogic,
@badlogic@mastodon.gamedev.place avatar

@bartholin LOD == level of detail.

As a 3D object gets further away from the camera, it gets smaller on screen, e.g. only covers 3% of the screen.

In that case, it makes no sense to render it at full fidelity. So you use a simplified mesh. You won't notice the difference at that size.

You ship a model at various such "resolutions". Each is one level of detail. You select the level of detail based on the distance to the camera. Helps improve performance, as you do less computations.

badlogic,
@badlogic@mastodon.gamedev.place avatar

@bartholin in the screenshot above, you see the LODs going from 95k "polys" to 75k "polys" to 55k "polys".

That's ... a silly step size. Usually, it's more like an order of magnitude reduction per LOD level. This indicates that Kadeim, the company offering AI generated 3D models, has no idea what they are doing (or preys on customers who are not knowledgable)

badlogic,
@badlogic@mastodon.gamedev.place avatar

@bartholin here's a visual example of what LOD levels usually look like.

badlogic, to random
@badlogic@mastodon.gamedev.place avatar
badlogic,
@badlogic@mastodon.gamedev.place avatar

@Robin_Van_Ee good observation!

godotengine, to godot
@godotengine@mastodon.gamedev.place avatar

Seemingly, people still need to see proof.

Can everyone drop their 3D Godot games in the replies please? ๐ŸŽคโฌ‡๏ธ

#godot #godotengine

badlogic,
@badlogic@mastodon.gamedev.place avatar
  • All
  • Subscribed
  • Moderated
  • Favorites
  • โ€ข
  • megavids
  • kavyap
  • DreamBathrooms
  • thenastyranch
  • magazineikmin
  • InstantRegret
  • GTA5RPClips
  • Youngstown
  • everett
  • slotface
  • rosin
  • osvaldo12
  • mdbf
  • ngwrru68w68
  • JUstTest
  • cubers
  • modclub
  • normalnudes
  • tester
  • khanakhh
  • Durango
  • ethstaker
  • tacticalgear
  • Leos
  • provamag3
  • anitta
  • cisconetworking
  • lostlight
  • All magazines