A code blog
Experimenting with a new form of update blog. We will see if these stick.
Currently listening to: John Scofield
Lately I've felt that writing has helped me stick to a routine and serves as a nice reinforcement tool when learning new things. This is part of a new approach I'm taking to my studies and general personal organization. Over the last few years I've started taking a ton of notes and trying to build a personal database of information. While my process is still a work in progress I'm confident that it's helped me in numerous ways.
I've decided to start publishing a portion of the journals/updates/notes that I'm writing in order to potentially help others and attract similar folks that might be interested in working together or motivating each other. In particular these will likely be written from a similar perspective to what you're reading now. Just my unabridged thoughts about a recent period of work/study/effort/realizations. I find that this type of approach makes writing feel more natural and less like a chore to me. For instance I don't feel compelled to obsess over things like small grammatical errors like I'm writing a research paper. Whenever I sit down to write a "blog" or "article" I feel this urge to read and re-read before posting, but right now I just want to write.
In my previous post I talked about history and some of the things that went on at the University of Utah in the late 80s. Now more than ever I feel that being around similar and motivated people is extremely important to success for most of us. This is part of the reason I've pushed my career so hard in recent years to try and work with the best engineers I can. I've been hoping that it would help me get close with people and have deep conversations about engineering and our approaches to things.
My connections have honestly just felt so surface level over the last few years. I honestly think the remote model is starting to wear on me. We have a tendency to withdraw somewhat in the remote model. I think it takes significant 1:1 time with someone to actually get comfortable being yourself. It feels really difficult to hit that limit in a reasonable time period remotely. It's definitely achievable, and I've become close with colleagues after working remotely with them for extended periods of time, but IMO that usually takes about a full year of working pretty closely with someone.
Anyways, what I have been working on recently? Well, I've gone full-tilt into the world of graphics. I've been attacking things both artistically and scientifically. Between 3d modeling and environment art in Blender and Unreal Engine 5 I've unlocked a new hobby. What's better is that my wife is actually a really talented environment designer so we have a new way to connect and have begun the initial stages of a new project together.
I've also been studying rendering and the graphics pipeline more generally. I found a great resource to introduce myself to rendering in Peter Shirley's Ray Tracing Series. I worked through the first book and I've been working on digesting it fully while adding new features to the ray tracer. In particular I've added support for ray-plane intersection and ray-triangle intersection using some associated literature. I also added some simple python scripts to generate multiple images with the ray tracer and then automatically compile them into an animation. The script itself still needs a bunch of work. I'd like to add some nice tweening functions for the camera movement. I'd also like to set up a simple little render farm on digital ocean or AWS.
I'm still working to understand the rendering equation fully. The past like 9 months on this graphics journey I've had to re-learn much of the math I haven't really used since college. Trig, linear algebra, a bit of calculus. I'm still not where I need to be, and will likely have to devote more time to that soon, but I'm doing well enough to keep up with the rendering material I'm consuming.
I've also been working through an excellent Vulkan Course by Ben Cook on Udemy. It's a great introduction to the Vulkan API and a ton of relevant GPU concepts. I will say, Vulkan is a bit much. I think I'm actually going to take a detour through his OpenGL course before I complete the rest of the Vulkan one. Mostly because it's rather short in comparison and gets you drawing something much faster. Vulkan has turned out to be just as verbose and tedious as everyone warned me it would be.
My goal is really to get to point where I can fully utilize my graphics card's Ray Tracing hardware, so in the end I really do need Vulkan's capabilities. I might also start looking into some of the Ray Tracing capabilities inside of UE5. Eventually I'd like to make some pretty unique games fully rendered using real time ray tracing. I just find ray tracing to be so simple and beautiful, and when I'm working on something in Blender all I really care about is that final ray traced image.
Eventual Project and Inspiration
Right now I'm really just binge learning, a mode I've been in for some time now. Eventually I have to decide on a focal point to really bring things together and actually utilize all the things I've learned for some end goal. The obvious thing is to make a game, and I've got an idea I've been toying with for years.
I really love biomes in games. Terraria and Minecraft really brought the idea of biomes into the mainstream, at least from my perspective. MMOs like world of warcraft have always had big open areas that connect to one another, but they are more specific and somehow don't have the same charm. I find biomes simple and exciting as a player, but I'd like to take them a step further. In particular I'd like to experiment with biome blending and interpolation. Taking two biomes that are adjacent to one another, and slowly blending between them where they meet. The is opposed to the typical method in procedurally generated games of just having a cutoff from one area to the next where they very obviously diverge.
I want to take this as far as it can go. You have things like vegetation and wildlife that can blend at the border of two biomes. Maybe pink trees fade to white, or the small trees become larger. I think it would also be neat to experiment with cultural interpolation between societies. Let's say you have an area with pirates that borders an area with robots, it would be exciting to watch the system have emergent behavior where at the border you get futuristic pirates with laser cannons. That's to say nothing of the procedurally generated regions where you get 5 biomes that blend and you get undead robot pirate birds that can breath underwater. Of course this sounds like a lot of complexity, but I'm still excited about the idea to this day, which let's me know its a keeper.
So that's where I think I'm headed with this. Some sort of open world RPG-ish game with procedural generation, lots of different biomes and cultural areas, and all sorts of different emergent blending happening between them. Not to mention all rendered via some crazy real time ray tracing stuff. What form the gameplay will take, I have no idea. But that's a problem for another time.
Before I go I'll leave a couple links to some John Lin's work on path tracing in a voxel renderer. This stuff really inspired me to get started on my graphics journey when I saw it a year or so ago. Great stuff. Check out the rest of the videos on his channel.
Ask me questions on twitter or email me at email@example.com