def engine_draw(engine, region, v3d, rv3d): active_camera_name = engine.viewport_camera.Name.value projection = rv3d.perspective_matrix * rv3d.view_matrix.inverted() width = 2 * v3d.clip_start / projection[0][0] height = 2 * v3d.clip_start / projection[1][1] if v3d.region_3d.view_perspective == 'CAMERA': active_camera_name = v3d.camera.name camera = g_cached_objects[active_camera_name] camera.Resolution.value = av.Vec2ui(int(region.width), int(region.height)) screen = camera.Children.value[0] screen.Width.value = width screen.Height.value = height screen.Transform.value = av.make_trans_mat( #0.0, 0.0, -camera.NearClip.value) 0.0, 0.0, -v3d.clip_start) else: camera_from_view(engine.viewport_camera, region, v3d) engine.viewport_screen.Width.value = width engine.viewport_screen.Height.value = height engine.viewport_screen.Transform.value = av.make_trans_mat( 0.0, 0.0, -v3d.clip_start) # old_res = engine.viewport_camera.Resolution.value # engine.viewport_camera.Resolution.value = av.Vec2ui(int(region.width), # int(region.height)) g_viewer.frame(engine.session['uuid'], active_camera_name)
def create_floor(): floor_geometry = loader.create_geometry_from_file( "floor_geometry", "data/objects/plane.obj", av.LoaderFlags.NORMALIZE_SCALE | av.LoaderFlags.NORMALIZE_POSITION) floor_geometry.Transform.value = av.make_trans_mat( 0, 1.0, 0) * av.make_scale_mat(10, 10.0, 10) floor_geometry.Material.value.set_uniform("Metalness", 0.0) floor_geometry.Material.value.set_uniform( "RoughnessMap", "data/textures/oakfloor2_roughness.png") floor_geometry.Material.value.set_uniform( "ColorMap", "data/textures/oakfloor2_basecolor.png") floor_geometry.Material.value.set_uniform( "NormalMap", "data/textures/oakfloor2_normal.png") av.create_box_shape("box", av.Vec3(10, 1, 10)) floor_collision_shape = av.nodes.CollisionShapeNode( Name="floor_shape", ShapeName="box", Children=[floor_geometry]) floor_body = av.nodes.RigidBodyNode(Name="floor_body", Mass=0, Friction=0.5, Restitution=0.7, Children=[floor_collision_shape]) return floor_body
ShadowFarClippingInSunDirection=100, Brightness=3, Transform=avango.gua.make_rot_mat(50, 0, 1, 0) * avango.gua.make_rot_mat(-40.0, 1.0, 0.0, 0.0)) size = av.Vec2ui(1024, 768) window = av.nodes.GlfwWindow(Size=size, LeftResolution=size) av.register_window("window", window) cam = av.nodes.CameraNode(LeftScreenPath="/screen", SceneGraph="scenegraph", Resolution=size, OutputWindowName="window", Transform=av.make_trans_mat(0.0, 1.0, 3.0)) res_pass = av.nodes.ResolvePassDescription() res_pass.EnableSSAO.value = True res_pass.SSAOIntensity.value = 4.0 res_pass.SSAOFalloff.value = 10.0 res_pass.SSAORadius.value = 7.0 res_pass.EnvironmentLightingColor.value = av.Color(0.02, 0.02, 0.02) res_pass.ToneMappingMode.value = av.ToneMappingMode.UNCHARTED res_pass.Exposure.value = 1.0 res_pass.BackgroundColor.value = av.Color(0.45, 0.5, 0.6) anti_aliasing = av.nodes.SSAAPassDescription() pipeline_description = av.nodes.PipelineDescription(Passes=[
def engine_update(engine, data, scene): # if hasattr(engine, "session"): # print("update " + engine.session['uuid']) # b_space_view_3d = context.space_data # rv3d = b_space_view_3d.region_3d # self.camera.NearClip.value = b_space_view_3d.clip_start # self.camera.FarClip.value = b_space_view_3d.clip_end # xs = matrix_to_list(rv3d.view_matrix) # print(xs) # #self.camera.Transform.value = av.transpose( # av.from_list(xs)) # self.camera.Transform.value = av.transpose( # av.inverse(av.from_list(xs))) for o in scene.objects: if o.name not in g_cached_objects: if o.type == 'LAMP': bl_lamp = bpy.data.lamps[o.data.name] light = av.nodes.LightNode( Type=from_blender_lamp_type(o.data.type), Name=o.name, Color=from_blender_color(bl_lamp.color), Brightness=bl_lamp.energy, Transform=from_blender_matrix4(o.matrix_world) ) g_cached_objects[o.name] = light g_graph.Root.value.Children.value.append(light) elif o.type == 'MESH': # parent = 'null' # if o.parent: # parent = o.parent.name # matrix = o.matrix_world filename = o.name + '.obj' path = '/tmp/' if not os.path.exists(path): os.makedirs(path) bpy.ops.object.select_all(action='DESELECT') # scene.objects.active = o o.select = True world = o.matrix_world.copy() Matrix.identity(o.matrix_world) bpy.ops.export_scene.obj( filepath=path+filename, check_existing=False, use_selection=True, use_normals=True, use_triangles=True, use_uvs=True, use_materials=True, axis_forward='Y', axis_up='Z', path_mode='AUTO' ) o.matrix_world = world o.select = False mesh = g_loader.create_geometry_from_file( o.name, path+filename, av.LoaderFlags.NORMALIZE_SCALE) for slot in o.material_slots: # material = o.material_slots['Material'].material material = o.material_slots[0].material amaterial = material.avango col = slot.material.diffuse_color mesh.Material.value.set_uniform("Color", av.Vec4(col.r, col.g, col.b, 1.0)) if slot.material.avango.use_color_texture: mesh.Material.value.set_uniform("ColorMap", texture_filepath(slot.material.avango.color_texture)) mesh.Material.value.set_uniform("Roughness", amaterial.roughness) if slot.material.avango.use_roughness_texture: mesh.Material.value.set_uniform("RoughnessMap", texture_filepath(slot.material.avango.roughness_texture)) mesh.Material.value.set_uniform("Metalness", float(amaterial.metalness)) if slot.material.avango.use_metalness_texture: mesh.Material.value.set_uniform("MetalnessMap", texture_filepath(slot.material.avango.metalness_texture)) mesh.Material.value.set_uniform("Emissivity", amaterial.emissivity) mesh.Material.value.set_uniform("Opacity", amaterial.opacity) g_cached_objects[o.name] = mesh g_graph.Root.value.Children.value.append(mesh) elif o.type == 'CAMERA': bl_camera = bpy.data.cameras[o.data.name] acamera = bl_camera.avango screen = av.nodes.ScreenNode( Name="screen", Width=2, Height=1.5, Transform=av.make_trans_mat(0.0, 0.0, -2.5), ) #res_pass = av.nodes.ResolvePassDescription() #res_pass.EnableSSAO.value = True #res_pass.SSAOIntensity.value = 4.0 #res_pass.SSAOFalloff.value = 10.0 #res_pass.SSAORadius.value = 7.0 #res_pass.EnvironmentLightingColor.value = ( # av.Color(0.1, 0.1, 0.1)) #res_pass.ToneMappingMode.value = av.ToneMappingMode.UNCHARTED #res_pass.Exposure.value = 1.0 #res_pass.BackgroundColor.value = av.Color(1.0, 0.0, 0.0) pc = PassCreator() passes = pc.create(o.data.avango.pipeline_passes) pipeline_description = av.nodes.PipelineDescription( Passes=passes, EnableABuffer=acamera.enable_abuffer, ) camera = av.nodes.CameraNode( Name=o.name, LeftScreenPath="/"+o.name+"/screen", SceneGraph="scenegraph", Resolution=av.Vec2ui( acamera.resolution[0], acamera.resolution[1]), OutputWindowName="blender_window", Children=[screen], Transform=from_blender_matrix4(o.matrix_world), NearClip=bl_camera.clip_start, FarClip=bl_camera.clip_end, Mode=0 if o.data.type == 'PERSP' else 1, PipelineDescription=pipeline_description, ) g_cached_objects[o.name] = camera g_graph.Root.value.Children.value.append(camera)
ShadowFarClippingInSunDirection=100, Brightness=3, Transform=avango.gua.make_rot_mat(50, 0, 1, 0) * avango.gua.make_rot_mat( -40.0, 1.0, 0.0, 0.0)) size = av.Vec2ui(1024, 768) window = av.nodes.GlfwWindow(Size=size, LeftResolution=size) av.register_window("window", window) cam = av.nodes.CameraNode(LeftScreenPath="/screen", SceneGraph="scenegraph", Resolution=size, OutputWindowName="window", Transform=av.make_trans_mat(0.0, 1.0, 3.0)) res_pass = av.nodes.ResolvePassDescription() res_pass.EnableSSAO.value = True res_pass.SSAOIntensity.value = 4.0 res_pass.SSAOFalloff.value = 10.0 res_pass.SSAORadius.value = 7.0 res_pass.EnvironmentLightingColor.value = av.Color(0.02, 0.02, 0.02) res_pass.ToneMappingMode.value = av.ToneMappingMode.UNCHARTED res_pass.Exposure.value = 1.0 res_pass.BackgroundColor.value = av.Color(0.45, 0.5, 0.6) anti_aliasing = av.nodes.SSAAPassDescription() pipeline_description = av.nodes.PipelineDescription(Passes=[
def start(): graph = av.nodes.SceneGraph(Name="scene") loader = av.nodes.TriMeshLoader() fps_size = av.Vec2(170, 55) fps = av.gui.nodes.GuiResourceNode() fps.TextureName.value = "fps" fps.URL.value = "asset://gua/data/html/fps.html" fps.Size.value = fps_size fps_quad = av.nodes.TexturedScreenSpaceQuadNode(Name="fps_quad", Texture="fps", Width=int(fps_size.x), Height=int(fps_size.y), Anchor=av.Vec2(1.0, 1.0)) graph.Root.value.Children.value.append(fps_quad) fallback_mat = av.create_material(av.MaterialCapabilities.COLOR_VALUE | av.MaterialCapabilities.ROUGHNESS_VALUE) fallback_mat.set_uniform("Roughness", 0.6) for x in range(0, CUBE_COUNT_X): for y in range(0, CUBE_COUNT_Y): for z in range(0, CUBE_COUNT_Z): new_cube = loader.create_geometry_from_file( "cube" + str(x) + str(y) + str(z), "data/objects/monkey.obj", fallback_mat, av.LoaderFlags.DEFAULTS) new_cube.Transform.value = av.make_trans_mat( x * 2, y * 2, z * 2) * av.make_scale_mat(0.3, 0.3, 0.3) graph.Root.value.Children.value.append(new_cube) new_cube.ShadowMode.value = 1 sun_light = av.nodes.LightNode(Name="sun_light", Type=av.LightType.SUN, Color=av.Color(1.0, 1.0, 0.7), EnableShadows=True, ShadowMapSize=1024, ShadowOffset=0.0005, ShadowCascadedSplits=[0.1, 4, 7, 20], ShadowMaxDistance=30, ShadowNearClippingInSunDirection=100, ShadowFarClippingInSunDirection=100, Brightness=4) graph.Root.value.Children.value.append(sun_light) floor = loader.create_geometry_from_file("floor", "data/objects/plane.obj", fallback_mat, av.LoaderFlags.DEFAULTS) floor.Transform.value = av.make_scale_mat( 200, 1, 200) * av.make_trans_mat(-0.5, -0.2, -0.5) floor.ShadowMode.value = 0 graph.Root.value.Children.value.append(floor) width = 1920 height = int(width * 9.0 / 16.0) size = av.Vec2ui(width, height) screen = av.nodes.ScreenNode(Name="screen", Width=4.8, Height=2.7, Transform=av.make_trans_mat(0.0, 0.0, -2.5)) camera = av.nodes.CameraNode(Name="cam", LeftScreenPath="/cam/screen", RightScreenPath="/cam/screen", SceneGraph="scene", Resolution=size, OutputWindowName="window", EyeDistance=0.2, EnableStereo=False, Children=[screen], Transform=av.make_trans_mat(0.0, 0.0, 7.0)) res_pass = av.nodes.ResolvePassDescription() res_pass.EnableSSAO.value = True res_pass.SSAOIntensity.value = 3.0 res_pass.SSAOFalloff.value = 20.0 res_pass.SSAORadius.value = 10.0 res_pass.EnvironmentLightingTexture.value = "day_skymap" res_pass.AlternativeEnvironmentLightingTexture.value = "night_skymap" res_pass.EnvironmentLightingMode.value = av.EnvironmentLightingMode.CUBEMAP res_pass.ToneMappingMode.value = av.ToneMappingMode.UNCHARTED res_pass.Exposure.value = 1.0 res_pass.VignetteColor.value = av.Vec4(0, 0, 0, 0.7) res_pass.VignetteCoverage.value = 0.0 res_pass.EnableFog.value = True res_pass.FogStart.value = 30 res_pass.FogEnd.value = 100 res_pass.BackgroundMode.value = av.BackgroundMode.CUBEMAP_TEXTURE res_pass.BackgroundTexture.value = "day_skymap" res_pass.AlternativeBackgroundTexture.value = "night_skymap" sky_pass = av.nodes.SkyMapPassDescription(OutputTextureName="day_skymap") av.create_texture_cube( "night_skymap", "data/textures/stars/purple-nebula/purple-nebula_right1.jpg", "data/textures/stars/purple-nebula/purple-nebula_left2.jpg", "data/textures/stars/purple-nebula/purple-nebula_bottom4.jpg", "data/textures/stars/purple-nebula/purple-nebula_top3.jpg", "data/textures/stars/purple-nebula/purple-nebula_front5.jpg", "data/textures/stars/purple-nebula/purple-nebula_back6.jpg") pipeline_description = av.nodes.PipelineDescription(Passes=[ sky_pass, av.nodes.TriMeshPassDescription( ), av.nodes.LightVisibilityPassDescription( ), res_pass, av.nodes.TexturedScreenSpaceQuadPassDescription() ]) camera.PipelineDescription.value = pipeline_description graph.Root.value.Children.value.append(camera) window = av.nodes.Window(Size=size, Title="shadows", LeftResolution=size, RightResolution=size, EnableVsync=False, StereoMode=av.StereoMode.MONO) av.register_window("window", window) navigator = examples_common.navigator.Navigator() navigator.StartLocation.value = camera.Transform.value.get_translate() navigator.OutTransform.connect_from(camera.Transform) navigator.RotationSpeed.value = 0.2 navigator.MotionSpeed.value = 0.04 camera.Transform.connect_from(navigator.OutTransform) viewer = av.nodes.Viewer() viewer.SceneGraphs.value = [graph] viewer.Windows.value = [window] timer = avango.nodes.TimeSensor() fps_updater = FPSUpdater(FPSResource=fps, Window=window, Viewer=viewer) fps_updater.TimeIn.connect_from(timer.Time) sun_updater = SunUpdater(TimeScale=3500) sun_updater.TimeIn.connect_from(timer.Time) sun_light.Transform.connect_from(sun_updater.MatrixOut) sun_light.Color.connect_from(sun_updater.SunColorOut) sky_pass.LightDirection.connect_from(sun_updater.DirectionOut) sky_pass.GroundColor.connect_from(sun_updater.GroundColorOut) res_pass.BackgroundTextureBlendFactor.connect_from( sun_updater.BlendFactorOut) res_pass.EnvironmentLightingTextureBlendFactor.connect_from( sun_updater.BlendFactorOut) guaVE = GuaVE() guaVE.start(locals(), globals()) viewer.run()
def engine_update(engine, data, scene): # if hasattr(engine, "session"): # print("update " + engine.session['uuid']) # b_space_view_3d = context.space_data # rv3d = b_space_view_3d.region_3d # self.camera.NearClip.value = b_space_view_3d.clip_start # self.camera.FarClip.value = b_space_view_3d.clip_end # xs = matrix_to_list(rv3d.view_matrix) # print(xs) # #self.camera.Transform.value = av.transpose( # av.from_list(xs)) # self.camera.Transform.value = av.transpose( # av.inverse(av.from_list(xs))) for o in scene.objects: if o.name not in g_cached_objects: if o.type == 'LAMP': bl_lamp = bpy.data.lamps[o.data.name] light = av.nodes.LightNode( Type=from_blender_lamp_type(o.data.type), Name=o.name, Color=from_blender_color(bl_lamp.color), Brightness=bl_lamp.energy, Transform=from_blender_matrix4(o.matrix_world)) g_cached_objects[o.name] = light g_graph.Root.value.Children.value.append(light) elif o.type == 'MESH': # parent = 'null' # if o.parent: # parent = o.parent.name # matrix = o.matrix_world filename = o.name + '.obj' path = '/tmp/' if not os.path.exists(path): os.makedirs(path) bpy.ops.object.select_all(action='DESELECT') # scene.objects.active = o o.select = True world = o.matrix_world.copy() Matrix.identity(o.matrix_world) bpy.ops.export_scene.obj(filepath=path + filename, check_existing=False, use_selection=True, use_normals=True, use_triangles=True, use_uvs=True, use_materials=True, axis_forward='Y', axis_up='Z', path_mode='AUTO') o.matrix_world = world o.select = False mesh = g_loader.create_geometry_from_file( o.name, path + filename, av.LoaderFlags.NORMALIZE_SCALE) for slot in o.material_slots: # material = o.material_slots['Material'].material material = o.material_slots[0].material amaterial = material.avango col = slot.material.diffuse_color mesh.Material.value.set_uniform( "Color", av.Vec4(col.r, col.g, col.b, 1.0)) if slot.material.avango.use_color_texture: mesh.Material.value.set_uniform( "ColorMap", texture_filepath( slot.material.avango.color_texture)) mesh.Material.value.set_uniform("Roughness", amaterial.roughness) if slot.material.avango.use_roughness_texture: mesh.Material.value.set_uniform( "RoughnessMap", texture_filepath( slot.material.avango.roughness_texture)) mesh.Material.value.set_uniform("Metalness", float(amaterial.metalness)) if slot.material.avango.use_metalness_texture: mesh.Material.value.set_uniform( "MetalnessMap", texture_filepath( slot.material.avango.metalness_texture)) mesh.Material.value.set_uniform("Emissivity", amaterial.emissivity) mesh.Material.value.set_uniform("Opacity", amaterial.opacity) g_cached_objects[o.name] = mesh g_graph.Root.value.Children.value.append(mesh) elif o.type == 'CAMERA': bl_camera = bpy.data.cameras[o.data.name] acamera = bl_camera.avango screen = av.nodes.ScreenNode( Name="screen", Width=2, Height=1.5, Transform=av.make_trans_mat(0.0, 0.0, -2.5), ) #res_pass = av.nodes.ResolvePassDescription() #res_pass.EnableSSAO.value = True #res_pass.SSAOIntensity.value = 4.0 #res_pass.SSAOFalloff.value = 10.0 #res_pass.SSAORadius.value = 7.0 #res_pass.EnvironmentLightingColor.value = ( # av.Color(0.1, 0.1, 0.1)) #res_pass.ToneMappingMode.value = av.ToneMappingMode.UNCHARTED #res_pass.Exposure.value = 1.0 #res_pass.BackgroundColor.value = av.Color(1.0, 0.0, 0.0) pc = PassCreator() passes = pc.create(o.data.avango.pipeline_passes) pipeline_description = av.nodes.PipelineDescription( Passes=passes, EnableABuffer=acamera.enable_abuffer, ) camera = av.nodes.CameraNode( Name=o.name, LeftScreenPath="/" + o.name + "/screen", SceneGraph="scenegraph", Resolution=av.Vec2ui(acamera.resolution[0], acamera.resolution[1]), OutputWindowName="blender_window", Children=[screen], Transform=from_blender_matrix4(o.matrix_world), NearClip=bl_camera.clip_start, FarClip=bl_camera.clip_end, Mode=0 if o.data.type == 'PERSP' else 1, PipelineDescription=pipeline_description, ) g_cached_objects[o.name] = camera g_graph.Root.value.Children.value.append(camera)