mirror of
https://github.com/lighttransport/tinyusdz.git
synced 2026-01-18 01:11:17 +01:00
Add more PrimvarReader_<TYPE> definition.
This commit is contained in:
@@ -9,7 +9,7 @@ import os
|
||||
import warnings
|
||||
from pathlib import Path
|
||||
|
||||
from typing import Union, List, Any, IO
|
||||
from typing import Optional, Union, List, Any, IO
|
||||
from enum import Enum, auto
|
||||
|
||||
#
|
||||
@@ -39,7 +39,6 @@ except ImportError:
|
||||
return cls
|
||||
|
||||
|
||||
|
||||
try:
|
||||
import numpy as np
|
||||
except:
|
||||
@@ -50,6 +49,7 @@ try:
|
||||
except:
|
||||
pass
|
||||
|
||||
|
||||
def is_ctinyusd_available():
|
||||
import importlib.util
|
||||
|
||||
@@ -59,6 +59,7 @@ def is_ctinyusd_available():
|
||||
|
||||
return False
|
||||
|
||||
|
||||
def is_typeguard_available():
|
||||
import importlib.util
|
||||
|
||||
@@ -157,24 +158,129 @@ class ValueBlock:
|
||||
|
||||
|
||||
"""
|
||||
USD type in literal
|
||||
USD types in literal
|
||||
"""
|
||||
|
||||
# Literal is not available in 3.7
|
||||
USDTypes = Literal[
|
||||
USDType: TypeAlias = Literal[
|
||||
"token",
|
||||
"string",
|
||||
"asset"
|
||||
"dictionary",
|
||||
"timecode",
|
||||
"rel", # Relationship
|
||||
"bool",
|
||||
"int8",
|
||||
"int16",
|
||||
"uchar",
|
||||
"int",
|
||||
"int32",
|
||||
"int64",
|
||||
"uint8",
|
||||
"uint16",
|
||||
"uint",
|
||||
"uint32",
|
||||
"uint64",
|
||||
"string"]
|
||||
"float",
|
||||
"float2",
|
||||
"float3",
|
||||
"float4",
|
||||
"double",
|
||||
"double2",
|
||||
"double3",
|
||||
"double4",
|
||||
"half",
|
||||
"half2",
|
||||
"half3",
|
||||
"half4",
|
||||
"quath",
|
||||
"quatf",
|
||||
"quatd",
|
||||
"normal3h",
|
||||
"normal3f",
|
||||
"normal3d",
|
||||
"vector3h",
|
||||
"vector3f",
|
||||
"vector3d",
|
||||
"vector4h",
|
||||
"vector4f",
|
||||
"vector4d",
|
||||
"color3h",
|
||||
"color3f",
|
||||
"color3d",
|
||||
"color4h",
|
||||
"color4f",
|
||||
"color4d",
|
||||
"point3h",
|
||||
"point3f",
|
||||
"point3d",
|
||||
"point3h",
|
||||
"point3f",
|
||||
"point3d",
|
||||
"texCoord2h",
|
||||
"texCoord2f",
|
||||
"texCoord2d",
|
||||
"texCoord3h",
|
||||
"texCoord3f",
|
||||
"texCoord3d",
|
||||
"texCoord4h",
|
||||
"texCoord4f",
|
||||
"texCoord4d",
|
||||
"matrix2f",
|
||||
"matrix3f",
|
||||
"matrix4f",
|
||||
"matrix2d",
|
||||
"matrix3d",
|
||||
"matrix4d",
|
||||
"frame4d",
|
||||
]
|
||||
SpecifierType: TypeAlias = Literal["def", "over", "class"]
|
||||
AxisType: TypeAlias = Literal["X", "Y", "Z"]
|
||||
|
||||
# Builtin Prim type
|
||||
PrimType: TypeAlias = Literal[
|
||||
"Model", # Generic Prim
|
||||
"Scope",
|
||||
# Geom
|
||||
"Xform",
|
||||
"Mesh",
|
||||
"BasisCurves",
|
||||
"Sphere",
|
||||
"Cube",
|
||||
"Cylinder",
|
||||
"Cone",
|
||||
"Capsule",
|
||||
"Points"
|
||||
"GeomSubset",
|
||||
"PointInstancer",
|
||||
"Camera",
|
||||
# Lux
|
||||
"SphereLight",
|
||||
"DomeLight",
|
||||
"CylinderLight",
|
||||
"DiskLight",
|
||||
"RectLight",
|
||||
"DistantLight",
|
||||
"GeometryLight",
|
||||
"PortalLight",
|
||||
"PluginLight",
|
||||
# Shader
|
||||
"Shader",
|
||||
"Material",
|
||||
]
|
||||
|
||||
# UsdPreviewSurface types.
|
||||
# https://openusd.org/release/spec_usdpreviewsurface.html
|
||||
#
|
||||
# NOTE: defined in usdImaging in pxrUSD
|
||||
#
|
||||
ShaderNodeType: TypeAlias = Literal[
|
||||
"ShaderNode", # Generic shader node
|
||||
"UsdPreviewSurface",
|
||||
"UsdUVTexture",
|
||||
"UsdPrimvarReader_float",
|
||||
"UsdPrimvarReader_float2",
|
||||
"UsdPrimvarReader_float3",
|
||||
"UsdPrimvarReader_float4",
|
||||
"UsdPrimvarReader_int",
|
||||
"UsdPrimvarReader_normal",
|
||||
"UsdPrimvarReader_vector",
|
||||
"UsdPrimvarReader_point",
|
||||
"UsdPrimvarReader_matrix"
|
||||
]
|
||||
|
||||
|
||||
"""
|
||||
@@ -182,12 +288,11 @@ numpy-like ndarray for Attribute data(e.g. points, normals, ...)
|
||||
"""
|
||||
|
||||
|
||||
@typechecked
|
||||
class NDArray:
|
||||
def __init__(self, dtype: str = "uint8"):
|
||||
def __init__(self, dtype: USDType = "uint8"):
|
||||
|
||||
assert dtype in USDTypes
|
||||
|
||||
self.dtype: str = "uint8"
|
||||
self.dtype: USDType = "uint8"
|
||||
self.dim: int = 1 # In USD, 1D or 2D only for array data
|
||||
|
||||
self._data = None
|
||||
@@ -322,7 +427,7 @@ class Stage:
|
||||
self._stage = None
|
||||
self.filename = ""
|
||||
|
||||
self.upAxis: Union[Literal["X", "Y", "Z"], None] = None
|
||||
self.upAxis: Optional[AxisType] = None
|
||||
self.metersPerUnit: Union[float, None] = None
|
||||
self.framesPerSecond: Union[float, None] = None
|
||||
self.defaultPrim: Union[str, None] = None
|
||||
@@ -399,7 +504,7 @@ def is_usdc(filename: Union[Path, str]) -> bool:
|
||||
|
||||
raise RuntimeError("TODO")
|
||||
|
||||
#def load_usd(filename: Union[Path, str]) -> Stage:
|
||||
# def load_usd(filename: Union[Path, str]) -> Stage:
|
||||
# """Loads USDC/USDA/UDSZ from a file
|
||||
#
|
||||
# Args:
|
||||
|
||||
@@ -858,6 +858,11 @@ nonstd::optional<std::string> GetPrimElementName(const value::Value &v) {
|
||||
EXTRACT_NAME_AND_RETURN_PATH(UsdPrimvarReader_float2)
|
||||
EXTRACT_NAME_AND_RETURN_PATH(UsdPrimvarReader_float3)
|
||||
EXTRACT_NAME_AND_RETURN_PATH(UsdPrimvarReader_float4)
|
||||
EXTRACT_NAME_AND_RETURN_PATH(UsdPrimvarReader_string)
|
||||
EXTRACT_NAME_AND_RETURN_PATH(UsdPrimvarReader_normal)
|
||||
EXTRACT_NAME_AND_RETURN_PATH(UsdPrimvarReader_vector)
|
||||
EXTRACT_NAME_AND_RETURN_PATH(UsdPrimvarReader_point)
|
||||
EXTRACT_NAME_AND_RETURN_PATH(UsdPrimvarReader_matrix)
|
||||
EXTRACT_NAME_AND_RETURN_PATH(SkelRoot)
|
||||
EXTRACT_NAME_AND_RETURN_PATH(Skeleton)
|
||||
EXTRACT_NAME_AND_RETURN_PATH(SkelAnimation)
|
||||
|
||||
@@ -44,7 +44,7 @@
|
||||
|
||||
#include "handle-allocator.hh"
|
||||
#include "primvar.hh"
|
||||
#include "tiny-variant.hh"
|
||||
//#include "tiny-variant.hh"
|
||||
//
|
||||
#include "value-eval-util.hh"
|
||||
|
||||
|
||||
@@ -27,7 +27,10 @@ constexpr auto kUsdPrimvarReader_float2 = "UsdPrimvarReader_float2";
|
||||
constexpr auto kUsdPrimvarReader_float3 = "UsdPrimvarReader_float3";
|
||||
constexpr auto kUsdPrimvarReader_float4 = "UsdPrimvarReader_float4";
|
||||
constexpr auto kUsdPrimvarReader_string = "UsdPrimvarReader_string";
|
||||
constexpr auto kUsdPrimvarReader_matrix4d = "UsdPrimvarReader_matrix4d";
|
||||
constexpr auto kUsdPrimvarReader_normal = "UsdPrimvarReader_normal";
|
||||
constexpr auto kUsdPrimvarReader_point = "UsdPrimvarReader_point";
|
||||
constexpr auto kUsdPrimvarReader_vector = "UsdPrimvarReader_vector";
|
||||
constexpr auto kUsdPrimvarReader_matrix = "UsdPrimvarReader_matrix";
|
||||
|
||||
// for bindMaterialAs
|
||||
constexpr auto kWeaderThanDescendants = "weakerThanDescendants";
|
||||
@@ -141,10 +144,19 @@ using UsdPrimvarReader_float3 = UsdPrimvarReader<value::float3>;
|
||||
using UsdPrimvarReader_float4 = UsdPrimvarReader<value::float4>;
|
||||
using UsdPrimvarReader_int = UsdPrimvarReader<int>;
|
||||
|
||||
using UsdPrimvarReaderType =
|
||||
tinyusdz::variant<UsdPrimvarReader_float, UsdPrimvarReader_float2,
|
||||
UsdPrimvarReader_float3, UsdPrimvarReader_float4,
|
||||
UsdPrimvarReader_int>;
|
||||
// The underlying type is float precision for `normal`, `vector` and `point`
|
||||
using UsdPrimvarReader_normal = UsdPrimvarReader<value::normal3f>;
|
||||
using UsdPrimvarReader_vector = UsdPrimvarReader<value::vector3f>;
|
||||
using UsdPrimvarReader_point = UsdPrimvarReader<value::point3f>;
|
||||
|
||||
// The underlying type is matrix4d
|
||||
using UsdPrimvarReader_matrix = UsdPrimvarReader<value::matrix4d>;
|
||||
|
||||
// TODO: Remove
|
||||
//using UsdPrimvarReaderType =
|
||||
// tinyusdz::variant<UsdPrimvarReader_float, UsdPrimvarReader_float2,
|
||||
// UsdPrimvarReader_float3, UsdPrimvarReader_float4,
|
||||
// UsdPrimvarReader_int>;
|
||||
|
||||
|
||||
struct UsdUVTexture : ShaderNode {
|
||||
@@ -323,6 +335,14 @@ DEFINE_TYPE_TRAIT(UsdPrimvarReader_float4, "UsdPrimvarReader_float4",
|
||||
TYPE_ID_IMAGING_PRIMVAR_READER_FLOAT4, 1);
|
||||
DEFINE_TYPE_TRAIT(UsdPrimvarReader_int, "UsdPrimvarReader_int",
|
||||
TYPE_ID_IMAGING_PRIMVAR_READER_INT, 1);
|
||||
DEFINE_TYPE_TRAIT(UsdPrimvarReader_vector, "UsdPrimvarReader_vector",
|
||||
TYPE_ID_IMAGING_PRIMVAR_READER_VECTOR, 1);
|
||||
DEFINE_TYPE_TRAIT(UsdPrimvarReader_normal, "UsdPrimvarReader_normal",
|
||||
TYPE_ID_IMAGING_PRIMVAR_READER_NORMAL, 1);
|
||||
DEFINE_TYPE_TRAIT(UsdPrimvarReader_point, "UsdPrimvarReader_point",
|
||||
TYPE_ID_IMAGING_PRIMVAR_READER_POINT, 1);
|
||||
DEFINE_TYPE_TRAIT(UsdPrimvarReader_matrix, "UsdPrimvarReader_matrix",
|
||||
TYPE_ID_IMAGING_PRIMVAR_READER_MATRIX, 1);
|
||||
DEFINE_TYPE_TRAIT(UsdTransform2d, "UsdTransform2d",
|
||||
TYPE_ID_IMAGING_TRANSFORM_2D, 1);
|
||||
|
||||
|
||||
@@ -427,6 +427,11 @@ enum TypeId {
|
||||
TYPE_ID_IMAGING_PRIMVAR_READER_FLOAT3,
|
||||
TYPE_ID_IMAGING_PRIMVAR_READER_FLOAT4,
|
||||
TYPE_ID_IMAGING_PRIMVAR_READER_INT,
|
||||
TYPE_ID_IMAGING_PRIMVAR_READER_STRING,
|
||||
TYPE_ID_IMAGING_PRIMVAR_READER_NORMAL, // float3
|
||||
TYPE_ID_IMAGING_PRIMVAR_READER_POINT, // float3
|
||||
TYPE_ID_IMAGING_PRIMVAR_READER_VECTOR, // float3
|
||||
TYPE_ID_IMAGING_PRIMVAR_READER_MATRIX, // float3
|
||||
TYPE_ID_IMAGING_TRANSFORM_2D,
|
||||
TYPE_ID_IMAGING_END,
|
||||
|
||||
|
||||
8
tests/usda/shader-primvarreader-string.usda
Normal file
8
tests/usda/shader-primvarreader-string.usda
Normal file
@@ -0,0 +1,8 @@
|
||||
#usda 1.0
|
||||
|
||||
def Shader "TexCoordReader"
|
||||
{
|
||||
uniform token info:id = "UsdPrimvarReader_string"
|
||||
token inputs:varname = "st_string"
|
||||
string outputs:result
|
||||
}
|
||||
Reference in New Issue
Block a user