def test_scene(): from .lights import PointLight, SpotLight, DirectionalLight scene = Scene() for j in range(2): for x, roughness in zip(np.linspace(-3, 3, 5), np.linspace(0, 1, 5)): sphere = Mesh(transform=glm.translate(glm.mat4(1), (x, 0.5, j * 3 - 1.5)), geometry=Geometry(*imdraw.geo.sphere()), material=Material(albedo=glm.vec3(0.5), emission=(0, 0, 0), roughness=roughness, metallic=float(j))) scene.add_child(sphere) dirlight = DirectionalLight(direction=glm.vec3(1, -6, -2), color=glm.vec3(1.0), intensity=1.0, position=-glm.vec3(1, -6, -2), radius=5, near=1, far=30) spotlight = SpotLight(position=glm.vec3(-1, 0.5, -3), direction=glm.vec3(1, -0.5, 3), color=glm.vec3(0.04, 0.6, 1.0), intensity=150.0, fov=60, near=1, far=15) pointlight = PointLight(position=glm.vec3(2.5, 1.3, 2.5), color=glm.vec3(1, 0.7, 0.1), intensity=17.5, near=0.1, far=10) scene.add_child(dirlight) scene.add_child(spotlight) scene.add_child(pointlight) # cube = Mesh(transform=glm.translate(glm.mat4(1), (1.0, 0.5, 0.0)) * glm.rotate(glm.mat4(1), glm.radians(30), (0,1,0)), # geometry=Geometry(*imdraw.geo.cube()), # material=Material(albedo=(1, 0, 0), # emission=(0,0,0), # roughness=0.7, # metallic=0.0)) # scene.add_child(cube) plane = Mesh(transform=glm.translate(glm.mat4(1), (0, 0.0, 0.0)), geometry=Geometry(*imdraw.geo.plane()), material=Material(albedo=(0.5, 0.5, 0.5), emission=(0, 0, 0), roughness=0.8, metallic=0.0)) scene.add_child(plane) return scene
def from_trimesh_scene(triscene): import uuid import logging from editor.render.graphics import Scene, Mesh, Geometry, Material # read scene scene = Scene() # convert gltf for name, data in triscene.graph.transforms.nodes(data=True): # extract transform import glm transform = glm.mat4(triscene.graph[name][0]) # extract mesh hasGeometry = 'geometry' in data if hasGeometry: trigeo = triscene.geometry[data['geometry']] print("!!!!!!!!!!", name) print(transform) # geometry geometry = Geometry( positions=trigeo.vertices.astype(np.float32), indices=trigeo.faces.astype(np.uint), normals=trigeo.vertex_normals.astype(np.float32), uvs=trigeo.visual.uv.astype(np.float32)) # material print("!!!!!!!!!!", trigeo.visual.material.baseColorFactor) material = Material( albedo=glm.vec3( *trigeo.visual.material.baseColorFactor[:3] / 255), emission=trigeo.visual.material.emissiveFactor[:3] / 255, roughness=float(trigeo.visual.material.roughnessFactor), metallic=float(trigeo.visual.material.metallicFactor)) scene.add_child( Mesh(name=name, transform=glm.transpose(transform), geometry=geometry, material=material)) else: logging.warning("currently only supports mesh") # extract light return scene
def setup(self): super().setup() self.environment_texture = RenderPass.create_texture_from_data( self.environment_image) # render passes camera360 = Camera360(transform=glm.mat4(1), near=0.1, far=15) self.environment_cubemap = self.environment_pass.render( self.environment_texture, camera360) self.irradiance_cubemap = self.irradiance_pass.render( self.environment_cubemap, camera360) self.prefilter_cubemap = self.prefilter_pass.render( self.environment_cubemap, camera360) self.brdf_texture = self.brdf_pass.render() from editor.render.graphics import Geometry self.ground_plane = Mesh(geometry=Geometry(*imdraw.geo.plane()))
def render(self, input_texture): super().render() return self.texture if __name__ == "__main__": from OpenGL.GL import * import glm from editor.render.graphics.examples.viewer import Viewer from editor.render import glsl, puregl, imdraw from editor.render.graphics import Scene, Mesh, Geometry, Material, PointLight, SpotLight, DirectionalLight from pathlib import Path # Create Scene scene = Scene() mesh = Mesh(geometry=Geometry(*imdraw.geo.sphere()), transform=glm.translate(glm.mat4(1), (0, 0.5, 0)), material=Material(albedo=(0.7, 0.14, 0.14), roughness=0.3, metallic=1.0)) scene.add_child(mesh) plane = Mesh(geometry=Geometry(*imdraw.geo.plane()), material=Material(albedo=(0.9, 0.9, 0.9), roughness=0.7, metallic=0.0)) scene.add_child(plane) dirlight = DirectionalLight(direction=glm.vec3(1, -6, -2), color=glm.vec3(1.0), intensity=1.0,
import glm from editor.render.graphics import Scene, Mesh, Geometry, Material from editor.render.graphics.examples.viewer import Viewer viewer = Viewer() # assets environment_image = assets.imread('hdri/Tropical_Beach_3k.hdr').astype( np.float32) # scene scene = Scene() scene.add_child( Mesh(transform=glm.translate(glm.mat4(1), (0.0, 0.5, 0.0)), geometry=Geometry(*imdraw.geo.sphere()), material=Material(albedo=glm.vec3(0.5), emission=(0, 0, 0), roughness=glm.pow(0.5, 2), metallic=0.0))) scene.add_child(Mesh(geometry=Geometry(*imdraw.geo.plane()))) dirlight = DirectionalLight(direction=glm.vec3(1, -6, -2), color=glm.vec3(1.0), intensity=1.0, position=-glm.vec3(1, -6, -2), radius=5, near=1, far=30) scene.add_child(dirlight)
def start(self): with self.window: self.setup() while not self.window.should_close(): self.render() if __name__ == "__main__": scene = Scene() cube = Mesh(transform=glm.translate(glm.mat4(1), (-1, 0.5, 0)), material=Material(albedo=glm.vec3(0.9, 0.04, 0.04), roughness=0.6, metallic=0.0, ao=1.0), geometry=Geometry.cube()) sphere = Mesh(transform=glm.translate(glm.mat4(1), (1, 0.5, 0)), material=Material(albedo=glm.vec3(0.04, 0.7, 0.9), roughness=0.2, metallic=1.0, ao=1.0), geometry=Geometry.sphere()) plane = Mesh(transform=glm.translate(glm.mat4(1), (0, 0.0, 0)), material=Material(albedo=glm.vec3(0.5), roughness=0.3, metallic=0.0, ao=1.0), geometry=Geometry.plane())
if __name__ == "__main__": import glm from editor.render.graphics.examples.viewer import Viewer from editor.render.graphics import Scene, Mesh, Geometry, Material, PerspectiveCamera # create scene scene = Scene() mesh = Mesh(transform=glm.mat4(1), material=Material(albedo=(0, 0, 0), emission=(0, 0, 0), roughness=0.0, metallic=0.0), geometry=Geometry(*imdraw.geo.sphere())) scene.add_child(mesh) renderer = DeferredMatcapRenderer(1280, 720) camera = PerspectiveCamera(transform=glm.inverse(glm.lookAt(glm.vec3(2,2,4), glm.vec3(0,0,0), glm.vec3(0,1,0))), fovy=glm.radians(60), aspect=1280/720, near=0.1, far=30) viewer = Viewer() @viewer.event def on_draw(): beauty = renderer.render(scene, viewer.camera) imdraw.texture(beauty, (0, 0, 1280, 720))
from OpenGL.GL import * import glm from editor.render.graphics.examples.viewer import Viewer from editor.render import glsl, puregl, imdraw from editor.render.graphics import Scene, Mesh, Geometry, Material, PointLight, SpotLight, DirectionalLight from pathlib import Path # Create Scene scene = Scene() cube = Mesh(geometry=Geometry(*imdraw.geo.cube()), transform=glm.translate(glm.mat4(1), (0, 0.5, 0))) scene.add_child(cube) plane = Mesh(geometry=Geometry(*imdraw.geo.plane())) scene.add_child(plane) dirlight = DirectionalLight(direction=glm.vec3(1, -6, -2), color=glm.vec3(1.0), intensity=0.3, position=-glm.vec3(1, -6, -2), radius=5, near=1, far=30) scene.add_child(dirlight) spotlight = SpotLight(position=glm.vec3(-1, 0.5, -3), direction=glm.vec3(1, -0.5, 3), color=glm.vec3(0.04, 0.6, 1.0), intensity=15.0, fov=40, near=1, far=15) scene.add_child(spotlight)
puregl.program.set_uniform(self.program, "roughness", mesh.material.roughness) puregl.program.set_uniform(self.program, "metallic", mesh.material.metallic) # geometry mesh.geometry._draw(self.program) return self.gPosition, self.gNormal, self.gAlbedo, self.gEmission, self.gRoughness, self.gMetallic if __name__ == "__main__": import glm from editor.render.graphics.examples.viewer import Viewer from editor.render.graphics import Scene, Mesh, Geometry, Material cube = Mesh(transform=glm.translate(glm.mat4(1), (1, 0.5, 0.0)), geometry=Geometry(*imdraw.geo.cube()), material=Material(albedo=(1, 0, 0), emission=(0,0,0), roughness=0.7, metallic=0.0)) sphere = Mesh(transform=glm.translate(glm.mat4(1), (-1,0.5, 0.0)), geometry=Geometry(*imdraw.geo.sphere()), material=Material(albedo=(0.04, 0.5, 0.8), emission=(0,0,0), roughness=0.2, metallic=1.0)) plane = Mesh(transform=glm.translate(glm.mat4(1), (0, 0.0, 0.0)), geometry=Geometry(*imdraw.geo.plane()), material=Material(albedo=(0.5, 0.5, 0.5), emission=(0,0,0), roughness=0.8,