Adventures In Texture Editing

I was bored so I started making a weapon model importer type thing for the usable-by-our-client formats.

24mqGjt.png


Link.

Pretty rudimentary at the moment. Imports geometry from OBJ format. Currently can only have one texture area for the whole model, rather than possibly having separate areas split off and using different textures (generally unnecessary and inefficient, real downside is that semi-transparency is all-or-nothing for the whole model). No particles yet; WLD format makes them annoying (skeletons are required, and the skeleton format for WLD is awful) but I think it might be reasonably possible to do for static (non-moving) emission points.

I haven't been able to get animated textures to work in game, although there are definitely weapon models with animated textures so it should be possible. Closely matching their data and looking back at a proof-of-concept animated texture I did for an NPC a while back (and which gave me far less trouble) hasn't bourne any fruit. Could be whitelisted or restricted to a certain ID range... I think the only weapons with animated textures all came from velious and are in a relatively short ID range. Need to do more testing on that.

One thing worth pointing out is that this tool is not an editor for models that are already in S3D files. The thought of having to fiddle with all of the WLD data and keep everything in check was the main thing that kept me from making an s3d weapon model importer when I thought about it before. Instead it just manages models you import and allows you to "synchronize" changes into the S3D . Not coincidentally, the synchronization is set up in such a way that it minimizes the amount of management I had to do for data already in the WLD. All changes are applied to gequip8.s3d by default, and the tool creates its own backup (gequip8_backup.s3d), which it also allows you to easily revert to (though you might want to make your own backup just in case). All of your imported models are stored in a file called "data.s3dimport" which can be sent to someone else (-> Woldaff) to easily show them everything you have and let them fiddle with it. You can also freely delete this file to start from scratch if you run into problems. (I thought about making a convenient pick-and-choose way to import from one data file to another, but I doubt this will see enough use to bother with all that.)

bmGhLKO.png


I included these two models in the download since you (= Grinkles) might not have any simple OBJ format model on hand to play with. Making simple models in Blender is surprisingly easy if you can take some time to wrap your head around the interface and the basic 3D graphics concepts; watching tutorials helps.

I dunno if we have a weapon model viewer thingy in the game? Also probably don't know about item model IDs... I usually use the 3000s range for my random test stuff since that is pretty (completely?) empty. Most of the ID space between 3000 and 10000 is probably empty. The client will refuse to load stuff beyond a certain point (I think I tested 20000 a year ago on a newer client and it didn't work). Probably possible to make helmet models like the velious armor racial ones. Definitely possible to make ground-spawn type stuff.

P.S. the model viewer in the tool has very crappy camera controls since I did it all manually and didn't put much time into it once I got to the point of making models show up correctly. Was a good excuse to learn a bit about the basics of opengl, though.

P.P.S probably some bugs etc.

P.P.P.S positive X is UP, positive Y is FORWARD. In the viewer, the initial position of models has forward to the left (would be looking at the front side of a shield).
 
Last edited:
I'm glad to see your interest in this kind of thing is still going strong. Your Buster Sword game could be stepped up though! It should be at least as long as the wielder's body to be convincing! ;)

Blender is something I'll have to look into further, but it's far beyond my current skillset. When Reppots posted some promising Unity ideas, I tried my hand at some of that myself and immediately felt I was in way over my head. Tutorials would likely help, like you suggested. It might be a fun experiment for me to try and get these two unused pre-Kunark shield models up and running someday as an initial test, just to see them brought to life once and for all. I imagine that shields are among the easiest models to create, given their symmetry and simple geometry.

As to whether we have a held item model viewer in game, we sort of do. In Athica B, the "shapeshifter" NPC used to test races/textures can also be told to hold a specific item. However, the IDs are all out of whack, and I don't believe Woldaff ever brought it up to a usable level. I think the problem is that if you tell him to hold model ID #200, for instance, he won't show that model number, but instead he'll hold the specific SoD item with that item ID number (such as a Copper Flail or whatever). I've used Kaiyodo's EQ Model Viewer for out-of-game viewing before but have had mixed results with it; sometimes models seem to come up squashed/distorted or completely untextured (white). When I would apply a custom texture, I think it used to come up in the viewer as an odd, speckled "noise" texture all over the model in question, which limits that program's usefulness.

One last question, Zaela -- I don't suppose you have any insight into whether your tools might be capable of implementing those 10 unused Velious helms, do you? The geometry and textures are already in place, but I have no idea how one would go about designating where they go on a model (i.e. orientation about the head) or anything else. There probably would be further issues with the Classic/Luclin model dilemma....
 

Those helms show up fine when put in the head slot of the appropriate races. There just may be no way to have an item use them. I just spent 15 minutes reminding myself how to get the velious helms hooked up to an item and I have to say I'm pretty sure that's all hardcoded in the client because the way they are referred to doesn't make much sense. (Apparently the head slot item has to reference IT240, which is... nothing at all.) There's nothing in the WLD which controls how the client uses them. Weapon models only work on the basis of the name being IT#, which doesn't seem to apply to helmets. (Maybe it's possible to use a specific helmet ID like IT535? I dunno if I ever tried that -- but would need to be a race-specific item in that case.) I had forgotten how weird helmet models were.

Confirmed that texture animation does work given a different ID number than I was using (249 rather than 3000 -- will have to see what the limit is). So woo.

Would probably need a tiny bit of new code to make it possible to have that NPC show specific model IDs rather than models for specific item IDs. Should be easy for someone to do, though.

Really want to encourage you to try a little 3D modelling again (and not just because I'll have wasted two days making this tool otherwise). Bear in mind that my two test models are the 3rd and 4th things I ever made, and with no artistic ability whatsoever (and they seem relatively decent, at least compared to most of the models we have access to in our client). Start simple -- my first model was just a cylinder. The general idea is to start with really basic shapes and then just break them down a bit. My master sword model was just a cylinder, a sphere and two rectangles to start with. From there most of the work was just deleting bits and pieces to make an edge, a rough curve, etc.
 
It really should have occurred to me while I was writing that last post that we could easily make whatever helmet model we wanted show up the very same way that I was testing them (same way GMs can make them show up in their hands, just... using the head slot) rather than relying on the client to decide how things work. Should be easy to include those unused helm models somewhere if we wanted, just needs a tiny code change somewhere.
 
Would probably need a tiny bit of new code to make it possible to have that NPC show specific model IDs rather than models for specific item IDs. Should be easy for someone to do, though.

Really want to encourage you to try a little 3D modelling again (and not just because I'll have wasted two days making this tool otherwise). Bear in mind that my two test models are the 3rd and 4th things I ever made, and with no artistic ability whatsoever (and they seem relatively decent, at least compared to most of the models we have access to in our client). Start simple -- my first model was just a cylinder. The general idea is to start with really basic shapes and then just break them down a bit. My master sword model was just a cylinder, a sphere and two rectangles to start with. From there most of the work was just deleting bits and pieces to make an edge, a rough curve, etc.
You make it sound so simple to start, and I'd like to give it a whirl eventually. However, I'll have no way to view anything in game unless the Athica B NPC's held item viewer feature is made functional. I'll see about nudging Woldo in the other thread for an update. If I really wanted to, I could reacquire the Live files and set myself up to access one of the few GM-command servers on EQEmu, but I'd rather not take that path.
 
I followed your advice, Zaela, and looked up some Blender tutorials on YouTube. This one showed me how to make a fuzzy stuffed bear. The only major change I made was doubling the head size to go for a cuter bear. If I were to start on my own from scratch though, I'd definitely be better off doing it your way by starting small with a cylinder, then maybe a club or shield. Programs like Blender seem impossibly complicated to me though, and I'm not sure yet whether I'll have the patience or talent to make good use of such a program.

Here are two pics of my bear (with all the credit going to that tutorial linked above):

Teddy%20Bear%20Test%201_zpsj58c1uex.jpg


Teddy%20Bear%20Test%202_zpsgbnzrm0r.jpg


As mentioned in the previous post, I'm not able to see any custom held models in game, so I still have yet to see how something like this would work with your S3D Weapon Model Importer. However, I do have one (probably naive and poorly phrased) question: How do you determine a held model's orientation with respect to character models? In other words, how did you make sure the handle of your Buster Sword (and not the blade or some other part) would end up in a character's hand and at the correct angle, rotation, etc.?
 
How do you determine a held model's orientation with respect to character models? In other words, how did you make sure the handle of your Buster Sword (and not the blade or some other part) would end up in a character's hand and at the correct angle, rotation, etc.?

Everything is relative.

Simple answer:

Wherever 0x, 0y, 0z (0, 0, 0 -- the "origin" -- where the red and green lines intersect in Blender, up in the top of that bear's head in your screenshot) is for your model, that's where characters' hands go. As far as rotation is concerned, you only really need to know which (arbitrary) direction is "up" and which (arbitrary) direction is "forward", and as I vaguely mentioned at the end of one post, for the purposes of the tool, the positive x direction is "up" and the positive y direction is "forward". Iirc, Blender considers positive z as "up" by default (to the extent that that matters -- not very much) but you can pick which direction will be used for "up" when you export your model to OBJ format and Blender will make the necessary (purely mathematical and conventional) adjustments for you.


Probably unnecessary theory-ish answer:

3D is hard. Adding an extra dimension (compared to 2D) makes things exponentially more complicated. So we keep things as simple as possible. For the most basic things (position, rotation) everything can be broken down into three components (x, y, z). You can get to any position by moving along the three axes from some starting position (usually the origin -- /loc coordinates are an example of this). Same goes for rotation; you can get to any orientation/direction by rotating around each of the three axes (in first person camera terms, one axis is up/down, another left/right, and the third would be spinning the camera around (e.g. upside-down) -- they're also called pitch, yaw and roll or Euler angles). The same ideas also gives us six cardinal directions in 3D -- three axes, each of which can go toward positive or negative. So we can say that something is facing the positive y direction, for example, or say that positive z will be considered "up".

When we move up to the level of handling multiple models, we keep things simple by isolating everything into its own little world, coordinate-wise. Models are always defined relative to 0, 0, 0 and given some (arbitrary) base orientation using the cardinal directions ("positive x is up, and it's facing positive y"). When it comes time to place the model relative to some other model, we can then just replace 0, 0, 0 with some other position, and apply another set of axial rotations on top of the model-being-placed's base orientation.

So in the example of a weapon model, as far as the model cares (that is, in its "model-space") it's always at 0, 0, 0 pointing straight up toward +x and oriented straight towards +y. The hands of a character model have "attachment points" which have their own position and orientation. The weapon models are attached to these and inherit their relative position and orientation, so that, relative to the character model (in the character's model-space), the weapon model appears extended out by the character's arm and rotated by the character's wrist.

(Same thing happens for helmets relative to an attachment point on top of character's heads (although the arbitrary direction chosen for the base orientation of the head attachment point is not consistent among the races, which is why small race velious helmets will appear sideways on medium races and so on). Also, same thing happens for character models relative to the world; characters are moved ("translated") and rotated relative to the origin and base orientation of the zone model. Also also, the animations that move the attachment points on a character model around in the first place are themselves just a series of relative translations and rotations (e.g. the shoulder moves and rotates relative to the chest, then the upper arm relative to the shoulder, then the elbow relative to the upper arm, then the forearm relative to the elbow, then the hand relative to the forearm, then the weapon attachment point relative to the hand, each inheriting the cumulative movements and rotations of the things that came before...) along a hierarchy of joints that make up the model's "skeleton". Also also also, particle emission points work the same way relative to weapons as weapons do relative to characters -- unless they are defined to be relative to the world once they have been spawned, as in the case of particles which "trail behind". It's allllll relative.)

Surprised you didn't mention scale (unless that was the "etc"!). "How big is this?" is also a relative thing and can be hard to tell when every model is isolated. The units used by /loc are the fundamental units of EQ, model coordinates assume the same units. A long sword is maybe 2 or so units long, for instance.


Probably none of that helps any, but I wrote it. Vertices and triangles are probably the other foundational subject in the "ignore the math as much as possible" school of 3D graphics.

Blender is definitely a complicated tool that you have to ease yourself into (I've heard Maya and/or 3DS Max are not as bad but I wouldn't know). Still boils down to the same as most things. Poke around a bit, try things out, undo a lot; eventually you'll figure out how to do something consistently, and then another thing, and then you'll be able to use those two things together repeatedly to make a crude model, then maybe pick up another simple technique and throw that in there, then get a little confident and learn how to do what you were doing before in a more proper way, blah blah blah.... maybe.

Can the druid pet bear pleeeeeaseeee look like that?

Maybe with like 1/50th of the detail ;p Almost 51k vertices according to the screenshot -- most EQ models don't break 2k vertices, 1k for the old stuff our client has.
 
Hey I stumbled across this thread through google image searching. I've been playing around with textures as well on my P99 client. One thing I haven't been able to figure out is how to play with the models. How are you guys extracting the character models? :O It may be unlikly I'll be able to put models and stuff into the game for P99 but I'm more interested in playing with the models in modeling programs.

Grinkles? Zaela? Sorry if it's mentioned previously. I scanned through the thread trying to find info but I'm not sure.
 
Hey I stumbled across this thread through google image searching. I've been playing around with textures as well on my P99 client. One thing I haven't been able to figure out is how to play with the models. How are you guys extracting the character models? :O It may be unlikly I'll be able to put models and stuff into the game for P99 but I'm more interested in playing with the models in modeling programs.

Grinkles? Zaela? Sorry if it's mentioned previously. I scanned through the thread trying to find info but I'm not sure.
I have little experience with tinkering with models themselves. Almost everything I've done in this thread is purely texture-based (i.e. the "skin" that goes over a 3D model rather than the 3D model itself). However, it is possible to view and even export EQ's models via a third-party program called Kaiyodo's EQ Model Viewer. These are stored within the game's .s3d files, which EQ Model Viewer is able to dig into and render outside the EQ engine. I don't have a link handy because it's a somewhat obscure program and I can't even remember when/where I acquired it, but some quick Google-fu should point you in the right direction.

Here's a pic of EQ Model Viewer in action:

EQ%20Model%20Viewer%20Demo_zps3xvw1ibr.jpg

As you can see, there's an "Export ..." button that allows you to isolate the selected model in .pov, .obj, or Maxscript format for use in programs such as Blender or 3ds Max.

Is this what you're looking for, @Zukan, or have I missed the mark?
 
That sounds like what I've been searching for, Thank you Mr. Grinkles. I shall search and report my results.
 
Okay so!

I found Kaiyodo's EQ Model Viewer. I used your google doc to locate a character model. I used Bristlebane as a test. As you can see his arms and legs are inside his body. I assumed this was due to animations being tied to those parts and hoped I could find a way to fix it if I got it out.

J44Qxoj.png


I got the model and the textures extracted and imported into Blender. The problem with the body is worse than I thought. all the pieces aren't even connected. They're separate mesh pieces which makes it harder to determine whats what. Also as you can see the UV's aren't as they should be.

ObmJjTZ.png


I went about fixing the UV's and I went ahead and merged some vertices while I was at it.

aKvhfHi.png


I believe I can rebuild an entire body but it'll take some time. I'm not a Bristlebane fan so it won't be him. :p
 
The two export formats Grinkles mentioned don't support animation. I'd be surprised if that tool supported animation for display purposes, either...

I've been dabbling with a framework for loading and displaying EQ models and animations a bit recently (kind of on-again off-again). Got to the point where it can animate these old wld-based models recently (ultra brief example). However, the hard part is importing and exporting... It's hard to find an animated model format that is a) well documented and b) widely supported by modelling programs while also not being an over-complicated pain in the ass to figure out and work with (looking at you, collada). 3D skeletal animation techniques have come a ways since EQ's day; there are a lot of options and assumptions baked in to most formats that are simply overkill for the simplistic-but-somewhat-nonstandard way wld animations are set up.

Other than that: old model data is a bit of a pain. There are a lot of little one-off oddities in the data that are apparently fixed in the client (hard-coded). And with animations, there is a lot of reuse that is also hard-coded and not apparent if you just look at the model data. Bristlebane almost certainly doesn't have any animations of his own, for example. They'd be inherited from halflings -- not that halflings have more than one or two animations of their own. For the original player models, almost every animation is inherited from ogres (-> trolls) or wood elves (-> everything else). But there are a lot of other races that do this on a one-off basis, like Tigers from Lions, Gnolls from Orcs, Wurms from Dragons, etc. Plus, there are some animations that are hard to find at all... I don't know where wood elves (and therefore most everything else) load their social animations from, for example. Could be hard-coded...
 
Update for those interested. :)

I love iksar and my whole plan has always been to export them first. So here is my progress so far.


Fresh Export:
rD6psgZ.png


Pieced together:
AIPdGIS.png


Improved mesh and UVs:
m5oO857.png


All the textures were their own map for each body part. For what I plan to do next in Zbrush I need it all on one map so I dumped them all on one 4k map.
ovrPljR.png
 
That's some impressive work, Zukan. It's strange to see a pre-Luclin playable race with its palms opened up; in game, we're all stuck making fists no matter what we're holding. (Incidentally, is that the reason the hands are untextured in your version of the Iksar, some kind of problem getting the texture to mesh well since it's meant for a clenched fist? I see it's also missing from the 4K map.)

I know your interest is primarily in the 3D modeling side of things with this project of yours, but have you considered cleaning up the textures themselves to show off your custom UVs even more? Upscaling them and applying some Gaussian blurs and/or sharpening might help. I'm not sure whether or not Nysus, Xevin, or Psycher ever improved the Iksar texture set, but it might be worth taking a look at those re-texture projects here and seeing if it might help your cause as well.
 
Heya all, I would be most interested in making robes look like robes on non-robe wearing races, even if they look like diapers, as they did on the troll. Theoretically, how could you go about doing this? I understand that it has to be referenced, but it is a possible edit? Would it be simple?
 
Back
Top Bottom