Documentation

​
​

Development

User Acquisition

Monetization

Industry

Asset Transformer SDK

2026.1

Supported
​

User Manual

Python API

C# API

Changelog

Discussions

Asset Transformer SDK

2026.1

Supported
​

​
​
Get started
  • System requirements
  • Licensing
  • Setup
  • Migrate from Scenario Processor
Framework
  • Framework
  • Preferences
Input/output files
  • Supported formats
  • Import files
  • Export files
  • Export textures
  • CAD vs Mesh
Scene
  • Product structure
  • Occurrence
  • Component
  • Material
  • Image
Algorithms
  • CAD
  • Healing
  • Optimization
    • Decimate to quality
    • Decimate to quality (edge collapse)
    • Decimate to target polygon count
    • Remesh surfacic holes
    • Remove occluded geometries (standard)
    • Remove occluded geometries (advanced)
    • Remove holes
    • Compute Visual Footprint
    • Filleting on meshes
    • Loop Subdivision on Triangular Meshes
  • Combine and bake
  • Reconstruction
  • UVs
Viewer
  • Viewer
Pixyz UI
  • Setup
  • Overview
  • Create a custom UI
Guidelines
  • Data preparation
  • Process point clouds
Debug and diagnose
  • Log files
  • Debug best practices
Other
  • Samples
  • Glossary
  1. Asset Transformer SDK (ex Pixyz)

Visual Footprint

Use this feature to compute the visual footprint of 3D assets, providing a 2D representation of their spatial extent for efficient rendering and analysis in the Pixyz SDK.
Read time 3 minutes
Last updated 9 months ago

API function: algo.getVisualComparisonFootprint
This function is used in order to compare the visual difference between two sets of occurrences. The result is in millimeters, in the world space.
Visual Comparison
For instance, here we have an original model and a decimated version of it. We may want to create a HLOD based on the visual error between these two models. To do so, we use the algo.getVisualComparisonFootprint function.
Viewpoints
It takes two sets of occurrences that will be visually compared. It will create
nb_viewpoints
viewpoints around the scene from where a visual difference footprint will be computed based on an image size controlled by the parameter
resolution
.
Comparison steps
On the image above, we see one of these viewpoints, where
A
is the original model and
B
is a decimated version of it. The "visual difference" is then computed and shown in
C
. Finally, we compute the maximum error between the two images based on this "visual difference", as shown in
D
. The maximum error of all viewpoints is returned.
We can use the result to create a HLOD with the right visual error.
Zooming in HLODs
See
createHLODChainUsingVisualFootprint.py
for an example usage:
import pxzdef create_hlod_chain(files: list[str], resolution: int = 512, nb_viewpoints: int = 256) -> int: """Creates a chain of hlods given an list of files to import. Parameters ---------- files : list[str] The files to import. The first in the list is the "original" file. The others are low-quality version of it. The order of the LODs doesn't matter, they will be ordered in the HLOD chain based on their resemblance with the original model. resolution: int Size of the viewer to compute the footprint. nb_viewpoints: int Numbers of points generated around the bounding sphere of the scene to compute the footprints. Returns ------- int The occurrence representing the root of the created hlods chain. """ print(f"Creating a HLOD chain of {len(files)} files:") print(" - Importing files... ", end="") occurrences = [] for filename in files: occurrences.append(pxz.io.importScene(filename)) print("Done") print(" - Computing footprints... ", end="") footprints = [0] for occ in occurrences[1:]: # Visual comparison between the first occurrence, which is the real model, and the current lod of the loop footprints.append(pxz.algo.getVisualComparisonFootprint([occurrences[0]], [occ], resolution, nb_viewpoints)) print("Done") # Sorting occurrences by footprints footprints, occurrences = zip(*sorted(zip(footprints, occurrences))) # Creating HLOD chain hlods = [] for i in range(len(files)): hlod = pxz.scene.createOccurrence(f"HLOD {i:03}") pxz.scene.setParent(occurrences[i], hlod) cmp_hlod = pxz.scene.addComponent(hlod, pxz.scene.ComponentType.HLODComponent) pxz.core.setProperty(cmp_hlod, "Error", str(footprints[i])) hlods.append(hlod) for i in range(len(files) - 1): pxz.scene.setParent(hlods[i], hlods[i + 1]) print("Chain creation is done!") return hlods[-1]files = [ "path_to_original_model.pxz", "path_to_heavily_decimated_version_of_it.obj", "path_to_slightly_decimated_version_of_it.glb", "path_to_more_decimated_version_of_it.fbx", # ... "path_to_impostor_version_of_it",]hlod_chain = create_hlod_chain(files)pxz.scene.setParent(hlod_chain, pxz.scene.getRoot())

Copyright © 2026 Unity Technologies
LegalPrivacy PolicyCookiesDocumentation Terms of UseDo Not Sell or Share My Personal InformationYour Privacy Choices (Cookie Settings)

"Unity", Unity logos, and other Unity trademarks are trademarks or registered trademarks of Unity Technologies or its affiliates in the U.S and elsewhere (more info here). Other names or brands are trademarks of their respective owners.

Some pages are machine-translated for convenience, and may contain inaccuracies. In the event of conflicting information, the English version is authoritative.


    Report a problem with this page