Skip to content

Commit 184202f

Browse files
authored
Merge pull request #237 from GPUOpen-LibrariesAndSDKs/Release_March_2021
Release march 2021
2 parents 821e5f4 + 805f4e8 commit 184202f

36 files changed

+1059
-308
lines changed

Changelog.md

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,53 @@
1+
# Version 3.1
2+
## New Features:
3+
- Support for AMD Radeon™ RX 6700 XT graphics cards has been added.
4+
- Cryptomatte AOVs make it easy to filter objects by name or material when using compositors that support Cryptomatte (including the Blender Cryptomatte compositor node)
5+
- A 16-bit Machine Learning Denoiser option is now available to provide for less memory usage and greater speed.
6+
- The speed and responsiveness of the viewport render has been vastly improved under RPR 2.0:
7+
- An option for using Machine Learning Denoising and Upscaling the viewport render is enabled under the Viewport Settings. We now render faster at ½ resolution and use the Machine Learning Upscaler to enhance the resolution;
8+
- Changing the properties tabs no longer restarts the viewport render;
9+
- Stopping the viewport render is now much faster;
10+
- Various other fixes to speed up the viewport render have been added.
11+
- An often requested feature, Box mapping in the Image Texture node, is now supported!
12+
- Support for Principled Hair BSDF has been added.
13+
- UV Lookup nodes and math nodes now work in the High, Medium, Low modes.
14+
15+
## Issues Fixed:
16+
- Adaptive sampling now works correctly in the CPU mode.
17+
- All color spaces for textures (not just sRGB and Linear) are now used.
18+
- Noise seeding for animation renders has now fixed an issue of a “swimming” noise pattern. Noise seeding is always enabled.
19+
- A possible error with UDIM textures has been fixed.
20+
- If the Step Count option in Blender was set to a value > 1, accentuated motion blur would be rendered — fixed.
21+
- Memory was not being freed up at the end of rendering — fixed.
22+
- Shadow Catcher now work with RPR 2.
23+
- An error at the end of rendering with the Full mode has been fixed.
24+
- Calculated values of light power would not update in animation — fixed.
25+
- Transparent background now works with RPR 2.
26+
- Transparent background with tile rendering was creating a lot of artefacts and produced incorrect results — fixed.
27+
- Instances were not updated correctly in the viewport on disabling or enabling: they were correctly removed when disabled but not displayed on enabling — fixed.
28+
- There was an issue with material override application/removal: it reset the object rays visibility settings and was not updated on instances — fixed.
29+
- Linked collection objects now use ray visibility settings, rather than the settings from the parent object.
30+
- Various fixes have been made to .rpr file export:
31+
- Motion blur is now exported with .rpr export;
32+
- Export is now implemented with selected engine mode;
33+
- An image cache is used to save space and enhance speed when exporting.
34+
- Environment Lights and various overrides can now be rotated independently.
35+
- Area lights were shadowing too aggressively — fixed.
36+
- Switching to contour rendering could fail on an NVidia GPU — fixed.
37+
- Possible crashing when rendering AOVs in the viewport has been fixed.
38+
- Textures could be too blurry due to incorrect MIP mapping, particularly textures in a plane parallel to the camera direction.
39+
- Adaptive sampling now works with RPR 2.
40+
- Spiral artifacts when rendering with both the CPU and GPU have been fixed.
41+
- The Opacity AOV was not taking the maximum ray depth into account — fixed.
42+
- Artifacts in the Depth AOV have been fixed.
43+
- Compiling the BVH geometry has been improved in large scenes.
44+
45+
## Known Issues:
46+
- RPR 2.0 has some forthcoming features. If these are needed, please use the Legacy render mode:
47+
- Heterogenous volumes.
48+
- Tiled rendering with transparent background enabled has image artifacts with RPR 2.0.
49+
- Adaptive sampling does not work with CPU only rendering.
50+
151
# Version 3.0
252
## New Features:
353
- The new plug-in version incorporates version 2.0 of our Radeon™ ProRender system and brings about these significant changes and enhancements:

README-OSX.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ Once SSH keys are installed update/checkout submodules for active branch
5252

5353
### Building
5454

55+
- NOTE. If on MacOS 11.1 you may need to run export SDKROOT=`xcrun --show-sdk-path`
5556
- After syncing the source, run:
5657
- ./build_osx.sh
5758

RPRBlenderHelper/CMakeLists.txt

Lines changed: 1 addition & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -5,22 +5,6 @@ project(RPRBlenderHelper)
55
set(CMAKE_VERBOSE_MAKEFILE ON)
66
set (CMAKE_CXX_STANDARD 11)
77

8-
find_package(OpenMP)
9-
10-
if (${APPLE})
11-
set (IGNORE_MISSING_OPENMP 1)
12-
endif()
13-
14-
if (OPENMP_FOUND)
15-
set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}")
16-
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")
17-
else()
18-
if(NOT "${IGNORE_MISSING_OPENMP}")
19-
message(FATAL_ERROR "OpenMP support not found! Use IGNORE_MISSING_OPENMP=ON to override.")
20-
endif()
21-
endif()
22-
23-
248
set(RPR_SDK_DIR ${CMAKE_SOURCE_DIR}/../.sdk/rpr)
259
set(RPRTOOLS_DIR ${RPR_SDK_DIR}/rprTools)
2610
set(SHARED_DIR ${CMAKE_SOURCE_DIR}/../RadeonProRenderSharedComponents)
@@ -76,7 +60,7 @@ elseif(${APPLE})
7660
${OPENVDB_SDK_PATH}/OSX/lib/libtbb.a
7761
)
7862

79-
else()
63+
else() # Linux
8064
set(LIBS ${RPR_SDK_DIR}/bin/libRadeonProRender64.so)
8165

8266
endif()

RadeonProRenderSDK

Submodule RadeonProRenderSDK updated 52 files

distlib

Lines changed: 0 additions & 1 deletion
This file was deleted.

src/bindings/pyrpr/src/pyrpr.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1388,6 +1388,9 @@ def set_gamma(self, gamma):
13881388
def set_wrap(self, wrap_type):
13891389
ImageSetWrap(self, wrap_type)
13901390

1391+
def set_colorspace(self, colorspace):
1392+
ImageSetOcioColorspace(self, encode(colorspace))
1393+
13911394
@property
13921395
def size_byte(self):
13931396
if self._size_byte is None:

src/bindings/pyrpr/src/pyrprapi.py

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -458,6 +458,8 @@ def calculate_depth(self):
458458

459459
for c in root.findall('Struct'):
460460
name = c.get('name')
461+
if name.startswith("__"):
462+
continue
461463
struct_members = c.get('members')
462464
types[c.get('id')] = Struct(name, struct_members.split() if struct_members else [])
463465

@@ -654,17 +656,21 @@ def get_rif_sdk(base=Path()):
654656
export(
655657
rpr_wrap_h, rpr_includes, rpr_wrap_json,
656658
{
657-
'type':['rpr_', '_rpr'],
658-
'function':['rpr',],
659-
'constant':['RPR_',]
659+
'type': ['rpr_', '_rpr'],
660+
'function': ['rpr',],
661+
'constant': ['RPR_',]
660662
},
661663
castxml,
662664
exclude=['RPR_CONTEXT_FLUSH_FRAMEBUFFERS_FUNC_NAME',
663665
'RPR_SHAPE_SET_LIGHTMAP_CHART_INDEX_FUNC_NAME',
664666
'RPR_MESH_UPDATE_FUNC_NAME',
665667
'RPR_SHAPE_SET_TRANSFORM_BATCH_FUNC_NAME',
666668
'rprDirectionalLightSetRasterShadowSplits',
667-
'RPR_CONTEXT_CREATE_MESH_EDITABLE_FUNC_NAME',]
669+
'RPR_CONTEXT_CREATE_MESH_EDITABLE_FUNC_NAME',
670+
'rprContextCreateCompressedImage_func',
671+
'rpr_compressed_format',
672+
'rpr_comressed_image_desc',
673+
'RPR_CONTEXT_CREATE_COMPRESSED_IMAGE',]
668674
)
669675

670676
export(

src/bindings/pyrpr/src/pyrprimagefilters.py

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -305,9 +305,26 @@ def set_parameter(self, name, value):
305305
elif isinstance(value, Image):
306306
ImageFilterSetParameterImage(self, pyrpr.encode(name), value)
307307
self.parameters[name] = value
308-
elif isinstance(value, tuple) and len(value) == 2:
308+
elif isinstance(value, tuple):
309+
size = len(value)
309310
if isinstance(value[0], int):
310-
ImageFilterSetParameter2u(self, pyrpr.encode(name), *value)
311+
if size == 2:
312+
ImageFilterSetParameter2u(self, pyrpr.encode(name), *value)
313+
elif size == 3:
314+
ImageFilterSetParameter3u(self, pyrpr.encode(name), *value)
315+
elif size == 4:
316+
ImageFilterSetParameter4u(self, pyrpr.encode(name), *value)
317+
else:
318+
raise TypeError("Incorrect tuple size for ImageFilterSetParameter#i", self, name, value)
319+
elif isinstance(value[0], float):
320+
if size == 2:
321+
ImageFilterSetParameter2f(self, pyrpr.encode(name), *value)
322+
elif size == 3:
323+
ImageFilterSetParameter3f(self, pyrpr.encode(name), *value)
324+
elif size == 4:
325+
ImageFilterSetParameter4f(self, pyrpr.encode(name), *value)
326+
else:
327+
raise TypeError("Incorrect tuple size for ImageFilterSetParameter#f", self, name, value)
311328
else:
312329
raise TypeError("Incorrect type for ImageFilterSetParameter*", self, name, value)
313330
self.parameters[name] = value

src/rprblender/__init__.py

Lines changed: 35 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
bl_info = {
2121
"name": "Radeon ProRender",
2222
"author": "AMD",
23-
"version": (3, 0, 8),
23+
"version": (3, 1, 0),
2424
"blender": (2, 80, 0),
2525
"location": "Info header, render engine menu",
2626
"description": "Radeon ProRender rendering plugin for Blender 2.8x",
@@ -97,11 +97,12 @@ class RPREngine(bpy.types.RenderEngine):
9797
engine: Engine = None
9898

9999
def __del__(self):
100-
log('__del__', self.as_pointer())
101-
102100
if isinstance(self.engine, ViewportEngine):
103101
self.engine.stop_render()
104102

103+
log('__del__', self.as_pointer())
104+
105+
105106
# final render
106107
def update(self, data, depsgraph):
107108
""" Called for final render """
@@ -126,7 +127,7 @@ def update(self, data, depsgraph):
126127
self.error_set(f"ERROR | {e}. Please see log for more details.")
127128

128129
def render(self, depsgraph):
129-
""" Called with both final render and viewport """
130+
""" Called with final render and preview """
130131
log("render", self.as_pointer())
131132
try:
132133
self.engine.render()
@@ -135,9 +136,13 @@ def render(self, depsgraph):
135136
log.error(e, 'EXCEPTION:', traceback.format_exc())
136137
self.error_set(f"ERROR | {e}. Please see log for more details.")
137138

139+
# This has to be called in the end of render due to possible memory leak RPRBLND-1635
140+
# Important to call it in this function, not in __del__()
141+
self.engine.stop_render()
142+
138143
# viewport render
139144
def view_update(self, context, depsgraph):
140-
""" called when data is updated for viewport """
145+
""" Called when data is updated for viewport """
141146
log('view_update', self.as_pointer())
142147

143148
try:
@@ -174,25 +179,37 @@ def update_render_passes(self, render_scene=None, render_layer=None):
174179
Called by Blender.
175180
"""
176181
aovs = properties.view_layer.RPR_ViewLayerProperites.aovs_info
182+
cryptomatte_aovs = properties.view_layer.RPR_ViewLayerProperites.cryptomatte_aovs_info
177183

178184
scene = render_scene if render_scene else bpy.context.scene
179185
layer = render_layer if render_scene else bpy.context.view_layer
180186

187+
def do_register_pass(aov):
188+
pass_channel = aov['channel']
189+
pass_name = aov['name']
190+
pass_channels_size = len(pass_channel)
191+
192+
# convert from channel to blender type
193+
blender_type = 'VALUE'
194+
if pass_channel in ('RGB', 'RGBA'):
195+
blender_type = 'COLOR'
196+
elif pass_channel in {'XYZ', 'UVA'}:
197+
blender_type = 'VECTOR'
198+
199+
self.register_pass(scene, layer,
200+
pass_name, pass_channels_size, pass_channel, blender_type)
201+
181202
for index, enabled in enumerate(layer.rpr.enable_aovs):
182203
if enabled:
183-
pass_channel = aovs[index]['channel']
184-
pass_name = aovs[index]['name']
185-
pass_channels_size = len(pass_channel)
186-
187-
# convert from channel to blender type
188-
blender_type = 'VALUE'
189-
if pass_channel in ('RGB', 'RGBA'):
190-
blender_type = 'COLOR'
191-
elif pass_channel in {'XYZ', 'UVA'}:
192-
blender_type = 'VECTOR'
193-
194-
self.register_pass(scene, layer,
195-
pass_name, pass_channels_size, pass_channel, blender_type)
204+
do_register_pass(aovs[index])
205+
206+
if layer.rpr.crytomatte_aov_material:
207+
for i in range(3):
208+
do_register_pass(cryptomatte_aovs[i])
209+
210+
if layer.rpr.crytomatte_aov_object:
211+
for i in range(3,6):
212+
do_register_pass(cryptomatte_aovs[i])
196213

197214

198215
@bpy.app.handlers.persistent

src/rprblender/engine/context.py

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -149,11 +149,19 @@ def get_frame_buffer(self, aov_type=None):
149149

150150
return self.frame_buffers_aovs[pyrpr.AOV_COLOR]['res']
151151

152-
def resolve(self):
153-
for aov, fbs in self.frame_buffers_aovs.items():
154-
fbs['aov'].resolve(fbs['res'], aov != pyrpr.AOV_SHADOW_CATCHER)
152+
def resolve(self, aovs=None):
153+
if aovs:
154+
for aov in aovs:
155+
fbs = self.frame_buffers_aovs[aov]
156+
fbs['aov'].resolve(fbs['res'], aov != pyrpr.AOV_SHADOW_CATCHER)
157+
else:
158+
for aov, fbs in self.frame_buffers_aovs.items():
159+
fbs['aov'].resolve(fbs['res'], aov != pyrpr.AOV_SHADOW_CATCHER)
155160

156161
if self.composite:
162+
if aovs and pyrpr.AOV_COLOR not in aovs:
163+
return
164+
157165
color_aov = self.frame_buffers_aovs[pyrpr.AOV_COLOR]
158166
self.composite.compute(color_aov['composite'])
159167
if self.gl_interop:
@@ -575,12 +583,6 @@ def init(self, context_flags, context_props, use_contour_integrator=False):
575583
context_flags -= {pyrpr.CREATION_FLAGS_ENABLE_GL_INTEROP}
576584
super().init(context_flags, context_props, use_contour_integrator)
577585

578-
def enable_aov(self, aov_type):
579-
if aov_type == pyrpr.AOV_VARIANCE:
580-
return
581-
582-
super().enable_aov(aov_type)
583-
584586
def sync_catchers(self, use_transparent_background=False):
585587
pass
586588

@@ -607,3 +609,7 @@ def create_tiled_image(self, key):
607609
image = pyrpr2.TiledImage(self.context)
608610

609611
return image
612+
613+
def sync_portal_lights(self):
614+
# portals are not supported or needed in rpr2
615+
return

0 commit comments

Comments
 (0)