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 levelset_generator(t): levelset = mpm.create_levelset() levelset.add_cuboid((0.01, 0.01, 0.01), (0.99, 0.99, 0.99), True) 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) levelset.add_sphere( Vector(px + t * vx, 0.04 * (i / 3 + 1), py + t * vy), 0.02, False) return levelset
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 if __name__ == '__main__': renderer = Renderer(output_dir='veach_mis', overwrite=True) eye_position = Vector(0.9, -0.3) renderer.initialize(preset='pt', scene=create_mis_scene(eye_position)) renderer.set_post_processor(LDRDisplay(exposure=4, bloom_radius=0.00)) renderer.render(800)
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
def scale(self, scale): if isinstance(scale, tuple): self.transform = self.transform.scale(Vector(scale)) else: self.transform = self.transform.scale_s(scale)
def rotate(self, rot): self.transform = self.transform.rotate_euler(Vector(rot))
def translate(self, trans): self.transform = self.transform.translate(Vector(trans))