My work on Divinity: Original Sin
This is a grab from the artwork I did during my time at Larian Studios in Ghent, working as both a 3D and Technical Artist, helping out where necessary. For the most part, the assets were created using a full asset workflow, starting in 3D Studio Max to create a blockout, going to zbrush for the high poly, using xNormal for the bake and then going back to 3D Studio Max for the texturing process. Some of these assets were technically challenging; the farm and rock walls for example, were a part of a tiled set, meaning they had to blend both in texture and in topology at their edges. I solved this issue by creating a blending area in both high and low poly, that is always the same at both ends of the mesh. This meant I could do anything I wanted with the rest of the mesh. As for the effects (video at the bottom), I created a number of gameplay and environment effects during my time at Larian, including some very prominent ones. To create them, I used FX Studio Designer, in combination with Larian's proprietary engine. I also created my own textures, and used the ones already present in the texture library to limit memory usage.
What you see here is a demonstration of the assets I made for Divinity: Original Sin, wherein I attempted to present them in a way that is representative of the way players of the game would see them when playing it.
This axe, shown here in Quixel Suite's 3DO (which runs on the Unity Engine), was created using a base mesh that I modeled in Maya, which was then brought into Zbrush to add the high frequency detail such as the embossings and runes. After that, I used 3D Studio Max's polytools to create the low poly mesh, and moved between Blender and 3D Studio Max for the unwrap. I baked the maps using xNormal, and finally used Quixel Suite to create the textures and presentation shots. For reference, I used a piece of concept art created for Warhammer Online.
Deus Ex Chair
This chair, modeled off a piece of concept art that was created for the game Deus Ex: Human Revolution, was created in Unreal Engine 4. I took a relatively standard approach, first modeling it in high resolution, before proceeding to create a low resolution model. I Used Quixel Suite to create the textures for it, but based most of the material definition off the concept art, while maintaining visual fidelity in the new PBR approach that comes with using Unreal Engine 4.
This subway, here shown in Cryengine 3 SDK, was created over the period of a week. I used Autodesk 3D Studio Max and Photoshop for the creation of the assets, and used a very limited amount of assets that come with the SDK. (The particle systems that are visible are not mine, for example. Other than this, assets that are not mine aren't visible in the screenshots.)
Flow Map Painter
This hybrid of maxscript and plugin for 3D Studio Max 64 bit and up, is a project that I have been working on for a while. As of yet, it is still unfinished, but a great deal of the essential functionality has already been created, most importantly the actual painting part, and the code behind it.
Below is a video of the script in action, and footage captured inside UDK of the flow map being used to simulate lava flow. Of course, flow maps can be used for various other things, such as the distortion of maps to simulate effects like wind and hair.
Flow maps are a fairly new technology, having only been applied in a handful of games. A good example is left 4 dead 2, where Valve used flow maps to simulate the flow of water in a level-wide river, guiding the player around the generally confusing level. To create their flow maps, they created a custom plugin for Houdini, allowing them to literally "sculpt" their flow maps using fields of vectors, and then baking them out. However, this method requires not only the plugin for Houdini, but also a highly tesselated mesh.
I saw their tech demo on this and wanted to try out flow maps myself. However, since I did not have access to the Houdini plugin Valve created, I was faced with the problem of creating the flow maps; without a sort of technology like Valve's plugin, creating them is next to impossible, since painting software does not allow for painting with vectors. So, I decided I wanted to create my own version of Valve's technology. I was quickly faced with the problem of performance, though: requiring a highly tesselated mesh, the normal sculpting method severely limited the amount of detail the flow maps could contain. Since I wanted to push flow map creation to the next level, I opted for pixel painting instead. So, I started working on a hybrid script that used plugin code to calculate and apply the calculated vectors in real-time, allowing the user to paint in the viewport, on their low poly mesh. The biggest advantage to this is that a highly tesselated mesh is not necessary, and pixel painting is comparatively performant, even though 3D Studio Max isn't exactly built for it.
Collection of scripts
This collection of scripts is an aggregation of the most useful scripts I have written throughout my career. Their purpose is to help speed up the artistic workflow by automating small parts of the process that are either frustrating or repetitive, and take up unnecessary time that could be better spent on artistic endeavours.
This script copies the selected object's UVs into that object's second UV channel, while simultaneously aligning all the UV vertices to the nearest pixel of the light map, depending on the texture size the user created. By doing this, the script attempts to eliminate pixel bleeding in lightmaps, a very frustrating issue that can be solved by integrating this script into this part of the artistic process.
This script (which works best when used as a button in the 3ds max UI, though I have used it using a shortkey before) saves a backup of the currently open max file into a directory called "_old", in the same folder as the current max file. It also automatically searches for earlier backups of the file, and adds a numbered suffix accordingly. The useful feature here is that the script saves the backup as a different max file, which means that max's recently opened file list will not be filled up with backup files. One very useful purpose i have found for this is to use the script as a way to take backups of the current file while you work in a direction you're not entirely confident about. If it doesn't work out or max crashes, the last saved file will still be the one you had before, while you will have retained the progress you made on the experimental files.
CenterPivot, PivotZero and RXFrm
These three small scripts work best when used together: together, they make the very useful combination of completely "cleaning" any object with just three mouse clicks and minimal mouse movement. Even then, seperately they are very useful as well. Their titles are descriptive of their purpose, but here is the short version: in that order, these scripts Center an object's pivot, set the pivot of an object to zero, and reset the xForm of an object.