• Portfolio and blog of sydneyzh.

• ## Using an Apple Keyboard on Windows

Intuitively I would like to use the Cmd key (the left one at least) in a similar way as on Mac OS. The easiest method for that is to map the LWin to LCtrl from SharpKeys. This also provides ergonimic assists for using emacs. Some other keys such as Ins …

## Install pip packages for Blender

Find out the version of python bundled with Blender by using the python executable at Blender/version_number/python/bin/python.exe Install python of the same version elsewhere on the computer Copy "include" and "libs" directories from that installation and paste them to Blender/version_number/python. We need the c …

## VisualSVN Notes

VisualSVN Notes VisualSVN Server comes with svn.exe on its own. It doesn't depend on TortoiseSVN(Graphical client with optional toolchain) or ApacheSVN(toolchain only). If VisualSVN and TortoiseSVN are both installed, they will be accessing the same .svn folder of a repository. So TortoiseSVN can serve as a graphical …

## Using Vulkan dynamic uniform buffer

Alignment Dynamic offsets can only be read correctly when aligned. The alignment usually lead to paddings between the required data structures. E.g., minUniformBufferOffsetAlignment = 0x100 // 256 a 192-byte uniform struct will be padded and takes 256 bytes. Struct array Struct arrays are usually used in storage buffers. The length of …

## Blender materials notes

Things I've noticed about Blender created materials: Generally what you set in Maya materials will reflect truthfully by ASSIMP. Therefore Maya can be used to inspect materials created by Blender, saving the work of compiling programs to print the values of ASSIMP material keys. Blender sets default values to material …

## Uniform sampling from a disk

To use a pair of canonical random variables $(\varepsilon_1, \varepsilon_2)$ to sample uniformly from the disk of radius $\mathit{ R }$, the CDF function inversion method can be applied. The first step is to calculate the normalization constant $\mathit{ C }$ of the probability density distribution function under the polar coordinate measure …

## Using Flycheck with glslangValidator for syntax checking and SPIR-V compilation from GLSL source code

In the not so long time that I have been working with Vulkan, I adopted the method of scheduling shader compilation right before starting building the program. Syntax checking therefore happened at a rather inconveniently late stage. On the other hand, I haven't successfully spotted a Visual Studio plugin that …

## Rendering dynamic cube maps for omni light shadows with Vulkan API

This post shares my process and discovery during the implementation of a dynamic variance shadow map with Gaussian pre-filter for omni lights. The first part explains three possible solutions for dynamic cube map rendering. The second part focuses on UV wrapping for the filter pass.