• Geometries

Mesh OBJ introduction

By: SKY ENGINE AI
scroll down ↓to find out moremesh-obj_1_resourcesTutorial

MeshObj Introduction

In this case you will get familiar with obj-mesh concept in SkyRenderer. You will learn how to define,
modify and manipulate a mesh loaded from OBJ. For additional information about intersectors see:
INTRO_Intersectors tutorial.

Agenda:

  • Mesh from OBJ basic usage
  • Mesh manipulation

Scene setup

Let's use custom scene composer to set up the scene.

from skyrenderer.cases.utils import GeometriesSceneComposer scene_composer = GeometriesSceneComposer(antialiasing_level=2048) scene_composer.setup_scene(1400, 900) print(scene_composer.renderer_context.layout())
2025-02-04 10:30:41,319 | skyrenderer.scene.renderer_context | INFO: Root paths: - root path: /dli/skyenvironment/skyrenderer/skyrenderer - assets path: /dli/mount/assets - config path: /dli/skyenvironment/skyrenderer/skyrenderer/config - gpu sources path: /dli/skyenvironment/skyrenderer/skyrenderer/optix_sources/sources - cache path: /dli/mount/cache - ptx cache path: compiled_ptx/ptx - ocio path: ocio_configs/aces_1.2/config.ocio top_node |-- camera_CAM_NUL +-- geometry_GEO

Mesh from OBJ basic usage

Let's start with creating MeshIntersector and its parameter set objects, then we configure geometry for
object by invoking set_geometry_definition method (see: INTRO_Geometries).
Additionally, we have to define buffer provider. For ABC files it is done automatically.

from skyrenderer.basic_types.procedure import MeshIntersector from skyrenderer.scene.scene_layout.layout_elements_definitions import GeometryDefinition from skyrenderer.basic_types.provider import ObjBufferProvider mesh_intersector = MeshIntersector(scene_composer.renderer_context) scene_composer.renderer_context.set_geometry_definition( "geometry_GEO", GeometryDefinition( buffer_provider=ObjBufferProvider(scene_composer.renderer_context, "shaderball"), intersector=mesh_intersector, ), ) scene_composer.setup_geometry_material() scene_composer.visualize()
mesh-obj_1_resourcesTutorial
2025-02-04 10:30:41,760 | skyrenderer.utils.time_measurement | INFO: Setup time: 396 ms 2025-02-04 10:30:45,132 | skyrenderer.utils.time_measurement | INFO: Context update time: 3.37 seconds 2025-02-04 10:30:48,782 | skyrenderer.utils.time_measurement | INFO: Key points calculation time: 0 ms 2025-02-04 10:30:48,783 | skyrenderer.utils.time_measurement | INFO: Render time: 3.65 seconds

Mesh manipulation

As for each geometry, you can access its node to perform basic manipulation (see: TRANSFORMATIONS_Transform
and INTRO_SceneLayout tutorials). In this section we will move and rotate our shaderball.

scene_composer.renderer_context.get_node("geometry_GEO").rotate_degrees(rot_angles=[20, 0, 0]) scene_composer.renderer_context.get_node("geometry_GEO").apply_translation(translation_vector=[0, -1, 0]) scene_composer.visualize(scene_composer.get_render(setup=False))
mesh-obj_2_resourcesTutorial
2025-02-04 10:30:48,960 | skyrenderer.utils.time_measurement | INFO: Context update time: 6 ms 2025-02-04 10:30:51,565 | skyrenderer.utils.time_measurement | INFO: Key points calculation time: 0 ms 2025-02-04 10:30:51,568 | skyrenderer.utils.time_measurement | INFO: Render time: 2.61 seconds

Summary

In this section you have learnt:

  • MeshIntersector can be used to load geometries from .obj files.
  • Loaded mesh can be manipulated via modification of its node's transformation.