# Try to run on GPU ti.init(arch=ti.cuda, device_memory_GB=3.0) gui = ti.GUI("Taichi Elements", res=512, background_color=0x112F41) mpm = MPMSolver(res=(64, 64, 64), size=1) triangles = np.fromfile('suzanne.npy', dtype=np.float32) triangles = np.reshape(triangles, (len(triangles) // 9, 9)) * 0.306 + 0.501 mpm.add_mesh(triangles=triangles, material=MPMSolver.material_elastic, color=0xFFFF00) mpm.set_gravity((0, -20, 0)) for frame in range(1500): mpm.step(4e-3) particles = mpm.particle_info() np_x = particles['position'] / 1.0 # simple camera transform screen_x = ((np_x[:, 0] + np_x[:, 2]) / 2**0.5) - 0.2 screen_y = (np_x[:, 1]) screen_pos = np.stack([screen_x, screen_y], axis=-1) gui.circles(screen_pos, radius=1.1, color=particles['color']) gui.show(f'{frame:06d}.png' if write_to_disk else None)
gui = ti.GUI("Taichi Elements", res=512, background_color=0x112F41) mpm = MPMSolver(res=(64, 64, 64), size=10) mpm.add_ellipsoid(center=[2, 4, 3], radius=1, material=MPMSolver.material_snow, velocity=[0, -10, 0]) mpm.add_cube(lower_corner=[2, 6, 3], cube_size=[1, 1, 3], material=MPMSolver.material_elastic) mpm.add_cube(lower_corner=[2, 8, 3], cube_size=[1, 1, 3], material=MPMSolver.material_sand) mpm.set_gravity((0, -50, 0)) for frame in range(1500): mpm.step(4e-3) colors = np.array([0x068587, 0xED553B, 0xEEEEF0, 0xFFFF00], dtype=np.uint32) particles = mpm.particle_info() np_x = particles['position'] / 10.0 # simple camera transform screen_x = ((np_x[:, 0] + np_x[:, 2]) / 2**0.5) - 0.2 screen_y = (np_x[:, 1]) screen_pos = np.stack([screen_x, screen_y], axis=-1) gui.circles(screen_pos, radius=1.5, color=colors[particles['material']])
surface=mpm.surface_slip, friction=0.5) point[d] = -b normal[d] = 1 mpm.add_surface_collider(point=point, normal=normal, surface=mpm.surface_slip, friction=0.5) scale = (0.06, 0.06, 0.06) quantized = load_mesh('bunny_low.ply', scale=scale, offset=(0.5, 0.6, 0.5)) simulation = load_mesh('bunny_low.ply', scale=scale, offset=(0.5, 0.6, 0.5)) mpm.set_gravity((0, -25, 0)) print(f'Per particle space: {mpm.particle.cell_size_bytes} B') mpm.add_cube(lower_corner=(-bound, 0, -bound / 4 * thickness), cube_size=(bound * 0.3, 0.35, bound / 2 * thickness), material=mpm.material_water, color=0x99aaff) print(f'Water particles: {mpm.n_particles[None] / 1e6:.4f} M') def visualize(particles, frame, output_dir=None): np_x = particles['position'] / 1.0 screen_x = np_x[:, 0] * 0.25 + 0.5 screen_y = np_x[:, 1] * 0.25 + 0.5
import taichi as ti import numpy as np import utils from engine.mpm_solver import MPMSolver write_to_disk = False ti.init(arch=ti.cuda) # Try to run on GPU gui = ti.GUI("Taichi MLS-MPM-99", res=512, background_color=0x112F41) mpm = MPMSolver(res=(256, 256)) mpm.set_gravity([0, 0]) mpm.add_ellipsoid(center=[0.25, 0.45], radius=0.07, velocity=[1, 0], color=0xAAAAFF, material=MPMSolver.material_snow) mpm.add_ellipsoid(center=[0.75, 0.52], radius=0.07, velocity=[-1, 0], color=0xFFAAAA, material=MPMSolver.material_snow) for frame in range(500): mpm.step(8e-3) particles = mpm.particle_info() gui.circles(particles['position'], radius=1.5, color=particles['color']) gui.show(f'{frame:06d}.png' if write_to_disk else None)