Add more PrimvarReader_<TYPE> definition.

This commit is contained in:
Syoyo Fujita
2023-05-09 23:05:35 +09:00
parent 678249dac1
commit 75b7170664
6 changed files with 167 additions and 24 deletions

View File

@@ -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:

View File

@@ -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)

View File

@@ -44,7 +44,7 @@
#include "handle-allocator.hh"
#include "primvar.hh"
#include "tiny-variant.hh"
//#include "tiny-variant.hh"
//
#include "value-eval-util.hh"

View File

@@ -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);

View File

@@ -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,

View 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
}