Loading...
Searching...
No Matches
particleFieldConversionSceneIndex.h
1//
2// Copyright 2026 Pixar
3//
4// Licensed under the terms set forth in the LICENSE.txt file available at
5// https://openusd.org/license.
6#ifndef PXR_IMAGING_HDSI_PARTICLE_FIELD_CONVERSION_SCENE_INDEX_H
7#define PXR_IMAGING_HDSI_PARTICLE_FIELD_CONVERSION_SCENE_INDEX_H
8
9#include "pxr/pxr.h"
10#include "pxr/imaging/hd/filteringSceneIndex.h"
11#include "pxr/imaging/hdsi/api.h"
12
13PXR_NAMESPACE_OPEN_SCOPE
14
15#define HDSI_PARTICLE_FIELD_CONVERSION_TOKENS \
16 \
17 ((radianceSphericalHarmonicsCoefficients00, "radiance:sphericalHarmonicsCoefficients00")) \
18 \
19 ((radianceSphericalHarmonicsCoefficients10, "radiance:sphericalHarmonicsCoefficients10")) \
20 ((radianceSphericalHarmonicsCoefficients11, "radiance:sphericalHarmonicsCoefficients11")) \
21 ((radianceSphericalHarmonicsCoefficients12, "radiance:sphericalHarmonicsCoefficients12")) \
22 \
23 ((radianceSphericalHarmonicsCoefficients20, "radiance:sphericalHarmonicsCoefficients20")) \
24 ((radianceSphericalHarmonicsCoefficients21, "radiance:sphericalHarmonicsCoefficients21")) \
25 ((radianceSphericalHarmonicsCoefficients22, "radiance:sphericalHarmonicsCoefficients22")) \
26 ((radianceSphericalHarmonicsCoefficients23, "radiance:sphericalHarmonicsCoefficients23")) \
27 ((radianceSphericalHarmonicsCoefficients24, "radiance:sphericalHarmonicsCoefficients24")) \
28 \
29 ((radianceSphericalHarmonicsCoefficients30, "radiance:sphericalHarmonicsCoefficients30")) \
30 ((radianceSphericalHarmonicsCoefficients31, "radiance:sphericalHarmonicsCoefficients31")) \
31 ((radianceSphericalHarmonicsCoefficients32, "radiance:sphericalHarmonicsCoefficients32")) \
32 ((radianceSphericalHarmonicsCoefficients33, "radiance:sphericalHarmonicsCoefficients33")) \
33 ((radianceSphericalHarmonicsCoefficients34, "radiance:sphericalHarmonicsCoefficients34")) \
34 ((radianceSphericalHarmonicsCoefficients35, "radiance:sphericalHarmonicsCoefficients35")) \
35 ((radianceSphericalHarmonicsCoefficients36, "radiance:sphericalHarmonicsCoefficients36")) \
36
37TF_DECLARE_PUBLIC_TOKENS(HdsiParticleFieldConversionTokens, HDSI_PARTICLE_FIELD_CONVERSION_TOKENS);
38
39TF_DECLARE_REF_PTRS(HdsiParticleFieldConversionSceneIndex);
40
41// This scene index converts a particle field primitive to a points primitive
42// for renderers which cannot natively render the particle field. It has three
43// optional inputs:
44// 1. constantWidth: A SampledDataSource if the renderer would like to render
45// the points with a constant width. This datasource will be retuned as the
46// primvar value for the width. Otherwise the plugin will use the average scales
47// as the width if scales are present or 1.0 if not.
48// 2. geometryOveral: Overlayed under the particle field if you want to
49// provide additional render specific options when rendering these points.
50// 3. materialOverlay: While a default UsdPreviewSurface approximation is
51// provided you may want to use a more advanced material for your renderer. This
52// will be overlayed with the default material under the render context you
53// specify.
54class HdsiParticleFieldConversionSceneIndex : public HdSingleInputFilteringSceneIndexBase
55{
56public:
57 HDSI_API
58 static HdsiParticleFieldConversionSceneIndexRefPtr
59 New(const HdSceneIndexBaseRefPtr& inputSceneIndex,
60 const HdSampledDataSourceHandle constantWidth,
61 const HdContainerDataSourceHandle geometryOverlay,
62 const HdContainerDataSourceHandle materialOverlay);
63
64 HDSI_API
65 virtual HdSceneIndexPrim GetPrim(const SdfPath& primPath) const;
66
67 HDSI_API
68 virtual SdfPathVector GetChildPrimPaths(const SdfPath& primPath) const;
69
70protected:
71 HdSampledDataSourceHandle _constantWidth;
72 HdContainerDataSourceHandle _geometryOverlay, _materialOverlay;
73
74 HdsiParticleFieldConversionSceneIndex(
75 const HdSceneIndexBaseRefPtr& inputSceneIndex,
76 const HdSampledDataSourceHandle constantWidth,
77 const HdContainerDataSourceHandle geometryOverlay,
78 const HdContainerDataSourceHandle materialOverlay);
79
80 virtual void _PrimsAdded(
81 const HdSceneIndexBase& sender,
83
84 virtual void _PrimsRemoved(
85 const HdSceneIndexBase& sender,
87
88 virtual void _PrimsDirtied(
89 const HdSceneIndexBase& sender,
91};
92
93PXR_NAMESPACE_CLOSE_SCOPE
94
95#endif // PXR_IMAGING_HDSI_PARTICLE_FIELD_CONVERSION_SCENE_INDEX_H
Abstract interface to scene data.
Definition: sceneIndex.h:55
virtual SdfPathVector GetChildPrimPaths(const SdfPath &primPath) const =0
Returns the paths of all scene index prims located immediately below primPath.
virtual HdSceneIndexPrim GetPrim(const SdfPath &primPath) const =0
Returns a pair of (prim type, datasource).
An abstract base class for a filtering scene index that observes a single input scene index.
A path value used to locate objects in layers or scenegraphs.
Definition: path.h:281
#define TF_DECLARE_REF_PTRS(type)
Define standard ref pointer types.
Definition: declarePtrs.h:58
#define TF_DECLARE_PUBLIC_TOKENS(...)
Macro to define public tokens.
Definition: staticTokens.h:92
Small struct representing a 'prim' in the Hydra scene index.
Definition: sceneIndex.h:36