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

Reject other renderer Material Outputs (#615) #616

Closed

Conversation

jombo23
Copy link
Contributor

@jombo23 jombo23 commented Apr 23, 2023

PURPOSE

This PR makes RPR reject material output nodes from other renderers. (see #615 )

EFFECT OF CHANGE

RPR will no longer grab ShaderNodeOutputMaterial nodes with targets set to other rendering engines. This enables users to have materials with different sets of node paths for different renderers.

TECHNICAL STEPS

The conditions for locating a material output node were changed from;
node.bl_idname == 'ShaderNodeOutputMaterial' and node.is_active_output

to
node.bl_idname == 'ShaderNodeOutputMaterial' and node.target == 'ALL'

so that material outputs for other renderers are ignored.

NOTES FOR REVIEWERS

I am not sure why "is_active_output" was originally on here, but from my testing, it seems irrelevant, and messes up the condition of the target renderer, as if nodes get reordered from user interaction, a node can be "inactive" but still be completely valid, and the proper path.

In my testing I have yet to come across a scenario where this breaks anything.

radeonprorender and others added 30 commits June 24, 2021 16:34
…riesAndSDKs#299)

PURPOSE

Add Samples option for Outline Rendering
Setup for Samples default value of 16
Render Properties -> Sampling -> Outline Samples

EFFECT OF CHANGE

Added Samples option for Outline Rendering
Samples option of Outline Rendering is separated from render max samples option
By default value it is 16
Render Properties -> Sampling -> Outline Samples
PURPOSE

Add support for Voronoi texture node

EFFECT OF CHANGE

Added support for Voronoi texture node
…Open-LibrariesAndSDKs#305)

Expected the viewport renderer to render the scene
But blender is complaining that the mesh object emitter hasn't been evaluated (error comes from rna_ParticleSystem_uv_on_emitter).
Possible solutions would be to evaluate hair instances last or do some try catch around this.

EFFECT OF CHANGE

Viewport renderer handles the scene
…DKs#312)

PURPOSE

Add Volume Scatter shader node support.

EFFECT OF CHANGE

Added support for Volume Scatter node.
Shader Editor -> Add -> Shader -> Volume Scatter
…DKs#316)

PURPOSE

Add Volume Scatter shader node support.

EFFECT OF CHANGE

Added support for Volume Scatter node.
Shader Editor -> Add -> Shader -> Volume Scatter
…ositor (GPUOpen-LibrariesAndSDKs#314)

PURPOSE

Need to add Outline render output for Compositor that will be useful for users and will add more options for render results.

EFFECT OF CHANGE

Outline pass appears in RenderLayers node when Full quality render option and Outline Rendering are enabled.
…dSDKs#319)

PURPOSE

Fix wrong destination path for datafiles

EFFECT OF CHANGE

Fix path issue causing material previews not working.
PURPOSE

Core 2.02.5.beta is available.

EFFECT OF CHANGE

Updated Core to 2.02.5.beta.
…t render. (GPUOpen-LibrariesAndSDKs#325)

Activate shadow catcher without error.
Fix an issue get KeyError 10 with shadow catcher activation. when Viewport render starts with activated reflection catcher.

EFFECT OF CHANGE

Fixed an issue get KeyError 10 with shadow catcher activation.
…t. (GPUOpen-LibrariesAndSDKs#324)

PURPOSE

Load image sequence in ShaderNodeTexImage and get correct result in Render and Viewport.
Investigate work of Cyclic and Auto Refresh options, and make them work as expected.

EFFECT OF CHANGE

Now Viewport and Render works as expected, compare to blender Image texture node in SEQUENCE mode.
Added support for Cyclic and Auto Refresh options in Image texture node.
Added support for also only numeric Image filenames for Image texture node .
radeonprorender and others added 27 commits March 1, 2023 19:28
…SDKs#588)

PURPOSE
User request GPUOpen-LibrariesAndSDKs#587
Add support for "Curves Info" node.
https://amdrender.atlassian.net/browse/RPRBLND-2240

EFFECT OF CHANGE
Added Curves Info node. Currently, only Intercept output is supported. Final render quality only.
Added Curves Info node. Currently, only Random output is supported. Final render quality only.
…GPUOpen-LibrariesAndSDKs#589)

URPOSE
Update toon shader to switch between 1/3/5 color modes.

EFFECT OF CHANGE
You can now choose between three out of five color ramp modes by selecting the Ramp Mode dropdown list.
…esAndSDKs#587)

PURPOSE
User request GPUOpen-LibrariesAndSDKs#576
Update to complete support for curves.
Add radius and UV support.

EFFECT OF CHANGE
Now user can set the radius using the node "Set Curve Radius".
UVs now supported via the automatically generated attribute surface_uv_coordinate.
…Ks#596)

PURPOSE
Add support for FloatCurve node.

EFFECT OF CHANGE
Added support for FLoat Curve node.
GPUOpen-LibrariesAndSDKs#594)

PURPOSE
Viewport render got an error if borders are out of bounds. In some cases render resolution width or height is zero.

EFFECT OF CHANGE
Fixed error if the render border is located out of the screen.
…pen-LibrariesAndSDKs#592)

PURPOSE
Currently Objects which share a data mesh, we make a new mesh each time, this could be slow to export.

EFFECT OF CHANGE
With each mesh we check if it's unmodified and if the mesh is already exported to reuse and instance.


Co-authored-by: Vasyl Pidhirskyi
PURPOSE
Math node provides an error.

EFFECT OF CHANGE
Fixed error 0.0 cannot be raised to a negative power.
Added support for the math operations: Truncate, Square Root, Inverse Square Root, Sign, Ping Pong.
…pen-LibrariesAndSDKs#599)

PURPOSE
In general, the issue is related to the new approach of instances sync (GPUOpen-LibrariesAndSDKs#592)
The issue is that we create pyrpr.Instance from pyrpr.Instance. It's not correct and causes the errors below:

Emission on Grease pencil provides blender crash.
AttributeError: 'Instance' object has no attribute 'poly_count'
EFFECT OF CHANGE
Fixed crash if extruded curve object applied with emission material.
Fixed error 'poly_count' after the final render ends.
)

* Outline for work to be done.

* add space

* Separated quality for viewport and final renderer
Turned on blender denoiser via nodes isnstead regular.
Rename High to Interactive if hybrid pro is diabled.

* Now preset is executed in manner of Blender using bpy.ops.script.execute_preset.
Presets are located in rprblender/properties/presets.

* Fixed device selection.

* Made presets separately for FULL2, HIGH, HYBRIDPRO.
Added debug log messages if preset is applied.

* Removed RPR_RENDER_PT_denoiser pannel from UI.
Fixed error if denoiser node is None.

* Turned off upscaler and denoiser for NorthStar and Hybrid.
Removed upscaler and denoiser UI elements if Viewport Mode and NorthStar or Hybrid

* Removed settings denoiser and upscaler duplication for HybridPro.
Set default upscaler quality to FSR2_QUALITY_MODE_ULTRA_PERFORMANCE.
Removed unused math import.

---------
…ion 2.2.0 at the moment RadeonProRenderSDK provide OCIO 2.1.1 (GPUOpen-LibrariesAndSDKs#600)

* RPRBLND-2270: Improve OCIO support, Blender 3.5 upgraded OCIO to version 2.2.0 at the moment RadeonProRenderSDK provide OCIO 2.1.1.
Added constants BLENDER_OCIO_VERSION, SDK_OCIO_VERSION.
Implemented ocio_config_path, it returns ocio config depending of blender ocio version.
Put ocion config version 2.1.1 to rprblender/ocio.It was taken from blender 3.4
Added log messages.

* Switched to blender OCIO config.
Removed oico folder.
* RPRBLND-2275: instancing issue in RPR.
Implemented key function for mesh object.

* Use name_full instead of id.
Added missing UI elements:
RPR_RENDER_PT_advanced panel for Render Mode Final
adapt_viewport_resolution for Viewport Mode Final
…ndSDKs#602)

* RPRBLND-2269: Add Open VDB support in Blender 3.5.
Implemented support for VDB volumes using pyopenvdb module. It's built in Blender from version 3.5.
Added required code to create_grid_sampler_node function.

* Removed comments
…PUOpen-LibrariesAndSDKs#608)

PURPOSE
Regular Hybrid

Fix error when changing viewport render quality while viewport rendering AttributeError: module 'pyrpr' has no attribute 'RENDER_QUALITY_FULL2'.

Added validation for regular Hybrid plugin registration. Creation of empty context causes error -23 on some low-performance GPUs. (i. e. mx460).

NorthStar

Added missing UI element "Texture Compression".
EFFECT OF CHANGE
Fix error when changing viewport render quality while viewport rendering (regression).
Added missing UI element "Texture Compression" (regression).
@@ -36,7 +36,7 @@ def get_material_output_node(material):
return None

return next((node for node in material.node_tree.nodes
if node.bl_idname == 'ShaderNodeOutputMaterial' and node.is_active_output),
if node.bl_idname == 'ShaderNodeOutputMaterial' and node.target == 'ALL'),
Copy link
Contributor

Choose a reason for hiding this comment

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

Thinking about this, we should also accept Cycles target?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

In an instance where both exist, prioritizing all should always be first, unless there's a way to add prorender to the list of rendertargets without redefining the output class (so it doesn't ONLY show prorender in an output node placed while the renderer is set as prorender).

In any other case though really, it's dangerous to go with a renderer specific to any other renderer. If someone specifically specifies cycles, why should prorender use it?

Copy link
Contributor

Choose a reason for hiding this comment

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

There is not a way to add ProRender to the list of outputs.

Generally speaking we try to translate eevee / cycles nodegraphs into something RPR can use. The case that we're really talking about here if:

  1. The user does not have an "All" output node.
  2. The user has two output nodes, one for Cycles and one for EEVEE.

In that case which should we choose to use? There's no obvious correct answer. So I'm ok with just the solution you have here.

Of course you could do something like:
Look for the first 'ALL" output node, if none found choose the first "Cycles" output, if not then whichever EEVEE.

Willing to hear opinions on this though.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

aha! I get what you mean now.

Perhaps when a non preferred output is taken it can warn a user in the log?

Just thinking about the case where I (and a handful of other people I know) run two sets of nodes per material for previews and renders, it would be nice to know if the preferred output was not available.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

8 participants