Camera Prototype (personal project)

This is a quick (2-3 weeks) prototype of a first-person camera/photo-taking mechanic. Like many of my game experiments, this started out with me playing around in Unity, in this case making a 3D scene inspired by my hikes in the hills of Oakland and around the bay area. Its mostly a tech demo now, a work-in-progress that needs a bunch of polish.

Anyway, this is how it looks so far:


Level design-wise its a pretty simple scene made up of a very limited number of 3D assets (4x rock meshes, 1 pine tree, 1 oak tree, 1 bush, 2 grass card meshes, a few border tree cards, and a ground custom material that blends between 3 textures).


The terrain is made in Maya and I used the Amplify Shader editor to create a 3 texture blend with a gray-scale mask between them.


Tree and bush cards are created by texture baking from quick high-poly models in Maya.


I did a quick sculpt in Mudbox for the rocks

There are probably better ways to do the sky box textures. In Maya I created a textured dome with some photos I took on the trail (top and sides blended with a fade transparency), then place a camera at the center to capture images of the six directions (required a bit of touch-up in photoshop)


FPS Rig:

The camera parts are parented to a skeletal rig, and I created a quick arm model/rig with a some basic animation poses. The Camera is rigged separately, and parented to the arms in Unity, since I'm calling diffent animations for the arms and camera separately.


The camera uses a standard Unity PBR shader (I picked a old-school view-finder camera A) to get some interesting open/close animation B) and I thought the black casing, shiny aluminum parts would contrast well against the yellow-green woods).


Viewfinder mode:

The camera viewfinder mode is simply switching between 2 Unity cameras, the 2nd with a post-process and more fish-eye FOV. I also add a mask to the canvas to create the frame and scratchy glass effect.


The most technically interesting thing was doing the picture taking. The scripting involved creating a new RenderTexture, creating a new Texture2D, using Camera.Render(), the ReadPixels/Apply the render texture to the new 2D texture. Then a new Sprite object is created and the 2D texture is assigned to the sprite. Lastly I added another sprite with old-school polaroid print looking border on top of the screen-captured sprite image.


There are a few other half-baked experiments in there: bunny rabbits on a simple node network that flee when you collide with them. The Sasquach is a NavMesh agent that is triggered by player and runs to a target, then plays climbing animation (I can imagine some kind of player in-accessible animal path, like ventilation ducts, where it can re-appear somewhere else, needs actual state-machine type behaviors, etc).


Patch/logo idea:


Copyright 2020 Alex Munn