Search

Posts

Writing

C# Async Task Notes

In 2025, writing asynchronous code with C# Async Tasks is a skill Unity developers can no longer avoid. Unity’s support for C# async tasks goes back as far as Unity 2017, …

2024 Reflection

Today is the only day on which I can write my annual reflection, so I am taking the opportunity to review this year’s progress and next year’s plans. Things I …

A New Look for a Classic—Modifying FF9's Shaders

Introduction This post records how I used the Memoria mod for Final Fantasy 9 (FF9) to modify the shaders used by the game, giving its characters and scenes a completely different …

A Review of the Second Half of 2023

About the second half of the year At the beginning of August, I left the company where I had worked for nearly eight years. The reason was that, barring any surprises, I would be …

Using AMD FSR 2.0 in Unity

AMD FSR and NVIDIA DLSS are both upscaling technologies. They let a game render at a lower native resolution while retaining image quality similar to a higher resolution. In an …

Gamma Correction and Gamma Encoding

This post is a short set of notes I organized after reading Digital Images: From File to Screen. The example images are reproduced directly from that article. My main goal is to …

Notes from Unity Shaders to OpenGL (3): HDR and Bloom

In the previous post, I implemented normal and parallax mapping and worked through the TBN matrix. This time I continued with HDR and Bloom. Advanced Lighting—HDR Floating-point …

Notes from Unity Shaders to OpenGL (2): Tangent Space

Continuing the previous post and following LearnOpenGL, this time I started implementing Normal Mapping. Advanced Lighting—Normal Mapping This section introduces the principles and …

Notes from Unity Shaders to OpenGL (1)

![Untitled.png](/assets/img/blog/Untitled (5).png) Why write OpenGL? One convenient thing about writing shaders in Unity’s Built-in Render Pipeline (BiRP) or URP is the large …

Getting Started with Unity's C# Job System (1)

In the previous post, I gave a brief introduction to the advantages and disadvantages of multithreaded programming and the architecture of the Job System. This post introduces …

Using DrawMeshInstancedIndirect in Shader Graph

When rendering more than ten thousand objects, it is common to use an API called Instanced Indirect. In Unity, this means calling Graphics.DrawMeshInstancedIndirect. Whether the …

A Simple Verlet Integration Implementation in Unity

Verlet integration is an integration method for Newton’s second law of motion. It is commonly used for cloth simulation and for effects such as ropes and ragdolls. I first …

A Custom Lighting Shader in Unity URP

The toon-rendering shader I made on a whim has been published for a while, so I am writing these notes to help organize my thoughts. Most Chinese-language resources about custom …

Implementing a Toon-Rendering Shader in Unity

Toon rendering, also called NPR or toon shading, may be the rendering style most commonly used by Unity developers besides Unity’s built-in Standard shader. I wrote a …