Activity

tvumcc

I did a lot of things over this 6 hour dev log:

  • Added Neumann Boundary conditions so now the boundary edges aren’t fixed to 0 (see slide 1)
  • I did some more tweaks to the UI
  • I started work on the GPU implementation of the conjugate gradient method by writing a dot product procedure in a compute shader using parallel reduction (see slide 2). What’s interesting is that summing using parallel reduction is actually better for floating point precision than just summing serially.

From here, I will continue working on the GPU implementation of conjugate gradient method. I am interested to see how much of a speed up will actually be gained when compared to the CPU implementation.

Attachment
Attachment
0
tvumcc

I spent most of my time revamping the UI. I changed things like button sizes and labels and added the option to select from preset meshes. I do still want to spend time on refining the UI to make sure users fully understand the flow of the app’s usage.
Image 1: General UI update
Image 2: Preset Meshes Selection List (UI is probably going to change)

Attachment
Attachment
0
tvumcc

I wrote some code to export the meshes that get generated to .obj and .ply files! Based on the value of the solution at each node (3D vertex), that vertex is extruded along its normal vector and given a color based on a color map (I’m using Viridis right now). The image below is an export of the Gray-Scott Reaction-Diffusion equations solved on the surface of a cube (slide 1) and a skull mesh (slide 2), both rendered in Blender.

Attachment
Attachment
0
tvumcc

Shipped this project!

Hours: 24.8
Cookies: 🍪 658
Multiplier: 26.53 cookies/hr

I finished building Quantum Echoes!

This project uses the Finite Difference Method and Leapfrog integration, implemented in compute shaders, to numerically solve the Schrodinger Equation: the equation that describes the propogation of a quantum wave function over time.

This was my first full project incorporating both Rust and Vulkan (I usually use OpenGL and C++). It was fun seeing how the two toolsets compared as I progressed through development.

tvumcc

I wrote a quick README.md and compiled releases for Linux and Windows. I also moved the velocity vector indicator to be located next to the mouse to make it easier to define particles’ directions.

0
tvumcc

I rearranged the UI side panel, added some guidance text, implemented a boundary condition dropdown, allowed particles’ initial direction of velocity to be set by the scroll wheel, and made a visibility layer that shows amplitude alongside phase resulting in RAINBOW.

0
tvumcc

I got Gaussian Wave Packets to have initial momentum, so now I can simulate Thomas Young’s double slit experiment! I am planning on sprucing up the UI so that users can define the momentum vector of each wave packet. I also want to add the option to select from a variety of preset potential energy grids and boundary conditions.

0
tvumcc

I implemented different layers so that potential energy can be defined over the simulation space. The dark blue regions in the picture below have higher potential energy and almost act as boundaries for the wave function in this case.

Attachment
0
tvumcc

I implemented Schrodinger’s Equation in a compute shader :). From here, I want to add functionality to define the potential energy function and boundaries to further manipulate the wave function.

0
tvumcc

I implemented the brush tool by sending data to the GPU using Vulkan push constants. I then wrote a simple wave equation solver in the compute shader for testing. The next step will be to actually implement the Schrodinger Equation and flesh out the side panel UI.

0
tvumcc

I spent some time just cleaning up code and getting acquainted with Egui by adding some UI elements. I also made it so that the side panel doesn’t overlap the viewport (the blue-green gradient part in the image below). Hopefully next devlog I’ll get the brush tool working.

Attachment
0
tvumcc

I spent way too long refactoring code (but still not done) and setting up Egui with Vulkano to render a side panel for future buttons and sliders.

Attachment
1

Comments

Traffic person
Traffic person 2 months ago

yooo what language is this i wanna learn

tvumcc

I got a quad rendered to the screen that displays the output of a compute shader. I am new to both Vulkan and Rust so it’s taking me a while to figure everything out. On the next devlog, I hope to get a simple brush tool working along with finding a good way to restructure all of my preexisting code.

Attachment
0