We are hiring Software Engineers in Tallinn, Estonia
Join our Tallinn Innovation Center and take the next step in your career with exciting opportunities as a Software Engineer. As part of the hiring process, we invite candidates to solve real-world challenges.
Software Engineer
Full-time
Tallinn, Estonia
Participation is confidential
- Full-time
- Tallinn, Estonia
- Participation is confidential
About the job:
Reconext is seeking a talented Software Engineer with Python expertise to join our team. In this role, you will be responsible for developing and using advanced tools to generate high-quality synthetic datasets. The focus will be on creating realistic simulations and ensuring the integrity and accuracy of these datasets for a range of applications.
Your daily adventures:
- Design and implement synthetic dataset generation pipelines using Python.
- Create simulation environments and generate data using advanced simulation tools.
- Collaborate with software engineers to ensure that datasets meet specific project requirements.
- Debug and optimize synthetic dataset generation workflows, including material rendering and object simulation.
- Develop scripts and tools to automate and enhance the efficiency of dataset generation.
We are looking for someone with:
- Expertise in Python, data pipelines, and synthetic data generation frameworks.
- Experience with NVIDIA Omniverse, Isaac Sim, Replicator Framework, or similar simulation environments.
- Proficiency in MDL materials, material rendering, UV mapping, and decal projection techniques.
- Good understanding of synthetic data workflows, including debugging and optimization for machine learning.
- Experience in simulation environments and synthetic data generation, including rendering and workflow optimization.
We offer you:
- Participation in developments with the state-of-art machine learning technologies.
- Strong support for career growth and personal development.
- Agile work in an environmentally friendly large international team.
Interested? Try solving one of the following challenges to apply.
Challenge Description:
As part of the hiring process, we invite candidates to solve a real-world technical challenge encountered in the NVIDIA Replicator Framework. The task involves improving decal projection on a mesh using MDL and NVIDIA Omniverse tools, with a specific focus on avoiding UV repetition across different parts of the same mesh.
Task:
Using the Replicator Framework, we are attempting to project a smiley face decal on an office chair mesh:
/Assets/Isaac/4.1/Isaac/Environments/Office/Props/SM_Armchair.usd
Issue: The decal is projected onto the mesh multiple times due to UV repetition, which cannot be filtered using standard methods like cutout_opacity
or diffuse_bsdf
bounds. Here’s the current approach and issue breakdown:
- Initial Decal Projection:
- The UV coordinates repeat across opposite sides of the chair, causing multiple decals to appear (Image 1, Image 2).
- Clipping Attempts:
- A spatial clipping method using UV boundaries (e.g.,
uv_clip
) does not fully resolve the issue, as the same UV coordinates are applied on both sides (Image 3, Image 4).
- A spatial clipping method using UV boundaries (e.g.,
- Directional Clipping:
- Applying directional clipping with normals (e.g.,
directional_clip
) helps eliminate decals on the back but does not resolve the repetition on the sides (Image 5).
- Applying directional clipping with normals (e.g.,
Task Objective:
- Investigate and provide a solution to automatically filter out repeated UV projections in a way that applies a single decal to a specific mesh region.
- Suggest improvements to the Replicator Framework and MDL code to handle this issue more effectively.
- Suggest alternative single decal projection technique for Isaac-sim environment.
Expected Deliverables:
- A detailed explanation of how to address UV repetition and decal filtering in NVIDIA Omniverse using MDL and Replicator.
- A working solution or code snippet that demonstrates the correct placement of a single decal on the mesh.
- Documentation or suggestions on improving the current tools and workflows to prevent similar issues.
Challenge Description:
As part of the hiring process, we invite candidates to solve a technical challenge related to generating synthetic datasets using NVIDIA Isaac Sim. Here’s a real-world problem we encountered during the process: an MDL material involving displacement mapping failed to render as expected.
Task:
Here is the MDL code used to generate materials in NVIDIA Isaac Sim, based on official NVIDIA documentation:
mdl 1.8;
import ::base::*;
import ::df::*;
import ::anno::*;
import ::state::*;
import ::math::*;
import ::tex::*;
import ::scene::*;
float fit(
float v,
float old_min, float old_max,
float new_min, float new_max)
{
float scale = (v - old_min) / (old_max - old_min);
return new_min + scale * (new_max - new_min);
}
float sinusoid(
float f,
float frequency = 1.0,
float minval = -1.0,
float maxval = 1.0)
{
float fraction = math::frac(f);
float angle = fraction * 2.0 * math::PI;
float scaled = angle * frequency;
float sine_value = math::sin(scaled);
float result = fit(sine_value, -1.0, 1.0, minval, maxval);
return result;
}
float uv_wave(float2 frequency = float2(1.0), float2 minval = float2(-1.0), float2 maxval = float2(1.0))
{
float3 p = state::texture_coordinate(0);
float u_component = sinusoid(p[0], frequency[0], minval[0], maxval[0]);
float v_component = sinusoid(p[1], frequency[1], minval[1], maxval[1]);
return u_component + v_component;
}
export material waves_as_grayscale (
uniform float2 frequency = float2(1.0),
uniform float2 gray_max = float2(0.5)
) = let {
color tint = color(uv_wave(frequency, float2(0.0), gray_max));
} in material (
surface: material_surface (
scattering: df::diffuse_reflection_bsdf(tint: tint)
)
);
export material waves_as_displacement (
uniform float2 frequency = float2(1.0),
uniform float2 distance = float2(0.1),
color tint = color(0.7)
) = let {
float displacement_distance = uv_wave(frequency, -distance, distance);
float3 displaced_normal = state::normal() * displacement_distance;
} in material (
surface: material_surface (
scattering: df::diffuse_reflection_bsdf(tint: tint)),
geometry: material_geometry(
displacement: displaced_normal)
);
Task Objective:
- Please investigate why the
waves_as_displacement
material is not functioning in Isaac Sim, while thewaves_as_grayscale
material works as intended. - Determine if the issue arises due to limitations in Isaac Sim’s renderer or if it is an issue within the MDL code itself.
- Provide a solution or a detailed explanation for the failure.
Expected Deliverables:
- A clear explanation of the problem.
- A potential fix or adjustment to the MDL code, if applicable.
- Relevant documentation or resources consulted for your solution.
Apply for this Role.
If you’re excited to tackle this challenge and be part of our innovative team, we’d love to hear from you! Please submit your solution by sharing a GitHub repository link, along with a brief introduction and your CV, to info.tallinn@reconext.com. This is your chance to showcase your skills and join our amazing team.
Benefits and perks
Growing to new heights
Personal growth is core to our mission. Engage in state-of-the-art machine learning projects. Receive strong support for career growth and personal development.
Good work life balance
Enjoy flexible working hours, a vibrant office atmosphere, cheerful staff, and perks like fresh fruits, coffee, and cola.
Wellness benefits
We offer wellness benefits that cater to your lifestyle, from your favorite gym to swimming pools, sports teams, and fitness classes - your health, your choice!
Work Hard, Play Harder
We love to celebrate our achievements with fun summer days, exciting Christmas parties, and other social get-togethers that bring our team closer and lift team spirit.