Using an oblique projection matrix to set up a view frustum is crucial for properly culling objects behind the portal plane without culling anything in front of it.
Using an oblique projection matrix to set up a view frustum is crucial for properly culling objects behind the portal plane without culling anything in front of it.
Rendering the view from behind one portal on the surface of its paired portal requires a bunch of space transformations and stencils.
Spyro renders the skybox of an upcoming level inside the portal for that level, then swaps the active skybox as you cross its threshold.
In this series of articles, we'll discuss portal rendering techniques for Spyro the Dragon and Portal.
Separating out different color channels and offsetting them using UVs can emulate the way wavelengths of light bend by different amounts in a real camera lens.
Classic photographic film has surface imperfections which mean more or less light is captured. We can recreate it digitally with random noise and add film bars based on aspect ratio.
Separating out an image into two and tinting red and blue lets us create an image which looks 3D when viewed by special glasses.
How often do you think about Ancient Rome? In this article, we'll pixelate the image and overlay a mosaic pattern between the pixel tiles.
There are several ways to save data with different strengths and weaknesses, including PlayerPrefs, binary serialization, and JSON files.
With a UV offset based on a flow map texture, you can make the camera feel like it's underwater.
Some lenses are stronger than others, and with UV manipulation, we can implement the extreme warping of a fisheye lens.
ScriptableObjects are a powerful way to create custom data assets which you can use for data storage, asset variables, events, and behavior.
In this series of articles, we'll learn about many different image effects such as fisheye lens, underwater, 3D anaglyph, and chromatic aberration.
Interpolation methods are ways to blend between two values smoothly. You can interpolate linearly, quadratically, spherically, and with animation curves.
With coroutines, you can run loops over several frames, chain them, and create custom ways to wait for the next loop iteration to execute.