Rust bindings for Pixar's Universal Scene Description (USD)

Overview

Getting started

Make sure you have cppmm built/working. https://github.com/vfx-rs/cppmm

Build usd 21.11

Then run bash bind.sh.

  • You need to make sure all the USD_ROOT environment variables is set to the install location of usd 21.11.
  • You need to make sure astgen and asttoc are in your PATH.

Finally build the rust bindings.

env LD_LIBRARY_PATH=${USD_ROOT}/lib CMAKE_PREFIX_PATH=${USD_ROOT} cargo test

You should be good to go after this.

Checklist

  • You can create and open/save/export a stage.

  • You can define a prim and get/set attributes on it.

  • All 30 basic types are supported + arrays of those types.

  • You can create references under prims or as layers.

  • You can traverse the prims in a stage.

  • Relationships

  • Schemas

  • Edit Targets

  • Variant Sets

  • Get/Set default root prim

  • Asset resolver

Supported value types in VtValue.

Some types have scalar support but no array, those are marked as not done.

  • bool bool
  • uchar uint8_t 8 bit unsigned integer
  • int int32_t 32 bit signed integer
  • uint uint32_t 32 bit unsigned integer
  • int64 int64_t 64 bit signed integer
  • uint64 uint64_t 64 bit unsigned integer
  • half GfHalf 16 bit floating point
  • float float 32 bit floating point
  • double double 64 bit floating point
  • timecode SdfTimeCode double representing a resolvable time
  • string std::string stl string
  • token TfToken interned string with fast comparison and hashing
  • asset SdfAssetPath represents a resolvable path to another asset
  • matrix3d GfMatrix3d 3x3 matrix of doubles
  • matrix4d GfMatrix4d 4x4 matrix of doubles
  • matrix3f GfMatrix3f 3x3 matrix of floats
  • matrix4f GfMatrix4f 4x4 matrix of floats
  • quatd GfQuatd double-precision quaternion
  • quatf GfQuatf single-precision quaternion
  • quath GfQuath half-precision quaternion
  • double2 GfVec2d vector of 2 doubles
  • float2 GfVec2f vector of 2 floats
  • half2 GfVec2h vector of 2 half's
  • int2 GfVec2i vector of 2 ints
  • double3 GfVec3d vector of 3 doubles
  • float3 GfVec3f vector of 3 floats
  • half3 GfVec3h vector of 3 half's
  • int3 GfVec3i vector of 3 ints
  • double4 GfVec4d vector of 4 doubles
  • float4 GfVec4f vector of 4 floats
  • half4 GfVec4h vector of 4 half's
  • int4 GfVec4i vector of 4 ints

Running genbind

genbind.py -v 2 --namespace pxrInternal_v0_20__pxrReserved__ --namespace-internal PXR_INTERNAL_NS --namespace-public pxr -a "-I/home/anders/packages/usd/20.05/include" -a "-I/home/anders/packages/boost/1.70.0/include" -a "-I/usr/include/python2.7" -a "-Wno-deprecated-register" -o bind -f /home/anders/packages/usd/20.05/include/pxr/usd/usdGeom/sphere.h

You might also like...
A Rust crate that simplifies the integration of Rust and eBPF programs written in C.

This crate simplifies the compilation of eBPF programs written in C integrating clang with Rust and the cargo build system with functions that can be

A Windows Shell Extension for the Pixar USD file format.

Activision USD Shell Extension A Windows Shell Extension for the Pixar USD file format. Windows Explorer Features Hydra Realtime Preview Thumbnails Co

Device for ANARI generating USD+Omniverse output

USD device for ANARI Device for ANARI generating USD+Omniverse output Prerequisites If OpenVDB (Volume support) is required: Easiest: build USD from s

rlua -- High level bindings between Rust and Lua

rlua -- High level bindings between Rust and Lua

Open Data Description Language

Open Data Description Language This is the reference parser for the Open Data Description Language (OpenDDL), version 3.0. The official language speci

This repository shows my all (maybe all) solved problem (CodeForces & AtCoder) and their description with my Codes!!!

Submissions Auto-generated with ❤ using Harwest Introduction A repository to keep track of problem solving practice, containing solutions from platfor

Contribute a Data Structure you coded or solve the problems given in the Description.md file in any language! Happy coding!

Pro Lang Contribute a Data Structure you coded or solve the problems given in the Description.md file (can be found in the both the folders) in any la

Add a description to your directories!

lsnotes (Part of the better coreutils initiative) Add a description to your directories! Simply add a .lsnotes file and that's it! This is the origina

Minerva: a fast and flexible tool for deep learning on multi-GPU. It provides ndarray programming interface, just like Numpy. Python bindings and C++ bindings are both available. The resulting code can be run on CPU or GPU. Multi-GPU support is very easy. A basic 3D scene implemented with various engines, frameworks or APIs.
A basic 3D scene implemented with various engines, frameworks or APIs.

Here be dragons Hic sunt dracones. This repository contains multiple implementations of the same 3D scene, using different APIs and frameworks on vari

Code and Data for our CVPR 2021 paper "Structured Scene Memory for Vision-Language Navigation"

SSM-VLN Code and Data for our CVPR 2021 paper "Structured Scene Memory for Vision-Language Navigation". Environment Installation Download Room-to-Room

OGRE  is a scene-oriented, flexible 3D engine written in C++ designed to make it easier and more intuitive for developers to produce games and demos utilising 3D hardware.
OGRE is a scene-oriented, flexible 3D engine written in C++ designed to make it easier and more intuitive for developers to produce games and demos utilising 3D hardware.

OGRE (Object-Oriented Graphics Rendering Engine) is a scene-oriented, flexible 3D engine written in C++ designed to make it easier and more intuitive for developers to produce games and demos utilising 3D hardware. The class library abstracts all the details of using the underlying system libraries like Direct3D and OpenGL and provides an interface based on world objects and other intuitive classes.

A test using a TTGO module (ESP32 + screen) which renders a 3d scene using pingo library

A simple 3D renderer tested and developed for the TTGO T-Display ESP32 board. The 3d renderer is: https://github.com/fededevi/pingo The 3D renderer is

3D Solar System Scene

This was my Computer Graphics' project. In this i used OpenGL and Glut to create a 3D Solar System Scene. Its without textures and wrapping. Just the most basic functionalities.

Stochastic Scene-Aware Motion Prediction
Stochastic Scene-Aware Motion Prediction

Stochastic Scene-Aware Motion Prediction [Project Page] [Paper] Description This repository contains the runtime Unity code for SAMP. For the training

Super Simple Scene Renderer
Super Simple Scene Renderer

SSSR Super Simple Scene Renderer Feature Rendering path Forward rendering Deferred rendering Physically based rendering GGX Image based lighting Equir

HMS Core Scene Kit Slim Mesh Demo sample code demonstrates how to invoke external interfaces of SlimMesh to perform mesh simplification.

HMS Core Scene Kit Slim Mesh Demo English | 中文 Table of Contents Introduction Environments Requirements Result License Introduction The Slim Mesh is a

An open collection of tools and experiments for rendering wide-gamut scene-linear data into an image for an SDR or HDR display device.

Open Display Transform An open collection of tools and experiments for rendering wide-gamut scene-linear data into an image for an SDR or HDR display

A set of open c++ game development tools that are lightweight, easy-to-integrate and free to use. Currently hosting a magicavoxel .vox full scene loader.
A set of open c++ game development tools that are lightweight, easy-to-integrate and free to use. Currently hosting a magicavoxel .vox full scene loader.

open game tools Open game tools is a set of unencumbered, free, lightweight, easy-to-integrate tools for use in game development. So far it contains:

Comments
  • Check in usd-sys bindings

    Check in usd-sys bindings

    Right now when doing a clean checkout of this repository and building the rust project you're faced with this error:

    error: failed to load manifest for workspace member `/home/jasper/vfx-rs/usd-bind/usd-rs/crates/usd`
    
    Caused by:
      failed to load manifest for dependency `usd-cppstd`
    
    Caused by:
      failed to load manifest for dependency `usd-sys`
    
    Caused by:
      failed to read `/home/jasper/vfx-rs/usd-bind/build/usd-sys/Cargo.toml`
    
    Caused by:
      No such file or directory (os error 2)
    

    For most of the Rust projects that we've maintained, we've checked in the -sys crate so that it's a lot easier for people to get up and running with the crate, and one can do a local checkout pretty easily without having to have a complex build environment.

    Another implication of the way it's set up now, is that one can't easily patch the published crate with a local one through the [patch.crates-io] in Cargo.toml and quickly iterate / do fixes.

    Usually what we do is we automate the process of generating the bindings through a simple Rust project that's manually invoked. Examples include https://github.com/MaikKlein/ash and https://github.com/gfx-rs/rspirv

    opened by Jasper-Bekkers 6
Owner
null
This is a small library that allows to stream a Dear ImGui scene to multiple WebSocket clients at once

imgui-ws Dear ImGui over WebSockets This is a small library that allows to stream a Dear ImGui scene to multiple WebSocket clients at once. This is ac

Georgi Gerganov 303 Sep 21, 2022
Backroll is a pure Rust implementation of GGPO rollback networking library.

backroll-rs Backroll is a pure Rust implementation of GGPO rollback networking library. Development Status This is still in an early beta stage. At ti

Hourai Teahouse 244 Sep 15, 2022
A lightweight Universal Windows proxy app based on https://github.com/eycorsican/leaf

Maple A lightweight Universal Windows proxy app based on https://github.com/eycorsican/leaf Features Configuration management Outbound network adapter

YtFlow 670 Sep 22, 2022
A universal C++20 wrapper for cross-platform sockets.

NetSockets A fast and clean, universal C++20 wrapper for cross-platform sockets. This wrapper uses ENet by lsalzman (https://github.com/lsalzman/enet)

null 3 Apr 17, 2022
ChakraCore bindings for aardio

ChakraCore-bindings-for-aardio ChakraCore is a Javascript engine with a C API you can use to add support for Javascript to any C or C compatible proje

null 9 Feb 18, 2022
HP-Socket bindings for aardio

HP-Socket-bindings-for-aardio HP-Socket is a high performance network framework. aardio is an extremely easy-to-use dynamic language, but it is also a

null 9 Jan 3, 2022
Python bindings for open source MuJoCo

pymujoco Python bindings for open source MuJoCo using pybind11. from pymujoco import * r = mjv_create_renderer() #help(p) m = mj_loadXML("humanoid.xm

null 35 Aug 20, 2022
Rudimentary opinionated client-side lua libwayland bindings and scanner

wau This should work with Lua 5.3+. By default it builds with 5.3 instead of 5.4 because the examples depend on lgi. These aren't 1-to-1 bindings to l

null 4 Apr 18, 2022
An SFTP client shared library (dll/so/dylib) with bindings and classes for C++, Delphi and Free Pascal based on PuTTY

TGPuttyLib A shared library / DLL with Delphi and C++ bindings based on PuTTY, for Windows, macOS, and Linux. The new TGPuttyLib SFTP Library is a DLL

Tobias Giesen 67 Sep 15, 2022
C++ library for audio and music analysis, description and synthesis, including Python bindings

Essentia Essentia is an open-source C++ library for audio analysis and audio-based music information retrieval released under the Affero GPL license.

Music Technology Group - Universitat Pompeu Fabra 2.2k Sep 20, 2022