Пример #1
0
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
Пример #3
0
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
Пример #4
0
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
Пример #5
0
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
Пример #6
0
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
Пример #7
0
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
Пример #8
0
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
Пример #9
0
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))
Пример #10
0
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))
Пример #11
0
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
Пример #12
0
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
Пример #13
0
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)
Пример #14
0
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)
Пример #15
0
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
Пример #16
0

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)
Пример #17
0
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())

Пример #18
0
        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)
Пример #19
0
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
Пример #20
0
    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:
Пример #21
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):
Пример #22
0
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
Пример #23
0
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()
Пример #24
0
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)
Пример #26
0
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
Пример #27
0
    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,
Пример #28
0
        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)
Пример #29
0
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: