Be advised: this thread is not for serious in-depth discussion of weighty topics (we have a link for that), this thread is not for anything Culture War related. This thread is for Fun. You got jokes? Share 'em. You got silly questions? Ask 'em.
- 207
- 2
What is this place?
This website is a place for people who want to move past shady thinking and test their ideas in a
court of people who don't all share the same biases. Our goal is to
optimize for light, not heat; this is a group effort, and all commentators are asked to do their part.
The weekly Culture War threads host the most
controversial topics and are the most visible aspect of The Motte. However, many other topics are
appropriate here. We encourage people to post anything related to science, politics, or philosophy;
if in doubt, post!
Check out The Vault for an archive of old quality posts.
You are encouraged to crosspost these elsewhere.
Why are you called The Motte?
A motte is a stone keep on a raised earthwork common in early medieval fortifications. More pertinently,
it's an element in a rhetorical move called a "Motte-and-Bailey",
originally identified by
philosopher Nicholas Shackel. It describes the tendency in discourse for people to move from a controversial
but high value claim to a defensible but less exciting one upon any resistance to the former. He likens
this to the medieval fortification, where a desirable land (the bailey) is abandoned when in danger for
the more easily defended motte. In Shackel's words, "The Motte represents the defensible but undesired
propositions to which one retreats when hard pressed."
On The Motte, always attempt to remain inside your defensible territory, even if you are not being pressed.
New post guidelines
If you're posting something that isn't related to the culture war, we encourage you to post a thread for it.
A submission statement is highly appreciated, but isn't necessary for text posts or links to largely-text posts
such as blogs or news articles; if we're unsure of the value of your post, we might remove it until you add a
submission statement. A submission statement is required for non-text sources (videos, podcasts, images).
Culture war posts go in the culture war thread; all links must either include a submission statement or
significant commentary. Bare links without those will be removed.
If in doubt, please post it!
Rules
- Courtesy
- Content
- Engagement
- When disagreeing with someone, state your objections explicitly.
- Proactively provide evidence in proportion to how partisan and inflammatory your claim might be.
- Accept temporary bans as a time-out, and don't attempt to rejoin the conversation until it's lifted.
- Don't attempt to build consensus or enforce ideological conformity.
- Write like everyone is reading and you want them to be included in the discussion.
- The Wildcard Rule
- The Metarule
Jump in the discussion.
No email address required.
Notes -
I saw your comment originally, but forgot to answer. I only played around with modding Morrowing way back when, so I'm not familiar with what Skyrim lets you do, but I don't remember anything particularly 3d-graphics-programming-y about it. Does Skyrim scripting let you do some vector/matrix math (other than you implementing it by hand that is)? That's the typical entry point into the world of 3d programming.
I might be missing something obvious, but it sounds like a nightmare to me. I think you could do something clever to only fetch the spaces affected by the mod you want to validate, but after that... How would you decide which surface is supposed to be hidden, or a hole is not meant to be there? What does "visible" mean? You'd run a sweep through the entire room?
I don't know, but I was planning to do this as a separate (probably C++) program that just loaded all the resources and analyzed it rather than doing it in Skyrim itself. The idea was to start off learning how the assets are stored, how the data structures for the models work together, etc and build up to being able to run a "simple/naive" analysis on them.
It wouldn't, it would just try to identify all of them and leave it to someone/something else to decide if it is meant to be there or not.
I don't know much about 3d graphics at the moment, but I believe a naive algorithm for detecting what I'm looking for would be to cast a ray from a spawn location straight down until it intersects a surface, then do a breadth-first search of all adjacent surfaces recording any that are adjacent to (roughly, share an edge with) one without a renderable texture.
Ideally it'd sweep over every worldspace in the game.
For the life of me, I can't remember the name of the guy, but when I was getting into 3D programming, there was a series of OpenGL (or was it DirectX) tutorials that some dude wrote, and everybody was using. It looked kind of like this one, and it took you through all the relevant math, and showed all the basics from rendering/manipulating 3d models, to texture mapping, and taught cool effects. Personally I'd go with something like this for a start.
With this alone you'd have your hands full, I think.
Well, even then you need some criteria to try identify them. Otherwise you'd be showing people the entirety of the game map.
Yeah, you can do that (and in fact I distinctly remember Morrowind having a scripting function for it), the issue is that you can cast an infinite amount of rays from any point. You can get around that if you know what you're supposed to be looking at. For example, to determine if an NPC can see you, you can cast a ray from it's head on to the center of the player's model (or to a few points defining it's boundaries). If something breaks the line of sight, the NPC can't see you, if not, he can. Then you write the AI code to react appropriately. But if you're sweeping the entire map, and casting rays from everywhere towards everywhere, you're going to make your CPU weep tears of blood. And coming back to identification - if you don't know which rays are supposed to be broken, and which are not, the entire exercise is kind of futile.
That would take approximately forever.
I don't think I communicated the intended algorithm well. This is just intended to be a batch program that you point your load order at and it spits out a file listing all the "holes" it found. I would only cast a single ray per worldspace, straight down from the (first, if more than one) spawn location to identify a surface to start the breadth-first search. My assumption is that this initial surface would almost certainly be part of the composite surface surrounding the playable volume of that worldspace rather than something floating within it, and thus "flooding" over it with a breadth-first search would suffice to identify holes.
EDIT:
I do have a criteria to identify them: a surface with a texture adjacent to one without a texture. It is classification of them that I defer on. The definition of "adjacent to" is a bit complicated, but basically shares an edge with and if you rotated them around that edge they'd come together without intersecting another surface.
So to make sure I got it right: just a scan from the top to make sure there's no holes in the floor / the ground?
Yes, though I expect for interior worldspaces it'd wrap around to cover the walls and ceilings as well.
Oh ok. I think that should work for interiors (though the math of it is beyond me at the moment)... For exteriors, I thought there are not holes in the ground in TES games, that the map is literally a heightmap defining where topography of the ground?
This is true, but static objects (eg, boulders on mountains) intersect that heightmap and thus would be traversed by my search, and if they don't intersect it properly a surface without a texture on that object would be found.
This is another thing I glossed over, what exactly do you mean by that? Are we talking about a floating rock in your example? Which surface wouldn't have a texture here?
More options
Context Copy link
More options
Context Copy link
More options
Context Copy link
More options
Context Copy link
More options
Context Copy link
More options
Context Copy link
More options
Context Copy link
More options
Context Copy link
More options
Context Copy link