def create_snow_scene(frame): downsample = 1 width, height = 960 / downsample, 540 / downsample camera = Camera('thinlens', width=width, height=height, fov=60, origin=(0, 1, 4), look_at=(0.0, -0.7, -0.0), up=(0, 1, 0), aperture=0.05) scene = Scene() with scene: scene.set_camera(camera) rep = Texture.create_taichi_wallpaper( 10, rotation=0, scale=0.95) * Texture('const', value=(0.7, 0.5, 0.5)) material = SurfaceMaterial('pbr', diffuse_map=rep) scene.add_mesh( Mesh('holder', material=material, translate=(0, -1, -6), scale=2)) mesh = Mesh('plane', SurfaceMaterial('emissive', color=(1, 1, 1)), translate=(1.0, 1.0, -1), scale=(0.1, 0.1, 0.1), rotation=(180, 0, 0)) scene.add_mesh(mesh) # Change this line to your particle output path pls. fn = r'../snow-sim/particles%05d.bin' % frame mesh = create_mpm_snow_block(fn) scene.add_mesh(mesh) return scene
def create_sand_scene(frame, d, t): downsample = output_downsample width, height = 540 / downsample, 540 / downsample camera = Camera('thinlens', width=width, height=height, fov=75, origin=(0, 1, 4), look_at=(0.0, -0.9, 0.0), up=(0, 1, 0), aperture=0.01) scene = Scene() with scene: scene.set_camera(camera) rep = Texture.create_taichi_wallpaper(10, rotation=0, scale=0.95) * Texture('const', value=(0.7, 0.5, 0.5)) material = SurfaceMaterial('pbr', diffuse_map=rep) scene.add_mesh(Mesh('holder', material=material, translate=(0, -1, -6), scale=2)) mesh = Mesh('plane', SurfaceMaterial('emissive', color=(1, 1, 1)), translate=(1.0, 1.0, -1), scale=(0.1, 0.1, 0.1), rotation=(180, 0, 0)) scene.add_mesh(mesh) material = tc.SurfaceMaterial('microfacet', color=(1, 1, 0.5), roughness=(0.1, 0, 0, 0), f0=1) sphere = tc.Mesh('sphere', material, translate=((t+0.05) * 0.5 - 0.35, -0.60, 0), scale=0.1, rotation=(0, 0, 0)) scene.add_mesh(sphere) # Change this line to your particle output path pls. # fn = r'../sand-sim/particles%05d.bin' % frame fn = d + r'/particles%05d.bin' % frame mesh = create_mpm_sand_block(fn) scene.add_mesh(mesh) return scene
def create_scene(): downsample = 1 width, height = 512 // downsample, 512 // downsample camera = Camera('pinhole', res=(width, height), fov=120, origin=(0, -5, 10), look_at=(0, 0, 0), up=(0, 1, 0)) scene = Scene() with scene: scene.set_camera(camera) tex = Texture.create_taichi_wallpaper(20, rotation=0, scale=0.95) * 0.9 material = SurfaceMaterial('microfacet', color=(1.0, 1, 0.8), roughness_map=tex.id, f0=1) for i in range(-7, 5): scene.add_mesh( Mesh('sphere', material=material, translate=(i, -i * 1.6, -math.sin(i * 0.1)), scale=0.7)) envmap_texture = Texture('sky', height=0.5, direction=0.3) envmap_texture.show(res=(500, 500), post_processor=LDRDisplay()) envmap = EnvironmentMap('base', texture=envmap_texture.id, res=(1024, 1024)) scene.set_environment_map(envmap) return scene
def create_scene(): downsample = 2 width, height = 1280 / downsample, 720 / downsample camera = Camera('pinhole', width=width, height=height, fov=30, origin=(0, 0, 10), look_at=(0, 0, 0), up=(0, 1, 0)) scene = Scene() with scene: scene.set_camera(camera) tex = Texture.create_taichi_wallpaper(20, rotation=0, scale=0.95) * 0.9 mesh = tc.Mesh('plane', tc.SurfaceMaterial('emissive', color=(6000, 6000, 10000)), translate=(30, 20, 30), scale=3, rotation=(0, 0, 180)) scene.add_mesh(mesh) with tc.transform_scope(rotation=(0, 0, 0), scale=1): material = SurfaceMaterial('diffuse', color=(0.3, 0.2, 0.3), roughness_map=tex.id, f0=1) scene.add_mesh(Mesh('cube', material=material, translate=(0, -1, 0), scale=(2, 0.02, 1))) for i in range(7): material = SurfaceMaterial('diffuse', color=hsv_to_rgb(i * 0.2, 0.5, 1.0), roughness_map=tex.id, f0=1) scene.add_mesh( Mesh('cube', material=material, translate=(2, 0.3 * (i - 3), 0.2), scale=(0.01, 0.10, 0.5))) material = SurfaceMaterial('diffuse', color=(0.3, 0.3, 0.3), roughness_map=tex.id, f0=1) scene.add_mesh(Mesh('cube', material=material, translate=(0, 0, -1), scale=(1.9, 0.9, 0.03))) with tc.transform_scope(rotation=(0, 30, 0), translate=(0, 0, 0)): scene.add_mesh(create_volumetric_block()) envmap_texture = Texture('spherical_gradient', inside_val=(10, 10, 10, 10), outside_val=(1, 1, 1, 0), angle=10, sharpness=20) envmap = EnvironmentMap('base', texture=envmap_texture.id, res=(1024, 1024)) scene.set_environment_map(envmap) return scene
def create_scene(frame, d, t): downsample = output_downsample width, height = 1280 / downsample, 720 / downsample camera = Camera('pinhole', width=width, height=height, fov=35, origin=(4, 1.5, 5), look_at=(0, -0.5, -1), up=(0, 1, 0)) scene = Scene() with scene: scene.set_camera(camera) mesh = tc.Mesh('plane', tc.SurfaceMaterial('emissive', color=(30000, 40000, 60000)), translate=(-30, 20, 30), scale=3, rotation=(0, 0, 180)) scene.add_mesh(mesh) with tc.transform_scope(rotation=(0, 0, 0), scale=1): material = SurfaceMaterial('diffuse', color=(0.24, 0.18, 0.12), f0=1) scene.add_mesh(Mesh('cube', material=material, translate=(0, -1, 0), scale=(4, 0.02, 4))) tex = (1 - Texture('taichi', scale=0.92, rotation=0).zoom(zoom=(0.1, 0.2, 0.1), center=(0.02, 0.96, 0), repeat=False)) * (-0.9, -0.5, -0.0) + 1 # material = SurfaceMaterial('diffuse', color_map=tex.id) material = SurfaceMaterial('diffuse', color=(0.24, 0.18, 0.12), f0=1) scene.add_mesh(Mesh('plane', material=material, translate=(0, 0, -1), scale=(4, 1, 4), rotation=(90, 0, 0))) envmap_texture = Texture('spherical_gradient', inside_val=(10, 10, 10, 10), outside_val=(1, 1, 1, 0), angle=10, sharpness=20) envmap = EnvironmentMap('base', texture=envmap_texture.id, res=(1024, 1024)) scene.set_environment_map(envmap) fn = d + r'/particles%05d.bin' % frame mesh = create_mpm_sand_block(fn) scene.add_mesh(mesh) return scene
def create_taichi_scene(eye_position): downsample = 2 width, height = 960 / downsample, 540 / downsample camera = Camera('pinhole', width=width, height=height, fov=70, origin=(0.5, 0.5, 3), look_at=(0.5, 0.5, 0.5), up=(0, 1, 0)) scene = Scene() with scene: scene.set_camera(camera) rep = Texture.create_taichi_wallpaper( 10, rotation=0, scale=0.95) * Texture('const', value=(0.5, 0.5, 1.0)) material = SurfaceMaterial('pbr', diffuse_map=rep) scene.add_mesh( Mesh('holder', material=material, translate=(0, -1, -7), scale=2)) mesh = Mesh('plane', SurfaceMaterial('emissive', color=(1, 1, 1)), translate=(0.5, 1.3, 0), scale=(0.1, 1.0, 0.1), rotation=(180, 0, 0)) scene.add_mesh(mesh) material = SurfaceMaterial('plain_interface') #vol = VolumeMaterial("homogeneous", scattering=10, absorption=0) tex = 1 - Texture('taichi', scale=0.95) vol = VolumeMaterial('voxel', scattering=100, absorption=0, resolution=256, tex=tex) material.set_internal_material(vol) mesh = Mesh('cube', material=material, translate=(0.5, 0.5, 0.5), scale=(0.5, 0.5, 0.2), rotation=(0, 0, 0)) scene.add_mesh(mesh) #envmap = EnvironmentMap('base', filepath='d:/assets/schoenbrunn-front_hd.hdr') #scene.set_environment_map(envmap) return scene
def create_scene(frame, d, t): downsample = output_downsample width, height = 1280 / downsample, 720 / downsample camera = Camera('pinhole', width=width, height=height, fov=25, origin=(0, 0, 6), look_at=(0, 0, 0), up=(0, 1, 0)) # camera = Camera('pinhole', width=width, height=height, fov=30, # origin=(2, 4, 4), look_at=(0, 0, 0), up=(0, 1, 0)) scene = Scene() with scene: scene.set_camera(camera) with tc.transform_scope(rotation=(20, 0, 0), translate=(0, 0.75, 0), scale=1): mesh = tc.Mesh('plane', tc.SurfaceMaterial('emissive', color=(30000, 40000, 60000)), translate=(-20, 30, 0), scale=3, rotation=(0, 0, 180)) scene.add_mesh(mesh) mesh = tc.Mesh('plane', tc.SurfaceMaterial('emissive', color=(6000, 8000, 12000)), translate=(20, 30, 40), scale=3, rotation=(0, 0, -180)) scene.add_mesh(mesh) material = SurfaceMaterial('diffuse', color=(0.24, 0.18, 0.12), f0=1) scene.add_mesh( Mesh('cube', material=material, translate=(0, -1.01, 0), scale=(1, 0.02, 0.6))) fn = d + r'/particles%05d.bin' % frame mesh = create_mpm_snow_block(fn) scene.add_mesh(mesh) envmap_texture = Texture('spherical_gradient', inside_val=(10, 10, 10, 10), outside_val=(1, 1, 1, 0), angle=10, sharpness=20) envmap = EnvironmentMap('base', texture=envmap_texture.id, res=(1024, 1024)) scene.set_environment_map(envmap) return scene
def create_scene(): downsample = 1 width, height = 960 / downsample, 540 / downsample camera = Camera( 'thinlens', res=(width, height), fov=55, origin=(30, 40, 50), look_at=(0, 0, 0), up=(0, 1, 0), focus=(0, 3, 0), aperture=0.1) scene = Scene() with scene: scene.set_camera(camera) # Plane scene.add_mesh( Mesh( 'plane', SurfaceMaterial('pbr', diffuse=(1, 1, 1.0)), translate=(0, 0, 0), scale=100, rotation=(0, 0, 0))) for i in range(8): menger = 1 - Texture("menger", limit=i) scene.add_mesh( Mesh( 'plane', SurfaceMaterial( 'transparent', mask=menger, nested=SurfaceMaterial( 'diffuse', color=colorsys.hls_to_rgb(i * 0.1 + 0.3, 0.3, 1.0))), translate=(i * 7 - 28, 3.5, -5), scale=3, rotation=(90, 0, 0))) # Lights scene.add_mesh( Mesh( 'plane', SurfaceMaterial('emissive', color=(1, 1, 1)), translate=(0, 100, -200), scale=5, rotation=(180, 0, 0))) scene.add_mesh( Mesh( 'plane', SurfaceMaterial('emissive', color=(1, 1, 1)), translate=(0, 100, 200), scale=3, rotation=(180, 0, 0))) return scene
def create_mpm_sand_block(fn): particles = tc_core.RenderParticles() assert particles.read(fn) downsample = grid_downsample tex = Texture.from_render_particles((255 / downsample, 255 / downsample, 255 / downsample), particles) * 5 # tex = Texture('sphere', center=(0.5, 0.5, 0.5), radius=0.5) with tc.transform_scope(scale=2): return tc.create_volumetric_block(tex, res=(128, 128, 128))
def create_mpm_snow_block(fn): particles = tc_core.RenderParticles() assert particles.read(fn) downsample = grid_downsample tex = Texture.from_render_particles( (511 / downsample, 127 / downsample, 255 / downsample), particles) * 5 # tex = Texture('sphere', center=(0.5, 0.5, 0.5), radius=0.5) with tc.transform_scope(translate=(0, -0.75, 0), scale=(2, 0.5, 1)): return tc.create_volumetric_block(tex, res=(256, 256, 256))
def create_mis_scene(eye_position): num_light_sources = 4 num_plates = 5 light_position = Vector(-0.5, 0) downsample = 1 width, height = 960 / downsample, 540 / downsample camera = Camera('pinhole', width=width, height=height, fov=70, origin=(0, eye_position.y, eye_position.x), look_at=(0, -0.3, 0), up=(0, 1, 0)) scene = Scene() with scene: scene.set_camera(camera) rep = Texture.create_taichi_wallpaper(20, rotation=0, scale=0.95) material = SurfaceMaterial('pbr', diffuse_map=rep.id) scene.add_mesh( Mesh('holder', material=material, translate=(0, -1, -7), scale=2)) for i in range(num_light_sources): radius = 0.002 * 3**i e = 0.01 / radius**2 material = SurfaceMaterial('emissive', color=(e, e, e)) mesh = Mesh('sphere', material, translate=(0.2 * (i - (num_light_sources - 1) * 0.5), light_position.y, light_position.x), scale=radius) scene.add_mesh(mesh) for i in range(num_plates): fraction = -math.pi / 2 - 1.0 * i / num_plates * 0.9 z = math.cos(fraction) * 1 y = math.sin(fraction) * 1 + 0.5 board_position = Vector(z, y) vec1 = eye_position - board_position vec2 = light_position - board_position vec1 *= 1.0 / math.hypot(vec1.x, vec1.y) vec2 *= 1.0 / math.hypot(vec2.x, vec2.y) half_vector = vec1 + vec2 angle = math.degrees(math.atan2(half_vector.y, half_vector.x)) mesh = Mesh('plane', SurfaceMaterial('pbr', diffuse=(0.1, 0.1, 0.1), specular=(1, 1, 1), glossiness=100 * 3**i), translate=(0, board_position.y, board_position.x), rotation=(90 - angle, 0, 0), scale=(0.4, 0.7, 0.05)) scene.add_mesh(mesh) # envmap = EnvironmentMap('base', filepath='d:/assets/schoenbrunn-front_hd.hdr') # scene.set_environment_map(envmap) return scene
def create_scene(): downsample = 1 res = 960 // downsample, 540 // downsample camera = Camera( 'pinhole', res=res, fov=20, origin=(0, 0, 30), look_at=(0, 0, 0), up=(0, 1, 0)) scene = Scene() with scene: scene.set_camera(camera) texture = (Texture('perlin') + 1).fract() mesh = Mesh( 'plane', SurfaceMaterial('diffuse', color_map=texture), translate=(0, 0, -0.05), scale=10, rotation=(90, 0, 0)) scene.add_mesh(mesh) mesh = Mesh( 'plane', SurfaceMaterial('diffuse', color=(0.1, 0.08, 0.08)), translate=(-10, 0, 0), scale=10, rotation=(0, 0, 90)) scene.add_mesh(mesh) mesh = Mesh( 'plane', SurfaceMaterial('emissive', color=(1, 1, 1)), translate=(10, 0, 1), scale=0.3, rotation=(0, 0, 90)) scene.add_mesh(mesh) for i in range(30): s = 4 scale = random.random() * 0.03 + 0.1 rgb = colorsys.hls_to_rgb(random.random(), 0.6, 0.8) x, y = random.random() - 0.5, random.random() - 0.5 mesh = Mesh( 'sphere', SurfaceMaterial('pbr', diffuse=rgb, specular=rgb, glossiness=4), translate=(x * s, y * s, 0), scale=scale) scene.add_mesh(mesh) return scene
def create_mpm_snow_block(fn): particles = tc_core.RenderParticles() assert particles.read(fn) tex = Texture.from_render_particles((grid_x, grid_y, grid_z), particles) * 5 mesh_transform = tc_core.Matrix4(1.0).scale_s(0.3).translate(Vector(0.5, 0.5, 0.5)) transform = tc_core.Matrix4(1.0).scale_s(2).scale(Vector(2.0, 0.5, 1.0)).translate(Vector(-2, -0.99, -1)) vol = VolumeMaterial('sdf_voxel', scattering=5, absorption=0, tex=tex, resolution=(grid_x, grid_y, grid_z), transform_ptr=transform.get_ptr_string()) material = SurfaceMaterial('plain_interface') material.set_internal_material(vol) return Mesh('cube', material=material, transform=transform * mesh_transform)
def create_volumetric_block(): fn = 'particles.bin' # or your file name... import os print os.getcwd() particles = tc.core.RenderParticles() assert particles.read(fn) # pls. use the same resolution as in the .bin file... res = (128, 128, 64) # 5 is the density tex = Texture.from_render_particles(res, particles) * 15 with tc.transform_scope(scale=2): return tc.create_volumetric_block(tex, res=res)
def create_scene(frame, d, t): downsample = output_downsample width, height = 1280 / downsample, 720 / downsample camera = Camera('pinhole', width=width, height=height, fov=30, origin=(0, 0, 8), look_at=(0, 0, 0), up=(0, 1, 0)) scene = Scene() with scene: scene.set_camera(camera) mesh = tc.Mesh('plane', tc.SurfaceMaterial('emissive', color=(30000, 40000, 60000)), translate=(-20, 20, -15), scale=3, rotation=(0, 0, 180)) scene.add_mesh(mesh) with tc.transform_scope(rotation=(10, 0, 0), translate=(0, 0, 0), scale=1): with tc.transform_scope(rotation=(0, -40, 0), translate=(0, 0.5, 0), scale=1): fn = d + r'/particles%05d.bin' % frame mesh = create_mpm_sand_block(fn) scene.add_mesh(mesh) envmap_texture = Texture('spherical_gradient', inside_val=(10, 10, 10, 10), outside_val=(1, 1, 1, 0), angle=10, sharpness=20) envmap = EnvironmentMap('base', texture=envmap_texture.id, res=(1024, 1024)) scene.set_environment_map(envmap) return scene
if __name__ == '__main__': downsample = grid_downsample resolution = (255 / downsample, 255 / downsample, 255 / downsample) mpm = MPM3(resolution=resolution, gravity=(0, -10, 0), base_delta_t=0.0005, num_threads=8) # tex = Texture('ring', outer=0.15) * 4 # tex = Texture('bound', tex=tex, axis=2, bounds=(0.0, 0.4), outside_val=(0, 0, 0)) # tex = Texture('rotate', tex=tex, rotate_axis=0, rotate_times=1) tex = Texture('mesh', resolution=resolution, filename=tc.get_asset_path('meshes/suzanne.obj')) * 8 tex = tex.zoom((0.5, 0.5, 0.5), (0.5, 0.5, 0.5), False) # tex = Texture('rotate', tex=tex, rotate_axis=1, rotate_times=1) mpm.add_particles(density_tex=tex.id, initial_velocity=(0, 0, 0)) # Dynamic Levelset def levelset_generator(t): levelset = mpm.create_levelset() levelset.add_sphere(Vector(0.325 + 0.25 * (t + 0.05), 0.2, 0.5), 0, False) # levelset.add_sphere(Vector(0.5, 0.2, 0.5), t, False) return levelset mpm.set_levelset(levelset_generator, True)
import math from taichi.misc.util import Vector from taichi.visual import * from taichi.visual.post_process import * from taichi.visual.texture import Texture import time if __name__ == '__main__': while True: for i in range(100): envmap_texture = Texture('sky', height=0.005 * i + 0.5, direction=0.01 * i) envmap_texture.show(res=(512, 512), post_processor=LDRDisplay())
fn = d + r'/particles%05d.bin' % frame mesh = create_mpm_snow_block(fn) scene.add_mesh(mesh) return scene def render_snow_frame(frame, d): renderer = Renderer(output_dir='volumetric', overwrite=True, frame=frame) renderer.initialize(preset='pt', scene=create_snow_scene(frame, d), sampler='prand') renderer.set_post_processor(LDRDisplay(exposure=0.6, bloom_radius=0.0, bloom_threshold=1.0)) renderer.render(render_epoch) if __name__ == '__main__': downsample = grid_downsample resolution = (grid_x, grid_y, grid_z) # tex = Texture('ring', outer=0.038) * 8 tex = Texture('rect', bounds=(1, 1, 1)) * 8 tex = Texture('bound', tex=tex, axis=2, bounds=(0.0, 0.5), outside_val=(0, 0, 0)) tex = Texture('rotate', tex=tex, rotate_axis=0, rotate_times=1) mpm = MPM3(resolution=resolution, gravity=(0, -10, 0), initial_velocity=(0, 0, 0), delta_t=0.0002, num_threads=8, density_tex=tex.id) for i in range(step_number): print 'process(%d/%d)' % (i, step_number) # mpm.step(0.01) d = mpm.get_directory() d = r'/Users/squarefk/repos/taichi_outputs/task-2017-03-30-13-51-25-r09595' if i % 20 == 0: render_snow_frame(i, d)
def create_scene(): downsample = 1 width, height = 1280 / downsample, 720 / downsample camera = Camera('pinhole', width=width, height=height, fov=30, origin=(4, 0, 15), look_at=(0, 0, 0), up=(0, 1, 0)) scene = Scene() with scene: scene.set_camera(camera) emission = 100000 mesh = tc.Mesh('plane', tc.SurfaceMaterial('emissive', color=(emission, emission, emission)), translate=(300, 200, 300), scale=30, rotation=(-90, 0, 0)) scene.add_mesh(mesh) material = SurfaceMaterial('diffuse', color=(0.5, 1, 1), roughness=1.0, f0=1) scene.add_mesh( Mesh('cube', material=material, translate=(0, 0, -2.0), scale=(1, 1, 1))) material = SurfaceMaterial('diffuse', color=(1, 0.5, 1), roughness=1.0, f0=1) scene.add_mesh( Mesh('cube', material=material, translate=(0, -2.0, 0), scale=(1, 1, 1))) material = SurfaceMaterial('diffuse', color=(1, 1, 0.5), roughness=1.0, f0=1) scene.add_mesh( Mesh('cube', material=material, translate=(-2.0, 0, 0), scale=(1, 1, 1))) envmap_texture = Texture('spherical_gradient', inside_val=(10, 10, 10, 10), outside_val=(1, 1, 1, 0), angle=10, sharpness=20) envmap = EnvironmentMap('base', texture=envmap_texture.id, res=(1024, 1024)) scene.set_environment_map(envmap) vol_tex = Texture('sphere', center=(0.5, 0.5, 0.5), radius=0.5) for i in range(3): with tc.transform_scope(translate=(i, 0, 0)): with tc.transform_scope(scale=1**i): mesh = tc.create_volumetric_block(vol_tex, res=(32, 32, 32)) scene.add_mesh(mesh) return scene
renderer.initialize(preset='pt', scene=create_sand_scene(frame, d, t), sampler='prand') renderer.set_post_processor(LDRDisplay(exposure=0.6, bloom_radius=0.0, bloom_threshold=1.0)) renderer.render(render_epoch) if __name__ == '__main__': downsample = grid_downsample resolution = (255 / downsample, 255 / downsample, 255 / downsample) mpm = MPM3(resolution=resolution, gravity=(0, -20, 0), base_delta_t=0.001, num_threads=1, use_mpi=use_mpi) levelset = mpm.create_levelset() levelset.add_plane(0, 1, 0, -1) levelset.add_plane(1, 1, 0, -1.7) levelset.global_increase(1) tex = Texture('levelset3d', levelset=levelset, bounds=(0, 0.04 / levelset.get_delta_x())) * 6 tex = Texture('bound', tex=tex, axis=2, bounds=(0.33, 0.66), outside_val=(0, 0, 0)) tex = Texture('bound', tex=tex, axis=0, bounds=(0.05, 1.0), outside_val=(0, 0, 0)) mpm.add_particles(density_tex=tex.id, initial_velocity=(0, 0, 0), compression=1.09) tex_ball = Texture('sphere', center=(0.12, 0.40, 0.5), radius=0.06) * 10 mpm.add_particles(density_tex=tex_ball.id, initial_velocity=(0, 0, 0), compression=0.95) levelset.set_friction(1) mpm.set_levelset(levelset, False) t = 0 for i in range(step_number): if mpm.get_mpi_world_rank() == 0: print 'process(%d/%d)' % (i, step_number) mpm.step(0.03) if mpm.get_mpi_world_rank() == 0:
renderer = Renderer(output_dir='volumetric', overwrite=True, frame=frame) renderer.initialize(preset='pt', scene=create_scene(frame, d, t), sampler='prand', max_path_length=3) renderer.set_post_processor(LDRDisplay(exposure=1, bloom_radius=0.00, bloom_threshold=1.0)) renderer.render(render_epoch) if __name__ == '__main__': downsample = grid_downsample resolution = (255 / downsample, 255 / downsample, 255 / downsample) mpm = MPM3(resolution=resolution, gravity=(0, -10, 0), async=True, num_threads=8, strength_dt_mul=4, affine_damping=1000) # real theta_c = 2.5e-2f, theta_s = 7.5e-3f; tex_ball1 = Texture('sphere', center=(0.41, 0.23, 0.5), radius=0.08) * 1 tex_ball1 = tex_ball1 * (Texture('perlin') * 6 + 2) mpm.add_particles(density_tex=tex_ball1.id, initial_velocity=(200, 5, 0), compression=1.0, mu_0=3e5, lambda_0=3e5) tex_ball2 = Texture('sphere', center=(0.59, 0.2, 0.5), radius=0.08) * 1 tex_ball2 = tex_ball2 * (Texture('perlin') * 6 + 2) mpm.add_particles(density_tex=tex_ball2.id, initial_velocity=(-200, 5, 0), compression=1.0, mu_0=3e5, lambda_0=3e5) levelset = mpm.create_levelset() levelset.add_cuboid((0.01, 0.01, 0.01), (0.99, 0.99, 0.99), True) mpm.set_levelset(levelset) t = 0 for i in range(step_number):
def create_scene(frame, d, t): downsample = output_downsample width, height = 1280 / downsample, 720 / downsample camera = Camera('pinhole', width=width, height=height, fov=25, origin=(0, 0, 8), look_at=(0, 0, 0), up=(0, 1, 0)) # camera = Camera('pinhole', width=width, height=height, fov=30, # origin=(2, 4, 4), look_at=(0, 0, 0), up=(0, 1, 0)) scene = Scene() with scene: scene.set_camera(camera) with tc.transform_scope(rotation=(20, 0, 0), translate=(0, 0, 0), scale=1): with tc.transform_scope(rotation=(0, -20, 0), translate=(0, 0.7, 0), scale=1): mesh = tc.Mesh('plane', tc.SurfaceMaterial('emissive', color=(30000, 40000, 60000)), translate=(-20, 30, 0), scale=3, rotation=(0, 0, 180)) scene.add_mesh(mesh) mesh = tc.Mesh('plane', tc.SurfaceMaterial('emissive', color=(6000, 8000, 12000)), translate=(20, 30, 40), scale=3, rotation=(0, 0, -180)) scene.add_mesh(mesh) material = SurfaceMaterial('diffuse', color=(0.24, 0.18, 0.12), f0=1) scene.add_mesh( Mesh('cube', material=material, translate=(0, -1, 0), scale=(1.25, 0.02, 0.8))) material = tc.SurfaceMaterial('microfacet', color=(1, 1, 0.5), roughness=(0.1, 0, 0, 0), f0=1) # levelset.add_sphere(Vector(0.325 + 0.25 * t, 0.2, 0.5), 0.05, False) for i in range(0, 24, 3): px = 0.5 + 0.2 * math.sin(45.0 * i / 180 * math.pi) py = 0.5 + 0.2 * math.cos(45.0 * i / 180 * math.pi) vx = -bullet_speed * math.sin(45.0 * i / 180 * math.pi) vy = -bullet_speed * math.cos(45.0 * i / 180 * math.pi) sphere = tc.Mesh('sphere', material, translate=((px + t * vx) * 2 - 1, 0.08 * (i / 3 + 1) - 1, (py + t * vy) * 2 - 1), scale=0.04, rotation=(0, 0, 0)) scene.add_mesh(sphere) fn = d + r'/particles%05d.bin' % frame mesh = create_mpm_sand_block(fn) scene.add_mesh(mesh) envmap_texture = Texture('spherical_gradient', inside_val=(10, 10, 10, 10), outside_val=(1, 1, 1, 0), angle=10, sharpness=20) envmap = EnvironmentMap('base', texture=envmap_texture.id, res=(1024, 1024)) scene.set_environment_map(envmap) return scene
import taichi as tc from taichi.dynamics.mpm import MPM3 from taichi.visual.texture import Texture if __name__ == '__main__': downsample = 8 resolution = (511 / downsample, 127 / downsample, 255 / downsample) tex = Texture('image', filename=tc.get_asset_path('textures/taichi_words.png')) * 8 tex = Texture('bound', tex=tex, axis=2, bounds=(0.475, 0.525), outside_val=(0, 0, 0)) mpm = MPM3(resolution=resolution, gravity=(0, -10, 0), delta_t=0.001, num_threads=8) mpm.add_particles(type="dp", density_tex=tex.id, initial_velocity=(0, 0, 0)) for i in range(1000): mpm.step(0.05) mpm.make_video()
import math from taichi.misc.util import Vector from taichi.visual import * from taichi.visual.post_process import * from taichi.visual.texture import Texture import time if __name__ == '__main__': while True: for i in range(100): envmap_texture = Texture('spherical_gradient', inside_val=(1, 1, 10, 1), outside_val=(0.5, 0.5, 0.5, 1), angle=3, sharpness=5) envmap_texture.show(res=(512, 512), post_processor=LDRDisplay())
def render_sand_frame(frame, d): renderer = Renderer(output_dir='volumetric', overwrite=True, frame=frame) renderer.initialize(preset='pt', scene=create_sand_scene(frame, d), sampler='prand') renderer.set_post_processor( LDRDisplay(exposure=0.6, bloom_radius=0.0, bloom_threshold=1.0)) renderer.render(render_epoch) if __name__ == '__main__': downsample = grid_downsample resolution = (432 / downsample, 144 / downsample, 432 / downsample) tex = Texture('ring', outer=0.15) * 2 tex = Texture('bound', tex=tex, axis=2, bounds=(0.0, 0.8), outside_val=(0, 0, 0)) tex = Texture('rotate', tex=tex, rotate_axis=0, rotate_times=1) mpm = MPM3(resolution=resolution, gravity=(0, -100, 0), initial_velocity=(0, 0, 0), delta_t=0.0005, num_threads=8, density_tex=tex.id) for i in range(step_number): print 'process(%d/%d)' % (i, step_number) mpm.step(0.01)
if __name__ == '__main__': downsample = grid_downsample resolution = (255 / downsample, 255 / downsample, 255 / downsample) mpm = MPM3(resolution=resolution, gravity=(0, -100, 0), delta_t=0.001, num_threads=8) levelset = mpm.create_levelset() levelset.add_plane(0, 1, 0, -1) levelset.add_plane(1, 1, 0, -1.7) levelset.global_increase(1) tex = Texture('levelset3d', levelset=levelset, bounds=(0, 0.05 / levelset.get_delta_x())) * 6 tex = Texture('bound', tex=tex, axis=2, bounds=(0.45, 0.55), outside_val=(0, 0, 0)) tex = Texture('bound', tex=tex, axis=0, bounds=(0.03, 0.3), outside_val=(0, 0, 0)) mpm.add_particles(density_tex=tex.id, initial_velocity=(0, 0, 0), compression=1.10) tex_ball = Texture('sphere', center=(0.1, 0.42, 0.5), radius=0.08) * 8
levelset = mpm.create_levelset() height_ = 0.0 ground_ = 30.0 half_ = (180.0 - ground_) / 2 norm_ = 90.0 - ground_ cross_x = 0.75 + height_ / math.tan(half_ / 180 * math.pi) cross_y = 0 + height_ cos_ = math.cos(norm_ / 180 * math.pi) sin_ = math.sin(norm_ / 180 * math.pi) levelset.add_plane(0, 1, 0, -cross_y) levelset.add_plane(cos_, sin_, 0, -cross_x * cos_ - cross_y * sin_) levelset.global_increase(height_) tex = Texture('levelset3d', levelset=levelset, bounds=(0, 0.02 / levelset.get_delta_x())) * 4 tex = Texture('bound', tex=tex, axis=2, bounds=(0.22, 0.78), outside_val=(0, 0, 0)) tex = Texture('bound', tex=tex, axis=0, bounds=(0.05, 1.0), outside_val=(0, 0, 0)) mpm.add_particles(density_tex=tex.id, initial_velocity=(0, 0, 0), compression=1.15, lambda_0=1000,
LDRDisplay(exposure=1, bloom_radius=0.00, bloom_threshold=1.0)) renderer.render(render_epoch) if __name__ == '__main__': downsample = grid_downsample resolution = (255 / downsample, 255 / downsample, 255 / downsample) mpm = MPM3(resolution=resolution, gravity=(0, -25, 0), async=True, num_threads=8, strength_dt_mul=4) tex = Texture('mesh', resolution=resolution, filename=tc.get_asset_path('meshes/armadillo.obj')) * 8 tex = tex.zoom((0.4, 0.4, 0.4), (0.5, 0.5, 0.5), False) # tex = Texture('rotate', tex=tex, rotate_axis=0, rotate_times=1) tex = Texture('rotate', tex=tex, rotate_axis=1, rotate_times=2) # tex = Texture('rotate', tex=tex, rotate_axis=2, rotate_times=1) mpm.add_particles(density_tex=tex.id, initial_velocity=(0, 0, -50)) levelset = mpm.create_levelset() levelset.add_cuboid((0.01, 0.01, 0.01), (0.99, 0.99, 0.99), True) mpm.set_levelset(levelset) t = 0 for i in range(step_number): print 'process(%d/%d)' % (i, step_number) mpm.step(0.01)
def render_frame(frame, d, t): renderer = Renderer(output_dir='volumetric', overwrite=True, frame=frame) renderer.initialize(preset='pt', scene=create_scene(frame, d, t), sampler='prand', max_path_length=3) renderer.set_post_processor(LDRDisplay(exposure=1, bloom_radius=0.00, bloom_threshold=1.0)) renderer.render(render_epoch) if __name__ == '__main__': downsample = grid_downsample resolution = (255 / downsample, 255 / downsample, 255 / downsample) mpm = MPM3(resolution=resolution, gravity=(0, -50, 0), async=False, base_delta_t=0.0002, num_threads=8, strength_dt_mul=4) tex = Texture('mesh', resolution=resolution, filename=tc.get_asset_path('meshes/bunny.obj')) tex = tex.zoom((0.4, 0.4, 0.4), (0.5, 0.5, 0.5), False) tex = Texture('rotate', tex=tex, rotate_axis=0, rotate_times=1) tex = tex * (Texture('perlin').zoom((10, 10, 10)) * 6 + 2) mpm.add_particles(density_tex=tex.id, initial_velocity=(0, 0, -50)) levelset = mpm.create_levelset() levelset.add_cuboid((0.01, 0.01, 0.01), (0.99, 0.99, 0.99), True) mpm.set_levelset(levelset) t = 0 for i in range(step_number): print 'process(%d/%d)' % (i, step_number) mpm.step(0.01) t += 0.01 if gi_render: