Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

USD visOption pass through and manual #196

Merged
merged 2 commits into from
Oct 25, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions docs/source/manual/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ User Manual
combining
comparing
analysing
rendering


Indices and tables
Expand Down
40 changes: 40 additions & 0 deletions docs/source/manual/rendering.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
.. _rendering:

==================
Rendering Geometry
==================

There are many reasons to render geometry beyond the VTK based
pyg44omety viewer. Potential targets are 3D asset packages (e.g.
blender, houdini), games engines (unreal engine, unity). A common
format is Universal Scene Description (USD). USD can be loaded in
many packages and so a dedicated UDS converter/viewer is available
in pyg4ometry. For example to load and convert a file to USD

.. code-block:: python
:linenos:

r = pyg4ometry.gdml.Reader("lht.gdml")
l = r.getRegistry().getWorldVolume()
v = pyg4ometry.visualisation.UsdViewer("lht.usd")
v.traverseHierarchy(l)
v.save()

This will write a file called lht.gdml which can be viewed in
a USD viewer like usdview. USD has a preview shader. The settings
can set via the `VisualisationOptions` stored in logical volumes
(`visOption`), so for example

.. code-block:: python
:linenos:

r = pyg4ometry.gdml.Reader("lht.gdml")
reg = r.getRegistry()
reg.logicalVolumeDict["vCalorimeter"].visOptions.colour = [1, 0, 0]
v = pyg4ometry.visualisation.UsdViewer("lht.usd")
v.traverseHierarchy(reg.getWorldVolume())
v.save()

`visOptions.color` and `visOptions.alpha` are passed though to the
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This should be visOptions.colour instead of visOptions.color?

I think this would be important to fix in the docs, to not confuse users after the next release (it already is confusing enough that pyg4ometry uses colour and USD uses ...Color)

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed.

USD shader. There are many more options for shading in USD which can
be accessed via `visOptions.usdOptions`
2 changes: 2 additions & 0 deletions src/pyg4ometry/visualisation/VisualisationOptions.py
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,8 @@ def __init__(

# vis options for pbr shaders
self.usdOptions = UsdPreviewSurfaceOptions()
self.usdOptions.diffuseColor = colour
self.usdOptions.opacity = alpha

def __repr__(self):
rgba = [*self.getColour(), self.alpha]
Expand Down
Loading