mujoco-react 10.6.0 → 10.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +43 -11
- package/dist/{chunk-EN55TTGH.js → chunk-5WFYM73E.js} +2 -2
- package/dist/chunk-5WFYM73E.js.map +1 -0
- package/dist/index.d.ts +43 -6
- package/dist/index.js +172 -29
- package/dist/index.js.map +1 -1
- package/dist/onnx.d.ts +1 -1
- package/dist/spark.d.ts +1 -1
- package/dist/spark.js +1 -1
- package/dist/{types-Dvtm4I0o.d.ts → types-Bu8Aki_j.d.ts} +10 -0
- package/package.json +1 -1
- package/src/components/SceneRenderer.tsx +7 -3
- package/src/core/MujocoCanvas.tsx +2 -0
- package/src/core/MujocoSimProvider.tsx +39 -5
- package/src/hooks/useControlGroup.ts +0 -0
- package/src/hooks/useIkController.ts +16 -3
- package/src/index.ts +3 -1
- package/src/rendering/GeomBuilder.ts +33 -9
- package/src/types.ts +10 -0
- package/dist/chunk-EN55TTGH.js.map +0 -1
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
-
import { M as MujocoContextValue, a as MujocoCanvasProps, b as MujocoSimAPI, S as SceneConfig, R as ReadyCallbackInput, c as StepCallbackInput, d as SelectionCallbackInput, e as MujocoModule, f as MujocoRenderOptions, P as PhysicsStepCallback, g as MujocoModel, h as MujocoData, C as ControlGroupInfo, A as ActuatedJointInfo, i as ControlGroupSelector, O as ObservationConfig, j as ObservationResult, I as IkConfig, k as IkContextValue, B as BodyProps, l as IkGizmoProps, D as DragInteractionProps, m as SceneLightsProps, n as ScenarioLightingProps, o as SplatEnvironmentProps, V as VisualScenarioEffectsProps, p as VisualScenarioConfig, q as SplatRendererKind, r as PairedSplatEnvironmentConfig, s as SplatFormat, t as SplatCollisionProxyConfig, u as SplatEnvironmentReadiness, v as SplatCollisionPrimitive, w as SplatEnvironmentReadinessStatus, x as SplatSceneConfigInput, y as SplatSceneConfigState, z as VisualScenarioExecutionContextInput, E as VisualScenarioExecutionContext, F as ScenarioLightingPreset, G as SplatEnvironmentMetadataInput, H as SplatEnvironmentMetadata, J as SplatSceneInput, K as CameraFrameCaptureOptions, L as DebugProps, N as GeomInfo, Q as ContactListenerProps, T as TrajectoryPlayerProps, U as ActuatorInfo, W as Sites, X as SitePositionResult, Y as Sensors, Z as SensorHandle, _ as SensorInfo, $ as Joints, a0 as ScalarJointStateResult, a1 as ArrayJointStateResult, a2 as JointStateOptions, a3 as JointStateResult, a4 as Bodies, a5 as BodyStateResult, a6 as Geoms, a7 as Actuators, a8 as CtrlHandle, a9 as ContactInfo, aa as KeyboardTeleopConfig, ab as KeyboardIkTargetConfig, ac as PolicyConfig, ad as PolicyAPI, ae as RemotePolicyConfig, af as RemotePolicyAPI, ag as ObservationHandle, ah as ObservationOutput, ai as TrajectoryInput, aj as TrajectoryStateChangeInput, ak as PlaybackState, al as TrajectoryFrame, am as FrameCaptureOptions, an as FrameCaptureResult, ao as FrameCaptureBlobResult, ap as FrameCaptureAPI, aq as CameraFrameCaptureAPI, ar as Cameras, as as CameraFrameSequenceCamera, at as CameraFrameCaptureSource, au as CameraFrameSequenceOptions, av as CameraFrameSequenceResult, aw as PolicyCameraFrameStream, ax as PolicyCameraFrameCaptureOptions, ay as PolicyCameraFrameCaptureResult, az as FrameCaptureStatus, aA as PolicyCameraFrameCaptureAPI, aB as CameraFrameCaptureTensorOptions, aC as CameraFrameTensorResult, aD as CameraFrameSequenceRecorderAPI, aE as ImagePointCoordinateSpace, aF as ImagePointProjectionOptions, aG as ImagePointProjectionResult, aH as PolicyVector } from './types-
|
|
3
|
-
export { aI as BodyInfo, aJ as CAMERA_FRAME_CAPTURE_PRE_RENDER_USER_DATA_KEY, aK as CAMERA_FRAME_CAPTURE_RENDER_USER_DATA_KEY, aL as CAPTURE_EXCLUDE_KEY, aM as CameraFrameCaptureBlobResult, aN as CameraFrameCaptureQuaternion, aO as CameraFrameCaptureResult, aP as CameraFrameCaptureSession, aQ as CameraFrameCaptureVector3, aR as CameraFramePixelsResult, aS as CameraFrameSequenceCameraSummary, aT as CameraFrameSequenceFrame, aU as CameraFrameSequenceSampleInput, aV as CameraFrameSequenceStepInput, aW as CameraInfo, aX as ControlJointInfo, aY as DebugVirtualCamera, aZ as FrameCaptureTarget, a_ as FrameCaptureTargetRef, a$ as IKSolveFn, b0 as IkGizmoDragInput, b1 as IkSolveInput, b2 as JointInfo, b3 as JointStateKind, b4 as KeyBinding, b5 as KeyboardIkTargetAction, b6 as KeyboardIkTargetBinding, b7 as Keyframes, b8 as ModelActuators, b9 as ModelBodies, ba as ModelCameras, bb as ModelGeoms, bc as ModelJoints, bd as ModelKeyframes, be as ModelOptions, bf as ModelResource, bg as ModelResources, bh as ModelSensors, bi as ModelSites, bj as Models, bk as MujocoContact, bl as MujocoContactArray, bm as MujocoFrameCaptureOptions, bn as ObservationLayoutItem, bo as PhysicsConfig, bp as PhysicsStepInput, bq as PolicyActionChunk, br as PolicyActionInput, bs as PolicyImageTensorLayout, bt as PolicyImageTensorOptions, bu as PolicyImageTensorPixelOptions, bv as PolicyImageTensorRange, bw as PolicyImageTensorResult, bx as PolicyImageTensorSourceOrigin, by as PolicyInferenceInput, bz as PolicyInferenceOutput, bA as PolicyInferenceResult, bB as PolicyObservationInput, bC as RayHit, bD as Register, bE as RegisteredModelMap, bF as RemotePolicyRequestInfo, bG as RemotePolicyRequestInput, bH as RemotePolicyResponseInfo, bI as RemotePolicyStatus, bJ as ResetCallbackInput, bK as ResolvedScenarioCameraConfig, bL as ResolvedScenarioMaterialConfig, bM as ResourceSelector, bN as ScenarioCameraConfig, bO as ScenarioMaterialConfig, bP as SceneMarker, bQ as SceneObject, bR as SensorResult, bS as SiteInfo, bT as SplatAssetConfig, bU as SplatScenarioConfig, bV as StateSnapshot, bW as TrajectoryData, bX as TrajectoryFrameCallbackInput, bY as VisualScenarioMaterialFilterInput, bZ as XmlPatch, b_ as captureCameraFrame, b$ as captureCameraFrameBlob, c0 as captureCameraFrameTensor, c1 as createCameraFrameCaptureSession, c2 as dataUrlToPolicyImageTensor, c3 as getContact, c4 as imageDataToPolicyImageTensor, c5 as pixelsToPolicyImageTensor, c6 as registerModelResources, c7 as renderCameraFrameToCanvas } from './types-
|
|
2
|
+
import { M as MujocoContextValue, a as MujocoCanvasProps, b as MujocoSimAPI, S as SceneConfig, R as ReadyCallbackInput, c as StepCallbackInput, d as SelectionCallbackInput, e as MujocoModule, f as MujocoRenderOptions, P as PhysicsStepCallback, g as MujocoModel, h as MujocoData, C as ControlGroupInfo, A as ActuatedJointInfo, i as ControlGroupSelector, O as ObservationConfig, j as ObservationResult, I as IkConfig, k as IkContextValue, B as BodyProps, l as IkGizmoProps, D as DragInteractionProps, m as SceneLightsProps, n as ScenarioLightingProps, o as SplatEnvironmentProps, V as VisualScenarioEffectsProps, p as VisualScenarioConfig, q as SplatRendererKind, r as PairedSplatEnvironmentConfig, s as SplatFormat, t as SplatCollisionProxyConfig, u as SplatEnvironmentReadiness, v as SplatCollisionPrimitive, w as SplatEnvironmentReadinessStatus, x as SplatSceneConfigInput, y as SplatSceneConfigState, z as VisualScenarioExecutionContextInput, E as VisualScenarioExecutionContext, F as ScenarioLightingPreset, G as SplatEnvironmentMetadataInput, H as SplatEnvironmentMetadata, J as SplatSceneInput, K as CameraFrameCaptureOptions, L as DebugProps, N as GeomInfo, Q as ContactListenerProps, T as TrajectoryPlayerProps, U as ActuatorInfo, W as Sites, X as SitePositionResult, Y as Sensors, Z as SensorHandle, _ as SensorInfo, $ as Joints, a0 as ScalarJointStateResult, a1 as ArrayJointStateResult, a2 as JointStateOptions, a3 as JointStateResult, a4 as Bodies, a5 as BodyStateResult, a6 as Geoms, a7 as Actuators, a8 as CtrlHandle, a9 as ContactInfo, aa as KeyboardTeleopConfig, ab as KeyboardIkTargetConfig, ac as PolicyConfig, ad as PolicyAPI, ae as RemotePolicyConfig, af as RemotePolicyAPI, ag as ObservationHandle, ah as ObservationOutput, ai as TrajectoryInput, aj as TrajectoryStateChangeInput, ak as PlaybackState, al as TrajectoryFrame, am as FrameCaptureOptions, an as FrameCaptureResult, ao as FrameCaptureBlobResult, ap as FrameCaptureAPI, aq as CameraFrameCaptureAPI, ar as Cameras, as as CameraFrameSequenceCamera, at as CameraFrameCaptureSource, au as CameraFrameSequenceOptions, av as CameraFrameSequenceResult, aw as PolicyCameraFrameStream, ax as PolicyCameraFrameCaptureOptions, ay as PolicyCameraFrameCaptureResult, az as FrameCaptureStatus, aA as PolicyCameraFrameCaptureAPI, aB as CameraFrameCaptureTensorOptions, aC as CameraFrameTensorResult, aD as CameraFrameSequenceRecorderAPI, aE as ImagePointCoordinateSpace, aF as ImagePointProjectionOptions, aG as ImagePointProjectionResult, aH as PolicyVector } from './types-Bu8Aki_j.js';
|
|
3
|
+
export { aI as BodyInfo, aJ as CAMERA_FRAME_CAPTURE_PRE_RENDER_USER_DATA_KEY, aK as CAMERA_FRAME_CAPTURE_RENDER_USER_DATA_KEY, aL as CAPTURE_EXCLUDE_KEY, aM as CameraFrameCaptureBlobResult, aN as CameraFrameCaptureQuaternion, aO as CameraFrameCaptureResult, aP as CameraFrameCaptureSession, aQ as CameraFrameCaptureVector3, aR as CameraFramePixelsResult, aS as CameraFrameSequenceCameraSummary, aT as CameraFrameSequenceFrame, aU as CameraFrameSequenceSampleInput, aV as CameraFrameSequenceStepInput, aW as CameraInfo, aX as ControlJointInfo, aY as DebugVirtualCamera, aZ as FrameCaptureTarget, a_ as FrameCaptureTargetRef, a$ as IKSolveFn, b0 as IkGizmoDragInput, b1 as IkSolveInput, b2 as JointInfo, b3 as JointStateKind, b4 as KeyBinding, b5 as KeyboardIkTargetAction, b6 as KeyboardIkTargetBinding, b7 as Keyframes, b8 as ModelActuators, b9 as ModelBodies, ba as ModelCameras, bb as ModelGeoms, bc as ModelJoints, bd as ModelKeyframes, be as ModelOptions, bf as ModelResource, bg as ModelResources, bh as ModelSensors, bi as ModelSites, bj as Models, bk as MujocoContact, bl as MujocoContactArray, bm as MujocoFrameCaptureOptions, bn as ObservationLayoutItem, bo as PhysicsConfig, bp as PhysicsStepInput, bq as PolicyActionChunk, br as PolicyActionInput, bs as PolicyImageTensorLayout, bt as PolicyImageTensorOptions, bu as PolicyImageTensorPixelOptions, bv as PolicyImageTensorRange, bw as PolicyImageTensorResult, bx as PolicyImageTensorSourceOrigin, by as PolicyInferenceInput, bz as PolicyInferenceOutput, bA as PolicyInferenceResult, bB as PolicyObservationInput, bC as RayHit, bD as Register, bE as RegisteredModelMap, bF as RemotePolicyRequestInfo, bG as RemotePolicyRequestInput, bH as RemotePolicyResponseInfo, bI as RemotePolicyStatus, bJ as ResetCallbackInput, bK as ResolvedScenarioCameraConfig, bL as ResolvedScenarioMaterialConfig, bM as ResourceSelector, bN as ScenarioCameraConfig, bO as ScenarioMaterialConfig, bP as SceneMarker, bQ as SceneObject, bR as SensorResult, bS as SiteInfo, bT as SplatAssetConfig, bU as SplatScenarioConfig, bV as StateSnapshot, bW as TrajectoryData, bX as TrajectoryFrameCallbackInput, bY as VisualScenarioMaterialFilterInput, bZ as XmlPatch, b_ as captureCameraFrame, b$ as captureCameraFrameBlob, c0 as captureCameraFrameTensor, c1 as createCameraFrameCaptureSession, c2 as dataUrlToPolicyImageTensor, c3 as getContact, c4 as imageDataToPolicyImageTensor, c5 as pixelsToPolicyImageTensor, c6 as registerModelResources, c7 as renderCameraFrameToCanvas } from './types-Bu8Aki_j.js';
|
|
4
4
|
import * as React$1 from 'react';
|
|
5
5
|
import { CSSProperties, RefObject } from 'react';
|
|
6
6
|
import * as THREE from 'three';
|
|
@@ -144,9 +144,10 @@ interface MujocoSimProviderProps {
|
|
|
144
144
|
speed?: number;
|
|
145
145
|
interpolate?: boolean;
|
|
146
146
|
renderOptions?: MujocoRenderOptions;
|
|
147
|
+
hiddenBodies?: readonly string[];
|
|
147
148
|
children: React.ReactNode;
|
|
148
149
|
}
|
|
149
|
-
declare function MujocoSimProvider({ mujoco, config, apiRef: externalApiRef, onReady, onError, onStep, onSelection, gravity, timestep, substeps, paused, speed, interpolate, renderOptions, children, }: MujocoSimProviderProps): react_jsx_runtime.JSX.Element;
|
|
150
|
+
declare function MujocoSimProvider({ mujoco, config, apiRef: externalApiRef, onReady, onError, onStep, onSelection, gravity, timestep, substeps, paused, speed, interpolate, renderOptions, hiddenBodies, children, }: MujocoSimProviderProps): react_jsx_runtime.JSX.Element;
|
|
150
151
|
|
|
151
152
|
/**
|
|
152
153
|
* @license
|
|
@@ -795,6 +796,9 @@ declare function useControlWriter(options: ControlWriterOptions): ControlWriterH
|
|
|
795
796
|
* positional arrays, no `as const`, no owner bookkeeping.
|
|
796
797
|
*/
|
|
797
798
|
|
|
799
|
+
type StringKeyOf<T> = Extract<keyof T, string>;
|
|
800
|
+
type ControlDefinitionMap = Record<string, Actuators>;
|
|
801
|
+
type ControlValues<K extends string> = Partial<Record<K, number>>;
|
|
798
802
|
/**
|
|
799
803
|
* A typed description of a set of actuators, keyed by name. Create it once with
|
|
800
804
|
* {@link controlGroup} and reuse it across controllers and scripts; the key
|
|
@@ -810,6 +814,12 @@ interface ControlGroup<K extends Actuators = Actuators> {
|
|
|
810
814
|
* no `as const` required (the `const` type parameter captures them).
|
|
811
815
|
*/
|
|
812
816
|
declare function controlGroup<const T extends readonly Actuators[]>(names: T): ControlGroup<T[number]>;
|
|
817
|
+
interface DefinedControls<TControls extends ControlDefinitionMap = ControlDefinitionMap> {
|
|
818
|
+
readonly controls: TControls;
|
|
819
|
+
readonly aliases: readonly StringKeyOf<TControls>[];
|
|
820
|
+
readonly keys: readonly TControls[StringKeyOf<TControls>][];
|
|
821
|
+
}
|
|
822
|
+
declare function defineControls<const TControls extends ControlDefinitionMap>(controls: TControls): DefinedControls<TControls>;
|
|
813
823
|
interface ControlGroupSetOptions {
|
|
814
824
|
/** Write even when another control writer owns one of these actuators. */
|
|
815
825
|
force?: boolean;
|
|
@@ -817,8 +827,14 @@ interface ControlGroupSetOptions {
|
|
|
817
827
|
interface ControlGroupHandle<K extends string> {
|
|
818
828
|
/** The cooperative-ownership identity used for conflict detection. */
|
|
819
829
|
owner: string;
|
|
830
|
+
/** Set a single actuator by name. Returns false if blocked by a conflict. */
|
|
831
|
+
set(name: K, value: number, options?: ControlGroupSetOptions): boolean;
|
|
820
832
|
/** Set one or more actuators by name. Returns false if blocked by a conflict. */
|
|
821
|
-
|
|
833
|
+
patch(values: ControlValues<K>, options?: ControlGroupSetOptions): boolean;
|
|
834
|
+
/** Write values in the same order as the declared control group. */
|
|
835
|
+
write(values: ArrayLike<number>, options?: ControlGroupSetOptions): boolean;
|
|
836
|
+
/** Read one actuator value by name. */
|
|
837
|
+
get(name: K): number;
|
|
822
838
|
/** Read the current control value of every actuator in the group, by name. */
|
|
823
839
|
read(): Record<K, number>;
|
|
824
840
|
/** Whether this group can currently write (no unresolved conflicts). */
|
|
@@ -827,10 +843,31 @@ interface ControlGroupHandle<K extends string> {
|
|
|
827
843
|
release(): void;
|
|
828
844
|
}
|
|
829
845
|
type UseControlGroupOptions = Omit<ControlWriterOptions, 'owner' | 'selector'> & {
|
|
830
|
-
/**
|
|
846
|
+
/** Human-readable conflict label. */
|
|
847
|
+
label?: string;
|
|
848
|
+
/** Override the generated conflict owner id. Prefer `label` for normal use. */
|
|
831
849
|
owner?: string;
|
|
832
850
|
};
|
|
851
|
+
interface ControlsHandle<TControls extends ControlDefinitionMap> {
|
|
852
|
+
/** The cooperative-ownership identity used for conflict detection. */
|
|
853
|
+
owner: string;
|
|
854
|
+
/** Set one alias by name. Returns false if blocked by a conflict. */
|
|
855
|
+
set(name: StringKeyOf<TControls>, value: number, options?: ControlGroupSetOptions): boolean;
|
|
856
|
+
/** Set one or more aliases by name. Returns false if blocked by a conflict. */
|
|
857
|
+
patch(values: ControlValues<StringKeyOf<TControls>>, options?: ControlGroupSetOptions): boolean;
|
|
858
|
+
/** Write values in the same order as the `defineControls()` object. */
|
|
859
|
+
write(values: ArrayLike<number>, options?: ControlGroupSetOptions): boolean;
|
|
860
|
+
/** Read one alias value by name. */
|
|
861
|
+
get(name: StringKeyOf<TControls>): number;
|
|
862
|
+
/** Read every alias value. */
|
|
863
|
+
read(): Record<StringKeyOf<TControls>, number>;
|
|
864
|
+
/** Whether this group can currently write (no unresolved conflicts). */
|
|
865
|
+
canWrite(): boolean;
|
|
866
|
+
/** Release this group's actuator ownership. */
|
|
867
|
+
release(): void;
|
|
868
|
+
}
|
|
833
869
|
declare function useControlGroup<K extends Actuators>(group: ControlGroup<K>, options?: UseControlGroupOptions): ControlGroupHandle<K>;
|
|
870
|
+
declare function useControls<TControls extends ControlDefinitionMap>(definition: DefinedControls<TControls>, options?: UseControlGroupOptions): ControlsHandle<TControls>;
|
|
834
871
|
|
|
835
872
|
/**
|
|
836
873
|
* @license
|
|
@@ -1595,4 +1632,4 @@ interface CameraAnimationAPI {
|
|
|
1595
1632
|
*/
|
|
1596
1633
|
declare function useCameraAnimation(): CameraAnimationAPI;
|
|
1597
1634
|
|
|
1598
|
-
export { ActuatedJointInfo, ActuatorInfo, Actuators, type ApplyPolicyActionToControlsOptions, type ApplyPolicyActionToControlsResult, ArrayJointStateResult, Bodies, Body, BodyProps, BodyStateResult, type CameraAnimationAPI, CameraFrameCaptureAPI, CameraFrameCaptureOptions, CameraFrameCaptureSource, CameraFrameCaptureTensorOptions, type CameraFrameMountSelector, CameraFrameSequenceCamera, CameraFrameSequenceOptions, CameraFrameSequenceRecorderAPI, CameraFrameSequenceResult, CameraFrameTensorResult, type CameraStreamOptions, CameraView, type CameraViewProps, type CameraViewportOptions, Cameras, type ContactHistoryEntry, type ContactHistoryHandle, type ContactHistoryOptions, ContactInfo, ContactListener, ContactListenerProps, ContactMarkers, type ControlGroup, type ControlGroupHandle, ControlGroupInfo, ControlGroupSelector, type ControlGroupSetOptions, type ControlWriterConflict, type ControlWriterHandle, type ControlWriterOptions, type ControlWriterWriteOptions, type ControllerComponent, type ControllerOptions, type CreateMountedCameraFrameSequenceManifestOptions, type CreateMountedCameraFrameSequencePlanOptions, type CreatePolicyCameraFrameCapturePlanOptions, CtrlHandle, Debug, DebugProps, DragInteraction, DragInteractionProps, FlexRenderer, FrameCaptureAPI, FrameCaptureBlobResult, FrameCaptureOptions, FrameCaptureResult, FrameCaptureStatus, GenericIK, type GenericIKOptions, GeomInfo, Geoms, IkConfig, IkContextValue, IkGizmo, IkGizmoProps, ImagePointCoordinateSpace, ImagePointProjectionOptions, ImagePointProjectionResult, InstancedGeomRenderer, JointStateOptions, JointStateResult, Joints, KeyboardIkTargetConfig, KeyboardTeleopConfig, type MountedCameraFrameCaptureSource, type MountedCameraFrameSequenceCameraOptions, type MountedCameraFrameSequenceDefaults, type MountedCameraFrameSequenceManifest, MountedCameraFrameSequenceManifestStatus, type MountedCameraFrameSequencePlan, type MountedCameraFrameSequencePlanOptions, type MountedCameraFrameSequenceReadiness, MountedCameraFrameSequenceReadinessStatus, type MountedCameraFrameSequenceRecordOptions, type MountedCameraFrameSequenceRecordResult, type MountedCameraFrameSequenceRecorderTarget, type MountedCameraFrameSequenceSourceReadiness, type MountedCameraFrameSequenceStreamSummary, type MountedCameraFrameSourceSuggestion, MountedCameraFrameSourceSuggestionMatch, type MountedCameraSequencePlanOptions, type MountedCameraSequenceReadiness, type MountedCameraSequenceRecordOptions, type MountedCameraSequenceRecordResult, type MountedCameraSequenceRecorderAPI, type MountedPolicyCameraFrameCaptureAPI, type MountedPolicyCameraFrameCaptureOptions, type MountedPolicyCameraTensorOptions, MujocoCanvas, MujocoCanvasProps, MujocoContextValue, MujocoData, type MujocoLoader, type MujocoLoaderOptions, MujocoModel, MujocoModule, MujocoPhysics, type MujocoPhysicsProps, MujocoProvider, type MujocoProviderProps, MujocoSimAPI, MujocoSimProvider, type MujocoWasmVariant, type NamedCameraFrameResource, type NamedObservationField, type NamedObservationHandle, type NamedObservationInput, type NamedObservationLayoutItem, type NamedObservationMissing, type NamedObservationOptions, type NamedObservationResult, ObservationConfig, ObservationHandle, ObservationOutput, ObservationResult, PairedSplatEnvironmentConfig, PhysicsStepCallback, PlaybackState, PolicyAPI, PolicyCameraFrameCaptureAPI, PolicyCameraFrameCaptureOptions, type PolicyCameraFrameCapturePlan, PolicyCameraFrameCaptureResult, type PolicyCameraFrameCaptureTarget, type PolicyCameraFramePlanTarget, PolicyCameraFrameStream, type PolicyCameraFrameStreamOptions, type PolicyCameraTensorStream, type PolicyCameraTensorsAPI, type PolicyCameraTensorsOptions, type PolicyCameraTensorsResult, PolicyConfig, PolicyVector, type PoseReadout, type PoseResourceKind, ReadyCallbackInput, RemotePolicyAPI, RemotePolicyConfig, type ResolveMountedCameraFrameSourceOptions, type ResolvedMountedCameraFrameSource, ScalarJointStateResult, ScenarioLighting, ScenarioLightingPreset, ScenarioLightingProps, SceneConfig, SceneLights, SceneLightsProps, SelectionCallbackInput, SensorHandle, SensorInfo, Sensors, SitePositionResult, Sites, SplatCollisionPrimitive, SplatCollisionProxyConfig, type SplatCollisionProxyGeomPreview, type SplatCollisionProxyGeomsState, SplatCollisionProxyPreview, type SplatCollisionProxyPreviewProps, type SplatCollisionProxyPreviewStatus, type SplatCollisionProxyPreviewVector3, SplatEnvironment, SplatEnvironmentMetadata, SplatEnvironmentMetadataInput, SplatEnvironmentProps, SplatEnvironmentReadiness, SplatEnvironmentReadinessStatus, SplatFormat, SplatRendererKind, SplatSceneConfigInput, SplatSceneConfigState, SplatSceneInput, StepCallbackInput, TendonRenderer, TrajectoryFrame, TrajectoryInput, TrajectoryPlayer, TrajectoryPlayerProps, TrajectoryStateChangeInput, type UseControlGroupOptions, type UseSplatCollisionProxyGeomsOptions, VisualScenarioConfig, VisualScenarioEffects, VisualScenarioEffectsProps, VisualScenarioExecutionContext, VisualScenarioExecutionContextInput, applyPolicyActionToControls, bodyPositionField, buildObservation, canFetchSplatCollisionProxyXml, captureFrame, captureFrameBlob, capturePolicyCameraFrames, capturePolicyCameraFramesFromMountedStreams, clampPolicyActionValue, controlGroup, createContiguousControlGroup, createController, createControllerHook, createMountedCameraFrameSequenceManifest, createMountedCameraFrameSequencePlan, createMountedCameraFrameSequencePlanFromApi, createMountedCameraFrameSequenceReadiness, createMountedCameraFrameSourceSuggestions, createNamedObservationBuilder, createPairedSplatEnvironment, createPolicyCameraFrameCapturePlan, createPolicyCameraFrameCapturePlanFromApi, createSparkSplatViewerUrl, createSplatEnvironmentUserData, createSplatSceneConfig, createVisualScenarioExecutionContext, ctrlField, fetchSplatCollisionProxyXml, findActuatorByName, findBodyByName, findGeomByName, findJointByName, findKeyframeByName, findSensorByName, findSiteByName, findTendonByName, geomPositionField, getActuatedJoints, getCameraFrameCaptureSourceTarget, getControlMap, getMountedCameraFrameCaptureSource, getName, getScenarioBackground, getScenarioCameraPosition, getSplatEnvironmentReadiness, imagePointToNdc, isMountedCameraFrameCaptureSource, loadScene, parseSplatCollisionProxyGeoms, projectImagePointTo3D, qposField, qvelField, readNamedObservation, recordMountedCameraFrameSequence, resolveControlGroup, resolveMountedCameraFrameSource, sitePositionField, useActuators, useAfterPhysicsStep, useBeforePhysicsStep, useBodyMeshes, useBodyPose, useBodyState, useCameraAnimation, useCameraFrameCapture, useCameraSequenceRecorder, useCameraStream, useCameraViewport, useContactEvents, useContactHistory, useContacts, useControlGroup, useControlWriter, useCtrl, useCtrlNoise, useFrameCapture, useGamepad, useGeomPose, useGravityCompensation, useIkController, useJointState, useKeyboardIkTarget, useKeyboardTeleop, useMountedCameraSequenceRecorder, useMujoco, useMujocoWasm, useNamedObservation, useObservation, usePolicy, usePolicyCameraFrames, usePolicyCameraFramesFromMountedStreams, usePolicyCameraTensors, usePolicyCameraTensorsFromMountedStreams, useRemotePolicy, useSceneLights, useSelectionHighlight, useSensor, useSensors, useSitePose, useSitePosition, useSplatCollisionProxyGeoms, useSplatEnvironment, useSplatSceneConfig, useTrajectoryPlayer, useTrajectoryRecorder, useVideoRecorder, useVisualScenarioEffects, useVisualScenarioExecutionContext, withSplatEnvironment };
|
|
1635
|
+
export { ActuatedJointInfo, ActuatorInfo, Actuators, type ApplyPolicyActionToControlsOptions, type ApplyPolicyActionToControlsResult, ArrayJointStateResult, Bodies, Body, BodyProps, BodyStateResult, type CameraAnimationAPI, CameraFrameCaptureAPI, CameraFrameCaptureOptions, CameraFrameCaptureSource, CameraFrameCaptureTensorOptions, type CameraFrameMountSelector, CameraFrameSequenceCamera, CameraFrameSequenceOptions, CameraFrameSequenceRecorderAPI, CameraFrameSequenceResult, CameraFrameTensorResult, type CameraStreamOptions, CameraView, type CameraViewProps, type CameraViewportOptions, Cameras, type ContactHistoryEntry, type ContactHistoryHandle, type ContactHistoryOptions, ContactInfo, ContactListener, ContactListenerProps, ContactMarkers, type ControlGroup, type ControlGroupHandle, ControlGroupInfo, ControlGroupSelector, type ControlGroupSetOptions, type ControlWriterConflict, type ControlWriterHandle, type ControlWriterOptions, type ControlWriterWriteOptions, type ControllerComponent, type ControllerOptions, type ControlsHandle, type CreateMountedCameraFrameSequenceManifestOptions, type CreateMountedCameraFrameSequencePlanOptions, type CreatePolicyCameraFrameCapturePlanOptions, CtrlHandle, Debug, DebugProps, type DefinedControls, DragInteraction, DragInteractionProps, FlexRenderer, FrameCaptureAPI, FrameCaptureBlobResult, FrameCaptureOptions, FrameCaptureResult, FrameCaptureStatus, GenericIK, type GenericIKOptions, GeomInfo, Geoms, IkConfig, IkContextValue, IkGizmo, IkGizmoProps, ImagePointCoordinateSpace, ImagePointProjectionOptions, ImagePointProjectionResult, InstancedGeomRenderer, JointStateOptions, JointStateResult, Joints, KeyboardIkTargetConfig, KeyboardTeleopConfig, type MountedCameraFrameCaptureSource, type MountedCameraFrameSequenceCameraOptions, type MountedCameraFrameSequenceDefaults, type MountedCameraFrameSequenceManifest, MountedCameraFrameSequenceManifestStatus, type MountedCameraFrameSequencePlan, type MountedCameraFrameSequencePlanOptions, type MountedCameraFrameSequenceReadiness, MountedCameraFrameSequenceReadinessStatus, type MountedCameraFrameSequenceRecordOptions, type MountedCameraFrameSequenceRecordResult, type MountedCameraFrameSequenceRecorderTarget, type MountedCameraFrameSequenceSourceReadiness, type MountedCameraFrameSequenceStreamSummary, type MountedCameraFrameSourceSuggestion, MountedCameraFrameSourceSuggestionMatch, type MountedCameraSequencePlanOptions, type MountedCameraSequenceReadiness, type MountedCameraSequenceRecordOptions, type MountedCameraSequenceRecordResult, type MountedCameraSequenceRecorderAPI, type MountedPolicyCameraFrameCaptureAPI, type MountedPolicyCameraFrameCaptureOptions, type MountedPolicyCameraTensorOptions, MujocoCanvas, MujocoCanvasProps, MujocoContextValue, MujocoData, type MujocoLoader, type MujocoLoaderOptions, MujocoModel, MujocoModule, MujocoPhysics, type MujocoPhysicsProps, MujocoProvider, type MujocoProviderProps, MujocoSimAPI, MujocoSimProvider, type MujocoWasmVariant, type NamedCameraFrameResource, type NamedObservationField, type NamedObservationHandle, type NamedObservationInput, type NamedObservationLayoutItem, type NamedObservationMissing, type NamedObservationOptions, type NamedObservationResult, ObservationConfig, ObservationHandle, ObservationOutput, ObservationResult, PairedSplatEnvironmentConfig, PhysicsStepCallback, PlaybackState, PolicyAPI, PolicyCameraFrameCaptureAPI, PolicyCameraFrameCaptureOptions, type PolicyCameraFrameCapturePlan, PolicyCameraFrameCaptureResult, type PolicyCameraFrameCaptureTarget, type PolicyCameraFramePlanTarget, PolicyCameraFrameStream, type PolicyCameraFrameStreamOptions, type PolicyCameraTensorStream, type PolicyCameraTensorsAPI, type PolicyCameraTensorsOptions, type PolicyCameraTensorsResult, PolicyConfig, PolicyVector, type PoseReadout, type PoseResourceKind, ReadyCallbackInput, RemotePolicyAPI, RemotePolicyConfig, type ResolveMountedCameraFrameSourceOptions, type ResolvedMountedCameraFrameSource, ScalarJointStateResult, ScenarioLighting, ScenarioLightingPreset, ScenarioLightingProps, SceneConfig, SceneLights, SceneLightsProps, SelectionCallbackInput, SensorHandle, SensorInfo, Sensors, SitePositionResult, Sites, SplatCollisionPrimitive, SplatCollisionProxyConfig, type SplatCollisionProxyGeomPreview, type SplatCollisionProxyGeomsState, SplatCollisionProxyPreview, type SplatCollisionProxyPreviewProps, type SplatCollisionProxyPreviewStatus, type SplatCollisionProxyPreviewVector3, SplatEnvironment, SplatEnvironmentMetadata, SplatEnvironmentMetadataInput, SplatEnvironmentProps, SplatEnvironmentReadiness, SplatEnvironmentReadinessStatus, SplatFormat, SplatRendererKind, SplatSceneConfigInput, SplatSceneConfigState, SplatSceneInput, StepCallbackInput, TendonRenderer, TrajectoryFrame, TrajectoryInput, TrajectoryPlayer, TrajectoryPlayerProps, TrajectoryStateChangeInput, type UseControlGroupOptions, type UseSplatCollisionProxyGeomsOptions, VisualScenarioConfig, VisualScenarioEffects, VisualScenarioEffectsProps, VisualScenarioExecutionContext, VisualScenarioExecutionContextInput, applyPolicyActionToControls, bodyPositionField, buildObservation, canFetchSplatCollisionProxyXml, captureFrame, captureFrameBlob, capturePolicyCameraFrames, capturePolicyCameraFramesFromMountedStreams, clampPolicyActionValue, controlGroup, createContiguousControlGroup, createController, createControllerHook, createMountedCameraFrameSequenceManifest, createMountedCameraFrameSequencePlan, createMountedCameraFrameSequencePlanFromApi, createMountedCameraFrameSequenceReadiness, createMountedCameraFrameSourceSuggestions, createNamedObservationBuilder, createPairedSplatEnvironment, createPolicyCameraFrameCapturePlan, createPolicyCameraFrameCapturePlanFromApi, createSparkSplatViewerUrl, createSplatEnvironmentUserData, createSplatSceneConfig, createVisualScenarioExecutionContext, ctrlField, defineControls, fetchSplatCollisionProxyXml, findActuatorByName, findBodyByName, findGeomByName, findJointByName, findKeyframeByName, findSensorByName, findSiteByName, findTendonByName, geomPositionField, getActuatedJoints, getCameraFrameCaptureSourceTarget, getControlMap, getMountedCameraFrameCaptureSource, getName, getScenarioBackground, getScenarioCameraPosition, getSplatEnvironmentReadiness, imagePointToNdc, isMountedCameraFrameCaptureSource, loadScene, parseSplatCollisionProxyGeoms, projectImagePointTo3D, qposField, qvelField, readNamedObservation, recordMountedCameraFrameSequence, resolveControlGroup, resolveMountedCameraFrameSource, sitePositionField, useActuators, useAfterPhysicsStep, useBeforePhysicsStep, useBodyMeshes, useBodyPose, useBodyState, useCameraAnimation, useCameraFrameCapture, useCameraSequenceRecorder, useCameraStream, useCameraViewport, useContactEvents, useContactHistory, useContacts, useControlGroup, useControlWriter, useControls, useCtrl, useCtrlNoise, useFrameCapture, useGamepad, useGeomPose, useGravityCompensation, useIkController, useJointState, useKeyboardIkTarget, useKeyboardTeleop, useMountedCameraSequenceRecorder, useMujoco, useMujocoWasm, useNamedObservation, useObservation, usePolicy, usePolicyCameraFrames, usePolicyCameraFramesFromMountedStreams, usePolicyCameraTensors, usePolicyCameraTensorsFromMountedStreams, useRemotePolicy, useSceneLights, useSelectionHighlight, useSensor, useSensors, useSitePose, useSitePosition, useSplatCollisionProxyGeoms, useSplatEnvironment, useSplatSceneConfig, useTrajectoryPlayer, useTrajectoryRecorder, useVideoRecorder, useVisualScenarioEffects, useVisualScenarioExecutionContext, withSplatEnvironment };
|
package/dist/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { withContacts, getContact, captureCameraFrame, captureCameraFrameBlob, createCameraFrameCaptureSession, CAMERA_FRAME_CAPTURE_PRE_RENDER_USER_DATA_KEY, CAPTURE_EXCLUDE_KEY, createCaptureCamera, prepareCaptureCamera } from './chunk-
|
|
2
|
-
export { CAMERA_FRAME_CAPTURE_PRE_RENDER_USER_DATA_KEY, CAMERA_FRAME_CAPTURE_RENDER_USER_DATA_KEY, CAPTURE_EXCLUDE_KEY, ModelActuators, ModelBodies, ModelCameras, ModelGeoms, ModelJoints, ModelKeyframes, ModelResources, ModelSensors, ModelSites, ScenarioLighting, SplatEnvironment, SplatEnvironmentReadinessStatus, VisualScenarioEffects, captureCameraFrame, captureCameraFrameBlob, captureCameraFrameTensor, createCameraFrameCaptureSession, createPairedSplatEnvironment, createSparkSplatViewerUrl, createSplatEnvironmentUserData, createSplatSceneConfig, createVisualScenarioExecutionContext, dataUrlToPolicyImageTensor, getContact, getScenarioBackground, getScenarioCameraPosition, getSplatEnvironmentReadiness, imageDataToPolicyImageTensor, pixelsToPolicyImageTensor, registerModelResources, renderCameraFrameToCanvas, useSplatEnvironment, useSplatSceneConfig, useVisualScenarioEffects, useVisualScenarioExecutionContext, withSplatEnvironment } from './chunk-
|
|
1
|
+
import { withContacts, getContact, captureCameraFrame, captureCameraFrameBlob, createCameraFrameCaptureSession, CAMERA_FRAME_CAPTURE_PRE_RENDER_USER_DATA_KEY, CAPTURE_EXCLUDE_KEY, createCaptureCamera, prepareCaptureCamera } from './chunk-5WFYM73E.js';
|
|
2
|
+
export { CAMERA_FRAME_CAPTURE_PRE_RENDER_USER_DATA_KEY, CAMERA_FRAME_CAPTURE_RENDER_USER_DATA_KEY, CAPTURE_EXCLUDE_KEY, ModelActuators, ModelBodies, ModelCameras, ModelGeoms, ModelJoints, ModelKeyframes, ModelResources, ModelSensors, ModelSites, ScenarioLighting, SplatEnvironment, SplatEnvironmentReadinessStatus, VisualScenarioEffects, captureCameraFrame, captureCameraFrameBlob, captureCameraFrameTensor, createCameraFrameCaptureSession, createPairedSplatEnvironment, createSparkSplatViewerUrl, createSplatEnvironmentUserData, createSplatSceneConfig, createVisualScenarioExecutionContext, dataUrlToPolicyImageTensor, getContact, getScenarioBackground, getScenarioCameraPosition, getSplatEnvironmentReadiness, imageDataToPolicyImageTensor, pixelsToPolicyImageTensor, registerModelResources, renderCameraFrameToCanvas, useSplatEnvironment, useSplatSceneConfig, useVisualScenarioEffects, useVisualScenarioExecutionContext, withSplatEnvironment } from './chunk-5WFYM73E.js';
|
|
3
3
|
import loadMujoco from '@mujoco/mujoco';
|
|
4
4
|
import defaultMujocoWasmUrl from '@mujoco/mujoco/mujoco.wasm?url';
|
|
5
5
|
import { createContext, forwardRef, useRef, useEffect, useContext, useState, useCallback, useMemo, useLayoutEffect, useId } from 'react';
|
|
@@ -1001,14 +1001,34 @@ var GeomBuilder = class {
|
|
|
1001
1001
|
const vNum = mjModel.mesh_vertnum[mId];
|
|
1002
1002
|
const fAdr = mjModel.mesh_faceadr[mId];
|
|
1003
1003
|
const fNum = mjModel.mesh_facenum[mId];
|
|
1004
|
-
|
|
1005
|
-
|
|
1006
|
-
|
|
1007
|
-
|
|
1008
|
-
|
|
1009
|
-
|
|
1004
|
+
const tAdr = mjModel.mesh_texcoordadr?.[mId] ?? -1;
|
|
1005
|
+
if (map && tAdr >= 0 && mjModel.mesh_texcoord && mjModel.mesh_facetexcoord) {
|
|
1006
|
+
const corners = fNum * 3;
|
|
1007
|
+
const positions = new Float32Array(corners * 3);
|
|
1008
|
+
const uvs = new Float32Array(corners * 2);
|
|
1009
|
+
for (let c = 0; c < corners; c++) {
|
|
1010
|
+
const v = vAdr + mjModel.mesh_face[fAdr * 3 + c];
|
|
1011
|
+
positions[c * 3] = mjModel.mesh_vert[v * 3];
|
|
1012
|
+
positions[c * 3 + 1] = mjModel.mesh_vert[v * 3 + 1];
|
|
1013
|
+
positions[c * 3 + 2] = mjModel.mesh_vert[v * 3 + 2];
|
|
1014
|
+
const t = tAdr + mjModel.mesh_facetexcoord[fAdr * 3 + c];
|
|
1015
|
+
uvs[c * 2] = mjModel.mesh_texcoord[t * 2];
|
|
1016
|
+
uvs[c * 2 + 1] = 1 - mjModel.mesh_texcoord[t * 2 + 1];
|
|
1017
|
+
}
|
|
1018
|
+
geo = new THREE11.BufferGeometry();
|
|
1019
|
+
geo.setAttribute("position", new THREE11.Float32BufferAttribute(positions, 3));
|
|
1020
|
+
geo.setAttribute("uv", new THREE11.Float32BufferAttribute(uvs, 2));
|
|
1021
|
+
geo.computeVertexNormals();
|
|
1022
|
+
} else {
|
|
1023
|
+
geo = new THREE11.BufferGeometry();
|
|
1024
|
+
geo.setAttribute("position", new THREE11.Float32BufferAttribute(mjModel.mesh_vert.subarray(vAdr * 3, (vAdr + vNum) * 3), 3));
|
|
1025
|
+
geo.setIndex(Array.from(mjModel.mesh_face.subarray(fAdr * 3, (fAdr + fNum) * 3)));
|
|
1026
|
+
const smoothingTolerance = this.getMeshNormalSmoothingTolerance();
|
|
1027
|
+
if (smoothingTolerance !== null) {
|
|
1028
|
+
geo = mergeVertices(geo, smoothingTolerance);
|
|
1029
|
+
}
|
|
1030
|
+
geo.computeVertexNormals();
|
|
1010
1031
|
}
|
|
1011
|
-
geo.computeVertexNormals();
|
|
1012
1032
|
}
|
|
1013
1033
|
if (geo) {
|
|
1014
1034
|
const isPlane = type === getVal(MG.mjGEOM_PLANE);
|
|
@@ -1051,6 +1071,7 @@ function SceneRenderer({ renderOptions, ...props }) {
|
|
|
1051
1071
|
mujocoRef,
|
|
1052
1072
|
onSelectionRef,
|
|
1053
1073
|
hiddenBodiesRef,
|
|
1074
|
+
hiddenBodiesVersion,
|
|
1054
1075
|
interpolateRef,
|
|
1055
1076
|
interpolationStateRef,
|
|
1056
1077
|
status
|
|
@@ -1059,6 +1080,7 @@ function SceneRenderer({ renderOptions, ...props }) {
|
|
|
1059
1080
|
const bodyRefs = useRef([]);
|
|
1060
1081
|
const prevModelRef = useRef(null);
|
|
1061
1082
|
const prevRenderOptionsKeyRef = useRef(null);
|
|
1083
|
+
const prevHiddenVersionRef = useRef(null);
|
|
1062
1084
|
const renderOptionsKey = getRenderOptionsKey(renderOptions);
|
|
1063
1085
|
const geomBuilder = useMemo(() => {
|
|
1064
1086
|
if (status !== "ready") return null;
|
|
@@ -1069,11 +1091,12 @@ function SceneRenderer({ renderOptions, ...props }) {
|
|
|
1069
1091
|
const model = mjModelRef.current;
|
|
1070
1092
|
const group = groupRef.current;
|
|
1071
1093
|
if (!model || !group) return;
|
|
1072
|
-
if (prevModelRef.current === model && prevRenderOptionsKeyRef.current === renderOptionsKey) {
|
|
1094
|
+
if (prevModelRef.current === model && prevRenderOptionsKeyRef.current === renderOptionsKey && prevHiddenVersionRef.current === hiddenBodiesVersion) {
|
|
1073
1095
|
return;
|
|
1074
1096
|
}
|
|
1075
1097
|
prevModelRef.current = model;
|
|
1076
1098
|
prevRenderOptionsKeyRef.current = renderOptionsKey;
|
|
1099
|
+
prevHiddenVersionRef.current = hiddenBodiesVersion;
|
|
1077
1100
|
while (group.children.length > 0) {
|
|
1078
1101
|
group.remove(group.children[0]);
|
|
1079
1102
|
}
|
|
@@ -1094,7 +1117,7 @@ function SceneRenderer({ renderOptions, ...props }) {
|
|
|
1094
1117
|
refs.push(bodyGroup);
|
|
1095
1118
|
}
|
|
1096
1119
|
bodyRefs.current = refs;
|
|
1097
|
-
}, [status, geomBuilder, mjModelRef, renderOptionsKey]);
|
|
1120
|
+
}, [status, geomBuilder, mjModelRef, renderOptionsKey, hiddenBodiesRef, hiddenBodiesVersion]);
|
|
1098
1121
|
const syncBodiesToData = useCallback(() => {
|
|
1099
1122
|
const data = mjDataRef.current;
|
|
1100
1123
|
if (!data) return;
|
|
@@ -2275,6 +2298,7 @@ function MujocoSimProvider({
|
|
|
2275
2298
|
speed,
|
|
2276
2299
|
interpolate,
|
|
2277
2300
|
renderOptions,
|
|
2301
|
+
hiddenBodies,
|
|
2278
2302
|
children
|
|
2279
2303
|
}) {
|
|
2280
2304
|
const { gl, camera, scene } = useThree();
|
|
@@ -2308,6 +2332,8 @@ function MujocoSimProvider({
|
|
|
2308
2332
|
const errorRef = useRef(null);
|
|
2309
2333
|
const bodyRegistryRef = useRef(/* @__PURE__ */ new Map());
|
|
2310
2334
|
const hiddenBodiesRef = useRef(/* @__PURE__ */ new Set());
|
|
2335
|
+
const providedHiddenBodiesRef = useRef(new Set(hiddenBodies ?? []));
|
|
2336
|
+
const [hiddenBodiesVersion, setHiddenBodiesVersion] = useState(0);
|
|
2311
2337
|
const bodyReloadTimerRef = useRef(null);
|
|
2312
2338
|
configRef.current = config;
|
|
2313
2339
|
mujocoRef.current = mujoco;
|
|
@@ -2329,15 +2355,37 @@ function MujocoSimProvider({
|
|
|
2329
2355
|
if (!model?.opt) return;
|
|
2330
2356
|
model.opt.timestep = timestep;
|
|
2331
2357
|
}, [timestep]);
|
|
2358
|
+
const hiddenBodiesKey = (hiddenBodies ?? []).join("\0");
|
|
2359
|
+
useEffect(() => {
|
|
2360
|
+
const next = new Set(hiddenBodies ?? []);
|
|
2361
|
+
const prev = providedHiddenBodiesRef.current;
|
|
2362
|
+
let unchanged = next.size === prev.size;
|
|
2363
|
+
if (unchanged) {
|
|
2364
|
+
for (const name of next) {
|
|
2365
|
+
if (!prev.has(name)) {
|
|
2366
|
+
unchanged = false;
|
|
2367
|
+
break;
|
|
2368
|
+
}
|
|
2369
|
+
}
|
|
2370
|
+
}
|
|
2371
|
+
if (unchanged) return;
|
|
2372
|
+
providedHiddenBodiesRef.current = next;
|
|
2373
|
+
recomputeHiddenBodies();
|
|
2374
|
+
setHiddenBodiesVersion((v) => v + 1);
|
|
2375
|
+
}, [hiddenBodiesKey]);
|
|
2376
|
+
function recomputeHiddenBodies() {
|
|
2377
|
+
hiddenBodiesRef.current.clear();
|
|
2378
|
+
for (const [name, entry] of bodyRegistryRef.current) {
|
|
2379
|
+
if (entry.hasCustomChildren) hiddenBodiesRef.current.add(name);
|
|
2380
|
+
}
|
|
2381
|
+
for (const name of providedHiddenBodiesRef.current) hiddenBodiesRef.current.add(name);
|
|
2382
|
+
}
|
|
2332
2383
|
function buildMergedConfig(baseConfig) {
|
|
2384
|
+
recomputeHiddenBodies();
|
|
2333
2385
|
if (bodyRegistryRef.current.size === 0) return baseConfig;
|
|
2334
2386
|
const registeredNames = new Set(bodyRegistryRef.current.keys());
|
|
2335
2387
|
const baseObjects = (baseConfig.sceneObjects ?? []).filter((o) => !registeredNames.has(o.name));
|
|
2336
2388
|
const registeredBodies = Array.from(bodyRegistryRef.current.values()).map((e) => e.definition);
|
|
2337
|
-
hiddenBodiesRef.current.clear();
|
|
2338
|
-
for (const [name, entry] of bodyRegistryRef.current) {
|
|
2339
|
-
if (entry.hasCustomChildren) hiddenBodiesRef.current.add(name);
|
|
2340
|
-
}
|
|
2341
2389
|
return { ...baseConfig, sceneObjects: [...baseObjects, ...registeredBodies] };
|
|
2342
2390
|
}
|
|
2343
2391
|
useEffect(() => {
|
|
@@ -3555,10 +3603,11 @@ function MujocoSimProvider({
|
|
|
3555
3603
|
errorRef,
|
|
3556
3604
|
bodyRegistryRef,
|
|
3557
3605
|
hiddenBodiesRef,
|
|
3606
|
+
hiddenBodiesVersion,
|
|
3558
3607
|
requestBodyReload,
|
|
3559
3608
|
status
|
|
3560
3609
|
}),
|
|
3561
|
-
[api, status, requestBodyReload]
|
|
3610
|
+
[api, status, requestBodyReload, hiddenBodiesVersion]
|
|
3562
3611
|
);
|
|
3563
3612
|
return /* @__PURE__ */ jsxs(MujocoSimContext.Provider, { value: contextValue, children: [
|
|
3564
3613
|
/* @__PURE__ */ jsx(SceneRenderer, { renderOptions }),
|
|
@@ -3580,6 +3629,7 @@ var MujocoCanvas = forwardRef(
|
|
|
3580
3629
|
speed,
|
|
3581
3630
|
interpolate,
|
|
3582
3631
|
renderOptions,
|
|
3632
|
+
hiddenBodies,
|
|
3583
3633
|
loadingFallback,
|
|
3584
3634
|
children,
|
|
3585
3635
|
...canvasProps
|
|
@@ -3615,6 +3665,7 @@ var MujocoCanvas = forwardRef(
|
|
|
3615
3665
|
speed,
|
|
3616
3666
|
interpolate,
|
|
3617
3667
|
renderOptions,
|
|
3668
|
+
hiddenBodies,
|
|
3618
3669
|
children
|
|
3619
3670
|
}
|
|
3620
3671
|
) });
|
|
@@ -4058,7 +4109,16 @@ var useIkController = createControllerHook(
|
|
|
4058
4109
|
const ikTargetRef = useRef(new THREE11.Group());
|
|
4059
4110
|
const siteIdRef = useRef(-1);
|
|
4060
4111
|
const controlGroupRef = useRef(null);
|
|
4061
|
-
const genericIkRef = useRef(
|
|
4112
|
+
const genericIkRef = useRef(null);
|
|
4113
|
+
const genericIkModuleRef = useRef(null);
|
|
4114
|
+
const getGenericIk = useCallback(() => {
|
|
4115
|
+
const module = mujocoRef.current;
|
|
4116
|
+
if (!genericIkRef.current || genericIkModuleRef.current !== module) {
|
|
4117
|
+
genericIkRef.current = new GenericIK(module);
|
|
4118
|
+
genericIkModuleRef.current = module;
|
|
4119
|
+
}
|
|
4120
|
+
return genericIkRef.current;
|
|
4121
|
+
}, [mujocoRef]);
|
|
4062
4122
|
const firstIkEnableRef = useRef(true);
|
|
4063
4123
|
const needsInitialSync = useRef(true);
|
|
4064
4124
|
const gizmoAnimRef = useRef({
|
|
@@ -4109,7 +4169,7 @@ var useIkController = createControllerHook(
|
|
|
4109
4169
|
const data = mjDataRef.current;
|
|
4110
4170
|
const controlGroup2 = controlGroupRef.current;
|
|
4111
4171
|
if (!model || !data || !controlGroup2 || siteIdRef.current === -1) return null;
|
|
4112
|
-
return
|
|
4172
|
+
return getGenericIk().solve(
|
|
4113
4173
|
model,
|
|
4114
4174
|
data,
|
|
4115
4175
|
siteIdRef.current,
|
|
@@ -4128,7 +4188,7 @@ var useIkController = createControllerHook(
|
|
|
4128
4188
|
}
|
|
4129
4189
|
);
|
|
4130
4190
|
},
|
|
4131
|
-
[config, mjModelRef, mjDataRef]
|
|
4191
|
+
[config, mjModelRef, mjDataRef, getGenericIk]
|
|
4132
4192
|
);
|
|
4133
4193
|
const ikSolveFnRef = useRef(ikSolveFn);
|
|
4134
4194
|
ikSolveFnRef.current = ikSolveFn;
|
|
@@ -6759,19 +6819,35 @@ function useControlWriter(options) {
|
|
|
6759
6819
|
}
|
|
6760
6820
|
|
|
6761
6821
|
// src/hooks/useControlGroup.ts
|
|
6822
|
+
function objectKeys(value) {
|
|
6823
|
+
return Object.keys(value);
|
|
6824
|
+
}
|
|
6825
|
+
function singleControlValue(name, value) {
|
|
6826
|
+
const values = {};
|
|
6827
|
+
values[name] = value;
|
|
6828
|
+
return values;
|
|
6829
|
+
}
|
|
6762
6830
|
function controlGroup(names) {
|
|
6763
6831
|
return { keys: names };
|
|
6764
6832
|
}
|
|
6833
|
+
function defineControls(controls) {
|
|
6834
|
+
const aliases = objectKeys(controls);
|
|
6835
|
+
return {
|
|
6836
|
+
controls,
|
|
6837
|
+
aliases,
|
|
6838
|
+
keys: aliases.map((alias) => controls[alias])
|
|
6839
|
+
};
|
|
6840
|
+
}
|
|
6765
6841
|
function useControlGroup(group, options = {}) {
|
|
6766
6842
|
const generatedOwner = useId();
|
|
6767
|
-
const owner = options.owner ?? `control-group:${generatedOwner}`;
|
|
6843
|
+
const owner = options.owner ?? options.label ?? `control-group:${generatedOwner}`;
|
|
6768
6844
|
const { mjModelRef, mjDataRef, status } = useMujocoContext();
|
|
6769
6845
|
const names = group.keys;
|
|
6770
6846
|
const namesRef = useRef(names);
|
|
6771
6847
|
namesRef.current = names;
|
|
6772
6848
|
const namesKey = names.join("\0");
|
|
6773
6849
|
const selector = useMemo(
|
|
6774
|
-
() => ({ actuators:
|
|
6850
|
+
() => ({ actuators: names }),
|
|
6775
6851
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
6776
6852
|
[namesKey]
|
|
6777
6853
|
);
|
|
@@ -6791,15 +6867,15 @@ function useControlGroup(group, options = {}) {
|
|
|
6791
6867
|
return id;
|
|
6792
6868
|
});
|
|
6793
6869
|
}, [mjModelRef, status, namesKey]);
|
|
6794
|
-
const
|
|
6870
|
+
const patch = useCallback(
|
|
6795
6871
|
(values, setOptions = {}) => {
|
|
6796
6872
|
const data = mjDataRef.current;
|
|
6797
6873
|
if (!data) return false;
|
|
6798
6874
|
if (!setOptions.force && !canWrite()) return false;
|
|
6799
6875
|
const groupNames = namesRef.current;
|
|
6800
6876
|
const indices = indicesRef.current;
|
|
6801
|
-
for (
|
|
6802
|
-
const value = values[
|
|
6877
|
+
for (const [i, name] of groupNames.entries()) {
|
|
6878
|
+
const value = values[name];
|
|
6803
6879
|
if (value === void 0) continue;
|
|
6804
6880
|
const adr = indices[i];
|
|
6805
6881
|
if (adr >= 0) data.ctrl[adr] = value;
|
|
@@ -6808,20 +6884,87 @@ function useControlGroup(group, options = {}) {
|
|
|
6808
6884
|
},
|
|
6809
6885
|
[canWrite, mjDataRef]
|
|
6810
6886
|
);
|
|
6887
|
+
const write = useCallback(
|
|
6888
|
+
(values, setOptions = {}) => {
|
|
6889
|
+
const data = mjDataRef.current;
|
|
6890
|
+
if (!data) return false;
|
|
6891
|
+
if (!setOptions.force && !canWrite()) return false;
|
|
6892
|
+
const groupNames = namesRef.current;
|
|
6893
|
+
const indices = indicesRef.current;
|
|
6894
|
+
for (let i = 0; i < Math.min(groupNames.length, values.length); i += 1) {
|
|
6895
|
+
const adr = indices[i];
|
|
6896
|
+
if (adr >= 0) data.ctrl[adr] = values[i];
|
|
6897
|
+
}
|
|
6898
|
+
return true;
|
|
6899
|
+
},
|
|
6900
|
+
[canWrite, mjDataRef]
|
|
6901
|
+
);
|
|
6902
|
+
const set = useCallback(
|
|
6903
|
+
(name, value, setOptions) => patch(singleControlValue(name, value), setOptions),
|
|
6904
|
+
[patch]
|
|
6905
|
+
);
|
|
6811
6906
|
const read = useCallback(() => {
|
|
6812
6907
|
const data = mjDataRef.current;
|
|
6813
6908
|
const groupNames = namesRef.current;
|
|
6814
6909
|
const indices = indicesRef.current;
|
|
6815
6910
|
const result = {};
|
|
6816
|
-
for (
|
|
6911
|
+
for (const [i, name] of groupNames.entries()) {
|
|
6817
6912
|
const adr = indices[i];
|
|
6818
|
-
result[
|
|
6913
|
+
result[name] = data && adr >= 0 ? data.ctrl[adr] ?? 0 : 0;
|
|
6819
6914
|
}
|
|
6820
6915
|
return result;
|
|
6821
6916
|
}, [mjDataRef]);
|
|
6917
|
+
const get = useCallback((name) => read()[name], [read]);
|
|
6822
6918
|
return useMemo(
|
|
6823
|
-
() => ({ owner, set, read, canWrite, release }),
|
|
6824
|
-
[owner, set, read, canWrite, release]
|
|
6919
|
+
() => ({ owner, set, patch, write, get, read, canWrite, release }),
|
|
6920
|
+
[owner, set, patch, write, get, read, canWrite, release]
|
|
6921
|
+
);
|
|
6922
|
+
}
|
|
6923
|
+
function useControls(definition, options = {}) {
|
|
6924
|
+
const group = useControlGroup(controlGroup(definition.keys), options);
|
|
6925
|
+
const controlsRef = useRef(definition.controls);
|
|
6926
|
+
const aliasesRef = useRef(definition.aliases);
|
|
6927
|
+
controlsRef.current = definition.controls;
|
|
6928
|
+
aliasesRef.current = definition.aliases;
|
|
6929
|
+
const set = useCallback(
|
|
6930
|
+
(name, value, setOptions) => group.set(controlsRef.current[name], value, setOptions),
|
|
6931
|
+
[group]
|
|
6932
|
+
);
|
|
6933
|
+
const patch = useCallback(
|
|
6934
|
+
(values, setOptions) => {
|
|
6935
|
+
const next = {};
|
|
6936
|
+
for (const alias of aliasesRef.current) {
|
|
6937
|
+
const value = values[alias];
|
|
6938
|
+
if (value !== void 0) next[controlsRef.current[alias]] = value;
|
|
6939
|
+
}
|
|
6940
|
+
return group.patch(next, setOptions);
|
|
6941
|
+
},
|
|
6942
|
+
[group]
|
|
6943
|
+
);
|
|
6944
|
+
const get = useCallback(
|
|
6945
|
+
(name) => group.get(controlsRef.current[name]),
|
|
6946
|
+
[group]
|
|
6947
|
+
);
|
|
6948
|
+
const read = useCallback(() => {
|
|
6949
|
+
const values = group.read();
|
|
6950
|
+
const result = {};
|
|
6951
|
+
for (const alias of aliasesRef.current) {
|
|
6952
|
+
result[alias] = values[controlsRef.current[alias]] ?? 0;
|
|
6953
|
+
}
|
|
6954
|
+
return result;
|
|
6955
|
+
}, [group]);
|
|
6956
|
+
return useMemo(
|
|
6957
|
+
() => ({
|
|
6958
|
+
owner: group.owner,
|
|
6959
|
+
set,
|
|
6960
|
+
patch,
|
|
6961
|
+
write: group.write,
|
|
6962
|
+
get,
|
|
6963
|
+
read,
|
|
6964
|
+
canWrite: group.canWrite,
|
|
6965
|
+
release: group.release
|
|
6966
|
+
}),
|
|
6967
|
+
[group, set, patch, get, read]
|
|
6825
6968
|
);
|
|
6826
6969
|
}
|
|
6827
6970
|
var geomNameCacheByModel2 = /* @__PURE__ */ new WeakMap();
|
|
@@ -8846,6 +8989,6 @@ function useCameraAnimation() {
|
|
|
8846
8989
|
* useCameraAnimation — composable camera animation hook.
|
|
8847
8990
|
*/
|
|
8848
8991
|
|
|
8849
|
-
export { Body, CameraView, ContactListener, ContactMarkers, Debug, DragInteraction, FlexRenderer, GenericIK, IkGizmo, InstancedGeomRenderer, MountedCameraFrameSequenceManifestStatus, MountedCameraFrameSequenceReadinessStatus, MountedCameraFrameSourceSuggestionMatch, MujocoCanvas, MujocoPhysics, MujocoProvider, MujocoSimProvider, SceneLights, SplatCollisionProxyPreview, TendonRenderer, TrajectoryPlayer, applyPolicyActionToControls, bodyPositionField, buildObservation, canFetchSplatCollisionProxyXml, captureFrame, captureFrameBlob, capturePolicyCameraFrames, capturePolicyCameraFramesFromMountedStreams, clampPolicyActionValue, controlGroup, createContiguousControlGroup, createController, createControllerHook, createMountedCameraFrameSequenceManifest, createMountedCameraFrameSequencePlan, createMountedCameraFrameSequencePlanFromApi, createMountedCameraFrameSequenceReadiness, createMountedCameraFrameSourceSuggestions, createNamedObservationBuilder, createPolicyCameraFrameCapturePlan, createPolicyCameraFrameCapturePlanFromApi, ctrlField, fetchSplatCollisionProxyXml, findActuatorByName, findBodyByName, findGeomByName, findJointByName, findKeyframeByName, findSensorByName, findSiteByName, findTendonByName, geomPositionField, getActuatedJoints, getCameraFrameCaptureSourceTarget, getControlMap, getMountedCameraFrameCaptureSource, getName, imagePointToNdc, isMountedCameraFrameCaptureSource, loadScene, parseSplatCollisionProxyGeoms, projectImagePointTo3D, qposField, qvelField, readNamedObservation, recordMountedCameraFrameSequence, resolveControlGroup, resolveMountedCameraFrameSource, sitePositionField, useActuators, useAfterPhysicsStep, useBeforePhysicsStep, useBodyMeshes, useBodyPose, useBodyState, useCameraAnimation, useCameraFrameCapture, useCameraSequenceRecorder, useCameraStream, useCameraViewport, useContactEvents, useContactHistory, useContacts, useControlGroup, useControlWriter, useCtrl, useCtrlNoise, useFrameCapture, useGamepad, useGeomPose, useGravityCompensation, useIkController, useJointState, useKeyboardIkTarget, useKeyboardTeleop, useMountedCameraSequenceRecorder, useMujoco, useMujocoWasm, useNamedObservation, useObservation, usePolicy, usePolicyCameraFrames, usePolicyCameraFramesFromMountedStreams, usePolicyCameraTensors, usePolicyCameraTensorsFromMountedStreams, useRemotePolicy, useSceneLights, useSelectionHighlight, useSensor, useSensors, useSitePose, useSitePosition, useSplatCollisionProxyGeoms, useTrajectoryPlayer, useTrajectoryRecorder, useVideoRecorder };
|
|
8992
|
+
export { Body, CameraView, ContactListener, ContactMarkers, Debug, DragInteraction, FlexRenderer, GenericIK, IkGizmo, InstancedGeomRenderer, MountedCameraFrameSequenceManifestStatus, MountedCameraFrameSequenceReadinessStatus, MountedCameraFrameSourceSuggestionMatch, MujocoCanvas, MujocoPhysics, MujocoProvider, MujocoSimProvider, SceneLights, SplatCollisionProxyPreview, TendonRenderer, TrajectoryPlayer, applyPolicyActionToControls, bodyPositionField, buildObservation, canFetchSplatCollisionProxyXml, captureFrame, captureFrameBlob, capturePolicyCameraFrames, capturePolicyCameraFramesFromMountedStreams, clampPolicyActionValue, controlGroup, createContiguousControlGroup, createController, createControllerHook, createMountedCameraFrameSequenceManifest, createMountedCameraFrameSequencePlan, createMountedCameraFrameSequencePlanFromApi, createMountedCameraFrameSequenceReadiness, createMountedCameraFrameSourceSuggestions, createNamedObservationBuilder, createPolicyCameraFrameCapturePlan, createPolicyCameraFrameCapturePlanFromApi, ctrlField, defineControls, fetchSplatCollisionProxyXml, findActuatorByName, findBodyByName, findGeomByName, findJointByName, findKeyframeByName, findSensorByName, findSiteByName, findTendonByName, geomPositionField, getActuatedJoints, getCameraFrameCaptureSourceTarget, getControlMap, getMountedCameraFrameCaptureSource, getName, imagePointToNdc, isMountedCameraFrameCaptureSource, loadScene, parseSplatCollisionProxyGeoms, projectImagePointTo3D, qposField, qvelField, readNamedObservation, recordMountedCameraFrameSequence, resolveControlGroup, resolveMountedCameraFrameSource, sitePositionField, useActuators, useAfterPhysicsStep, useBeforePhysicsStep, useBodyMeshes, useBodyPose, useBodyState, useCameraAnimation, useCameraFrameCapture, useCameraSequenceRecorder, useCameraStream, useCameraViewport, useContactEvents, useContactHistory, useContacts, useControlGroup, useControlWriter, useControls, useCtrl, useCtrlNoise, useFrameCapture, useGamepad, useGeomPose, useGravityCompensation, useIkController, useJointState, useKeyboardIkTarget, useKeyboardTeleop, useMountedCameraSequenceRecorder, useMujoco, useMujocoWasm, useNamedObservation, useObservation, usePolicy, usePolicyCameraFrames, usePolicyCameraFramesFromMountedStreams, usePolicyCameraTensors, usePolicyCameraTensorsFromMountedStreams, useRemotePolicy, useSceneLights, useSelectionHighlight, useSensor, useSensors, useSitePose, useSitePosition, useSplatCollisionProxyGeoms, useTrajectoryPlayer, useTrajectoryRecorder, useVideoRecorder };
|
|
8850
8993
|
//# sourceMappingURL=index.js.map
|
|
8851
8994
|
//# sourceMappingURL=index.js.map
|