Hey guys, lots of good questions! I'll try to answer as much as I can and hope this doesn't end up too buried in the thread.Edit: I'll use an Instagram account to post if anyone wants to keep up with updates. https://www.instagram.com/lornekwe/
This is basically how the process works...a very talented chap Marlamin wrote a standalone application that is able to load your WoW install files and extract models, textures, and placement data from the game.https://marlam.in/obj/
You get a huge folder dump of .obj (models) .png (textures) and .csv (spreadsheets). The .csv files are just huge spreadsheets where column 0 tells you the name of the object, column 1-3 tell you its XYZ position in the world, column 4-7 tell you its XYZW orientation, column 8 tells you its scale, and then a couple more columns with info like what set it belongs to, whether it's a wmo (buildings and major landscape features) or a m2 (props, trees, banners, decorations, etc).
My application of choice here is Houdini because it offers very powerful programming integration and is the single best 3D application in the world right now. The programming language I'm mainly using for this is Python. For rendering I use RedShift since it's an extremely fast and robust GPU renderer which gives me back images in minutes instead of hours.
So now thanks to Marlamin's app I've got a huge folder hopefully full of every single model, texture, and placement info I need to recreate the Court of Stars dungeon in this case...and now it's time for some coding work.
If you load one of the .obj files in Houdini, the model has attributes looking for different materials, those materials just don't exist. Luckily the attributes text is identical to the file it needs attached though. The script builds up a list of every different attribute found on the model, creates a material for each one, and assigns it. I also look for key words like "tree", "shrub", "leaves", and many other tags; if either the model name or the texture name contained those key words, its shader would also have an alpha map so that it has the transparency from the texture.
Some of these model files also have their own .csv spreadsheet, so along with setting up the model with materials, it also needs an instancer that will place the various models from the .csv in with the asset. So let's say "suramarcitytemple.obj" is supposed to have a bunch of ivy plants attached to it, trees along a walkway, books, tables, etc., we need all that stuff and the "suramarcitytemple_ModelPlacementInformation.csv" tells us what all the objects are and where they go. It's very important that they are instanced though and not just imported...this way any time "nightelfbench_01" is in the final shot, it's always point back to that same "nightelfbench_01" in the folder and never duplicating it.
Both the model and the instanced objects then get wrapped up together in what's called a proxy file. The RedShift render engine has their own format .rs which is able to save a file that contains geometry, materials, instances...it's all there in one file now. "suramarcitytemple.obj" now has a matching "suramarcitytemple.rs" which is what I'll look for in the final layout when the .csv file is asking me for "suramarcitytemple".
Just need to do this a couple thousand more times for all the other .obj files in the folder! Once again a job for Python scripting. I wrote one that launches a command line Houdini session, looks through the entire directory, and any time it comes across an .obj file it pulls it in, looks up how many materials it needs and what their names are, checks if the .obj has its own .csv file and sets up the instancer, saves it all out as a new .rs file, clears out everything and moves onto the next .obj in the list.
So we've got a huge directory now filled with .rs files in addition to everything, and then the final step is to load the game's main map .csv files and terrain geometry that Marlamin exports. That is the .csv file which is going to call for "suramarcitytemple" and tells us where its position, orientation, and scale actually is in the world.
This is what the final layout looks like to me in Houdini, it's pretty cool but there's not much to see...everything lives as those .rs files on disk that only get attached when I hit render, so all I can actually see are the little points, each representing where one of those .rs files will attach. They could be little things like a stepping stone in a garden, and they could be gigantic things like "suramarcitytemple", but all of them in the end are just a single point that tells Houdini what the instance file is, where to put it, how to orient it, and how big it is.
That's the short version of it at least anyway, the longer version involves a bunch of Euler to quaternions and matrix math and many cans of worms that get opened along the way.
From there you light and render it like anything else really, I'm using a pretty simple sun and sky lighting setup with some volumetric atmosphere added. Then I take the final renders into my compositing software called Nuke and apply film grading techniques to make it look cinematic, save it out and post it for internet points!