From 0bdac72a95d98b0ea16667bf4ea57d4eee8a337f Mon Sep 17 00:00:00 2001 From: Alexey Smolenchuk Date: Tue, 9 Jan 2024 20:02:09 +0000 Subject: [PATCH 1/5] upd reference --- docs/Reference.md | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/docs/Reference.md b/docs/Reference.md index 7fa5692..10e3006 100644 --- a/docs/Reference.md +++ b/docs/Reference.md @@ -2,6 +2,9 @@ ## RIS Patterns / c++ plugins +Allows you to read data from any Houdini known geometry directly. This could be PrimPoly, PolySoups, Curves as well as Packed primitives, AlembicRefs and UsdRefs from **.bgeo**, **.bgeo.sc** or any other format which Houdini can digest e.g. **.abc** or **.usd**.*:star:* +

+ ![network_example](network_example_pc.png) #### SamplePoints @@ -10,7 +13,7 @@ Allows you to sample the closest points from the file and store their sorted ind #### ReadAttribute Read specified point attributes from **ArrayData** structure indexes. An empty filename means using the same file. -


+

![network_example](network_example.png) @@ -23,6 +26,7 @@ Read interpolated attribute value from geometry at point matching the **ClosestD An empty filename means using the same file.

+ ## OSL Patterns / Shaders OSL shaders here are very simple examples demonstrating how you can manipulate results from samplers to build procedural effects. @@ -32,12 +36,24 @@ Utility shader for building array of uv's from point-cloud-like data. #### SampleTexture Utility shader for batch reading textures from an array of uv's. + +#### UnpackArrayData *:star:* +Utility node to direct access to ArrayData structure members. +#### UnpackClosestData *:star:* +Utility node to direct access to ClosestData structure members. +#### UnpackManifold *:star:* +Utility node to direct access to RenderMan Manifold structure members. +#### PackManifold *:star:* +Utility node to define RenderMan compatible Manifold.

+ ## VOP structures Custom structures are defined in C++ and OSL headers. They are also defined as a Houdini Vop type in *vop/structs.json*, which allows you to work with those structures in **OSL Generic Shader Builder**. +There also structure for RenderMan Manifold inputs.

+ ## Note about derivatives in OSL and RIS The derivative calculation is required for Bump Mapping and Mip-Map optimization. RIS and OSL have very different mechanisms of derivative calculation in RenderMan. Be careful when using C++/RIS results as texture coordinates With OSL textures. Check if it works with **Dx()**, and **Dy()** functions or manually control texture filtering with the **width** parameter. From 53fabccb342dd85a6a2c1774f5eb2199a08019a9 Mon Sep 17 00:00:00 2001 From: Alexey Smolenchuk Date: Tue, 9 Jan 2024 20:11:52 +0000 Subject: [PATCH 2/5] Upd Readme --- Readme.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/Readme.md b/Readme.md index 6d3b649..853f95a 100644 --- a/Readme.md +++ b/Readme.md @@ -2,7 +2,11 @@ [![exampleimage](docs/img1.jpg) ![exampleimage](docs/img2.jpg) ![exampleimage](docs/img3.jpg)](https://alexeysmolenchuk.github.io/hGeoPatterns/) ### What is hGeoPatterns -**hGeoPatterns** is a collection of RenderMan plugins for sampling Houdini geometry. This project is a mixture of **RIS** and **HDK** functionality to make operations like sampling and reading arbitrary Houdini Geometry Data in RenderMan shading networks. Similar to familiar *xyzdist()*, *prim_attribute()*, *nearpoints()* VEX functions. OSL shaders, headers and VOP definitions are included to make shader authoring easy. +**hGeoPatterns** is a collection of RenderMan plugins for sampling any Houdini compatible geometry. This project is a mixture of **RIS** and **HDK** functionality to make operations like sampling and reading arbitrary Houdini Geometry Data in RenderMan shading networks. Similar to familiar *xyzdist()*, *prim_attribute()*, *nearpoints()* VEX functions. OSL shaders, headers and VOP definitions are included to make shader authoring easy. + +### Whats NEW +*:star:* Added Support for Packed geometry as well as Alembic and Usd. +*:star:* New Utility Nodes added to simplify direct access to structure members. ### [Building and Installation](docs/Building.md) From 09f8db12e3e8a4b44e505bc9d483bdab28c349c5 Mon Sep 17 00:00:00 2001 From: Alexey Smolenchuk Date: Tue, 9 Jan 2024 23:17:06 +0300 Subject: [PATCH 3/5] Update Readme.md --- Readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Readme.md b/Readme.md index 853f95a..ffca272 100644 --- a/Readme.md +++ b/Readme.md @@ -5,7 +5,7 @@ **hGeoPatterns** is a collection of RenderMan plugins for sampling any Houdini compatible geometry. This project is a mixture of **RIS** and **HDK** functionality to make operations like sampling and reading arbitrary Houdini Geometry Data in RenderMan shading networks. Similar to familiar *xyzdist()*, *prim_attribute()*, *nearpoints()* VEX functions. OSL shaders, headers and VOP definitions are included to make shader authoring easy. ### Whats NEW -*:star:* Added Support for Packed geometry as well as Alembic and Usd. +*:star:* Added Support for Packed geometry as well as Alembic and Usd.\ *:star:* New Utility Nodes added to simplify direct access to structure members. ### [Building and Installation](docs/Building.md) From 6ad5df1f4e4e8515b4a627b2e8f342f1cd7f5f4f Mon Sep 17 00:00:00 2001 From: Alexey Smolenchuk Date: Tue, 9 Jan 2024 20:44:07 +0000 Subject: [PATCH 4/5] upd reference --- docs/Reference.md | 27 ++++++++++++++++----------- docs/utilityNodes.png | Bin 0 -> 28478 bytes 2 files changed, 16 insertions(+), 11 deletions(-) create mode 100644 docs/utilityNodes.png diff --git a/docs/Reference.md b/docs/Reference.md index 10e3006..a789604 100644 --- a/docs/Reference.md +++ b/docs/Reference.md @@ -1,10 +1,11 @@ [HOME](../Readme.md) -## RIS Patterns / c++ plugins +# RIS Patterns / c++ plugins Allows you to read data from any Houdini known geometry directly. This could be PrimPoly, PolySoups, Curves as well as Packed primitives, AlembicRefs and UsdRefs from **.bgeo**, **.bgeo.sc** or any other format which Houdini can digest e.g. **.abc** or **.usd**.*:star:* -

+ +## Point Cloud Specific ![network_example](network_example_pc.png) #### SamplePoints @@ -13,9 +14,9 @@ Allows you to sample the closest points from the file and store their sorted ind #### ReadAttribute Read specified point attributes from **ArrayData** structure indexes. An empty filename means using the same file. -

- +
+## Closest Point Specific ![network_example](network_example.png) #### Closest @@ -27,7 +28,7 @@ An empty filename means using the same file.

-## OSL Patterns / Shaders +# OSL Patterns / Shaders OSL shaders here are very simple examples demonstrating how you can manipulate results from samplers to build procedural effects. ![network_example](network_example_tex.png) @@ -36,25 +37,29 @@ Utility shader for building array of uv's from point-cloud-like data. #### SampleTexture Utility shader for batch reading textures from an array of uv's. +

+ +# Utility Nodes *:star:* +![network_example](utilityNodes.png) -#### UnpackArrayData *:star:* +#### UnpackArrayData Utility node to direct access to ArrayData structure members. -#### UnpackClosestData *:star:* +#### UnpackClosestData Utility node to direct access to ClosestData structure members. -#### UnpackManifold *:star:* +#### UnpackManifold Utility node to direct access to RenderMan Manifold structure members. -#### PackManifold *:star:* +#### PackManifold Utility node to define RenderMan compatible Manifold.

-## VOP structures +# VOP structures Custom structures are defined in C++ and OSL headers. They are also defined as a Houdini Vop type in *vop/structs.json*, which allows you to work with those structures in **OSL Generic Shader Builder**. There also structure for RenderMan Manifold inputs.

-## Note about derivatives in OSL and RIS +# Note about derivatives in OSL and RIS The derivative calculation is required for Bump Mapping and Mip-Map optimization. RIS and OSL have very different mechanisms of derivative calculation in RenderMan. Be careful when using C++/RIS results as texture coordinates With OSL textures. Check if it works with **Dx()**, and **Dy()** functions or manually control texture filtering with the **width** parameter. [HOME](../Readme.md) diff --git a/docs/utilityNodes.png b/docs/utilityNodes.png new file mode 100644 index 0000000000000000000000000000000000000000..52783468d2ba09c126ebe5cd8ec35cd2b1276a40 GIT binary patch literal 28478 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 Date: Tue, 9 Jan 2024 23:47:54 +0300 Subject: [PATCH 5/5] Update Reference.md --- docs/Reference.md | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/docs/Reference.md b/docs/Reference.md index a789604..7ff21d0 100644 --- a/docs/Reference.md +++ b/docs/Reference.md @@ -8,10 +8,10 @@ Allows you to read data from any Houdini known geometry directly. This could be ## Point Cloud Specific ![network_example](network_example_pc.png) -#### SamplePoints +### SamplePoints Allows you to sample the closest points from the file and store their sorted indexes and distances in the **ArrayData** structure for further reading. Similar to **pcopen**/**nearpoints** vex functions. -#### ReadAttribute +### ReadAttribute Read specified point attributes from **ArrayData** structure indexes. An empty filename means using the same file.
@@ -19,10 +19,10 @@ An empty filename means using the same file. ## Closest Point Specific ![network_example](network_example.png) -#### Closest +### Closest The plugin is similar to the **xyzdist** vex function. It allows you to find the closest point on the surface/spline and store it in the **ClosestData** structure for further reading. -#### Interpolator +### Interpolator Read interpolated attribute value from geometry at point matching the **ClosestData** structure. Similar to the **prim_attribute** vex function. An empty filename means using the same file.

@@ -32,23 +32,23 @@ An empty filename means using the same file. OSL shaders here are very simple examples demonstrating how you can manipulate results from samplers to build procedural effects. ![network_example](network_example_tex.png) -#### BuildCoords +### BuildCoords Utility shader for building array of uv's from point-cloud-like data. -#### SampleTexture +### SampleTexture Utility shader for batch reading textures from an array of uv's.

# Utility Nodes *:star:* ![network_example](utilityNodes.png) -#### UnpackArrayData +### UnpackArrayData Utility node to direct access to ArrayData structure members. -#### UnpackClosestData +### UnpackClosestData Utility node to direct access to ClosestData structure members. -#### UnpackManifold +### UnpackManifold Utility node to direct access to RenderMan Manifold structure members. -#### PackManifold +### PackManifold Utility node to define RenderMan compatible Manifold.