import taichi as ti import taichi_three as t3 import numpy as np import time ti.init(ti.cpu) scene = t3.Scene() model = t3.Model(t3.Mesh.from_obj(t3.readobj('assets/torus.obj', scale=0.8))) scene.add_model(model) ball = t3.Model(t3.Mesh.from_obj(t3.readobj('assets/sphere.obj', scale=0.1))) ball.material = t3.Material( t3.BlinnPhong(emission=t3.Constant(t3.RGB(1.0, 1.0, 1.0)), )) scene.add_model(ball) camera = t3.Camera() camera.ctl = t3.CameraCtl(pos=[0, 1.8, 1.8]) scene.add_camera(camera) light = t3.PointLight(pos=[0, 1, 0]) scene.add_light(light) ambient = t3.AmbientLight(0.2) scene.add_light(ambient) gui = ti.GUI('Model', camera.res) while gui.running: gui.get_event(None) gui.running = not gui.is_pressed(ti.GUI.ESCAPE) camera.from_mouse(gui) light.pos[None].y = ti.cos(time.time()) ball.L2W[None] = t3.translate(light.pos[None].value) scene.render() gui.set_image(camera.img)
model.material = t3.Material( t3.IdealRT( diffuse=t3.Constant(1.0), emission=t3.Constant(0.0), )) scene.add_model(model) light = t3.Model(t3.Mesh.from_obj(cube)) light.material = t3.Material( t3.IdealRT( diffuse=t3.Constant(0.0), emission=t3.Constant(1.0), emission_color=t3.Constant(10.0), )) scene.add_model(light) camera = t3.RTCamera(res=res) camera.ctl = t3.CameraCtl(pos=[0, 2, 8], target=[0, 2, 0]) scene.add_camera(camera) accumator = t3.Accumator(camera.res) light.L2W[None] = t3.translate(0, 3.9, 0) @ t3.scale(0.25) gui = ti.GUI('Model', camera.res) while gui.running: gui.get_event(None) gui.running = not gui.is_pressed(ti.GUI.ESCAPE) if camera.from_mouse(gui): accumator.reset() accumator.render(camera, 3) #gui.set_image(accumator.buf) gui.set_image(1 - np.exp(-1.6 * accumator.buf.to_numpy())) gui.show()
import taichi as ti import taichi_three as t3 import numpy as np ti.init(ti.cpu) scene = t3.Scene() skybox = t3.Skybox('assets/skybox.jpg') scene.add_model(skybox) scene.add_light(skybox) model = t3.Model(t3.Mesh.from_obj('assets/sphere.obj')) model.material = t3.Material(t3.IdealRT(specular=t3.Constant(1.0), )) scene.add_model(model) camera = t3.Camera(res=(600, 400)) camera.ctl = t3.CameraCtl(pos=[0, 0, 3]) scene.add_camera(camera) gui = ti.GUI('Skybox', camera.res) while gui.running: gui.get_event(None) gui.running = not gui.is_pressed(ti.GUI.ESCAPE) camera.from_mouse(gui) scene.render() gui.set_image(camera.img) gui.show()
length = L * float(d).norm() acc += disp * (disp.norm() - length) / length**2 v[i] += stiffness * acc * dt for i in ti.grouped(x): v[i].y -= gravity * dt v[i] = tl.ballBoundReflect(x[i], v[i], ball_pos, ball_radius, 6) for i in ti.grouped(x): v[i] *= ti.exp(-damping * dt) x[i] += dt * v[i] ### Rendering GUI scene = t3.Scene() camera = t3.Camera() camera.ctl = t3.CameraCtl(pos=[0, 0.8, -1.1], target=[0, 0.25, 0]) scene.add_camera(camera) mesh = t3.MeshGrid((N, N)) model = t3.Model(t3.QuadToTri(mesh)) model.material = t3.Material( t3.CookTorrance(color=t3.Texture('assets/cloth.jpg'))) scene.add_model(model) sphere = t3.Model(t3.Mesh.from_obj('assets/sphere.obj')) scene.add_model(sphere) light = t3.Light(dir=[0.4, -1.5, 1.8]) scene.add_light(light) scene.add_camera(light.make_shadow_camera())
import taichi_three as t3 import numpy as np ti.init(ti.cpu) scene = t3.Scene() model = t3.Model(t3.Mesh.from_obj(t3.readobj('assets/torus.obj', scale=0.8))) model.material = t3.Material( t3.CookTorrance( color=t3.Texture(ti.imread('assets/cloth.jpg')), roughness=t3.Texture(ti.imread('assets/pattern.jpg')), metallic=t3.Constant(0.5), )) scene.add_model(model) camera = t3.Camera() camera.ctl = t3.CameraCtl(pos=[0.8, 0, 2.5]) scene.add_camera(camera) light = t3.Light([0, -0.5, -1]) scene.add_light(light) ambient = t3.AmbientLight(0.3) scene.add_light(ambient) gui = ti.GUI('PBR demo', camera.res) while gui.running: gui.get_event(None) gui.running = not gui.is_pressed(ti.GUI.ESCAPE) camera.from_mouse(gui) model.L2W[None] = t3.rotateX(angle=t3.get_time()) scene.render() gui.set_image(camera.img) gui.show()
import taichi as ti import taichi_three as t3 import numpy as np ti.init(ti.cpu) scene = t3.Scene() obj1 = t3.readobj('assets/torus.obj', scale=0.8) obj2 = t3.readobj('assets/cylinder.obj', scale=0.6) model1 = t3.Model(t3.Mesh.from_obj(obj1)) model2 = t3.Model(t3.Mesh.from_obj(obj2)) scene.add_model(model1) scene.add_model(model2) camera = t3.Camera() camera.ctl = t3.CameraCtl(pos=[1, 1, -1]) scene.add_camera(camera) light = t3.Light([0.4, -1.5, 1.8]) scene.add_shadow_camera(light.make_shadow_camera()) scene.add_light(light) gui = ti.GUI('Model', camera.res) gui2 = ti.GUI('Depth map', light.shadow.res) gui2.fps_limit = None while gui.running: gui.get_event(None) gui.running = not gui.is_pressed(ti.GUI.ESCAPE) camera.from_mouse(gui) model2.L2W[None] = t3.translate(0, 0.16 * ti.sin(gui.frame * 0.03), 0) scene.render_shadows() scene.render() gui.set_image(camera.img)
import taichi as ti import taichi_three as t3 ti.init(ti.cpu) scene = t3.Scene() mesh = t3.MeshGrid((128, 128)) model = t3.Model(t3.QuadToTri(mesh)) scene.add_model(model) camera = t3.Camera() camera.ctl = t3.CameraCtl(pos=[1.1, 1.6, 1.6]) scene.add_camera(camera) light = t3.Light([0.4, -1.5, -0.8], 0.9) scene.add_light(light) ambient = t3.AmbientLight(0.1) scene.add_light(ambient) @ti.func def Z(xy, t): return 0.1 * ti.sin(10 * xy.norm() - t3.tau * t) @ti.kernel def deform_mesh(t: float): for i, j in mesh.pos: mesh.pos[i, j].y = Z(mesh.pos[i, j].xZ, t) gui = ti.GUI('Meshgrid', camera.res) while gui.running: gui.get_event(None) gui.running = not gui.is_pressed(ti.GUI.ESCAPE)
import taichi as ti import taichi_three as t3 import numpy as np ti.init(ti.cpu) scene = t3.Scene() obj = t3.readobj('assets/logo.obj', scale=0.8) t3.objbothface(obj) logo1 = t3.Model(t3.Mesh.from_obj(obj)) logo2 = t3.Model(t3.Mesh.from_obj(obj)) scene.add_model(logo1) scene.add_model(logo2) camera = t3.Camera() camera.ctl = t3.CameraCtl(pos=[-1, 1, 1]) scene.add_camera(camera) light = t3.Light([0.4, -1.5, 0.8]) scene.add_light(light) gui = ti.GUI('Taichi THREE', camera.res) while gui.running: gui.get_event(None) gui.running = not gui.is_pressed(ti.GUI.ESCAPE) camera.from_mouse(gui) t = t3.get_time() logo1.L2W[None] = t3.rotateY(t) logo2.L2W[None] = t3.rotateX(t3.pi - t) @ t3.rotateZ(t3.pi / 2) scene.render() gui.set_image(camera.img) gui.show()
import taichi as ti import taichi_three as t3 import numpy as np ti.init(ti.cpu) scene = t3.Scene() model = t3.Model(t3.Mesh.from_obj(t3.readobj('assets/monkey.obj', scale=0.8))) scene.add_model(model) camera = t3.Camera(res=(256, 256)) camera.ctl = t3.CameraCtl(pos=[0, 0, 2.5], target=[0, 0, 0], up=[0, 1, 0]) scene.add_camera(camera) camera2 = t3.Camera() camera2.ctl = t3.CameraCtl(pos=[0, 1, -2], target=[0, 1, 0], up=[0, 1, 0]) scene.add_camera(camera2) light = t3.Light([0.4, -1.5, -0.8]) scene.add_light(light) camera.type = camera.ORTHO camera2.set_intrinsic(256, 256, 256, 256) gui = ti.GUI('Model', camera.res) gui2 = ti.GUI('Model2', camera2.res) while gui.running and gui2.running: gui.get_event(None) gui2.get_event(None) gui.running = not gui.is_pressed(ti.GUI.ESCAPE) gui2.running = not gui2.is_pressed(ti.GUI.ESCAPE)