Technical Art at Electonic Arts
Unfortunately the majority of my tools and tech artist work with EA, either cannot be shared publicly or cannot be captured in this format. While I'm able to discuss in relatively unspecific terms what I have done in a conversational or interview setting, I cannot share screenshots from our internal tools due to NDA.
A list of examples from my most recent work with EA:
- Extended several art creation toolsets for new features of Madden NFL and NCAA Football, streamlining the artist workflow (Python, MEL, C#, Windows Command Line, Perforce)
- Create/expand art library sampling tools to make unique character creation more efficient (Python, MEL, C#)
- Shader development to extend preview options and art creation functionality in artist toolsets (CGFX)
- Large scale asset management integration with scripts (Python, MEL, C#, Windows Command Line, Perforce, Proprietary Asset Management System)
- General artist support, debugging tools/workflows and runtime, critical paths testing (Xbox 360 and PS3)
- Tuning of automated build systems, parsing large volumes of data for key information on bugs, build errors (Python, Build Forge)
- Worked with a centralized team of over 80 individuals, handling game assets and art creation tools for several titles
Vertex Color Driven HSV Modulation Shader [CGFX]
This is a shader written in CGFX to provide vertex color control over the HSV manipulation of a texture sample. It was written in response to the need to create a large number of environments in a small timeframe, all with varying texture characteristics, but a limited texture footprint. The given example is seasonal, though the applications are quite numerous for this kind of functionality. This shader also includes vertex lighting and fresnel rimlighting to support the look desired.
Panorama Generator (with XML Hotspot) [C#, XML]
A popular practice for a previous employer was to deliver 3d content in the form of an interactive flash panorama viewer. I created this cubemapping / interactive panorama generation script to relieve artists of the responsibility of creating hotspots, or interactive (clickable) portions of the panorama, by hand. It was especially time consuming because the artist also had to isolate the object and rotoscope it out to create a detailed clickable area instead of a rect. Enter my script: First a cubemap is created for the panorama. The 3d transforms of all artist-designated hotspot items (encased in blue spheres for artist feedback) are mapped properly into the panorama coordinates and written to an XML file that the viewer reads in. These nodes can also be used simultaneously in the same scene to create a network of node-to-node travel within the XML.
View interactive demo
Lightning Controller [C#]
This script generates random lightning strikes around an epicenter (generally the player location or a fixed point in the environment, in this case "CoffeeTable" was close enough). Each strike generates a flash of light and randomly samples audio from the Thunder audio bank. Since this was primarily created for use with interior environments, sound was the emphasis.
Artistic control over the generation of lighting bolts is added through some easy to use parameters. Pitch and Volume variance are linearly inerpolated between Min and Max values using the distance between Viewpoint and the generated strike in relation to the maximum radius, providing an accurate depiction of lighting strikes near to far while efficiently using only a handful of sound clips. Frequency is used to control the severity of the storm. Wait To Strike is the minimum time that must have passed in order for another lightning strike to be generated to prevent an unnatural overlap. The result is a convincing ambient stormy setting.
Light Set Swap [C#]
Unity3d has no native ability to control active lightmaps and switch between them once the scene is loaded. The project called for a power outage, so that ability was a necessity. Artists create a light set (theoretically any number of them), light the scene, bake lighting to lightmaps, associate the lights and generated lightmaps with the desired light set. The end result is a lighting swap that can be triggered by any event.
Design of the vehicle rigging solution was achieved with the combined effort of a software engineer and myself. My responsibilities were centric to player-vehicle interaction and more artistic concerns like wheel rotation and tread scrolling.
The HUD items seen here were prototyped by the software engineer, I then optimized functionality, re-faced with final art, added mobile-friendly interaction.
Footprint Tool [C#, MaxScript, XML]
Each building prefab has its own object space footprint for ease of editing and repeated placement. Upon script execution, a collective scene footprint file is built (CSV) for storage on the server. I learned MaxScript to write an authoring tool for these footprints straight out of the modeling program. Given more time I would automate the creation of footprints.
Terrain Modifier [C#]
Unity3d's terrain tools have no native ability to alter the initial parameters of a terrain without losing modifications made by artists to the initial data import. Well into the process of customizing the USGS terrain data, an artist noticed their terrain was mirrored from what appears on the real world map. This script prevented a loss of terrain data that would have cost the artist several extra days of corrections. Development was organized to eventually add additional features like crop/resize, resolution modification, automated foliage generation (by diffuse color or terrain height).
USGS / Hydro Data Visualization [C++]
While working as a Data Visualization Programmer, I was presented with a project to help analyze data along the Illinois River. The design specification was to:
Develop proprietary software in C++ to generate interactive models of USGS digital elevation map data in a real-time OpenGL application with a large array of data manipulation tools and customizable viewing filters and to support animation of river data sets to highlight occurrences of river breach.
Check out the feature breakdown in this still image and then proceed to the video below to see it in action.
Here is a video to help demonstrate the majority of this program's functionality: