From 63c5351fdec5e590abbe62fd0aa3666d02770d1a Mon Sep 17 00:00:00 2001 From: Jens Lindgren Date: Sat, 7 Apr 2018 22:33:48 +0200 Subject: [PATCH 001/159] add new randomwalk sss --- shaders/metadata/arnold_shaders.mtd | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/shaders/metadata/arnold_shaders.mtd b/shaders/metadata/arnold_shaders.mtd index 98d298b..0b82ce8 100644 --- a/shaders/metadata/arnold_shaders.mtd +++ b/shaders/metadata/arnold_shaders.mtd @@ -1939,7 +1939,7 @@ soft.category STRING "Surface" soft.order STRING "BeginGroup Base base base_color diffuse_roughness metalness EndGroup " "BeginGroup Specular specular specular_color specular_roughness specular_IOR specular_anisotropy specular_rotation EndGroup " "BeginGroup Transmission transmission transmission_color transmission_depth transmission_scatter transmission_scatter_anisotropy transmission_dispersion transmission_extra_roughness EndGroup " -"BeginGroup Subsurface subsurface subsurface_color subsurface_radius subsurface_scale EndGroup " +"BeginGroup Subsurface subsurface subsurface_color subsurface_radius subsurface_scale subsurface_type subsurface_anisotropy EndGroup " "BeginGroup Coat coat coat_color coat_roughness coat_IOR coat_normal coat_affect_color coat_affect_roughness EndGroup " "BeginGroup Thin_Film thin_film_thickness thin_film_IOR EndGroup " "BeginGroup Emission emission emission_color EndGroup " @@ -2075,6 +2075,15 @@ min FLOAT 0 softmin FLOAT 0 softmax FLOAT 1 +[attr subsurface_type] +soft.label STRING "Type" + +[attr subsurface_anisotropy] +soft.label STRING "Anisotropy" +min FLOAT -1 +max FLOAT 1 +soft.disable_when STRING "{ subsurface_type == diffusion }" + [attr thin_walled] desc STRING "Provide the effect of a translucent object being lit from behind " "It is recommended that this only be used with thin objects (single sided geometry) " From b9014772c162a5fb0d3178a9affdb64966f6f7f1 Mon Sep 17 00:00:00 2001 From: Jens Lindgren Date: Sat, 7 Apr 2018 22:39:00 +0200 Subject: [PATCH 002/159] add transmit_aovs to standard_surface --- shaders/metadata/arnold_shaders.mtd | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/shaders/metadata/arnold_shaders.mtd b/shaders/metadata/arnold_shaders.mtd index 0b82ce8..25f2b92 100644 --- a/shaders/metadata/arnold_shaders.mtd +++ b/shaders/metadata/arnold_shaders.mtd @@ -1938,7 +1938,7 @@ max INT 64 soft.category STRING "Surface" soft.order STRING "BeginGroup Base base base_color diffuse_roughness metalness EndGroup " "BeginGroup Specular specular specular_color specular_roughness specular_IOR specular_anisotropy specular_rotation EndGroup " -"BeginGroup Transmission transmission transmission_color transmission_depth transmission_scatter transmission_scatter_anisotropy transmission_dispersion transmission_extra_roughness EndGroup " +"BeginGroup Transmission transmission transmission_color transmission_depth transmission_scatter transmission_scatter_anisotropy transmission_dispersion transmission_extra_roughness transmit_aovs EndGroup " "BeginGroup Subsurface subsurface subsurface_color subsurface_radius subsurface_scale subsurface_type subsurface_anisotropy EndGroup " "BeginGroup Coat coat coat_color coat_roughness coat_IOR coat_normal coat_affect_color coat_affect_roughness EndGroup " "BeginGroup Thin_Film thin_film_thickness thin_film_IOR EndGroup " @@ -2053,6 +2053,9 @@ soft.label STRING "Extra Roughness" min FLOAT 0 max FLOAT 1 +[attr transmit_aovs] +soft.label STRING "Transmit AOVs" + [attr subsurface] desc STRING "The amount of sub-surface scattering. Multiplies SSS Color." soft.label STRING "Weight" From 120348e2ecc771f368e0e8ba52b55ec61cd2e319 Mon Sep 17 00:00:00 2001 From: Jens Lindgren Date: Sun, 8 Apr 2018 01:13:54 +0200 Subject: [PATCH 003/159] updated triplanar --- shaders/metadata/arnold_shaders.mtd | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/shaders/metadata/arnold_shaders.mtd b/shaders/metadata/arnold_shaders.mtd index 25f2b92..d846312 100644 --- a/shaders/metadata/arnold_shaders.mtd +++ b/shaders/metadata/arnold_shaders.mtd @@ -2563,6 +2563,9 @@ softmax FLOAT 5 ############################################################################## [node triplanar] soft.category STRING "Texture" +soft.order STRING "BeginGroup Main input coord_space pref_name blend EndGroup " +"BeginGroup Transform scale rotate offset EndGroup " +"BeginGroup Cell cell cell_rotate cell_blend EndGroup" [attr input] desc STRING "The image to be looked up by the computed projection." @@ -2577,17 +2580,33 @@ desc STRING "Rotation applied to the projected UV" desc STRING "Offset applied to the projected UV" [attr coord_space] +desc STRING "Specifies the coordinate space to use." soft.label STRING "Coordinate Space" -desc STRING "Coordinate space" -[attr P] -desc STRING "If linked, the point at which the shader is evaluated." +[attr pref_name] +desc STRING "Specify the name of the reference position user-data array. Previously, the name was hard-coded as Pref, which is still the default." [attr blend] desc STRING "Blending factor at the seems." min FLOAT 0 max FLOAT 1 +[attr cell] +desc STRING "Enable Voronoi cellular projection." +soft.label STRING "Enable Cell" + +[attr cell_rotate] +desc STRING "Controls rotation of the randomization." +soft.label STRING "Rotate" +softmin FLOAT -180 +softmax FLOAT 180 + +[attr cell_blend] +desc STRING "Controls the blending width." +soft.label STRING "Blend" +min FLOAT 0 +max FLOAT 1 + ############################################################################## [node two_sided] soft.category STRING "Surface" From 2a9dd5a9f16ee76f7f6013ed3b77cfea47f081ed Mon Sep 17 00:00:00 2001 From: Jens Lindgren Date: Sun, 8 Apr 2018 01:54:36 +0200 Subject: [PATCH 004/159] update shadow_matte --- plugins/helpers/ArnoldScenePreferences.js | 2 - shaders/metadata/arnold_shaders.mtd | 76 +++++++++++++---------- 2 files changed, 44 insertions(+), 34 deletions(-) diff --git a/plugins/helpers/ArnoldScenePreferences.js b/plugins/helpers/ArnoldScenePreferences.js index 5989f75..2a32f3e 100644 --- a/plugins/helpers/ArnoldScenePreferences.js +++ b/plugins/helpers/ArnoldScenePreferences.js @@ -160,8 +160,6 @@ function CreateRenderChannels() aov_array.push({ name: "shadow", type: siRenderChannelColorType }); aov_array.push({ name: "shadow_diff", type: siRenderChannelColorType }); aov_array.push({ name: "shadow_mask", type: siRenderChannelColorType }); - aov_array.push({ name: "indirect_diffuse", type: siRenderChannelColorType }); - aov_array.push({ name: "indirect_specular", type: siRenderChannelColorType }); var aov_name, aov_type; for (var i = 0; i < aov_array.length; i++) diff --git a/shaders/metadata/arnold_shaders.mtd b/shaders/metadata/arnold_shaders.mtd index d846312..eaee8d0 100644 --- a/shaders/metadata/arnold_shaders.mtd +++ b/shaders/metadata/arnold_shaders.mtd @@ -1646,52 +1646,57 @@ desc STRING "min: Minimum component. max: Maximum component. average: Average of ############################################################################## [node shadow_matte] soft.category STRING "Surface" -soft.order STRING "BeginGroup Shadow shadow_color shadow_opacity EndGroup " -"BeginGroup Background background_type offscreen_color EndGroup " -"BeginGroup Diffuse diffuse_color diffuse_use_background diffuse_intensity backlighting indirect_diffuse_enable EndGroup " -"BeginGroup Specular indirect_specular_enable specular_color specular_intensity specular_roughness EndGroup " -"BeginGroup AOVs aov_shadow aov_shadow_diff aov_shadow_mask aov_indirect_diffuse aov_indirect_specular EndGroup" +soft.order STRING "BeginGroup Background background background_color EndGroup " +"BeginGroup Shadows shadow_color shadow_opacity backlighting alpha_mask EndGroup " +"BeginGroup Diffuse diffuse_color diffuse_intensity diffuse_use_background indirect_diffuse_enable EndGroup " +"BeginGroup Specular indirect_specular_enable specular_color specular_intensity specular_roughness specular_IOR EndGroup " +"BeginGroup Lights aov_group EndGroup " +"BeginGroup AOVs aov_shadow aov_shadow_diff aov_shadow_mask EndGroup" -# Shadow group +# Background group + +[attr background] +desc STRING "The background type, sky or image plane." + +[attr background_color] +desc STRING "The offscreen color." +soft.disable_when STRING "{ background != background_color }" + +# Shadows group [attr shadow_color] desc STRING "A color to tint the shadows." [attr shadow_opacity] desc STRING "The opacity of the shadows." -min FLOAT 0.0 -max FLOAT 1.0 - -# Background group +min FLOAT 0 +max FLOAT 1 -[attr background_type] -desc STRING "The background type, sky or image plane." +[attr backlighting] +desc STRING "Intensity of backlight effect." +min FLOAT 0 +max FLOAT 1 -[attr offscreen_color] -desc STRING "The offscreen color." -soft.disable_when STRING "{ background_type == sky }" +[attr alpha_mask] +desc STRING "Controls whether the alpha should be opaque or contain the shadow mask." # Diffuse group [attr diffuse_color] desc STRING "A color to tint the indirect diffuse." +soft.label STRING "Color" soft.disable_when STRING "{ diffuse_use_background == 1 }" -[attr diffuse_use_background] -desc STRING "Flag to select between using diffuse color or background color to tint the indirect diffuse." -soft.label STRING "Use Background Color" - [attr diffuse_intensity] desc STRING "The indirect diffuse intensity." +soft.label STRING "Intensity" min FLOAT 0.0 softmin FLOAT 0 softmax FLOAT 1 -[attr backlighting] -desc STRING "Intensity of backlight effect." -min FLOAT 0.0 -softmin FLOAT 0 -softmax FLOAT 1 +[attr diffuse_use_background] +desc STRING "Flag to select between using diffuse color or background color to tint the indirect diffuse." +soft.label STRING "Use Background" [attr indirect_diffuse_enable] desc STRING "Add indirect diffuse lighting." @@ -1705,10 +1710,12 @@ soft.label STRING "Indirect Specular" [attr specular_color] desc STRING "A color to tint the indirect specular." +soft.label STRING "Color" soft.disable_when STRING "{ indirect_specular_enable == 0 }" [attr specular_intensity] desc STRING "The indirect specular intensity." +soft.label STRING "Intensity" min FLOAT 0.0 softmin FLOAT 0 softmax FLOAT 1 @@ -1716,10 +1723,23 @@ soft.disable_when STRING "{ indirect_specular_enable == 0 }" [attr specular_roughness] desc STRING "The indirect specular roughness." +soft.label STRING "Roughness" min FLOAT 0.0 max FLOAT 1.0 soft.disable_when STRING "{ indirect_specular_enable == 0 }" +[attr specular_IOR] +desc STRING "The index of refraction." +soft.label STRING "IOR" +min FLOAT 0 +softmin FLOAT 0 +softmax FLOAT 3 +soft.disable_when STRING "{ indirect_specular_enable == 0 }" + +# Lights group +[attr aov_group] +soft.label STRING "Light Group" + # AOV group [attr aov_shadow] @@ -1734,14 +1754,6 @@ soft.label STRING "Shadow Diff" aov.type INT 4 soft.label STRING "Shadow Mask" -[attr aov_indirect_diffuse] -aov.type INT 5 -soft.label STRING "Indirect Diffuse" - -[attr aov_indirect_specular] -aov.type INT 5 -soft.label STRING "Indirect Specular" - ############################################################################## [node shuffle] soft.category STRING "Conversion" From ae4fb01f03622b41ccff240fff820453f7d310d7 Mon Sep 17 00:00:00 2001 From: Jens Lindgren Date: Sun, 8 Apr 2018 02:13:48 +0200 Subject: [PATCH 005/159] pref_name fixes --- shaders/metadata/arnold_shaders.mtd | 169 ++++++++++++++++++++++++++++ 1 file changed, 169 insertions(+) diff --git a/shaders/metadata/arnold_shaders.mtd b/shaders/metadata/arnold_shaders.mtd index eaee8d0..f216080 100644 --- a/shaders/metadata/arnold_shaders.mtd +++ b/shaders/metadata/arnold_shaders.mtd @@ -275,6 +275,173 @@ desc STRING "Use the shading normal for visibility tests instead of the " "projection." ############################################################################## +<<<<<<< HEAD +======= +[node car_paint] +soft.category STRING "Surface" +soft.order STRING "BeginGroup Base base base_color base_roughness EndGroup " +"BeginGroup Specular specular specular_color specular_flip_flop specular_light_facing specular_falloff specular_roughness specular_IOR transmission_color EndGroup " +"BeginGroup Flakes flake_color flake_flip_flop flake_light_facing flake_falloff flake_roughness flake_IOR flake_scale flake_density flake_layers flake_normal_randomize flake_coord_space pref_name EndGroup " +"BeginGroup Coat coat coat_color coat_roughness coat_IOR coat_normal EndGroup" + +[attr base] +desc STRING "The primer layer color weight." +soft.label STRING "Weight" +min FLOAT 0 +max FLOAT 1 + +[attr base_color] +desc STRING "The base diffuse color." +soft.label STRING "Color" +soft.viewport_guid STRING "{3515CC72-082C-11D0-91DE-00A024C78EE3}" + +[attr base_roughness] +desc STRING "An Oren-Nayar type diffuse shading model. This attribute takes surface roughness into account. " +"A value of 0.0 for the diffuse roughness is comparable to a Lambert, " +"however, higher values will result in a rougher surface look more suitable for materials like concrete, plaster, sand and so on." +soft.label STRING "Roughness" +min FLOAT 0 +max FLOAT 1 + +[attr specular] +desc STRING "The base coat color weight." +soft.label STRING "Weight" +min FLOAT 0 +max FLOAT 1 + +[attr specular_color] +desc STRING "The color of the specular reflection." +soft.label STRING "Color" +soft.viewport_guid STRING "{3515CC73-082C-11D0-91DE-00A024C78EE3}" + +[attr specular_flip_flop] +desc STRING "Connect a ramp shader here to modulate the specular reflection from the base coat depending on the viewing angle. This can be used to mimic a pearlescent effect." +soft.label STRING "Flip-Flop" + +[attr specular_light_facing] +desc STRING "Modulates the base coat specular color of the area facing the light source." +soft.label STRING "Light Facing Color" + +[attr specular_falloff] +desc STRING "The falloff rate of the light facing color of the base specular coat. The higher the value, the narrower the region. It also determines how the ramp color and light facing color are blended." +soft.label STRING "Falloff" +min FLOAT 0 +max FLOAT 1 + +[attr specular_roughness] +desc STRING "Controls how blurry/ glossy the specular reflections are. The lower the value, the sharper the reflection. " +"In the limit, a value of 0 will give you a perfectly sharp mirror reflection, whilst 1.0 will create reflections that are close to diffuse shading." +soft.label STRING "Roughness" +min FLOAT 0 +max FLOAT 1 + +[attr specular_IOR] +desc STRING "The index of refraction." +soft.label STRING "IOR" +min FLOAT 0 +softmin FLOAT 1 +softmax FLOAT 3 + +[attr transmission_color] +desc STRING "Simulates light attenuation due to pigments. The lower the value, the denser pigments." +soft.label STRING "Transmission Color" + +[attr flake_color] +desc STRING "The color the specular reflection will be modulated with. Use this color to 'tint' the specular highlight from flakes." +soft.label STRING "Color" + +[attr flake_flip_flop] +desc STRING "Connect a ramp shader here to modulate the specular reflection from flakes depending on the viewing angle." +soft.label STRING "Flip-Flop" + +[attr flake_light_facing] +desc STRING "Modulate the specular reflection color from flakes of the area facing the light source." +soft.label STRING "Light Facing Color" + +[attr flake_falloff] +desc STRING "The falloff rate of the light facing color of flakes. The higher the value, the narrower the region." +soft.label STRING "Falloff" +min FLOAT 0 +max FLOAT 1 + +[attr flake_roughness] +desc STRING "Controls how blurry/ glossy the specular reflections are. The lower the value, the sharper the reflection. " +"In the limit, a value of 0 will give you a perfectly sharp mirror reflection, whilst 1.0 will create reflections that are close to diffuse shading." +soft.label STRING "Roughness" +min FLOAT 0 +max FLOAT 1 + +[attr flake_IOR] +desc STRING "Determines the index of refraction of flakes." +soft.label STRING "IOR" +min FLOAT 0 +softmin FLOAT 1 +softmax FLOAT 200 + +[attr flake_scale] +desc STRING "Scales the flake structure up or down. Smaller values zoom out of the map, giving a larger number of flakes." +soft.label STRING "Scale" +softmin FLOAT 0 +softmax FLOAT 0.01 + +[attr flake_density] +desc STRING "Controls the density of flakes. There will be no flakes if it is 0. The surface is fully covered with flakes at 1." +soft.label STRING "Density" +min FLOAT 0 +max FLOAT 1 + +[attr flake_layers] +desc STRING "Specify the number of flake layers. The flakes at a deep layer are covered by the ones closest to the surface." +soft.label STRING "Layers" +min INT 0 +softmin INT 0 +softmax INT 5 + +[attr flake_normal_randomize] +desc STRING "Randomize the orientation of flakes." +soft.label STRING "Normal Randomize" +min FLOAT 0 +max FLOAT 1 + +[attr flake_coord_space] +desc STRING "Specifies the coordinate space used for calculating the shapes of flakes." +soft.label STRING "Coord Space" + +[attr pref_name] +desc STRING "Specify the name of the reference position user-data array. Previously, the name was hard-coded as Pref, which is still the default." +soft.disable_when STRING "{ flake_coord_space != Pref }" + +[attr coat] +desc STRING "The clear-coat weight." +soft.label STRING "Weight" +min FLOAT 0 +max FLOAT 1 + +[attr coat_color] +desc STRING "This is the color of the coating layer's transparency." +soft.label STRING "Color" + +[attr coat_roughness] +desc STRING "Controls how blurry/ glossy the specular reflections are. The lower the value, the sharper the reflection. " +"In the limit, a value of 0 will give you a perfectly sharp mirror reflection, whilst 1.0 will create reflections that are close to diffuse shading." +soft.label STRING "Roughness" +min FLOAT 0 +max FLOAT 1 + +[attr coat_IOR] +desc STRING "The index of refraction." +soft.label STRING "IOR" +min FLOAT 0 +softmin FLOAT 1 +softmax FLOAT 3 + +[attr coat_normal] +desc STRING "Connect a normal map here (usually exported from Mudbox or ZBrush)." +soft.label STRING "Normal" +soft.inspectable BOOL false + +############################################################################## +>>>>>>> a872f14... pref_name fixes [node checkerboard] soft.category STRING "Texture" @@ -2597,6 +2764,8 @@ soft.label STRING "Coordinate Space" [attr pref_name] desc STRING "Specify the name of the reference position user-data array. Previously, the name was hard-coded as Pref, which is still the default." +soft.disable_when STRING "{ coord_space != Pref }" + [attr blend] desc STRING "Blending factor at the seems." From 517efe9aa8c88020d7dfcb158ef42f9672b294c5 Mon Sep 17 00:00:00 2001 From: Jens Lindgren Date: Sun, 8 Apr 2018 02:18:21 +0200 Subject: [PATCH 006/159] update flakes --- shaders/metadata/arnold_shaders.mtd | 31 +++++++++++++++++++++++++---- 1 file changed, 27 insertions(+), 4 deletions(-) diff --git a/shaders/metadata/arnold_shaders.mtd b/shaders/metadata/arnold_shaders.mtd index f216080..af99b2f 100644 --- a/shaders/metadata/arnold_shaders.mtd +++ b/shaders/metadata/arnold_shaders.mtd @@ -1007,7 +1007,7 @@ desc STRING "Return the complement of the result (1 - x)." ############################################################################## [node flakes] -soft.category STRING "Surface" +soft.category STRING "Texture" [attr scale] desc STRING "Scales the flake structure up or down. Larger values zoom out of the map, giving a larger number of flakes." @@ -1015,11 +1015,29 @@ min FLOAT 0 softmin FLOAT 0 softmax FLOAT 100 -[attr size] -desc STRING "The relative size of the flakes." +[attr density] +desc STRING "Controls the density of flakes. There will be no flakes if it is 0. The surface is fully covered with flakes at 1." +min FLOAT 0 +max FLOAT 1 + +[attr step] +desc STRING "This shader performs ray marching to compute 3d flakes. With this users can specify the step size. The number of layers is determined by depth/step." min FLOAT 0 softmin FLOAT 0 -softmax FLOAT 1 +softmax FLOAT 10 + +[attr depth] +desc STRING "Specifies how deep a ray goes inside of an object. This shader generates 2d flakes if Depth = 0, and 3d flakes otherwise. If a ray hits an object, it cannot traverse longer than the specified Depth." +min FLOAT 0 +softmin FLOAT 0 +softmax FLOAT 10 + +[attr IOR] +desc STRING "This value is used to refract a ray used for ray marching." +sof.label STRING "IOR" +min FLOAT 0 +softmin FLOAT 0 +softmax FLOAT 3 [attr normal_randomize] desc STRING "Blends between the smooth surface normal (0) and the random flake normal (1)." @@ -1033,6 +1051,11 @@ desc STRING "Specifies the coordinate space used for calculating the random norm - Pref: short for 'vertex in reference pose'. The plugin can pass these vertices to Arnold (in addition to the regular, deformed vertices) which can in turn be queried by the shader so that the texture 'sticks' to the reference pose and does not swim as the mesh deforms. - UV: the texture coordinates." +[attr pref_name] +desc STRING "Specify the name of the reference position user-data array. Previously, the name was hard-coded as Pref, which is still the default." +soft.disable_when STRING "{ coord_space != Pref }" + + [attr output_space] desc STRING "Specifies the space of the output normal vector." From d089bd317873e3b1349d49dbebd3c3c4444fa2c6 Mon Sep 17 00:00:00 2001 From: Jens Lindgren Date: Sun, 8 Apr 2018 02:31:31 +0200 Subject: [PATCH 007/159] update noise --- shaders/metadata/arnold_shaders.mtd | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/shaders/metadata/arnold_shaders.mtd b/shaders/metadata/arnold_shaders.mtd index af99b2f..414410a 100644 --- a/shaders/metadata/arnold_shaders.mtd +++ b/shaders/metadata/arnold_shaders.mtd @@ -1407,7 +1407,7 @@ soft.label STRING "The input color to be negated." ############################################################################## [node noise] soft.category STRING "Texture" -soft.order STRING "octaves lacunarity distortion amplitude coord_space scale offset P time mode color1 color2" +soft.order STRING "octaves lacunarity distortion amplitude coord_space pref_name scale offset P time mode color1 color2" [attr octaves] desc STRING "The number of octaves over which the noise function is calculated (the fractal noise function is repeated at multiple frequencies, known as octaves; normally each octave is at about twice the frequency, i.e., half the size, of the previous one, but you can alter this with the lacunarity control)." @@ -1417,7 +1417,7 @@ softmax INT 8 [attr lacunarity] desc STRING "Controls the average size of gaps in the texture pattern produced. Lacunarity actually means the change in scale between each octave - in musical scales this would be 2.0, meaning each octave is at twice the frequency / half the scale of the previous one, but for our purposes numbers that are near 2.0, but not actually 2.0 are best. In most cases we recommend using the default value of 1.92." -min FLOAT 0.001 +min FLOAT 0.0001 softmin FLOAT 1 softmax FLOAT 5 @@ -1429,13 +1429,15 @@ softmax FLOAT 10 [attr amplitude] desc STRING "Controls the amplitude, or range, of the output. Normally the output is RGBA with values between 0 and 1, the amplitude control multiplies this." -min FLOAT 0 softmin FLOAT 0 softmax FLOAT 1 [attr coord_space] desc STRING "Specify the coordinate space used to compute the perlin noise." -soft.label STRING "Coordinate Space" + +[attr pref_name] +desc STRING "Specify the name of the reference position user-data array. Previously, the name was hard-coded as Pref, which is still the default." +soft.disable_when STRING "{ coord_space != Pref }" [attr scale] desc STRING "Control the scale of the noise function in x, y, and z directions." From a7b0b08b8dbac6f4c65333ae6b72bfb9f7e0efa6 Mon Sep 17 00:00:00 2001 From: Jens Lindgren Date: Sun, 8 Apr 2018 15:18:09 +0200 Subject: [PATCH 008/159] commit fix --- shaders/metadata/arnold_shaders.mtd | 3 --- 1 file changed, 3 deletions(-) diff --git a/shaders/metadata/arnold_shaders.mtd b/shaders/metadata/arnold_shaders.mtd index 414410a..b14b238 100644 --- a/shaders/metadata/arnold_shaders.mtd +++ b/shaders/metadata/arnold_shaders.mtd @@ -275,8 +275,6 @@ desc STRING "Use the shading normal for visibility tests instead of the " "projection." ############################################################################## -<<<<<<< HEAD -======= [node car_paint] soft.category STRING "Surface" soft.order STRING "BeginGroup Base base base_color base_roughness EndGroup " @@ -441,7 +439,6 @@ soft.label STRING "Normal" soft.inspectable BOOL false ############################################################################## ->>>>>>> a872f14... pref_name fixes [node checkerboard] soft.category STRING "Texture" From f547fef4308675aa8acdf54c0ad29ae768bcd206 Mon Sep 17 00:00:00 2001 From: Jens Lindgren Date: Sun, 8 Apr 2018 15:32:33 +0200 Subject: [PATCH 009/159] remove car_paint shader --- shaders/metadata/arnold_shaders.mtd | 164 ---------------------------- 1 file changed, 164 deletions(-) diff --git a/shaders/metadata/arnold_shaders.mtd b/shaders/metadata/arnold_shaders.mtd index b14b238..10c1ca9 100644 --- a/shaders/metadata/arnold_shaders.mtd +++ b/shaders/metadata/arnold_shaders.mtd @@ -274,170 +274,6 @@ desc STRING "Use the shading normal for visibility tests instead of the " "boundaries that can produce seams if the render camera is used for the " "projection." -############################################################################## -[node car_paint] -soft.category STRING "Surface" -soft.order STRING "BeginGroup Base base base_color base_roughness EndGroup " -"BeginGroup Specular specular specular_color specular_flip_flop specular_light_facing specular_falloff specular_roughness specular_IOR transmission_color EndGroup " -"BeginGroup Flakes flake_color flake_flip_flop flake_light_facing flake_falloff flake_roughness flake_IOR flake_scale flake_density flake_layers flake_normal_randomize flake_coord_space pref_name EndGroup " -"BeginGroup Coat coat coat_color coat_roughness coat_IOR coat_normal EndGroup" - -[attr base] -desc STRING "The primer layer color weight." -soft.label STRING "Weight" -min FLOAT 0 -max FLOAT 1 - -[attr base_color] -desc STRING "The base diffuse color." -soft.label STRING "Color" -soft.viewport_guid STRING "{3515CC72-082C-11D0-91DE-00A024C78EE3}" - -[attr base_roughness] -desc STRING "An Oren-Nayar type diffuse shading model. This attribute takes surface roughness into account. " -"A value of 0.0 for the diffuse roughness is comparable to a Lambert, " -"however, higher values will result in a rougher surface look more suitable for materials like concrete, plaster, sand and so on." -soft.label STRING "Roughness" -min FLOAT 0 -max FLOAT 1 - -[attr specular] -desc STRING "The base coat color weight." -soft.label STRING "Weight" -min FLOAT 0 -max FLOAT 1 - -[attr specular_color] -desc STRING "The color of the specular reflection." -soft.label STRING "Color" -soft.viewport_guid STRING "{3515CC73-082C-11D0-91DE-00A024C78EE3}" - -[attr specular_flip_flop] -desc STRING "Connect a ramp shader here to modulate the specular reflection from the base coat depending on the viewing angle. This can be used to mimic a pearlescent effect." -soft.label STRING "Flip-Flop" - -[attr specular_light_facing] -desc STRING "Modulates the base coat specular color of the area facing the light source." -soft.label STRING "Light Facing Color" - -[attr specular_falloff] -desc STRING "The falloff rate of the light facing color of the base specular coat. The higher the value, the narrower the region. It also determines how the ramp color and light facing color are blended." -soft.label STRING "Falloff" -min FLOAT 0 -max FLOAT 1 - -[attr specular_roughness] -desc STRING "Controls how blurry/ glossy the specular reflections are. The lower the value, the sharper the reflection. " -"In the limit, a value of 0 will give you a perfectly sharp mirror reflection, whilst 1.0 will create reflections that are close to diffuse shading." -soft.label STRING "Roughness" -min FLOAT 0 -max FLOAT 1 - -[attr specular_IOR] -desc STRING "The index of refraction." -soft.label STRING "IOR" -min FLOAT 0 -softmin FLOAT 1 -softmax FLOAT 3 - -[attr transmission_color] -desc STRING "Simulates light attenuation due to pigments. The lower the value, the denser pigments." -soft.label STRING "Transmission Color" - -[attr flake_color] -desc STRING "The color the specular reflection will be modulated with. Use this color to 'tint' the specular highlight from flakes." -soft.label STRING "Color" - -[attr flake_flip_flop] -desc STRING "Connect a ramp shader here to modulate the specular reflection from flakes depending on the viewing angle." -soft.label STRING "Flip-Flop" - -[attr flake_light_facing] -desc STRING "Modulate the specular reflection color from flakes of the area facing the light source." -soft.label STRING "Light Facing Color" - -[attr flake_falloff] -desc STRING "The falloff rate of the light facing color of flakes. The higher the value, the narrower the region." -soft.label STRING "Falloff" -min FLOAT 0 -max FLOAT 1 - -[attr flake_roughness] -desc STRING "Controls how blurry/ glossy the specular reflections are. The lower the value, the sharper the reflection. " -"In the limit, a value of 0 will give you a perfectly sharp mirror reflection, whilst 1.0 will create reflections that are close to diffuse shading." -soft.label STRING "Roughness" -min FLOAT 0 -max FLOAT 1 - -[attr flake_IOR] -desc STRING "Determines the index of refraction of flakes." -soft.label STRING "IOR" -min FLOAT 0 -softmin FLOAT 1 -softmax FLOAT 200 - -[attr flake_scale] -desc STRING "Scales the flake structure up or down. Smaller values zoom out of the map, giving a larger number of flakes." -soft.label STRING "Scale" -softmin FLOAT 0 -softmax FLOAT 0.01 - -[attr flake_density] -desc STRING "Controls the density of flakes. There will be no flakes if it is 0. The surface is fully covered with flakes at 1." -soft.label STRING "Density" -min FLOAT 0 -max FLOAT 1 - -[attr flake_layers] -desc STRING "Specify the number of flake layers. The flakes at a deep layer are covered by the ones closest to the surface." -soft.label STRING "Layers" -min INT 0 -softmin INT 0 -softmax INT 5 - -[attr flake_normal_randomize] -desc STRING "Randomize the orientation of flakes." -soft.label STRING "Normal Randomize" -min FLOAT 0 -max FLOAT 1 - -[attr flake_coord_space] -desc STRING "Specifies the coordinate space used for calculating the shapes of flakes." -soft.label STRING "Coord Space" - -[attr pref_name] -desc STRING "Specify the name of the reference position user-data array. Previously, the name was hard-coded as Pref, which is still the default." -soft.disable_when STRING "{ flake_coord_space != Pref }" - -[attr coat] -desc STRING "The clear-coat weight." -soft.label STRING "Weight" -min FLOAT 0 -max FLOAT 1 - -[attr coat_color] -desc STRING "This is the color of the coating layer's transparency." -soft.label STRING "Color" - -[attr coat_roughness] -desc STRING "Controls how blurry/ glossy the specular reflections are. The lower the value, the sharper the reflection. " -"In the limit, a value of 0 will give you a perfectly sharp mirror reflection, whilst 1.0 will create reflections that are close to diffuse shading." -soft.label STRING "Roughness" -min FLOAT 0 -max FLOAT 1 - -[attr coat_IOR] -desc STRING "The index of refraction." -soft.label STRING "IOR" -min FLOAT 0 -softmin FLOAT 1 -softmax FLOAT 3 - -[attr coat_normal] -desc STRING "Connect a normal map here (usually exported from Mudbox or ZBrush)." -soft.label STRING "Normal" -soft.inspectable BOOL false - ############################################################################## [node checkerboard] soft.category STRING "Texture" From 851e7804c302d6de6fc6799d22fcf9061fad3439 Mon Sep 17 00:00:00 2001 From: Jens Lindgren Date: Sun, 8 Apr 2018 16:02:10 +0200 Subject: [PATCH 010/159] add trace_set to ambient_occlusion --- shaders/metadata/arnold_shaders.mtd | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/shaders/metadata/arnold_shaders.mtd b/shaders/metadata/arnold_shaders.mtd index 10c1ca9..181ee72 100644 --- a/shaders/metadata/arnold_shaders.mtd +++ b/shaders/metadata/arnold_shaders.mtd @@ -31,7 +31,7 @@ soft.label STRING "Input 2" ############################################################################## [node ambient_occlusion] soft.category STRING "Surface" -soft.order STRING "white black samples spread near_clip far_clip falloff self_only invert_normals normal" +soft.order STRING "white black samples spread near_clip far_clip falloff self_only invert_normals trace_set inclusive normal" [attr white] desc STRING "The output color when the ratio of the ray hits/total rays is zero (fully unoccluded)." @@ -41,6 +41,7 @@ desc STRING "The output color when the ratio of the ray hits/total rays is one ( [attr normal] desc STRING "Alters the opacity of the ambient occlusion effect, thereby changing the opacity of the object. Lower values increase the opacity. It is possible to drive the opacity of the ambient occlusion effect with a shading network. You must ensure that Opaque is switched off for the geometry." +soft.inspectable BOOL false [attr samples] desc STRING "Controls the number of rays that will be fired to compute the ray hits/total ratio. Increasing the number of samples will reduce noise and give a better quality result." @@ -75,6 +76,12 @@ softmax FLOAT 100 [attr invert_normals] desc STRING "This attribute changes the direction of the rays being traced. When it is off the rays are traced outside of the surface. When it is on the rays are traced inside the surface. The most common use for this is to simulate dirt or erosion, as corners and cracks will get darker." +[attr trace_set] +desc STRING "The string label defining the set of objects to be traced or avoided. Objects are labeled using the Arnold Parameters Tag property." + +[attr inclusive] +desc STRING "If on, the tracing works in inclusive mode, else in exclusive, as described above." + [attr self_only] desc STRING "Gather occlusion against the shaded object only." From 98ac7c7c6eaa321a631e3bc8f32844fe26c615b9 Mon Sep 17 00:00:00 2001 From: Jens Lindgren Date: Sun, 8 Apr 2018 16:18:30 +0200 Subject: [PATCH 011/159] add extra_samples to standard_hair --- shaders/metadata/arnold_shaders.mtd | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/shaders/metadata/arnold_shaders.mtd b/shaders/metadata/arnold_shaders.mtd index 181ee72..eb4f0da 100644 --- a/shaders/metadata/arnold_shaders.mtd +++ b/shaders/metadata/arnold_shaders.mtd @@ -1876,7 +1876,7 @@ soft.order STRING "BeginGroup Color base base_color melanin melanin_redness mela "BeginGroup Tint specular_tint specular2_tint transmission_tint EndGroup " "BeginGroup Diffuse diffuse diffuse_color EndGroup " "BeginGroup Emission emission emission_color EndGroup " -"BeginGroup Advanced opacity indirect_diffuse indirect_specular extra_depth EndGroup" +"BeginGroup Advanced opacity indirect_diffuse indirect_specular extra_depth extra_samples EndGroup" [attr base] desc STRING "Brightness of the hair, a multiplier for the base color." @@ -1977,6 +1977,12 @@ desc STRING "Adds extra Specular Ray Depth just for this shader." min INT 0 max INT 64 +[attr extra_samples] +desc STRING "Adds additional GI samples on a per-shader basis (d'Eon BSDF Specular and Transmission (R, TT, and TRT paths)." +min INT 0 +softmin INT 0 +softmax INT 8 + ############################################################################## [node standard_surface] soft.category STRING "Surface" From b48fe7a6ad7fd803aeb51e48d97da498e8defa0f Mon Sep 17 00:00:00 2001 From: Jens Lindgren Date: Sun, 8 Apr 2018 16:26:15 +0200 Subject: [PATCH 012/159] add face_mode to color_jitter --- shaders/metadata/arnold_shaders.mtd | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/shaders/metadata/arnold_shaders.mtd b/shaders/metadata/arnold_shaders.mtd index eb4f0da..bf31059 100644 --- a/shaders/metadata/arnold_shaders.mtd +++ b/shaders/metadata/arnold_shaders.mtd @@ -436,7 +436,7 @@ softmax FLOAT 1 soft.category STRING "Color" soft.order STRING "BeginGroup Input input EndGroup " "BeginGroup Object obj_gain_min obj_gain_max obj_hue_min obj_hue_max obj_saturation_min obj_saturation_max obj_seed EndGroup " -"BeginGroup Face face_gain_min face_gain_max face_hue_min face_hue_max face_saturation_min face_saturation_max face_seed EndGroup " +"BeginGroup Face face_gain_min face_gain_max face_hue_min face_hue_max face_saturation_min face_saturation_max face_seed face_mode EndGroup " "BeginGroup User_Data data_input data_gain_min data_gain_max data_hue_min data_hue_max data_saturation_min data_saturation_max data_seed EndGroup " "BeginGroup Procedural proc_gain_min proc_gain_max proc_hue_min proc_hue_max proc_saturation_min proc_saturation_max proc_seed EndGroup" @@ -620,6 +620,9 @@ softmin INT 0 softmax INT 100 soft.label STRING "Seed" +[attr face_mode] +desc STRING "The color can be randomized per triangle (Face ID) as well as quadrangle (Uniform ID)." + ############################################################################## [node compare] soft.category STRING "Math" From 5403ec0784fa3cc2ae9a8b0f47d82d6e58c4367c Mon Sep 17 00:00:00 2001 From: Jens Lindgren Date: Sun, 8 Apr 2018 16:32:24 +0200 Subject: [PATCH 013/159] add normal to passthrough --- shaders/metadata/arnold_shaders.mtd | 3 +++ 1 file changed, 3 insertions(+) diff --git a/shaders/metadata/arnold_shaders.mtd b/shaders/metadata/arnold_shaders.mtd index bf31059..701ef49 100644 --- a/shaders/metadata/arnold_shaders.mtd +++ b/shaders/metadata/arnold_shaders.mtd @@ -1425,6 +1425,9 @@ soft.label STRING "Material 19" [attr eval20] soft.label STRING "Material 20" +[attr normal] +soft.inspectable BOOL false + ############################################################################## [node physical_sky] soft.category STRING "Environment" From 9c73fa96a938c43754ff79c55931516fc8106859 Mon Sep 17 00:00:00 2001 From: Jens Lindgren Date: Sun, 8 Apr 2018 00:29:48 +0200 Subject: [PATCH 014/159] change rendering api to compile with arnold 5.1 --- plugins/sitoa/common/Tools.cpp | 15 +++------------ plugins/sitoa/renderer/RenderInstance.cpp | 2 +- plugins/sitoa/renderer/RenderInstance.h | 2 +- 3 files changed, 5 insertions(+), 14 deletions(-) diff --git a/plugins/sitoa/common/Tools.cpp b/plugins/sitoa/common/Tools.cpp index 36f1781..13640c2 100644 --- a/plugins/sitoa/common/Tools.cpp +++ b/plugins/sitoa/common/Tools.cpp @@ -1216,9 +1216,6 @@ CString GetRenderCodeDesc(int in_errorCode) case AI_ABORT: desc = L"render aborted"; break; - case AI_ERROR_WRONG_OUTPUT: - desc = L"can't open output file"; - break; case AI_ERROR_NO_CAMERA: desc = L"camera not defined"; break; @@ -1231,21 +1228,15 @@ CString GetRenderCodeDesc(int in_errorCode) case AI_ERROR_RENDER_REGION: desc = L"invalid render region"; break; - case AI_ERROR_OUTPUT_EXISTS: - desc = L"output file already exists"; - break; - case AI_ERROR_OPENING_FILE: - desc = L"can't open file"; - break; case AI_INTERRUPT: desc = L"render interrupted by user"; break; - case AI_ERROR_UNRENDERABLE_SCENEGRAPH: - desc = L"unrenderable scenegraph"; - break; case AI_ERROR_NO_OUTPUTS: desc = L"no rendering outputs"; break; + case AI_ERROR_UNAVAILABLE_DEVICE: + desc = L"Cannot create GPU context."; + break; case AI_ERROR: desc = L"generic error"; break; diff --git a/plugins/sitoa/renderer/RenderInstance.cpp b/plugins/sitoa/renderer/RenderInstance.cpp index b18e1f4..81fecfe 100644 --- a/plugins/sitoa/renderer/RenderInstance.cpp +++ b/plugins/sitoa/renderer/RenderInstance.cpp @@ -1035,7 +1035,7 @@ void CRenderInstance::SetRenderStatus(const eRenderStatus in_status) } -int CRenderInstance::DoRender(const int in_mode) +int CRenderInstance::DoRender(const AtRenderMode in_mode) { SetRenderStatus(eRenderStatus_Started); int result = AiRender(in_mode); diff --git a/plugins/sitoa/renderer/RenderInstance.h b/plugins/sitoa/renderer/RenderInstance.h index 95e0fe8..0ee1b2c 100644 --- a/plugins/sitoa/renderer/RenderInstance.h +++ b/plugins/sitoa/renderer/RenderInstance.h @@ -266,6 +266,6 @@ class CRenderInstance // class for the auto shader definition CShaderDefSet m_shaderDefSet; - int DoRender(const int in_mode = AI_RENDER_MODE_CAMERA); + int DoRender(const AtRenderMode in_mode = AI_RENDER_MODE_CAMERA); }; From b18cc1fb266f8a3d752e0b16a65cecc9165ae865 Mon Sep 17 00:00:00 2001 From: Jens Lindgren Date: Sun, 8 Apr 2018 00:36:25 +0200 Subject: [PATCH 015/159] beginning of sitoa 5.0.0 --- README.md | 6 +++++- plugins/sitoa/version.cpp | 6 +++--- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index b3d39f7..72d065a 100644 --- a/README.md +++ b/README.md @@ -18,7 +18,7 @@ under an Apache 2.0 open source license. #### Requirements * Softimage 2015 SP1 -* Arnold 5.0.2.4 or newer +* Arnold 5.1.0.0 or newer * Python 2.6 or newer * Visual Studio 2012 (Windows) * GCC 4.2.4 (Linux) @@ -366,5 +366,9 @@ With contributions by: - Frederic Servant - Jules Stevenson +After open-sourcing, development has been continued by: + +- Jens Lindgren + Special thanks to all the users who passionately provided feedback, production assets, bug reports and suggested features during those years. diff --git a/plugins/sitoa/version.cpp b/plugins/sitoa/version.cpp index b0262a3..d04f4eb 100644 --- a/plugins/sitoa/version.cpp +++ b/plugins/sitoa/version.cpp @@ -13,9 +13,9 @@ See the License for the specific language governing permissions and limitations #include -#define SITOA_MAJOR_VERSION_NUM 4 -#define SITOA_MINOR_VERSION_NUM 1 -#define SITOA_FIX_VERSION L"0" +#define SITOA_MAJOR_VERSION_NUM 5 +#define SITOA_MINOR_VERSION_NUM 0 +#define SITOA_FIX_VERSION L"0-alpha" CString GetSItoAVersion(bool in_addPlatform) From 807679317de2c47960eb1ecbed16062e9b446e03 Mon Sep 17 00:00:00 2001 From: Jens Lindgren Date: Sun, 8 Apr 2018 00:40:07 +0200 Subject: [PATCH 016/159] spell change --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 72d065a..0c785be 100644 --- a/README.md +++ b/README.md @@ -366,7 +366,7 @@ With contributions by: - Frederic Servant - Jules Stevenson -After open-sourcing, development has been continued by: +After open-sourcing, development has continued by: - Jens Lindgren From 54b80cbaa7618e09af2da0f9171d456efa92ee33 Mon Sep 17 00:00:00 2001 From: Jens Lindgren Date: Sun, 8 Apr 2018 17:20:24 +0200 Subject: [PATCH 017/159] update gitignore --- .gitignore | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.gitignore b/.gitignore index 94b34e4..303edc1 100644 --- a/.gitignore +++ b/.gitignore @@ -19,6 +19,12 @@ custom.py dist build +# VS and VS Code +.vs +.vscode/* +*.user +*.code-workspace + # Eclipse .settings .*project From 9c31793c6b1b30546902a6742d263fd12513c0e3 Mon Sep 17 00:00:00 2001 From: Jens Lindgren Date: Mon, 9 Apr 2018 01:41:30 +0200 Subject: [PATCH 018/159] Revert "remove car_paint shader" This reverts commit f547fef4308675aa8acdf54c0ad29ae768bcd206. --- shaders/metadata/arnold_shaders.mtd | 164 ++++++++++++++++++++++++++++ 1 file changed, 164 insertions(+) diff --git a/shaders/metadata/arnold_shaders.mtd b/shaders/metadata/arnold_shaders.mtd index 701ef49..d26ed25 100644 --- a/shaders/metadata/arnold_shaders.mtd +++ b/shaders/metadata/arnold_shaders.mtd @@ -281,6 +281,170 @@ desc STRING "Use the shading normal for visibility tests instead of the " "boundaries that can produce seams if the render camera is used for the " "projection." +############################################################################## +[node car_paint] +soft.category STRING "Surface" +soft.order STRING "BeginGroup Base base base_color base_roughness EndGroup " +"BeginGroup Specular specular specular_color specular_flip_flop specular_light_facing specular_falloff specular_roughness specular_IOR transmission_color EndGroup " +"BeginGroup Flakes flake_color flake_flip_flop flake_light_facing flake_falloff flake_roughness flake_IOR flake_scale flake_density flake_layers flake_normal_randomize flake_coord_space pref_name EndGroup " +"BeginGroup Coat coat coat_color coat_roughness coat_IOR coat_normal EndGroup" + +[attr base] +desc STRING "The primer layer color weight." +soft.label STRING "Weight" +min FLOAT 0 +max FLOAT 1 + +[attr base_color] +desc STRING "The base diffuse color." +soft.label STRING "Color" +soft.viewport_guid STRING "{3515CC72-082C-11D0-91DE-00A024C78EE3}" + +[attr base_roughness] +desc STRING "An Oren-Nayar type diffuse shading model. This attribute takes surface roughness into account. " +"A value of 0.0 for the diffuse roughness is comparable to a Lambert, " +"however, higher values will result in a rougher surface look more suitable for materials like concrete, plaster, sand and so on." +soft.label STRING "Roughness" +min FLOAT 0 +max FLOAT 1 + +[attr specular] +desc STRING "The base coat color weight." +soft.label STRING "Weight" +min FLOAT 0 +max FLOAT 1 + +[attr specular_color] +desc STRING "The color of the specular reflection." +soft.label STRING "Color" +soft.viewport_guid STRING "{3515CC73-082C-11D0-91DE-00A024C78EE3}" + +[attr specular_flip_flop] +desc STRING "Connect a ramp shader here to modulate the specular reflection from the base coat depending on the viewing angle. This can be used to mimic a pearlescent effect." +soft.label STRING "Flip-Flop" + +[attr specular_light_facing] +desc STRING "Modulates the base coat specular color of the area facing the light source." +soft.label STRING "Light Facing Color" + +[attr specular_falloff] +desc STRING "The falloff rate of the light facing color of the base specular coat. The higher the value, the narrower the region. It also determines how the ramp color and light facing color are blended." +soft.label STRING "Falloff" +min FLOAT 0 +max FLOAT 1 + +[attr specular_roughness] +desc STRING "Controls how blurry/ glossy the specular reflections are. The lower the value, the sharper the reflection. " +"In the limit, a value of 0 will give you a perfectly sharp mirror reflection, whilst 1.0 will create reflections that are close to diffuse shading." +soft.label STRING "Roughness" +min FLOAT 0 +max FLOAT 1 + +[attr specular_IOR] +desc STRING "The index of refraction." +soft.label STRING "IOR" +min FLOAT 0 +softmin FLOAT 1 +softmax FLOAT 3 + +[attr transmission_color] +desc STRING "Simulates light attenuation due to pigments. The lower the value, the denser pigments." +soft.label STRING "Transmission Color" + +[attr flake_color] +desc STRING "The color the specular reflection will be modulated with. Use this color to 'tint' the specular highlight from flakes." +soft.label STRING "Color" + +[attr flake_flip_flop] +desc STRING "Connect a ramp shader here to modulate the specular reflection from flakes depending on the viewing angle." +soft.label STRING "Flip-Flop" + +[attr flake_light_facing] +desc STRING "Modulate the specular reflection color from flakes of the area facing the light source." +soft.label STRING "Light Facing Color" + +[attr flake_falloff] +desc STRING "The falloff rate of the light facing color of flakes. The higher the value, the narrower the region." +soft.label STRING "Falloff" +min FLOAT 0 +max FLOAT 1 + +[attr flake_roughness] +desc STRING "Controls how blurry/ glossy the specular reflections are. The lower the value, the sharper the reflection. " +"In the limit, a value of 0 will give you a perfectly sharp mirror reflection, whilst 1.0 will create reflections that are close to diffuse shading." +soft.label STRING "Roughness" +min FLOAT 0 +max FLOAT 1 + +[attr flake_IOR] +desc STRING "Determines the index of refraction of flakes." +soft.label STRING "IOR" +min FLOAT 0 +softmin FLOAT 1 +softmax FLOAT 200 + +[attr flake_scale] +desc STRING "Scales the flake structure up or down. Smaller values zoom out of the map, giving a larger number of flakes." +soft.label STRING "Scale" +softmin FLOAT 0 +softmax FLOAT 0.01 + +[attr flake_density] +desc STRING "Controls the density of flakes. There will be no flakes if it is 0. The surface is fully covered with flakes at 1." +soft.label STRING "Density" +min FLOAT 0 +max FLOAT 1 + +[attr flake_layers] +desc STRING "Specify the number of flake layers. The flakes at a deep layer are covered by the ones closest to the surface." +soft.label STRING "Layers" +min INT 0 +softmin INT 0 +softmax INT 5 + +[attr flake_normal_randomize] +desc STRING "Randomize the orientation of flakes." +soft.label STRING "Normal Randomize" +min FLOAT 0 +max FLOAT 1 + +[attr flake_coord_space] +desc STRING "Specifies the coordinate space used for calculating the shapes of flakes." +soft.label STRING "Coord Space" + +[attr pref_name] +desc STRING "Specify the name of the reference position user-data array. Previously, the name was hard-coded as Pref, which is still the default." +soft.disable_when STRING "{ flake_coord_space != Pref }" + +[attr coat] +desc STRING "The clear-coat weight." +soft.label STRING "Weight" +min FLOAT 0 +max FLOAT 1 + +[attr coat_color] +desc STRING "This is the color of the coating layer's transparency." +soft.label STRING "Color" + +[attr coat_roughness] +desc STRING "Controls how blurry/ glossy the specular reflections are. The lower the value, the sharper the reflection. " +"In the limit, a value of 0 will give you a perfectly sharp mirror reflection, whilst 1.0 will create reflections that are close to diffuse shading." +soft.label STRING "Roughness" +min FLOAT 0 +max FLOAT 1 + +[attr coat_IOR] +desc STRING "The index of refraction." +soft.label STRING "IOR" +min FLOAT 0 +softmin FLOAT 1 +softmax FLOAT 3 + +[attr coat_normal] +desc STRING "Connect a normal map here (usually exported from Mudbox or ZBrush)." +soft.label STRING "Normal" +soft.inspectable BOOL false + ############################################################################## [node checkerboard] soft.category STRING "Texture" From d32ec8dba1028bd09c2626503a8eaee4098ee9cd Mon Sep 17 00:00:00 2001 From: Jens Lindgren Date: Sun, 8 Apr 2018 13:42:56 +0200 Subject: [PATCH 019/159] add shader layer_float --- plugins/helpers/ArnoldShaderDef.js | 3 + shaders/metadata/arnold_shaders.mtd | 148 ++++++++++++++++++++++++++++ 2 files changed, 151 insertions(+) diff --git a/plugins/helpers/ArnoldShaderDef.js b/plugins/helpers/ArnoldShaderDef.js index baf14a1..85926e5 100644 --- a/plugins/helpers/ArnoldShaderDef.js +++ b/plugins/helpers/ArnoldShaderDef.js @@ -62,6 +62,7 @@ function XSILoadPlugin( in_reg ) in_reg.RegisterShader("image", 1, 0); in_reg.RegisterShader("is_finite", 1, 0); in_reg.RegisterShader("lambert", 1, 0); + in_reg.RegisterShader("layer_float", 1, 0); in_reg.RegisterShader("length", 1, 0); in_reg.RegisterShader("log", 1, 0); in_reg.RegisterShader("matte", 1, 0); @@ -216,6 +217,8 @@ function Arnold_is_finite_1_0_DefineInfo(in_ctxt) { return true; } function Arnold_is_finite_1_0_Define(in_ctxt) { return true; } function Arnold_lambert_1_0_DefineInfo(in_ctxt) { return true; } function Arnold_lambert_1_0_Define(in_ctxt) { return true; } +function Arnold_layer_float_1_0_DefineInfo(in_ctxt) { return true; } +function Arnold_layer_float_1_0_Define(in_ctxt) { return true; } function Arnold_length_1_0_DefineInfo(in_ctxt) { return true; } function Arnold_length_1_0_Define(in_ctxt) { return true; } function Arnold_log_1_0_DefineInfo(in_ctxt) { return true; } diff --git a/shaders/metadata/arnold_shaders.mtd b/shaders/metadata/arnold_shaders.mtd index 98d298b..e2a7d8d 100644 --- a/shaders/metadata/arnold_shaders.mtd +++ b/shaders/metadata/arnold_shaders.mtd @@ -1066,6 +1066,154 @@ desc STRING "Controls how opaque the shader is." [attr normal] desc STRING "If linked, the normal to use." +############################################################################## +[node layer_float] +soft.category STRING "Utility" +soft.order STRING "BeginGroup Layer_1 enable1 name1 input1 mix1 EndGroup " +"BeginGroup Layer_2 enable2 name2 input2 mix2 EndGroup " +"BeginGroup Layer_3 enable3 name3 input3 mix3 EndGroup " +"BeginGroup Layer_4 enable4 name4 input4 mix4 EndGroup " +"BeginGroup Layer_5 enable5 name5 input5 mix5 EndGroup " +"BeginGroup Layer_6 enable6 name6 input6 mix6 EndGroup " +"BeginGroup Layer_7 enable7 name7 input7 mix7 EndGroup " +"BeginGroup Layer_8 enable8 name8 input8 mix8 EndGroup" + +[attr enable1] +soft.label STRING "Enable" + +[attr name1] +soft.label STRING "Name" + +[attr input1] +soft.label STRING "Input" +softmin FLOAT 0 +softmax FLOAT 1 + +[attr mix1] +soft.label STRING "Mix" +min FLOAT 0 +softmin FLOAT 0 +softmax FLOAT 1 + +[attr enable2] +soft.label STRING "Enable" + +[attr name2] +soft.label STRING "Name" + +[attr input2] +soft.label STRING "Input" +softmin FLOAT 0 +softmax FLOAT 1 + +[attr mix2] +soft.label STRING "Mix" +min FLOAT 0 +softmin FLOAT 0 +softmax FLOAT 1 + +[attr enable3] +soft.label STRING "Enable" + +[attr name3] +soft.label STRING "Name" + +[attr input3] +soft.label STRING "Input" +softmin FLOAT 0 +softmax FLOAT 1 + +[attr mix3] +soft.label STRING "Mix" +min FLOAT 0 +softmin FLOAT 0 +softmax FLOAT 1 + +[attr enable4] +soft.label STRING "Enable" + +[attr name4] +soft.label STRING "Name" + +[attr input4] +soft.label STRING "Input" +softmin FLOAT 0 +softmax FLOAT 1 + +[attr mix4] +soft.label STRING "Mix" +min FLOAT 0 +softmin FLOAT 0 +softmax FLOAT 1 + +[attr enable5] +soft.label STRING "Enable" + +[attr name5] +soft.label STRING "Name" + +[attr input5] +soft.label STRING "Input" +softmin FLOAT 0 +softmax FLOAT 1 + +[attr mix5] +soft.label STRING "Mix" +min FLOAT 0 +softmin FLOAT 0 +softmax FLOAT 1 + +[attr enable6] +soft.label STRING "Enable" + +[attr name6] +soft.label STRING "Name" + +[attr input6] +soft.label STRING "Input" +softmin FLOAT 0 +softmax FLOAT 1 + +[attr mix6] +soft.label STRING "Mix" +min FLOAT 0 +softmin FLOAT 0 +softmax FLOAT 1 + +[attr enable7] +soft.label STRING "Enable" + +[attr name7] +soft.label STRING "Name" + +[attr input7] +soft.label STRING "Input" +softmin FLOAT 0 +softmax FLOAT 1 + +[attr mix7] +soft.label STRING "Mix" +min FLOAT 0 +softmin FLOAT 0 +softmax FLOAT 1 + +[attr enable8] +soft.label STRING "Enable" + +[attr name8] +soft.label STRING "Name" + +[attr input8] +soft.label STRING "Input" +softmin FLOAT 0 +softmax FLOAT 1 + +[attr mix8] +soft.label STRING "Mix" +min FLOAT 0 +softmin FLOAT 0 +softmax FLOAT 1 + ############################################################################## [node length] soft.category STRING "Math" From 7d7ab501552c101b5571c17a8edbba27ff6040be Mon Sep 17 00:00:00 2001 From: Jens Lindgren Date: Sun, 8 Apr 2018 17:58:11 +0200 Subject: [PATCH 020/159] add shaders layer_rgba and layer_shader --- plugins/helpers/ArnoldShaderDef.js | 6 + shaders/metadata/arnold_shaders.mtd | 315 ++++++++++++++++++++++++++++ 2 files changed, 321 insertions(+) diff --git a/plugins/helpers/ArnoldShaderDef.js b/plugins/helpers/ArnoldShaderDef.js index 85926e5..35d7c21 100644 --- a/plugins/helpers/ArnoldShaderDef.js +++ b/plugins/helpers/ArnoldShaderDef.js @@ -63,6 +63,8 @@ function XSILoadPlugin( in_reg ) in_reg.RegisterShader("is_finite", 1, 0); in_reg.RegisterShader("lambert", 1, 0); in_reg.RegisterShader("layer_float", 1, 0); + in_reg.RegisterShader("layer_rgba", 1, 0); + in_reg.RegisterShader("layer_shader", 1, 0); in_reg.RegisterShader("length", 1, 0); in_reg.RegisterShader("log", 1, 0); in_reg.RegisterShader("matte", 1, 0); @@ -219,6 +221,10 @@ function Arnold_lambert_1_0_DefineInfo(in_ctxt) { return true; } function Arnold_lambert_1_0_Define(in_ctxt) { return true; } function Arnold_layer_float_1_0_DefineInfo(in_ctxt) { return true; } function Arnold_layer_float_1_0_Define(in_ctxt) { return true; } +function Arnold_layer_rgba_1_0_DefineInfo(in_ctxt) { return true; } +function Arnold_layer_rgba_1_0_Define(in_ctxt) { return true; } +function Arnold_layer_shader_1_0_DefineInfo(in_ctxt) { return true; } +function Arnold_layer_shader_1_0_Define(in_ctxt) { return true; } function Arnold_length_1_0_DefineInfo(in_ctxt) { return true; } function Arnold_length_1_0_Define(in_ctxt) { return true; } function Arnold_log_1_0_DefineInfo(in_ctxt) { return true; } diff --git a/shaders/metadata/arnold_shaders.mtd b/shaders/metadata/arnold_shaders.mtd index e2a7d8d..292ddbb 100644 --- a/shaders/metadata/arnold_shaders.mtd +++ b/shaders/metadata/arnold_shaders.mtd @@ -1214,6 +1214,321 @@ min FLOAT 0 softmin FLOAT 0 softmax FLOAT 1 +############################################################################## +[node layer_rgba] +soft.category STRING "Utility" +soft.order STRING "BeginGroup Layer_1 enable1 name1 input1 operation1 mix1 alpha_operation1 EndGroup " +"BeginGroup Layer_2 enable2 name2 input2 operation2 mix2 alpha_operation2 EndGroup " +"BeginGroup Layer_3 enable3 name3 input3 operation3 mix3 alpha_operation3 EndGroup " +"BeginGroup Layer_4 enable4 name4 input4 operation4 mix4 alpha_operation4 EndGroup " +"BeginGroup Layer_5 enable5 name5 input5 operation5 mix5 alpha_operation5 EndGroup " +"BeginGroup Layer_6 enable6 name6 input6 operation6 mix6 alpha_operation6 EndGroup " +"BeginGroup Layer_7 enable7 name7 input7 operation7 mix7 alpha_operation7 EndGroup " +"BeginGroup Layer_8 enable8 name8 input8 operation8 mix8 alpha_operation8 EndGroup" + +[attr enable1] +soft.label STRING "Enable" + +[attr name1] +soft.label STRING "Name" + +[attr input1] +soft.label STRING "Input" + +[attr mix1] +soft.label STRING "Mix" +min FLOAT 0 +softmin FLOAT 0 +softmax FLOAT 1 + +[attr operation1] +soft.label STRING "Operation" + +[attr alpha_operation1] +soft.label STRING "Alpha Operation" + +[attr enable2] +soft.label STRING "Enable" + +[attr name2] +soft.label STRING "Name" + +[attr input2] +soft.label STRING "Input" + +[attr mix2] +soft.label STRING "Mix" +min FLOAT 0 +softmin FLOAT 0 +softmax FLOAT 1 + +[attr operation2] +soft.label STRING "Operation" + +[attr alpha_operation2] +soft.label STRING "Alpha Operation" + +[attr enable3] +soft.label STRING "Enable" + +[attr name3] +soft.label STRING "Name" + +[attr input3] +soft.label STRING "Input" + +[attr mix3] +soft.label STRING "Mix" +min FLOAT 0 +softmin FLOAT 0 +softmax FLOAT 1 + +[attr operation3] +soft.label STRING "Operation" + +[attr alpha_operation3] +soft.label STRING "Alpha Operation" + +[attr enable4] +soft.label STRING "Enable" + +[attr name4] +soft.label STRING "Name" + +[attr input4] +soft.label STRING "Input" + +[attr mix4] +soft.label STRING "Mix" +min FLOAT 0 +softmin FLOAT 0 +softmax FLOAT 1 + +[attr operation4] +soft.label STRING "Operation" + +[attr alpha_operation4] +soft.label STRING "Alpha Operation" + +[attr enable5] +soft.label STRING "Enable" + +[attr name5] +soft.label STRING "Name" + +[attr input5] +soft.label STRING "Input" + +[attr mix5] +soft.label STRING "Mix" +min FLOAT 0 +softmin FLOAT 0 +softmax FLOAT 1 + +[attr operation5] +soft.label STRING "Operation" + +[attr alpha_operation5] +soft.label STRING "Alpha Operation" + +[attr enable6] +soft.label STRING "Enable" + +[attr name6] +soft.label STRING "Name" + +[attr input6] +soft.label STRING "Input" + +[attr mix6] +soft.label STRING "Mix" +min FLOAT 0 +softmin FLOAT 0 +softmax FLOAT 1 + +[attr operation6] +soft.label STRING "Operation" + +[attr alpha_operation6] +soft.label STRING "Alpha Operation" + +[attr enable7] +soft.label STRING "Enable" + +[attr name7] +soft.label STRING "Name" + +[attr input7] +soft.label STRING "Input" + +[attr mix7] +soft.label STRING "Mix" +min FLOAT 0 +softmin FLOAT 0 +softmax FLOAT 1 + +[attr operation7] +soft.label STRING "Operation" + +[attr alpha_operation7] +soft.label STRING "Alpha Operation" + +[attr enable8] +soft.label STRING "Enable" + +[attr name8] +soft.label STRING "Name" + +[attr input8] +soft.label STRING "Input" + +[attr mix8] +soft.label STRING "Mix" +min FLOAT 0 +softmin FLOAT 0 +softmax FLOAT 1 + +[attr operation8] +soft.label STRING "Operation" + +[attr alpha_operation8] +soft.label STRING "Alpha Operation" + +[attr clamp] +soft.label STRING "Clamp Result" + +############################################################################## +[node layer_shader] +soft.category STRING "Utility" +soft.order STRING "BeginGroup Layer_1 enable1 name1 input1 mix1 EndGroup " +"BeginGroup Layer_2 enable2 name2 input2 mix2 EndGroup " +"BeginGroup Layer_3 enable3 name3 input3 mix3 EndGroup " +"BeginGroup Layer_4 enable4 name4 input4 mix4 EndGroup " +"BeginGroup Layer_5 enable5 name5 input5 mix5 EndGroup " +"BeginGroup Layer_6 enable6 name6 input6 mix6 EndGroup " +"BeginGroup Layer_7 enable7 name7 input7 mix7 EndGroup " +"BeginGroup Layer_8 enable8 name8 input8 mix8 EndGroup" + +[attr enable1] +soft.label STRING "Enable" + +[attr name1] +soft.label STRING "Name" + +[attr input1] +soft.label STRING "Input" + +[attr mix1] +soft.label STRING "Mix" +min FLOAT 0 +softmin FLOAT 0 +softmax FLOAT 1 + +[attr enable2] +soft.label STRING "Enable" + +[attr name2] +soft.label STRING "Name" + +[attr input2] +soft.label STRING "Input" + +[attr mix2] +soft.label STRING "Mix" +min FLOAT 0 +softmin FLOAT 0 +softmax FLOAT 1 + +[attr enable3] +soft.label STRING "Enable" + +[attr name3] +soft.label STRING "Name" + +[attr input3] +soft.label STRING "Input" + +[attr mix3] +soft.label STRING "Mix" +min FLOAT 0 +softmin FLOAT 0 +softmax FLOAT 1 + +[attr enable4] +soft.label STRING "Enable" + +[attr name4] +soft.label STRING "Name" + +[attr input4] +soft.label STRING "Input" + +[attr mix4] +soft.label STRING "Mix" +min FLOAT 0 +softmin FLOAT 0 +softmax FLOAT 1 + +[attr enable5] +soft.label STRING "Enable" + +[attr name5] +soft.label STRING "Name" + +[attr input5] +soft.label STRING "Input" + +[attr mix5] +soft.label STRING "Mix" +min FLOAT 0 +softmin FLOAT 0 +softmax FLOAT 1 + +[attr enable6] +soft.label STRING "Enable" + +[attr name6] +soft.label STRING "Name" + +[attr input6] +soft.label STRING "Input" + +[attr mix6] +soft.label STRING "Mix" +min FLOAT 0 +softmin FLOAT 0 +softmax FLOAT 1 + +[attr enable7] +soft.label STRING "Enable" + +[attr name7] +soft.label STRING "Name" + +[attr input7] +soft.label STRING "Input" + +[attr mix7] +soft.label STRING "Mix" +min FLOAT 0 +softmin FLOAT 0 +softmax FLOAT 1 + +[attr enable8] +soft.label STRING "Enable" + +[attr name8] +soft.label STRING "Name" + +[attr input8] +soft.label STRING "Input" + +[attr mix8] +soft.label STRING "Mix" +min FLOAT 0 +softmin FLOAT 0 +softmax FLOAT 1 + ############################################################################## [node length] soft.category STRING "Math" From 1378f7ad5bb07a9de013bcae1361c3d8756b6cac Mon Sep 17 00:00:00 2001 From: Jens Lindgren Date: Sun, 8 Apr 2018 18:48:45 +0200 Subject: [PATCH 021/159] add contour and sinc output filters --- plugins/sitoa/renderer/RendererOptions.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/plugins/sitoa/renderer/RendererOptions.cpp b/plugins/sitoa/renderer/RendererOptions.cpp index 0374321..4193759 100644 --- a/plugins/sitoa/renderer/RendererOptions.cpp +++ b/plugins/sitoa/renderer/RendererOptions.cpp @@ -800,8 +800,10 @@ SITOA_CALLBACK CommonRenderOptions_DefineLayout(CRef& in_ctxt) filters.Add(L"blackman_harris"); filters.Add(L"blackman_harris"); filters.Add(L"box"); filters.Add(L"box"); filters.Add(L"catmull-rom");filters.Add(L"catrom"); + filters.Add(L"contour");filters.Add(L"contour"); filters.Add(L"gaussian"); filters.Add(L"gaussian"); filters.Add(L"mitchell-netravali"); filters.Add(L"mitnet"); + filters.Add(L"sinc"); filters.Add(L"sinc"); filters.Add(L"triangle"); filters.Add(L"triangle"); filters.Add(L"variance"); filters.Add(L"variance"); layout.AddEnumControl(L"output_filter", filters, L"Type", siControlCombo); @@ -1279,7 +1281,8 @@ void SamplingTabLogic(CustomProperty &in_cp) CString filter = ParAcc_GetValue(in_cp, L"output_filter", DBL_MAX).GetAsText(); bool enableWidth = filter.IsEqualNoCase(L"gaussian") || filter.IsEqualNoCase(L"triangle") || - filter.IsEqualNoCase(L"variance") || filter.IsEqualNoCase(L"blackman_harris"); + filter.IsEqualNoCase(L"variance") || filter.IsEqualNoCase(L"blackman_harris") || + filter.IsEqualNoCase(L"contour") || filter.IsEqualNoCase(L"sinc"); ParAcc_GetParameter(in_cp, L"output_filter_width").PutCapabilityFlag(siReadOnly, !enableWidth); From e808571800f827c5f66a3868dfac7d1a733ddafe Mon Sep 17 00:00:00 2001 From: Jens Lindgren Date: Sun, 8 Apr 2018 19:07:59 +0200 Subject: [PATCH 022/159] add toon shader aovs --- plugins/helpers/ArnoldScenePreferences.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/plugins/helpers/ArnoldScenePreferences.js b/plugins/helpers/ArnoldScenePreferences.js index 5989f75..215de7c 100644 --- a/plugins/helpers/ArnoldScenePreferences.js +++ b/plugins/helpers/ArnoldScenePreferences.js @@ -160,8 +160,9 @@ function CreateRenderChannels() aov_array.push({ name: "shadow", type: siRenderChannelColorType }); aov_array.push({ name: "shadow_diff", type: siRenderChannelColorType }); aov_array.push({ name: "shadow_mask", type: siRenderChannelColorType }); - aov_array.push({ name: "indirect_diffuse", type: siRenderChannelColorType }); - aov_array.push({ name: "indirect_specular", type: siRenderChannelColorType }); + // toon + aov_array.push({ name: "highlight", type: siRenderChannelColorType }); + aov_array.push({ name: "rim_light", type: siRenderChannelColorType }); var aov_name, aov_type; for (var i = 0; i < aov_array.length; i++) From e082b2155352466004735ccb8435fe43430a909b Mon Sep 17 00:00:00 2001 From: Jens Lindgren Date: Mon, 9 Apr 2018 01:00:51 +0200 Subject: [PATCH 023/159] add toon shader --- plugins/helpers/ArnoldMenu.js | 4 + plugins/helpers/ArnoldShaderDef.js | 3 + shaders/metadata/arnold_shaders.mtd | 268 ++++++++++++++++++++++++++++ 3 files changed, 275 insertions(+) diff --git a/plugins/helpers/ArnoldMenu.js b/plugins/helpers/ArnoldMenu.js index 94816a8..ce0ae37 100644 --- a/plugins/helpers/ArnoldMenu.js +++ b/plugins/helpers/ArnoldMenu.js @@ -242,6 +242,7 @@ function AddShadersSubMenu(in_menu) { in_menu.AddCallbackItem("Standard Surface", "OnShadersMenu"); in_menu.AddCallbackItem("Standard Hair", "OnShadersMenu"); + in_menu.AddCallbackItem("Toon", "OnShadersMenu"); in_menu.AddCallbackItem("Utility", "OnShadersMenu"); in_menu.AddSeparatorItem(); in_menu.AddCallbackItem("Camera Projection", "OnShadersMenu"); @@ -435,6 +436,9 @@ function OnShadersMenu(in_ctxt) case "Standard Hair": SITOA_AddShader("Arnold.standard_hair.1.0", "surface"); break; + case "Toon": + SITOA_AddShader("Arnold.toon.1.0", "surface"); + break; case "Utility": SITOA_AddShader("Arnold.utility.1.0", null); break; diff --git a/plugins/helpers/ArnoldShaderDef.js b/plugins/helpers/ArnoldShaderDef.js index 35d7c21..8f14d76 100644 --- a/plugins/helpers/ArnoldShaderDef.js +++ b/plugins/helpers/ArnoldShaderDef.js @@ -111,6 +111,7 @@ function XSILoadPlugin( in_reg ) in_reg.RegisterShader("switch_rgba", 1, 0); in_reg.RegisterShader("switch_shader", 1, 0); in_reg.RegisterShader("thin_film", 1, 0); + in_reg.RegisterShader("toon", 1, 0); in_reg.RegisterShader("trace_set", 1, 0); in_reg.RegisterShader("trigo", 1, 0); in_reg.RegisterShader("triplanar", 1, 0); @@ -317,6 +318,8 @@ function Arnold_switch_shader_1_0_DefineInfo(in_ctxt) { return true; } function Arnold_switch_shader_1_0_Define(in_ctxt) { return true; } function Arnold_thin_film_1_0_DefineInfo(in_ctxt) { return true; } function Arnold_thin_film_1_0_Define(in_ctxt) { return true; } +function Arnold_toon_1_0_DefineInfo(in_ctxt) { return true; } +function Arnold_toon_1_0_Define(in_ctxt) { return true; } function Arnold_trace_set_1_0_DefineInfo(in_ctxt) { return true; } function Arnold_trace_set_1_0_Define(in_ctxt) { return true; } function Arnold_trigo_1_0_DefineInfo(in_ctxt) { return true; } diff --git a/shaders/metadata/arnold_shaders.mtd b/shaders/metadata/arnold_shaders.mtd index 292ddbb..6a5bdc1 100644 --- a/shaders/metadata/arnold_shaders.mtd +++ b/shaders/metadata/arnold_shaders.mtd @@ -2983,6 +2983,274 @@ softmin FLOAT 0 softmax FLOAT 3 soft.label STRING "Internal IOR" +############################################################################## +[node toon] +soft.category STRING "Surface" +soft.order STRING "BeginGroup Edge enable edge_color edge_tonemap edge_opacity edge_width_scale " + "BeginGroup Edge_Detection id_difference shader_difference mask_color uv_threshold angle_threshold normal_type EndGroup " + "BeginGroup Advanced_Edge_Control priority ignore_throughput EndGroup " +"EndGroup " +"BeginGroup Silhouette enable_silhouette silhouette_color silhouette_tonemap silhouette_opacity silhouette_width_scale EndGroup " +"BeginGroup Base base base_color base_tonemap EndGroup " +"BeginGroup Specular specular specular_color specular_roughness specular_anisotropy specular_rotation specular_tonemap EndGroup " +"BeginGroup Stylized_Highlight lights highlight_color highlight_size EndGroup " +"BeginGroup Rim_Lighting rim_light rim_light_color rim_light_width EndGroup " +"BeginGroup Transmission transmission transmission_color transmission_roughness transmission_anisotropy transmission_rotation IOR EndGroup " +"BeginGroup Emission emission emission_color EndGroup " +"BeginGroup Geometry normal tangent bump_mode EndGroup " +"BeginGroup AOVs aov_highlight aov_rim_light EndGroup " +"BeginGroup Advanced indirect_diffuse indirect_specular energy_conserving EndGroup" + +# Edge + +[attr enable] +desc STRING "When turned off, the edge detection is disabled (enabled by default)." +soft.label STRING "Edge (requires contour filter)" + +[attr edge_color] +desc STRING "The color of the toon edge. The line style can be controlled with a texture here." + +[attr edge_tonemap] +desc STRING "Connect a ramp node here to change the Edge Color based on the shading result of the Base." + +[attr edge_opacity] +desc STRING "Controls the transparency of the Edge." +min FLOAT 0 +max FLOAT 1 + +[attr edge_width_scale] +desc STRING "The maximum width of contour lines is determined by the Width parameter of the Contour Filter. The actual width is the multiplication of it and this parameter. The line style can be controlled by combining this with a texture." +soft.label STRING "Width Scaling" +min FLOAT 0 +max FLOAT 1 + +[attr id_difference] +desc STRING "If enabled, edge detection uses the difference of IDs from neighboring pixels." +soft.label STRING "ID Difference" + +[attr shader_difference] +desc STRING "Detects the difference of shaders of neighboring samples. This is useful when multiple shaders are assigned to a single polymesh, for example." + +[attr mask_color] +desc STRING "The edge is detected when the mask color of neighboring pixels is different. The Mask Color is assumed to have a texture connected to draw an arbitrary shape by detecting color differences." + +[attr uv_threshold] +desc STRING "If enabled, edge detection uses the difference of UVs from neighboring pixels." +soft.label STRING "UV Threshold" +min FLOAT 0 +softmin FLOAT 0 +softmax FLOAT 1 + +[attr angle_threshold] +desc STRING "When less than 180, the Edge detection uses the difference of the angle between neighboring pixels." +min FLOAT 0 +max FLOAT 180 + +[attr normal_type] +desc STRING "The normal used in the Edge detection. Choose from: Shading Normal, Smoothed Normal, and Geometric Normal." + +[attr priority] +desc STRING "Changes the sorting priority of the Edge." +softmin INT 0 +softmax INT 10 + +[attr ignore_throughput] +desc STRING "By default, the contour color is affected by ray throughput. If a specific color is required for a reflected/refracted object, enable this and use a ray_switch shader." + +# Silhouette + +[attr enable_silhouette] +desc STRING "" +soft.label STRING "Enable" + +[attr silhouette_color] +desc STRING "The color of the silhouette edge. The line style can be controlled with a texture here." +soft.label STRING "Color" + +[attr silhouette_tonemap] +desc STRING "Connect a ramp node here to change the Silhouette Color based on the shading result of the Base." +soft.label STRING "Tonemap" + +[attr silhouette_opacity] +desc STRING "Controls the transparency of the Silhouette." +soft.label STRING "Opacity" +min FLOAT 0 +max FLOAT 1 + +[attr silhouette_width_scale] +desc STRING "The maximum width of silhouette contour lines is determined by the Width parameter of the Contour Filter. The actual width is the multiplication of it and this parameter. The line style can be controlled by combining this with a texture." +soft.label STRING "Width Scaling" +min FLOAT 0 +max FLOAT 1 + +[attr base] +desc STRING "The base color weight (default is 0.8)." +soft.label STRING "Weight" +min FLOAT 0 +max FLOAT 1 + +[attr base_color] +desc STRING "" +soft.label STRING "Color" + +[attr base_tonemap] +desc STRING "Connect a ramp node here to create a cell look (regarded as a tone map)." +soft.label STRING "Tonemap" + +# Specular + +[attr specular] +desc STRING "The specular weight. Influences the brightness of the specular highlight." +soft.label STRING "Weight" +min FLOAT 0 +max FLOAT 1 + +[attr specular_color] +desc STRING "The color the specular reflection will be modulated with. Use this color to 'tint' the specular highlight." +soft.label STRING "Color" + +[attr specular_roughness] +desc STRING "Controls the glossiness of the specular reflections." +soft.label STRING "Roughness" +min FLOAT 0 +max FLOAT 1 + +[attr specular_anisotropy] +desc STRING "Anisotropy reflects and transmits light with a directional bias and causes materials to appear rougher or glossier in certain directions. The default value for Anisotropy is 0, which means isotropic. As you move the control towards 1.0, the surface is made more anisotropic in the U axis." +soft.label STRING "Anisotropy" +min FLOAT 0 +max FLOAT 1 + +[attr specular_rotation] +desc STRING "The rotation value changes the orientation of the anisotropic reflectance in UV space. At 0.0, there is no rotation, while at 1.0 the effect is rotated by 180 degrees." +soft.label STRING "Rotation" +softmin FLOAT 0 +softmax FLOAT 1 + +[attr specular_tonemap] +desc STRING "Connect a ramp node here to create a cell look (regarded as a tone map)." +soft.label STRING "Tonemap" + +# Stylized highlight + +[attr lights] +desc STRING "Specify the name of the key light to be used for the stylized highlight. You can specify multiple lights using a semicolon-delimited string as lightShape1;lightShape2. The supported light types are Distant, Point, Spot, and Photometric." + +[attr highlight_color] +desc STRING "An arbitrary texture (or RGB type node) can be used to create a stylized highlight on an object. If nothing is connected, the stylized highlight is disabled." +soft.label STRING "Color" + +[attr highlight_size] +desc STRING "The size of the stylized highlight." +soft.label STRING "Size" +min FLOAT 0 +max FLOAT 1 + +# Rim lighting + +[attr rim_light] +desc STRING "Specify the name of the light to be used here. Rim lighting is affected by the shadow of this light. The supported light types are: Distant, Point, Spot, and Photometric." +soft.label STRING "Light" + +[attr rim_light_color] +desc STRING "The color of the rim light. Connect a ramp here to get a rim lighting effect." +soft.label STRING "Color" + +[attr rim_light_width] +desc STRING "The size of the stylized highlight." +soft.label STRING "Width" +min FLOAT 0 +max FLOAT 1 + +# Transmission + +[attr transmission] +desc STRING "Transmission allows light to scatter through the surface, for materials such as glass or water." +soft.label STRING "Weight" +min FLOAT 0 +max FLOAT 1 + +[attr transmission_color] +desc STRING "This filters the refraction according to the distance traveled by the refracted ray. The longer light travels inside a mesh, the more it is affected by the Transmission Color." +soft.label STRING "Color" + +[attr transmission_roughness] +desc STRING "Adds some additional blurriness of a refraction computed with an isotropic microfacet BTDF. The range goes from 0 (no roughness) to 1." +soft.label STRING "Roughness" +min FLOAT 0 +max FLOAT 1 + +[attr transmission_anisotropy] +desc STRING "The directional bias, or anisotropy, of the scattering. The default value of zero gives isotropic scattering so that light is scattered evenly in all directions. Positive values bias the scattering effect forwards, in the direction of the light, while negative values bias the scattering backward, toward the light." +soft.label STRING "Anisotropy" +min FLOAT 0 +max FLOAT 1 + +[attr transmission_rotation] +desc STRING "The rotation value changes the orientation of the anisotropic reflectance in UV space. At 0.0, there is no rotation, while at 1.0 the effect is rotated by 180 degrees." +soft.label STRING "Rotation" +softmin FLOAT 0 +softmax FLOAT 1 + +[attr IOR] +desc STRING "The IOR parameter (Index of Refraction) defines the material's Fresnel reflectivity and is by default the angular function used." +soft.label STRING "IOR" +min FLOAT 0 +softmin FLOAT 0 +softmax FLOAT 3 + +# Emission + +[attr emission] +desc STRING "Controls the amount of emitted light. It can create noise, especially if the source of indirect illumination is very small (e.g. light bulb geometry)." +soft.label STRING "Weight" +min FLOAT 0 +softmin FLOAT 0 +softmax FLOAT 1 + +[attr emission_color] +desc STRING "The emitted light color." +soft.label STRING "Color" + +# Geometry + +[attr normal] +desc STRING "Connect a Normal map here (usually exported from Mudbox or ZBrush)." +soft.inspectable BOOL false + +[attr tangent] +desc STRING "The tangent map. Together with the shading normal, it defines the tangent coordinate system that the input vector applies to." +soft.inspectable BOOL false + +[attr bump_mode] +desc STRING "Choose the component(s) affected by bump: diffuse, specular, or both." +soft.label STRING "Bump Mapping Mode" + +# AOVs + +[attr aov_highlight] +desc STRING "Stylized highlight AOV." +soft.label STRING "Highlight" + +[attr aov_rim_light] +desc STRING "Rim light AOV." +soft.label STRING "Rim Light" + +# Advanced + +[attr indirect_diffuse] +desc STRING "The amount of diffuse light received from indirect sources only." +min FLOAT 0 +max FLOAT 1 + +[attr indirect_specular] +desc STRING "The amount of specularity received from indirect sources only. Values other than 1.0 will cause the materials to not preserve energy, and global illumination may not converge." +min FLOAT 0 +max FLOAT 1 + +[attr energy_conserving] +desc STRING "The Toon shader is energy conserving by default. If this is disabled, the Toon shader simply adds Base, Specular, and Transmission. Care should be taken when disabling this option as it will affect indirect illumination with the Toon shader." + ############################################################################## [node trace_set] soft.category STRING "Utility" From ebe5c7a0fbff9910e09a015951188c271263b742 Mon Sep 17 00:00:00 2001 From: Jens Lindgren Date: Mon, 9 Apr 2018 01:21:28 +0200 Subject: [PATCH 024/159] only insert closure shader when needed --- plugins/helpers/ArnoldMenu.js | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/plugins/helpers/ArnoldMenu.js b/plugins/helpers/ArnoldMenu.js index ce0ae37..e0f4091 100644 --- a/plugins/helpers/ArnoldMenu.js +++ b/plugins/helpers/ArnoldMenu.js @@ -112,9 +112,18 @@ function AddShader_Execute(in_shaderName, in_connectionPoint, in_collection, in_ { DeleteObj(shader); shader = CreateShaderFromProgID(in_shaderName, xsiObj.material, null); - var closure = CreateShaderFromProgID("Arnold.closure.1.0", xsiObj.material, null); - SIConnectShaderToCnxPoint(shader, closure + ".closure", false); - SIConnectShaderToCnxPoint(closure, xsiObj.material + ".surface", false); + // we only want to add a closure shader when it's needed + // closures have 20 as OutputType value so we test for that + if (shader.OutputType == 20) + { + var closure = CreateShaderFromProgID("Arnold.closure.1.0", xsiObj.material, null); + SIConnectShaderToCnxPoint(shader, closure + ".closure", false); + SIConnectShaderToCnxPoint(closure, xsiObj.material + ".surface", false); + } + else + { + SIConnectShaderToCnxPoint(shader, xsiObj.material + ".surface", false); + } } } } From dce5e6a2e8441d4468e045c5db179ce2475f0466 Mon Sep 17 00:00:00 2001 From: Jens Lindgren Date: Mon, 9 Apr 2018 02:02:45 +0200 Subject: [PATCH 025/159] Revert "update gitignore" This reverts commit 54b80cbaa7618e09af2da0f9171d456efa92ee33. --- .gitignore | 6 ------ 1 file changed, 6 deletions(-) diff --git a/.gitignore b/.gitignore index 303edc1..94b34e4 100644 --- a/.gitignore +++ b/.gitignore @@ -19,12 +19,6 @@ custom.py dist build -# VS and VS Code -.vs -.vscode/* -*.user -*.code-workspace - # Eclipse .settings .*project From 404cb20694ed179ef9f03c40133a6cbc5208b61a Mon Sep 17 00:00:00 2001 From: Jens Lindgren Date: Tue, 10 Apr 2018 22:46:47 +0200 Subject: [PATCH 026/159] fix ambient_occlusion spread min/max --- shaders/metadata/arnold_shaders.mtd | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/shaders/metadata/arnold_shaders.mtd b/shaders/metadata/arnold_shaders.mtd index d26ed25..b1d7f3a 100644 --- a/shaders/metadata/arnold_shaders.mtd +++ b/shaders/metadata/arnold_shaders.mtd @@ -52,8 +52,8 @@ softmax INT 10 [attr spread] desc STRING "Angular spread around the normal vector N, in the range [0,1], where 1 maps to 90 degrees (the full hemisphere). 1.0 is the most common value. Other values may produce results that are not useful." -softmin FLOAT 0 -softmax FLOAT 180 +min FLOAT 0 +max FLOAT 1 [attr near_clip] desc STRING "Minimum occlusion distance that is sampled." From 683c846a6e90c993431a6e4fa2609b91640268c9 Mon Sep 17 00:00:00 2001 From: Jens Lindgren Date: Tue, 10 Apr 2018 00:56:54 +0200 Subject: [PATCH 027/159] include arnold plugins in install and pack script should always be located at ../plugins realitive to the core --- SConstruct | 3 +++ 1 file changed, 3 insertions(+) diff --git a/SConstruct b/SConstruct index fb985a2..7295011 100644 --- a/SConstruct +++ b/SConstruct @@ -140,6 +140,7 @@ system.set_target_arch(env['TARGET_ARCH']) ARNOLD_HOME = env['ARNOLD_HOME'] ARNOLD_API_INCLUDES = os.path.join(ARNOLD_HOME, 'include') ARNOLD_BINARIES = os.path.join(ARNOLD_HOME, 'bin') +ARNOLD_PLUGINS = os.path.join(ARNOLD_HOME, 'plugins') if system.os() == 'windows': ARNOLD_API_LIB = os.path.join(ARNOLD_HOME, 'lib') else: @@ -392,6 +393,7 @@ PACKAGE_FILES = [ [os.path.join(ARNOLD_BINARIES, 'kick%s' % get_executable_extension()), os.path.join(addon_path, bin_path)], [os.path.join(ARNOLD_BINARIES, 'maketx%s' % get_executable_extension()), os.path.join(addon_path, bin_path)], [os.path.join(ARNOLD_BINARIES, '*%s' % get_library_extension()), os.path.join(addon_path, bin_path)], +[os.path.join(ARNOLD_PLUGINS, '*'), os.path.join(addon_path, bin_path, '..', 'plugins')], [os.path.join('plugins', 'helpers', '*.js'), os.path.join(addon_path, plugins_path)], [os.path.join('plugins', 'helpers', 'Pictures', '*.bmp'), os.path.join(addon_path, pictures_path)], [os.path.join('shaders', 'metadata', '*.mtd'), os.path.join(addon_path, bin_path)], @@ -452,6 +454,7 @@ env.Install(os.path.join(env['TARGET_WORKGROUP_PATH'], bin_path), [str(SITOA[0]) str(SITOA_SHADERS[0])]) env.Install(os.path.join(env['TARGET_WORKGROUP_PATH'], bin_path), [glob.glob(os.path.join(ARNOLD_BINARIES, '*'))]) +env.Install(os.path.join(env['TARGET_WORKGROUP_PATH'], bin_path, '..'), [glob.glob(ARNOLD_PLUGINS)]) # Copying Scripting Plugins # (if you modify the files directly on workgroup they will be overwritted with trunk version) From 80e420f235ccef2fd4584358c9ab69a27e9451ca Mon Sep 17 00:00:00 2001 From: Jens Lindgren Date: Tue, 10 Apr 2018 01:27:55 +0200 Subject: [PATCH 028/159] remove redundant frame and fps options these are declared natively in arnold 5.1 --- plugins/sitoa/loader/Options.cpp | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/plugins/sitoa/loader/Options.cpp b/plugins/sitoa/loader/Options.cpp index 9e542f0..6d9e079 100644 --- a/plugins/sitoa/loader/Options.cpp +++ b/plugins/sitoa/loader/Options.cpp @@ -158,13 +158,10 @@ void CFrameBuffer::Log() // void LoadPlayControlData(AtNode* in_optionsNode, double in_frame) { - if (AiNodeDeclare(in_optionsNode, "frame", "constant FLOAT")) - CNodeSetter::SetFloat(in_optionsNode, "frame", (float)in_frame); + CNodeSetter::SetFloat(in_optionsNode, "frame", (float)in_frame); double fps = CTimeUtilities().GetFps(); - - if (AiNodeDeclare(in_optionsNode, "fps", "constant FLOAT")) - CNodeSetter::SetFloat(in_optionsNode, "fps", (float)fps); + CNodeSetter::SetFloat(in_optionsNode, "fps", (float)fps); } From 2da9503b901cc1863551ef2f4629deab63d86be6 Mon Sep 17 00:00:00 2001 From: Jens Lindgren Date: Tue, 10 Apr 2018 02:41:52 +0200 Subject: [PATCH 029/159] implement adaptive sampling --- plugins/sitoa/loader/Options.cpp | 4 ++++ plugins/sitoa/renderer/RendererOptions.cpp | 24 +++++++++++++++++++++- plugins/sitoa/renderer/RendererOptions.h | 12 ++++++++++- 3 files changed, 38 insertions(+), 2 deletions(-) diff --git a/plugins/sitoa/loader/Options.cpp b/plugins/sitoa/loader/Options.cpp index 6d9e079..9bf5715 100644 --- a/plugins/sitoa/loader/Options.cpp +++ b/plugins/sitoa/loader/Options.cpp @@ -520,6 +520,10 @@ void LoadOptionsParameters(AtNode* in_optionsNode, const Property &in_arnoldOpti CNodeSetter::SetInt(in_optionsNode, "GI_sss_samples", GetRenderOptions()->m_GI_sss_samples); CNodeSetter::SetInt(in_optionsNode, "GI_volume_samples", GetRenderOptions()->m_GI_volume_samples); + CNodeSetter::SetBoolean(in_optionsNode, "enable_adaptive_sampling", GetRenderOptions()->m_enable_adaptive_sampling); + CNodeSetter::SetInt(in_optionsNode, "AA_samples_max", GetRenderOptions()->m_AA_samples_max); + CNodeSetter::SetFloat(in_optionsNode, "AA_adaptive_threshold", GetRenderOptions()->m_AA_adaptive_threshold); + CNodeSetter::SetFloat(in_optionsNode, "indirect_specular_blur", GetRenderOptions()->m_indirect_specular_blur); // Use sample clamp? diff --git a/plugins/sitoa/renderer/RendererOptions.cpp b/plugins/sitoa/renderer/RendererOptions.cpp index 0374321..d1a4789 100644 --- a/plugins/sitoa/renderer/RendererOptions.cpp +++ b/plugins/sitoa/renderer/RendererOptions.cpp @@ -112,6 +112,10 @@ void CRenderOptions::Read(const Property &in_cp) m_GI_sss_samples = (int)ParAcc_GetValue(in_cp, L"GI_sss_samples", DBL_MAX); m_GI_volume_samples = (int)ParAcc_GetValue(in_cp, L"GI_volume_samples", DBL_MAX); + m_enable_adaptive_sampling = (bool)ParAcc_GetValue(in_cp, L"enable_adaptive_sampling", DBL_MAX); + m_AA_samples_max = (int)ParAcc_GetValue(in_cp, L"AA_samples_max", DBL_MAX); + m_AA_adaptive_threshold = (float)ParAcc_GetValue(in_cp, L"AA_adaptive_threshold", DBL_MAX); + m_indirect_specular_blur = (float)ParAcc_GetValue(in_cp, L"indirect_specular_blur", DBL_MAX); m_lock_sampling_noise = (bool)ParAcc_GetValue(in_cp, L"lock_sampling_noise", DBL_MAX); @@ -376,6 +380,10 @@ SITOA_CALLBACK CommonRenderOptions_Define(CRef& in_ctxt) cpset.AddParameter(L"GI_sss_samples", CValue::siInt4, siPersistable, L"", L"", 2, 0, 100, 0, 10, p); cpset.AddParameter(L"GI_volume_samples", CValue::siInt4, siPersistable, L"", L"", 2, 0, 100, 0, 10, p); + cpset.AddParameter(L"enable_adaptive_sampling", CValue::siBool, siPersistable, L"", L"", false, CValue(), CValue(), CValue(), CValue(), p); + cpset.AddParameter(L"AA_samples_max", CValue::siInt4, siPersistable, L"", L"", 8, -3, 100, 0, 10, p); + cpset.AddParameter(L"AA_adaptive_threshold", CValue::siDouble, siPersistable, L"", L"", 0.05f, 0.0f, 1.0f, 0.0f, 100.0f, p); + cpset.AddParameter(L"indirect_specular_blur", CValue::siDouble, siPersistable | siAnimatable, L"", L"", 1.0f, 0.0f, 2.0f, 0.0f, 100.0f, p); @@ -779,6 +787,14 @@ SITOA_CALLBACK CommonRenderOptions_DefineLayout(CRef& in_ctxt) item.PutAttribute(siUILabelPercentage, 100); layout.EndGroup(); + layout.AddGroup(L"Adaptive Sampling"); + layout.AddItem(L"enable_adaptive_sampling", L"Enable"); + item = layout.AddItem(L"AA_samples_max", L"Max. Camera (AA)"); + item.PutAttribute(siUILabelPercentage, 100); + item = layout.AddItem(L"AA_adaptive_threshold", L"Adaptive Threshold"); + item.PutAttribute(siUILabelPercentage, 100); + layout.EndGroup(); + item = layout.AddItem(L"indirect_specular_blur", L"Indirect Specular Blur"); item.PutAttribute(siUILabelPercentage, 70); @@ -1198,7 +1214,8 @@ SITOA_CALLBACK CommonRenderOptions_PPGEvent(const CRef& in_ctxt) paramName == L"motion_shutter_onframe") MotionBlurTabLogic(cpset); - else if (paramName == L"use_sample_clamp" || + else if (paramName == L"enable_adaptive_sampling" || + paramName == L"use_sample_clamp" || paramName == L"output_filter") SamplingTabLogic(cpset); @@ -1275,6 +1292,11 @@ void MotionBlurTabLogic(CustomProperty &in_cp) // void SamplingTabLogic(CustomProperty &in_cp) { + // adaptive sampling + bool adaptive = (bool)ParAcc_GetValue(in_cp, L"enable_adaptive_Sampling", DBL_MAX); + ParAcc_GetParameter(in_cp, L"AA_samples_max").PutCapabilityFlag(siReadOnly, !adaptive); + ParAcc_GetParameter(in_cp, L"AA_adaptive_threshold").PutCapabilityFlag(siReadOnly, !adaptive); + // Only some filter nodes have a width attribute CString filter = ParAcc_GetValue(in_cp, L"output_filter", DBL_MAX).GetAsText(); diff --git a/plugins/sitoa/renderer/RendererOptions.h b/plugins/sitoa/renderer/RendererOptions.h index a066bf1..104194d 100644 --- a/plugins/sitoa/renderer/RendererOptions.h +++ b/plugins/sitoa/renderer/RendererOptions.h @@ -103,10 +103,15 @@ class CRenderOptions int m_GI_transmission_samples; int m_GI_sss_samples; int m_GI_volume_samples; - float m_indirect_specular_blur; + bool m_enable_adaptive_sampling; + int m_AA_samples_max; + float m_AA_adaptive_threshold; + + float m_indirect_specular_blur; bool m_lock_sampling_noise; bool m_sss_use_autobump; + bool m_use_sample_clamp; bool m_use_sample_clamp_AOVs; float m_AA_sample_clamp; @@ -262,6 +267,11 @@ class CRenderOptions m_GI_transmission_samples(2), m_GI_sss_samples(2), m_GI_volume_samples(2), + + m_enable_adaptive_sampling(false), + m_AA_samples_max(8), + m_AA_adaptive_threshold(0.05f), + m_indirect_specular_blur(1.0f), m_lock_sampling_noise(false), From 4489225f138230117f0506349fc5b2880ca66345 Mon Sep 17 00:00:00 2001 From: Jens Lindgren Date: Tue, 17 Apr 2018 21:43:52 +0200 Subject: [PATCH 030/159] add session mode to AiBegin() --- plugins/sitoa/common/Tools.cpp | 11 +++++++++++ plugins/sitoa/common/Tools.h | 3 ++- plugins/sitoa/loader/Loader.cpp | 2 +- plugins/sitoa/loader/ShaderDef.cpp | 2 +- plugins/sitoa/renderer/GraphicSequencer.cpp | 4 ++-- 5 files changed, 17 insertions(+), 5 deletions(-) diff --git a/plugins/sitoa/common/Tools.cpp b/plugins/sitoa/common/Tools.cpp index 36f1781..cdcf260 100644 --- a/plugins/sitoa/common/Tools.cpp +++ b/plugins/sitoa/common/Tools.cpp @@ -1557,3 +1557,14 @@ void AddCRefToArray(CRefArray& out_array, const CRef& in_item, bool in_recursive AddCRefToArray(out_array, children[i], true); } } + + +// Checks whether running in interactive or batch mode and returns the correct Arnold enum. +// +AtSessionMode GetSessionMode() +{ + if(Application().IsInteractive()) + return AI_SESSION_INTERACTIVE; + else + return AI_SESSION_BATCH; +} diff --git a/plugins/sitoa/common/Tools.h b/plugins/sitoa/common/Tools.h index e6965da..a8397f7 100644 --- a/plugins/sitoa/common/Tools.h +++ b/plugins/sitoa/common/Tools.h @@ -458,4 +458,5 @@ CStatus GetBoundingBoxFromObjects(const CRefArray in_objects, double in_frame, d bool ArrayContainsCRef(const CRefArray& in_array, const CRef& in_ref); // Add a CRef to the output array, optionally recursing over the children void AddCRefToArray(CRefArray& out_array, const CRef& in_item, bool in_recursive); - +// Checks whether running in interactive or batch mode and returns the correct Arnold enum. +AtSessionMode GetSessionMode(); diff --git a/plugins/sitoa/loader/Loader.cpp b/plugins/sitoa/loader/Loader.cpp index 84b0475..95aa506 100644 --- a/plugins/sitoa/loader/Loader.cpp +++ b/plugins/sitoa/loader/Loader.cpp @@ -188,7 +188,7 @@ CStatus LoadScene(const Property &in_arnoldOptions, const CString& in_renderType // Setting time to statistics loadStart = clock(); - AiBegin(); + AiBegin(GetSessionMode()); // Setting Log Level SetLogSettings(in_renderType, iframe); diff --git a/plugins/sitoa/loader/ShaderDef.cpp b/plugins/sitoa/loader/ShaderDef.cpp index 445a7f8..d1d62ae 100644 --- a/plugins/sitoa/loader/ShaderDef.cpp +++ b/plugins/sitoa/loader/ShaderDef.cpp @@ -680,7 +680,7 @@ void CShaderDefSet::Load(const CString &in_plugin_origin_path) GetRenderInstance()->DestroyScene(false); - AiBegin(); + AiBegin(GetSessionMode()); // load the plugins (installation, + the ones in the shader search path) GetRenderInstance()->GetPluginsSearchPath().Put(in_plugin_origin_path, true); GetRenderInstance()->GetPluginsSearchPath().LoadPlugins(); diff --git a/plugins/sitoa/renderer/GraphicSequencer.cpp b/plugins/sitoa/renderer/GraphicSequencer.cpp index 4300807..337c1e5 100644 --- a/plugins/sitoa/renderer/GraphicSequencer.cpp +++ b/plugins/sitoa/renderer/GraphicSequencer.cpp @@ -614,7 +614,7 @@ bool CGSUserData::Initialize() if (prop.GetParameter(L"use_asstoc").IsValid()) m_useAsstoc = (bool)ParAcc_GetValue(prop, L"use_asstoc", DBL_MAX); - AiBegin(); + AiBegin(GetSessionMode()); AtNode *options = AiUniverseGetOptions(); CNodeSetter::SetBoolean(options, "skip_license_check", true); CNodeSetter::SetBoolean(options, "enable_procedural_cache", false); // for #1660 @@ -706,7 +706,7 @@ bool CGSUserData::Initialize() AiEnd(); // now read back the resavep-ed universe - AiBegin(); + AiBegin(GetSessionMode()); options = AiUniverseGetOptions(); CNodeSetter::SetBoolean(options, "preserve_scene_data", true); CNodeSetter::SetBoolean(options, "skip_license_check", true); From 3b5685f0ee26dd74b7aff9f452b5f39d32eed57f Mon Sep 17 00:00:00 2001 From: Jens Lindgren Date: Tue, 17 Apr 2018 22:18:32 +0200 Subject: [PATCH 031/159] make GetSessionMode a const --- plugins/sitoa/common/Tools.cpp | 2 +- plugins/sitoa/common/Tools.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/sitoa/common/Tools.cpp b/plugins/sitoa/common/Tools.cpp index cdcf260..c5960b9 100644 --- a/plugins/sitoa/common/Tools.cpp +++ b/plugins/sitoa/common/Tools.cpp @@ -1561,7 +1561,7 @@ void AddCRefToArray(CRefArray& out_array, const CRef& in_item, bool in_recursive // Checks whether running in interactive or batch mode and returns the correct Arnold enum. // -AtSessionMode GetSessionMode() +const AtSessionMode GetSessionMode() { if(Application().IsInteractive()) return AI_SESSION_INTERACTIVE; diff --git a/plugins/sitoa/common/Tools.h b/plugins/sitoa/common/Tools.h index a8397f7..d936ec1 100644 --- a/plugins/sitoa/common/Tools.h +++ b/plugins/sitoa/common/Tools.h @@ -459,4 +459,4 @@ bool ArrayContainsCRef(const CRefArray& in_array, const CRef& in_ref); // Add a CRef to the output array, optionally recursing over the children void AddCRefToArray(CRefArray& out_array, const CRef& in_item, bool in_recursive); // Checks whether running in interactive or batch mode and returns the correct Arnold enum. -AtSessionMode GetSessionMode(); +const AtSessionMode GetSessionMode(); From 34a5ebe5d0e1e2f9a7ff72746a733bc6be01307f Mon Sep 17 00:00:00 2001 From: Jens Lindgren Date: Tue, 10 Apr 2018 00:57:48 +0200 Subject: [PATCH 032/159] move package output location to /dist --- SConstruct | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/SConstruct b/SConstruct index 7295011..37367ce 100644 --- a/SConstruct +++ b/SConstruct @@ -20,7 +20,7 @@ import SCons def make_package(target, source, env): package_name = str(target[0]) + ".xsiaddon" zip_name = str(target[0]) - base_pkg_dir = 'package_temp' + get_softimage_version(env['XSISDK_ROOT']); + base_pkg_dir = os.path.join('dist', 'package_temp' + get_softimage_version(env['XSISDK_ROOT'])); # First we make sure the temp directory doesn't exist #if os.path.exists(base_pkg_dir): @@ -77,7 +77,7 @@ function main() #if retcode != 0: # print "ERROR: Could not create package '%s'" % package_name #else: - shutil.move(os.path.join(base_pkg_dir, 'SItoA.xsiaddon'), package_name) + shutil.move(os.path.join(base_pkg_dir, 'SItoA.xsiaddon'), os.path.join('dist', package_name)) """ import zipfile From 0cb8d50119d3ffe76337ed1c722112dc856f6242 Mon Sep 17 00:00:00 2001 From: Jens Lindgren Date: Wed, 18 Apr 2018 00:07:21 +0200 Subject: [PATCH 033/159] include new binaries and pit-file in package --- SConstruct | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/SConstruct b/SConstruct index 37367ce..1463d15 100644 --- a/SConstruct +++ b/SConstruct @@ -392,11 +392,16 @@ PACKAGE_FILES = [ [os.path.join(plugin_binary_path, 'shaders', DLLS), os.path.join(addon_path, bin_path)], [os.path.join(ARNOLD_BINARIES, 'kick%s' % get_executable_extension()), os.path.join(addon_path, bin_path)], [os.path.join(ARNOLD_BINARIES, 'maketx%s' % get_executable_extension()), os.path.join(addon_path, bin_path)], +[os.path.join(ARNOLD_BINARIES, 'noice%s' % get_executable_extension()), os.path.join(addon_path, bin_path)], +[os.path.join(ARNOLD_BINARIES, 'oslc%s' % get_executable_extension()), os.path.join(addon_path, bin_path)], +[os.path.join(ARNOLD_BINARIES, 'oslinfo%s' % get_executable_extension()), os.path.join(addon_path, bin_path)], [os.path.join(ARNOLD_BINARIES, '*%s' % get_library_extension()), os.path.join(addon_path, bin_path)], +[os.path.join(ARNOLD_BINARIES, '*.pit'), os.path.join(addon_path, bin_path)], [os.path.join(ARNOLD_PLUGINS, '*'), os.path.join(addon_path, bin_path, '..', 'plugins')], [os.path.join('plugins', 'helpers', '*.js'), os.path.join(addon_path, plugins_path)], [os.path.join('plugins', 'helpers', 'Pictures', '*.bmp'), os.path.join(addon_path, pictures_path)], [os.path.join('shaders', 'metadata', '*.mtd'), os.path.join(addon_path, bin_path)], +[os.path.join(ARNOLD_HOME, 'license', 'lmuti*'), os.path.join(addon_path, license_path)], [os.path.join(ARNOLD_HOME, 'license', 'rl*'), os.path.join(addon_path, license_path)], [os.path.join(ARNOLD_HOME, 'license', 'solidangle.*'), os.path.join(addon_path, license_path)], [os.path.join(ARNOLD_HOME, 'license', 'pit', '*'), os.path.join(addon_path, pit_path)] From 748bf81f5a152505539afb555eb420fb9c92ebdb Mon Sep 17 00:00:00 2001 From: Steven Caron Date: Sat, 14 Jul 2018 19:03:49 -0700 Subject: [PATCH 034/159] bump version --- plugins/sitoa/version.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/sitoa/version.cpp b/plugins/sitoa/version.cpp index d04f4eb..a661bc5 100644 --- a/plugins/sitoa/version.cpp +++ b/plugins/sitoa/version.cpp @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations #include #define SITOA_MAJOR_VERSION_NUM 5 -#define SITOA_MINOR_VERSION_NUM 0 +#define SITOA_MINOR_VERSION_NUM 1 #define SITOA_FIX_VERSION L"0-alpha" From 43683b440d709ded5070587ccbc4dd9c7d4c3cb2 Mon Sep 17 00:00:00 2001 From: Steven Caron Date: Sat, 14 Jul 2018 19:05:41 -0700 Subject: [PATCH 035/159] support for 'AOV Shaders' for issue #13 --- plugins/sitoa/loader/ShaderDef.cpp | 3 +++ plugins/sitoa/loader/Shaders.cpp | 22 ++++++++++++++++++++++ plugins/sitoa/renderer/IprShader.cpp | 25 ++++++++++++++++++++++++- 3 files changed, 49 insertions(+), 1 deletion(-) diff --git a/plugins/sitoa/loader/ShaderDef.cpp b/plugins/sitoa/loader/ShaderDef.cpp index d1d62ae..da6f123 100644 --- a/plugins/sitoa/loader/ShaderDef.cpp +++ b/plugins/sitoa/loader/ShaderDef.cpp @@ -471,6 +471,9 @@ CString CShaderDefShader::Define(const bool in_clone_vector_map) { m_sd.AddShaderFamily(siShaderFamilySurfaceMat, true); m_sd.AddShaderFamily(siShaderFamilyVolume, true); + // This is the only way a closure can be connected to output shader stack + // Support for 'Global AOV Shaders'... + m_sd.AddShaderFamily(siShaderFamilyTexture, true); } else m_sd.AddShaderFamily(m_is_camera_node ? siShaderFamilyLens : siShaderFamilyTexture, true); diff --git a/plugins/sitoa/loader/Shaders.cpp b/plugins/sitoa/loader/Shaders.cpp index 0f20e85..f4c1f68 100644 --- a/plugins/sitoa/loader/Shaders.cpp +++ b/plugins/sitoa/loader/Shaders.cpp @@ -21,6 +21,7 @@ See the License for the specific language governing permissions and limitations #include #include +#include ///////////////////////////////////// ///////////////////////////////////// @@ -383,6 +384,27 @@ CStatus LoadPassShaders(double in_frame, bool in_selectionOnly) if (shaderNode) CNodeSetter::SetPointer(options, "background", shaderNode); } + + // Support for 'AOV shaders' putting this into 'output' shader type + CRef outputStackRef; + outputStackRef.Set(pass.GetFullName() + L".OutputShaderStack"); + ShaderArrayParameter arrayParam = ShaderArrayParameter(outputStackRef); + + if (arrayParam.GetCount()>0) + { + AtArray* aovShadersArray = AiArrayAllocate(arrayParam.GetCount(), 1, AI_TYPE_NODE); + for (LONG i=0; i #include - +#include // Update an object's material. It's called when, in ipr, an object is moved to/out-of a group with a material // @@ -294,6 +294,29 @@ void UpdatePassShaderStack(const Pass &in_pass, double in_frame) } else CNodeSetter::SetPointer(options, "background", NULL); + + // Support for 'AOV shaders' putting this into 'output' shader type + CRef outputStackRef; + outputStackRef.Set(in_pass.GetFullName() + L".OutputShaderStack"); + ShaderArrayParameter arrayParam = ShaderArrayParameter(outputStackRef); + + if (arrayParam.GetCount()>0) + { + AtArray* aovShadersArray = AiArrayAllocate(arrayParam.GetCount(), 1, AI_TYPE_NODE); + for (LONG i=0; i Date: Mon, 16 Jul 2018 23:12:00 -0700 Subject: [PATCH 036/159] switched to output shader family type --- plugins/sitoa/loader/ShaderDef.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/sitoa/loader/ShaderDef.cpp b/plugins/sitoa/loader/ShaderDef.cpp index da6f123..9bfef7b 100644 --- a/plugins/sitoa/loader/ShaderDef.cpp +++ b/plugins/sitoa/loader/ShaderDef.cpp @@ -473,7 +473,7 @@ CString CShaderDefShader::Define(const bool in_clone_vector_map) m_sd.AddShaderFamily(siShaderFamilyVolume, true); // This is the only way a closure can be connected to output shader stack // Support for 'Global AOV Shaders'... - m_sd.AddShaderFamily(siShaderFamilyTexture, true); + m_sd.AddShaderFamily(siShaderFamilyOutput, true); } else m_sd.AddShaderFamily(m_is_camera_node ? siShaderFamilyLens : siShaderFamilyTexture, true); From 325eb795984478a12bfced031bba2c1c3befb9b2 Mon Sep 17 00:00:00 2001 From: Steven Caron Date: Mon, 16 Jul 2018 23:13:45 -0700 Subject: [PATCH 037/159] more thorough handling of output shader array fixes some crashes with ipr --- plugins/sitoa/loader/Shaders.cpp | 19 +++++++++++++++---- plugins/sitoa/renderer/IprShader.cpp | 19 +++++++++++++++---- 2 files changed, 30 insertions(+), 8 deletions(-) diff --git a/plugins/sitoa/loader/Shaders.cpp b/plugins/sitoa/loader/Shaders.cpp index f4c1f68..553db29 100644 --- a/plugins/sitoa/loader/Shaders.cpp +++ b/plugins/sitoa/loader/Shaders.cpp @@ -389,21 +389,32 @@ CStatus LoadPassShaders(double in_frame, bool in_selectionOnly) CRef outputStackRef; outputStackRef.Set(pass.GetFullName() + L".OutputShaderStack"); ShaderArrayParameter arrayParam = ShaderArrayParameter(outputStackRef); - + CRefArray outputShadersArray; + if (arrayParam.GetCount()>0) - { - AtArray* aovShadersArray = AiArrayAllocate(arrayParam.GetCount(), 1, AI_TYPE_NODE); + { for (LONG i=0; i0) + { + AtArray* aovShadersArray = AiArrayAllocate(outputShadersArray.GetCount(), 1, AI_TYPE_NODE); + for (LONG i=0; i0) - { - AtArray* aovShadersArray = AiArrayAllocate(arrayParam.GetCount(), 1, AI_TYPE_NODE); + { for (LONG i=0; i0) + { + AtArray* aovShadersArray = AiArrayAllocate(outputShadersArray.GetCount(), 1, AI_TYPE_NODE); + for (LONG i=0; i Date: Fri, 27 Jul 2018 00:06:17 -0700 Subject: [PATCH 038/159] Support for tabs in auto ui generation using existing soft.order metadata, look for 'AddTab' token --- plugins/sitoa/loader/ShaderDef.cpp | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/plugins/sitoa/loader/ShaderDef.cpp b/plugins/sitoa/loader/ShaderDef.cpp index d1d62ae..ce7bbd3 100644 --- a/plugins/sitoa/loader/ShaderDef.cpp +++ b/plugins/sitoa/loader/ShaderDef.cpp @@ -606,10 +606,19 @@ void CShaderDefShader::Layout() LONG order_array_count = order_array.GetCount(); bool begin_group = false; + bool add_tab = false; CString group_name; + CString tab_name; for (LONG i = 0; i < order_array_count; i++) { CString p_s = order_array[i]; + if (add_tab) + { + tab_name = CStringUtilities().ReplaceString(L"_", L" ", p_s); + layout.AddTab(tab_name); + add_tab = false; + continue; + } if (begin_group) { group_name = CStringUtilities().ReplaceString(L"_", L" ", p_s); @@ -617,6 +626,11 @@ void CShaderDefShader::Layout() begin_group = false; continue; } + if (p_s == L"AddTab") + { + add_tab = true; + continue; + } if (p_s == L"BeginGroup") { begin_group = true; From f70e605cf4361a4a0b36b340534e61efcc13e2cb Mon Sep 17 00:00:00 2001 From: Steven Caron Date: Wed, 1 Aug 2018 23:45:05 -0700 Subject: [PATCH 039/159] added test for aov shaders this just tests that aov shaders don't crash. this test doesn't test aov shaders as well as i would like because the test suite doesn't support outputing aovs and testing the difference on them. --- testsuite/XSIProject/Scenes/test_0266/README | 5 ++ .../XSIProject/Scenes/test_0266/data/test.scn | Bin 0 -> 614400 bytes .../Scenes/test_0266/ref/reference.log | 67 ++++++++++++++++++ .../Scenes/test_0266/ref/reference.tif | Bin 0 -> 19213 bytes 4 files changed, 72 insertions(+) create mode 100644 testsuite/XSIProject/Scenes/test_0266/README create mode 100644 testsuite/XSIProject/Scenes/test_0266/data/test.scn create mode 100644 testsuite/XSIProject/Scenes/test_0266/ref/reference.log create mode 100644 testsuite/XSIProject/Scenes/test_0266/ref/reference.tif diff --git a/testsuite/XSIProject/Scenes/test_0266/README b/testsuite/XSIProject/Scenes/test_0266/README new file mode 100644 index 0000000..fe15bb5 --- /dev/null +++ b/testsuite/XSIProject/Scenes/test_0266/README @@ -0,0 +1,5 @@ +support for aov shaders + +(github issue #13) + +author: scaron \ No newline at end of file diff --git a/testsuite/XSIProject/Scenes/test_0266/data/test.scn b/testsuite/XSIProject/Scenes/test_0266/data/test.scn new file mode 100644 index 0000000000000000000000000000000000000000..484f04c16777c88922c8f87c4f63321d15ee4777 GIT binary patch literal 614400 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
7>pmw~W_MeV9mF5M@00 z6bRGtYeOwRIO*c@HLRKPsZ1%KuU%pclzE_($`lO5Rz^J*`cm>SF{~Lv*&-Uozk`yq z*rmY}?GEdMaFkk|=OWGfNBd4v41^(u<&CQo;eqLjhA|MQ;4m^32Tq4*>H1nB zE_U)u=4%fvJ9TtTSkEZe=wo3&rlZa;BvcD;0`1LPXRAE&BF&w)OGIBxZON2ur?fnr zBgUEEaF|&#%t@~1gol-yEkGnP%8{G9V5PHbyGxP;7x|@I_ z{Q9*K)UI0VNIhfy)=^kT#?Zpg-!uzJb1>dFAXwA%NTD#quxttAbH{O;$^o&xGmL>a z1;xlz3^KkkL0yDH zj<{d458F2J$13@`lU*uw_lx+G&q2fXS%?EyvW=hx5YNtpvuio%y~XORgs>!fZ?CW% zK9%ZjgBRw?zmHuxXB*f9Xbm+c|H@iaDQ5ST>)N zrrgdhEQON`;T(8r-iVuUPTF`bQi%|jz^6l&fntbB4fnHQ^uD{ zA$54KJsG={Vrz<4agr!3M_v-;XcV5+W(p3RL<(`>*JMgcq@BQ0$y17<-1z{=b28?S z_S^XSq>?HunNMHxB-IvL101L0k0K~bDxrt^nk(LloAKG5!E4jkEm1 z_C@Luh-Vg!lMKo^vXW6)7QcQ>;~8JNmGhSO2dIB#3O$^x3rm%kb@5DVa^#)xle5Lb z^7$M!MdEQJJqp^cNU%~7U`@NR7K=Yh&iTb?Klm$;)bLS0fBqagKYwAk>G=l(P1K{O z<4=6;6Y7$ZZzzvD(Mmc4LDvwZPARm9sJ;|Kb|DOUB-p>DV{`b4Et33tV^RaY8gkMO zu5`wA+~Lrtp)0uWz&rmYfxgz(Hr9iZ;^7fg-I#vRk0QH#$VoS7`6FPZc0qQ{H0FW5 zR+L%dsq})7{?IQYy(WGdTxCu3qY{Yg4e*Q}vM!vy#a3q^gINA-^NYf^k6eT42!AiSX~6v-Qu2}~2n z)(!1%l6Q&lPWL=#H=v+Ua7bwq-zFw9ngIW%R)~w2F0%eFAdZahKlaDG9=~+mct39b z#x(_9J23mRXPN0GH@MzLx-?8&!Mbttmt(DLOMdZC=L%bzHsr(pC!DR&GE6BbPIAK8Aq>>Q31^DeBjN=jbwX!W_N~3dar5%k-)!0x zZbYt=%E91agw#h>`mXxmHq1bJ&Y8?5hV=46`pK-ycW3dP#ZR1;4Li~%RWi=p8R8oKphca{=bu=U!`rg6$6#?=gl!4C8uWtinq~Qu*l>;K)YSoxUmSIKPszt^L;OX&5$r}H zLm`No^pN^~>HY@!+U|Wlo?dizo!{m6gffjEEvE;6qA?&%pVBvJmCKw191GbMo`9^_T2(w2cm>25R{VwidTn;k>AR0?A3lHg5=swheY!ZUTb8y% z25Cd%KDL8TO#3^ZUB*tlRo`Q0z!ORv%3d0u)-6kwx*FRZz4Z9|N)_B@`L(%NA=}AV zN)^@^*ICi`OLfC#nl$1`M$w z-roFKu#)wqSHJnhwH?x~!|TnfX>BW68O{c!qP?-RvorNJx++5pA3k0_+H1wtdH1i) zjLAvqNjLUJmNs?vrqHGft!yXHc3JP;V9wQIIi^zD(t*8^rAnQ>$#t{Aw8)2LJ>pi4 zFYr(6p~Waw`Yep_T^ib(*1&tspI{&K`!~nXf^3NkC^>wUTg-(W?^}&2+=1E~xdUm{ zhRIu<@N{o=1~0LD&?Eb4Z9<)aIR+e^euCC{npz!fS4{MBVp@2%Zt%O8Z^G{BxmUPk zJ51?GH&#cMHg#5~PSmWC_pj&k9@T2FcR-&l&nRu_!0O0SrOxVX_8YbS(eqJ$8#edN zuqVfro0KY{WzqL54XutJS{=N`4!rSuR+t!Vk(w}he#qQ@gn}dOgNTo1r+v&$kT0f?Xy#rF)atw8d>+I& zGALt_vny`;jUHL%LG21l_L6$e!47$GzKqA=#+Ql+lOa>k8$|L#Rw zuh_?SSNG%^SA$Ze&$bBP$!k`M_3mY@=yQYGh174i%eT6geShtNPE4L&^Y8yoXtNL< zjE~gd@IFqdMTy>F-Ac!4j`a_}wbA0D<+Qsn=5%86BUQSH#YpXncx(eA!86;Lj%_fE zhm%roG7PZOe23_Ab~aIGQU8D#UW*RR`#9>e+X2sVjcgC!w4~l04v%w-IJkwuxKPE^ zck(%yPIZeUZ(rnXGSf(}P8QW9aY1py?Qh^h@7;Hu z12SFJPKYUFo#$xK8#3W$!QkYOoE?^K&`6D#s`-WLCADEPQ+ezOY!F#Dm6rl-Sgla& zY-=j__gWeGH6SJ~cT0X7hPIf0bQ<06j1pwZJNY*3M7nRouI?OCX!Mub&PxNmW{r)> zx|V9$PuqqSFE{1dwP2UklTY8wRms7E((_+v!~Sqyad1v9OYNK`<=$o)Rzf%T^mDgi z@%N_Qo8G&J$GRiEHr<_4P}eeJjiui<>?>fWzYW9jjEv3;qw6j0=)C;O!6D;X{icOu`$PA%^H&o6kZa+hHhkJI*y+#buf$>Oa- zDG@_8UrcYeB;z2uc3yE_8Qb|BO;`3AFvHht{?pdO_kG?qfZ8o=y|JGuceH|VX6sEpQ6)r>zyh9~# zr#T3s<`Kw%{vJE_fo3>fSls{mZ+_8!Yu>#tRCO5jc5wL|N|5|!gyg)H=Sy1m%BycE zv9o52&i-3Fn1=-2JAaKz24c(gz~#QBYOh>I($)3xEGr%V>%cZ!|M_cIh0XX>=Ov{l z9eFe|w4p@mZy#~R$(PENj%T>F$}iz;)Qc=#wsoVlr3;TnhAMS6_Mp?}LbK~9`pwN( zV?c>9>t<7`(zi!*&tQ%1gBXij?H(~Aa-#2yxDc0ru3k7xX~Vl|iIw4R3o<5D-kQja z3LDebsI#&;p=`|tO21$|q&aU@-vo$p+3#YJO_^#tADHo_Z@pPp@=_~HBo>#2_hqMd z=mC%XaCr(<+snU13m)l=QUI)R#jGWs$0kaVqUSLQVw^7gTeWc4yROSB{c$A6!Y=!1 zjej)DXS1jnQrJ1c@A1G2mut=9(-6hdK>wy+ z8UiLQdl0;Hh5N{2w2h@b9rc>S`sJr0&nL)yiLyTfahxhvH{wenf z^NOqeh=j{(6J}YQ2 z>!m4bHL|C8&peH4|DD@AKHt+_(aaj~XJBKE)`H!bLx`t6QL*rw`W9PF=`5=M<7!9O z=Nac4Kc@QI9Zwn#SLLs(w+&MDcnE0dXU{>1;lJ&1{@rEn_%6B=mgia9?{z7Au)E3c zc=4HI>boBz71-G5C;KjtcJkn*`UNK)aGX{${L8gdtD&DoqyjgaaWfNK4_vs-KP6+O z22+$e|5-JR~8@Shy zE=p1pCQqtr7c!M5!pq;d(cp^ameZ)F+XF}3dEB15E{LsMN1F>%rNZjmNjj)RKV_GJ zsO!KLxVz)e6}@jdZaiDF(txbnU}-DVIv6~(CFx`$T&8n+2(V+NQqkSVE_a5W-c?p~ z>E=K3dx<3;BdZjlw4upO^NDa7s?^n3{VkiyO#IWzaeKE6z0SQ_w2M-OHI_~$5oBn4 zPisuE`MnG=oV-G(E~;MDY3tIv-xj-P^rnWE42TQui11wfl!zg3ab!Au$!TbHdl3~y z_X&!pdFdfLKIHWrJ8(y2u{(;=ahNB8dy^eb4yjKL5&ZM2z_n(BS zqe?7RWwPX%VYmk@BP8DdEB&qU9f;vPXWx*1zx%kXX}qyT%pm`7R7h|OG&&*DgVs%X zBhR7zSFTt!bNlMPXp>ds|DG=Il?)E4>$9nITjvFCAMr9i&}(I&cZD4r%xo!3&?^_8 zKFB#N$$2Z!o;`K9yYHNA;Wfs6>BsMnBhIBdd(@5O<-9nc?&x;~{I}n{VWYj)w>s4( z9JAxJiFok6;P3_Yp~*BECTYoaz)!!HY=ampLaL6|GJAZ-l^Aj{v|{UvR3y++@U?_e zZESclDOV@`>Ut$3Hnxl$+3JM%VmH5h>jv##N=e0@hgkY4xu(8L4YKLz=0U(0`XkcO z%~cqvh4u16CtSmgNR5IRUuv{^T{HVxkF6z+zevn9wF`B^5oNqSG=d#EmHQ@DQ<+`& zs20+ZPO+QKd@RB+ZZ72TkrzOXX8`$b3*WJ+z_GFJpmo8bU%~Ls84kK>%QR!(;#HGv z;oJ$_aE}%pueNjs2M3Sz=nZciS&GPkM&V3PHZD21ggc`mh`qMX1}^;yf}8^2NJ324 z1^!_kB!5pRp$~-O8*-8aUVY46jM^5`Vb3mv)f!CW2sj`Wcxf*^R09tRaADV3RcCrY z&in`NloX_?AxIStSAI5yl-%(om=>7DKE6rExC}@NLz9g>pygY^cjOJunTP2PfboD> z^Z*z%)cEL6DXbZif?+x=KGuUCHc|otDOM;7cyNdi??jpmKNB?{`Fu)*vqBhpVnRiJ zL<8Rwsd8L~Gis0q$-v$f4Akm7&0{mf$n|dCxkgJX`0f0xt(hzEkLz?X1`f{R88LW< z4vJYgdqjbu5Y<)yxi3{3@uEQFD|VIf(K_XlHv&)KB}=EG<9GyOl-ZlprrF`k?t2&Y z?K0$i%}=zcL-UTkaJ)?!?`fj<{u&#unsSsVDdqAFo|Pj+W|*=Op7HG4pIdZ;VH9qCNpmsZh65~-aVZen5Si+B#8xx-5lt(vWm?heRJ1^Bn%BLLu zAl<^K&bz6+brhFVg zJ}6tW6{1TUKK?}IG>B3E^o0L)Psr-JesxrZpfA^S6O|}}oO`G5mpq-S$C^@Ux^m3Q z-VKjlxazp4;*9cH^1Fr8dPQ@Qs?(KpT#0_ljxVX3a`hQq?ecH)diss2bGh57mp#w$ zX`mC8NKX{&oJbuJncjCSL^o_%DDLz#88k4%KG)pZp^tXqjVfgaeZO~_PXnE(L>dPD z2pW_|Ym1=1>;^3K>&qO7F?QVbnc0{e{!?#w?s{%BPUk4%=|tqbLUhj}*wc&j{Z5}+ zv#HYj&i=2pJ_`mEj;r^oi0&APG|(EEwoIMY6uCID-S_xd@7aI!9#m}XHCMjG{a~#z znT8KL7WUY`%-3&Oe-F!$xQ@^(17}EU!8$iTSZicxcuh4W8-J2N8*h^T9K;B?Vwq?_ z4po_`b0_GJkP8VUewEIR0s0Ym!XhqY4q`nk zJn7Jw&{UusIfM|9gqV`G{1+AyX%;|4{nj!HV#Ir&xIW5$jqCVp`#T+}*cG-u!UHmZ z_9Q^?SDv1<_9A}2eWB9Xa_-)<))m_lpD*|WUk`t<7a^mE>g-{;3H=Ah#_jT+=f1G? zZ?6~VHck-Ff&W*&4rFvG7OKw_FT!LRhUM(rdPBiC{v&43De+>q|4M#6q`f^n1nkh? zyNrVvv&x1J%MdZ$X~NZ_9R{~PREE-kDn||n4QAC(?z`%mF{bBu(uwo$7)D9k1E6dL z-zW>u;-hbL+HHHm*iR+>VpeY7vgAe!7pm=OO!=pE8~QCzt!i7a;_St~GwiE4PJTMF z*}%ocy@PcA z6Y5%;&t9j9uEpKD^6!bfF0PZ}cCX#Ky5S;uU9)8!8BX`4ztg9#eI45SX+XEuPV2YU zZq@g#b|jU}G}bklX;*c+HnObc$bmb9z2e5($5*~&`zNI*9qF13ZR&K*(k^lgv$C+q ztZ${w@?~$5mC}|jbWMh;W7q^}Va!|6b6*BA{wTC%;=4s3e53Q2zpxGI1BVWh-V0Kd z$|qRs>yywSIUI_m?b<;=Ndq8h*W{9_?;5zxv8++K~-k2h9$>@{w8+)HS&Y zFD^{luBo2-61UMzOi6C)Yd%mzr@mUk_k4f}f8qvjgCwKz(x!A*7M_qm{5ThEK64R6X93jjWV%R|nJ1EF=MKU7vrLwyggJuc6en_8xb~#QBV!_OyWeqL;c+2^5$#_t0f(OgG-AID?GiebsKR z-H~XQ%V}M?2HDIm9D=pnKo5-D;>aE@9Kr<|xOjrhq8bw_@2AU1sl3L?&mH3|Dm?7m zu?)?(;GO<)jhztVN{_O^OYYwHpUiA~mUUO+DM~X=%Hz_EzTicWTRF+0nrgyQoZ2M^ zalV*8-XZapE>db0SJ`fa7!{cTRhG2a?6UK8u2O>{KI(ROVO`?Fk}zm3aV0UigVmVO zWYR3RC``IlMcsmriJHIKZD$_)jvq9o%aQn9gZK+RgctLodtfLenS_ZKd_alx6ewu2 z$qhb|%2c=b?QG6^R_kjlciD8-B4hEoU+3}{zu`J2T=0Pt6x`)M;q2*!ro2lg7t~d6 zS?d2N%5VmV@j5z66W9B=$8TQ;=B!dEZYw1lRtbTJLCGEf(oAl!B8#PQX_uH8KO#kH zFiy#djDW&4e*hcgoJelPAPyKV%9W)__IJzOHy*uQr%=Dcd#Ia+izE3G!@o4y)OYeM zNNacN(Y52w*V_H&zxr&GMu)03*EM#CE$3RveM?n$OQs{N&fThYV{b(l&uH!JLY3Dq zytytto}eK^+aW5gijE0RKJ@xC_J7wOd~n`&EL)7{uKoJBm50jROXJ$1Az-<@GUjoiSa@tys^vRMX7a_m9HU>iW<2 zDfle6_2!|JBiK&kut-<OABh%O+A%svvTT-N4K@x4sUxj_I}nFN-bg>&i+&SrpnTq&}B$o?fr8t zaC^Pe&poG9TehTR-n+VmZCF#-O+rb9eOG#+!Kq|L%2VsMpd{9(%M$>*!9O#ic&j z9U2IZV<&bnnQUVYXBPn(`zD$6%k?Av#601_h2!{L(vQ%!LyGicJ9J^pq}+MNF7(>4 zWb3ePTi3(#X~+w@{n*a%Ygl|%VRGN6Fh`(k!1k>0Q?X}-63xoI;`GTli1FLQg;htL z-|I4CSMw_M`m||6r%w>$jvxsG*g-kDZ^^J&auX*?p8h95M5F5^3ibwBF>egtVfjHf zX1fS-s+A)srp>zsej792{W>nc)kD%5$j*+Q^Y6a2Q57OztupRD4g^X^SH(A3($Q5k z^Z5K2mfQ+o@bO`jIQLbvmq%W#mOq0MOKc@9kqh}xuw+XoyU%&%pL1Wa=K7L#&zHw4 zvBXZo61kB71WU3EnNZ`I{Wj0J*=uC&n!~f95=&}ISRxnlpJ2)Lf*HGh*|AnT?&FZ+ z-w%FE+L0l(CH4}Q$c3abOC$}Zx~{hMv4l)kA8&h(Zn)MZk8OBS>Jp(r!#Uj$76-@{GRN2v`dYofhs9~T-tdoj zwB6ZX=o{(UkWuhs{L-QAyKf0{oz&;kFwMt*4-i!_XB$dx&Ry=Cw8>OG4=>q*dIYL~ zZb6+0SkZa-w(wm%vuwpQ0g~tjO8svkx$J|C#Ybr_8r^?2Yh+ z9((jk1=sm4Z)R-NB2$uYMCP+`o`kGyKo%?gN+TN2BaQOAg7`GffoNry?Fid@v#4|Y zSdYQ2273HWbr-vIIHHcL`|;c+L%-9A(!)sU2Kb}DHYY%g7EQOc{QS9=$F$(>u3a-P zggJJ2V08it4DRE=;RvPgX++(9KuvQ7{^+M}4a5k`ws~4WrDgt8%1w;vzW99|N*&JQ zg+LwROePst#QHQQG?i%=>n-CE!P)Vuu<)7M@%CVFkt&?p!nU;w{H6PF`op)b@EiBy zsEHE{`TTsVsrU<%T!7N9j48(s1VYo!aSIrsTQNmjGHgAub;EWMd944~f%Xu~xMK&@ z)DUFKKI!Q&f~|dF*D+uvaixf3D z6EGULUn+f%>NC3)z{+y?=;aGP{i`P<)B&o|R<1)!hK`Jd?8_}g+sSTqJ_(kWs ze&GA%e=1P9MwykHL*>Gxw8%(wEM%izqB+TySr(+Oix>0G+brPaNB0$<_N|#!s7Z55 z4>C2KY%h_aO`Q!|U{$l}w#M_F*H2mYrG(?~O_VlbcW}`JwL#MFs%=mT)>tlTcN8t_ zE2x$D?=42}Y4pW&OQZ6Q@^rCF*0NibvSsku_m37sV~3PVRfu zcy+B+a!8e0__S`V4tDYDxxC6X?-{pNjXUtfHjwJU&)QmL^eWW&&*$FmTkh>+cGMrE z+vxpYXss-dt{KsEp`X*nLGypNsJU_itt*t>^tjYIKeb1Strc#QD7EJOgOIsXo%Ww! zf4;!%OK&Mvd1NfHTzi$$@lv_XlD&!j4bZB;$Am-F2L`ohKjqJ@jw4F8?U^IfeBE7_ zWHqALHhMDtFsy6pyAxaAIlcA_^7O@@P)gGavhfuXG^_AcF&j+w&z;{0~x7+Kyg>1V6+2EXlZ zH^TFKtow>$W3AdXtJjY53;jGP7m!CdphS=GKMR!$v>4p+ z$f2zE;6@jm`7-t058#5*w9Z^8Tce>Zk;pUVR)V9Pl)K%)!gfwqmu+jRm;a|s%n9my zVhf|h5xx(a((&ZEmewBQ6NeQA-v&?gU0r^PcgT_ocd6VUw%k~T+&8KBn;ynD;!D=d zIAY-(ujLja^CVs$xrNg6U+@^~E!Vu?(LC05uUnoAL(UhTNNM}IJ;pLkHWVB<=#1~C z0@Zz1FCH99snV~1IFsKO^tc<7((&Z=R7SRu?S{whAQC)DOBj-lgH^I_%h9^!FlgOg zLWUU+mwB~+-+8~qH?D^@7;*LzwQjg6U)j2ma|$9L22PZvR$O@wrnRMO(Ryi2*aA13$tOm$YVZ|n#$S}nVL{p_h3esTX>)ue5I zhrcLQC5_No`94s3$U$D~W$dQ0k^KqEXSo!F10_D9n9Y;2H^H6TX6kuO{2wQK3P zvF}`)G9Aihr+kDXK=kmD+yj8iY~;p!(kg8Vb6Hgn{~7R!wS9`)fR96r;QeP#{Ci=C z>+HrpUk+BCWk$CF1ZyP2>@Xk+)QN z+k9guQgP%tmDWyNn>!_JH$B_rIO@dF zN}Z?nj;8W~*vfTMxv=!vU41=0VvBp*8*XDdHJm%>+f&_8)qkP8YQD|g-2F)w?_ERs zK8Y`~LD%f23nxx_@^w1u=@)}~iWAd+bh~5O^xvh9ORwMYx!CpiVXCKOm{n@6umL1D z{^4fdl#G==wbks|r)JxC`};-LJ@>wYS3InpCyv+8s;&9IRXRN;yoU3{){O-SAYp#;I|~Dc{0fAGsyuT@|$d`LUbCaO7YY z*8eOQFf9DL^p{f=+j~T}-W}EakGJuB8h(}wY1((+6}9Kl3+?0{x7N+u+3+!+h97gkL$?e`bCUlKbTL$ z&!Rhxi~BBoers9s92pj}noq+I*Bwa{dx+|b;&53U#F#mM^p{LWiaG7vG_|5x zi`=aU4HnqVVpr4R${(fg^4ejtTgtgsP_}`gux@A(ElLx( zhP33qrO#om<3-DQ^?YjYzw*eoJ`2A*yG7~wFLaz=KMMMD#wlyhEiqM{kLIm)meQ79 zJI=bZlN2oro}Kjc_7~3udo*4XiWVv}%{|`^N)@im=k!jx-z2&3<@GVetdi_{U3Gg* z`i$?mzuoyWe$$UH-8IxBX93C)++)IVgsjt58v9?9pyJNQ+EBLU21J+I zV7^zj9bz0kyZG9zNI%EPHn%Snn_99l^~$ij#!=4i#hCI&o)@YuaVqt6+L!uNVeqrP z9*Zr`7ISs(BIqUjEZ*AMP1(N%?|thxv7blnQ#rr&CX!2fYd?#(*39x!(VlIm_|MvH zU9p~1#@2iq(%xHBw|4vN_r;Yr-OK7b^|f#BI=viqtvXHwaC+2{Jq?tcNyGPSQZkmj zuBDij1$v|t!0Lu1&Hb7Tiyog#JALW$F&}0$nM|!L4l*k7NZJaeX6&@!ow~ggr8}72 zj-E1JJ84bWZsz90=ahH2mx3E`BM0Awg4ayKIx{_?|4ep^rbf&Z<`>Eq6J5`h{Zv}d z@(JFu?V6&Ga}8qD+t|*b!~Vryv1JOEp3IlnD%A2PK9rAtiiWZ^ zqBF1Emxmj7mMJK))2Gtadp9#<)rcil+Z!$eP3OgY~kC-=QPcU1d3snqlIuU_^; z_IdTaqUV1aJMH00-D+&aR<6Ivg{9A)XZ=&J8@3zJ$t&jk)P$T-{Z>#N|1b1BUF#f< z>RNKY*EF}6FE0LFJH1WWDvbv>N8OYk59VK8i{rtc+@D;3#LRWwo1yZ}H7gIp*$41w z&Dqgk-2I1#B9TjbaD>=UNcz;cYioxe>HMLq_lls9(8?<-9H$ccvufOxZ|z5odZ~4f z%joYGvieQZxT*zvT3l4 z7<;0=G4DL`E_2v`jpf3@@4qR~;s=Ycf3yWSw*ujqJ3n z#I?yoS2-vys7*w(klnTVwYV#O@rSJf^K|>Vgp!BbU+C>$cn%oOL*oi9JbMi1qw$z~ zG65dWZk0)mxT(M<>FrV(4YKJmu%bbsCx28w-`Qhhj$V-i=hcm(Y{LCjxP}|;EcO}t zz+XI33i}PH&v@bt9$1&s@lt^`(oU(mRYa{;k3Cg?bd>YfR>KQkIyy*q2oyF);)@Z; zEvVdu9w`+knd~rp_>PQGR5z^Ac5MEgQ?J(c9&i47c-aq?ey2te2P~xA5pPmY$yjN@ zqa#2iYho2w3&lf>z|dAB#|+rxzsf7an-2%yXP~Qv&}|`0_=A8~UEtI=H6h8QQ*QN- zlC#zj%F?W&G%9waMnQ~h2}N6-btvVPFvRiw$2<8>Q)dmaCA2AhlXe}_x*Jp`vt5Bk z!|YtAM^?GCF{9@*D$_^-*X5D>CZ$ED(Tjy_q>Y}Ej`F8gC2imd$V&fE#|ntC>u#C6 zIkJuuf_16mGRb}u|d8|*48=TAJw9ulEom`GVpDPTnNgo zD#?_0$5P2+To}G4Ze5=-UNM=rg~#{p*FkJCY}r%R(RPTxNoh%Ii;>Is$naX@Ci*0} zhS&8d)SxYu!k^V*JgRracUb$ko@)Xi^`jx%)EC#u?gl{qALei(jcv+$TCdW6|e8)cRdErj* zyV_!lVW+bg;&18CVhpfvJ!4}{H}`}_HC7EjIp{a4VLz+II5SRjrcwPSP6>zKt zP7_Mcf5Bqhcz3YKtG-!WmiLWLc>cgaLuvcDEyn924}$}%CU~q1Jzu4Br;$gLEC#vM zhi@_DLei(j80x%#UPpIlr#-t?&Fa1&H(UY-4-6qAw&+>ZRQ#6yEJkduMz6e!RM5ta z@oku|+d8=A9OMrM>V8&>aj@pH8l$H_bzI+mL};cJVIh>B|ANKXF@10FQ2TYR6P_Nd za%%P8&>JRo^>bT{e_o6%J2%r(mo1w&TwL#Rb-a?rAa`EzErwi3`m`8vulAI9axdC< z?*9g!`@8i4bFsy+*I5klxAbQ*nr_l;HtYYl=jd~VO67ISvXM&R&uTGN`Pa9NE?>xV z*1}CshP%3!qxAe2EJjb8b`x(_j&z*wH>B0KYwN8jZ9ligSa4(drO|szx=riRwa6*U zc&IU$R!W+}<=Y1b$;hW%NcyxG4jpg5i+a+?Y2((reeJq@N!qr=`4|p5iy{7&{wzlR zk84ZZa9Zkh;6%APWsYQmBiny&A7fIp?Y=eJP0-Fe7vkP^!YyY?&ws&UjGC(Xuq$gV zkEs`;P7N(ttskZB=e8LAHmuBC#Nmb0SeNcQX0MO`rerZ{Ni2q3NcyxGW1RPPtvJ|P z8xx*kTisf#-NimeEuF;>e@lNBqjAXiez|%+^%>V`>gfRm&w@|*b6bpV1D=%24I{bB z+t@gE`FsxM>Igmm1&a|s|Lpiaw*oyk-wd``e*dVJ()M#(j1On0JZ&_4kNbo<9Rlw? zs*|W>F=|UJhFnPcv>2ymek=Lgx9NWK+rLQYR-*77vBjvZvl!xU>Ca-UpD?Dtj$*~! zCiNIm?PGMPFO|ZdwO4Ys=l|Jz6L_k=?tgsmb1q3KHw~HCZ!aqBnoL#;ikD%hSDs}p#f=7;=lL4Zmyl@`Sd*B@9+2h{+|EmdRb?k_g-h8 zwbx#I?S1wc_Ld)t@#_UU&N>wwwv+iTDbIgG#CWQc`qc#(2~Q*hwR$tROJ7OZ{+C1y z$qJhv(R3bq%<1=g$VC_w(5pdfz{(Hk2`2HAZS&Cc?UIkP;K#u58Ub?P>kRZ17+zTv zuPEu!bWvzc8`<86x-K(5n4qn4{P__y5r=;0q6Rx~b4x)tV!t=WKVB3%cMb&VVmNg zWcf^7?fB;~-oZ*!LsJ7kBZzIF?f3);-)3pDgGTuT8{^3H< zT`syj@ON8jwaL3*&4fMHYb5RUuNHo$)BlG`nuAMv1d-nZne>v^p-4i_W&F=5sA9fp zMhE8+t3-a1l4AGze}5rp{hUOL&?PS{68e;;I`M6Pl@5Qm>i?~Upg$p%C9%65(-^zW zQNYD-m`SF_7NfY0pS<-Tk0#GTPu~9XR1b9Qf9B%P`1xWXvW8^A=Al4($!I??6s6jL ziAYL362MzYueG)T6Wgva58Nx_J`%4cu>e@xJ6LI;KFtwH|7(jr|MNP*n&996rsbZO zpwNb6!f(&q{d!ou$+Mms;NKoE;V%gI*VJ@?GVjderk66Ux}QCwh`kt%m+*H2BvA>! zjoSDo@4u7Md~|MRe1*HO-}_p6eD#kWiFHHg`3DQvOTWLAh)$BTLM8xeZ#Ronjz8z_ z@24$^#yDO{S~z}0+7}Hn{mIw&{uFJ#tj&xonlJ1Bp|=M;leI)`*Zj1Ix|aQEzS8x> zl8XhbZF3LHHe$bzi~lz~Hfyoql@CmuELdmjSjZhWY9lERHtPS9cbS@L!sn58|NN0) z{Mc;A$nfY>ZuJI9PG5hh+AEhx%7&xD|M>co&6Mhzq*VX#v040>x{gw;qn3WLAmLrK z!^sO9_e!RM@Yr0^wi>VT{tRortu^DH&5z-mdwBM@u=`e0x_|g8(`6)KJNI1Y77ygj zgNORJQyF77P4bQo?tgHdiTg4abPX!~ZsdO@^}ks5=HBCi|1;O@C92nhPvzb;jS=a7 z6__oIlEh+M!p7_K=D6QuQ!{-E4(Wg0rvMM+Ba(5Sn$);&6dL#8S3jCgI{c3O=Z^0> zqSF8K@tp&iikXSp@eJhY_(#u9ENj5T=;y1bta*z18dnRMC_o=#DUxSRB zl9Ax=mi-f?`RLS4>ui1$M349+CJ`Y;n>9&7vnG*;jVn(EBMI;M<(cQ4YD`lHEj4MC zTRr;!N~C!;Zp5@;#X^4SDG+-tFs>bbyR|vz!^&XiQ)%LoDork?kO)}i9*aX779Ed# za0&8F@kA(oVNaYvQ~dWVww_GD!b{Ll$qy}F?13D7F3M~+acb#{H>{H+eef@d-!t5> z>*+shJ6(Qh*0g1*0CC&G*Lbsu62E61xOai1UDVK&lX+n;I(;i=F)8)uP`OHuC#&%!+#wtgsQ%WfAfoe1+K11}r~IDHx|1g*t+Q#< z5ElY}TS}Z&)70N90to`tR3ti?pn`~PgcrD4Dy0*h^1Dup7cZ7rrLh2#3cwyEDemuw z7TjJhseEa_X*{H{mZa1FGE<2^H?;z;pLwWw9-uJ-G?l;_N@RZ57TF6IRML1PmT8Rk z5(F=QjjgDH{12bdA6pxJLrOrlh~O443EAUOQ1eH7*w6neKsU`$UOp0MhjSX% ze>M31T_yn3<5T>efWTkIuxxPVMq@NqqS(!w>JDDN#)spdB>WkW=8h|1fmEaaXB8xE z-Fccj#Myyg0Z^PF?p|;l!7B{<17#%Cd<&7BNYV*4)fX8-lD(wMmP840)9d;xWAVOp zM<|h$jzUed_cH7*$^P%{-xm1W0)JcJZwvfwfxj*Aw*~&Tz~2`5Z?}M<*#r}O8@^5t zXT7Gx+DxNEAwPL1i0J3YWJ92&`{r}2lt-pPm!>4lh%0T+fOtVt)Y2;j{D5*a_ceWL z3Jc<#HV&P)wSd3-1&CE+cdX6}Q*?1JZ3n@0OxI_UIrc3ZIjTp_sGIm9IC z>}}JN)6b(fK1$@&RlmruHHg?T_x9c&3!d=7g6gQ$q&))#arqw#_MQoiX$LMIw0KhK zn$KSwfHZ91?tv1xL?P{ge{KiuL2`Ng$YN}t@E0AxpaG==ORM*qg&Y>F=n=lBV@LD_ znSd~NsX4|@;1Pu=gU1xo89bnnF2JDR{Oj8J_k??0%BD=c+ft@0c((se?6T!fhKJ@~ znzD1<)5qPw`&|wPF8Mw%-97wKR#&IqExUtteRhJQrR^*ux%PER%WA88fb&IXj24#U z^LOq-I_tG@?Fn)yLJ-u!#8Kz!2UP0c`^&s*JeNA?Lm~Y^UkVuj`ccS0Fn~e^ zfq@h<7!0D2A)r5{;ZQJuLNq{qsgc$-ol`bJr6UJEU(w~0CPJ>(peV_qmYq6i$X?$;S@3&jG&M) zK$k+sf{_$54h*EMp$8l?CglIIoVavP0L;YHff)qDfckNG~~gynCH4v4hlhD z8%GbNPA6?ncDb`^E@WTngAZ{oW31p~qvX1|z9R?JI~su0Y~JM;)yW2j!ur1#mL9%f z2t32@2b$&Bc>dEjrD4|F z%KhS>hdoj)!lm4KErGIxkw?dBw3f%LL=cnXRTIotXgSGp>!ha2&+WBA ztWpRTZrgo)i?QE$W)f&k$vA>m6fzkoP{(-Z&wx)^Q z6Rwu;lAW>|2$s%`O&QX|G9Xl#t?(l`D*#lA)I!d;k1^g-^x*0c=fH1kzzMTSJ(j2K z5+3GmD42fKm>dX}$-I?URj#*=nA|N(rf$cXAn;_4!kgUaYJ>G#`nr_00i!rDeyx0v za=M<`c3JOv*Or)c2nKsPNjyDugc@I$BIayiZm0neA} zE&&b*nIuNmfy&N)+N_k!day>d-K1|9k<2Qw%m!drFX$mH6AJim&l^k2gn^f5PZf^| z$`@p|av#*WMRoB;u#v~Ev7BsRv4h{@H1pV5Cmg^R<^0zB^7z~ml=GFy-J1YIArT<2 zTBpe30UFo6$1m|5gm9lexc{S~%>3AF|JS(k5F9;xr?w&+FzyB#Q=@cVLzm(LIA zh$52gs_9Xn*CvJiqaIoc)5^X-&-q~)w*$1JWOjnM!^tXVN}YrWK=1V22>o5rpdfR{ zq}?AF%ZSa)c~0-B#xCF@JZ{vvC9q8D`Fj0=W7kIQ27D@?81TJ#Pw9m>)n-Qz^h)*7 zd| z(dKBn`BjI6uI=}Ov%5A7n#~Kb*zmS>Cnw$9m;)fsCTaE0VjGjwQ$8!J*A&b<2wd*6 zMdyEfwhqfH?bm0Y_Q3=Y(r2lP+jIxR&0Y`gd@KFB{t!r6cPLMG-bIT;Lo!e7*s^tA zB6!wvbz*6jx?$$K(=8`^d88f&qj!u5HrF3)6{^Yqa4%$zLlW?Oy=(NW_O?bRJpAK$ z>1AQbAn)mzejeX18YJ(vkePB}gX<9>n7z;A%Anh3r#=^^dD_kFb`+?FXoS1#mli$VS~PRAw<)XP2@Xt?Ep z!G@gOS$p*+odv@DgSS@STxP>(-DwI0@yq5{8PAs-Rav{y|(12r8J9gUhBnvn=JKQt6{m$%M z+fHjem3}PA27dF#MYX+I$UhVcL^k11JBYwEJN1iQTvH9>9!)#ME8^Om2ltKC&$)dY zWS#c#bHEw3M+pd>B>^uwj>DoYXN>B3<7l1s4Tm)AVt}A%@A(?SvnM>drg`0WW(iJEkrid6Wj0sxHrurczswQ|I{UM^m_<~P^EYThEm95 zaE;3O2@q{ovp)I(#rY?wKb@}eu^7DG_#}NA8l~)B0$iiy2VQ*&u2V;qfVXa*2f#}O ztE|c4H*?blhdl$4x?Kkrt*O^PyLwINpfCO9pMx9JQ7=F)g}ek?@?pCec^Bci$Gzv- zB=zs{3JjxkehqF?N4){(DV^VfHT|n6g2e9|){gG=I`kd5O&#?foX{zj`{)$Dda1- zLm}V5T?(lIMHKQK*!ugvlh*kM@RdvWy0BAYxoUx{tV!=hQpiu>d;P;mX`~L6Qaaaz z*dZGXrDXtAQ8M?FMj#Z$Zrvb_Fi^DId7m`GLeWRtZ@an?QGhNEGe34*Vr`amYV+os3ml)efe)#C+QLT^q6oVMblCAKBi>a!BgfndB?hB7=#b(*m~R#$8$F%?9Im|V5zrGJAF0#(or9KHz=sf?>dKqnRiF-4 z%e~-JO6T5C*=w$^f<_O^-GXk9E5@n)P=%q-`}tP*4mJwm)pgod70jr?66&Zv@EL{l zg}ta+?g#U!T2@E(<+MNaahCDEu`?$4F0Z=MA3mq@8312U$Uyk*gxMhd&Nobsc6N~c z&OX){1Yc4zgW;kDRh3BbS)_}d2wQQ90|wkCco7te_A> zSVVNK!Ma^bfnQivH0p%8OeSEsy-7dX~9 z%R1rNg*1_+1>EdezaoNy`0%!xL|{x3q@=`pO{_cFnX19jK^U)VAG2 z2l!#^rOrV=Cm5!`=rT2C`>q$`p{{by+s(ei^|z`e&u(dRb?XF}w_{z~T?Qj9wiWkU z-+x#RGZC&UJU@4G<#Ln5`F3`SKOM~{!7Jk@bsHIxVG}mx@Q`^EdoFf_&K?%?gW9~X zI=MgH=ZR~v-((n>IR2-6u~2w)ugQdm=fC!z0t3euD1?14GL7RRhFy4+UhV`>2jss$ zKJ&VH$Z3-?^^;XWM-@Cl; zymgq}5ceyWRx_S(VZ_&O1`FaX(%I=P4d(jF%!WckJI(cNMw_2$r&>2d**1R;bm&?) ze_YN7qs?cQE#};Jx_H6yAF>9OuCTN|vTbH~x$O7nb7AGci7JVEk6TA7S#2pOJC)@P zdq4L1a%!B9apJrB+?`Xr_xZq^Ck@(14Si{Is%*YVaf380@8~fG|4mkBPc|u&eRm92NGvB*d4)BLN)e>8r@NXRVE`&QMWD%_1m2_QNW-cUYbj(U{7E6JU>$|5hV>K@053#1R*Ud>UML>VuYn~V zQELb2pt06b@fb1?g56Ea6$BxLaFC&pV8~L)TF9f25GX?->!2)!tcNWqWCLtTA)!#7 zLc(Ax3fTzTQb;%y7T$Mu37KPa;&jflPp>Z9Y=V4BCIYsjkVqI!)%#|sM9FM{?I~m{ zlsnC^fR78D+O zs&a?F@3=T7?1U7woy0G&$v??)E*f zSikCEyJH6pQq}}#^i}BWwHGRMYx_~jeS~n!_J|$xY&0jw!pc^|w)ym&t-mwrP3ybE zhPubW<5nRxmvfd{AMhHL@ukCAqkXVb>9kh09hRA$4pQh8UcB{aJRH^!^s)MAYPxIt ztv*icMBVno4wS_Xz>XAh5O$)F1gK0QhhS$4NrYV}w7jawF!TG09f3hv&fdkyj&f1&-4$Hn?4ckdNY=ufoFvI;0g!A=lu38)#i5g!h6 z9sj;54_56Cm~id#68&S7UZmdGVAeSw>UMf^tW}qBCI>&%Zy3@)mtO#vKRv<9Js57Z zJ)=*D$8n39LKwBk<$_>pFXQw$l>FiOt$2ua)g1i=RG(`}ewQcYIi2kUk(Sam~dE z4v*mV2jR}vYs`(0Fw1wVc~@O|3_Cp8pjf2qXO(%_D|Xa{PD7u-9Hx5^7~RG&&Py%u zqP>DgF_eE7KH#a^BcqH9wR_F%e1o3C#BeZ=8$HJ=P;FAJiiQ8d5_Dbp!(+$MI~H5a zdlxAg_{@9;D}9@~(Hj zMYbw=2PaOP_u6lkp?<`w-1}#zv-0oZMx!+++Sdjc1`f+U>}NX1{sV055pYpyiK20| zZBk5*L+|X5&@)0WJrw_0?asPIOoN z3a8iFw3_~|ogk98GkVV6o*v)eEaTL5&#r|Va-}|HHO7xpYGAdMk4*OUqgFBT4n>-8 zyeq%MZWF`ytxz0g9m~3R&$r)X`U93lB>U?d3iZ>sC90qNS7486{&M|wqo6K1EA^7Etx;f{?CPesx>8^s z_M=F-+9z&B8zy+ur5kN^PFiO_T*IHD<$JF!b5D6m@z)lUghw8#YYeO#cT>Kk)^+dce5UYPaJU=P%;@aVn`i6|G~Bk-$-8XF z>Z^3~&3QCvBq5_4kB>Bh`18{OrQ$STA^a`Ej&Oyn7J$DZ99~E0f;3wd*NW zH={ruFI#@c%yZosquT@RySZCIUSIQqlFbe)z1wtA?{YPxN8R*ABE&7{1gfDb}Z@{*AlO`ZAxur!VJXhU!OD z9=KxK#(r@>W~tKUBI|D^rm1pE)KV@?IIhmTUNFMzd_UAz28esK{>;gZHPO<@0LCxV zvfV`~nSqR6$5nMUgV9lI#77Nc=HzeLv&9Y}>%_=l#-jhguKNlH*d%Ah$oqV~b8rZw zZ=`B(KBKWe9m*UVC11X9W+S4($Q9@>Tx!oZ3QHOE^Zt+ep_1~|m9!2s=giax|2+ArN{3PEUcN4=vEJ-+u)m zZkB@uOa*n6kZ}#Yr(z=|qt8@PG6sxbvbTGDJt{@CIA=p9LvhEOOYZheCA6=dO5cY{3ko5KCq-g;+5| zD8!l>N+C9k28Gx%niOKk45JWxMvFomnBf#Mp3$a|35*VfOk_q-$RtLWLL8Zq6f&6^ zMIlp|(G=pu==#0)0nR{qlNufwfUx8}vap3>{6I}?Aata?F`m&q2@^-pK7 zYJJ^<+4t0W#89Ja#s^QtKHAgQrQ1x#H$y%6!tM#e5ciytmbXFGEXFR7Q5{nA(0FIk zrsR$LyX1K?vobV(T)ObYITD*yud8RPgVv@IbJY8q_OmaZ!-$3!Y5Q_vGQ z(c-iFGXas#@zOF2nG&;$3DU?S2J}CWE{!Z^s;GRHFrO%7DN{`$%b3p;vYh!sAuAY- z!m0<-=UT~>bY#v*BdZuiLpzZ)vYHVjv)81N0LDCU-7`7OJN(Rh=$Vu0{wvoo78DZ5 zSW-w3V?`kx6Biil`Lg#NerOTC^40Ac%(zBet(+lM7i*akMfoCWB!uzx-Sa{kS;vTS z72ZlC>zR^}}EnKB!*c>A$yoG3faqSq>xx9 zoI>K5O%$?^38avCCW1otGm#W>fZ0qT2N}jb^80q}Mqf=}SPD7B@F*mak)e>oOyq*i zGjHUh{vAE9j-NwIV(eSImC+fC5Cbui%s5cU5oSDv9Azd@ND4ENLQ)xi>g=(ZE79G_ z3*wy9nDd2NM$*VJ#%@T~$IbYjW`j&R6W8&Am9)%pCN65Y<`yZL6HKrBIuoU3PBOjT zcv(oxoMQ497Q0HzoMz&zF1kv~WH6EL`{qc?oMFu(-V^5x&}l+C2I+kXA+XJyN?W98*LxYX;5 z7;YeRJ`=4f%>234(!bm5QRkUOKE*R@OuGtG*2l^&W#n>mm>Fg5TgY!#vPikLK}lih z5~~Z$m+ME8RAYUu55}pNxnvF7e37|4b^pNwWK=N4Zs>!GoNy~5NUchEPP*T*pWVz}wj+*aqVG6SCT#Ct%X2He)NXV%Kk22~GdeSH%yp(Z^z%UN0iCSYKI|@2Gv6WU1|t;u zmunT>F+38y#Cz{}qsh5U8~xekMvJYDQeIcQ>6zH(*iGi{#EG}Ew2du;-%NZpY}p>G zTTD*N+;Jv{@R-!TKS-0}QS$f*B7Pb(fv)1&abKk3Q+l%o9u*?X{`PHUDo;BMiY^;fY z%Qm%>8D ze(6SG3kPVYojs-Uih1ANe0sp(qsE&{zIPnjuZ7oZrhMf@>y&fH4P##mo>?A__J6}< zk+3fH#pI#oLOA9@kNwjJ7FN-Yuw~HQ3u{Jmp6e6HSJF8ALz5b zVE4M=6W%lIyOzd9F4b1twrLl(N2#p%zzD5=#>U*sF+5ZsIp)dhllwk0gS$A5i-`>} zP4><6A9YHUQo%T8c3u?~`qm;kz0W4o!B<~YG8a2)FI!mqMi};K%;(TGsr{;$vo--w zia9jji=H>e{nsZZEn2-zjRktYX(NhS=>4W@W^>P+eJ{2nnOL#RXJ&x6=c;LYdkBu} zm$vC<=-%oJlV-6qVp3saT>Z)n^((UMs~lpzbJ30Z>(N^_eq&k>*ig3j>_wXm!NK-J zzSpPJFn84#+c_$Q+XVGqJaGHq2VK51Gh3~?Wv65P~CyA=Wl-b$%NKt?CCsdqv6s0n|AmPR!yyAG@N}u z@$B>Xfjdws#_4#~Gc&I585L=h$3JY0k>MB7ceHxiL{8F2GF!zmkS%|Isl|S&qZrnA zV5H?`**pBB(@@!cW;|or`4qxqSt=hH*7-2+#H;CNFiO=$rRF+J#uN|Qv4R#quJe)mAbKq20s-< z<)s-!&&;o?Z;ca1t#m~WX4*32~$vKJGJP(>g$?x z{k={bk016I^y|+Sjg_~%weFrlkm1=fx%7b<16YRAXCOPj%VDtOHEIPD@f?U|t3fP} zk{Qg}y?L-(LoS~m=pmLF!X9-_+TY0pdAOa}!-ujZ0ToRU4R)Me`~hhhO;(x8c^KQ7 zLbO={HiV8SN3QZls5Kh>xM*kW>HJUviEu(`9#d-!|noZ-&)g z!JIJ7q&-dKPEo=Xm;J$TUMW9qXkK- z(-jlKo}3@Uauv%qM#s6BXL!Y@I?0qi8_VWp+mx;LMm7{b>FqU+m8Z(3$I1^gpY`mV zhcHy7nj4Vg=^$Wdp+{${(sNC@+phJcr%F78>?*&KjKJrb)+d%{L_{k&@buZ9T~;c5 z_8n=tN8Q5q;e!pH2JFcx1DCB;Ni>eJTR*0oZC<4zd;ZckcjcefCQb0ZgarItW#;n{znXL&i11+OIx7`ZzE}S-DH|$$EZT2x2qmA>vu7Y1` zvrXBDyc@tiCy#$%Eh>BacEx6FXX;H8bG9pmSg>6v#FD+ju3gyirMlouVR6eoyak7? zSl3=-jGj%;=O4v=igo!SYu2{ARhtqi#D?{Jyg6KPaik#f;rHYl%%N_!tf;Du-+0AO zrW^WH2CTgr6k*3MzoygL)Y8y&U()`utshKzYR?MN0-q@MyC@7Y8s#)*(!EX&?4+QR z(Y$?r!ZiQW&hM*N_8rd_?R2+(I!|O4wOOa#>SLp)Oki{STixv1)yMc~H>m&eZ12|- z*-sV|DoXCRvfggAwQ`YVnFiQ>+|>t&Zu3Sb<>@~`ca4zt8=Th0HE27%qQrm&TF1Kvvy(c=U8Q;H+ssD zozYd~RJJ57p?Jg8mj-(dq^lM=4j4X-^$uTL-l?dyU|a2sL;H1S4s>BFCRPtQsr6G3 z|HN1=VW0OcSN0(cReQn8>jw>T+3#+lJ$X8NYv1`x-r66{vWC~LJJD%Sf*adL(fju1 zhwE*Ex=%Yfj&U%X!H(_rxccqPN;tg~3_@O$oReeUp&N06)jyPj<9k*}`pR^{<`x}uVzcV=g^SzS+D zxVkP`5Iojf%RFmIyE*J&zcyh#zPniODEm>LSLD*oi=C-=vi!AH51ZY=j~~rHcx2jK zwuR4(X{Il24NkFUVJoh=T6wck;~j(FjHwhHY^AWwO381$54&@-eApAWnKoykg?|sO zPm6hM=Kh80%!V1JS?gCsrCdoV^<|&m4rB*B)-#Q>k7>IrYE_&0?3hZ~Pv7QrFbUgT zSnu$4(~<@3`C$(C>az3r+wt`my6X31=O1;JyDU|w{;Y9^d1*+sv;OI>c2l~`%SA0@ zZwIxXKJdjYqiwN?_u^%AZ!BVUuj#7IsT9}*#BBRiygw;(G5fC1jowN_?fD_Mp@Rs~Ag(shm z=z7BT?DzoIyj6$!?)z?Ap0T{c$V5!lTf;8r0y*!nRFlkaJ0sd`dKw_Ist}juDuBx(JMTNW92p9w!UP$&Tz{qPnj*fgLH%0n?kKEV&*^6AE7*{+j{njr$Z9_h`t9|jUU7xp_%LuI>t${1y>8(Z0hi3! zsoy)DS6^>9!Ng`5`Vzoy^zDEA4J!O~Gx}Y2Q-nF8&uCeq&!d^4?+iMF<%k-hb-ne` z=VWzI%5X3kZ8d-~&_tXj`ZFY)E<$w?J{bLLAXyD0I})V~NB_f+%t){jOhw;G8-@P+ zpxh^*uk#7f*D380wI!S>!ky7q^6*CiebFbphMl74@_Iji6jV!H^@zY)rHFv>$8 z{R2uEVl9N|JhX~IcXg!S#BEMTTwg-;Z;Z4OTS^~ks*fxr(NT-& zXe6cMNTky+B(0B*(;~Js{I_+a-)psMrUhst?F`U4#kyke(IR!%sH51oaJ`R2sbV`~ z579vOGepvwXsi8)I=Ucvchm;l0D5;AeZ|iol~vLf=yzqC*B0B)80mulaSiJrTj4*6 zMKPw2>UJcOkZ6l7iapr~QQR8-)S~}PTlx)Hi)L(Vi0p!E9(w?8!-L5lZiy0YhapZE z>5E&>@7ijkG#zy8pZTa4`b4D4@uD9IG*gqY}2L zSV!#H*jI1_#8C-H(Ld7>e|y*$Md;bcOYyQgvyf$_zbz`UF8xNMSu>hrAI0r#B+^1` zQ{126m@d&A`++_xlh{je+tNh;*ef*AaX1odp*;Rf^BL%StoS>z_!E#4E$L^To6{0U zPaMN>TftEiM}6EkHb&G&EhTO1zgNrG)DsWQX{kf(gj@VD;tPY(7PqiQTZ+A47_zXq z$HrR?WIr6GaN8eF_Wpfa($5_%ZEbnyYd8 zt}Fi3JU#ls^^Kz`9?9THBktX?jij~2(G+`MQ!W4XXexds5u)aX*T$EX1`hZui4bY48Z^cQ3{9K>rVG-y8Kv zxQ7ydhg(wj^!yS2>~SwZ&jvL&y29ERptECr4N(c&oDJNX2J1PtHFcuNFI*`@hGOTC%~K#A>xQ8(H47!cr=KwX>|V3*1wNg==r1O z#w?oX40sf;jn0Gh5RU+{-qIG;M^?tYe^Y-DkE?J$_NP7npN?7RIjrV<0r!&Ps{$Mm zBz*(Mnre=(pmBd8ZCyMT#4*|kmFv&q81`ge;>}CR*u@WhSzhAL^n8|eGrdDoJB!;L z9&`PlvGWY1DgMYmj=1>a`Qod3iN5r_S##DE&obct7q>I4?+D_#IF2>O2^{mpo-J+N zfBoteTlXK0U+EdM=DgStX@_m8h3Zp0(!!$#W2A9YZSj>j?Zy9k-}|RtOwYD8=NCd` zUEEU$k+#~z&Un-dbawLVj~13HDVd;xw|N=g zdrIRfkHomfSqd)}Q}`V*ZcFD=AjVTEeOwD0 zJ~e*ZhY3 zDO{zYT#A>P%BwWkEsrX%iln@hJ|zwIOg-N;AJ@C$^X7?~;wq0Da9X}0{|G976-hpn zo+S-<1%<~p;EFj-&+FP?9}OCBuxABb-XgJ{sg(Y)5`UobiEYT=m%>#V{9ofXrB4H% zdc7$gEAeMaKDMDA6)Abw20bfoQ28|AidQMT!TyT5P4SWjd0PrsxhJ-R29;0A{RaEc zc!T~C*P7-Z+aO;-$;V3ar{q-{nS zf8Pg9^6`D#G#{1M4f#B6in}(HtKxoBT&3Z>8kBr& zX+u7g{wlA;xGg2G(onytlzfS#-lcF!fBX0LZwvfwfxj*Aw*~$c3z(S*t;oV*_@LX9 z&=u8nM9^FjFCYK{5d(I~L!K1rig!gUIE%Ic6d8>%jt6>zGIR$YFB^;RrMaMc`18=8 zKS-4U=*u5K2~=<`&}#G$y_6Zy5^(Z(WqPg^diu12YmE-B;1mdLLugw}d5Sm{LIz!9 z;UBvikyO0H!?*j{xAJ_nQXN!9yr~l40p0chso5yc!)unwmbZAO)B!E<$`j&aFptEv z@iFbuFOfdC$8i#9?u zBjbi<8L>tDr53`&_ZepaEZI~-dR@Cem%%4wPau+tE{g##3GbH5cL802%wEL9VThP^ zLq*}?I(q-xLY=l`7G?=ruTHw0<%|QWJ-j+6u2DRbPp@l+F+-Gw7Ykm9pU5C3bVI1L z7tlwYpI`0@438NdTUN8U|Bh#8rS0j4G^N)hAodjS8dixD-~Es*F{*&%>HHf@gC`2S z8}64#jzAD#Pa!*rZFK~3Y?*v_&;!72h&Szt%p_6)Trc95y%GJysS>J&=oeleOhtVG z*AFojoI0WX5&gssApSfMIY>P>h|s}^e(S*vA<07t)gVHeDB%avM2{OrGSEV_nj4PO zc-r_-kq+QSkR)9~M5g9$ie`7cS5fY*u@fq|Bt#+Si1Qf3O(xJ3a*PwskLQee0s89uG{jVLE_j#cim9|GI@;O_@k|V^J85s( ziuUQXC?u^9uWKopx5H~}iszu00KA^$@2fNlr6lki8uqf;$oqZ%WqFi6U^gKm_Ak6r zFW65Zv<;>0W{(u1zkM&U8xEN6sO)~oB6E=)mXc*34Sz$L%AkV) zE9iwvjh9#C72w@>@^~?0a2fINJR+ux052eb!JSBBhf$8EJsWSiH+C5sNZ&^FC1L!z z(qdGu#_;QmvZX&aj|-xR&eRfZRnY`y(?@3T!)-QFkISU2c{5`g5q@8y@^ z?gQVoVzCaWSmO{6Mr{CftfWxNpT@3;zj z%1`_x3|^&DJV!5{vByr_sLeX+GHwh3&alMhOxKLjYz2?rFhPLhz(1|dzgY8qbtDjgmEOOsb^f|_Wu z45iVZ`jBXXBLa41yuPm=(n)-i8mBhZ20Mnd%u+H?`zslgO`}#y9I8|JTT_tK>FYMZ zO|-@jn9z^LV7>4#vawEa1DsCwrFFsS();)@eD>UsbL z8-PYAa+zP_YKdZRmBM}%qEu;P6CPzc3r8&6=FzGVPB>z1LYZ5PlEg_Yyvq@NtCSNBDTc?Lu1 z{i^3TXypNkFJK<&k%D>=76+jm0HY9ZdI9Mnx(Gy<0C$;`{tBU23B5+>bwY0tnoH?e{_W)DTLm+wtxW}01o)B70=u<*V z5QW?`!apbU1*W{0m0r!J|wS@j8w2shvLIFf#93+&%l*eK!;z5xNx^O0V3qs`( zg&wunMbk??#%+YzcnXnR6C5ZaN@PJ}8G+L_QUgmy&~a@{b` z>rRj!kOfs-PedyODv;|%z}|$aA__S*!uKJxFQNSiRVTDRp#umVNa!F!2NODk(4mBC z5UNS&FhaEm9gZmEX=7fb14Sbsr;8D8BuO1bQb&{2F_0Sz@wCG@h=#+Q9;Q42qTkw! zgpkumX`eU)a+o2JFv2{~81n)X$eChMTb>!-OySIlpar3pgjx}5O{fi_wuIUdYEP&G zq2mdiKO!b1qL7p;dc@|n((^_znjn)g6tvuUZQ_2K5Y*!jwI|uJLs}qpvQ~H`=b4jJ3w?iNN56~ zhlomvmH%NK77(B?B&DBigv-rPl-N>LHy z?loreK##kR_q53Gf*$ukdXM)I?bV4MLGE$mA=mV{CwOna?^yYJ@p*b&abwy8J>FAt zND1oF8sSns?m614=U!mSdr3rILGCpH-w^s1(T0+h>hVg6NEzhHN#Z-{MD9JtcptC` z_YuX23a)|}qLLV*itwLEYBfqN1&h(e+5$4|Cy686XCnHAh<+vfH)NepTn(ZX+;@Wf zKzxY`SBrN^diI)>{ZVS19Jt3pnNFs=2uUW5Tc zt~X(j=Bh+7HFCN>Nz7s>o{Y=n-JcV_>>vqYj5V_-#b0doTOVIil(bA@uodzMKEhZ zZ3wj`)DF?w{zI;gcD(mdkF&>n<3nXlH-fJxzblz3tsvb8D@2xlN z9cikTqsO_Ry?V}-(CO${$hqP4UpAUS@^dHDgV32oY8K%=k*s)DeKyWv-5jPhn!aOD zlOBS~fv^1_s&*7Z75|z=zG6GUzyV(q;#(vY76uO1coc*U!t=!~6<_JkWuQB5sovOe zd>C#X(cBl&Zwzlf-n17jU_^cl=TA}=V#-^DsbDd~EkR5jx0EC;BT36K6|G>nl_Y5u zro7ddiUJsJ4Nm0(G35mjp2Gzf1T&(w3>QL>btH8?rh*L&7fQe|0&c_spwx+Q6agCE>l8Z*h4LM5^lM8N@Ww% z(gHVGW87pTu;n8e-ey#`I&KU02GLfA+eV7L9Z^&fQFzl{w1W}tWVmROvI|q*ZcGI+ z47Ud{b=+Q(6ibrgFcs}%xOkGZA5-1|OhpG7E&-=1Trru@BZMBs zl$V03D3#&T5Cgblgr*aEoX``5o+R`Xp{EJWAoL8OXEEiSBYY;Jkjp|Qs}N-~oCxoV z&NEyN(dq)x>LStV62o04;1vR1#Z+*O;jSa5j=O;=FBenMO@_Ng^101$d033g$COuq zsi=_Q?hx=U0gEsd++(==h^gZqV9I-lspt_SddzT7umD$#Deoz!q7sICM!@F;d_lmM z4EG8#b=+%Ad2cWkyk)pjoXVA9$}7hdyu+;+-*v&0f)GR^A1VnTYy>jHw+0S@P|AlY zfB8_k(tD;k-+HI?f%w)_(xA~a4rbR`UM^eWJaQwhiawvZ6#PMV6U&N2bddG33q2BuoNI0pj$@>zQ(5{b2 zDylTrJB}`m^^T)V?VS|Q*`(eZqD^DHPE2);o?ujrIO_H2TkoMx|{knvF)U z+Ex-z)x&WPcY9TgycXiCDk~}~D=Q$r&nNeZkwdKjb%;O?Pk>k9-ZG#>PSRWA4ie31 z^YG;gi^Eyr*jxV}dtU)i#S=Wd#{)&AF$e=OP%KJpr8^W1OhCW{11zvk#iA?>5G7PV zR765SP_gr;*sX*jVu6LtH}f9HyY~=z&-i`+@B9Bwk9RjacQ?B`yE`*Gy8|<#sVK)w zI>8^#QEggp>St0(VqvLC0|y~&T=5MHW$gpKzl_u@P88YZ#h@O2`& zA*g%;$pt9FsVs1?d#&;r?qLqP`u>&D7wG)?o*I^bCcN#WBEWEl6O6U2rMP%!4|MYu z<_g~713>X0_~E<)3dEY*ENJqzrW+`1@=f3xUh0kvj@hVXzo3F}Zj%c7Z*KE<<~F%C zw+y8i<++zAsf8-=FBNMpgOsW-gOsZ;Bvq;}LYu(% z-ZmhiO{;&KVS;fB%ZB7^b0k5PL#uI!Iww>E5Xu3u1^m8&-eX zw}I!UDRcV5r53;*Q*hC?`eX3AcAU`m90}+F0NkMl9I6ed`0|eM3%L*N#81)zQ2q>1 zC+NvCv44z17O8f!kP1sUKgLJhGz;d?zeXN@>=gzm|qdvQo_ zPF5cdB}oVM<$%~$V@T--cb^os^CnBENK{W%SZG`f&fyv+x7 zvAX>iH5tgM=?q>g8FSbP?2f?|o)lhn&vXpZkmkmni1L6AVJi1pR2V!8T}9nSkS*BU zu}gsQY&BeqG@gA;TC{6-=OCAA-N-~{fkCHFHr2Y3mQmc*EuVWE*XTz53~$)!9e-M_ z8yQCpd6quuVYP0QWjJoO`sfGMx=~Wc&3FIVn*0BeZiM3?Pucy6ZuBF4r?`m;a66F< z!=3`WY0!5T!!n9Rn52@c@5+p4)$y290yBt7hDpahaymCI89(eY${B7 z`w%ad@ZthHF?aw3C(hAV-h+kZ25|I+#Ql75ZGam~1nLIs?7P8=`^MOg&Mu zJ^MLq`f%{jskXK`FhLIE?LbJABB>Rw_wSEVw@w^#uX5aXQaDJpxiQxI;ffgh zm1|3yS#5pZg8y7Y()D)ofpP-{)7|a+H|AVE)`6Q=0JdK6&)n=a;Z;;r|ssaH6iUsC9EkczH6Lu zJfnDJfeiQ|Ftyc`e7@n5+4uZ2o7G*n$F^2^c!8hRj9k*qwLSYO+bPknYHXvxP73_A z=A3h0X7rPqCEsE~4 z>{5>T`mAA{`%W9>j1$MuQLB@la&AjUz3uOqBK`2&s-~Jnk^t2pcl@_}C~}UmO5C_( zPJUOIKLuzDk~YrZqjJab9A~%~i z82{x!vhk`9^IKNseOJL+YfW@dr8d<3aMxz}fMj!JeSZyZuAq5H5KSVyuQNJ4q7{NC zxLAQKgd@#lfN)SmvF1=?;o91UBT47M{?0O#ETQcJLpEx3uFeLh*u6 zH~<72xDTX3yJV!C0%dy;S8F8KBg|vl+Y* zwiyVTN3iGn6`KKm0LjF)791=J2M*8rcC3Fl0lLpgP})D%W{Xt^aiDm;;r$%E25oi(TnlKkTyJc~5jzL#x33J< zj$Lt&RR<$m)KugvYiGFU>$Oi*UEp4;)*>aQ;tQ3BfV|Atd(r4Gyx9>W-eS9D@`Tq` z)%inB-v)fA*jp%S)}%sW4Rr-JLj}Gz9@2z2DB^vs9q2!xTycje+$IP&34-DW=YAZt z0)P%&?1KD^OTB)c29II8;cDSnUSetCg*L4vB@7jaFdgyH4=%<$(2L( zgKKM7lyyb`zkk%19LfEG?i||+8q+A^3hff+V1MWzEg6n4!`3p2GaecVo}f;UmlQPt zUpG~6HPy08O+qr7IS3U1i*H`w=~6y=AEi~Y((4mBQm zb|NQ;J|-+=6nv`e{|aI?M0)WePT;VwNF+gc!eJjZOf;qAaF3R>nVnMQt1HHZTsIw}Kz1sVsQw05wD9DLz__Ll-+`iq;2U`>+c6EF zLIXcuYXUvv;jbXBKVZQ31@br=AVqcL5rrp4w82hUP^iIm_<|7O?*RhjmP6Xs%Ap_) zg8;AaCp372aEfb=ksgccYb*)oy6*2vny|}yB0S^nq%Pk`>WWe_HzJqeNv1vl;8?rb5uU~6 z1Fn#s$ZaikO|U(NC@)ZwRro@@29@M3zKcDw2s41sHSsXK5h2aDrBW#R8B3-MTU$YY=^Y=rAyR2EA9pt7Jx zQnxhhJ8tgzxppZpIwfW#+Rx=}?SicD$KhEI{9w$L^oN%45uNY&dV(LY=+E^8WaGb} zClsj69nl@TMaRUPFy_mMHj zQofc^)y{poyO*R?e&qb8H~f;`@KSX)SE}KA9ni>s%el`)suM@80T}_>! zAMe+iI{8nJ_+P6>yi%R>Lp|cP>Rc|zp{UKl-Xee_GY+n~dIVPp38>K{s35K$0m~Ml zhpP&j2Y)|Jq=M$-o#X<%%U~_<2Z^rQ9S&Z{)-kZdL_uvGeiHj6&@q<7HBZOjkoH7a zui(kalE*ltLoIonpQc?)POeTf;lK=!uxwkMR)-9V4e=LbP;9a_GAI`LFUg?T@z&vA zCul3j%KH@=6hFYopjTj*0G13|ptkUbGAQVD+&RBWw&VuUJV5B+ z!FUZa=qjvW@np~^+hNWuDYNWwuYRd(#8Oacd{7*9c%aS41{Qn%uP@kl#8ECy5@m$I#EnxHH5u>l1 zsg?|ZA%9;oM7I44l3|(J3ch6cTy3Q|k|8#PA4-M|>}P2g#|3*k$K z*jxMyk|A`MC_ZtG+Sn(7WN0ZM8S_|H#8r5qZ)JC zbIULglDNj$F8CDQgOH>N*RZ9NEO$3A*vX58upi<|r65;1n>#sRG?bx$4OEm!%!9B( zmJkvL!&71KHw^TKA)GLDAqKC*@NgKo5X0v1g8yKMCk*$}3!cE>h8X+>L%=K`<&Ub+ zGWg%|UkUtI0{@l3e@94?lAy0o1j)? z;S<}|{RhuC&z8!O&E9%^h%_l~U;(a~qhXdGckjiGpZvgWa5T(vdvl}t`M^y6beNUq z?Q}mH=BRP$;WWS-4ZrAAI1|oUT&Op|Tw#{l2Ii)5Lsn)>xX}Q^-M4WsdHxREqhb3w zjKarrvmFD^j)FUW6!afK+(2M)BW=Np9%E2rv~&+Rake(7HIdglu<(RzKl`Q9;g1i5 zkJ^QMTGd9B)Fh|cSIQmR^}%x2I<1Wlo8D>;K4EBK<5jd^AOLhCUi5LYkGb&!vy3q- zK8-Y*KdO3?l}1-G3vjx?J$W&^Q)`OpM=7{L^Gw_pvW{o)>k>H2k5Vh)po>|9)G9a% z%q7vDW;V>x0{4AEGGTwwx(;)jp;m~tgNtCX-FC8zX};2aYw#XfcIg5|^zznr4xDgB zDfKdLWV&vJ1ThoB;gD9TJtnm|ldqIIj>Mj8VEjUoY{*{G*}Lm5v$)11Ms>Vy2EwhR zx98Z*4}&bSRG&5~x~Q4nfQ)as>5i?DoztdiNp=cX9%(fsO>=V<^R;4x+AXW(bgzf=TEMTKE=C)4ua2^{2BPrcJswy&W>KlhO?s=vf=FLg#vI^^g=e=ofW-M0M10KgXnf_I6HbF8_tei$cD3{7qa2( z=!F7sR`fzPJeC!`kPT-?FJ!~n(F@sdcJx94I4gRg0Gt)QkPT-?FJ!~n(F@sdcJx9v z+?^G@kPT-?FJ!~n(F@sdcJx9voE^PT0M3eD$cAgOq8GB^?C6C8a8~p}Hk=*3kPUZd zMK5H-+0hFH;H>C{Y`8lsdLbJg%Zgqo0B1!nWWx(s(F@sdcJx9voE^PT0M3eD$cD3{ z7Ye{x(F@sdcJx9v+?^G@kPT-?FJ!~rSC{ z0&rIJLIF4{dLbLmj$X)yv!fTX;q2&zYmgc zg={!GdLbLmj$X)yv!fTX;q2&zY&bi5p#Yo}y^sxOM=xaH?D$*H8$NHCDl8V2n-4K{ zz!ARyM)x-b6tg;LI0zU%WD1DNxO5anYd4TA^~md*6+)VX!O>)4J?2=0NP-JgH9=5E z@f}0lpxZ9)1C8Q2?`{5YhmOGL%&G~_xwwzBCRYGQ`4z)fX#y^a(!OxTTQ%eXSIkPL zZlrlt6--SBfIx-MqWJyuTVuM4a5u07(OK^>3Y$1^uhEGY54eYY6!mpc znzxwh zu`~J??h3f7v~3s^!IF!Q(dC<(*kjP>I>0ZcTjL*a#2LipQAWObP#6L*q~~~b8Jn>VYwS9Dwu;q0CrO{Ai2l$c zN}rEiRoXBW6v6>UPI6?1SIj#lP#S|gQAJ!EP1&0pa3i#Hvn62O`hLA}`1Y9tCZVL&n+sQtEai|?uZp`zZ;#P3k7?DzdH#JJ zSPKl;)-YpEgB#4@sgE3n$qUf#*pceo!1mw)-JCz{ z8cp^GpPkiZcYmjBsV6>7T*)om1G^y^lU+3T;@6|L$%Aib@5%`r3SSMCCbQ3t-*aP& zmvN9~r(@i>!DUyB26mvfIWj$ z$kfb3^8%j@b3Ab2gwOC>k&B_gf|`&^mA;)HH@RS$=v-*OE?nUX7GqN~?wn%#CnML| zL@dgUKWeMB5};6w&4~AkcN^`EhTH8v5ZQa}lzaJ5ys{*;Icas=cjQgZPWvqz-g{4Z z$PE%BOM+BM%MrVGbhkWXOEYgB@XP&4>#GwqNXJtZ7kf97vW=hU;`&{ojSnQqz!NQqe)pYkLlUAK zcRrl(Y??-^5?I935E5FFLAI&+?oXzhtqh(L@~-)i2JmH|s1O}j6s-WeF`MT_jY^VFo(l&|*tQswt~&eJ^t9)AFDORjG_#fc0W zWE-(X=e>O*xdJT#;O)rA4vF2|@=P5=E!JzNIluJbu}OQ z1S#r3uEvH~e*4hPa@&#iQ;ecIEs`d0J-C)D$g?&%te|(l@$v~KYwsLcI=7%8LmKul z8dcMh#(*fo4lgkd1c~wRj~6&XmaObZwk`H-JNMQB`;ZZ%WzR0?{0{bY=tL5vJx@3p zY_kh(q(6Ml#HoXMrJzF$=Qh?#?JDh1c{3Z`a0_8wOXQFo3P~%pZvq|!|(=&FA zQr!#96&Sw@xz^4JF^Ob_ZxLYB>&G~iI4{qk*}E6gSgeGP;|ut(KbTMMQ%IcB;2 zOGD3j5&wJuDBYd(U4621#k3w4ncY(KpGD;9h3b;^d&}>wIsL#Yw6)%7gElpT%(3R{mHN?dz)+u5d8DU)+w2EQ(WDSm8_`ef|Tdqq~w zi_Eer`X=?i5RwFEzPtIDK;i3QrNp3=K(y!ZA zoqI~}Es_ox?)`G(@jzaJWFN9Jcg8{q{R@tp?uLBp9Bhoij^I^i`;umDipI^lzr;Fo zafavpX#) z05WIcfO3aj2b_}1o3swtG1-Wh0E?@-pDvKS)p3aB+BGECP;a42^%KTq#g6mK1~|Hy zYC|`h zlRzOTw5BWz(k?PPW8f!{n|-U_5R^w-l6gY7c~)eB5Qr=4b-i};?zu;5c43*{u7B=# zxVI#2P38+BuCyV+zP_Jq+J1Igp0QuDTbj8S?5tr+PA&*Z*}n9s)y{+lz0$P~jL)+p znQhw5X|*87DrM&k?-Lnq?(*_U+mnGB)2=zr|85%B>g)Ut^V;~Ke~e?_IF=f4koFuPQAN$ z^NX_e1{e4A$$jrELWM*4TaqB@Rc8iiW!>T{B-LwD3#^>UWiP8~(o%y>ci+%CJobpM zktD|Q1i`&X#f79El>4%KY{VzWed?{IY4~R~V3&f;5R!U$@vG18o2FUpj#ZzzW!I~N z>{6Hv@A2~<)XVZgfpOI2>B}s8wUn$b1+Kix4@krwF@W(wg=9jEh?WA6u*<1HeJDxQ zAeVg9XDu;15FgWQif^-fxZF>e8dh!!)rXPPZ+*tRbMH*shA;B74(r|L5j!`3bH_SX zjTEU5Cug%yd#w)9b=)>hv7~QK_CgM*2g2JyvFjB06;WW{JD4rN*%GYa^13&{!#Eur zA+e|TgToAMRWwZSLY| z!|Z?np?l$_)~?Wrg23LIRH7+@|3-QQu{HDxRi0XDccjhcMj0L37|TnDr4e{l03DdIch`QhAApR7~61Xwk`_^vNZ z-AOsX7jYXb3a5#Lo@&U2kFNC`hcv)_Y~I`@+}?rTps<3VsBMN0;TAP2WY3zHk~ip@ zrUL352V2}2l6qCWQ^@h;MozKX84G=s9`70AY%&Oq4X?3a%ixdo*xK!urrn5!P{(oB zou~_eFu*7YGUoo#z$j4IPg9+asKp}kW51?M8PsADxmD@cm6M{X~Qw`693in15#H_rQ zBQ7P%njL*zw($9lh_e8N8mXSWV!E1Q)$t@X?~T0w5XHCF!R;&PlgkQVQ>!@A+rnz<2Ew3)|uP1Q(8*UtGteYR! z#Y>gRBvn=?xGW~;q*L&+WzO9`SM96L$1CWZIXGraA*qJC=1cYu&R1HN0^{2=eNH20 zsuJ@-P6DR&6wr)lA96}jac#GLg~o|fk3Cw{@KHdXFIl)#XSUoeuvmHUELQYXV(7bm z&BPLrM<(;+5qcWwAq<*MjD$dB2I(mT%JU;#S85#5TcmA!XvD*@>vv|(ru~U)sK>6S z>lCcBuG}*|(_g`Wo=LjROHUdRS704B%IuNOwQlq1S>!35XA#_-nC*Cb`P8n4nTeng zB#+b_v_v7ne$4{uAu|VU&d!@d770^7mz<+OVivGnS;$x4OJd5g(c--?EE zOZuDaEq5=C*;njEFCm_B-c{NwKAOerI2}}sI~7GQ1#4E|=3Xb8njG!h-^j(?^cWpP zJf5F*y_>$-X+vVh*h?8NJCbE2QccHVYjG>b9Rs#swn!=(lee7ETZ%5eyOd>n_(CFS zH!XMqy@C{{^$skKm}$JcV~Y$uDZ7{SN@6j5_=B)6a#p+Bt$elP^eSC?6$zicetwVR z`)#(TszmfZX*HSzlYucMPu4fzU~*`eYLltPigI)axk98=yo`YD8iVzzd44B4l$6~M zmkskiXB=&>IP>1wqc7<&a$6WHoZJxxttQG}7l&;A^2Ro8Y(W0FwkAF4H6%PdX4T>? zl2-A%=bW7S;H(?Hmh9DDuq`&HpF@hL-b3dsWj%Tw$rpatdU8t`6hUqXgEo+x!k~>L z!DD*MuoV-`mh|t?Gqv!pJiUor-YDIE-zYt^MBQeRvVD>Q=*{H0@Pm=$zAz|?JP-zL zArFN?(Zu}O(5Ig^RhXtVSv}%n;|=ljRubG~v)aD+bo1>4ZY>n7{iZPIQn)wpkd3Y|h$8w5E89+NZ6n5(zVD7!~0y^l0;9VfAEVMpV`M=j>W z`b*!WQ;E`;!)eDJJaP&@?AJ5AWUUmvpR_O@qxqGlXt$xIQwE8;lQ>N28-0}=a@0_E zoOI86=Mjl1V}>88qOXy6Efb9Hsi&K7-kh)ZZtV;``Z{?jTxmC8n7c6gaYT~So}G6K zhRfeJq;HbR5s|NVdgm*xlY+(vp|9y%#7`J>o6Haf-67M2L3ha%VbDF|xBJt^Sxd{T zmrW|FjJNn?MBgXFQY+%5bHdEGUpx`$5)fifKOiM$4;Q^vzpj*VkmMh1(#4*BNS+FV z9+6UEPyu-+3@RjQy74LBC6bNPJ+_ss9D`yVs^|Fb?V)x%WuSeTpt6ga2t%>`;r`OVHMmg>$z!ymYeizJG)EtD>6j*!PjJ{FbLx9 z3WF-hx&_B)7`a_n+VrXV^>0XIX8V#Jk6E(ZTQXSq!FR-281$aF2!lS5c^gkn>zCf! zY)9XmeFFkVG^Z;`ns7t@NNiv1y&Vkd%chcQB0iCi=>uQ&D!HnZKA9+vY&HEM{h53a zu8uFHQW*4=6jVs6cbI)eDH=tLfeJ(EZ)Bt}UEj$lVNexu69y6Lqwwn~>a#FNg8C#3 z;!t0NL6X!fVUQG6@Ur`aZK5f zG@@D!SuOE6#NBSyzLKQUsRJTGMFrJmC;V_;fvHD^N)&$;tHl9ROR2{?vCgy z5Y(7@^8Rh&*$=r+vGI?WB*;IJl4hmKQe)?BjqhKmV3K*bf7#i7v&+E3A1X(+-nKvM zgr~Pd46Szel*#h~Y4U+>h=;GpQ!4|s%DhT8nC-i8`N^d@1`}Z>Lh9e}P!^mq7zEk$ zgxLh16~rHWlk1vg>;`_M-2ihE%!h<3P#4GAzH|?Bw$0o&v&Z-k*5HHumX`*ZQ>2_v zD6E-q-E z0fPtZzyQWYSHhUqGI6pWtrvo(HMC*yYNN)i_G5Dz)GZvN;4OSJ+I#-fU_t|v8SIkX zkSM&3{AXaiw&TH%#)b+m4{lO0nF|Thq-~D8-q7P$t#YP_~zQ~dDS}3toxAd+~??l$8baTe&<78 zO-hxq*pn2X?e^scccX4uvLa#XfRmT6n;h!6zC)v?mj2aGz}w`A{qn9?b0eoXuIPPr z;8U z!EyU6Yo!S>9`XF=RLG$F4wP2YNXtVmcZYu0%5}!H1iWW21+eedzqvJ|tCd zoeDL{IMvux;h0439u#Mzy>xva-7i{Kka#+~Rmz6a9VjNH3>xzok=R(2b9w@8a? z;{Bfg-R7iy$gFumFNZKg$8kUTq}F6?1ELY z?a8?rac)ETZ)-uGMD#H(9hqWF@0FT(Qf6ahbsA97k{pkGU%960hFQ|WZ)!KEx-q2& zUus2S?p*tNM#bDBEG9cSJ!!yJ{8DT3ZNb!%K@&%s?n&=8V)`57CET}hH^tW^OWG+d znS0RNHYT`7oX!>fr`2ijr8Y##V9pAXpk}?{yB4R3tTS(;eeQEww z-Qot%Ib8ehGwfo~0L*X9H?cM1jEP`lW;)zCKm;!smm6G7fb}aPHEthxE5C8SguL+j z@7k~9wf4mlq#c?0=~Gim>V<8b$1{n>EpzrF^R*|(=S$I4kBv5KRk!DQ&GhFoUk5UA zk3pWo;%|1F&K-R_L*;yOb=5*eX%joYCsV0iBaBxLa=jLmVZk&csEm%J+1l`^gX5~q zc8{w3($-nEfd5=4Vx$u5YGC@%IPpc4%YhSNF;E%x4=M0P9Wux#SFPb48QW#uXDVy< z8$1?A8K}C>q@eBjWd|?*W4$%6SEaGdtWAQ}d=*MKb3AK)6H55GYHNPQ17T}E_RK=H z{ZzJ$TiX<@wh{J0;�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 CEw-=# literal 0 HcmV?d00001 diff --git a/testsuite/XSIProject/Scenes/test_0266/ref/reference.log b/testsuite/XSIProject/Scenes/test_0266/ref/reference.log new file mode 100644 index 0000000..0a2dc6f --- /dev/null +++ b/testsuite/XSIProject/Scenes/test_0266/ref/reference.log @@ -0,0 +1,67 @@ +======================================================= + Autodesk Softimage 13.1.140.0 +======================================================= + +License information: using [Processing] +00:00:00 168MB | log started Wed Aug 1 23:26:06 2018 +00:00:00 168MB | Arnold 5.1.1.0 [e338d869] windows icc-17.0.2 oiio-1.7.17 osl-1.9.0 vdb-4.0.0 clm-1.0.3.513 rlm-12.2.2 2018/05/23 00:19:24 +00:00:00 168MB | running on techne, pid=12800 +00:00:00 168MB | 1 x Intel(R) Xeon(R) CPU E5-1650 v4 @ 3.60GHz (6 cores, 12 logical) with 32684MB +00:00:00 168MB | Nvidia driver version 398.36 +00:00:00 168MB | Windows 8 Professional (version 6.2, build 9200) +00:00:00 168MB | soft limit for open files raised from 512 to 2048 +00:00:00 168MB | +00:00:00 168MB | loading plugins from C:\Users\Steven Caron\Autodesk\Softimage_2015_SP1\Addons\SItoA\Application\Plugins\bin\nt-x86-64\..\plugins ... +00:00:00 168MB | loaded 1 plugins from 1 lib(s) in 0:00.00 +00:00:00 168MB | loading plugins from C:\Users\Steven Caron\Autodesk\Softimage_2015_SP1\Addons\SItoA\Application\Plugins\bin\nt-x86-64 ... +00:00:00 169MB WARNING | unable to load dynamic library C:\Users\Steven Caron\Autodesk\Softimage_2015_SP1\Addons\SItoA\Application\Plugins\bin\nt-x86-64\optix_denoiser.dll: The specified module could not be found. + +00:00:00 169MB | loaded 106 plugins from 2 lib(s) in 0:00.04 + + + + +00:00:00 175MB | +00:00:00 175MB | releasing resources +00:00:00 175MB | Arnold shutdown +# INFO : [sitoa] SItoA 5.1.0-alpha win loaded. +# INFO : [sitoa] Arnold 5.1.1.0 detected. +Application.InstallCustomPreferences("ArnoldRenderPreferences", "Arnold Render") +COMMAND: -processing -script "execute_test.js" -main main +# INFO : C:\Users\Steven Caron\Autodesk\Softimage_2015_SP1\Addons\SItoA\Application\Plugins\bin\nt-x86-64\ +>Loading: E:\library\development\sitoa\build\windows_x86_64\msvc_opt\si_13000\testsuite\test_0266\test.scn... +# INFO : 4034 - Loaded scene was created with build number: 13.1.140.0 - compatibility version: 1300 +# WARNING : 3000 - The path:C:\dev\Arnold\sitoa\testsuite\XSIProject\Pictures\left.png has been changed to Pictures\left.png +# WARNING : 3000 - The path:C:\dev\Arnold\sitoa\testsuite\XSIProject\Pictures\noicon.jpg has been changed to Pictures\noicon.jpg +Application.OpenScene("E:\\library\\development\\sitoa\\build\\windows_x86_64\\msvc_opt\\si_13000\\testsuite\\test_0266\\test.scn", "", "") +Application.SetValue("Passes.RenderOptions.ImageLockAspectRatio", False, "") +Application.SetValue("Passes.RenderOptions.ImageWidth", 160, "") +Application.SetValue("Passes.RenderOptions.ImageHeight", 120, "") +Application.SetValue("Passes.Default_Pass.Main.Filename", "E:\\library\\development\\sitoa\\build\\windows_x86_64\\msvc_opt\\si_13000\\testsuite\\test_0266\\testrender.####.tif", "") +Application.SetValue("Passes.Default_Pass.Main.Format", "tif", "") +Application.SetValue("Passes.Arnold_Render_Options.output_tiff_tiled", 0, "") +Application.SetValue("Passes.Arnold_Render_Options.enable_log_file", True, "") +Application.SetValue("Passes.Arnold_Render_Options.log_level", 1, "") +Application.SetValue("Passes.Arnold_Render_Options.output_file_tagdir_log", "E:\\library\\development\\sitoa\\build\\windows_x86_64\\msvc_opt\\si_13000\\testsuite\\test_0266", "") +# ERROR : 2000 - Argument 0 (Target) is invalid +# ERROR : 2001-EDIT-SetValue - Argument 0 is invalid +Application.SetValue("Passes.Arnold_Render_Options.shaders_path", "E:\\library\\development\\sitoa\\build\\windows_x86_64\\msvc_opt\\si_13000\\shaders", "") +Command failed, returned -2147024809 +Application.SetValue("Passes.Arnold_Render_Options.textures_path", "E:\\library\\development\\sitoa\\testsuite\\XSIProject\\Pictures", "") +Application.SetValue("Passes.Arnold_Render_Options.save_texture_paths", False, "") +# INFO : Rendering pass 'Default_Pass'... +# INFO : Rendering frame 1 (0.0% done) +# WARNING : [arnold] unable to load dynamic library C:\Users\Steven Caron\Autodesk\Softimage_2015_SP1\Addons\SItoA\Application\Plugins\bin\nt-x86-64\optix_denoiser.dll: The specified module could not be found. +# +# INFO : [sitoa] Frame 1 exported to Arnold in 0.08 sec. +# WARNING : [arnold] rendering with watermarks because of failed authorization: +# INFO : Render completed (100% done) +Application.RenderAllPasses("", "", "", "", "siRenderVerbosityDefault") +Warning: return value of the executed script is not an integer +# INFO : [sitoa] SItoA 5.1.0-alpha win has been unloaded. +# INFO : Characters has been unloaded. +# INFO : Unfold3D Plugin has been unloaded. +# INFO : FBX-XSI import/export Plug-in has been unloaded. +# INFO : TransformUVsPlugin has been unloaded. +# INFO : polymatricksPlugin has been unloaded. + diff --git a/testsuite/XSIProject/Scenes/test_0266/ref/reference.tif b/testsuite/XSIProject/Scenes/test_0266/ref/reference.tif new file mode 100644 index 0000000000000000000000000000000000000000..8a69c19bc74dfd71cbc84636e37eab5fbf5e42b4 GIT binary patch literal 19213 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 Date: Wed, 1 Aug 2018 23:56:41 -0700 Subject: [PATCH 040/159] small coding style fixes --- plugins/sitoa/loader/Shaders.cpp | 4 ++-- plugins/sitoa/renderer/IprShader.cpp | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/plugins/sitoa/loader/Shaders.cpp b/plugins/sitoa/loader/Shaders.cpp index 553db29..14fe2f4 100644 --- a/plugins/sitoa/loader/Shaders.cpp +++ b/plugins/sitoa/loader/Shaders.cpp @@ -391,7 +391,7 @@ CStatus LoadPassShaders(double in_frame, bool in_selectionOnly) ShaderArrayParameter arrayParam = ShaderArrayParameter(outputStackRef); CRefArray outputShadersArray; - if (arrayParam.GetCount()>0) + if (arrayParam.GetCount() > 0) { for (LONG i=0; i0) + if (outputShadersArray.GetCount() > 0) { AtArray* aovShadersArray = AiArrayAllocate(outputShadersArray.GetCount(), 1, AI_TYPE_NODE); for (LONG i=0; i0) + if (arrayParam.GetCount() > 0) { for (LONG i=0; i0) + if (outputShadersArray.GetCount() > 0) { AtArray* aovShadersArray = AiArrayAllocate(outputShadersArray.GetCount(), 1, AI_TYPE_NODE); for (LONG i=0; i Date: Tue, 21 Aug 2018 00:14:55 +0200 Subject: [PATCH 041/159] add vs to gitignore --- .gitignore | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.gitignore b/.gitignore index 94b34e4..303edc1 100644 --- a/.gitignore +++ b/.gitignore @@ -19,6 +19,12 @@ custom.py dist build +# VS and VS Code +.vs +.vscode/* +*.user +*.code-workspace + # Eclipse .settings .*project From b2e00708531317f4bf8a680a791084cf023e42c5 Mon Sep 17 00:00:00 2001 From: Jens Lindgren Date: Tue, 21 Aug 2018 00:15:34 +0200 Subject: [PATCH 042/159] version bumps also removed alpha from version name --- README.md | 5 +---- plugins/sitoa/version.cpp | 4 ++-- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 0c785be..e14704a 100644 --- a/README.md +++ b/README.md @@ -18,7 +18,7 @@ under an Apache 2.0 open source license. #### Requirements * Softimage 2015 SP1 -* Arnold 5.1.0.0 or newer +* Arnold 5.2.0.0 or newer * Python 2.6 or newer * Visual Studio 2012 (Windows) * GCC 4.2.4 (Linux) @@ -365,9 +365,6 @@ With contributions by: - Holger Schoenberger - Frederic Servant - Jules Stevenson - -After open-sourcing, development has continued by: - - Jens Lindgren Special thanks to all the users who passionately provided feedback, production diff --git a/plugins/sitoa/version.cpp b/plugins/sitoa/version.cpp index a661bc5..0fe7575 100644 --- a/plugins/sitoa/version.cpp +++ b/plugins/sitoa/version.cpp @@ -14,8 +14,8 @@ See the License for the specific language governing permissions and limitations #include #define SITOA_MAJOR_VERSION_NUM 5 -#define SITOA_MINOR_VERSION_NUM 1 -#define SITOA_FIX_VERSION L"0-alpha" +#define SITOA_MINOR_VERSION_NUM 2 +#define SITOA_FIX_VERSION L"0" CString GetSItoAVersion(bool in_addPlatform) From 793b90fd46a90c875f393ac32b8bf5bf2be64fa7 Mon Sep 17 00:00:00 2001 From: Jens Lindgren Date: Tue, 21 Aug 2018 00:30:24 +0200 Subject: [PATCH 043/159] add missing shaderdefs for aov_write_rgba and car_paint --- plugins/helpers/ArnoldShaderDef.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/plugins/helpers/ArnoldShaderDef.js b/plugins/helpers/ArnoldShaderDef.js index 8f14d76..a26b423 100644 --- a/plugins/helpers/ArnoldShaderDef.js +++ b/plugins/helpers/ArnoldShaderDef.js @@ -27,6 +27,7 @@ function XSILoadPlugin( in_reg ) in_reg.RegisterShader("aov_write_float", 1, 0); in_reg.RegisterShader("aov_write_int", 1, 0); in_reg.RegisterShader("aov_write_rgb", 1, 0); + in_reg.RegisterShader("aov_write_rgba", 1, 0); in_reg.RegisterShader("atan", 1, 0); in_reg.RegisterShader("atmosphere_volume", 1, 0); in_reg.RegisterShader("blackbody", 1, 0); @@ -34,6 +35,7 @@ function XSILoadPlugin( in_reg ) in_reg.RegisterShader("bump3d", 1, 0); in_reg.RegisterShader("cache", 1, 0); in_reg.RegisterShader("camera_projection", 1, 0); + in_reg.RegisterShader("car_paint", 1, 0); in_reg.RegisterShader("checkerboard", 1, 0); in_reg.RegisterShader("clamp", 1, 0); in_reg.RegisterShader("closure", 1, 0); // SItoA @@ -150,6 +152,8 @@ function Arnold_aov_write_int_1_0_DefineInfo(in_ctxt) { return true; } function Arnold_aov_write_int_1_0_Define(in_ctxt) { return true; } function Arnold_aov_write_rgb_1_0_DefineInfo(in_ctxt) { return true; } function Arnold_aov_write_rgb_1_0_Define(in_ctxt) { return true; } +function Arnold_aov_write_rgba_1_0_DefineInfo(in_ctxt) { return true; } +function Arnold_aov_write_rgba_1_0_Define(in_ctxt) { return true; } function Arnold_atan_1_0_DefineInfo(in_ctxt) { return true; } function Arnold_atan_1_0_Define(in_ctxt) { return true; } function Arnold_atmosphere_volume_1_0_DefineInfo(in_ctxt) { return true; } @@ -164,6 +168,8 @@ function Arnold_cache_1_0_DefineInfo(in_ctxt) { return true; } function Arnold_cache_1_0_Define(in_ctxt) { return true; } function Arnold_camera_projection_1_0_DefineInfo(in_ctxt) { return true; } function Arnold_camera_projection_1_0_Define(in_ctxt) { return true; } +function Arnold_car_paint_1_0_DefineInfo(in_ctxt) { return true; } +function Arnold_car_paint_1_0_Define(in_ctxt) { return true; } function Arnold_checkerboard_1_0_DefineInfo(in_ctxt) { return true; } function Arnold_checkerboard_1_0_Define(in_ctxt) { return true; } function Arnold_clamp_1_0_DefineInfo(in_ctxt) { return true; } From 72170fd96e5b3a11fac24ff39b1007b68994e814 Mon Sep 17 00:00:00 2001 From: Jens Lindgren Date: Tue, 21 Aug 2018 00:35:16 +0200 Subject: [PATCH 044/159] add sheen to standard_surface --- shaders/metadata/arnold_shaders.mtd | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/shaders/metadata/arnold_shaders.mtd b/shaders/metadata/arnold_shaders.mtd index 27be7ec..1825f82 100644 --- a/shaders/metadata/arnold_shaders.mtd +++ b/shaders/metadata/arnold_shaders.mtd @@ -2624,6 +2624,7 @@ soft.order STRING "BeginGroup Base base base_color diffuse_roughness metalness E "BeginGroup Transmission transmission transmission_color transmission_depth transmission_scatter transmission_scatter_anisotropy transmission_dispersion transmission_extra_roughness transmit_aovs EndGroup " "BeginGroup Subsurface subsurface subsurface_color subsurface_radius subsurface_scale subsurface_type subsurface_anisotropy EndGroup " "BeginGroup Coat coat coat_color coat_roughness coat_IOR coat_normal coat_affect_color coat_affect_roughness EndGroup " +"BeginGroup Sheen sheen sheen_color sheen_roughness EndGroup " "BeginGroup Thin_Film thin_film_thickness thin_film_IOR EndGroup " "BeginGroup Emission emission emission_color EndGroup " "BeginGroup Geometry thin_walled opacity normal tangent EndGroup " @@ -2828,6 +2829,22 @@ soft.label STRING "Affect Roughness" min FLOAT 0 max FLOAT 1 +[attr sheen] +desc STRING "Sheen Weight" +soft.label STRING "Weight" +min FLOAT 0 +max FLOAT 1 + +[attr sheen_color] +desc STRING "Sheen Color" +soft.label STRING "Color" + +[attr sheen_roughness] +desc STRING "Sheen Roughness" +soft.label STRING "Roughness" +min FLOAT 0 +max FLOAT 1 + [attr thin_film_thickness] desc STRING "Thickness of the thin film interference on the surface. Typical values are between 0 and 3000 nm." soft.label STRING "Thickness" From be61692c7d3a4a1b0f7a18ea29f60ec0a9177355 Mon Sep 17 00:00:00 2001 From: Jens Lindgren Date: Tue, 21 Aug 2018 01:15:04 +0200 Subject: [PATCH 045/159] add cell_noise --- plugins/helpers/ArnoldShaderDef.js | 3 ++ shaders/metadata/arnold_shaders.mtd | 61 +++++++++++++++++++++++++++++ 2 files changed, 64 insertions(+) diff --git a/plugins/helpers/ArnoldShaderDef.js b/plugins/helpers/ArnoldShaderDef.js index a26b423..0ff4441 100644 --- a/plugins/helpers/ArnoldShaderDef.js +++ b/plugins/helpers/ArnoldShaderDef.js @@ -36,6 +36,7 @@ function XSILoadPlugin( in_reg ) in_reg.RegisterShader("cache", 1, 0); in_reg.RegisterShader("camera_projection", 1, 0); in_reg.RegisterShader("car_paint", 1, 0); + in_reg.RegisterShader("cell_noise", 1, 0); in_reg.RegisterShader("checkerboard", 1, 0); in_reg.RegisterShader("clamp", 1, 0); in_reg.RegisterShader("closure", 1, 0); // SItoA @@ -170,6 +171,8 @@ function Arnold_camera_projection_1_0_DefineInfo(in_ctxt) { return true; } function Arnold_camera_projection_1_0_Define(in_ctxt) { return true; } function Arnold_car_paint_1_0_DefineInfo(in_ctxt) { return true; } function Arnold_car_paint_1_0_Define(in_ctxt) { return true; } +function Arnold_cell_noise_1_0_DefineInfo(in_ctxt) { return true; } +function Arnold_cell_noise_1_0_Define(in_ctxt) { return true; } function Arnold_checkerboard_1_0_DefineInfo(in_ctxt) { return true; } function Arnold_checkerboard_1_0_Define(in_ctxt) { return true; } function Arnold_clamp_1_0_DefineInfo(in_ctxt) { return true; } diff --git a/shaders/metadata/arnold_shaders.mtd b/shaders/metadata/arnold_shaders.mtd index 1825f82..014dffb 100644 --- a/shaders/metadata/arnold_shaders.mtd +++ b/shaders/metadata/arnold_shaders.mtd @@ -445,6 +445,67 @@ desc STRING "Connect a normal map here (usually exported from Mudbox or ZBrush). soft.label STRING "Normal" soft.inspectable BOOL false +############################################################################## +[node cell_noise] +soft.category STRING "Texture" + +[attr pattern] +desc STRING "Pattern" + +[attr additive] +desc STRING "If Additive is true, all noise patterns are simply added. If this is false, the largest value is selected." + +[attr octaves] +desc STRING "The number of octaves over which the noise function is calculated." +softmin INT 1 +softmax INT 8 + +[attr randomness] +desc STRING "If randomness is greater than 0, feature point locations are jittered. If the value gets closer to 0, patterns have a more regular, axis aligned look." +min FLOAT 0 +softmin FLOAT 0 +softmax FLOAT 1 + +[attr lacunarity] +desc STRING "Controls the average size of gaps in the texture pattern produced." +min FLOAT 0.0001 +softmin FLOAT 1 +softmax FLOAT 5 + +[attr amplitude] +desc STRING "Controls the amplitude, or range, of the output. Normally the output has values between 0 and 1; the amplitude control multiplies this." +softmin FLOAT 0 +softmax FLOAT 1 + +[attr scale] +desc STRING "Controls the scale of the noise function in x, y, and z directions." + +[attr offset] +desc STRING "Offset the noise in x, y, or z directions." + +[attr coord_space] +desc STRING "Specifies the coordinate space to use." + +[attr pref_name] +desc STRING "Specify the name of the reference position user-data array." + +[attr P] +desc STRING "Input coordinates of the 4D fractal noise function." + +[attr time] +desc STRING "The pattern of noise smoothly varies over time." + +[attr color] +desc STRING "Multiply a specified color to the resulting noise pattern." + +[attr palette] +desc STRING "The color of each Voronoi cell is randomly picked from the connected node. An arbitrary RGB node including image and ramp can be connected here. Note that this is different from simple texturing using UV." + +[attr density] +desc STRING "This parameter can be used to create flake noise by decimating some cells. This only works with cell1/cell2 for now." +softmin FLOAT 0 +softmax FLOAT 1 + ############################################################################## [node checkerboard] soft.category STRING "Texture" From a1eb7e621ff605fd753bb95481726bdb1ee71ac8 Mon Sep 17 00:00:00 2001 From: Jens Lindgren Date: Tue, 21 Aug 2018 01:32:41 +0200 Subject: [PATCH 046/159] add matrix shaders matrix_multiply_vector and matrix_transform --- plugins/helpers/ArnoldShaderDef.js | 6 ++++++ shaders/metadata/arnold_shaders.mtd | 8 ++++++++ 2 files changed, 14 insertions(+) diff --git a/plugins/helpers/ArnoldShaderDef.js b/plugins/helpers/ArnoldShaderDef.js index 0ff4441..0b4cd62 100644 --- a/plugins/helpers/ArnoldShaderDef.js +++ b/plugins/helpers/ArnoldShaderDef.js @@ -70,6 +70,8 @@ function XSILoadPlugin( in_reg ) in_reg.RegisterShader("layer_shader", 1, 0); in_reg.RegisterShader("length", 1, 0); in_reg.RegisterShader("log", 1, 0); + in_reg.RegisterShader("matrix_multiply_vector", 1, 0); + in_reg.RegisterShader("matrix_transform", 1, 0); in_reg.RegisterShader("matte", 1, 0); in_reg.RegisterShader("max", 1, 0); in_reg.RegisterShader("min", 1, 0); @@ -239,6 +241,10 @@ function Arnold_length_1_0_DefineInfo(in_ctxt) { return true; } function Arnold_length_1_0_Define(in_ctxt) { return true; } function Arnold_log_1_0_DefineInfo(in_ctxt) { return true; } function Arnold_log_1_0_Define(in_ctxt) { return true; } +function Arnold_matrix_multiply_vector_1_0_DefineInfo(in_ctxt) { return true; } +function Arnold_matrix_multiply_vector_1_0_Define(in_ctxt) { return true; } +function Arnold_matrix_transform_1_0_DefineInfo(in_ctxt) { return true; } +function Arnold_matrix_transform_1_0_Define(in_ctxt) { return true; } function Arnold_matte_1_0_DefineInfo(in_ctxt) { return true; } function Arnold_matte_1_0_Define(in_ctxt) { return true; } function Arnold_max_1_0_DefineInfo(in_ctxt) { return true; } diff --git a/shaders/metadata/arnold_shaders.mtd b/shaders/metadata/arnold_shaders.mtd index 014dffb..ae80717 100644 --- a/shaders/metadata/arnold_shaders.mtd +++ b/shaders/metadata/arnold_shaders.mtd @@ -1807,6 +1807,14 @@ desc STRING "Input to calcute logarithm of." [attr base] desc STRING "Base for use in logarithm calculation." +############################################################################## +[node matrix_multiply_vector] +soft.category STRING "Math" + +############################################################################## +[node matrix_transform] +soft.category STRING "Math" + ############################################################################## [node matte] soft.category STRING "Surface" From cdf1eea8ddec9ee7ac6dff9da463780178c8178a Mon Sep 17 00:00:00 2001 From: Jens Lindgren Date: Tue, 21 Aug 2018 02:16:04 +0200 Subject: [PATCH 047/159] add toon_id --- plugins/helpers/ArnoldProperties.js | 6 ++++++ plugins/sitoa/loader/Properties.cpp | 13 +++++++++++++ shaders/metadata/arnold_shaders.mtd | 6 +++++- 3 files changed, 24 insertions(+), 1 deletion(-) diff --git a/plugins/helpers/ArnoldProperties.js b/plugins/helpers/ArnoldProperties.js index 30c9ac2..da89613 100644 --- a/plugins/helpers/ArnoldProperties.js +++ b/plugins/helpers/ArnoldProperties.js @@ -479,6 +479,7 @@ function AddParamsShape(in_prop) in_prop.AddParameter2("export_pref", siBool, false, null, null, null, null); in_prop.AddParameter2("subdiv_smooth_derivs", siBool, false, null, null, null, null); in_prop.AddParameter2("sss_setname", siString, "", null, null, null, null, 0, siPersistable|siAnimatable); + in_prop.AddParameter2("toon_id", siString, "", null, null, null, null, 0, siPersistable|siAnimatable); in_prop.AddParameter2("trace_sets", siString, "", null, null, null, null, 0, siPersistable|siAnimatable); //new per-object motion blur in_prop.AddParameter2("motion_transform", siBool, true, null, null, null, null); @@ -653,6 +654,11 @@ function arnold_parameters_DefineLayout(io_Context) item.SetAttribute(siUINoLabel, true); xsiLayout.EndGroup(); + xsiLayout.AddGroup("Toon ID", true, 50); + item = xsiLayout.AddItem("toon_id", ""); + item.SetAttribute(siUINoLabel, true); + xsiLayout.EndGroup(); + xsiLayout.AddGroup("Trace Sets", true, 50); item = xsiLayout.AddItem("trace_sets", ""); item.SetAttribute(siUINoLabel, true); diff --git a/plugins/sitoa/loader/Properties.cpp b/plugins/sitoa/loader/Properties.cpp index 091007a..5648b2a 100644 --- a/plugins/sitoa/loader/Properties.cpp +++ b/plugins/sitoa/loader/Properties.cpp @@ -336,6 +336,19 @@ void LoadArnoldParameters(AtNode* in_node, CParameterRefArray &in_paramsArray, d continue; } + if (!strcmp(charParamName, "toon_id")) + { + CString toonId = param.GetValue(); + if (toonId.IsEmpty()) // Avoid exporting the toon_id if it is empty + continue; + if (!AiNodeLookUpUserParameter(in_node, "toon_id")) + AiNodeDeclare(in_node, "toon_id", "constant STRING"); + if (AiNodeLookUpUserParameter(in_node, "toon_id")) + CNodeSetter::SetString(in_node, "toon_id", toonId.GetAsciiString()); + + continue; + } + if (!strcmp(charParamName, "trace_sets")) // #783: Expose the trace sets string for shapes { CString traceSets = param.GetValue(); diff --git a/shaders/metadata/arnold_shaders.mtd b/shaders/metadata/arnold_shaders.mtd index ae80717..f65df28 100644 --- a/shaders/metadata/arnold_shaders.mtd +++ b/shaders/metadata/arnold_shaders.mtd @@ -3306,7 +3306,7 @@ soft.label STRING "Internal IOR" soft.category STRING "Surface" soft.order STRING "BeginGroup Edge enable edge_color edge_tonemap edge_opacity edge_width_scale " "BeginGroup Edge_Detection id_difference shader_difference mask_color uv_threshold angle_threshold normal_type EndGroup " - "BeginGroup Advanced_Edge_Control priority ignore_throughput EndGroup " + "BeginGroup Advanced_Edge_Control priority ignore_throughput user_id EndGroup " "EndGroup " "BeginGroup Silhouette enable_silhouette silhouette_color silhouette_tonemap silhouette_opacity silhouette_width_scale EndGroup " "BeginGroup Base base base_color base_tonemap EndGroup " @@ -3375,6 +3375,10 @@ softmax INT 10 [attr ignore_throughput] desc STRING "By default, the contour color is affected by ray throughput. If a specific color is required for a reflected/refracted object, enable this and use a ray_switch shader." +[attr user_id] +desc STRING "Edge detection can be controlled using a STRING type user data called Toon ID." +soft.label STRING "Use Toon ID" + # Silhouette [attr enable_silhouette] From 9820f444160445e3fa170a3ffc6e8fc7bfd44887 Mon Sep 17 00:00:00 2001 From: Jens Lindgren Date: Tue, 21 Aug 2018 11:17:45 +0200 Subject: [PATCH 048/159] add car_paint to shader menu --- plugins/helpers/ArnoldMenu.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/plugins/helpers/ArnoldMenu.js b/plugins/helpers/ArnoldMenu.js index e0f4091..791e8ad 100644 --- a/plugins/helpers/ArnoldMenu.js +++ b/plugins/helpers/ArnoldMenu.js @@ -249,6 +249,7 @@ function ArnoldShaders_Init(io_Context) function AddShadersSubMenu(in_menu) { + in_menu.AddCallbackItem("Car Paint", "OnShadersMenu"); in_menu.AddCallbackItem("Standard Surface", "OnShadersMenu"); in_menu.AddCallbackItem("Standard Hair", "OnShadersMenu"); in_menu.AddCallbackItem("Toon", "OnShadersMenu"); @@ -439,6 +440,9 @@ function OnShadersMenu(in_ctxt) var item = in_ctxt.Source; switch (item.Name) { + case "Car Paint": + SITOA_AddShader("Arnold.car_paint.1.0", "surface"); + break; case "Standard Surface": SITOA_AddShader("Arnold.standard_surface.1.0", "surface"); break; From ddcd18529d9bab3fc3e90497cb6bc2f8fe08f22a Mon Sep 17 00:00:00 2001 From: Jens Lindgren Date: Tue, 21 Aug 2018 12:02:45 +0200 Subject: [PATCH 049/159] update clamp and range shaders --- shaders/metadata/arnold_shaders.mtd | 47 +++++++++++++++++++++++++---- 1 file changed, 41 insertions(+), 6 deletions(-) diff --git a/shaders/metadata/arnold_shaders.mtd b/shaders/metadata/arnold_shaders.mtd index f65df28..1d6a96c 100644 --- a/shaders/metadata/arnold_shaders.mtd +++ b/shaders/metadata/arnold_shaders.mtd @@ -558,15 +558,27 @@ soft.label STRING "UV Set" [node clamp] soft.category STRING "Utility" +[attr input] +desc STRING "Input shader to apply the clamp to." + +[attr mode] +desc STRING "Can be set to Scalar or RGB. When set to RGB the input result is clamped between Min Color and Max Color." + [attr min] desc STRING "The minumum value that the input will be clamped to." softmin FLOAT 0 -softmax FLOAT 1 +softmax FLOAT 10 [attr max] desc STRING "The maximum value that the input will be clamped to." softmin FLOAT 0 -softmax FLOAT 1 +softmax FLOAT 10 + +[attr min_color] +desc STRING "The minimum value for the color channels to be used in the output." + +[attr max_color] +desc STRING "The maximum value for the color channels to be used in the output." # SItoA specific ############################################################################## @@ -2263,29 +2275,52 @@ desc STRING "Produce a cheaper to compute, monochromatic noise." [node range] soft.category STRING "Math" +[attr input] +desc STRING "Input shader to apply the range to." + [attr input_min] desc STRING "The minimum value of the input range." softmin FLOAT 0 -softmax FLOAT 3 +softmax FLOAT 10 [attr input_max] desc STRING "The maximum value of the input range." softmin FLOAT 0 -softmax FLOAT 3 +softmax FLOAT 10 [attr output_min] desc STRING "The minimum value of the output range. The Input Min will be mapped to this value." softmin FLOAT 0 -softmax FLOAT 3 +softmax FLOAT 10 [attr output_max] desc STRING "The maximum value of the input range. The Input Max will be mapped to this value." softmin FLOAT 0 -softmax FLOAT 3 +softmax FLOAT 10 [attr smoothstep] desc STRING "Interpolates the output range smoothly between the max and min output values. The returned value is clamped between these values." +[attr contrast] +desc STRING "Scales values around the Contrast Pivot." +softmin FLOAT 0 +softmax FLOAT 10 + +[attr contrast_pivot] +desc STRING "The origin of the contrast scaling. The default is 0.18 which is the average perceptual mid-gray." +softmin FLOAT 0 +softmax FLOAT 1 + +[attr bias] +desc STRING "Push or pull values by altering the slope at the beginning of the range. Bias values below 0.5 decrease the slope and lower values overall. Above 0.5, the slope is higher, and the value grow's more quickly. A value of 0.5 has no effect." +softmin FLOAT 0 +softmax FLOAT 1 + +[attr gain] +desc STRING "Increase or decrease the slope of the mid-range values. Gain values below 0.5 increase the contrast whereas values above 0.5 flatten the mid-range values. A value of 0.5 has no effect." +softmin FLOAT 0 +softmax FLOAT 10 + ############################################################################## [node ray_switch_rgba] soft.label STRING "Ray Switch RGBA" From 793b491cf37a77e2b2f217c31d4f24a8ec3a94f0 Mon Sep 17 00:00:00 2001 From: Jens Lindgren Date: Tue, 21 Aug 2018 12:13:13 +0200 Subject: [PATCH 050/159] tiny cleanup --- plugins/helpers/ArnoldProperties.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/helpers/ArnoldProperties.js b/plugins/helpers/ArnoldProperties.js index da89613..98938ea 100644 --- a/plugins/helpers/ArnoldProperties.js +++ b/plugins/helpers/ArnoldProperties.js @@ -479,7 +479,7 @@ function AddParamsShape(in_prop) in_prop.AddParameter2("export_pref", siBool, false, null, null, null, null); in_prop.AddParameter2("subdiv_smooth_derivs", siBool, false, null, null, null, null); in_prop.AddParameter2("sss_setname", siString, "", null, null, null, null, 0, siPersistable|siAnimatable); - in_prop.AddParameter2("toon_id", siString, "", null, null, null, null, 0, siPersistable|siAnimatable); + in_prop.AddParameter2("toon_id", siString, "", null, null, null, null, 0, siPersistable|siAnimatable); in_prop.AddParameter2("trace_sets", siString, "", null, null, null, null, 0, siPersistable|siAnimatable); //new per-object motion blur in_prop.AddParameter2("motion_transform", siBool, true, null, null, null, null); From f1a53bd9a4d43a38f0d2d0d182cd2fdce901a879 Mon Sep 17 00:00:00 2001 From: Jens Lindgren Date: Tue, 21 Aug 2018 13:28:00 +0200 Subject: [PATCH 051/159] add volume_Z aov --- plugins/helpers/ArnoldScenePreferences.js | 1 + 1 file changed, 1 insertion(+) diff --git a/plugins/helpers/ArnoldScenePreferences.js b/plugins/helpers/ArnoldScenePreferences.js index 215de7c..af19edc 100644 --- a/plugins/helpers/ArnoldScenePreferences.js +++ b/plugins/helpers/ArnoldScenePreferences.js @@ -155,6 +155,7 @@ function CreateRenderChannels() aov_array.push({ name: "volume_direct", type: siRenderChannelColorType }); aov_array.push({ name: "volume_indirect", type: siRenderChannelColorType }); aov_array.push({ name: "volume_opacity", type: siRenderChannelColorType }); + aov_array.push({ name: "volume_Z", type: siRenderChannelGrayscaleType }); aov_array.push({ name: "Z", type: siRenderChannelGrayscaleType }); // shadow_matte shader aov_array.push({ name: "shadow", type: siRenderChannelColorType }); From 65663ca195c250dacf3566b48ca5b1133ed9fd7a Mon Sep 17 00:00:00 2001 From: Jens Lindgren Date: Tue, 21 Aug 2018 13:29:05 +0200 Subject: [PATCH 052/159] removed texture blur parameters --- plugins/sitoa/loader/Options.cpp | 2 -- plugins/sitoa/renderer/RendererOptions.cpp | 10 ---------- plugins/sitoa/renderer/RendererOptions.h | 4 ---- 3 files changed, 16 deletions(-) diff --git a/plugins/sitoa/loader/Options.cpp b/plugins/sitoa/loader/Options.cpp index 9bf5715..d242989 100644 --- a/plugins/sitoa/loader/Options.cpp +++ b/plugins/sitoa/loader/Options.cpp @@ -591,8 +591,6 @@ void LoadOptionsParameters(AtNode* in_optionsNode, const Property &in_arnoldOpti // Set the maximum number of files open CNodeSetter::SetInt(in_optionsNode, "texture_max_open_files", GetRenderOptions()->m_texture_max_open_files); CNodeSetter::SetFloat(in_optionsNode, "texture_max_sharpen", 1.5f); // #1559 - CNodeSetter::SetFloat(in_optionsNode, "texture_diffuse_blur", GetRenderOptions()->m_texture_diffuse_blur); - CNodeSetter::SetFloat(in_optionsNode, "texture_specular_blur", GetRenderOptions()->m_texture_specular_blur); CNodeSetter::SetBoolean(in_optionsNode, "texture_per_file_stats", GetRenderOptions()->m_texture_per_file_stats); diff --git a/plugins/sitoa/renderer/RendererOptions.cpp b/plugins/sitoa/renderer/RendererOptions.cpp index a5be0eb..a1ece94 100644 --- a/plugins/sitoa/renderer/RendererOptions.cpp +++ b/plugins/sitoa/renderer/RendererOptions.cpp @@ -167,8 +167,6 @@ void CRenderOptions::Read(const Property &in_cp) m_texture_accept_unmipped = (bool)ParAcc_GetValue(in_cp, L"texture_accept_unmipped", DBL_MAX); m_texture_automip = (bool)ParAcc_GetValue(in_cp, L"texture_automip", DBL_MAX); m_texture_filter = (int)ParAcc_GetValue(in_cp, L"texture_filter", DBL_MAX); - m_texture_diffuse_blur = (float)ParAcc_GetValue(in_cp, L"texture_diffuse_blur", DBL_MAX); - m_texture_specular_blur = (float)ParAcc_GetValue(in_cp, L"texture_specular_blur", DBL_MAX); m_texture_accept_untiled = (bool)ParAcc_GetValue(in_cp, L"texture_accept_untiled", DBL_MAX); m_enable_autotile = (bool)ParAcc_GetValue(in_cp, L"enable_autotile", DBL_MAX); m_texture_autotile = (int)ParAcc_GetValue(in_cp, L"texture_autotile", DBL_MAX); @@ -428,8 +426,6 @@ SITOA_CALLBACK CommonRenderOptions_Define(CRef& in_ctxt) cpset.AddParameter(L"texture_accept_unmipped", CValue::siBool, siPersistable, L"", L"", true, CValue(), CValue(), CValue(), CValue(), p); cpset.AddParameter(L"texture_automip", CValue::siBool, siPersistable, L"", L"", false, CValue(), CValue(), CValue(), CValue(), p); cpset.AddParameter(L"texture_filter", CValue::siInt4, siPersistable, L"", L"", AI_TEXTURE_SMART_BICUBIC, CValue(), CValue(), CValue(), CValue(), p); - cpset.AddParameter(L"texture_diffuse_blur", CValue::siDouble, siPersistable, L"", L"", 0.03125, 0, 1, 0, 0.1, p); - cpset.AddParameter(L"texture_specular_blur", CValue::siDouble, siPersistable, L"", L"", 0.0, 0, 1, 0, 0.1, p); cpset.AddParameter(L"texture_accept_untiled", CValue::siBool, siPersistable, L"", L"", true, CValue(), CValue(), CValue(), CValue(), p); cpset.AddParameter(L"enable_autotile", CValue::siBool, siPersistable, L"", L"", false, CValue(), CValue(), CValue(), CValue(), p); cpset.AddParameter(L"texture_autotile", CValue::siInt4, siPersistable, L"", L"", 64, 16, 1024, 16, 512, p); @@ -909,12 +905,6 @@ SITOA_CALLBACK CommonRenderOptions_DefineLayout(CRef& in_ctxt) item = layout.AddEnumControl(L"texture_filter", textFilters, L"Filter", siControlCombo); item.PutAttribute(siUILabelMinPixels, 195); item.PutAttribute(siUILabelPercentage, 90); - item = layout.AddItem(L"texture_diffuse_blur", L"Diffuse Blur"); - item.PutAttribute(siUILabelMinPixels, 195); - item.PutAttribute(siUILabelPercentage, 30); - item = layout.AddItem(L"texture_specular_blur", L"Specular Blur"); - item.PutAttribute(siUILabelMinPixels, 195); - item.PutAttribute(siUILabelPercentage, 30); layout.EndGroup(); layout.AddGroup(L"Tiling", true, 0); layout.AddItem(L"texture_accept_untiled", L"Accept Untiled Textures"); diff --git a/plugins/sitoa/renderer/RendererOptions.h b/plugins/sitoa/renderer/RendererOptions.h index 104194d..01fbe7c 100644 --- a/plugins/sitoa/renderer/RendererOptions.h +++ b/plugins/sitoa/renderer/RendererOptions.h @@ -152,8 +152,6 @@ class CRenderOptions bool m_texture_accept_unmipped; bool m_texture_automip; int m_texture_filter; - float m_texture_diffuse_blur; - float m_texture_specular_blur; bool m_texture_accept_untiled; bool m_enable_autotile; int m_texture_autotile; @@ -317,8 +315,6 @@ class CRenderOptions m_texture_accept_unmipped(true), m_texture_automip(false), m_texture_filter(AI_TEXTURE_SMART_BICUBIC), - m_texture_diffuse_blur(0.03125f), - m_texture_specular_blur(0.0f), // note that Arnold's default is 0.015625 m_texture_accept_untiled(true), m_enable_autotile(false), m_texture_autotile(64), From 634a3d3a4eb1dc5fe1e8f4b81dfe9cee847ef29b Mon Sep 17 00:00:00 2001 From: Jens Lindgren Date: Tue, 21 Aug 2018 17:53:04 +0200 Subject: [PATCH 053/159] add cryptomatte --- plugins/helpers/ArnoldScenePreferences.js | 4 ++ plugins/helpers/ArnoldShaderDef.js | 3 ++ shaders/metadata/arnold_shaders.mtd | 48 +++++++++++++++++++++++ 3 files changed, 55 insertions(+) diff --git a/plugins/helpers/ArnoldScenePreferences.js b/plugins/helpers/ArnoldScenePreferences.js index af19edc..11a7f67 100644 --- a/plugins/helpers/ArnoldScenePreferences.js +++ b/plugins/helpers/ArnoldScenePreferences.js @@ -164,6 +164,10 @@ function CreateRenderChannels() // toon aov_array.push({ name: "highlight", type: siRenderChannelColorType }); aov_array.push({ name: "rim_light", type: siRenderChannelColorType }); + // cryptomatte + aov_array.push({ name: "crypto_asset", type: siRenderChannelColorType }); + aov_array.push({ name: "crypto_object", type: siRenderChannelColorType }); + aov_array.push({ name: "crypto_material", type: siRenderChannelColorType }); var aov_name, aov_type; for (var i = 0; i < aov_array.length; i++) diff --git a/plugins/helpers/ArnoldShaderDef.js b/plugins/helpers/ArnoldShaderDef.js index 0b4cd62..af90236 100644 --- a/plugins/helpers/ArnoldShaderDef.js +++ b/plugins/helpers/ArnoldShaderDef.js @@ -48,6 +48,7 @@ function XSILoadPlugin( in_reg ) in_reg.RegisterShader("complex_ior", 1, 0); in_reg.RegisterShader("composite", 1, 0); in_reg.RegisterShader("cross", 1, 0); + in_reg.RegisterShader("cryptomatte", 1, 0); in_reg.RegisterShader("curvature", 1, 0); in_reg.RegisterShader("divide", 1, 0); in_reg.RegisterShader("dot", 1, 0); @@ -197,6 +198,8 @@ function Arnold_composite_1_0_DefineInfo(in_ctxt) { return true; } function Arnold_composite_1_0_Define(in_ctxt) { return true; } function Arnold_cross_1_0_DefineInfo(in_ctxt) { return true; } function Arnold_cross_1_0_Define(in_ctxt) { return true; } +function Arnold_cryptomatte_1_0_DefineInfo(in_ctxt) { return true; } +function Arnold_cryptomatte_1_0_Define(in_ctxt) { return true; } function Arnold_curvature_1_0_DefineInfo(in_ctxt) { return true; } function Arnold_curvature_1_0_Define(in_ctxt) { return true; } function Arnold_divide_1_0_DefineInfo(in_ctxt) { return true; } diff --git a/shaders/metadata/arnold_shaders.mtd b/shaders/metadata/arnold_shaders.mtd index 1d6a96c..6ada71c 100644 --- a/shaders/metadata/arnold_shaders.mtd +++ b/shaders/metadata/arnold_shaders.mtd @@ -960,6 +960,54 @@ soft.label STRING "Input 1" desc STRING "Second vector to use in cross product computation." soft.label STRING "Input 2" +############################################################################## +[node cryptomatte] +soft.category STRING "AOV" + +[attr sidecar_manifests] +desc STRING "Sets whether Cryptomatte should write the manifest to a sidecar .json file instead of the EXR header." + +[attr cryptomatte_depth] +desc STRING "Set the cryptomatte depth (number of cryptomatte AOVs)" +softmin INT 0 +softmax INT 10 + +[attr strip_obj_namespaces] +desc STRING "Strip namespaces from object names" + +[attr strip_mat_namespaces] +desc STRING "Strip namespaces from material names" + +[attr user_crypto_aov_0] +desc STRING "AOV name for user Cryptomatte 0" + +[attr user_crypto_src_0] +desc STRING "Source user data name for user Cryptomatte 0" + +[attr user_crypto_aov_1] +desc STRING "AOV name for user Cryptomatte 1" + +[attr user_crypto_src_1] +desc STRING "Source user data name for user Cryptomatte 1" + +[attr user_crypto_aov_2] +desc STRING "AOV name for user Cryptomatte 2" + +[attr user_crypto_src_2] +desc STRING "Source user data name for user Cryptomatte 2" + +[attr user_crypto_aov_3] +desc STRING "AOV name for user Cryptomatte 3" + +[attr user_crypto_src_3] +desc STRING "Source user data name for user Cryptomatte 3" + +[attr aov_crypto_asset] + +[attr aov_crypto_object] + +[attr aov_crypto_material] + ############################################################################## [node curvature] soft.category STRING "Utility" From 662164d37e3e87d5a7a4906007fcf8746aa7b591 Mon Sep 17 00:00:00 2001 From: Jens Lindgren Date: Wed, 22 Aug 2018 01:18:45 +0200 Subject: [PATCH 054/159] tidy up aovs and added AA_inv_density --- plugins/helpers/ArnoldScenePreferences.js | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/plugins/helpers/ArnoldScenePreferences.js b/plugins/helpers/ArnoldScenePreferences.js index 11a7f67..a57f91e 100644 --- a/plugins/helpers/ArnoldScenePreferences.js +++ b/plugins/helpers/ArnoldScenePreferences.js @@ -116,6 +116,7 @@ function CreateRenderChannels() var aov_array = []; aov_array.push({ name: "A", type: siRenderChannelGrayscaleType }); + aov_array.push({ name: "AA_inv_density", type: siRenderChannelGrayscaleType }); aov_array.push({ name: "albedo", type: siRenderChannelColorType }); aov_array.push({ name: "background", type: siRenderChannelColorType }); aov_array.push({ name: "coat", type: siRenderChannelColorType }); @@ -123,12 +124,16 @@ function CreateRenderChannels() aov_array.push({ name: "coat_direct", type: siRenderChannelColorType }); aov_array.push({ name: "coat_indirect", type: siRenderChannelColorType }); aov_array.push({ name: "cputime", type: siRenderChannelGrayscaleType }); + aov_array.push({ name: "crypto_asset", type: siRenderChannelColorType }); // cryptomatte + aov_array.push({ name: "crypto_material", type: siRenderChannelColorType }); // cryptomatte + aov_array.push({ name: "crypto_object", type: siRenderChannelColorType }); // cryptomatte aov_array.push({ name: "diffuse", type: siRenderChannelColorType }); aov_array.push({ name: "diffuse_albedo", type: siRenderChannelColorType }); aov_array.push({ name: "diffuse_direct", type: siRenderChannelColorType }); aov_array.push({ name: "diffuse_indirect", type: siRenderChannelColorType }); aov_array.push({ name: "direct", type: siRenderChannelColorType }); aov_array.push({ name: "emission", type: siRenderChannelColorType }); + aov_array.push({ name: "highlight", type: siRenderChannelColorType }); // toon shader aov_array.push({ name: "ID", type: siRenderChannelLabelType }); aov_array.push({ name: "indirect", type: siRenderChannelColorType }); aov_array.push({ name: "motionvector", type: siRenderChannelColorType }); @@ -137,6 +142,10 @@ function CreateRenderChannels() aov_array.push({ name: "P", type: siRenderChannelVectorType }); aov_array.push({ name: "Pref", type: siRenderChannelVectorType }); aov_array.push({ name: "raycount", type: siRenderChannelGrayscaleType }); + aov_array.push({ name: "rim_light", type: siRenderChannelColorType }); // toon shader + aov_array.push({ name: "shadow", type: siRenderChannelColorType }); // shadow_matte shader + aov_array.push({ name: "shadow_diff", type: siRenderChannelColorType }); // shadow_matte shader + aov_array.push({ name: "shadow_mask", type: siRenderChannelColorType }); // shadow_matte shader aov_array.push({ name: "shadow_matte", type: siRenderChannelColorType }); aov_array.push({ name: "specular", type: siRenderChannelColorType }); aov_array.push({ name: "specular_albedo", type: siRenderChannelColorType }); @@ -157,17 +166,6 @@ function CreateRenderChannels() aov_array.push({ name: "volume_opacity", type: siRenderChannelColorType }); aov_array.push({ name: "volume_Z", type: siRenderChannelGrayscaleType }); aov_array.push({ name: "Z", type: siRenderChannelGrayscaleType }); - // shadow_matte shader - aov_array.push({ name: "shadow", type: siRenderChannelColorType }); - aov_array.push({ name: "shadow_diff", type: siRenderChannelColorType }); - aov_array.push({ name: "shadow_mask", type: siRenderChannelColorType }); - // toon - aov_array.push({ name: "highlight", type: siRenderChannelColorType }); - aov_array.push({ name: "rim_light", type: siRenderChannelColorType }); - // cryptomatte - aov_array.push({ name: "crypto_asset", type: siRenderChannelColorType }); - aov_array.push({ name: "crypto_object", type: siRenderChannelColorType }); - aov_array.push({ name: "crypto_material", type: siRenderChannelColorType }); var aov_name, aov_type; for (var i = 0; i < aov_array.length; i++) From 0395e24103f72c7df8b4ec50268b08963948de25 Mon Sep 17 00:00:00 2001 From: Steven Caron Date: Mon, 27 Aug 2018 15:37:28 -0700 Subject: [PATCH 055/159] fixes issue with making a solution scons: *** [sitoa.sln] The size of the dependency list must be the same as the number of projects. --- SConstruct | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SConstruct b/SConstruct index 1463d15..6bc30d6 100644 --- a/SConstruct +++ b/SConstruct @@ -320,7 +320,7 @@ if system.os() == 'windows': projects = [os.path.join('plugins', 'sitoa', 'sitoa') + env['MSVS']['PROJECTSUFFIX'], os.path.join('shaders', 'src', 'sitoa_shaders') + env['MSVS']['PROJECTSUFFIX'], 'install' + env['MSVS']['PROJECTSUFFIX']], ## TODO: Find a clean way of getting these project paths - dependencies = [[], [], [], ['sitoa', 'sitoa_shaders']], + dependencies = [[], [], ['sitoa', 'sitoa_shaders']], variant = ['Debug_MSVC|Win32', 'Debug_ICC|Win32', 'Opt_MSVC|Win32', From d3525cfcbbd23c6f51ce92491fa8f3781cce155c Mon Sep 17 00:00:00 2001 From: Jens Lindgren Date: Wed, 29 Aug 2018 20:13:39 +0200 Subject: [PATCH 056/159] add id aovs to supported shaders --- shaders/metadata/arnold_shaders.mtd | 118 +++++++++++++++++++++++++++- 1 file changed, 116 insertions(+), 2 deletions(-) diff --git a/shaders/metadata/arnold_shaders.mtd b/shaders/metadata/arnold_shaders.mtd index 6ada71c..2433c56 100644 --- a/shaders/metadata/arnold_shaders.mtd +++ b/shaders/metadata/arnold_shaders.mtd @@ -2661,7 +2661,16 @@ soft.order STRING "BeginGroup Color base base_color melanin melanin_redness mela "BeginGroup Tint specular_tint specular2_tint transmission_tint EndGroup " "BeginGroup Diffuse diffuse diffuse_color EndGroup " "BeginGroup Emission emission emission_color EndGroup " -"BeginGroup Advanced opacity indirect_diffuse indirect_specular extra_depth extra_samples EndGroup" +"BeginGroup Advanced opacity indirect_diffuse indirect_specular extra_depth extra_samples EndGroup " +"AddTab ID_AOVs " +"BeginGroup ID_1_AOV aov_id1 id1 EndGroup " +"BeginGroup ID_2_AOV aov_id2 id2 EndGroup " +"BeginGroup ID_3_AOV aov_id3 id3 EndGroup " +"BeginGroup ID_4_AOV aov_id4 id4 EndGroup " +"BeginGroup ID_5_AOV aov_id5 id5 EndGroup " +"BeginGroup ID_6_AOV aov_id6 id6 EndGroup " +"BeginGroup ID_7_AOV aov_id7 id7 EndGroup " +"BeginGroup ID_8_AOV aov_id8 id8 EndGroup" [attr base] desc STRING "Brightness of the hair, a multiplier for the base color." @@ -2768,6 +2777,54 @@ min INT 0 softmin INT 0 softmax INT 8 +[attr aov_id1] +soft.label STRING "AOV Name 1" + +[attr id1] +soft.label STRING "ID 1" + +[attr aov_id2] +soft.label STRING "AOV Name 2" + +[attr id2] +soft.label STRING "ID 2" + +[attr aov_id3] +soft.label STRING "AOV Name 3" + +[attr id3] +soft.label STRING "ID 3" + +[attr aov_id4] +soft.label STRING "AOV Name 4" + +[attr id4] +soft.label STRING "ID 4" + +[attr aov_id5] +soft.label STRING "AOV Name 5" + +[attr id5] +soft.label STRING "ID 5" + +[attr aov_id6] +soft.label STRING "AOV Name 6" + +[attr id6] +soft.label STRING "ID 6" + +[attr aov_id7] +soft.label STRING "AOV Name 7" + +[attr id7] +soft.label STRING "ID 7" + +[attr aov_id8] +soft.label STRING "AOV Name 8" + +[attr id8] +soft.label STRING "ID 8" + ############################################################################## [node standard_surface] soft.category STRING "Surface" @@ -2780,7 +2837,16 @@ soft.order STRING "BeginGroup Base base base_color diffuse_roughness metalness E "BeginGroup Thin_Film thin_film_thickness thin_film_IOR EndGroup " "BeginGroup Emission emission emission_color EndGroup " "BeginGroup Geometry thin_walled opacity normal tangent EndGroup " -"BeginGroup Advanced caustics internal_reflections exit_to_background indirect_diffuse indirect_specular EndGroup" +"BeginGroup Advanced caustics internal_reflections exit_to_background indirect_diffuse indirect_specular EndGroup " +"AddTab ID_AOVs " +"BeginGroup ID_1_AOV aov_id1 id1 EndGroup " +"BeginGroup ID_2_AOV aov_id2 id2 EndGroup " +"BeginGroup ID_3_AOV aov_id3 id3 EndGroup " +"BeginGroup ID_4_AOV aov_id4 id4 EndGroup " +"BeginGroup ID_5_AOV aov_id5 id5 EndGroup " +"BeginGroup ID_6_AOV aov_id6 id6 EndGroup " +"BeginGroup ID_7_AOV aov_id7 id7 EndGroup " +"BeginGroup ID_8_AOV aov_id8 id8 EndGroup" [attr base] desc STRING "Scales the diffuse component." @@ -3053,6 +3119,54 @@ soft.label STRING "Indirect Specular" min FLOAT 0 max FLOAT 1 +[attr aov_id1] +soft.label STRING "AOV Name 1" + +[attr id1] +soft.label STRING "ID 1" + +[attr aov_id2] +soft.label STRING "AOV Name 2" + +[attr id2] +soft.label STRING "ID 2" + +[attr aov_id3] +soft.label STRING "AOV Name 3" + +[attr id3] +soft.label STRING "ID 3" + +[attr aov_id4] +soft.label STRING "AOV Name 4" + +[attr id4] +soft.label STRING "ID 4" + +[attr aov_id5] +soft.label STRING "AOV Name 5" + +[attr id5] +soft.label STRING "ID 5" + +[attr aov_id6] +soft.label STRING "AOV Name 6" + +[attr id6] +soft.label STRING "ID 6" + +[attr aov_id7] +soft.label STRING "AOV Name 7" + +[attr id7] +soft.label STRING "ID 7" + +[attr aov_id8] +soft.label STRING "AOV Name 8" + +[attr id8] +soft.label STRING "ID 8" + ############################################################################## [node standard_volume] soft.category STRING "Volume" From c0df639f446b65065eb3bd5149d35ae6235ce072 Mon Sep 17 00:00:00 2001 From: Jens Lindgren Date: Sun, 2 Sep 2018 19:52:22 +0200 Subject: [PATCH 057/159] support soft.node_type shader def --- plugins/sitoa/common/Tools.h | 1 + plugins/sitoa/loader/ShaderDef.cpp | 54 ++++++++++++++++++++++++++++- plugins/sitoa/loader/ShaderDef.h | 6 +++- shaders/metadata/arnold_shaders.mtd | 3 ++ 4 files changed, 62 insertions(+), 2 deletions(-) diff --git a/plugins/sitoa/common/Tools.h b/plugins/sitoa/common/Tools.h index d936ec1..44488a1 100644 --- a/plugins/sitoa/common/Tools.h +++ b/plugins/sitoa/common/Tools.h @@ -96,6 +96,7 @@ namespace ATSTRING const AtString soft_skip("soft.skip"); const AtString soft_inspectable("soft.inspectable"); const AtString soft_viewport_guid("soft.viewport_guid"); + const AtString soft_node_type("soft.node_type"); // const AtString closure("closure"); }; diff --git a/plugins/sitoa/loader/ShaderDef.cpp b/plugins/sitoa/loader/ShaderDef.cpp index 2d7b62d..df6f4cb 100644 --- a/plugins/sitoa/loader/ShaderDef.cpp +++ b/plugins/sitoa/loader/ShaderDef.cpp @@ -94,6 +94,32 @@ siShaderParameterDataType GetParamSdType(int in_type) return siShaderDataTypeUnknown; } +// Return the Softimage reference filter type for the input metadata node_type +// +// @param in_type The node_type +// +// @return The Softimage data type +// +siShaderReferenceFilterType GetShaderReferenceFilterType(CString in_type) +{ + if (in_type == L"object") + return siObjectReferenceFilter; + else if (in_type == L"camera") + return siCameraReferenceFilter; + else if (in_type == L"light") + return siLightReferenceFilter; + else if (in_type == L"material") + return siMaterialReferenceFilter; + else if (in_type == L"shader") + return siShaderReferenceFilter; + else if (in_type == L"geometric") + return siGeometryReferenceFilter; + else if (in_type == L"userdata") + return siUserDataBlobReferenceFilter; + else + return siUnknownReferenceFilter; +} + // Constructor for the CShaderDefParameter class, from the parameter entry // @@ -124,6 +150,7 @@ CShaderDefParameter::CShaderDefParameter(const AtParamEntry* in_paramEntry, cons m_has_linkable = AiMetaDataGetBool (in_node_entry, c, ATSTRING::linkable, &m_linkable); m_has_inspectable = AiMetaDataGetBool (in_node_entry, c, ATSTRING::soft_inspectable, &m_inspectable); m_has_viewport_guid = MetaDataGetCStr (in_node_entry, c, ATSTRING::soft_viewport_guid, m_viewport_guid); + m_has_node_type = MetaDataGetCStr (in_node_entry, c, ATSTRING::soft_node_type, m_node_type); } @@ -205,7 +232,32 @@ void CShaderDefParameter::Define(ShaderParamDefContainer &in_paramDef, const CSt if (m_type == AI_TYPE_CLOSURE) pDef = in_paramDef.AddParamDef(m_name, L"closure", defOptions); else - pDef = in_paramDef.AddParamDef(m_name, GetParamSdType(paramType), defOptions); + { + // adds the ability for string types to have a node picker + // also implements filter for the node types + if ((m_type == AI_TYPE_STRING || m_type == AI_TYPE_NODE) && m_has_node_type) + { + CStringArray nodeTypes = CStringUtilities().ToLower(m_node_type).Split(L" "); + defOptions.SetAttribute(siReferenceFilterAttribute, GetShaderReferenceFilterType(nodeTypes[0])); + + if (nodeTypes.GetCount() > 1) + { + if (nodeTypes[1] == L"array") + { + // shaderarrays doesn't use the label but uses SetLongName instead + // label has to be specified in .mtd or else it will just show the parameter name + if (m_has_label) + defOptions.SetLongName(m_label); + + pDef = in_paramDef.AddArrayParamDef(m_name, siShaderDataTypeReference, defOptions); + } + } + else + pDef = in_paramDef.AddParamDef(m_name, siShaderDataTypeReference, defOptions); + } + else + pDef = in_paramDef.AddParamDef(m_name, GetParamSdType(paramType), defOptions); + } // setting the default for the struct parameters if (pDef.IsStructure()) diff --git a/plugins/sitoa/loader/ShaderDef.h b/plugins/sitoa/loader/ShaderDef.h index 53fb506..72c53df 100644 --- a/plugins/sitoa/loader/ShaderDef.h +++ b/plugins/sitoa/loader/ShaderDef.h @@ -49,6 +49,8 @@ class CShaderDefParameter bool m_inspectable; bool m_has_viewport_guid; CString m_viewport_guid; + bool m_has_node_type; + CString m_node_type; public: @@ -56,7 +58,8 @@ class CShaderDefParameter CShaderDefParameter() : m_has_label(false), m_has_min(false), m_has_max(false), - m_has_softmin(false), m_has_softmax(false), m_has_linkable(false), m_has_viewport_guid(false) + m_has_softmin(false), m_has_softmax(false), m_has_linkable(false), m_has_viewport_guid(false), + m_has_node_type(false) {} CShaderDefParameter(const CShaderDefParameter &in_arg) : @@ -70,6 +73,7 @@ class CShaderDefParameter m_has_linkable(in_arg.m_has_linkable), m_linkable(in_arg.m_linkable), m_has_inspectable(in_arg.m_has_inspectable), m_inspectable(in_arg.m_inspectable), m_has_viewport_guid(in_arg.m_has_viewport_guid), m_viewport_guid(in_arg.m_viewport_guid), + m_has_node_type(in_arg.m_has_node_type), m_node_type(in_arg.m_node_type), m_name(in_arg.m_name) { m_default = in_arg.m_default; diff --git a/shaders/metadata/arnold_shaders.mtd b/shaders/metadata/arnold_shaders.mtd index 6ada71c..2d9e169 100644 --- a/shaders/metadata/arnold_shaders.mtd +++ b/shaders/metadata/arnold_shaders.mtd @@ -3540,6 +3540,8 @@ soft.label STRING "Tonemap" [attr lights] desc STRING "Specify the name of the key light to be used for the stylized highlight. You can specify multiple lights using a semicolon-delimited string as lightShape1;lightShape2. The supported light types are Distant, Point, Spot, and Photometric." +soft.label STRING "Lights" +soft.node_type STRING "light array" [attr highlight_color] desc STRING "An arbitrary texture (or RGB type node) can be used to create a stylized highlight on an object. If nothing is connected, the stylized highlight is disabled." @@ -3556,6 +3558,7 @@ max FLOAT 1 [attr rim_light] desc STRING "Specify the name of the light to be used here. Rim lighting is affected by the shadow of this light. The supported light types are: Distant, Point, Spot, and Photometric." soft.label STRING "Light" +soft.node_type STRING "light" [attr rim_light_color] desc STRING "The color of the rim light. Connect a ramp here to get a rim lighting effect." From b1073e6a1ff247ec3caf9ca606aac46603ef3d39 Mon Sep 17 00:00:00 2001 From: Jens Lindgren Date: Sun, 2 Sep 2018 20:01:26 +0200 Subject: [PATCH 058/159] add generic CRef to SItoA name string conversion --- plugins/sitoa/common/ParamsCommon.cpp | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/plugins/sitoa/common/ParamsCommon.cpp b/plugins/sitoa/common/ParamsCommon.cpp index 4730ae7..91cccab 100644 --- a/plugins/sitoa/common/ParamsCommon.cpp +++ b/plugins/sitoa/common/ParamsCommon.cpp @@ -300,6 +300,22 @@ CStatus LoadParameterValue(AtNode *in_node, const CString &in_entryName, const C resolvedPath.ResolveTokensInPlace(in_frame); paramValue = resolvedPath; } + + // Translate a CRef to SItoA name + // https://github.com/Autodesk/sitoa/issues/24 + if (in_param.GetValueType() == CValue::siEmpty) // CRef comes in as siEmpty ?! + { + // this is just the same code as the one below + X3DObject xsiObj(value); + if (xsiObj.IsValid()) + { + AtNode* objNode = GetRenderInstance()->NodeMap().GetExportedNode(xsiObj, in_frame); + if (objNode) + paramValue = CNodeUtilities().GetName(objNode); + else + paramValue = xsiObj.GetFullName(); + } + } } CNodeSetter::SetString(in_node, aiParamName, paramValue.GetAsciiString()); From d6aee179897142a57a69d0666d3edd3b1add5af4 Mon Sep 17 00:00:00 2001 From: Jens Lindgren Date: Sun, 2 Sep 2018 20:03:00 +0200 Subject: [PATCH 059/159] add array of CRef to arnold string conversion --- plugins/sitoa/common/ParamsShader.cpp | 89 ++++++++++++++++++--------- 1 file changed, 61 insertions(+), 28 deletions(-) diff --git a/plugins/sitoa/common/ParamsShader.cpp b/plugins/sitoa/common/ParamsShader.cpp index f9ce069..66eb625 100644 --- a/plugins/sitoa/common/ParamsShader.cpp +++ b/plugins/sitoa/common/ParamsShader.cpp @@ -185,38 +185,71 @@ CStatus LoadShaderParameter(AtNode* in_node, const CString &in_entryName, Parame { ShaderArrayParameter paramArray(in_param.GetRef()); - AtArray *values(NULL); - if (in_entryName == L"BooleanSwitch") - values = AiArrayAllocate(paramArray.GetCount(), 1, AI_TYPE_BOOLEAN); - else if (in_entryName == L"Color4Switch") - values = AiArrayAllocate(paramArray.GetCount(), 1, AI_TYPE_RGBA); - else if (in_entryName == L"IntegerSwitch") - values = AiArrayAllocate(paramArray.GetCount(), 1, AI_TYPE_INT); - else if (in_entryName == L"ScalarSwitch") - values = AiArrayAllocate(paramArray.GetCount(), 1, AI_TYPE_FLOAT); - else if (in_entryName == L"Vector3Switch") - values = AiArrayAllocate(paramArray.GetCount(), 1, AI_TYPE_VECTOR); - - // entering here for the "values" parameter only. Together with "values", we also push the "index" array - if (values) + // in certain cases, like 'lights' in the toon shader, + // we have an array parameter in the shaderdef but the node input in Arnold is a string + // let's itterate over the array and build a semicolon separated string of the objects + int paramType = GetArnoldParameterType(in_node, in_param.GetScriptName().GetAsciiString()); + if (paramType == AI_TYPE_STRING) { - AtArray *index = AiArrayAllocate(paramArray.GetCount(), 1, AI_TYPE_INT); - AiNodeSetArray(in_node, "values", values); - AiNodeSetArray(in_node, "index", index); + const char* aiParamName = in_param.GetScriptName().GetAsciiString(); + CString paramValue = L""; + + for (LONG i=0; i 0) + paramValue += L";"; + + AtNode* objNode = GetRenderInstance()->NodeMap().GetExportedNode(xsiObj, in_frame); + if (objNode) + paramValue += CNodeUtilities().GetName(objNode); + else + paramValue += xsiObj.GetFullName(); + } + } + CNodeSetter::SetString(in_node, aiParamName, paramValue.GetAsciiString()); } else { - // array type - int paramType = GetArnoldParameterType(in_node, in_param.GetScriptName().GetAsciiString(), true); - AtArray* entries = AiArrayAllocate(paramArray.GetCount(), 1, (uint8_t)paramType); - AiNodeSetArray(in_node, in_param.GetScriptName().GetAsciiString(), entries); - } - - // Iterate through all the parameters of the parameters array - for (LONG i=0; i Date: Sun, 2 Sep 2018 21:30:56 +0200 Subject: [PATCH 060/159] show toon diffuse and specular in viewport --- shaders/metadata/arnold_shaders.mtd | 2 ++ 1 file changed, 2 insertions(+) diff --git a/shaders/metadata/arnold_shaders.mtd b/shaders/metadata/arnold_shaders.mtd index 2d9e169..5d34bce 100644 --- a/shaders/metadata/arnold_shaders.mtd +++ b/shaders/metadata/arnold_shaders.mtd @@ -3497,6 +3497,7 @@ max FLOAT 1 [attr base_color] desc STRING "" soft.label STRING "Color" +soft.viewport_guid STRING "{3515CC72-082C-11D0-91DE-00A024C78EE3}" [attr base_tonemap] desc STRING "Connect a ramp node here to create a cell look (regarded as a tone map)." @@ -3513,6 +3514,7 @@ max FLOAT 1 [attr specular_color] desc STRING "The color the specular reflection will be modulated with. Use this color to 'tint' the specular highlight." soft.label STRING "Color" +soft.viewport_guid STRING "{3515CC73-082C-11D0-91DE-00A024C78EE3}" [attr specular_roughness] desc STRING "Controls the glossiness of the specular reflections." From c156209b071dcb47390809a5e0f8622fb1fb08e5 Mon Sep 17 00:00:00 2001 From: Jens Lindgren Date: Sun, 2 Sep 2018 21:32:06 +0200 Subject: [PATCH 061/159] increase output_filter_width max --- plugins/sitoa/renderer/RendererOptions.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/sitoa/renderer/RendererOptions.cpp b/plugins/sitoa/renderer/RendererOptions.cpp index a1ece94..1dce7f5 100644 --- a/plugins/sitoa/renderer/RendererOptions.cpp +++ b/plugins/sitoa/renderer/RendererOptions.cpp @@ -392,7 +392,7 @@ SITOA_CALLBACK CommonRenderOptions_Define(CRef& in_ctxt) cpset.AddParameter(L"AA_sample_clamp", CValue::siDouble, siPersistable, L"", L"", 10, 0.001, 100, 0.001, 100, p); cpset.AddParameter(L"indirect_sample_clamp", CValue::siDouble, siPersistable, L"", L"", 10, 0.0, 100, 0.0, 100, p); cpset.AddParameter(L"output_filter", CValue::siString, siPersistable, L"", L"", L"gaussian", 0, 10, 0, 10, p); - cpset.AddParameter(L"output_filter_width", CValue::siDouble, siPersistable, L"", L"", 2, 0, 10, 1, 6, p); + cpset.AddParameter(L"output_filter_width", CValue::siDouble, siPersistable, L"", L"", 2, 0, 100, 1, 6, p); cpset.AddParameter(L"filter_color_AOVs", CValue::siBool, siPersistable, L"", L"", true, CValue(), CValue(), CValue(), CValue(), p); cpset.AddParameter(L"filter_numeric_AOVs", CValue::siBool, siPersistable, L"", L"", false, CValue(), CValue(), CValue(), CValue(), p); From 456567251a3778fd295e0b183d41fc28a86e5a18 Mon Sep 17 00:00:00 2001 From: Jens Lindgren Date: Sun, 2 Sep 2018 22:29:37 +0200 Subject: [PATCH 062/159] add toon shader test --- testsuite/XSIProject/Scenes/test_0267/README | 5 ++ .../XSIProject/Scenes/test_0267/data/test.scn | Bin 0 -> 741376 bytes .../Scenes/test_0267/ref/reference.log | 65 ++++++++++++++++++ .../Scenes/test_0267/ref/reference.tif | Bin 0 -> 22441 bytes 4 files changed, 70 insertions(+) create mode 100644 testsuite/XSIProject/Scenes/test_0267/README create mode 100644 testsuite/XSIProject/Scenes/test_0267/data/test.scn create mode 100644 testsuite/XSIProject/Scenes/test_0267/ref/reference.log create mode 100644 testsuite/XSIProject/Scenes/test_0267/ref/reference.tif diff --git a/testsuite/XSIProject/Scenes/test_0267/README b/testsuite/XSIProject/Scenes/test_0267/README new file mode 100644 index 0000000..dc97613 --- /dev/null +++ b/testsuite/XSIProject/Scenes/test_0267/README @@ -0,0 +1,5 @@ +Toon shader + +(github #6 and #24) + +author: Jens Lindgren diff --git a/testsuite/XSIProject/Scenes/test_0267/data/test.scn b/testsuite/XSIProject/Scenes/test_0267/data/test.scn new file mode 100644 index 0000000000000000000000000000000000000000..1c54f137caf967302911c5a85c1721de818ec499 GIT binary patch literal 741376 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 RU>Sr$oUC^Py6Z~AlLrQMnaO3km zckK;d{e01`$o+zt%4%CEqCY=v}`fKL&o*yT;77`(+y}M!4CaxRiXM*wi0>ojD`; zi^84rws|4qk`m#!!WWB_kdlYQ6qr@~{yD!DZQ{bhA}VzjBm7qUSt%ic2|iV+!e>qVfrthtC=J zR!m@Rs6>h#&HfCsmaBXY5_qm;YAjRj7S#uKMpuKG`s5g#3-8Jcic7XtQDgNJUP-0} z-ln&Pm!bWm2^!!v>6eL8yCeNVw|So|np9-mS1>FNDb}xkgMr)Egs%GY{iNf|ex5cs zo8%es-NALWKZ{ti{qHXw35&|)$ZlXCZpjOLjiy>14u^(u5J%t}F~MXbiIum_(U%PI zPXxPxf40xM{Qg;y;~wk!ONHKfzWccx(hi4|IA@?&VhJU1M>gqXu@BmWL?Y-z7B4Bg z@f^+1Q3h9Dxugl|r=0JkIH02G>Ep=bGc-hcIRo|e0j>R^$qW!bnJp~fK7wx8njNy+#2Y_8ED zmw(iU3mOi;I(Nw+QTi@3qF8A}HZ#~vEWyGeapZx80IA;9V+Gt)lsj?F4iJ41= zlvy~UOO8W%SocE8_6{mq_TR?jmy-Xk+p15!)=NWY4Y+&k)L|F3_xfhZy`VL!C_P7#+#pOvJ(j{H!!yJXBdy%~k4_bCI zbk@BNtB0Steh0>TM-eHPHq&RM%ev%`l8Q=KbfN!in^a7?Y7h)pbWIohXh#Vtx3;in zrJwW>lS)e0b)gTFN=Y|#p^tKumVVZSK1_N}x~T~TwMoxQw+uqdNVg3_J*A7Y6YhkK zJ?^n85^Dd>rJ*F#!D9W54hfR`@?)?zlG?9QNKlv@(Diw`kBcUQumlz%yfM44h-yG; zmjE4T2S?sQRz>Q>C(7ZpxPihwie z+T^$sFig-4T}+l&$J7epDR+~+&}E|zXk$E4y6*T#6`~DtA>c}$2>+vN^=iBQ~1p9H-JzFC~_Al9IY>> zZwm5YMxRuWDNPN$=>kOzj0$Q@#MUdxcF#y2eZ{9$-zE`@0@k;9V{WAjj*y_na!tI9 zl9T;jm|G~Pbj)MJT`Y}wrQsrn11_4=uoE%v-(Iu1Q{1kQkCvUQHTLI``wP)0Dt8Fv5~Q5r_1gxbn;1+zVbi>M?Yx-2Z$}&xss*PEetGPF&S+f@?u*NQ(;BX~AX+ zB{%91pD zB6=S;ZB!4P%W4i{RM@z=?YeiOLZ`lRH+pK{4QDxRB>vXW(O#g<>^?K7vL>-ZQ(B&i zzj!Y8lijrvS}l$Jo>N5E)jxDh0 zwEXN>x&PO6f1^S)^8$-SEsF#>VOtc_$K|sz2d}0d2XAPs9NJ|Ly_u#p zg3hb{a>Q6aZ0)4^Z5$X2qPEe>e+HtaZ@QOBp#H^l!8_? z$`oppLTQG4ffzjxdL2F*S|@Dk(>;&n42(L+#mdY;VoFtU_GB#3pB}eBX%VJ#fs$SP z?fFuXEAP$-ow;<%+168D?ZE{~1kwy5O_e3eR?qConB42>N3Nj-@GBhx45h)JmWVX; z(wFhlIrZf0rtRvGBjLi-kj;y3f4yVugWX?sEHtK5%sPY%Kd*8O#HzRv>7=MZa_XbUZkU zSI#RsEynIPqwH5rf9w?g`JxdmV}FkLm{)Z2iM=5Gc#I4vZEkl$EgLstpT1RU&0hb- zi8O6iQeo--$G@*)ABZr#2Z%j#=Ap- zuT=THt}%x0p4QSk7x)Ck_;uN>J4a3>g|3e}_R)b3d9HDRlN8#afk#6xX7_2N%9==X zn6z3H2XzUkhIf1?^6KZkg14+cUGc_*hiy3-G(y7K9kfiPg)H7ya(g^p9vHLp&bWSW z_VRkO&Zu_&YpQlw|3TD8kL)JewnCgDHdIOeG!3lM)(oYS3i?tS#5z;> zCtf*sgY*r^;3{`p)}1GX44KqI>OJwFaL&2hcqgh&A9*m#RfsVs&W`BPK4M6t@NMN1 zo4!18O!jo-1hB-#x&+jHKYZv=Lz|pfy8gw}f#+{UO<(%qioJ&iq;}i2oamtAgi(kw zC%*Y$`uU`$6`dnWTG2~I}S3Ze-bUkA^)Ig^z);JVd|J}lO-Y*k7dTv7f z?`uq5YQ`ZN#5d-Ul{dy53d&!1izgCZ%L%%}{oZFQnh>^JeR-@XZ zUWge{c-AlV@0_m3Iiz(}ePoTIwUs?}uFC4WGh$Gl&MDK0kYA82x^&y=$ND~uoOGi5 zmDbhsz0W2>a>`#V8*_@LB54AVS~DKVA-!Uykw*rTCNPBTqH%V*Ngem?eu&?n5i-)a^hwjm0 z0vfTUFg8U`y4e>`+T0jcd399yATBLW=qdAq76cH6Vn|1P#~%-D6};)I355?nD9;D` zB@i`)y+Vsp{vk!E$^#xc<6?g{)^PUP8W7KT&%WM9H?9P*|} z&q#)WD4p7W)XE`SPPK%7*@O*^bCK_(y2M-9Bd{Oi6Md+qtpK8EInAK#$hDulGO}wI( zSC>@oejwBl_iCaSN>FNIW7NKI)W0SvbPY(Qk87veigL;KMlNPPRIz2mXRf=XA&fSj zM<4K*EQDBhd8s15tmrT=lQhzm*7gSd6ichQyliHpGFDr?Amhr0ma}H6{mymG(bguhJbI_rYjs)bcltWRG)P+l zduHXZzxL~fH!xJ{1}%Gyby7399%p1t;QVv0lWNZKG#Ock?9?D?$CLk2{1>(H$$~Q9 z&GA;=2f@NRYZn^T46)@VdL_kwu)(CIbV(KefCUqLZ#3)6bls2k@6X&3FZAl-0n^_i&)pw$h`lsXvx9_#I&UpM7$%~PWNj(hCy`p#V#`Wt^RxI19j+JG z$5c^9HfCd7fkq=}9G&{`G>7Slwh&p)uJ}j$;pTxKrkw&szEwjHL2O%9LmQ60mPwF-)JT$~ zJ?=`4Mnn5TvwO-MAx!jm_#jswU=W1->7$+MDHthu_{d?w&>k%wzR)zwnqJTzHcDz%vw~%9u7iAuVyZ=i9q~$Evq-b-)GX?=Ql0OMxgq-WsRb}3D`kdL zZIluMjC}By)gqD^;i$)nFt&pe!+={v^ZH&_mQWoT6J}e|ziu&HxXpHsi!V4408Z2f zUKvx*$rDk_ua6TwCL0_CAbqACQwS51n2|jWbVEXlpP;@b^M{JZB441c^RyF(*dHTp zSG0;RgzpJm_8iK;L@O$6K^kiDO|d6Se0fNm6f-=7iO9u!9S=SP38c%-1z0 zA{FYCc6h>QP(JWda(9i1v$S?_A)d0n74^qS+o?U~8V|E{c5vV=cABZyV&Kf88K<*@ zfzqzAqoKS#ly(hO@L+8THeYQ;L(Nm#;fGesc$_p}D*jnXq+nN^8p= z2eguNje$0Wf|0fMqncupuu_M3>CWo95;pfM18 za^-%BSx#PKhyr&!nf02~9{mqm>6qYV%fAIi`o)y?s7;VZb@)1J&QEhmD$-MG5p5@> z&Bq=#w8E6eI*HTWVYfP@S}wv!l&_acx>l_tZy7tcj_P{mPTdsqw`U=F4(_+z8P+^K zQK$}aEn9W`j^H=VE>UaWx-`Y|wf4?62HF%HBfA(V7LS*0%|52JT+!a~lFjRs7(1;c z(`r0cN0kv>XEbZ$+mp1m_Pc6zaw^$eYg(*_sBda}=q?WG)b{w0arR4Tu~E%do@fS| zR-21jCfdnbmg=sOALY)!bP%@!Fw38rV-rZP)}aH0zu#A zF!u;Xbg_|P_bC&#QcYdC)c%7WTRXK%(L{AQ#+qnEBef)zTcQlChDk~ zE^{3v`MO^l2w!F`)#XsQ-dZy1nB>w=Gu0)FlCz_kG~z?w5i4uKNPgnDAoJZML*k~m zO2G>MjPn=g^u+wt;r8=q-|LC34qEjluF$h4ePirdPJFD4&!zIdetMU~+oks)iq_q12UG#mZxKAKk$4INAlrPn3wJBRi z!oKFEU6ibE8T=Mv^DkOyj}7ex!O_S&Q9j&>-oy#I%ihphQ1*saobq-Kdv_b}QZM5z zh3{ZXVF&-BI&E7DFKe@6{G`h`_8xrX7?l+ z{g>hfn^;l?`Y*)|zJyn8AB;rO;%CmzK0Etr!2E%`o3`JxG&EaCkiWcta4jtLbzDUZ z{b%t0!Y;bI5yOAe$g7e0SH~=y)_2!)F$q^lO(nkqvid4Z?h{--)9!zIa&v5*cPHn7 zPP1ax?L5+BblXcod2|`&ZCKg!X7$=((`U`}pS?AvF?}nI^U04%FW;`55U{E5xE~HQ z|Mz+ktntDr)S7)M+1|^1LxB3Iq4;mQt8!_2pBsPlT=A6d+<+RfmCgO&zsZ|*k$3R? zEyZ$D4dpElah*5tTX1(u=op63$QR?Z&~KI4`6HI4rG5PNsv^2?#4o9u%#29sJC zFw~d@di`m9bA&W1^n}N%t85qiA--kXoXL5@K!HXR4h~=Of+vMY|&2&D%I;!LX8pZw+h}%e4$&y6X~K4KuD_ z2D?%lS1|2X44fOSkuRmtZN*`2SL*zO?~mO#=YHgt%lY%a^6Z2gY}1mbO!uNDrD8i( z>xFG#ERukkUf9~LX!sU1{1@9>>9;J}Pel5`1e$J>?VSY9kYr;4Pabnu)#Ww6A6hpCNj0^U0=B7%{nQ8sYdju_V?k9n5* z_muy}HTC9fIdQf;H?;b#I;@0{%=LS-_Bd3ucC|c5Jtm%`^T)^u}KAiGT(~mZLa#>{odt*qIHHqC_S-e`a*f&F` z_204Rt89P%z^QU(Vbt$3SYoJ->0xh<4EVZuc;BO8Lw_zDGi})(oMC_q4LhVaV^ zA;$KmXO_1&72{ql|IeobBi8LWb)nZUMV4`ClMI!%jM1ImcBWe!z{kf&zoWl3?e(bi z&+MGvRP-Nmpxg36dq2Cw>2YRZ)bBD_dktx`W^Yy%z4h;q{z@I|AvHYEi?S9s2km{a;nre#o1E^ON{J-Sx>4bc<*?G2+rF#KO)A$ znYlmt=+^&&hxhCmcjBkt`f+b z_mD{+Zwek(-6wTJ)l9WUkdMCiXic}bPV}3zYHdHUX!b_9eZ zip%+Cyrmo|cGz?f_;2Kq`0XnfpR4(P%Ee8IRT`)?vcviXeHjtcGQX&L z>G@?aye#j)fXIB9IX!%s^m(ryCrS^E9Tt~k(7LcS|B610+KA$o5q!ZMX^@?F#y)I+ zmiJ*FK9y9q;q(&z^C!HuePF>TZ2QV=K1tZ99j%0AV2c`M+x1~}e){uatDtqkNrR#% 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

    QK}VU4FVC62b`Zx=uanhvV_+s0WAg*$(U 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 literal 0 HcmV?d00001 diff --git a/testsuite/XSIProject/Scenes/test_0267/ref/reference.log b/testsuite/XSIProject/Scenes/test_0267/ref/reference.log new file mode 100644 index 0000000..dbfb71d --- /dev/null +++ b/testsuite/XSIProject/Scenes/test_0267/ref/reference.log @@ -0,0 +1,65 @@ +======================================================= + Autodesk Softimage 13.2.163.0 +======================================================= + +License information: using [Processing] +00:00:00 199MB | log started Sun Sep 2 22:28:17 2018 +00:00:00 199MB | Arnold 5.2.0.0 [4fb9451c] windows icc-17.0.2 oiio-1.7.17 osl-1.9.9 vdb-4.0.0 clm-1.0.3.513 rlm-12.4.2 2018/08/09 09:37:24 +00:00:00 199MB | running on Jenus, pid=22608 +00:00:00 199MB | 1 x Intel(R) Core(TM) i7-2600K CPU @ 3.40GHz (4 cores, 8 logical) with 16333MB +00:00:00 199MB | Nvidia driver version 391.35 +00:00:00 199MB | Windows 8 Professional (version 6.2, build 9200) +00:00:00 199MB | soft limit for open files raised from 512 to 2048 +00:00:00 199MB | +00:00:00 199MB | loading plugins from C:\Users\lindg\Documents\GitHub\sitoa\dist\Softimage_2015_SP2\Addons\SItoA\Application\Plugins\bin\nt-x86-64\..\plugins ... +00:00:00 199MB | loaded 4 plugins from 2 lib(s) in 0:00.00 +00:00:00 199MB | loading plugins from C:\Users\lindg\Documents\GitHub\sitoa\dist\Softimage_2015_SP2\Addons\SItoA\Application\Plugins\bin\nt-x86-64 ... +00:00:00 199MB WARNING | unable to load dynamic library C:\Users\lindg\Documents\GitHub\sitoa\dist\Softimage_2015_SP2\Addons\SItoA\Application\Plugins\bin\nt-x86-64\optix_denoiser.51.dll: The specified module could not be found. + +00:00:00 200MB | loaded 103 plugins from 1 lib(s) in 0:00.01 + + + + +00:00:00 206MB | +00:00:00 206MB | releasing resources +00:00:00 205MB | Arnold shutdown +# INFO : [sitoa] SItoA 5.2.0 win loaded. +# INFO : [sitoa] Arnold 5.2.0.0 detected. +Application.InstallCustomPreferences("ArnoldRenderPreferences", "Arnold Render") +Application.RefreshCustomPreferences() +COMMAND: -processing -script "execute_test.js" -main main +# INFO : C:\Users\lindg\Documents\GitHub\sitoa\dist\Softimage_2015_SP2\Addons\SItoA\Application\Plugins\bin\nt-x86-64\ +>Loading: C:\Users\lindg\Documents\GitHub\sitoa\build\windows_x86_64\msvc_opt\si_13000\testsuite\test_0267\test.scn... +# INFO : 4034 - Loaded scene was created with build number: 13.2.163.0 - compatibility version: 1300 +Application.OpenScene("C:\\Users\\lindg\\Documents\\GitHub\\sitoa\\build\\windows_x86_64\\msvc_opt\\si_13000\\testsuite\\test_0267\\test.scn", "", "") +Application.SetValue("Passes.RenderOptions.ImageLockAspectRatio", False, "") +Application.SetValue("Passes.RenderOptions.ImageWidth", 160, "") +Application.SetValue("Passes.RenderOptions.ImageHeight", 120, "") +Application.SetValue("Passes.Default_Pass.Main.Filename", "C:\\Users\\lindg\\Documents\\GitHub\\sitoa\\build\\windows_x86_64\\msvc_opt\\si_13000\\testsuite\\test_0267\\testrender.####.tif", "") +Application.SetValue("Passes.Default_Pass.Main.Format", "tif", "") +Application.SetValue("Passes.Arnold_Render_Options.output_tiff_tiled", 0, "") +Application.SetValue("Passes.Arnold_Render_Options.enable_log_file", True, "") +Application.SetValue("Passes.Arnold_Render_Options.log_level", 1, "") +Application.SetValue("Passes.Arnold_Render_Options.output_file_tagdir_log", "C:\\Users\\lindg\\Documents\\GitHub\\sitoa\\build\\windows_x86_64\\msvc_opt\\si_13000\\testsuite\\test_0267", "") +# ERROR : 2000 - Argument 0 (Target) is invalid +# ERROR : 2001-EDIT-SetValue - Argument 0 is invalid +Application.SetValue("Passes.Arnold_Render_Options.shaders_path", "C:\\Users\\lindg\\Documents\\GitHub\\sitoa\\build\\windows_x86_64\\msvc_opt\\si_13000\\shaders", "") +Command failed, returned -2147024809 +Application.SetValue("Passes.Arnold_Render_Options.textures_path", "C:\\Users\\lindg\\Documents\\GitHub\\sitoa\\testsuite\\XSIProject\\Pictures", "") +Application.SetValue("Passes.Arnold_Render_Options.save_texture_paths", False, "") +# INFO : Rendering pass 'Default_Pass'... +# INFO : Rendering frame 1 (0.0% done) +# WARNING : [arnold] unable to load dynamic library C:\Users\lindg\Documents\GitHub\sitoa\dist\Softimage_2015_SP2\Addons\SItoA\Application\Plugins\bin\nt-x86-64\optix_denoiser.51.dll: The specified module could not be found. +# +# INFO : [sitoa] Frame 1 exported to Arnold in 0.105 sec. +# INFO : Render completed (100% done) +Application.RenderAllPasses("", "", "", "", "siRenderVerbosityDefault") +Warning: return value of the executed script is not an integer +# INFO : Characters has been unloaded. +# INFO : polymatricksPlugin has been unloaded. +# INFO : [sitoa] SItoA 5.2.0 win has been unloaded. +# INFO : TransformUVsPlugin has been unloaded. +# INFO : FBX-XSI import/export Plug-in has been unloaded. +# INFO : Unfold3D Plugin has been unloaded. + diff --git a/testsuite/XSIProject/Scenes/test_0267/ref/reference.tif b/testsuite/XSIProject/Scenes/test_0267/ref/reference.tif new file mode 100644 index 0000000000000000000000000000000000000000..52c700334428ab1f1a19aef246812887ec6ca8d9 GIT binary patch literal 22441 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

    F0n9C=w`v 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 z

    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 From ffe36e1269ac2e2cd09037d9825cd938b48381b8 Mon Sep 17 00:00:00 2001 From: Jens Lindgren Date: Mon, 3 Sep 2018 00:52:13 +0200 Subject: [PATCH 065/159] update reference of test_0161 --- .../Scenes/test_0161/ref/reference.log | 121 +++++++++--------- .../Scenes/test_0161/ref/reference.tif | Bin 18008 -> 14562 bytes 2 files changed, 62 insertions(+), 59 deletions(-) diff --git a/testsuite/XSIProject/Scenes/test_0161/ref/reference.log b/testsuite/XSIProject/Scenes/test_0161/ref/reference.log index c859cd9..009e0d0 100644 --- a/testsuite/XSIProject/Scenes/test_0161/ref/reference.log +++ b/testsuite/XSIProject/Scenes/test_0161/ref/reference.log @@ -1,59 +1,62 @@ -======================================================= - Autodesk Softimage 11.1.57.0 -======================================================= - -License information: using [Processing] -00:00:00 161MB | log started Wed Jun 7 12:06:21 2017 -00:00:00 161MB | Arnold 5.0.0.3 [baf78363] windows icc-17.0.2 oiio-1.7.12 osl-1.8.2 vdb-4.0.0 rlm-12.2.2 2017/05/31 10:45:24 -00:00:00 161MB | running on cavallo, pid=4108 -00:00:00 161MB | 1 x Intel(R) Core(TM) i7-4790 CPU @ 3.60GHz (4 cores, 8 logical) with 16334MB -00:00:00 161MB | Windows 8 Professional (version 6.2, build 9200) -00:00:00 161MB | soft limit for open files raised from 512 to 2048 -00:00:00 161MB | -00:00:00 161MB | loading plugins from C:\dev\Mia\Arnold\Extra_Shaders ... -00:00:00 161MB | loaded 1 plugins from 1 lib(s) and 1 OSL shaders in 0:00.00 -00:00:00 161MB | loading plugins from C:\Users\Stefano\Autodesk\Softimage_2013_SP1\Addons\SItoA\Application\Plugins\bin\nt-x86-64 ... -00:00:00 162MB | loaded 103 plugins from 1 lib(s) in 0:00.00 - - - - -00:00:00 167MB | -00:00:00 167MB | releasing resources -00:00:00 166MB | Arnold shutdown -// INFO : [sitoa] SItoA 4.0.0 win loaded. -// INFO : [sitoa] Arnold 5.0.0.3 detected. -InstallCustomPreferences("ArnoldRenderPreferences", "Arnold Render"); -COMMAND: -processing -script "execute_test.js" -main main -// INFO : C:\Users\Stefano\Autodesk\Softimage_2013_SP1\Addons\SItoA\Application\Plugins\bin\nt-x86-64\ ->Loading: C:\dev\Mia\Arnold\sitoa\build\windows_x86_64\msvc_opt\si_11000\testsuite\test_0161\test.scn... -// INFO : 4034 - Loaded scene was created with build number: 11.1.57.0 - compatibility version: 1100 -OpenScene("C:\\dev\\Mia\\Arnold\\sitoa\\build\\windows_x86_64\\msvc_opt\\si_11000\\testsuite\\test_0161\\test.scn", null, null); -SetValue("Passes.RenderOptions.ImageLockAspectRatio", false, null); -SetValue("Passes.RenderOptions.ImageWidth", 160, null); -SetValue("Passes.RenderOptions.ImageHeight", 120, null); -SetValue("Passes.Default_Pass.Main.Filename", "C:\\dev\\Mia\\Arnold\\sitoa\\build\\windows_x86_64\\msvc_opt\\si_11000\\testsuite\\test_0161\\testrender.####.tif", null); -SetValue("Passes.Default_Pass.Main.Format", "tif", null); -SetValue("Passes.Arnold_Render_Options.output_tiff_tiled", 0, null); -SetValue("Passes.Arnold_Render_Options.enable_log_file", true, null); -SetValue("Passes.Arnold_Render_Options.log_level", 1, null); -SetValue("Passes.Arnold_Render_Options.output_file_tagdir_log", "C:\\dev\\Mia\\Arnold\\sitoa\\build\\windows_x86_64\\msvc_opt\\si_11000\\testsuite\\test_0161", null); -// ERROR : 2000 - Argument 0 (Target) is invalid -// ERROR : 2001-EDIT-SetValue - Argument 0 is invalid -SetValue("Passes.Arnold_Render_Options.shaders_path", "C:\\dev\\Mia\\Arnold\\sitoa\\build\\windows_x86_64\\msvc_opt\\si_11000\\shaders", null); -Command failed, returned -2147024809 -SetValue("Passes.Arnold_Render_Options.textures_path", "C:\\dev\\Mia\\Arnold\\sitoa\\testsuite\\XSIProject\\Pictures", null); -SetValue("Passes.Arnold_Render_Options.save_texture_paths", false, null); -// INFO : Rendering pass 'Default_Pass'... -// INFO : Rendering frame 1 (0.0% done) -// WARNING : [arnold] node entry "standard" is deprecated, and may be removed in the future -// INFO : [sitoa] Frame 1 exported to Arnold in 0.028 sec. -RenderAllPasses(null, null, null, null, siRenderVerbosityDefault); -Warning: return value of the executed script is not an integer -// INFO : Render completed (100% done) -// INFO : Characters has been unloaded. -// INFO : TransformUVsPlugin has been unloaded. -// INFO : [sitoa] SItoA 4.0.0 win has been unloaded. -// INFO : polymatricksPlugin has been unloaded. -// INFO : FBX-XSI import/export Plug-in has been unloaded. -// INFO : Unfold3D Plugin has been unloaded. +======================================================= + Autodesk Softimage 13.2.163.0 +======================================================= + +License information: using [Processing] +00:00:00 199MB | log started Mon Sep 3 00:49:09 2018 +00:00:00 199MB | Arnold 5.2.0.0 [4fb9451c] windows icc-17.0.2 oiio-1.7.17 osl-1.9.9 vdb-4.0.0 clm-1.0.3.513 rlm-12.4.2 2018/08/09 09:37:24 +00:00:00 199MB | running on Jenus, pid=20028 +00:00:00 199MB | 1 x Intel(R) Core(TM) i7-2600K CPU @ 3.40GHz (4 cores, 8 logical) with 16333MB +00:00:00 199MB | Nvidia driver version 391.35 +00:00:00 199MB | Windows 8 Professional (version 6.2, build 9200) +00:00:00 199MB | soft limit for open files raised from 512 to 2048 +00:00:00 199MB | +00:00:00 199MB | loading plugins from C:\Users\lindg\Documents\GitHub\sitoa\dist\Softimage_2015_SP2\Addons\SItoA\Application\Plugins\bin\nt-x86-64\..\plugins ... +00:00:00 199MB | loaded 4 plugins from 2 lib(s) in 0:00.00 +00:00:00 199MB | loading plugins from C:\Users\lindg\Documents\GitHub\sitoa\dist\Softimage_2015_SP2\Addons\SItoA\Application\Plugins\bin\nt-x86-64 ... +00:00:00 200MB WARNING | unable to load dynamic library C:\Users\lindg\Documents\GitHub\sitoa\dist\Softimage_2015_SP2\Addons\SItoA\Application\Plugins\bin\nt-x86-64\optix_denoiser.51.dll: The specified module could not be found. + +00:00:00 200MB | loaded 103 plugins from 1 lib(s) in 0:00.01 + + + + +00:00:00 207MB | +00:00:00 207MB | releasing resources +00:00:00 206MB | Arnold shutdown +# INFO : [sitoa] SItoA 5.2.0 win loaded. +# INFO : [sitoa] Arnold 5.2.0.0 detected. +Application.InstallCustomPreferences("ArnoldRenderPreferences", "Arnold Render") +Application.RefreshCustomPreferences() +COMMAND: -processing -script "execute_test.js" -main main +# INFO : C:\Users\lindg\Documents\GitHub\sitoa\dist\Softimage_2015_SP2\Addons\SItoA\Application\Plugins\bin\nt-x86-64\ +>Loading: C:\Users\lindg\Documents\GitHub\sitoa\build\windows_x86_64\msvc_opt\si_13000\testsuite\test_0161\test.scn... +# INFO : 4034 - Loaded scene was created with build number: 13.2.163.0 - compatibility version: 1300 +Application.OpenScene("C:\\Users\\lindg\\Documents\\GitHub\\sitoa\\build\\windows_x86_64\\msvc_opt\\si_13000\\testsuite\\test_0161\\test.scn", "", "") +Application.SetValue("Passes.RenderOptions.ImageLockAspectRatio", False, "") +Application.SetValue("Passes.RenderOptions.ImageWidth", 160, "") +Application.SetValue("Passes.RenderOptions.ImageHeight", 120, "") +Application.SetValue("Passes.Default_Pass.Main.Filename", "C:\\Users\\lindg\\Documents\\GitHub\\sitoa\\build\\windows_x86_64\\msvc_opt\\si_13000\\testsuite\\test_0161\\testrender.####.tif", "") +Application.SetValue("Passes.Default_Pass.Main.Format", "tif", "") +Application.SetValue("Passes.Arnold_Render_Options.output_tiff_tiled", 0, "") +Application.SetValue("Passes.Arnold_Render_Options.enable_log_file", True, "") +Application.SetValue("Passes.Arnold_Render_Options.log_level", 1, "") +Application.SetValue("Passes.Arnold_Render_Options.output_file_tagdir_log", "C:\\Users\\lindg\\Documents\\GitHub\\sitoa\\build\\windows_x86_64\\msvc_opt\\si_13000\\testsuite\\test_0161", "") +Application.SetValue("Passes.Arnold_Render_Options.textures_path", "C:\\Users\\lindg\\Documents\\GitHub\\sitoa\\testsuite\\XSIProject\\Pictures", "") +Application.SetValue("Passes.Arnold_Render_Options.save_texture_paths", False, "") +# INFO : Rendering pass 'Default_Pass'... +# INFO : Rendering frame 1 (0.0% done) +# WARNING : [arnold] unable to load dynamic library C:\Users\lindg\Documents\GitHub\sitoa\dist\Softimage_2015_SP2\Addons\SItoA\Application\Plugins\bin\nt-x86-64\optix_denoiser.51.dll: The specified module could not be found. +# +# WARNING : [arnold] node entry "standard" is deprecated, and may be removed in the future +# INFO : [sitoa] Frame 1 exported to Arnold in 0.063 sec. +# INFO : Render completed (100% done) +Application.RenderAllPasses("", "", "", "", "siRenderVerbosityDefault") +Warning: return value of the executed script is not an integer +# INFO : Characters has been unloaded. +# INFO : polymatricksPlugin has been unloaded. +# INFO : [sitoa] SItoA 5.2.0 win has been unloaded. +# INFO : TransformUVsPlugin has been unloaded. +# INFO : FBX-XSI import/export Plug-in has been unloaded. +# INFO : Unfold3D Plugin has been unloaded. + diff --git a/testsuite/XSIProject/Scenes/test_0161/ref/reference.tif b/testsuite/XSIProject/Scenes/test_0161/ref/reference.tif index 2a77164da934a2e27229bd26e35bb2fc29352a4c..de5691dcd23115acaf920776adeabc4774029c70 100644 GIT binary patch delta 13576 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 LQm}%Upwa&WW&vla delta 16390 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 From af666e318b5774d799390844168a433a07a489db Mon Sep 17 00:00:00 2001 From: Jens Lindgren Date: Mon, 3 Sep 2018 00:52:27 +0200 Subject: [PATCH 066/159] update test_0250 --- .../XSIProject/Scenes/test_0250/data/test.scn | Bin 558592 -> 618496 bytes .../Scenes/test_0250/ref/reference.log | 118 +++++++++--------- .../Scenes/test_0250/ref/reference.tif | Bin 31258 -> 15366 bytes 3 files changed, 60 insertions(+), 58 deletions(-) diff --git a/testsuite/XSIProject/Scenes/test_0250/data/test.scn b/testsuite/XSIProject/Scenes/test_0250/data/test.scn index 653dfa5c955793b677d69a64c125c69ee578cc2a..4555771819a02ada866faa94d035630f2c5e7230 100644 GIT binary patch delta 163891 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≀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 diff --git a/testsuite/XSIProject/Scenes/test_0250/ref/reference.log b/testsuite/XSIProject/Scenes/test_0250/ref/reference.log index 6b57c7d..24042e6 100644 --- a/testsuite/XSIProject/Scenes/test_0250/ref/reference.log +++ b/testsuite/XSIProject/Scenes/test_0250/ref/reference.log @@ -1,58 +1,60 @@ -======================================================= - Autodesk Softimage 11.1.57.0 -======================================================= - -License information: using [Processing] -00:00:00 161MB | log started Wed Jun 7 12:24:58 2017 -00:00:00 161MB | Arnold 5.0.0.3 [baf78363] windows icc-17.0.2 oiio-1.7.12 osl-1.8.2 vdb-4.0.0 rlm-12.2.2 2017/05/31 10:45:24 -00:00:00 161MB | running on cavallo, pid=11652 -00:00:00 161MB | 1 x Intel(R) Core(TM) i7-4790 CPU @ 3.60GHz (4 cores, 8 logical) with 16334MB -00:00:00 161MB | Windows 8 Professional (version 6.2, build 9200) -00:00:00 161MB | soft limit for open files raised from 512 to 2048 -00:00:00 161MB | -00:00:00 161MB | loading plugins from C:\dev\Mia\Arnold\Extra_Shaders ... -00:00:00 161MB | loaded 1 plugins from 1 lib(s) and 1 OSL shaders in 0:00.00 -00:00:00 161MB | loading plugins from C:\Users\Stefano\Autodesk\Softimage_2013_SP1\Addons\SItoA\Application\Plugins\bin\nt-x86-64 ... -00:00:00 162MB | loaded 103 plugins from 1 lib(s) in 0:00.00 - - - - -00:00:00 167MB | -00:00:00 167MB | releasing resources -00:00:00 166MB | Arnold shutdown -// INFO : [sitoa] SItoA 4.0.0 win loaded. -// INFO : [sitoa] Arnold 5.0.0.3 detected. -InstallCustomPreferences("ArnoldRenderPreferences", "Arnold Render"); -COMMAND: -processing -script "execute_test.js" -main main -// INFO : C:\Users\Stefano\Autodesk\Softimage_2013_SP1\Addons\SItoA\Application\Plugins\bin\nt-x86-64\ ->Loading: C:\dev\Mia\Arnold\sitoa\build\windows_x86_64\msvc_opt\si_11000\testsuite\test_0250\test.scn... -// INFO : 4034 - Loaded scene was created with build number: 11.1.57.0 - compatibility version: 1100 -OpenScene("C:\\dev\\Mia\\Arnold\\sitoa\\build\\windows_x86_64\\msvc_opt\\si_11000\\testsuite\\test_0250\\test.scn", null, null); -SetValue("Passes.RenderOptions.ImageLockAspectRatio", false, null); -SetValue("Passes.RenderOptions.ImageWidth", 160, null); -SetValue("Passes.RenderOptions.ImageHeight", 120, null); -SetValue("Passes.Default_Pass.Main.Filename", "C:\\dev\\Mia\\Arnold\\sitoa\\build\\windows_x86_64\\msvc_opt\\si_11000\\testsuite\\test_0250\\testrender.####.tif", null); -SetValue("Passes.Default_Pass.Main.Format", "tif", null); -SetValue("Passes.Arnold_Render_Options.output_tiff_tiled", 0, null); -SetValue("Passes.Arnold_Render_Options.enable_log_file", true, null); -SetValue("Passes.Arnold_Render_Options.log_level", 1, null); -SetValue("Passes.Arnold_Render_Options.output_file_tagdir_log", "C:\\dev\\Mia\\Arnold\\sitoa\\build\\windows_x86_64\\msvc_opt\\si_11000\\testsuite\\test_0250", null); -// ERROR : 2000 - Argument 0 (Target) is invalid -// ERROR : 2001-EDIT-SetValue - Argument 0 is invalid -SetValue("Passes.Arnold_Render_Options.shaders_path", "C:\\dev\\Mia\\Arnold\\sitoa\\build\\windows_x86_64\\msvc_opt\\si_11000\\shaders", null); -Command failed, returned -2147024809 -SetValue("Passes.Arnold_Render_Options.textures_path", "C:\\dev\\Mia\\Arnold\\sitoa\\testsuite\\XSIProject\\Pictures", null); -SetValue("Passes.Arnold_Render_Options.save_texture_paths", false, null); -// INFO : Rendering pass 'Default_Pass'... -// INFO : Rendering frame 1 (0.0% done) -// INFO : [sitoa] Frame 1 exported to Arnold in 0.072 sec. -RenderAllPasses(null, null, null, null, siRenderVerbosityDefault); -Warning: return value of the executed script is not an integer -// INFO : Render completed (100% done) -// INFO : Characters has been unloaded. -// INFO : TransformUVsPlugin has been unloaded. -// INFO : [sitoa] SItoA 4.0.0 win has been unloaded. -// INFO : polymatricksPlugin has been unloaded. -// INFO : FBX-XSI import/export Plug-in has been unloaded. -// INFO : Unfold3D Plugin has been unloaded. +======================================================= + Autodesk Softimage 13.2.163.0 +======================================================= + +License information: using [Processing] +00:00:00 198MB | log started Mon Sep 3 00:48:42 2018 +00:00:00 198MB | Arnold 5.2.0.0 [4fb9451c] windows icc-17.0.2 oiio-1.7.17 osl-1.9.9 vdb-4.0.0 clm-1.0.3.513 rlm-12.4.2 2018/08/09 09:37:24 +00:00:00 198MB | running on Jenus, pid=23020 +00:00:00 198MB | 1 x Intel(R) Core(TM) i7-2600K CPU @ 3.40GHz (4 cores, 8 logical) with 16333MB +00:00:00 198MB | Nvidia driver version 391.35 +00:00:00 198MB | Windows 8 Professional (version 6.2, build 9200) +00:00:00 198MB | soft limit for open files raised from 512 to 2048 +00:00:00 198MB | +00:00:00 198MB | loading plugins from C:\Users\lindg\Documents\GitHub\sitoa\dist\Softimage_2015_SP2\Addons\SItoA\Application\Plugins\bin\nt-x86-64\..\plugins ... +00:00:00 198MB | loaded 4 plugins from 2 lib(s) in 0:00.00 +00:00:00 198MB | loading plugins from C:\Users\lindg\Documents\GitHub\sitoa\dist\Softimage_2015_SP2\Addons\SItoA\Application\Plugins\bin\nt-x86-64 ... +00:00:00 198MB WARNING | unable to load dynamic library C:\Users\lindg\Documents\GitHub\sitoa\dist\Softimage_2015_SP2\Addons\SItoA\Application\Plugins\bin\nt-x86-64\optix_denoiser.51.dll: The specified module could not be found. + +00:00:00 199MB | loaded 103 plugins from 1 lib(s) in 0:00.01 + + + + +00:00:00 205MB | +00:00:00 205MB | releasing resources +00:00:00 204MB | Arnold shutdown +# INFO : [sitoa] SItoA 5.2.0 win loaded. +# INFO : [sitoa] Arnold 5.2.0.0 detected. +Application.RefreshCustomPreferences() +COMMAND: -processing -script "execute_test.js" -main main +# INFO : C:\Users\lindg\Documents\GitHub\sitoa\dist\Softimage_2015_SP2\Addons\SItoA\Application\Plugins\bin\nt-x86-64\ +>Loading: C:\Users\lindg\Documents\GitHub\sitoa\build\windows_x86_64\msvc_opt\si_13000\testsuite\test_0250\test.scn... +# INFO : 4034 - Loaded scene was created with build number: 13.2.163.0 - compatibility version: 1300 +Application.OpenScene("C:\\Users\\lindg\\Documents\\GitHub\\sitoa\\build\\windows_x86_64\\msvc_opt\\si_13000\\testsuite\\test_0250\\test.scn", "", "") +Application.SetValue("Passes.RenderOptions.ImageLockAspectRatio", False, "") +Application.SetValue("Passes.RenderOptions.ImageWidth", 160, "") +Application.SetValue("Passes.RenderOptions.ImageHeight", 120, "") +Application.SetValue("Passes.Default_Pass.Main.Filename", "C:\\Users\\lindg\\Documents\\GitHub\\sitoa\\build\\windows_x86_64\\msvc_opt\\si_13000\\testsuite\\test_0250\\testrender.####.tif", "") +Application.SetValue("Passes.Default_Pass.Main.Format", "tif", "") +Application.SetValue("Passes.Arnold_Render_Options.output_tiff_tiled", 0, "") +Application.SetValue("Passes.Arnold_Render_Options.enable_log_file", True, "") +Application.SetValue("Passes.Arnold_Render_Options.log_level", 1, "") +Application.SetValue("Passes.Arnold_Render_Options.output_file_tagdir_log", "C:\\Users\\lindg\\Documents\\GitHub\\sitoa\\build\\windows_x86_64\\msvc_opt\\si_13000\\testsuite\\test_0250", "") +Application.SetValue("Passes.Arnold_Render_Options.textures_path", "C:\\Users\\lindg\\Documents\\GitHub\\sitoa\\testsuite\\XSIProject\\Pictures", "") +Application.SetValue("Passes.Arnold_Render_Options.save_texture_paths", False, "") +# INFO : Rendering pass 'Default_Pass'... +# INFO : Rendering frame 1 (0.0% done) +# WARNING : [arnold] unable to load dynamic library C:\Users\lindg\Documents\GitHub\sitoa\dist\Softimage_2015_SP2\Addons\SItoA\Application\Plugins\bin\nt-x86-64\optix_denoiser.51.dll: The specified module could not be found. +# +# INFO : [sitoa] Frame 1 exported to Arnold in 0.087 sec. +# INFO : Render completed (100% done) +Application.RenderAllPasses("", "", "", "", "siRenderVerbosityDefault") +Warning: return value of the executed script is not an integer +# INFO : Characters has been unloaded. +# INFO : polymatricksPlugin has been unloaded. +# INFO : [sitoa] SItoA 5.2.0 win has been unloaded. +# INFO : TransformUVsPlugin has been unloaded. +# INFO : FBX-XSI import/export Plug-in has been unloaded. +# INFO : Unfold3D Plugin has been unloaded. + diff --git a/testsuite/XSIProject/Scenes/test_0250/ref/reference.tif b/testsuite/XSIProject/Scenes/test_0250/ref/reference.tif index a9abc00ef701b99e6418502d5b503ab63389435d..77e3d2b95d49ffc23a789decf7480d7c65d5e65f 100644 GIT binary patch delta 14736 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

    SsAY}21c7B}fmD|2zJ=txy#>7~x==+P0rQjfO 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 literal 31258 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 From da08ec8ccf4db9bf3f744b00b8c4f2b8e15f744d Mon Sep 17 00:00:00 2001 From: Jens Lindgren Date: Mon, 3 Sep 2018 02:42:13 +0200 Subject: [PATCH 067/159] switch svn info to git / github info and link in testreport --- testsuite/SConscript | 4 ++-- tools/python/build_tools.py | 21 ++++++++++++++------- 2 files changed, 16 insertions(+), 9 deletions(-) diff --git a/testsuite/SConscript b/testsuite/SConscript index d52b660..8c32cab 100644 --- a/testsuite/SConscript +++ b/testsuite/SConscript @@ -434,7 +434,7 @@ SItoA testsuite

    SItoA %s testsuite

    -%s
    %s
    +
    %s
    @@ -451,7 +451,7 @@ SItoA testsuite
     
     
     
    -''' % (SITOA_VERSION, REVISION, URL, str(PATTERNS + TAGS), len(source), passed, (100.0 * passed) / (passed + failed), failed, (100.0 * failed) / (passed + failed), TOTAL_RUNNING_TIME)) +''' % (SITOA_VERSION, URL, REVISION, str(PATTERNS + TAGS), len(source), passed, (100.0 * passed) / (passed + failed), failed, (100.0 * failed) / (passed + failed), TOTAL_RUNNING_TIME)) outfile.write(''' diff --git a/tools/python/build_tools.py b/tools/python/build_tools.py index b4da12c..d44e8b7 100644 --- a/tools/python/build_tools.py +++ b/tools/python/build_tools.py @@ -156,17 +156,24 @@ def get_arnold_version(path, components = 4): ## This function will give us the information we need about the latest snv revision of the root arnold directory def get_latest_revision(): - p = subprocess.Popen('svn info .', shell=True, stdout = subprocess.PIPE) - retcode = p.wait() - revision = 'not found' url = 'not found' + + p = subprocess.Popen('git status -b --porcelain=2', shell=True, stdout = subprocess.PIPE) + retcode = p.wait() + + for line in p.stdout: + if line.startswith('# branch.oid '): + revision = line.split()[-1] + + p = subprocess.Popen('git remote get-url origin', shell=True, stdout = subprocess.PIPE) + retcode = p.wait() for line in p.stdout: - if line.startswith('URL:'): - url = line[5:].strip() - elif line.startswith('Last Changed Rev:'): - revision = 'r' + line[18:].strip() + if line.startswith('https://'): + url = line.strip() + url = url[:-4] + url += '/commit/' + revision return (revision, url) From 0bc1f85726be042988f18e659721b8dcc93ae0d3 Mon Sep 17 00:00:00 2001 From: Jens Lindgren Date: Mon, 3 Sep 2018 02:55:40 +0200 Subject: [PATCH 068/159] tiny commit fix --- testsuite/SConscript | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/testsuite/SConscript b/testsuite/SConscript index 8c32cab..4e605a7 100644 --- a/testsuite/SConscript +++ b/testsuite/SConscript @@ -197,7 +197,7 @@ function main(path) try { SetValue("Passes.Arnold_Render_Options.output_file_tagdir_log", "%s", null);} catch(e) {} - + try { SetValue("Passes.Arnold_Render_Options.textures_path", "%s", null); From 0f330d67cc4d3800dc9d64211b66879cb4026503 Mon Sep 17 00:00:00 2001 From: Jens Lindgren Date: Mon, 3 Sep 2018 02:58:20 +0200 Subject: [PATCH 069/159] comment fix --- tools/python/build_tools.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/python/build_tools.py b/tools/python/build_tools.py index d44e8b7..1b0cb5b 100644 --- a/tools/python/build_tools.py +++ b/tools/python/build_tools.py @@ -154,7 +154,7 @@ def get_arnold_version(path, components = 4): version += '.' + FIX_VERSION return version -## This function will give us the information we need about the latest snv revision of the root arnold directory +## This function will give us the information we need about the latest git commit def get_latest_revision(): revision = 'not found' url = 'not found' From 28310d4714f363aedcb938d17d844a70753a2a59 Mon Sep 17 00:00:00 2001 From: Jens Lindgren Date: Mon, 3 Sep 2018 03:20:05 +0200 Subject: [PATCH 070/159] trim revision a little --- testsuite/SConscript | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/testsuite/SConscript b/testsuite/SConscript index 4e605a7..65108ec 100644 --- a/testsuite/SConscript +++ b/testsuite/SConscript @@ -451,7 +451,7 @@ SItoA testsuite

    -''' % (SITOA_VERSION, URL, REVISION, str(PATTERNS + TAGS), len(source), passed, (100.0 * passed) / (passed + failed), failed, (100.0 * failed) / (passed + failed), TOTAL_RUNNING_TIME)) +''' % (SITOA_VERSION, URL, REVISION[:7], str(PATTERNS + TAGS), len(source), passed, (100.0 * passed) / (passed + failed), failed, (100.0 * failed) / (passed + failed), TOTAL_RUNNING_TIME)) outfile.write(''' From 8ee4f50132dff92e60ec666a0925de110b18a161 Mon Sep 17 00:00:00 2001 From: Jens Lindgren Date: Tue, 4 Sep 2018 21:36:16 +0200 Subject: [PATCH 071/159] add arnold path to PATH --- plugins/sitoa/sitoa.cpp | 67 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) diff --git a/plugins/sitoa/sitoa.cpp b/plugins/sitoa/sitoa.cpp index 292e8ff..38781c3 100644 --- a/plugins/sitoa/sitoa.cpp +++ b/plugins/sitoa/sitoa.cpp @@ -22,6 +22,41 @@ using namespace XSI; SITOA_CALLBACK XSILoadPlugin(PluginRegistrar& in_reg) { + // the arnold path needs to be in PATH for optix_denoiser.dll to be found + // we don't know if Linux is affected so lets just implement it for Windows right now + // https://github.com/Autodesk/sitoa/issues/8 + #ifdef _WINDOWS + // get pluginPath and remove trailing slash + CString pluginPath = in_reg.GetOriginPath(); + pluginPath.TrimRight(L"\\"); + + // get PATH env + char *pValue; + size_t envBufSize; + int err = _dupenv_s(&pValue, &envBufSize, "PATH"); + if (err) + GetMessageQueue()->LogMsg(L"[sitoa] Failed to retrieve PATH environment.", siErrorMsg); + else + { + const CString currentPath = pValue; + free(pValue); + + // check so that pluginPath isn't already in PATH + if (currentPath.FindString(pluginPath) == UINT_MAX) + { + // add pluginPath to begining of PATH + string envPath = pluginPath.GetAsciiString(); + envPath += ";"; + envPath += currentPath.GetAsciiString(); + + // set the new path + err = _putenv_s("PATH", envPath.c_str()); + if (err) + GetMessageQueue()->LogMsg(L"[sitoa] Failed to add Arnold path to PATH environment.", siErrorMsg); + } + } + #endif + // Plugins names are referenced from other cpps so // DO NOT change their names. (ex: GetPlugin("Arnold Render")) in_reg.PutAuthor(L"SolidAngle"); @@ -97,6 +132,38 @@ SITOA_CALLBACK XSILoadPlugin(PluginRegistrar& in_reg) SITOA_CALLBACK XSIUnloadPlugin(PluginRegistrar& in_reg) { + // lets remove pluginPath from PATH + // https://github.com/Autodesk/sitoa/issues/8 + #ifdef _WINDOWS + // get pluginPath and remove trailing slash + CString pluginPath = in_reg.GetOriginPath(); + pluginPath.TrimRight(L"\\"); + + // get PATH env + char *pValue; + size_t envBufSize; + int err = _dupenv_s(&pValue, &envBufSize, "PATH"); + if (err) + Application().LogMessage(L"[sitoa] Failed to retrieve PATH environment.", siErrorMsg); + else + { + const CString currentPath = pValue; + free(pValue); + + // check so that pluginPath is in beginning of PATH + if (currentPath.FindString(pluginPath) == 0) + { + // remove pluginPath; from currentPath + string envPath = currentPath.GetSubString(pluginPath.Length()+1).GetAsciiString(); + + // set the new PATH + err = _putenv_s("PATH", envPath.c_str()); + if (err) + Application().LogMessage(L"[sitoa] Failed to remove Arnold path from PATH environment.", siErrorMsg); + } + } + #endif + Application().LogMessage(L"[sitoa] SItoA " + GetSItoAVersion() + L" has been unloaded."); return CStatus::OK; } From 6a693d951c97759c9c9ef70fe23eab4d8260d3db Mon Sep 17 00:00:00 2001 From: Jens Lindgren Date: Tue, 4 Sep 2018 21:53:19 +0200 Subject: [PATCH 072/159] simplify code a bit --- plugins/sitoa/sitoa.cpp | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/plugins/sitoa/sitoa.cpp b/plugins/sitoa/sitoa.cpp index 38781c3..8a3487c 100644 --- a/plugins/sitoa/sitoa.cpp +++ b/plugins/sitoa/sitoa.cpp @@ -44,13 +44,11 @@ SITOA_CALLBACK XSILoadPlugin(PluginRegistrar& in_reg) // check so that pluginPath isn't already in PATH if (currentPath.FindString(pluginPath) == UINT_MAX) { - // add pluginPath to begining of PATH - string envPath = pluginPath.GetAsciiString(); - envPath += ";"; - envPath += currentPath.GetAsciiString(); + // add pluginPath to beginning of PATH + CString envPath = pluginPath + L";" + currentPath; // set the new path - err = _putenv_s("PATH", envPath.c_str()); + err = _putenv_s("PATH", envPath.GetAsciiString()); if (err) GetMessageQueue()->LogMsg(L"[sitoa] Failed to add Arnold path to PATH environment.", siErrorMsg); } @@ -154,10 +152,10 @@ SITOA_CALLBACK XSIUnloadPlugin(PluginRegistrar& in_reg) if (currentPath.FindString(pluginPath) == 0) { // remove pluginPath; from currentPath - string envPath = currentPath.GetSubString(pluginPath.Length()+1).GetAsciiString(); + CString envPath = currentPath.GetSubString(pluginPath.Length()+1); // set the new PATH - err = _putenv_s("PATH", envPath.c_str()); + err = _putenv_s("PATH", envPath.GetAsciiString()); if (err) Application().LogMessage(L"[sitoa] Failed to remove Arnold path from PATH environment.", siErrorMsg); } From 1e7469400eb4ed18f66e7525f579959b176076f0 Mon Sep 17 00:00:00 2001 From: Jens Lindgren Date: Mon, 17 Sep 2018 22:15:05 +0200 Subject: [PATCH 073/159] add versioning info --- README.md | 8 +++++++- config/custom_linux.py | 2 +- config/custom_windows.py | 2 +- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index e14704a..8e2234f 100644 --- a/README.md +++ b/README.md @@ -65,7 +65,7 @@ VS_HOME = r'C:/Program Files (x86)/Microsoft Visual Studio 11.0/VC' WINDOWS_KIT = r'C:/Program Files (x86)/Windows Kits/8.0' XSISDK_ROOT = r'C:/Program Files/Autodesk/Softimage 2015/XSISDK' -ARNOLD_HOME = r'C:/SolidAngle/Arnold-5.0.1.1/win64' +ARNOLD_HOME = r'C:/SolidAngle/Arnold-5.2.0.1/win64' TARGET_WORKGROUP_PATH = r'./Softimage_2015/Addons/SItoA' @@ -339,6 +339,12 @@ RendererContext g_renderContext; For anything else not in these rules, use common sense, but keep it consistent. If you are modifying an existing function or method, respect its original coding style. The same applies to adding code to an existing file: **respect the coding style around you**. +#### Versioning + +Before SItoA was open-sourced it had it's own versioning scheme, with the last official version being 4.1.0. This is similar to how the other Arnold plugins are versioned. +Because of the probability of releases being less and less frequent now, and mostly just being compatibility fixes with a new Arnold core, a decision was made to change versioning to partly match the Arnold Core. This should make it easier and more apparent which Arnold version SItoA is prepared for. The new open-source versioning will therefore be `ARNOLD_MAJOR.ARNOLD_POINT.SITOA_VERSION`. + + ### Acknowledgments Before it was open-sourced, throughout the years, SItoA has been developed by: diff --git a/config/custom_linux.py b/config/custom_linux.py index c11eb8b..e0c80ae 100644 --- a/config/custom_linux.py +++ b/config/custom_linux.py @@ -6,7 +6,7 @@ SHCXX = r'/usr/bin/gcc-4.2.4/bin/gcc-4.2.4' XSISDK_ROOT = r'/usr/Softimage/Softimage_2015/XSISDK' -ARNOLD_HOME = r'/usr/SolidAngle/Arnold-5.0.2.4/linux' +ARNOLD_HOME = r'/usr/SolidAngle/Arnold-5.2.0.1/linux' TARGET_WORKGROUP_PATH = './Softimage_2015/Addons/SItoA' diff --git a/config/custom_windows.py b/config/custom_windows.py index 5248ea9..a045af1 100644 --- a/config/custom_windows.py +++ b/config/custom_windows.py @@ -9,7 +9,7 @@ WINDOWS_KIT = r'C:/Program Files (x86)/Windows Kits/8.0' XSISDK_ROOT = r'C:/Program Files/Autodesk/Softimage 2015/XSISDK' -ARNOLD_HOME = r'C:/SolidAngle/Arnold-5.0.2.4/win64' +ARNOLD_HOME = r'C:/SolidAngle/Arnold-5.2.0.1/win64' TARGET_WORKGROUP_PATH = r'./Softimage_2015/Addons/SItoA' From 4613c4c52ea9c8c84aa113e308c0ee9b24f8fdd5 Mon Sep 17 00:00:00 2001 From: Steven Caron Date: Wed, 19 Sep 2018 22:40:51 -0700 Subject: [PATCH 074/159] Fix 'Arnold Pass Shader' sub-menu under Render>Pass>Edit. added menu items for atmosphere_volume, fog, physical_sky, and cryptomatte had to add another shader family to closure node so it would connect to environment stack re-ordered the adding of shader families so volume family was last, this restores the node color to what it was before #36 --- plugins/helpers/ArnoldMenu.js | 34 +++++++++++++++++++++++++++++- plugins/sitoa/loader/ShaderDef.cpp | 7 ++++-- 2 files changed, 38 insertions(+), 3 deletions(-) diff --git a/plugins/helpers/ArnoldMenu.js b/plugins/helpers/ArnoldMenu.js index 791e8ad..5c47655 100644 --- a/plugins/helpers/ArnoldMenu.js +++ b/plugins/helpers/ArnoldMenu.js @@ -146,7 +146,18 @@ function AddShaderStack_Execute(in_shaderName, in_connectionPoint) { var pass = ActiveProject.ActiveScene.ActivePass; var shader = CreateShaderFromProgID(in_shaderName, pass, null); - SIConnectShaderToCnxPoint(shader, pass + "." + in_connectionPoint, false); + // we only want to add a closure shader when it's needed + // closures have 20 as OutputType value so we test for that + if (shader.OutputType == 20) + { + var closure = CreateShaderFromProgID("Arnold.closure.1.0", pass, null); + SIConnectShaderToCnxPoint(shader, closure + ".closure", false); + SIConnectShaderToCnxPoint(closure, pass + "." + in_connectionPoint, false); + } + else + { + SIConnectShaderToCnxPoint(shader, pass + "." + in_connectionPoint, false); + } InspectObj(shader); } @@ -270,6 +281,18 @@ function AddShadersSubMenu(in_menu) } +// pass sub-menu +function ArnoldPassShaders_Init(io_Context) +{ + var xsiMenu = io_Context.Source; + xsiMenu.AddCallbackItem("Atmosphere Volume", "OnShadersMenu"); + xsiMenu.AddCallbackItem("Fog", "OnShadersMenu"); + xsiMenu.AddSeparatorItem(); + xsiMenu.AddCallbackItem("Physical Sky", "OnShadersMenu"); + xsiMenu.AddSeparatorItem(); + xsiMenu.AddCallbackItem("Cryptomatte", "OnShadersMenu"); +} + // lights sub-menu function ArnoldLights_Init(io_Context) { @@ -482,9 +505,18 @@ function OnShadersMenu(in_ctxt) case "Standard Volume": SITOA_AddShader("Arnold.standard_volume.1.0", "surface"); break; + case "Atmosphere Volume": + SITOA_AddShaderStack("Arnold.atmosphere_volume.1.0", "VolumeShaderStack"); + break; + case "Fog": + SITOA_AddShaderStack("Arnold.fog.1.0", "EnvironmentShaderStack"); + break; case "Physical Sky": SITOA_AddShaderStack("Arnold.physical_sky.1.0", "EnvironmentShaderStack"); break; + case "Cryptomatte": + SITOA_AddShaderStack("Arnold.cryptomatte.1.0", "OutputShaderStack"); + break; } } diff --git a/plugins/sitoa/loader/ShaderDef.cpp b/plugins/sitoa/loader/ShaderDef.cpp index df6f4cb..518f8a9 100644 --- a/plugins/sitoa/loader/ShaderDef.cpp +++ b/plugins/sitoa/loader/ShaderDef.cpp @@ -522,10 +522,13 @@ CString CShaderDefShader::Define(const bool in_clone_vector_map) if (m_is_passthrough_closure) { m_sd.AddShaderFamily(siShaderFamilySurfaceMat, true); - m_sd.AddShaderFamily(siShaderFamilyVolume, true); + // Allow the closer node to connect to the environment shader stack + // github issue #36 + m_sd.AddShaderFamily(siShaderFamilyEnvironment, true); // This is the only way a closure can be connected to output shader stack - // Support for 'Global AOV Shaders'... + // Support for 'Global AOV Shaders'... github issue #13 m_sd.AddShaderFamily(siShaderFamilyOutput, true); + m_sd.AddShaderFamily(siShaderFamilyVolume, true); } else m_sd.AddShaderFamily(m_is_camera_node ? siShaderFamilyLens : siShaderFamilyTexture, true); From 408f3020dad245c89fe3573e3490dd5e91dffa54 Mon Sep 17 00:00:00 2001 From: Jens Lindgren Date: Thu, 20 Sep 2018 13:14:38 +0200 Subject: [PATCH 075/159] change stack for fog shader --- plugins/helpers/ArnoldMenu.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/helpers/ArnoldMenu.js b/plugins/helpers/ArnoldMenu.js index 5c47655..2d71ba9 100644 --- a/plugins/helpers/ArnoldMenu.js +++ b/plugins/helpers/ArnoldMenu.js @@ -509,7 +509,7 @@ function OnShadersMenu(in_ctxt) SITOA_AddShaderStack("Arnold.atmosphere_volume.1.0", "VolumeShaderStack"); break; case "Fog": - SITOA_AddShaderStack("Arnold.fog.1.0", "EnvironmentShaderStack"); + SITOA_AddShaderStack("Arnold.fog.1.0", "VolumeShaderStack"); break; case "Physical Sky": SITOA_AddShaderStack("Arnold.physical_sky.1.0", "EnvironmentShaderStack"); From ae2b22e77f4d1ec34d1465d58c5cd675d16e7cdb Mon Sep 17 00:00:00 2001 From: Jens Lindgren Date: Thu, 20 Sep 2018 13:15:12 +0200 Subject: [PATCH 076/159] remove physical_sky from pass shaders menu --- plugins/helpers/ArnoldMenu.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/plugins/helpers/ArnoldMenu.js b/plugins/helpers/ArnoldMenu.js index 2d71ba9..5cccd7d 100644 --- a/plugins/helpers/ArnoldMenu.js +++ b/plugins/helpers/ArnoldMenu.js @@ -288,8 +288,6 @@ function ArnoldPassShaders_Init(io_Context) xsiMenu.AddCallbackItem("Atmosphere Volume", "OnShadersMenu"); xsiMenu.AddCallbackItem("Fog", "OnShadersMenu"); xsiMenu.AddSeparatorItem(); - xsiMenu.AddCallbackItem("Physical Sky", "OnShadersMenu"); - xsiMenu.AddSeparatorItem(); xsiMenu.AddCallbackItem("Cryptomatte", "OnShadersMenu"); } @@ -512,7 +510,7 @@ function OnShadersMenu(in_ctxt) SITOA_AddShaderStack("Arnold.fog.1.0", "VolumeShaderStack"); break; case "Physical Sky": - SITOA_AddShaderStack("Arnold.physical_sky.1.0", "EnvironmentShaderStack"); + SITOA_AddShaderStack("Arnold.physical_sky.1.0", null); break; case "Cryptomatte": SITOA_AddShaderStack("Arnold.cryptomatte.1.0", "OutputShaderStack"); From 35d369741ed1bf9be9cd4e0a14544f5dfdb332e1 Mon Sep 17 00:00:00 2001 From: Steven Caron Date: Fri, 21 Sep 2018 21:28:18 -0700 Subject: [PATCH 077/159] add logic to closure shader so it doesn't show an empty ppg this fixes #33 so that it just inspects the node connected to the closure shader's closure port. it essentially just skips itself. --- plugins/sitoa/loader/ShaderDef.cpp | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/plugins/sitoa/loader/ShaderDef.cpp b/plugins/sitoa/loader/ShaderDef.cpp index 518f8a9..6a8faf4 100644 --- a/plugins/sitoa/loader/ShaderDef.cpp +++ b/plugins/sitoa/loader/ShaderDef.cpp @@ -736,7 +736,20 @@ void CShaderDefShader::Layout() } // unfortunately the following does not work (in the case the definition already exists) else // if there is no specific desc metadata, set the help to the shader page - layout.PutAttribute(siUIHelpFile, m_has_desc ? m_desc : SITOA_SHADERS_URL); + layout.PutAttribute(siUIHelpFile, m_has_desc ? m_desc : SITOA_SHADERS_URL); + + // setup ppg logic + layout.PutLanguage(L"JScript"); + if (m_name == L"closure") + { + // github issue #33 + // for closure connector node whenever it's inspected show the shader connected to it + layout.PutLogic( + L"function OnInit() {" + L"var src = PPG.closure.Source;" + L"if (src != null) InspectObj(src.Parent)};" + ); + } } From 58f03311ee10a8765f84e145ab3f870d2739a8ae Mon Sep 17 00:00:00 2001 From: Steven Caron Date: Mon, 24 Sep 2018 23:50:53 -0700 Subject: [PATCH 078/159] format ppg logic string to print pretty --- plugins/sitoa/loader/ShaderDef.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/plugins/sitoa/loader/ShaderDef.cpp b/plugins/sitoa/loader/ShaderDef.cpp index 6a8faf4..0c7e3f9 100644 --- a/plugins/sitoa/loader/ShaderDef.cpp +++ b/plugins/sitoa/loader/ShaderDef.cpp @@ -745,9 +745,10 @@ void CShaderDefShader::Layout() // github issue #33 // for closure connector node whenever it's inspected show the shader connected to it layout.PutLogic( - L"function OnInit() {" - L"var src = PPG.closure.Source;" - L"if (src != null) InspectObj(src.Parent)};" + L"function OnInit() {\n" + L" var src = PPG.closure.Source;" + L" if (src != null) InspectObj(src.Parent);\n" + L"}" ); } } From 5107cf8632cb28bfe0b47d6c262b5a547289d3dd Mon Sep 17 00:00:00 2001 From: Jens Lindgren Date: Mon, 1 Oct 2018 01:59:05 +0200 Subject: [PATCH 079/159] add color managers render options --- plugins/sitoa/renderer/RendererOptions.cpp | 125 ++++++++++++++++++++- plugins/sitoa/renderer/RendererOptions.h | 19 +++- 2 files changed, 141 insertions(+), 3 deletions(-) diff --git a/plugins/sitoa/renderer/RendererOptions.cpp b/plugins/sitoa/renderer/RendererOptions.cpp index 1dce7f5..5f1543f 100644 --- a/plugins/sitoa/renderer/RendererOptions.cpp +++ b/plugins/sitoa/renderer/RendererOptions.cpp @@ -174,6 +174,13 @@ void CRenderOptions::Read(const Property &in_cp) m_texture_max_memory_MB = (int)ParAcc_GetValue(in_cp, L"texture_max_memory_MB", DBL_MAX); m_texture_max_open_files = (int)ParAcc_GetValue(in_cp, L"texture_max_open_files", DBL_MAX); + // color managers + m_color_manager = ParAcc_GetValue(in_cp, L"color_manager", DBL_MAX).GetAsText(); + m_ocio_config = ParAcc_GetValue(in_cp, L"ocio_config", DBL_MAX).GetAsText(); + m_ocio_color_space_narrow = ParAcc_GetValue(in_cp, L"ocio_color_space_narrow", DBL_MAX).GetAsText(); + m_ocio_color_space_linear = ParAcc_GetValue(in_cp, L"ocio_color_space_linear", DBL_MAX).GetAsText(); + m_ocio_linear_chromaticities = ParAcc_GetValue(in_cp, L"ocio_linear_chromaticities", DBL_MAX).GetAsText(); + // diagnostic m_enable_log_console = (bool)ParAcc_GetValue(in_cp, L"enable_log_console", DBL_MAX); m_enable_log_file = (bool)ParAcc_GetValue(in_cp, L"enable_log_file", DBL_MAX); @@ -433,6 +440,14 @@ SITOA_CALLBACK CommonRenderOptions_Define(CRef& in_ctxt) cpset.AddParameter(L"texture_max_memory_MB", CValue::siInt4, siPersistable, L"", L"", 2048, 128, CValue(), 128, 4096, p); cpset.AddParameter(L"texture_max_open_files", CValue::siInt4, siPersistable, L"", L"", 0, 0, 10000, 0, 2000, p); + // color managers + cpset.AddParameter(L"color_manager", CValue::siString, siPersistable, L"", L"", L"none", CValue(), CValue(), CValue(), CValue(), p); + cpset.AddParameter(L"ocio_config", CValue::siString, siPersistable, L"", L"", L"", CValue(), CValue(), CValue(), CValue(), p); + cpset.AddParameter(L"ocio_config_message", CValue::siString, siPersistable, L"", L"", L"", CValue(), CValue(), CValue(), CValue(), p); + cpset.AddParameter(L"ocio_color_space_narrow", CValue::siString, siPersistable, L"", L"", L"", CValue(), CValue(), CValue(), CValue(), p); + cpset.AddParameter(L"ocio_color_space_linear", CValue::siString, siPersistable, L"", L"", L"", CValue(), CValue(), CValue(), CValue(), p); + cpset.AddParameter(L"ocio_linear_chromaticities", CValue::siString, siPersistable, L"", L"", L"", CValue(), CValue(), CValue(), CValue(), p); + // diagnostic: cpset.AddParameter(L"enable_log_console", CValue::siBool, siPersistable, L"", L"", true, CValue(), CValue(), CValue(), CValue(), p); cpset.AddParameter(L"enable_log_file", CValue::siBool, siPersistable, L"", L"", false, CValue(), CValue(), CValue(), CValue(), p); @@ -928,6 +943,32 @@ SITOA_CALLBACK CommonRenderOptions_DefineLayout(CRef& in_ctxt) layout.EndRow(); layout.EndGroup(); + layout.AddTab(L"Color Management"); + layout.AddGroup(L"Color Manager"); + CValueArray color_managers; + color_managers.Add(L"None"); color_managers.Add(L"none"); + color_managers.Add(L"OCIO"); color_managers.Add(L"color_manager_ocio"); + item = layout.AddEnumControl(L"color_manager", color_managers, L"Color Manager", siControlCombo); + item.PutAttribute(siUINoLabel, true); + layout.EndGroup(); + layout.AddGroup(L"OCIO"); + layout.AddGroup(L"Config"); + item = layout.AddItem(L"ocio_config", L"Config", siControlFilePath); + item.PutAttribute(siUINoLabel, true); + //item.PutAttribute(siUILabelMinPixels, 40); + item = layout.AddItem(L"ocio_config_message", L"", siControlStatic); + layout.EndGroup(); + item = layout.AddEnumControl(L"ocio_color_space_narrow", CValueArray(), L"sRGB Color Space", siControlCombo); + item.PutAttribute(siUILabelMinPixels, 120); + item.PutAttribute(siUILabelPercentage, 60); + item = layout.AddEnumControl(L"ocio_color_space_linear", CValueArray(), L"Rendering Color Space", siControlCombo); + item.PutAttribute(siUILabelMinPixels, 120); + item.PutAttribute(siUILabelPercentage, 60); + item = layout.AddItem(L"ocio_linear_chromaticities", L"Chromaticities"); + item.PutAttribute(siUILabelMinPixels, 120); + item.PutAttribute(siUILabelPercentage, 60); + layout.EndGroup(); + layout.AddTab(L"Diagnostics"); layout.AddGroup(L"Logs"); layout.AddRow(); @@ -1050,6 +1091,7 @@ SITOA_CALLBACK CommonRenderOptions_PPGEvent(const CRef& in_ctxt) SystemTabLogic(cpset); OutputTabLogic(cpset); TexturesTabLogic(cpset); + ColorManagersTabLogic(cpset, ctxt); SubdivisionTabLogic(cpset); DiagnosticsTabLogic(cpset); AssOutputTabLogic(cpset); @@ -1140,7 +1182,7 @@ SITOA_CALLBACK CommonRenderOptions_PPGEvent(const CRef& in_ctxt) if (app.GetUIToolkit().MsgBox(L"Are You Sure ?", siMsgOkCancel, L"Reset Options", okPressed) == CStatus::OK) { if (okPressed == 1) - ResetToDefault(cpset); + ResetToDefault(cpset, ctxt); } } else if (buttonName.IsEqualNoCase(L"AddMetadata")) @@ -1224,6 +1266,10 @@ SITOA_CALLBACK CommonRenderOptions_PPGEvent(const CRef& in_ctxt) paramName == L"texture_accept_untiled") TexturesTabLogic(cpset); + else if (paramName == L"color_manager" || + paramName == L"ocio_config") + ColorManagersTabLogic(cpset, ctxt); + else if (paramName == L"use_dicing_camera") SubdivisionTabLogic(cpset); @@ -1367,6 +1413,80 @@ void TexturesTabLogic(CustomProperty &in_cp) } +// Logic for the color managers tab +// +// @param in_cp The arnold rendering options property +// +void ColorManagersTabLogic(CustomProperty &in_cp, PPGEventContext &in_ctxt) +{ + bool hasOcioEnv = (getenv("OCIO") != NULL); + bool ocioManager = (bool)(ParAcc_GetValue(in_cp, L"color_manager", DBL_MAX) == L"color_manager_ocio"); + bool ocioLoaded = false; + CString ocioConfig = ParAcc_GetValue(in_cp, L"ocio_config", DBL_MAX); + + ParAcc_GetParameter(in_cp, L"ocio_config").PutCapabilityFlag(siReadOnly, !ocioManager); + ParAcc_GetParameter(in_cp, L"ocio_config_message").PutCapabilityFlag(siReadOnly, !ocioManager); + ParAcc_GetParameter(in_cp, L"ocio_color_space_narrow").PutCapabilityFlag(siReadOnly, !ocioManager); + ParAcc_GetParameter(in_cp, L"ocio_color_space_linear").PutCapabilityFlag(siReadOnly, !ocioManager); + ParAcc_GetParameter(in_cp, L"ocio_linear_chromaticities").PutCapabilityFlag(siReadOnly, !ocioManager); + + if (hasOcioEnv && ocioConfig == L"") { + in_cp.PutParameterValue(L"ocio_config_message", CString(L"Using OCIO config from environment.")); + ocioLoaded = true; + } + else if (ocioConfig != L"") { + in_cp.PutParameterValue(L"ocio_config_message", CString(L"Using the above OCIO config.")); + ocioLoaded = true; + } + else + in_cp.PutParameterValue(L"ocio_config_message", CString(L"No OCIO in environment.\nLoad a config manually to use OCIO.")); + + if (ocioLoaded) { + // we need to create an arnold universe and the ocio node so that we can get all the color spaces + AiBegin(); + AtNode* ocioNode = AiNode("color_manager_ocio"); + CNodeSetter::SetString(ocioNode, "config", GetRenderOptions()->m_ocio_config.GetAsciiString()); + + // get all colorspaces in the current OCIO config + int numColorSpaces = AiColorManagerGetNumColorSpaces(ocioNode); + CValueArray colorSpaces((numColorSpaces+1)*2); + CString colorSpace; + + colorSpaces[0] = L"Auto"; colorSpaces[1] = L""; + + for (LONG i=0; i #include #include #include @@ -159,6 +160,13 @@ class CRenderOptions int m_texture_max_memory_MB; int m_texture_max_open_files; + // color managers + CString m_color_manager; + CString m_ocio_config; + CString m_ocio_color_space_narrow; + CString m_ocio_color_space_linear; + CString m_ocio_linear_chromaticities; + // diagnostic bool m_enable_log_console; bool m_enable_log_file; @@ -322,6 +330,13 @@ class CRenderOptions m_texture_max_memory_MB(2048), m_texture_max_open_files(100), + // color managers + m_color_manager(L"none"), + m_ocio_config(L""), + m_ocio_color_space_narrow(L""), + m_ocio_color_space_linear(L""), + m_ocio_linear_chromaticities(L""), + // diagnostic m_enable_log_console(true), m_enable_log_file(false), @@ -392,6 +407,8 @@ void SystemTabLogic(CustomProperty &in_cp); void OutputTabLogic(CustomProperty &in_cp); // Logic for the textures tab void TexturesTabLogic(CustomProperty &in_cp); +// Logic for the color managers tab +void ColorManagersTabLogic(CustomProperty &in_cp, PPGEventContext &in_ctxt); // Logic for the subdivision tab void SubdivisionTabLogic(CustomProperty &in_cp); // Logic for the diagnostics tab @@ -400,6 +417,6 @@ void DiagnosticsTabLogic(CustomProperty &in_cp); void AssOutputTabLogic(CustomProperty &in_cp); // Reset the default values of all the parameters -void ResetToDefault(CustomProperty &in_cp); +void ResetToDefault(CustomProperty &in_cp, PPGEventContext &in_ctxt); From ae02f3e4d4e9307080af6200351e4b2b06f413ea Mon Sep 17 00:00:00 2001 From: Jens Lindgren Date: Mon, 1 Oct 2018 01:59:35 +0200 Subject: [PATCH 080/159] export color managers --- plugins/sitoa/loader/Options.cpp | 38 ++++++++++++++++++++++++++++++++ plugins/sitoa/loader/Options.h | 2 ++ 2 files changed, 40 insertions(+) diff --git a/plugins/sitoa/loader/Options.cpp b/plugins/sitoa/loader/Options.cpp index d242989..3411c49 100644 --- a/plugins/sitoa/loader/Options.cpp +++ b/plugins/sitoa/loader/Options.cpp @@ -192,6 +192,40 @@ bool LoadFilters() } +// Load the color manager +// +// @param in_optionsNode the Arnold options node +// @param in_frame the frame time +// +// @return true if the color manager was well created, else false +// +bool LoadColorManager(AtNode* in_optionsNode, double in_frame) +{ + CString colorManager = GetRenderOptions()->m_color_manager; + if (colorManager == L"color_manager_ocio") + { + AtNode* ocioNode = AiNode("color_manager_ocio"); + if (!ocioNode) + return false; + CNodeUtilities().SetName(ocioNode, "sitoa_color_manager_ocio"); + + CNodeSetter::SetString(ocioNode, "config", GetRenderOptions()->m_ocio_config.GetAsciiString()); + CNodeSetter::SetString(ocioNode, "color_space_narrow", GetRenderOptions()->m_ocio_color_space_narrow.GetAsciiString()); + CNodeSetter::SetString(ocioNode, "color_space_linear", GetRenderOptions()->m_ocio_color_space_linear.GetAsciiString()); + //AtArray* ocioChromaticities = AiArray(8, 1, AI_TYPE_FLOAT, + //0.713f, 0.293f, + //0.165f, 0.830f, + //0.128f, 0.044f, + //0.32168f, 0.33767f + //); + //AiNodeSetArray(ocioNode, "linear_chromaticities", ocioChromaticities); + + CNodeSetter::SetPointer(in_optionsNode, "color_manager", ocioNode); + } + return true; +} + + // class used to store the layers associated with a driver // class CDeepExrLayersDrivers @@ -647,6 +681,10 @@ CStatus LoadOptions(const Property& in_arnoldOptions, double in_frame, bool in_f // load rendering options LoadOptionsParameters(optionsNode, in_arnoldOptions, in_frame); + // load color manager + if (!LoadColorManager(optionsNode, in_frame)) + return CStatus::Fail; + if (!in_flythrough) { // export "frame" and "fps" (#1456) diff --git a/plugins/sitoa/loader/Options.h b/plugins/sitoa/loader/Options.h index 6daeb05..d33a80c 100644 --- a/plugins/sitoa/loader/Options.h +++ b/plugins/sitoa/loader/Options.h @@ -58,6 +58,8 @@ class CFrameBuffer void LoadPlayControlData(AtNode* in_optionsNode, double in_frame); // Load the output filters bool LoadFilters(); +// Load the color manager +bool LoadColorManager(AtNode* in_optionsNode, double in_frame); // Load the drivers bool LoadDrivers(AtNode *in_optionsNode, Pass &in_pass, double in_frame, bool in_flythrough); // Load the options parameters From 17ddc6103d4ee2057b42a0cdc13e7f1d688976b3 Mon Sep 17 00:00:00 2001 From: Jens Lindgren Date: Mon, 1 Oct 2018 02:00:24 +0200 Subject: [PATCH 081/159] add color manager node mask to options --- plugins/sitoa/loader/Loader.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/plugins/sitoa/loader/Loader.cpp b/plugins/sitoa/loader/Loader.cpp index 95aa506..dd8bba7 100644 --- a/plugins/sitoa/loader/Loader.cpp +++ b/plugins/sitoa/loader/Loader.cpp @@ -104,7 +104,7 @@ CStatus LoadScene(const Property &in_arnoldOptions, const CString& in_renderType // Compute the node mask // With a temporary Checking until it is completelly instaurated // in all production scenes (for backward compatibility). Initializating to true - int output_options = AI_NODE_OPTIONS; + int output_options = AI_NODE_OPTIONS + AI_NODE_COLOR_MANAGER; int output_drivers_filters = AI_NODE_DRIVER + AI_NODE_FILTER; int output_geometry = AI_NODE_SHAPE; int output_cameras = AI_NODE_CAMERA; @@ -114,7 +114,7 @@ CStatus LoadScene(const Property &in_arnoldOptions, const CString& in_renderType CPathString outputAssDir, assOutputName; bool useTranslation; - output_options = toRender || GetRenderOptions()->m_output_options ? AI_NODE_OPTIONS: 0; + output_options = toRender || GetRenderOptions()->m_output_options ? AI_NODE_OPTIONS + AI_NODE_COLOR_MANAGER: 0; output_drivers_filters = toRender || GetRenderOptions()->m_output_drivers_filters ? AI_NODE_DRIVER + AI_NODE_FILTER : 0; output_geometry = toRender || GetRenderOptions()->m_output_geometry ? AI_NODE_SHAPE : 0; output_cameras = toRender || GetRenderOptions()->m_output_cameras ? AI_NODE_CAMERA : 0; @@ -246,7 +246,7 @@ CStatus LoadScene(const Property &in_arnoldOptions, const CString& in_renderType // and for the same reason deny filters and drivers output_drivers_filters = 0; } - else if (output_options == AI_NODE_OPTIONS) + else if (output_options != 0) { AiMsgDebug("[sitoa] Loading Options"); status = LoadOptions(in_arnoldOptions, iframe); From 3aff03cfa89e6e8686362978802840c46e9db249 Mon Sep 17 00:00:00 2001 From: Jens Lindgren Date: Mon, 1 Oct 2018 02:01:00 +0200 Subject: [PATCH 082/159] add credit in about box --- plugins/helpers/ArnoldMenu.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/plugins/helpers/ArnoldMenu.js b/plugins/helpers/ArnoldMenu.js index 5c47655..0a89d08 100644 --- a/plugins/helpers/ArnoldMenu.js +++ b/plugins/helpers/ArnoldMenu.js @@ -586,7 +586,8 @@ function About() "Eric Mootz", "Holger Schoenberger", "Frederic Servant", - "Jules Stevenson" + "Jules Stevenson", + "Jens Lindgren" ); var layout = prop.PPGLayout; From ae02bd77cb3224f771f793abe31eaec1748b9544 Mon Sep 17 00:00:00 2001 From: Jens Lindgren Date: Mon, 1 Oct 2018 14:11:45 +0200 Subject: [PATCH 083/159] general color_manager code improvements --- plugins/sitoa/renderer/RendererOptions.cpp | 101 ++++++++++++--------- 1 file changed, 59 insertions(+), 42 deletions(-) diff --git a/plugins/sitoa/renderer/RendererOptions.cpp b/plugins/sitoa/renderer/RendererOptions.cpp index 5f1543f..0f9c884 100644 --- a/plugins/sitoa/renderer/RendererOptions.cpp +++ b/plugins/sitoa/renderer/RendererOptions.cpp @@ -441,12 +441,12 @@ SITOA_CALLBACK CommonRenderOptions_Define(CRef& in_ctxt) cpset.AddParameter(L"texture_max_open_files", CValue::siInt4, siPersistable, L"", L"", 0, 0, 10000, 0, 2000, p); // color managers - cpset.AddParameter(L"color_manager", CValue::siString, siPersistable, L"", L"", L"none", CValue(), CValue(), CValue(), CValue(), p); - cpset.AddParameter(L"ocio_config", CValue::siString, siPersistable, L"", L"", L"", CValue(), CValue(), CValue(), CValue(), p); - cpset.AddParameter(L"ocio_config_message", CValue::siString, siPersistable, L"", L"", L"", CValue(), CValue(), CValue(), CValue(), p); - cpset.AddParameter(L"ocio_color_space_narrow", CValue::siString, siPersistable, L"", L"", L"", CValue(), CValue(), CValue(), CValue(), p); - cpset.AddParameter(L"ocio_color_space_linear", CValue::siString, siPersistable, L"", L"", L"", CValue(), CValue(), CValue(), CValue(), p); - cpset.AddParameter(L"ocio_linear_chromaticities", CValue::siString, siPersistable, L"", L"", L"", CValue(), CValue(), CValue(), CValue(), p); + cpset.AddParameter(L"color_manager", CValue::siString, siPersistable, L"", L"", L"", CValue(), CValue(), CValue(), CValue(), p); + cpset.AddParameter(L"ocio_config", CValue::siString, siPersistable, L"", L"", L"", CValue(), CValue(), CValue(), CValue(), p); + cpset.AddParameter(L"ocio_config_message", CValue::siString, siPersistable, L"", L"", L"", CValue(), CValue(), CValue(), CValue(), p); + cpset.AddParameter(L"ocio_color_space_narrow", CValue::siString, siPersistable, L"", L"", L"", CValue(), CValue(), CValue(), CValue(), p); + cpset.AddParameter(L"ocio_color_space_linear", CValue::siString, siPersistable, L"", L"", L"", CValue(), CValue(), CValue(), CValue(), p); + cpset.AddParameter(L"ocio_linear_chromaticities", CValue::siString, siPersistable, L"", L"", L"", CValue(), CValue(), CValue(), CValue(), p); // diagnostic: cpset.AddParameter(L"enable_log_console", CValue::siBool, siPersistable, L"", L"", true, CValue(), CValue(), CValue(), CValue(), p); @@ -946,7 +946,7 @@ SITOA_CALLBACK CommonRenderOptions_DefineLayout(CRef& in_ctxt) layout.AddTab(L"Color Management"); layout.AddGroup(L"Color Manager"); CValueArray color_managers; - color_managers.Add(L"None"); color_managers.Add(L"none"); + color_managers.Add(L"None"); color_managers.Add(L""); color_managers.Add(L"OCIO"); color_managers.Add(L"color_manager_ocio"); item = layout.AddEnumControl(L"color_manager", color_managers, L"Color Manager", siControlCombo); item.PutAttribute(siUINoLabel, true); @@ -958,15 +958,17 @@ SITOA_CALLBACK CommonRenderOptions_DefineLayout(CRef& in_ctxt) //item.PutAttribute(siUILabelMinPixels, 40); item = layout.AddItem(L"ocio_config_message", L"", siControlStatic); layout.EndGroup(); - item = layout.AddEnumControl(L"ocio_color_space_narrow", CValueArray(), L"sRGB Color Space", siControlCombo); - item.PutAttribute(siUILabelMinPixels, 120); - item.PutAttribute(siUILabelPercentage, 60); - item = layout.AddEnumControl(L"ocio_color_space_linear", CValueArray(), L"Rendering Color Space", siControlCombo); - item.PutAttribute(siUILabelMinPixels, 120); - item.PutAttribute(siUILabelPercentage, 60); + CValueArray colorSpaces(2); + colorSpaces[0] = L""; colorSpaces[1] = L""; + item = layout.AddEnumControl(L"ocio_color_space_narrow", colorSpaces, L"sRGB Color Space", siControlCombo); + item.PutAttribute(siUILabelMinPixels, 115); + item.PutAttribute(siUILabelPercentage, 50); + item = layout.AddEnumControl(L"ocio_color_space_linear", colorSpaces, L"Rendering Color Space", siControlCombo); + item.PutAttribute(siUILabelMinPixels, 115); + item.PutAttribute(siUILabelPercentage, 50); item = layout.AddItem(L"ocio_linear_chromaticities", L"Chromaticities"); - item.PutAttribute(siUILabelMinPixels, 120); - item.PutAttribute(siUILabelPercentage, 60); + item.PutAttribute(siUILabelMinPixels, 115); + item.PutAttribute(siUILabelPercentage, 50); layout.EndGroup(); layout.AddTab(L"Diagnostics"); @@ -1416,11 +1418,13 @@ void TexturesTabLogic(CustomProperty &in_cp) // Logic for the color managers tab // // @param in_cp The arnold rendering options property +// @param in_ctxt The arnold rendering options PPGEvent // void ColorManagersTabLogic(CustomProperty &in_cp, PPGEventContext &in_ctxt) { - bool hasOcioEnv = (getenv("OCIO") != NULL); + // OCIO color manager bool ocioManager = (bool)(ParAcc_GetValue(in_cp, L"color_manager", DBL_MAX) == L"color_manager_ocio"); + bool hasOcioEnv = (getenv("OCIO") != NULL); bool ocioLoaded = false; CString ocioConfig = ParAcc_GetValue(in_cp, L"ocio_config", DBL_MAX); @@ -1430,40 +1434,52 @@ void ColorManagersTabLogic(CustomProperty &in_cp, PPGEventContext &in_ctxt) ParAcc_GetParameter(in_cp, L"ocio_color_space_linear").PutCapabilityFlag(siReadOnly, !ocioManager); ParAcc_GetParameter(in_cp, L"ocio_linear_chromaticities").PutCapabilityFlag(siReadOnly, !ocioManager); - if (hasOcioEnv && ocioConfig == L"") { - in_cp.PutParameterValue(L"ocio_config_message", CString(L"Using OCIO config from environment.")); - ocioLoaded = true; - } - else if (ocioConfig != L"") { - in_cp.PutParameterValue(L"ocio_config_message", CString(L"Using the above OCIO config.")); - ocioLoaded = true; + if (ocioManager) { + if (hasOcioEnv && ocioConfig == L"") { + in_cp.PutParameterValue(L"ocio_config_message", CString(L"Using OCIO config from environment.")); + ocioLoaded = true; + } + else if (ocioConfig != L"") { + in_cp.PutParameterValue(L"ocio_config_message", CString(L"Using the above OCIO config.")); + ocioLoaded = true; + } + else + in_cp.PutParameterValue(L"ocio_config_message", CString(L"No OCIO in environment.\nLoad a config manually to use OCIO.")); } else - in_cp.PutParameterValue(L"ocio_config_message", CString(L"No OCIO in environment.\nLoad a config manually to use OCIO.")); + in_cp.PutParameterValue(L"ocio_config_message", CString(L"")); if (ocioLoaded) { + // init strings to get default colorspaces + AtString defaultsRGB; + AtString defaultLinear; + CValueArray colorSpaces(2); + colorSpaces[0] = L""; colorSpaces[1] = L""; // init first items + // we need to create an arnold universe and the ocio node so that we can get all the color spaces AiBegin(); AtNode* ocioNode = AiNode("color_manager_ocio"); CNodeSetter::SetString(ocioNode, "config", GetRenderOptions()->m_ocio_config.GetAsciiString()); - - // get all colorspaces in the current OCIO config + int numColorSpaces = AiColorManagerGetNumColorSpaces(ocioNode); - CValueArray colorSpaces((numColorSpaces+1)*2); - CString colorSpace; + if (numColorSpaces > 0) { + // get all colorspaces in the current OCIO config + colorSpaces.Resize((numColorSpaces+1)*2); + CString colorSpace; + + for (LONG i=0; i Date: Wed, 3 Oct 2018 22:40:54 -0700 Subject: [PATCH 084/159] even prettier --- plugins/sitoa/loader/ShaderDef.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/plugins/sitoa/loader/ShaderDef.cpp b/plugins/sitoa/loader/ShaderDef.cpp index 0c7e3f9..0100b13 100644 --- a/plugins/sitoa/loader/ShaderDef.cpp +++ b/plugins/sitoa/loader/ShaderDef.cpp @@ -745,10 +745,11 @@ void CShaderDefShader::Layout() // github issue #33 // for closure connector node whenever it's inspected show the shader connected to it layout.PutLogic( - L"function OnInit() {\n" - L" var src = PPG.closure.Source;" + L"function OnInit()\n" + L"{\n" + L" var src = PPG.closure.Source;\n" L" if (src != null) InspectObj(src.Parent);\n" - L"}" + L"}\n" ); } } From 7e9341caa25aa9433db6857dfbba51124835b42b Mon Sep 17 00:00:00 2001 From: Jens Lindgren Date: Tue, 9 Oct 2018 22:54:29 +0200 Subject: [PATCH 085/159] finalized the ocio color manager code --- plugins/sitoa/loader/Options.cpp | 34 +++-- plugins/sitoa/renderer/RendererOptions.cpp | 170 ++++++++++++--------- 2 files changed, 118 insertions(+), 86 deletions(-) diff --git a/plugins/sitoa/loader/Options.cpp b/plugins/sitoa/loader/Options.cpp index 3411c49..0183859 100644 --- a/plugins/sitoa/loader/Options.cpp +++ b/plugins/sitoa/loader/Options.cpp @@ -193,6 +193,7 @@ bool LoadFilters() // Load the color manager +// https://github.com/Autodesk/sitoa/issues/31 // // @param in_optionsNode the Arnold options node // @param in_frame the frame time @@ -209,17 +210,25 @@ bool LoadColorManager(AtNode* in_optionsNode, double in_frame) return false; CNodeUtilities().SetName(ocioNode, "sitoa_color_manager_ocio"); - CNodeSetter::SetString(ocioNode, "config", GetRenderOptions()->m_ocio_config.GetAsciiString()); - CNodeSetter::SetString(ocioNode, "color_space_narrow", GetRenderOptions()->m_ocio_color_space_narrow.GetAsciiString()); - CNodeSetter::SetString(ocioNode, "color_space_linear", GetRenderOptions()->m_ocio_color_space_linear.GetAsciiString()); - //AtArray* ocioChromaticities = AiArray(8, 1, AI_TYPE_FLOAT, - //0.713f, 0.293f, - //0.165f, 0.830f, - //0.128f, 0.044f, - //0.32168f, 0.33767f - //); - //AiNodeSetArray(ocioNode, "linear_chromaticities", ocioChromaticities); - + CNodeSetter::SetString(ocioNode, "config", GetRenderOptions()->m_ocio_config.GetAsciiString()); + CNodeSetter::SetString(ocioNode, "color_space_narrow", GetRenderOptions()->m_ocio_color_space_narrow.GetAsciiString()); + CNodeSetter::SetString(ocioNode, "color_space_linear", GetRenderOptions()->m_ocio_color_space_linear.GetAsciiString()); + + // only export chromaticities if color_space_linear ise set + if (GetRenderOptions()->m_ocio_color_space_linear != L"") { + CString ocioChromaticitiesString = GetRenderOptions()->m_ocio_linear_chromaticities; + CStringArray ocioChromaticitiesStrings = ocioChromaticitiesString.Split(L" "); + if (ocioChromaticitiesStrings.GetCount() == 8) { + AtArray* ocioChromaticities = AiArrayAllocate(8, 1, AI_TYPE_FLOAT); + for (int i=0; i<8; i++) { + AiArraySetFlt(ocioChromaticities, i, (float)atof(ocioChromaticitiesStrings[i].GetAsciiString())); + } + AiNodeSetArray(ocioNode, "linear_chromaticities", ocioChromaticities); + } + else { + GetMessageQueue()->LogMsg(L"[sitoa] OCIO Chromaticities could not be parsed: " + CString(ocioChromaticitiesString), siWarningMsg); + } + } CNodeSetter::SetPointer(in_optionsNode, "color_manager", ocioNode); } return true; @@ -683,7 +692,8 @@ CStatus LoadOptions(const Property& in_arnoldOptions, double in_frame, bool in_f // load color manager if (!LoadColorManager(optionsNode, in_frame)) - return CStatus::Fail; + GetMessageQueue()->LogMsg(L"[sitoa] Failed to create a Color Manager.", siWarningMsg); + return CStatus::Abort; if (!in_flythrough) { diff --git a/plugins/sitoa/renderer/RendererOptions.cpp b/plugins/sitoa/renderer/RendererOptions.cpp index 0f9c884..5d9b376 100644 --- a/plugins/sitoa/renderer/RendererOptions.cpp +++ b/plugins/sitoa/renderer/RendererOptions.cpp @@ -960,15 +960,17 @@ SITOA_CALLBACK CommonRenderOptions_DefineLayout(CRef& in_ctxt) layout.EndGroup(); CValueArray colorSpaces(2); colorSpaces[0] = L""; colorSpaces[1] = L""; - item = layout.AddEnumControl(L"ocio_color_space_narrow", colorSpaces, L"sRGB Color Space", siControlCombo); - item.PutAttribute(siUILabelMinPixels, 115); - item.PutAttribute(siUILabelPercentage, 50); - item = layout.AddEnumControl(L"ocio_color_space_linear", colorSpaces, L"Rendering Color Space", siControlCombo); - item.PutAttribute(siUILabelMinPixels, 115); - item.PutAttribute(siUILabelPercentage, 50); - item = layout.AddItem(L"ocio_linear_chromaticities", L"Chromaticities"); - item.PutAttribute(siUILabelMinPixels, 115); - item.PutAttribute(siUILabelPercentage, 50); + layout.AddGroup(L"sRGB Color Space"); + item = layout.AddEnumControl(L"ocio_color_space_narrow", colorSpaces, L"sRGB Color Space", siControlCombo); + item.PutAttribute(siUINoLabel, true); + layout.EndGroup(); + layout.AddGroup(L"Rendering Color Space"); + item = layout.AddEnumControl(L"ocio_color_space_linear", colorSpaces, L"Rendering Color Space", siControlCombo); + item.PutAttribute(siUINoLabel, true); + item = layout.AddItem(L"ocio_linear_chromaticities", L"Chromaticities"); + item.PutAttribute(siUILabelMinPixels, 80); + item.PutAttribute(siUILabelPercentage, 25); + layout.EndGroup(); layout.EndGroup(); layout.AddTab(L"Diagnostics"); @@ -1269,7 +1271,8 @@ SITOA_CALLBACK CommonRenderOptions_PPGEvent(const CRef& in_ctxt) TexturesTabLogic(cpset); else if (paramName == L"color_manager" || - paramName == L"ocio_config") + paramName == L"ocio_config" || + paramName == L"ocio_color_space_linear") ColorManagersTabLogic(cpset, ctxt); else if (paramName == L"use_dicing_camera") @@ -1416,91 +1419,110 @@ void TexturesTabLogic(CustomProperty &in_cp) // Logic for the color managers tab +// https://github.com/Autodesk/sitoa/issues/31 // // @param in_cp The arnold rendering options property // @param in_ctxt The arnold rendering options PPGEvent // void ColorManagersTabLogic(CustomProperty &in_cp, PPGEventContext &in_ctxt) { + Parameter paramChanged = in_ctxt.GetSource(); + CString paramName = paramChanged.GetScriptName(); + // OCIO color manager bool ocioManager = (bool)(ParAcc_GetValue(in_cp, L"color_manager", DBL_MAX) == L"color_manager_ocio"); - bool hasOcioEnv = (getenv("OCIO") != NULL); - bool ocioLoaded = false; + bool useOcioDefaultRenderingSpace = (bool)(ParAcc_GetValue(in_cp, L"ocio_color_space_linear", DBL_MAX) == L""); + bool hasOcioEnv = (bool)(getenv("OCIO") != NULL); CString ocioConfig = ParAcc_GetValue(in_cp, L"ocio_config", DBL_MAX); + bool ocioLoaded = false; ParAcc_GetParameter(in_cp, L"ocio_config").PutCapabilityFlag(siReadOnly, !ocioManager); ParAcc_GetParameter(in_cp, L"ocio_config_message").PutCapabilityFlag(siReadOnly, !ocioManager); ParAcc_GetParameter(in_cp, L"ocio_color_space_narrow").PutCapabilityFlag(siReadOnly, !ocioManager); ParAcc_GetParameter(in_cp, L"ocio_color_space_linear").PutCapabilityFlag(siReadOnly, !ocioManager); - ParAcc_GetParameter(in_cp, L"ocio_linear_chromaticities").PutCapabilityFlag(siReadOnly, !ocioManager); + ParAcc_GetParameter(in_cp, L"ocio_linear_chromaticities").PutCapabilityFlag(siReadOnly, (!ocioManager || useOcioDefaultRenderingSpace)); - if (ocioManager) { - if (hasOcioEnv && ocioConfig == L"") { - in_cp.PutParameterValue(L"ocio_config_message", CString(L"Using OCIO config from environment.")); - ocioLoaded = true; - } - else if (ocioConfig != L"") { - in_cp.PutParameterValue(L"ocio_config_message", CString(L"Using the above OCIO config.")); - ocioLoaded = true; - } - else - in_cp.PutParameterValue(L"ocio_config_message", CString(L"No OCIO in environment.\nLoad a config manually to use OCIO.")); - } - else - in_cp.PutParameterValue(L"ocio_config_message", CString(L"")); - if (ocioLoaded) { - // init strings to get default colorspaces - AtString defaultsRGB; - AtString defaultLinear; - CValueArray colorSpaces(2); - colorSpaces[0] = L""; colorSpaces[1] = L""; // init first items - - // we need to create an arnold universe and the ocio node so that we can get all the color spaces - AiBegin(); - AtNode* ocioNode = AiNode("color_manager_ocio"); - CNodeSetter::SetString(ocioNode, "config", GetRenderOptions()->m_ocio_config.GetAsciiString()); - - int numColorSpaces = AiColorManagerGetNumColorSpaces(ocioNode); - if (numColorSpaces > 0) { - // get all colorspaces in the current OCIO config - colorSpaces.Resize((numColorSpaces+1)*2); - CString colorSpace; - - for (LONG i=0; im_ocio_config.GetAsciiString()); + + int numColorSpaces = AiColorManagerGetNumColorSpaces(ocioNode); + if (numColorSpaces > 0) { + // get all colorspaces in the current OCIO config + colorSpaces.Resize((numColorSpaces+1)*2); + CString colorSpace; + + for (LONG i=0; i Date: Tue, 9 Oct 2018 23:21:07 +0200 Subject: [PATCH 086/159] added missing brackets and cleanup --- plugins/sitoa/loader/Loader.cpp | 2 +- plugins/sitoa/loader/Options.cpp | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/plugins/sitoa/loader/Loader.cpp b/plugins/sitoa/loader/Loader.cpp index dd8bba7..d5b6b87 100644 --- a/plugins/sitoa/loader/Loader.cpp +++ b/plugins/sitoa/loader/Loader.cpp @@ -246,7 +246,7 @@ CStatus LoadScene(const Property &in_arnoldOptions, const CString& in_renderType // and for the same reason deny filters and drivers output_drivers_filters = 0; } - else if (output_options != 0) + else if ((output_options & AI_NODE_OPTIONS) == AI_NODE_OPTIONS) { AiMsgDebug("[sitoa] Loading Options"); status = LoadOptions(in_arnoldOptions, iframe); diff --git a/plugins/sitoa/loader/Options.cpp b/plugins/sitoa/loader/Options.cpp index 0183859..988ffb8 100644 --- a/plugins/sitoa/loader/Options.cpp +++ b/plugins/sitoa/loader/Options.cpp @@ -207,7 +207,7 @@ bool LoadColorManager(AtNode* in_optionsNode, double in_frame) { AtNode* ocioNode = AiNode("color_manager_ocio"); if (!ocioNode) - return false; + return false; CNodeUtilities().SetName(ocioNode, "sitoa_color_manager_ocio"); CNodeSetter::SetString(ocioNode, "config", GetRenderOptions()->m_ocio_config.GetAsciiString()); @@ -691,9 +691,10 @@ CStatus LoadOptions(const Property& in_arnoldOptions, double in_frame, bool in_f LoadOptionsParameters(optionsNode, in_arnoldOptions, in_frame); // load color manager - if (!LoadColorManager(optionsNode, in_frame)) + if (!LoadColorManager(optionsNode, in_frame)) { GetMessageQueue()->LogMsg(L"[sitoa] Failed to create a Color Manager.", siWarningMsg); return CStatus::Abort; + } if (!in_flythrough) { From 559eb998bd04877717e1591a0e5c0e78961a959e Mon Sep 17 00:00:00 2001 From: Jens Lindgren Date: Wed, 10 Oct 2018 01:01:38 +0200 Subject: [PATCH 087/159] more polishing --- plugins/sitoa/renderer/RendererOptions.cpp | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/plugins/sitoa/renderer/RendererOptions.cpp b/plugins/sitoa/renderer/RendererOptions.cpp index 5d9b376..06607a3 100644 --- a/plugins/sitoa/renderer/RendererOptions.cpp +++ b/plugins/sitoa/renderer/RendererOptions.cpp @@ -955,7 +955,9 @@ SITOA_CALLBACK CommonRenderOptions_DefineLayout(CRef& in_ctxt) layout.AddGroup(L"Config"); item = layout.AddItem(L"ocio_config", L"Config", siControlFilePath); item.PutAttribute(siUINoLabel, true); - //item.PutAttribute(siUILabelMinPixels, 40); + item.PutAttribute(siUIOpenFile, true); + item.PutAttribute(siUIFileMustExist, true); + item.PutAttribute(siUIFileFilter, L"OCIO config files (*.ocio)|*.ocio||"); item = layout.AddItem(L"ocio_config_message", L"", siControlStatic); layout.EndGroup(); CValueArray colorSpaces(2); @@ -1470,12 +1472,17 @@ void ColorManagersTabLogic(CustomProperty &in_cp, PPGEventContext &in_ctxt) // we need to have an arnold universe with the ocio node so that we can get all the color spaces bool defaultUniverseExist = AiUniverseIsActive(); AtUniverse* ocioUniverse; - if (defaultUniverseExist) + AtNode* ocioNode; + + if (defaultUniverseExist) { ocioUniverse = AiUniverse(); - else + ocioNode = AiNode(ocioUniverse, "color_manager_ocio"); + } + else { AiBegin(); + ocioNode = AiNode("color_manager_ocio"); + } - AtNode* ocioNode = AiNode("color_manager_ocio"); CNodeSetter::SetString(ocioNode, "config", GetRenderOptions()->m_ocio_config.GetAsciiString()); int numColorSpaces = AiColorManagerGetNumColorSpaces(ocioNode); @@ -1495,7 +1502,7 @@ void ColorManagersTabLogic(CustomProperty &in_cp, PPGEventContext &in_ctxt) } else { - in_cp.PutParameterValue(L"ocio_config_message", CString(L"Error: No color spaces found in current config!")); + in_cp.PutParameterValue(L"ocio_config_message", CString(L"Error: No color spaces found!")); } // destroy the universe From 8f6beb5f024f4cff09a13dd13775584b5d90b695 Mon Sep 17 00:00:00 2001 From: Jens Lindgren Date: Wed, 10 Oct 2018 01:47:53 +0200 Subject: [PATCH 088/159] more checks and better warnings --- plugins/sitoa/loader/Options.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/plugins/sitoa/loader/Options.cpp b/plugins/sitoa/loader/Options.cpp index 988ffb8..24edd4c 100644 --- a/plugins/sitoa/loader/Options.cpp +++ b/plugins/sitoa/loader/Options.cpp @@ -220,13 +220,19 @@ bool LoadColorManager(AtNode* in_optionsNode, double in_frame) CStringArray ocioChromaticitiesStrings = ocioChromaticitiesString.Split(L" "); if (ocioChromaticitiesStrings.GetCount() == 8) { AtArray* ocioChromaticities = AiArrayAllocate(8, 1, AI_TYPE_FLOAT); + float chromaticitySample; for (int i=0; i<8; i++) { - AiArraySetFlt(ocioChromaticities, i, (float)atof(ocioChromaticitiesStrings[i].GetAsciiString())); + chromaticitySample = atof(ocioChromaticitiesStrings[i].GetAsciiString()); + + // if a sample is 0.0 and is not green x (ACES uses 0.0 as green x) then issue a warning + if (chromaticitySample == 0.0f && i != 2) + GetMessageQueue()->LogMsg(L"[sitoa] OCIO Chromaticity sample " + CString(i) + L" is 0.0", siWarningMsg); + AiArraySetFlt(ocioChromaticities, i, chromaticitySample); } AiNodeSetArray(ocioNode, "linear_chromaticities", ocioChromaticities); } else { - GetMessageQueue()->LogMsg(L"[sitoa] OCIO Chromaticities could not be parsed: " + CString(ocioChromaticitiesString), siWarningMsg); + GetMessageQueue()->LogMsg(L"[sitoa] OCIO Chromaticities could not be parsed. It needs to be 8 values separated by spaces. Unparsable: '" + CString(ocioChromaticitiesString) + L"'", siWarningMsg); } } CNodeSetter::SetPointer(in_optionsNode, "color_manager", ocioNode); From c348434615cdc361108b56493737ee3dda9adce6 Mon Sep 17 00:00:00 2001 From: Jens Lindgren Date: Wed, 10 Oct 2018 01:59:46 +0200 Subject: [PATCH 089/159] better check for invalid chromaticity samples --- plugins/sitoa/loader/Options.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/sitoa/loader/Options.cpp b/plugins/sitoa/loader/Options.cpp index 24edd4c..7ec4a75 100644 --- a/plugins/sitoa/loader/Options.cpp +++ b/plugins/sitoa/loader/Options.cpp @@ -224,8 +224,8 @@ bool LoadColorManager(AtNode* in_optionsNode, double in_frame) for (int i=0; i<8; i++) { chromaticitySample = atof(ocioChromaticitiesStrings[i].GetAsciiString()); - // if a sample is 0.0 and is not green x (ACES uses 0.0 as green x) then issue a warning - if (chromaticitySample == 0.0f && i != 2) + // if a sample is 0.0 and is not green or blue x (ACES uses 0.0 as green x) then issue a warning + if (chromaticitySample == 0.0f && i != 2 && i != 4) GetMessageQueue()->LogMsg(L"[sitoa] OCIO Chromaticity sample " + CString(i) + L" is 0.0", siWarningMsg); AiArraySetFlt(ocioChromaticities, i, chromaticitySample); } From 399102c9e208e88314360d876e24ae807abe9b71 Mon Sep 17 00:00:00 2001 From: Jens Lindgren Date: Wed, 10 Oct 2018 02:30:26 +0200 Subject: [PATCH 090/159] format message to two rows --- plugins/sitoa/renderer/RendererOptions.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/plugins/sitoa/renderer/RendererOptions.cpp b/plugins/sitoa/renderer/RendererOptions.cpp index 06607a3..7ebe30c 100644 --- a/plugins/sitoa/renderer/RendererOptions.cpp +++ b/plugins/sitoa/renderer/RendererOptions.cpp @@ -958,7 +958,7 @@ SITOA_CALLBACK CommonRenderOptions_DefineLayout(CRef& in_ctxt) item.PutAttribute(siUIOpenFile, true); item.PutAttribute(siUIFileMustExist, true); item.PutAttribute(siUIFileFilter, L"OCIO config files (*.ocio)|*.ocio||"); - item = layout.AddItem(L"ocio_config_message", L"", siControlStatic); + item = layout.AddItem(L"ocio_config_message", L"\n", siControlStatic); layout.EndGroup(); CValueArray colorSpaces(2); colorSpaces[0] = L""; colorSpaces[1] = L""; @@ -1449,18 +1449,18 @@ void ColorManagersTabLogic(CustomProperty &in_cp, PPGEventContext &in_ctxt) if (paramName != L"ocio_color_space_linear") { if (ocioManager) { if (hasOcioEnv && ocioConfig == L"") { - in_cp.PutParameterValue(L"ocio_config_message", CString(L"Using OCIO config from environment.")); + in_cp.PutParameterValue(L"ocio_config_message", CString(L"Using OCIO config from environment.\n")); ocioLoaded = true; } else if (ocioConfig != L"") { - in_cp.PutParameterValue(L"ocio_config_message", CString(L"Using the specified OCIO config.")); + in_cp.PutParameterValue(L"ocio_config_message", CString(L"Using the specified OCIO config.\n")); ocioLoaded = true; } else in_cp.PutParameterValue(L"ocio_config_message", CString(L"No OCIO in environment.\nLoad a config manually to use OCIO.")); } else - in_cp.PutParameterValue(L"ocio_config_message", CString(L"")); + in_cp.PutParameterValue(L"ocio_config_message", CString(L"\n")); if (ocioLoaded) { // init strings to get default colorspaces @@ -1502,7 +1502,7 @@ void ColorManagersTabLogic(CustomProperty &in_cp, PPGEventContext &in_ctxt) } else { - in_cp.PutParameterValue(L"ocio_config_message", CString(L"Error: No color spaces found!")); + in_cp.PutParameterValue(L"ocio_config_message", CString(L"Error: No color spaces found!\n")); } // destroy the universe From 81a742b334366d8fa83bdfc28e91858b5f878aa1 Mon Sep 17 00:00:00 2001 From: Jens Lindgren Date: Fri, 12 Oct 2018 21:28:51 +0200 Subject: [PATCH 091/159] rewrite of camera screen_window parameters --- plugins/sitoa/common/ParamsCamera.cpp | 115 +++++++++++++++----------- 1 file changed, 65 insertions(+), 50 deletions(-) diff --git a/plugins/sitoa/common/ParamsCamera.cpp b/plugins/sitoa/common/ParamsCamera.cpp index c5cdf11..eaa8438 100644 --- a/plugins/sitoa/common/ParamsCamera.cpp +++ b/plugins/sitoa/common/ParamsCamera.cpp @@ -47,6 +47,8 @@ CStatus LoadCameraParameters(AtNode* in_cameraNode, const Camera &in_xsiCamera, fov = AiArrayAllocate(1, (uint8_t)nbTransfKeys, AI_TYPE_FLOAT); AtArray* matrices = AiArrayAllocate(1, (uint8_t)nbTransfKeys, AI_TYPE_MATRIX); + AtArray* screenWindowMins = AiArrayAllocate(1, (uint8_t)nbTransfKeys, AI_TYPE_VECTOR2); + AtArray* screenWindowMaxs = AiArrayAllocate(1, (uint8_t)nbTransfKeys, AI_TYPE_VECTOR2); for (LONG ikey=0; ikeyGetRenderType() == L"Region" && (bool)ParAcc_GetValue(in_xsiCamera, L"subpixelzoom", in_frame)) - { - float subfrustumleft = ParAcc_GetValue(in_xsiCamera, L"subfrustumleft", in_frame); - float subfrustumright = ParAcc_GetValue(in_xsiCamera, L"subfrustumright", in_frame); - float subfrustumtop = ParAcc_GetValue(in_xsiCamera, L"subfrustumtop", in_frame); - float subfrustumbottom = ParAcc_GetValue(in_xsiCamera, L"subfrustumbottom", in_frame); - - float screenWindowMinX = (subfrustumleft - 0.5f) * 2.0f; - float screenWindowMinY = (subfrustumbottom - 0.5f) * 2.0f; - float screenWindowMaxX = (subfrustumright - 0.5f) * 2.0f; - float screenWindowMaxY = (subfrustumtop -0.5f) * 2.0f; - - CNodeSetter::SetVector2(in_cameraNode, "screen_window_min", screenWindowMinX, screenWindowMinY); - CNodeSetter::SetVector2(in_cameraNode, "screen_window_max", screenWindowMaxX, screenWindowMaxY); - } - else if (ParAcc_GetValue(in_xsiCamera, L"proj", in_frame) == 0) - { - // Orthographic camera - float width = (float)ParAcc_GetValue(in_xsiCamera, L"planewidth", in_frame); - float height = (float)ParAcc_GetValue(in_xsiCamera, L"orthoheight", in_frame); - float aspect = (float)ParAcc_GetValue(in_xsiCamera, L"aspect", in_frame); - CNodeSetter::SetVector2(in_cameraNode, "screen_window_min", -width/2, -height/2*aspect); - CNodeSetter::SetVector2(in_cameraNode, "screen_window_max", width/2, height/2*aspect); - } - else // Optical Center Shift (only in perspective cameras) - { - float factorX(0.0f), factorY(0.0f); - - if ((bool)ParAcc_GetValue(in_xsiCamera, L"projplane", in_frame)) + // Set the screen_window values which are default arnold camera properties + // This was broken in SItoA 4.1, but fixed on Github: https://github.com/Autodesk/sitoa/issues/42 + // It moved in to the for loop to support motion blur at the same time it was fixed + AtVector2 screenWindowMin; + AtVector2 screenWindowMax; + if (ParAcc_GetValue(in_xsiCamera, L"proj", in_frame) == 0) + { + // Orthographic camera + float width = (float)ParAcc_GetValue(in_xsiCamera, L"planewidth", frame); + float height = (float)ParAcc_GetValue(in_xsiCamera, L"orthoheight", frame); + float aspect = (float)ParAcc_GetValue(in_xsiCamera, L"aspect", frame); + + screenWindowMin.x = -width/2; + screenWindowMin.y = -height/2*aspect; + screenWindowMax.x = width/2; + screenWindowMax.y = height/2*aspect; + } + else // Optical Center Shift (only in perspective cameras) { - float offsetX = (float)ParAcc_GetValue(in_xsiCamera, L"projplaneoffx", in_frame); - float offsetY = (float)ParAcc_GetValue(in_xsiCamera, L"projplaneoffy", in_frame); + float factorX(0.0f), factorY(0.0f); - if (offsetX!=0.0f || offsetY!=0.0f) + if ((bool)ParAcc_GetValue(in_xsiCamera, L"projplane", in_frame)) { - float apertureX = (float)ParAcc_GetValue(in_xsiCamera, L"projplanewidth", in_frame); - float apertureY = (float)ParAcc_GetValue(in_xsiCamera, L"projplaneheight", in_frame); - - factorX = (offsetX / apertureX) * 2; - factorY = (offsetY / apertureY) * 2; + float offsetX = (float)ParAcc_GetValue(in_xsiCamera, L"projplaneoffx", frame); + float offsetY = (float)ParAcc_GetValue(in_xsiCamera, L"projplaneoffy", frame); + + if (offsetX!=0.0f || offsetY!=0.0f) + { + float apertureX = (float)ParAcc_GetValue(in_xsiCamera, L"projplanewidth", frame); + float apertureY = (float)ParAcc_GetValue(in_xsiCamera, L"projplaneheight", frame); + + factorX = (offsetX / apertureX) * 2; + factorY = (offsetY / apertureY) * 2; + } } + + // Perspective camera - so let's just set defaults + screenWindowMin.x = -1.0f + factorX; + screenWindowMin.y = -1.0f + factorY; + screenWindowMax.x = 1.0f + factorX; + screenWindowMax.y = 1.0f + factorY; + } + + // The subpixelzoom mode should only affects a render region mode + if (GetRenderInstance()->GetRenderType() == L"Region" && (bool)ParAcc_GetValue(in_xsiCamera, L"subpixelzoom", in_frame)) + { + float subfrustumleft = ParAcc_GetValue(in_xsiCamera, L"subfrustumleft", frame); + float subfrustumright = ParAcc_GetValue(in_xsiCamera, L"subfrustumright", frame); + float subfrustumtop = ParAcc_GetValue(in_xsiCamera, L"subfrustumtop", frame); + float subfrustumbottom = ParAcc_GetValue(in_xsiCamera, L"subfrustumbottom", frame); + + screenWindowMin.x += subfrustumleft * 2.0f; + screenWindowMin.y += subfrustumbottom * 2.0f; + screenWindowMax.x += (subfrustumright - 1.0f) * 2.0f; + screenWindowMax.y += (subfrustumtop - 1.0f) * 2.0f; } - // Perspective camera - so let's just set defaults - CNodeSetter::SetVector2(in_cameraNode, "screen_window_min", (-1.0f + factorX), (-1.0f + factorY)); - CNodeSetter::SetVector2(in_cameraNode, "screen_window_max", (1.0f + factorX), (1.0f + factorY)); + AiArraySetVec2(screenWindowMins, ikey, screenWindowMin); + AiArraySetVec2(screenWindowMaxs, ikey, screenWindowMax); } + if (hasFOV) + AiNodeSetArray(in_cameraNode, "fov", fov); + + // Setting the camera matrix - this is a default arnold camera parameter + AiNodeSetArray(in_cameraNode, "matrix", matrices); + + // Set the screen_windows + AiNodeSetArray(in_cameraNode, "screen_window_min", screenWindowMins); + AiNodeSetArray(in_cameraNode, "screen_window_max", screenWindowMaxs); + // Set the clipping - this is a default arnold camera property float near_clip = ParAcc_GetValue(in_xsiCamera, L"near", in_frame); float far_clip = ParAcc_GetValue(in_xsiCamera, L"far", in_frame); From 9caf2412c7ddfe008439303aa1ee110a9a8fba00 Mon Sep 17 00:00:00 2001 From: Jens Lindgren Date: Fri, 12 Oct 2018 22:09:35 +0200 Subject: [PATCH 092/159] remove setting aperture_size to 0 --- plugins/sitoa/loader/Properties.cpp | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/plugins/sitoa/loader/Properties.cpp b/plugins/sitoa/loader/Properties.cpp index 5648b2a..7234a7f 100644 --- a/plugins/sitoa/loader/Properties.cpp +++ b/plugins/sitoa/loader/Properties.cpp @@ -593,14 +593,9 @@ void LoadCameraOptions(const Camera &in_xsiCamera, AtNode* in_node, const Proper CNodeSetter::SetFloat(in_node, "aperture_blade_curvature", apertureBladeCurvature); CNodeSetter::SetFloat(in_node, "aperture_rotation", apertureRotation); CNodeSetter::SetFloat(in_node, "aperture_aspect_ratio", apertureAspectRatio); - } - else - { - aperture_size = AiArrayAllocate(1, 1, AI_TYPE_FLOAT); - AiArraySetFlt(aperture_size, 0, 0.0f); - } - AiNodeSetArray(in_node, "aperture_size", aperture_size); + AiNodeSetArray(in_node, "aperture_size", aperture_size); + } } if (focus_distance) From dbae1b888b0a2eb26b0a8ecf45ecaf67e5618520 Mon Sep 17 00:00:00 2001 From: Jens Lindgren Date: Sat, 13 Oct 2018 00:31:15 +0200 Subject: [PATCH 093/159] support subpixelzoom on orthographic cameras --- plugins/sitoa/common/ParamsCamera.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/plugins/sitoa/common/ParamsCamera.cpp b/plugins/sitoa/common/ParamsCamera.cpp index eaa8438..8d71c9f 100644 --- a/plugins/sitoa/common/ParamsCamera.cpp +++ b/plugins/sitoa/common/ParamsCamera.cpp @@ -109,12 +109,14 @@ CStatus LoadCameraParameters(AtNode* in_cameraNode, const Camera &in_xsiCamera, // It moved in to the for loop to support motion blur at the same time it was fixed AtVector2 screenWindowMin; AtVector2 screenWindowMax; + float orthoSubpixelMultiplier = 1.0f; if (ParAcc_GetValue(in_xsiCamera, L"proj", in_frame) == 0) { // Orthographic camera float width = (float)ParAcc_GetValue(in_xsiCamera, L"planewidth", frame); float height = (float)ParAcc_GetValue(in_xsiCamera, L"orthoheight", frame); float aspect = (float)ParAcc_GetValue(in_xsiCamera, L"aspect", frame); + orthoSubpixelMultiplier = height/2*aspect; screenWindowMin.x = -width/2; screenWindowMin.y = -height/2*aspect; @@ -155,10 +157,10 @@ CStatus LoadCameraParameters(AtNode* in_cameraNode, const Camera &in_xsiCamera, float subfrustumtop = ParAcc_GetValue(in_xsiCamera, L"subfrustumtop", frame); float subfrustumbottom = ParAcc_GetValue(in_xsiCamera, L"subfrustumbottom", frame); - screenWindowMin.x += subfrustumleft * 2.0f; - screenWindowMin.y += subfrustumbottom * 2.0f; - screenWindowMax.x += (subfrustumright - 1.0f) * 2.0f; - screenWindowMax.y += (subfrustumtop - 1.0f) * 2.0f; + screenWindowMin.x += subfrustumleft * orthoSubpixelMultiplier * 2.0f; + screenWindowMin.y += subfrustumbottom * orthoSubpixelMultiplier * 2.0f; + screenWindowMax.x += (subfrustumright - 1.0f) * orthoSubpixelMultiplier * 2.0f; + screenWindowMax.y += (subfrustumtop - 1.0f) * orthoSubpixelMultiplier * 2.0f; } AiArraySetVec2(screenWindowMins, ikey, screenWindowMin); From 6bfb6460344f4827040db799ee5d7d4a6e70837f Mon Sep 17 00:00:00 2001 From: Jens Lindgren Date: Sun, 14 Oct 2018 23:31:32 +0200 Subject: [PATCH 094/159] renamed default color manager --- plugins/sitoa/renderer/RendererOptions.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/sitoa/renderer/RendererOptions.cpp b/plugins/sitoa/renderer/RendererOptions.cpp index 7ebe30c..b884d83 100644 --- a/plugins/sitoa/renderer/RendererOptions.cpp +++ b/plugins/sitoa/renderer/RendererOptions.cpp @@ -946,7 +946,7 @@ SITOA_CALLBACK CommonRenderOptions_DefineLayout(CRef& in_ctxt) layout.AddTab(L"Color Management"); layout.AddGroup(L"Color Manager"); CValueArray color_managers; - color_managers.Add(L"None"); color_managers.Add(L""); + color_managers.Add(L"Built-in"); color_managers.Add(L""); color_managers.Add(L"OCIO"); color_managers.Add(L"color_manager_ocio"); item = layout.AddEnumControl(L"color_manager", color_managers, L"Color Manager", siControlCombo); item.PutAttribute(siUINoLabel, true); From 1c293b6a9f76c797ad97fcb8a9ceb58e7e2709c2 Mon Sep 17 00:00:00 2001 From: Jens Lindgren Date: Tue, 16 Oct 2018 23:29:16 +0200 Subject: [PATCH 095/159] export the non motion-blurred values --- plugins/sitoa/common/ParamsCamera.cpp | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/plugins/sitoa/common/ParamsCamera.cpp b/plugins/sitoa/common/ParamsCamera.cpp index 8d71c9f..c908387 100644 --- a/plugins/sitoa/common/ParamsCamera.cpp +++ b/plugins/sitoa/common/ParamsCamera.cpp @@ -106,16 +106,17 @@ CStatus LoadCameraParameters(AtNode* in_cameraNode, const Camera &in_xsiCamera, // Set the screen_window values which are default arnold camera properties // This was broken in SItoA 4.1, but fixed on Github: https://github.com/Autodesk/sitoa/issues/42 - // It moved in to the for loop to support motion blur at the same time it was fixed + // It moved in to the for-loop because these values are of array type even though they doesn't support motion blur (yet?) + // IF it supports motion blur in the future, we can simply change in_frame to frame in all the (float)ParAcc_GetValue() below AtVector2 screenWindowMin; AtVector2 screenWindowMax; float orthoSubpixelMultiplier = 1.0f; if (ParAcc_GetValue(in_xsiCamera, L"proj", in_frame) == 0) { // Orthographic camera - float width = (float)ParAcc_GetValue(in_xsiCamera, L"planewidth", frame); - float height = (float)ParAcc_GetValue(in_xsiCamera, L"orthoheight", frame); - float aspect = (float)ParAcc_GetValue(in_xsiCamera, L"aspect", frame); + float width = (float)ParAcc_GetValue(in_xsiCamera, L"planewidth", in_frame); + float height = (float)ParAcc_GetValue(in_xsiCamera, L"orthoheight", in_frame); + float aspect = (float)ParAcc_GetValue(in_xsiCamera, L"aspect", in_frame); orthoSubpixelMultiplier = height/2*aspect; screenWindowMin.x = -width/2; @@ -129,13 +130,13 @@ CStatus LoadCameraParameters(AtNode* in_cameraNode, const Camera &in_xsiCamera, if ((bool)ParAcc_GetValue(in_xsiCamera, L"projplane", in_frame)) { - float offsetX = (float)ParAcc_GetValue(in_xsiCamera, L"projplaneoffx", frame); - float offsetY = (float)ParAcc_GetValue(in_xsiCamera, L"projplaneoffy", frame); + float offsetX = (float)ParAcc_GetValue(in_xsiCamera, L"projplaneoffx", in_frame); + float offsetY = (float)ParAcc_GetValue(in_xsiCamera, L"projplaneoffy", in_frame); if (offsetX!=0.0f || offsetY!=0.0f) { - float apertureX = (float)ParAcc_GetValue(in_xsiCamera, L"projplanewidth", frame); - float apertureY = (float)ParAcc_GetValue(in_xsiCamera, L"projplaneheight", frame); + float apertureX = (float)ParAcc_GetValue(in_xsiCamera, L"projplanewidth", in_frame); + float apertureY = (float)ParAcc_GetValue(in_xsiCamera, L"projplaneheight", in_frame); factorX = (offsetX / apertureX) * 2; factorY = (offsetY / apertureY) * 2; @@ -152,10 +153,10 @@ CStatus LoadCameraParameters(AtNode* in_cameraNode, const Camera &in_xsiCamera, // The subpixelzoom mode should only affects a render region mode if (GetRenderInstance()->GetRenderType() == L"Region" && (bool)ParAcc_GetValue(in_xsiCamera, L"subpixelzoom", in_frame)) { - float subfrustumleft = ParAcc_GetValue(in_xsiCamera, L"subfrustumleft", frame); - float subfrustumright = ParAcc_GetValue(in_xsiCamera, L"subfrustumright", frame); - float subfrustumtop = ParAcc_GetValue(in_xsiCamera, L"subfrustumtop", frame); - float subfrustumbottom = ParAcc_GetValue(in_xsiCamera, L"subfrustumbottom", frame); + float subfrustumleft = ParAcc_GetValue(in_xsiCamera, L"subfrustumleft", in_frame); + float subfrustumright = ParAcc_GetValue(in_xsiCamera, L"subfrustumright", in_frame); + float subfrustumtop = ParAcc_GetValue(in_xsiCamera, L"subfrustumtop", in_frame); + float subfrustumbottom = ParAcc_GetValue(in_xsiCamera, L"subfrustumbottom", in_frame); screenWindowMin.x += subfrustumleft * orthoSubpixelMultiplier * 2.0f; screenWindowMin.y += subfrustumbottom * orthoSubpixelMultiplier * 2.0f; From 9178ebaa1d357d3cdad2869ec649b8f185302306 Mon Sep 17 00:00:00 2001 From: Jens Lindgren Date: Fri, 19 Oct 2018 14:19:33 +0200 Subject: [PATCH 096/159] remove texture search path from test 0267 --- .../XSIProject/Scenes/test_0267/data/test.scn | Bin 741376 -> 741376 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/testsuite/XSIProject/Scenes/test_0267/data/test.scn b/testsuite/XSIProject/Scenes/test_0267/data/test.scn index 1c54f137caf967302911c5a85c1721de818ec499..69180f8b60f8c78fe82611ad8aa54bd9f70b662b 100644 GIT binary patch delta 45974 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

    5h2eYo!162gjbV`2s}BrFWKnDp&d!uoJ$ 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 From a85d778f91ea1b1c0e885afc1f52a36057dbcd40 Mon Sep 17 00:00:00 2001 From: Jens Lindgren Date: Fri, 19 Oct 2018 14:21:55 +0200 Subject: [PATCH 097/159] add testsuite to gitignore --- .gitignore | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.gitignore b/.gitignore index 303edc1..fae2f16 100644 --- a/.gitignore +++ b/.gitignore @@ -41,3 +41,9 @@ cmake-build-debug # mac cruft .DS_Store + +# Softimage testsuite +*.scntoc +testsuite/XSIProject/Backup/* +testsuite/XSIProject/Cache/* +testsuite/XSIProject/system/* From 4b0d00658349ea2e4698e5e14eb28c884449a5f6 Mon Sep 17 00:00:00 2001 From: Jens Lindgren Date: Fri, 19 Oct 2018 14:28:57 +0200 Subject: [PATCH 098/159] don't ignore scntoc --- .gitignore | 1 - 1 file changed, 1 deletion(-) diff --git a/.gitignore b/.gitignore index fae2f16..b770923 100644 --- a/.gitignore +++ b/.gitignore @@ -43,7 +43,6 @@ cmake-build-debug .DS_Store # Softimage testsuite -*.scntoc testsuite/XSIProject/Backup/* testsuite/XSIProject/Cache/* testsuite/XSIProject/system/* From af2f50a21a47a8b18911cf9fdf8f25baa21c7550 Mon Sep 17 00:00:00 2001 From: Jens Lindgren Date: Sun, 21 Oct 2018 17:27:17 +0200 Subject: [PATCH 099/159] use OptiX on AOVs ending with "_denoise" --- plugins/sitoa/loader/Options.cpp | 15 ++++++++++++++- plugins/sitoa/renderer/DisplayDriver.cpp | 7 ++++++- plugins/sitoa/renderer/Drivers.cpp | 4 ++++ 3 files changed, 24 insertions(+), 2 deletions(-) diff --git a/plugins/sitoa/loader/Options.cpp b/plugins/sitoa/loader/Options.cpp index 7ec4a75..7df3b65 100644 --- a/plugins/sitoa/loader/Options.cpp +++ b/plugins/sitoa/loader/Options.cpp @@ -188,6 +188,9 @@ bool LoadFilters() return false; CNodeUtilities().SetName(closestFilterNode, "sitoa_closest_filter"); + + // optix denoise filters are added in the LoadDrivers() function because they have to be unique for each AOV + return true; } @@ -486,8 +489,18 @@ bool LoadDrivers(AtNode *in_optionsNode, Pass &in_pass, double in_frame, bool in deepExrLayersDrivers.push_back(CDeepExrLayersDrivers(masterFb.m_fullName, thisFb.m_layerName, thisFb.m_driverBitDepth)); } + // if layerName ends with "_denoise" + if (thisFb.m_layerName.ReverseFindString(L"_denoise") == (thisFb.m_layerName.Length() - CString(L"_denoise").Length())) + { + // OptiX denoise needs a separete filter for each AOV, so we create them here instad of in LoadFilters() + AtNode* optixFilterNode = AiNode("denoise_optix_filter"); + if (!optixFilterNode) + continue; + CNodeUtilities().SetName(optixFilterNode, CString(L"sitoa_" + thisFb.m_layerName + L"_optix_filter").GetAsciiString()); + AiArraySetStr(outputs, activeBuffer, CString(thisFb.m_layerName + L" " + thisFb.m_layerDataType + L" sitoa_" + thisFb.m_layerName + L"_optix_filter " + masterFb.m_fullName).GetAsciiString()); + } // Adding to outputs. masterFb differs from thisFb if they are both exr and share the same filename - if (thisFb.m_layerDataType.IsEqualNoCase(L"RGB") || thisFb.m_layerDataType.IsEqualNoCase(L"RGBA")) + else if (thisFb.m_layerDataType.IsEqualNoCase(L"RGB") || thisFb.m_layerDataType.IsEqualNoCase(L"RGBA")) AiArraySetStr(outputs, activeBuffer, CString(thisFb.m_layerName + L" " + thisFb.m_layerDataType + L" " + colorFilter + " " + masterFb.m_fullName).GetAsciiString()); else AiArraySetStr(outputs, activeBuffer, CString(thisFb.m_layerName + L" " + thisFb.m_layerDataType + L" " + numericFilter + " " + masterFb.m_fullName).GetAsciiString()); diff --git a/plugins/sitoa/renderer/DisplayDriver.cpp b/plugins/sitoa/renderer/DisplayDriver.cpp index da72584..e810569 100644 --- a/plugins/sitoa/renderer/DisplayDriver.cpp +++ b/plugins/sitoa/renderer/DisplayDriver.cpp @@ -374,7 +374,12 @@ void DisplayDriver::UpdateDisplayDriver(RendererContext& in_rendererContext, uns if (layerdataType.IsEqualNoCase(L"")) layerdataType = GetDriverLayerChannelType((LONG)renderchannel.GetChannelType()); - if (layerdataType.IsEqualNoCase(L"RGB") || layerdataType.IsEqualNoCase(L"RGBA")) + // if layerName ends with "_denoise" + if (layerName.ReverseFindString(L"_denoise") == (layerName.Length() - CString(L"_denoise").Length())) + { + displayDriver = layerName + L" " + layerdataType + L" sitoa_" + layerName + L"_optix_filter xsi_driver"; + } + else if (layerdataType.IsEqualNoCase(L"RGB") || layerdataType.IsEqualNoCase(L"RGBA")) { if (in_filterColorAov) displayDriver = layerName + L" " + layerdataType + L" sitoa_output_filter xsi_driver"; diff --git a/plugins/sitoa/renderer/Drivers.cpp b/plugins/sitoa/renderer/Drivers.cpp index 54cb846..4068b27 100644 --- a/plugins/sitoa/renderer/Drivers.cpp +++ b/plugins/sitoa/renderer/Drivers.cpp @@ -43,6 +43,10 @@ CString GetLayerName(const CString &in_datatype) if (in_datatype.IsEqualNoCase(L"Main")) return L"RGBA"; + // If someone where to create a denoise of "Main" lets handle that as well + if (in_datatype.IsEqualNoCase(L"Main_denoise")) + return L"RGBA_denoise"; + // is this one of the AOVs created by CreateRenderChannels in ArnoldScenePreferences.js ? if (in_datatype.FindString(L"Arnold_") == 0) // trim the "Arnold_" prefix, so to get back the Arnold factory name return CStringUtilities().ReplaceString(L"Arnold_", L"", in_datatype); From 765096fb7c9e90b047117c04cc51b5507c62ed44 Mon Sep 17 00:00:00 2001 From: Jens Lindgren Date: Sun, 21 Oct 2018 20:50:29 +0200 Subject: [PATCH 100/159] add more comments --- plugins/sitoa/loader/Options.cpp | 2 +- plugins/sitoa/renderer/DisplayDriver.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/sitoa/loader/Options.cpp b/plugins/sitoa/loader/Options.cpp index 7df3b65..f04fa6d 100644 --- a/plugins/sitoa/loader/Options.cpp +++ b/plugins/sitoa/loader/Options.cpp @@ -489,7 +489,7 @@ bool LoadDrivers(AtNode *in_optionsNode, Pass &in_pass, double in_frame, bool in deepExrLayersDrivers.push_back(CDeepExrLayersDrivers(masterFb.m_fullName, thisFb.m_layerName, thisFb.m_driverBitDepth)); } - // if layerName ends with "_denoise" + // if layerName ends with "_denoise", we add a denoise filter named after the layer and then add the output if (thisFb.m_layerName.ReverseFindString(L"_denoise") == (thisFb.m_layerName.Length() - CString(L"_denoise").Length())) { // OptiX denoise needs a separete filter for each AOV, so we create them here instad of in LoadFilters() diff --git a/plugins/sitoa/renderer/DisplayDriver.cpp b/plugins/sitoa/renderer/DisplayDriver.cpp index e810569..f394a44 100644 --- a/plugins/sitoa/renderer/DisplayDriver.cpp +++ b/plugins/sitoa/renderer/DisplayDriver.cpp @@ -374,7 +374,7 @@ void DisplayDriver::UpdateDisplayDriver(RendererContext& in_rendererContext, uns if (layerdataType.IsEqualNoCase(L"")) layerdataType = GetDriverLayerChannelType((LONG)renderchannel.GetChannelType()); - // if layerName ends with "_denoise" + // if layerName ends with "_denoise", we connect the driver to the optix filter for that layer if (layerName.ReverseFindString(L"_denoise") == (layerName.Length() - CString(L"_denoise").Length())) { displayDriver = layerName + L" " + layerdataType + L" sitoa_" + layerName + L"_optix_filter xsi_driver"; From 0512c85b411ace26134500aa8970f61ff5815c59 Mon Sep 17 00:00:00 2001 From: Jens Lindgren Date: Sun, 21 Oct 2018 21:08:12 +0200 Subject: [PATCH 101/159] add auto device selection --- plugins/sitoa/loader/Options.cpp | 4 ++++ plugins/sitoa/renderer/RendererOptions.cpp | 14 ++++++++++++++ plugins/sitoa/renderer/RendererOptions.h | 4 ++++ 3 files changed, 22 insertions(+) diff --git a/plugins/sitoa/loader/Options.cpp b/plugins/sitoa/loader/Options.cpp index f04fa6d..61068d3 100644 --- a/plugins/sitoa/loader/Options.cpp +++ b/plugins/sitoa/loader/Options.cpp @@ -688,6 +688,10 @@ void LoadOptionsParameters(AtNode* in_optionsNode, const Property &in_arnoldOpti int nb_threads = GetRenderOptions()->m_autodetect_threads ? 0 : GetRenderOptions()->m_threads; CNodeSetter::SetInt(in_optionsNode, "threads", nb_threads); + // GPU devices + CNodeSetter::SetString(in_optionsNode, "gpu_default_names", GetRenderOptions()->m_gpu_default_names.GetAsciiString()); + CNodeSetter::SetInt(in_optionsNode, "gpu_default_min_memory_MB", GetRenderOptions()->m_gpu_default_min_memory_MB); + // #680 LoadUserOptions(in_optionsNode, in_arnoldOptions, in_frame); } diff --git a/plugins/sitoa/renderer/RendererOptions.cpp b/plugins/sitoa/renderer/RendererOptions.cpp index b884d83..b09d809 100644 --- a/plugins/sitoa/renderer/RendererOptions.cpp +++ b/plugins/sitoa/renderer/RendererOptions.cpp @@ -34,6 +34,10 @@ void CRenderOptions::Read(const Property &in_cp) // system m_autodetect_threads = (bool)ParAcc_GetValue(in_cp, L"autodetect_threads", DBL_MAX); m_threads = (int) ParAcc_GetValue(in_cp, L"threads", DBL_MAX); + + m_gpu_default_names = ParAcc_GetValue(in_cp, L"gpu_default_names", DBL_MAX).GetAsText(); + m_gpu_default_min_memory_MB = (int) ParAcc_GetValue(in_cp, L"gpu_default_min_memory_MB", DBL_MAX); + m_bucket_scanning = ParAcc_GetValue(in_cp, L"bucket_scanning", DBL_MAX).GetAsText(); m_bucket_size = (int)ParAcc_GetValue(in_cp, L"bucket_size", DBL_MAX); m_progressive_minus3 = (bool)ParAcc_GetValue(in_cp, L"progressive_minus3", DBL_MAX); @@ -293,6 +297,10 @@ SITOA_CALLBACK CommonRenderOptions_Define(CRef& in_ctxt) // system cpset.AddParameter(L"autodetect_threads", CValue::siBool, siPersistable, L"", L"", true, CValue(), CValue(), CValue(), CValue(), p); cpset.AddParameter(L"threads", CValue::siInt4, siPersistable, L"", L"", 4, -AI_MAX_THREADS, AI_MAX_THREADS, 1, AI_MAX_THREADS, p); + + cpset.AddParameter(L"gpu_default_names", CValue::siString, siPersistable, L"", L"", L"*", CValue(), CValue(), CValue(), CValue(), p); + cpset.AddParameter(L"gpu_default_min_memory_MB", CValue::siInt4, siPersistable, L"", L"", 512, 0, 10000000, 256, 1024, p); + cpset.AddParameter(L"bucket_scanning", CValue::siString, siPersistable, L"", L"", L"spiral", CValue(), CValue(), CValue(), CValue(), p); cpset.AddParameter(L"bucket_size", CValue::siInt4, siPersistable, L"", L"", 64, 16, 256, 16, 256, p); cpset.AddParameter(L"progressive_minus3", CValue::siBool, siPersistable, L"", L"", true, CValue(), CValue(), CValue(), CValue(), p); @@ -575,6 +583,12 @@ SITOA_CALLBACK CommonRenderOptions_DefineLayout(CRef& in_ctxt) item = layout.AddItem(L"threads", L"Number of Threads"); item.PutAttribute(siUILabelPercentage, 100); layout.EndGroup(); + layout.AddGroup(L"Devices"); + item = layout.AddItem(L"gpu_default_names", L"GPU Names"); + item.PutAttribute(siUILabelMinPixels, 100); + item = layout.AddItem(L"gpu_default_min_memory_MB", L"Min. Memory (MB)"); + item.PutAttribute(siUILabelMinPixels, 100); + layout.EndGroup(); layout.AddGroup(L"Buckets", true, 0); CValueArray scanning; scanning.Add(L"top"); scanning.Add(L"top"); diff --git a/plugins/sitoa/renderer/RendererOptions.h b/plugins/sitoa/renderer/RendererOptions.h index 0bff0b8..233ea82 100644 --- a/plugins/sitoa/renderer/RendererOptions.h +++ b/plugins/sitoa/renderer/RendererOptions.h @@ -46,6 +46,8 @@ class CRenderOptions // system bool m_autodetect_threads; int m_threads; + CString m_gpu_default_names; + int m_gpu_default_min_memory_MB; CString m_bucket_scanning; int m_bucket_size; bool m_progressive_minus3; @@ -219,6 +221,8 @@ class CRenderOptions // system m_autodetect_threads(true), m_threads(4), + m_gpu_default_names(L"*"), + m_gpu_default_min_memory_MB(512), m_bucket_scanning(L"spiral"), m_bucket_size(64), m_progressive_minus3(true), From f2637ca933413758140b61d8b8729128a240862c Mon Sep 17 00:00:00 2001 From: Jens Lindgren Date: Sun, 21 Oct 2018 22:03:26 +0200 Subject: [PATCH 102/159] create optix filter in display driver if it doesn't exist --- plugins/sitoa/renderer/DisplayDriver.cpp | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/plugins/sitoa/renderer/DisplayDriver.cpp b/plugins/sitoa/renderer/DisplayDriver.cpp index f394a44..9d77891 100644 --- a/plugins/sitoa/renderer/DisplayDriver.cpp +++ b/plugins/sitoa/renderer/DisplayDriver.cpp @@ -377,7 +377,16 @@ void DisplayDriver::UpdateDisplayDriver(RendererContext& in_rendererContext, uns // if layerName ends with "_denoise", we connect the driver to the optix filter for that layer if (layerName.ReverseFindString(L"_denoise") == (layerName.Length() - CString(L"_denoise").Length())) { - displayDriver = layerName + L" " + layerdataType + L" sitoa_" + layerName + L"_optix_filter xsi_driver"; + // we need to check if the optix filter exist. If it doesn't exist, we create one. + CString optixFilterName = L"sitoa_" + layerName + L"_optix_filter"; + AtNode* optixFilterNode = AiNodeLookUpByName(optixFilterName.GetAsciiString()); + if (!optixFilterNode) + { + optixFilterNode = AiNode("denoise_optix_filter"); + if (optixFilterNode) + CNodeUtilities().SetName(optixFilterNode, optixFilterName.GetAsciiString()); + } + displayDriver = layerName + L" " + layerdataType + L" " + optixFilterName + " xsi_driver"; } else if (layerdataType.IsEqualNoCase(L"RGB") || layerdataType.IsEqualNoCase(L"RGBA")) { From 6510134a48aa54788d339de7d1f738ab9a33837c Mon Sep 17 00:00:00 2001 From: Jens Lindgren Date: Sun, 21 Oct 2018 22:32:07 +0200 Subject: [PATCH 103/159] add missing clamp parameter to layer_rgba ui --- shaders/metadata/arnold_shaders.mtd | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/shaders/metadata/arnold_shaders.mtd b/shaders/metadata/arnold_shaders.mtd index d15df69..4d20956 100644 --- a/shaders/metadata/arnold_shaders.mtd +++ b/shaders/metadata/arnold_shaders.mtd @@ -1542,7 +1542,8 @@ soft.order STRING "BeginGroup Layer_1 enable1 name1 input1 operation1 mix1 alpha "BeginGroup Layer_5 enable5 name5 input5 operation5 mix5 alpha_operation5 EndGroup " "BeginGroup Layer_6 enable6 name6 input6 operation6 mix6 alpha_operation6 EndGroup " "BeginGroup Layer_7 enable7 name7 input7 operation7 mix7 alpha_operation7 EndGroup " -"BeginGroup Layer_8 enable8 name8 input8 operation8 mix8 alpha_operation8 EndGroup" +"BeginGroup Layer_8 enable8 name8 input8 operation8 mix8 alpha_operation8 EndGroup " +"BeginGroup Clamp clamp EndGroup" [attr enable1] soft.label STRING "Enable" From e17faf865677a1184404bc7e9dfae28ea3e86b68 Mon Sep 17 00:00:00 2001 From: Jens Lindgren Date: Sun, 21 Oct 2018 23:12:33 +0200 Subject: [PATCH 104/159] add round_corners shader --- plugins/helpers/ArnoldShaderDef.js | 3 +++ shaders/metadata/arnold_shaders.mtd | 24 ++++++++++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/plugins/helpers/ArnoldShaderDef.js b/plugins/helpers/ArnoldShaderDef.js index af90236..5ee9f3c 100644 --- a/plugins/helpers/ArnoldShaderDef.js +++ b/plugins/helpers/ArnoldShaderDef.js @@ -99,6 +99,7 @@ function XSILoadPlugin( in_reg ) in_reg.RegisterShader("rgb_to_float", 1, 0); in_reg.RegisterShader("rgb_to_vector", 1, 0); in_reg.RegisterShader("rgba_to_float", 1, 0); + in_reg.RegisterShader("round_corners", 1, 0); in_reg.RegisterShader("shadow_matte", 1, 0); in_reg.RegisterShader("shuffle", 1, 0); in_reg.RegisterShader("sign", 1, 0); @@ -300,6 +301,8 @@ function Arnold_rgb_to_vector_1_0_DefineInfo(in_ctxt) { return true; } function Arnold_rgb_to_vector_1_0_Define(in_ctxt) { return true; } function Arnold_rgba_to_float_1_0_DefineInfo(in_ctxt) { return true; } function Arnold_rgba_to_float_1_0_Define(in_ctxt) { return true; } +function Arnold_round_corners_1_0_DefineInfo(in_ctxt) { return true; } +function Arnold_round_corners_1_0_Define(in_ctxt) { return true; } function Arnold_shadow_matte_1_0_DefineInfo(in_ctxt) { return true; } function Arnold_shadow_matte_1_0_Define(in_ctxt) { return true; } function Arnold_shuffle_1_0_DefineInfo(in_ctxt) { return true; } diff --git a/shaders/metadata/arnold_shaders.mtd b/shaders/metadata/arnold_shaders.mtd index 4d20956..411b7de 100644 --- a/shaders/metadata/arnold_shaders.mtd +++ b/shaders/metadata/arnold_shaders.mtd @@ -2461,6 +2461,30 @@ desc STRING "The input color." [attr mode] desc STRING "min: Minimum component. max: Maximum component. average: Average of the components. sum: Sum of the components. luminance: Rec.709/sRGB luminance." +############################################################################## +[node round_corners] +soft.category STRING "Utility" + +[attr samples] + +[attr radius] +min FLOAT 0 +softmin FLOAT 0 +softmax FLOAT 10 +default FLOAT 0.1 + +[attr normal] +soft.inspectable BOOL false + +[attr trace_set] + +[attr inclusive] + +[attr self_only] + +[attr object_space] +soft.inspectable BOOL false + ############################################################################## [node shadow_matte] soft.category STRING "Surface" From c1ae31165eddb9af7cf988110e6bc77bdc46783f Mon Sep 17 00:00:00 2001 From: Jens Lindgren Date: Sun, 21 Oct 2018 23:13:23 +0200 Subject: [PATCH 105/159] recategorize layer shaders --- shaders/metadata/arnold_shaders.mtd | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/shaders/metadata/arnold_shaders.mtd b/shaders/metadata/arnold_shaders.mtd index 411b7de..a1c7d67 100644 --- a/shaders/metadata/arnold_shaders.mtd +++ b/shaders/metadata/arnold_shaders.mtd @@ -1386,7 +1386,7 @@ desc STRING "If linked, the normal to use." ############################################################################## [node layer_float] -soft.category STRING "Utility" +soft.category STRING "Texture" soft.order STRING "BeginGroup Layer_1 enable1 name1 input1 mix1 EndGroup " "BeginGroup Layer_2 enable2 name2 input2 mix2 EndGroup " "BeginGroup Layer_3 enable3 name3 input3 mix3 EndGroup " @@ -1534,7 +1534,7 @@ softmax FLOAT 1 ############################################################################## [node layer_rgba] -soft.category STRING "Utility" +soft.category STRING "Texture" soft.order STRING "BeginGroup Layer_1 enable1 name1 input1 operation1 mix1 alpha_operation1 EndGroup " "BeginGroup Layer_2 enable2 name2 input2 operation2 mix2 alpha_operation2 EndGroup " "BeginGroup Layer_3 enable3 name3 input3 operation3 mix3 alpha_operation3 EndGroup " @@ -1718,7 +1718,7 @@ soft.label STRING "Clamp Result" ############################################################################## [node layer_shader] -soft.category STRING "Utility" +soft.category STRING "Surface" soft.order STRING "BeginGroup Layer_1 enable1 name1 input1 mix1 EndGroup " "BeginGroup Layer_2 enable2 name2 input2 mix2 EndGroup " "BeginGroup Layer_3 enable3 name3 input3 mix3 EndGroup " From d6e8c60b3433fe4a861091990166872b568c191a Mon Sep 17 00:00:00 2001 From: Jens Lindgren Date: Sun, 21 Oct 2018 23:18:27 +0200 Subject: [PATCH 106/159] arnold requirement bump to 5.2.1.0 --- README.md | 4 ++-- config/custom_linux.py | 2 +- config/custom_windows.py | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 8e2234f..c74579d 100644 --- a/README.md +++ b/README.md @@ -18,7 +18,7 @@ under an Apache 2.0 open source license. #### Requirements * Softimage 2015 SP1 -* Arnold 5.2.0.0 or newer +* Arnold 5.2.1.0 or newer * Python 2.6 or newer * Visual Studio 2012 (Windows) * GCC 4.2.4 (Linux) @@ -65,7 +65,7 @@ VS_HOME = r'C:/Program Files (x86)/Microsoft Visual Studio 11.0/VC' WINDOWS_KIT = r'C:/Program Files (x86)/Windows Kits/8.0' XSISDK_ROOT = r'C:/Program Files/Autodesk/Softimage 2015/XSISDK' -ARNOLD_HOME = r'C:/SolidAngle/Arnold-5.2.0.1/win64' +ARNOLD_HOME = r'C:/SolidAngle/Arnold-5.2.1.0/win64' TARGET_WORKGROUP_PATH = r'./Softimage_2015/Addons/SItoA' diff --git a/config/custom_linux.py b/config/custom_linux.py index e0c80ae..659200a 100644 --- a/config/custom_linux.py +++ b/config/custom_linux.py @@ -6,7 +6,7 @@ SHCXX = r'/usr/bin/gcc-4.2.4/bin/gcc-4.2.4' XSISDK_ROOT = r'/usr/Softimage/Softimage_2015/XSISDK' -ARNOLD_HOME = r'/usr/SolidAngle/Arnold-5.2.0.1/linux' +ARNOLD_HOME = r'/usr/SolidAngle/Arnold-5.2.1.0/linux' TARGET_WORKGROUP_PATH = './Softimage_2015/Addons/SItoA' diff --git a/config/custom_windows.py b/config/custom_windows.py index a045af1..d48eeca 100644 --- a/config/custom_windows.py +++ b/config/custom_windows.py @@ -9,7 +9,7 @@ WINDOWS_KIT = r'C:/Program Files (x86)/Windows Kits/8.0' XSISDK_ROOT = r'C:/Program Files/Autodesk/Softimage 2015/XSISDK' -ARNOLD_HOME = r'C:/SolidAngle/Arnold-5.2.0.1/win64' +ARNOLD_HOME = r'C:/SolidAngle/Arnold-5.2.1.0/win64' TARGET_WORKGROUP_PATH = r'./Softimage_2015/Addons/SItoA' From 3544a6ab16a972fdd9120d4cc572a258eca4b614 Mon Sep 17 00:00:00 2001 From: Jens Lindgren Date: Mon, 22 Oct 2018 00:35:05 +0200 Subject: [PATCH 107/159] add progressive rendering --- plugins/sitoa/loader/Options.cpp | 1 + plugins/sitoa/renderer/RenderInstance.cpp | 7 +++++-- plugins/sitoa/renderer/RendererOptions.cpp | 3 +++ plugins/sitoa/renderer/RendererOptions.h | 2 ++ 4 files changed, 11 insertions(+), 2 deletions(-) diff --git a/plugins/sitoa/loader/Options.cpp b/plugins/sitoa/loader/Options.cpp index 7ec4a75..e0607d5 100644 --- a/plugins/sitoa/loader/Options.cpp +++ b/plugins/sitoa/loader/Options.cpp @@ -568,6 +568,7 @@ void LoadOptionsParameters(AtNode* in_optionsNode, const Property &in_arnoldOpti CNodeSetter::SetInt(in_optionsNode, "GI_transmission_samples", GetRenderOptions()->m_GI_transmission_samples); CNodeSetter::SetInt(in_optionsNode, "GI_sss_samples", GetRenderOptions()->m_GI_sss_samples); CNodeSetter::SetInt(in_optionsNode, "GI_volume_samples", GetRenderOptions()->m_GI_volume_samples); + CNodeSetter::SetBoolean(in_optionsNode, "enable_progressive_render", GetRenderOptions()->m_enable_progressive_render); CNodeSetter::SetBoolean(in_optionsNode, "enable_adaptive_sampling", GetRenderOptions()->m_enable_adaptive_sampling); CNodeSetter::SetInt(in_optionsNode, "AA_samples_max", GetRenderOptions()->m_AA_samples_max); diff --git a/plugins/sitoa/renderer/RenderInstance.cpp b/plugins/sitoa/renderer/RenderInstance.cpp index 81fecfe..2d51c55 100644 --- a/plugins/sitoa/renderer/RenderInstance.cpp +++ b/plugins/sitoa/renderer/RenderInstance.cpp @@ -225,8 +225,11 @@ int CRenderInstance::RenderProgressiveScene() aa_steps.insert(-2); if ((aa_max > -1) && GetRenderOptions()->m_progressive_minus1) aa_steps.insert(-1); - if ((aa_max > 1) && GetRenderOptions()->m_progressive_plus1) - aa_steps.insert(1); + if (!GetRenderOptions()->m_enable_progressive_render) + { + if ((aa_max > 1) && GetRenderOptions()->m_progressive_plus1) + aa_steps.insert(1); + } aa_steps.insert(aa_max); // the main value for aa, so aa_steps is never empty, and aaMax will always be the final step used diff --git a/plugins/sitoa/renderer/RendererOptions.cpp b/plugins/sitoa/renderer/RendererOptions.cpp index b884d83..b334ca4 100644 --- a/plugins/sitoa/renderer/RendererOptions.cpp +++ b/plugins/sitoa/renderer/RendererOptions.cpp @@ -111,6 +111,7 @@ void CRenderOptions::Read(const Property &in_cp) m_GI_transmission_samples = (int)ParAcc_GetValue(in_cp, L"GI_transmission_samples", DBL_MAX); m_GI_sss_samples = (int)ParAcc_GetValue(in_cp, L"GI_sss_samples", DBL_MAX); m_GI_volume_samples = (int)ParAcc_GetValue(in_cp, L"GI_volume_samples", DBL_MAX); + m_enable_progressive_render = (bool)ParAcc_GetValue(in_cp, L"enable_progressive_render", DBL_MAX); m_enable_adaptive_sampling = (bool)ParAcc_GetValue(in_cp, L"enable_adaptive_sampling", DBL_MAX); m_AA_samples_max = (int)ParAcc_GetValue(in_cp, L"AA_samples_max", DBL_MAX); @@ -384,6 +385,7 @@ SITOA_CALLBACK CommonRenderOptions_Define(CRef& in_ctxt) cpset.AddParameter(L"GI_transmission_samples", CValue::siInt4, siPersistable, L"", L"", 2, 0, 100, 0, 10, p); cpset.AddParameter(L"GI_sss_samples", CValue::siInt4, siPersistable, L"", L"", 2, 0, 100, 0, 10, p); cpset.AddParameter(L"GI_volume_samples", CValue::siInt4, siPersistable, L"", L"", 2, 0, 100, 0, 10, p); + cpset.AddParameter(L"enable_progressive_render", CValue::siBool, siPersistable, L"", L"", false, CValue(), CValue(), CValue(), CValue(), p); cpset.AddParameter(L"enable_adaptive_sampling", CValue::siBool, siPersistable, L"", L"", false, CValue(), CValue(), CValue(), CValue(), p); cpset.AddParameter(L"AA_samples_max", CValue::siInt4, siPersistable, L"", L"", 8, -3, 100, 0, 10, p); @@ -796,6 +798,7 @@ SITOA_CALLBACK CommonRenderOptions_DefineLayout(CRef& in_ctxt) item.PutAttribute(siUILabelPercentage, 100); item = layout.AddItem(L"GI_volume_samples", L"Volume"); item.PutAttribute(siUILabelPercentage, 100); + layout.AddItem(L"enable_progressive_render", L"Progressive Render"); layout.EndGroup(); layout.AddGroup(L"Adaptive Sampling"); diff --git a/plugins/sitoa/renderer/RendererOptions.h b/plugins/sitoa/renderer/RendererOptions.h index 0bff0b8..75e37d1 100644 --- a/plugins/sitoa/renderer/RendererOptions.h +++ b/plugins/sitoa/renderer/RendererOptions.h @@ -104,6 +104,7 @@ class CRenderOptions int m_GI_transmission_samples; int m_GI_sss_samples; int m_GI_volume_samples; + bool m_enable_progressive_render; bool m_enable_adaptive_sampling; int m_AA_samples_max; @@ -273,6 +274,7 @@ class CRenderOptions m_GI_transmission_samples(2), m_GI_sss_samples(2), m_GI_volume_samples(2), + m_enable_progressive_render(false), m_enable_adaptive_sampling(false), m_AA_samples_max(8), From 572be602fe3424942d0563837b4911652bb0e7cf Mon Sep 17 00:00:00 2001 From: Jens Lindgren Date: Mon, 22 Oct 2018 00:35:35 +0200 Subject: [PATCH 108/159] disable adaptive AA on IPR --- plugins/sitoa/renderer/RenderInstance.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/plugins/sitoa/renderer/RenderInstance.cpp b/plugins/sitoa/renderer/RenderInstance.cpp index 2d51c55..1c83c15 100644 --- a/plugins/sitoa/renderer/RenderInstance.cpp +++ b/plugins/sitoa/renderer/RenderInstance.cpp @@ -237,6 +237,8 @@ int CRenderInstance::RenderProgressiveScene() AtNode* options = AiUniverseGetOptions(); // override the aspect ratio, for the viewport is always 1.0 CNodeSetter::SetFloat(options, "pixel_aspect_ratio", 1.0); + // disable adaptive AA during progressive rendering + CNodeSetter::SetBoolean(options, "enable_adaptive_sampling", false); // Disable random dithering during progressive rendering, for speed m_displayDriver.SetDisplayDithering(false); // loop the aa steps @@ -245,6 +247,8 @@ int CRenderInstance::RenderProgressiveScene() // Enable dithering for the final pass of the progressive rendering if (*aa_it == aa_max) { + // restore adaptive sampling again on final aa pass + CNodeSetter::SetBoolean(options, "enable_adaptive_sampling", GetRenderOptions()->m_enable_adaptive_sampling); m_displayDriver.SetDisplayDithering(dither); AiMsgSetConsoleFlags(verbosity); } From 187d916a8cb1b58e1da144bed08635de1e66c83e Mon Sep 17 00:00:00 2001 From: Jens Lindgren Date: Mon, 22 Oct 2018 01:03:01 +0200 Subject: [PATCH 109/159] comment change --- plugins/sitoa/renderer/RenderInstance.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/sitoa/renderer/RenderInstance.cpp b/plugins/sitoa/renderer/RenderInstance.cpp index 1c83c15..8aaea18 100644 --- a/plugins/sitoa/renderer/RenderInstance.cpp +++ b/plugins/sitoa/renderer/RenderInstance.cpp @@ -237,7 +237,7 @@ int CRenderInstance::RenderProgressiveScene() AtNode* options = AiUniverseGetOptions(); // override the aspect ratio, for the viewport is always 1.0 CNodeSetter::SetFloat(options, "pixel_aspect_ratio", 1.0); - // disable adaptive AA during progressive rendering + // disable adaptive sampling during progressive rendering CNodeSetter::SetBoolean(options, "enable_adaptive_sampling", false); // Disable random dithering during progressive rendering, for speed m_displayDriver.SetDisplayDithering(false); From 639cbcfd09913ada1f7260be9b267576789d15a0 Mon Sep 17 00:00:00 2001 From: Jens Lindgren Date: Mon, 22 Oct 2018 01:23:47 +0200 Subject: [PATCH 110/159] update progress bar correctly in progressive mode --- plugins/sitoa/renderer/DisplayDriver.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/plugins/sitoa/renderer/DisplayDriver.cpp b/plugins/sitoa/renderer/DisplayDriver.cpp index da72584..3e679e2 100644 --- a/plugins/sitoa/renderer/DisplayDriver.cpp +++ b/plugins/sitoa/renderer/DisplayDriver.cpp @@ -183,6 +183,12 @@ driver_process_bucket // Progress bar displayDriver->m_paintedDisplayArea += (bucket_size_x * bucket_size_y); int percent = (int)((displayDriver->m_paintedDisplayArea / (float)displayDriver->m_displayArea) * 100.0f); + // if in progressive render mode we need to divide percent by number of samples + AtNode* options = AiUniverseGetOptions(); + bool progressive = AiNodeGetBool(options, "enable_progressive_render"); + int aa_samples = AiNodeGetInt(options, "AA_samples"); + if (progressive && (aa_samples > 1)) + percent = percent / (aa_samples * aa_samples); displayDriver->m_renderContext.ProgressUpdate(CValue(percent).GetAsText() + L"% Rendered", L"Rendering", percent); if (!AiOutputIteratorGetNext(iterator, NULL, &pixel_type, &bucket_data)) From 07715926884f53267264ddc02b6d7d9adecadabc Mon Sep 17 00:00:00 2001 From: Jens Lindgren Date: Mon, 22 Oct 2018 20:32:51 +0200 Subject: [PATCH 111/159] don't render progressive in batch and export mode --- plugins/sitoa/loader/Options.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/plugins/sitoa/loader/Options.cpp b/plugins/sitoa/loader/Options.cpp index e0607d5..e477998 100644 --- a/plugins/sitoa/loader/Options.cpp +++ b/plugins/sitoa/loader/Options.cpp @@ -568,7 +568,11 @@ void LoadOptionsParameters(AtNode* in_optionsNode, const Property &in_arnoldOpti CNodeSetter::SetInt(in_optionsNode, "GI_transmission_samples", GetRenderOptions()->m_GI_transmission_samples); CNodeSetter::SetInt(in_optionsNode, "GI_sss_samples", GetRenderOptions()->m_GI_sss_samples); CNodeSetter::SetInt(in_optionsNode, "GI_volume_samples", GetRenderOptions()->m_GI_volume_samples); - CNodeSetter::SetBoolean(in_optionsNode, "enable_progressive_render", GetRenderOptions()->m_enable_progressive_render); + + // only export progressive if in interactive mode but not if exporting .ass + CString renderType = GetRenderInstance()->GetRenderType(); + if (Application().IsInteractive() && (renderType != L"Export")) + CNodeSetter::SetBoolean(in_optionsNode, "enable_progressive_render", GetRenderOptions()->m_enable_progressive_render); CNodeSetter::SetBoolean(in_optionsNode, "enable_adaptive_sampling", GetRenderOptions()->m_enable_adaptive_sampling); CNodeSetter::SetInt(in_optionsNode, "AA_samples_max", GetRenderOptions()->m_AA_samples_max); From 40967a3d2d22a086d8065e12c95af36c0d1f719b Mon Sep 17 00:00:00 2001 From: Jens Lindgren Date: Mon, 22 Oct 2018 21:16:22 +0200 Subject: [PATCH 112/159] don't export pixel_aspect_ratio if it's epsilon from 1 --- plugins/sitoa/loader/Options.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/sitoa/loader/Options.cpp b/plugins/sitoa/loader/Options.cpp index e477998..ec78ce8 100644 --- a/plugins/sitoa/loader/Options.cpp +++ b/plugins/sitoa/loader/Options.cpp @@ -526,7 +526,7 @@ void LoadOptionsParameters(AtNode* in_optionsNode, const Property &in_arnoldOpti CNodeSetter::SetInt(in_optionsNode, "xres", width); CNodeSetter::SetInt(in_optionsNode, "yres", height); - if (aspectRatio > 0.0f) + if (aspectRatio > 0.0f && (fabs(aspectRatio-1.0f) > AI_EPSILON)) CNodeSetter::SetFloat(in_optionsNode, "pixel_aspect_ratio", 1.0f / aspectRatio); // cropping From b1793dbc269658ba219db1d531364d4629159215 Mon Sep 17 00:00:00 2001 From: Jens Lindgren Date: Mon, 22 Oct 2018 21:48:41 +0200 Subject: [PATCH 113/159] moved some code to make it nicer --- plugins/sitoa/renderer/DisplayDriver.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/plugins/sitoa/renderer/DisplayDriver.cpp b/plugins/sitoa/renderer/DisplayDriver.cpp index 3e679e2..925b786 100644 --- a/plugins/sitoa/renderer/DisplayDriver.cpp +++ b/plugins/sitoa/renderer/DisplayDriver.cpp @@ -177,16 +177,18 @@ driver_process_bucket CRenderInstance* renderInstance = GetRenderInstance(); DisplayDriver* displayDriver = renderInstance->GetDisplayDriver(); + // get parameters necessary for progressive progress bar + AtNode* options = AiUniverseGetOptions(); + bool progressive = AiNodeGetBool(options, "enable_progressive_render"); + int aa_samples = AiNodeGetInt(options, "AA_samples"); + if (renderInstance->InterruptRenderSignal()) return; // Progress bar displayDriver->m_paintedDisplayArea += (bucket_size_x * bucket_size_y); int percent = (int)((displayDriver->m_paintedDisplayArea / (float)displayDriver->m_displayArea) * 100.0f); - // if in progressive render mode we need to divide percent by number of samples - AtNode* options = AiUniverseGetOptions(); - bool progressive = AiNodeGetBool(options, "enable_progressive_render"); - int aa_samples = AiNodeGetInt(options, "AA_samples"); + // if in progressive render mode we need to divide percent by number of progressive passes if (progressive && (aa_samples > 1)) percent = percent / (aa_samples * aa_samples); displayDriver->m_renderContext.ProgressUpdate(CValue(percent).GetAsText() + L"% Rendered", L"Rendering", percent); From 0ecf9973cec3693711e8017fa3a35b1306d48c48 Mon Sep 17 00:00:00 2001 From: Jens Lindgren Date: Mon, 22 Oct 2018 22:03:49 +0200 Subject: [PATCH 114/159] make progress bar work with adaptive sampling --- plugins/sitoa/renderer/DisplayDriver.cpp | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/plugins/sitoa/renderer/DisplayDriver.cpp b/plugins/sitoa/renderer/DisplayDriver.cpp index 925b786..8c7096e 100644 --- a/plugins/sitoa/renderer/DisplayDriver.cpp +++ b/plugins/sitoa/renderer/DisplayDriver.cpp @@ -180,7 +180,12 @@ driver_process_bucket // get parameters necessary for progressive progress bar AtNode* options = AiUniverseGetOptions(); bool progressive = AiNodeGetBool(options, "enable_progressive_render"); - int aa_samples = AiNodeGetInt(options, "AA_samples"); + int aaSamples = AiNodeGetInt(options, "AA_samples"); + bool adaptiveSampling = AiNodeGetBool(options, "enable_adaptive_sampling"); + int aaSamplesMax = AiNodeGetInt(options, "AA_samples_max"); + int progressivePasses = aaSamples * aaSamples; + if (adaptiveSampling && (aaSamplesMax > aaSamples)) + progressivePasses = aaSamplesMax * aaSamplesMax; if (renderInstance->InterruptRenderSignal()) return; @@ -189,8 +194,8 @@ driver_process_bucket displayDriver->m_paintedDisplayArea += (bucket_size_x * bucket_size_y); int percent = (int)((displayDriver->m_paintedDisplayArea / (float)displayDriver->m_displayArea) * 100.0f); // if in progressive render mode we need to divide percent by number of progressive passes - if (progressive && (aa_samples > 1)) - percent = percent / (aa_samples * aa_samples); + if (progressive && (progressivePasses > 1)) + percent = percent / progressivePasses; displayDriver->m_renderContext.ProgressUpdate(CValue(percent).GetAsText() + L"% Rendered", L"Rendering", percent); if (!AiOutputIteratorGetNext(iterator, NULL, &pixel_type, &bucket_data)) From ba93f766243f1ca16714a05f0b761522d7914a94 Mon Sep 17 00:00:00 2001 From: Jens Lindgren Date: Mon, 22 Oct 2018 22:12:56 +0200 Subject: [PATCH 115/159] clear up some confusing commenting --- plugins/sitoa/renderer/RenderInstance.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/plugins/sitoa/renderer/RenderInstance.cpp b/plugins/sitoa/renderer/RenderInstance.cpp index 8aaea18..d54ab0f 100644 --- a/plugins/sitoa/renderer/RenderInstance.cpp +++ b/plugins/sitoa/renderer/RenderInstance.cpp @@ -237,14 +237,14 @@ int CRenderInstance::RenderProgressiveScene() AtNode* options = AiUniverseGetOptions(); // override the aspect ratio, for the viewport is always 1.0 CNodeSetter::SetFloat(options, "pixel_aspect_ratio", 1.0); - // disable adaptive sampling during progressive rendering + // disable adaptive sampling during negative aa passes CNodeSetter::SetBoolean(options, "enable_adaptive_sampling", false); - // Disable random dithering during progressive rendering, for speed + // Disable random dithering during negative aa passes, for speed m_displayDriver.SetDisplayDithering(false); // loop the aa steps for (set::iterator aa_it = aa_steps.begin(); aa_it != aa_steps.end(); aa_it++) { - // Enable dithering for the final pass of the progressive rendering + // Enable dithering for the final pass of the rendering if (*aa_it == aa_max) { // restore adaptive sampling again on final aa pass From d86cb0a1c34cdc68f1ecfa8a1848381655991512 Mon Sep 17 00:00:00 2001 From: Jens Lindgren Date: Wed, 24 Oct 2018 01:06:42 +0200 Subject: [PATCH 116/159] first version of stats and profile support --- plugins/sitoa/common/Tools.cpp | 41 ++++++++++++++++++++++ plugins/sitoa/renderer/RendererOptions.cpp | 40 ++++++++++++++++++++- plugins/sitoa/renderer/RendererOptions.h | 14 ++++++++ 3 files changed, 94 insertions(+), 1 deletion(-) diff --git a/plugins/sitoa/common/Tools.cpp b/plugins/sitoa/common/Tools.cpp index b94ace9..8e3a4ce 100644 --- a/plugins/sitoa/common/Tools.cpp +++ b/plugins/sitoa/common/Tools.cpp @@ -1366,6 +1366,47 @@ void SetLogSettings(const CString& in_renderType, double in_frame) else GetMessageQueue()->LogMsg(L"[sitoa] Logging path is not valid", siWarningMsg); } + + // stats and profile + bool enableStats = GetRenderOptions()->m_enable_stats; + bool enableProfile = GetRenderOptions()->m_enable_profile; + + if (enableStats) + { + CPathString statsFile = GetRenderOptions()->m_stats_file; + statsFile = statsFile.ResolveTokens(CTimeUtilities().GetCurrentFrame()); + statsFile = statsFile.ResolvePath(); + if (CUtils::EnsureFolderExists(statsFile, true)) + { + AiStatsSetFileName(statsFile.GetAsciiString()); + AiStatsSetMode(AI_STATS_MODE_APPEND); + } + else + { + GetMessageQueue()->LogMsg(L"[sitoa] Logging Stats path is not valid", siWarningMsg); + AiStatsSetFileName(""); + } + } + else + AiStatsSetFileName(""); + + if (enableProfile) + { + CPathString profileFile = GetRenderOptions()->m_profile_file; + profileFile = profileFile.ResolveTokens(CTimeUtilities().GetCurrentFrame()); + profileFile = profileFile.ResolvePath(); + if (CUtils::EnsureFolderExists(profileFile, true)) + { + AiProfileSetFileName(profileFile.GetAsciiString()); + } + else + { + GetMessageQueue()->LogMsg(L"[sitoa] Logging Profile path is not valid", siWarningMsg); + AiProfileSetFileName(""); + } + } + else + AiProfileSetFileName(""); } diff --git a/plugins/sitoa/renderer/RendererOptions.cpp b/plugins/sitoa/renderer/RendererOptions.cpp index b884d83..19d2c73 100644 --- a/plugins/sitoa/renderer/RendererOptions.cpp +++ b/plugins/sitoa/renderer/RendererOptions.cpp @@ -188,6 +188,13 @@ void CRenderOptions::Read(const Property &in_cp) m_max_log_warning_msgs = (int) ParAcc_GetValue(in_cp, L"max_log_warning_msgs", DBL_MAX); m_texture_per_file_stats = (bool)ParAcc_GetValue(in_cp, L"texture_per_file_stats", DBL_MAX); m_output_file_tagdir_log = ParAcc_GetValue(in_cp, L"output_file_tagdir_log", DBL_MAX).GetAsText(); + + m_enable_stats = (bool)ParAcc_GetValue(in_cp, L"enable_stats", DBL_MAX); + m_stats_file = ParAcc_GetValue(in_cp, L"stats_file", DBL_MAX).GetAsText(); + m_stats_mode = (int) ParAcc_GetValue(in_cp, L"stats_mode", DBL_MAX); + m_enable_profile = (bool)ParAcc_GetValue(in_cp, L"enable_profile", DBL_MAX); + m_profile_file = ParAcc_GetValue(in_cp, L"profile_file", DBL_MAX).GetAsText(); + m_ignore_textures = (bool)ParAcc_GetValue(in_cp, L"ignore_textures", DBL_MAX); m_ignore_shaders = (bool)ParAcc_GetValue(in_cp, L"ignore_shaders", DBL_MAX); m_ignore_atmosphere = (bool)ParAcc_GetValue(in_cp, L"ignore_atmosphere", DBL_MAX); @@ -278,6 +285,8 @@ SITOA_CALLBACK CommonRenderOptions_Define(CRef& in_ctxt) CString defaultTexturesPath = CUtils::BuildPath(app.GetInstallationPath(siProjectPath), L"Pictures"); CString defaultAssPath = CUtils::BuildPath(L"[Project Path]", L"Arnold_Scenes"); // Ass Path CString defaultLogPath = CUtils::BuildPath(L"[Project Path]", L"Arnold_Logs"); // Log Path + CString defaultStatsPath = CUtils::BuildPath(L"[Project Path]", L"Arnold_Logs", L"arnold_stats.json"); + CString defaultProfilePath = CUtils::BuildPath(L"[Project Path]", L"Arnold_Logs", L"arnold_profile.json"); // shaders path char* aux = getenv("SITOA_SHADERS_PATH"); @@ -456,6 +465,13 @@ SITOA_CALLBACK CommonRenderOptions_Define(CRef& in_ctxt) cpset.AddParameter(L"texture_per_file_stats", CValue::siBool, siPersistable, L"", L"", false, CValue(), CValue(), CValue(), CValue(), p); cpset.AddParameter(L"output_file_tagdir_log", CValue::siString, siPersistable, L"", L"", defaultLogPath, CValue(), CValue(), CValue(), CValue(), p); cpset.AddParameter(L"output_file_dir_log", CValue::siString, siPersistable, L"", L"", defaultLogPath, CValue(), CValue(), CValue(), CValue(), p); + + cpset.AddParameter(L"enable_stats", CValue::siBool, siPersistable, L"", L"", false, CValue(), CValue(), CValue(), CValue(), p); + cpset.AddParameter(L"stats_file", CValue::siString, siPersistable, L"", L"", defaultStatsPath, CValue(), CValue(), CValue(), CValue(), p); + cpset.AddParameter(L"stats_mode", CValue::siInt4, siPersistable, L"", L"", eSItoALogLevel_Warnings, CValue(), CValue(), CValue(), CValue(), p); + cpset.AddParameter(L"enable_profile", CValue::siBool, siPersistable, L"", L"", false, CValue(), CValue(), CValue(), CValue(), p); + cpset.AddParameter(L"profile_file", CValue::siString, siPersistable, L"", L"", defaultProfilePath, CValue(), CValue(), CValue(), CValue(), p); + cpset.AddParameter(L"ignore_textures", CValue::siBool, siPersistable, L"", L"", false, CValue(), CValue(), CValue(), CValue(), p); cpset.AddParameter(L"ignore_shaders", CValue::siBool, siPersistable, L"", L"", false, CValue(), CValue(), CValue(), CValue(), p); cpset.AddParameter(L"ignore_atmosphere", CValue::siBool, siPersistable, L"", L"", false, CValue(), CValue(), CValue(), CValue(), p); @@ -1005,6 +1021,18 @@ SITOA_CALLBACK CommonRenderOptions_DefineLayout(CRef& in_ctxt) item.PutAttribute(siUINoLabel, true); layout.EndGroup(); layout.EndGroup(); + layout.AddGroup(L"Statistics & Profiling"); + item = layout.AddItem(L"enable_stats", L"Output Statistics"); + item = layout.AddItem(L"stats_file", L"Stats File", siControlFilePath); + item.PutAttribute(siUIFileFilter, L"JSON files (*.json)|*.json||"); + CValueArray statsMode; + statsMode.Add(L"Owerwrite"); statsMode.Add((int)AI_STATS_MODE_OVERWRITE); + statsMode.Add(L"Append"); statsMode.Add((int)AI_STATS_MODE_APPEND); + item = layout.AddEnumControl(L"stats_mode", statsMode, L"Stats Mode", siControlCombo); + item = layout.AddItem(L"enable_profile", L"Output Profile"); + item = layout.AddItem(L"profile_file", L"Profile File", siControlFilePath); + item.PutAttribute(siUIFileFilter, L"JSON files (*.json)|*.json||"); + layout.EndGroup(); layout.AddGroup(L"Ignore", true, 0); layout.AddItem(L"ignore_textures", L"Texture Maps"); layout.AddItem(L"ignore_shaders", L"Shaders"); @@ -1282,7 +1310,9 @@ SITOA_CALLBACK CommonRenderOptions_PPGEvent(const CRef& in_ctxt) else if (paramName == L"enable_log_file" || paramName == L"log_level" || - paramName == L"output_file_tagdir_log") + paramName == L"output_file_tagdir_log" || + paramName == L"enable_stats" || + paramName == L"enable_profile") DiagnosticsTabLogic(cpset); else if (paramName == L"output_file_tagdir_ass" || @@ -1579,6 +1609,14 @@ void DiagnosticsTabLogic(CustomProperty &in_cp) int log_level = (int)ParAcc_GetValue(in_cp, L"log_level", DBL_MAX); ParAcc_GetParameter(in_cp, L"texture_per_file_stats").PutCapabilityFlag(siReadOnly, log_level != eSItoALogLevel_Debug); + + // stats and profiling logic + bool stats = (bool)ParAcc_GetValue(in_cp, L"enable_stats", DBL_MAX); + ParAcc_GetParameter(in_cp, L"stats_file").PutCapabilityFlag(siReadOnly, !stats); + ParAcc_GetParameter(in_cp, L"stats_mode").PutCapabilityFlag(siReadOnly, !stats); + + bool profile = (bool)ParAcc_GetValue(in_cp, L"enable_profile", DBL_MAX); + ParAcc_GetParameter(in_cp, L"profile_file").PutCapabilityFlag(siReadOnly, !profile); } diff --git a/plugins/sitoa/renderer/RendererOptions.h b/plugins/sitoa/renderer/RendererOptions.h index 0bff0b8..b9484eb 100644 --- a/plugins/sitoa/renderer/RendererOptions.h +++ b/plugins/sitoa/renderer/RendererOptions.h @@ -175,6 +175,13 @@ class CRenderOptions bool m_texture_per_file_stats; CString m_output_file_tagdir_log; // output_file_dir_log; not read, just used to display the path + + bool m_enable_stats; + CString m_stats_file; + int m_stats_mode; + bool m_enable_profile; + CString m_profile_file; + bool m_ignore_textures; bool m_ignore_shaders; bool m_ignore_atmosphere; @@ -344,6 +351,13 @@ class CRenderOptions m_max_log_warning_msgs(5), m_texture_per_file_stats(false), m_output_file_tagdir_log(CUtils::BuildPath(L"[Project Path]", L"Arnold_Logs")), + + m_enable_stats(false), + m_stats_file(CUtils::BuildPath(L"[Project Path]", L"Arnold_Logs", L"arnold_stats.json")), + m_stats_mode(1), + m_enable_profile(false), + m_profile_file(CUtils::BuildPath(L"[Project Path]", L"Arnold_Logs", L"arnold_profile.json")), + m_ignore_textures(false), m_ignore_shaders(false), m_ignore_atmosphere(false), From 31ae294c05dbe1d299f23c0df1d26c670a026e3a Mon Sep 17 00:00:00 2001 From: Jens Lindgren Date: Wed, 7 Nov 2018 00:12:49 +0100 Subject: [PATCH 117/159] add StartsWith and EndsWith to CStringUtilities --- plugins/sitoa/common/Tools.cpp | 27 +++++++++++++++++++++++++++ plugins/sitoa/common/Tools.h | 4 ++++ 2 files changed, 31 insertions(+) diff --git a/plugins/sitoa/common/Tools.cpp b/plugins/sitoa/common/Tools.cpp index b94ace9..ad4c05a 100644 --- a/plugins/sitoa/common/Tools.cpp +++ b/plugins/sitoa/common/Tools.cpp @@ -483,6 +483,33 @@ CString CStringUtilities::GetMasterBaseNodeName(CString &in_name) return splits[count-1]; } + +// Return true or false if string starts with substring +// +// @param in_string The input string +// @param in_subString The start string +// +// @return true or false +// +bool CStringUtilities::StartsWith(CString in_string, CString in_subString) +{ + return (in_string.FindString(in_subString) == 0); +} + + +// Return true or false if string ends with substring +// +// @param in_string The input string +// @param in_subString The end string +// +// @return true or false +// +bool CStringUtilities::EndsWith(CString in_string, CString in_subString) +{ + return (in_string.ReverseFindString(in_subString) == (in_string.Length() - in_subString.Length())); +} + + //////////////////////////////////////////////////// //////////////////////////////////////////////////// //////////////////////////////////////////////////// diff --git a/plugins/sitoa/common/Tools.h b/plugins/sitoa/common/Tools.h index 44488a1..b1070b9 100644 --- a/plugins/sitoa/common/Tools.h +++ b/plugins/sitoa/common/Tools.h @@ -346,6 +346,10 @@ class CStringUtilities CString GetSoftimageNameFromSItoAName(CString &in_nane); // Return the name of the master node of a ginstance or a cloned light CString GetMasterBaseNodeName(CString &in_name); + // Checks if string starts with substring + bool StartsWith(CString in_string, CString in_subString); + // Checks if string ends with substring + bool EndsWith(CString in_string, CString in_subString); private: // Build the name for an Arnold node (overload for a CString input type) From 162dcc20f005d4ed4700f6e2d13338f35c5835d6 Mon Sep 17 00:00:00 2001 From: Jens Lindgren Date: Sat, 10 Nov 2018 17:45:42 +0100 Subject: [PATCH 118/159] add render options for optix denoiser --- plugins/sitoa/renderer/RendererOptions.cpp | 30 ++++++++++++++++++++++ plugins/sitoa/renderer/RendererOptions.h | 13 +++++++++- 2 files changed, 42 insertions(+), 1 deletion(-) diff --git a/plugins/sitoa/renderer/RendererOptions.cpp b/plugins/sitoa/renderer/RendererOptions.cpp index 0fa8318..3ad710c 100644 --- a/plugins/sitoa/renderer/RendererOptions.cpp +++ b/plugins/sitoa/renderer/RendererOptions.cpp @@ -225,6 +225,10 @@ void CRenderOptions::Read(const Property &in_cp) m_output_cameras = (bool)ParAcc_GetValue(in_cp, L"output_cameras", DBL_MAX); m_output_lights = (bool)ParAcc_GetValue(in_cp, L"output_lights", DBL_MAX); m_output_shaders = (bool)ParAcc_GetValue(in_cp, L"output_shaders", DBL_MAX); + + // denoiser + m_use_optix_on_main = (bool)ParAcc_GetValue(in_cp, L"use_optix_on_main", DBL_MAX); + m_only_show_denoise = (bool)ParAcc_GetValue(in_cp, L"only_show_denoise", DBL_MAX); } @@ -501,6 +505,10 @@ SITOA_CALLBACK CommonRenderOptions_Define(CRef& in_ctxt) cpset.AddParameter(L"output_lights", CValue::siBool, siPersistable, L"", L"", true, CValue(), CValue(), CValue(), CValue(), p); cpset.AddParameter(L"output_shaders", CValue::siBool, siPersistable, L"", L"", true, CValue(), CValue(), CValue(), CValue(), p); + // denoiser + cpset.AddParameter(L"use_optix_on_main", CValue::siBool, siPersistable, L"", L"", false, CValue(), CValue(), CValue(), CValue(), p); + cpset.AddParameter(L"only_show_denoise", CValue::siBool, siPersistable, L"", L"", true, CValue(), CValue(), CValue(), CValue(), p); + // the hidden version string saved with the scene cpset.AddParameter(L"sitoa_version", CValue::siString, siPersistable, L"", L"", L"", CValue(), CValue(), CValue(), CValue(), p); p.PutCapabilityFlag(siNotInspectable, true); @@ -1074,6 +1082,12 @@ SITOA_CALLBACK CommonRenderOptions_DefineLayout(CRef& in_ctxt) item.PutAttribute(siUICX, 140); layout.EndRow(); + layout.AddTab(L"Denoiser"); + layout.AddGroup(L"OptiX Denoiser"); + layout.AddItem(L"use_optix_on_main", L"Apply on Main"); + layout.AddItem(L"only_show_denoise", L"Only show denoise (in progressive)"); + layout.EndGroup(); + layout.AddItem(L"sitoa_version", L"SItoA Version"); return CStatus::OK; @@ -1118,6 +1132,7 @@ SITOA_CALLBACK CommonRenderOptions_PPGEvent(const CRef& in_ctxt) SubdivisionTabLogic(cpset); DiagnosticsTabLogic(cpset); AssOutputTabLogic(cpset); + DenoiserTabLogic(cpset); Pass pass(Application().GetActiveProject().GetActiveScene().GetActivePass()); @@ -1306,6 +1321,9 @@ SITOA_CALLBACK CommonRenderOptions_PPGEvent(const CRef& in_ctxt) paramName == L"compress_output_ass") AssOutputTabLogic(cpset); + else if (paramName == L"use_optix_on_main") + DenoiserTabLogic(cpset); + else if (paramName == L"skip_license_check") { bool skipLicenseCheck = (bool)ParAcc_GetValue(cpset, L"skip_license_check", DBL_MAX); @@ -1618,6 +1636,17 @@ void AssOutputTabLogic(CustomProperty &in_cp) } +// Logic for the denoiser tab +// +// @param in_cp The arnold rendering options property +// +void DenoiserTabLogic(CustomProperty &in_cp) +{ + bool useOptixOnMain = (bool)ParAcc_GetValue(in_cp, L"use_optix_on_main", DBL_MAX); + ParAcc_GetParameter(in_cp, L"only_show_denoise").PutCapabilityFlag(siReadOnly, !useOptixOnMain); +} + + // Reset the default values of all the parameters // // @param in_cp The arnold rendering options property @@ -1641,4 +1670,5 @@ void ResetToDefault(CustomProperty &in_cp, PPGEventContext &in_ctxt) SubdivisionTabLogic(in_cp); DiagnosticsTabLogic(in_cp); AssOutputTabLogic(in_cp); + DenoiserTabLogic(in_cp); } diff --git a/plugins/sitoa/renderer/RendererOptions.h b/plugins/sitoa/renderer/RendererOptions.h index 4164889..4ef2fa3 100644 --- a/plugins/sitoa/renderer/RendererOptions.h +++ b/plugins/sitoa/renderer/RendererOptions.h @@ -212,6 +212,10 @@ class CRenderOptions bool m_output_lights; bool m_output_shaders; + // denoiser + bool m_use_optix_on_main; + bool m_only_show_denoise; + ////////////////////////////////////// void Read(const Property &in_cp); @@ -382,7 +386,12 @@ class CRenderOptions m_output_geometry(false), m_output_cameras(false), m_output_lights(false), - m_output_shaders(false) + m_output_shaders(false), + + // denoiser + m_use_optix_on_main(false), + m_only_show_denoise(true) + { for (LONG i=0; i Date: Sat, 10 Nov 2018 17:46:31 +0100 Subject: [PATCH 119/159] add comment on progressive --- plugins/sitoa/renderer/RenderInstance.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/plugins/sitoa/renderer/RenderInstance.cpp b/plugins/sitoa/renderer/RenderInstance.cpp index d54ab0f..97c6b39 100644 --- a/plugins/sitoa/renderer/RenderInstance.cpp +++ b/plugins/sitoa/renderer/RenderInstance.cpp @@ -225,6 +225,7 @@ int CRenderInstance::RenderProgressiveScene() aa_steps.insert(-2); if ((aa_max > -1) && GetRenderOptions()->m_progressive_minus1) aa_steps.insert(-1); + // if progressive rendering, ignore the 1 aa step because that is already the first step in progressive if (!GetRenderOptions()->m_enable_progressive_render) { if ((aa_max > 1) && GetRenderOptions()->m_progressive_plus1) From 440affbd1390009bcaaee0d08038eda5ba6e2414 Mon Sep 17 00:00:00 2001 From: Jens Lindgren Date: Sat, 10 Nov 2018 17:57:13 +0100 Subject: [PATCH 120/159] add optix denoiser on main also adds only_show_denoise functionality and rewrite of how the optix_filter is added to the display_driver --- plugins/sitoa/renderer/DisplayDriver.cpp | 50 +++++++++++++++++++---- plugins/sitoa/renderer/DisplayDriver.h | 6 ++- plugins/sitoa/renderer/RenderInstance.cpp | 6 ++- 3 files changed, 52 insertions(+), 10 deletions(-) diff --git a/plugins/sitoa/renderer/DisplayDriver.cpp b/plugins/sitoa/renderer/DisplayDriver.cpp index 8fc96e9..f76e23d 100644 --- a/plugins/sitoa/renderer/DisplayDriver.cpp +++ b/plugins/sitoa/renderer/DisplayDriver.cpp @@ -143,7 +143,7 @@ node_initialize { CDisplayDriverData *ddData = new CDisplayDriverData; AiNodeSetLocalData(node, ddData); - AiDriverInitialize(node, false); + AiDriverInitialize(node, true); } node_update {} @@ -171,6 +171,7 @@ driver_process_bucket int i, j, pixel_type; AtRGB rgb; AtRGBA rgba; + const char* aov_name; CDisplayDriverData *ddData = (CDisplayDriverData*)AiNodeGetLocalData(node); @@ -198,7 +199,7 @@ driver_process_bucket percent = percent / progressivePasses; displayDriver->m_renderContext.ProgressUpdate(CValue(percent).GetAsText() + L"% Rendered", L"Rendering", percent); - if (!AiOutputIteratorGetNext(iterator, NULL, &pixel_type, &bucket_data)) + if (!AiOutputIteratorGetNext(iterator, &aov_name, &pixel_type, &bucket_data)) return; // if the Arnold bucket is completely in the overscan frame, don't // send it to the Softimage render view @@ -291,6 +292,17 @@ driver_process_bucket if (!renderInstance->InterruptRenderSignal()) { + // only_show_denoise + // display driver doesn't work properly if we just skip writing to the framebuffer. + // as a workaround we just output 1x1 pixel of RGBA + if (!strcmp(aov_name, "RGBA_denoise") == 0 && + displayDriver->m_useOptixOnMain && + displayDriver->m_onlyShowDenoise && + ddData->m_progressivePasses > 1) + { + view_bucket_size_x = 1U; + view_bucket_size_y = 1U; + } RenderTile fragment(view_bucket_xo, displayDriver->m_renderHeight - view_bucket_yo - view_bucket_size_y , view_bucket_size_x, view_bucket_size_y, buffer, displayDriver->m_dither); @@ -332,11 +344,14 @@ void DisplayDriver::CreateDisplayDriver() void DisplayDriver::UpdateDisplayDriver(RendererContext& in_rendererContext, unsigned int in_displayArea, - const bool in_filterColorAov, const bool in_filterNumericAov) + const bool in_filterColorAov, const bool in_filterNumericAov, + const bool in_useOptixOnMain, const bool in_onlyShowDenoise) { m_renderContext = in_rendererContext; m_displayArea = in_displayArea; m_renderHeight = (int)m_renderContext.GetAttribute(L"ImageHeight"); + m_useOptixOnMain = in_useOptixOnMain; + m_onlyShowDenoise = in_onlyShowDenoise; AtNode* options = AiUniverseGetOptions(); AtArray *outputs, *new_outputs; @@ -350,12 +365,13 @@ void DisplayDriver::UpdateDisplayDriver(RendererContext& in_rendererContext, uns Framebuffer frameBuffer = m_renderContext.GetDisplayFramebuffer(); RenderChannel renderchannel = frameBuffer.GetRenderChannel(); CString layerName = GetLayerName(renderchannel.GetName()); + CString layerdataType; if (m_renderContext.GetAttribute(L"FileOutput")) { // Display Driver format will use the DataType of the MAIN framebuffer Softimage // returns us from m_renderContext.GetDisplayFramebuffer() to avoid black images in render window (trac #780) - CString layerdataType = ParAcc_GetValue(frameBuffer, L"DataType", DBL_MAX).GetAsText(); + layerdataType = ParAcc_GetValue(frameBuffer, L"DataType", DBL_MAX).GetAsText(); if (layerdataType.IsEqualNoCase(L"RGB") || layerdataType.IsEqualNoCase(L"RGBA")) { if (in_filterColorAov) @@ -381,17 +397,17 @@ void DisplayDriver::UpdateDisplayDriver(RendererContext& in_rendererContext, uns else { // Display Driver format will use the layer data type from the renderchannel - CString layerdataType = GetDriverLayerDataTypeByName(layerName); + layerdataType = GetDriverLayerDataTypeByName(layerName); // If empty get dataType from RenderChannel.ChannelType. if (layerdataType.IsEqualNoCase(L"")) layerdataType = GetDriverLayerChannelType((LONG)renderchannel.GetChannelType()); // if layerName ends with "_denoise", we connect the driver to the optix filter for that layer - if (layerName.ReverseFindString(L"_denoise") == (layerName.Length() - CString(L"_denoise").Length())) + if (CStringUtilities().EndsWith(layerName, L"_denoise")) { // we need to check if the optix filter exist. If it doesn't exist, we create one. - CString optixFilterName = L"sitoa_" + layerName + L"_optix_filter"; + CString optixFilterName = L"sitoa_" + layerName + L"_optix_filter_display"; AtNode* optixFilterNode = AiNodeLookUpByName(optixFilterName.GetAsciiString()); if (!optixFilterNode) { @@ -419,6 +435,26 @@ void DisplayDriver::UpdateDisplayDriver(RendererContext& in_rendererContext, uns new_outputs = AiArray(1, 1, AI_TYPE_STRING, CStringUtilities().Strdup(displayDriver.GetAsciiString())); } + // if layerName is RGBA (Main) and use_optix_on_main is ON, + // we will add the denoised main to the new_outputs + if (layerName == "RGBA" && m_useOptixOnMain) + { + // we need to check if the optix filter exist. If it doesn't exist, we create one. + CString optixFilterName = L"sitoa_RGBA_denoise_optix_filter_display"; + AtNode* optixFilterNode = AiNodeLookUpByName(optixFilterName.GetAsciiString()); + if (!optixFilterNode) + { + optixFilterNode = AiNode("denoise_optix_filter"); + if (optixFilterNode) + CNodeUtilities().SetName(optixFilterNode, optixFilterName.GetAsciiString()); + } + displayDriver = L"RGBA_denoise " + layerdataType + L" " + optixFilterName + " xsi_driver"; + + // resize new_outputs so we can add optix output to display driver outputs + AiArrayResize(new_outputs, AiArrayGetNumElements(new_outputs) + 1, 1); + AiArraySetStr(new_outputs, AiArrayGetNumElements(new_outputs) - 1, CStringUtilities().Strdup(displayDriver.GetAsciiString())); + } + AiNodeSetArray(options, "outputs", new_outputs); } diff --git a/plugins/sitoa/renderer/DisplayDriver.h b/plugins/sitoa/renderer/DisplayDriver.h index 9e0fa73..8974147 100644 --- a/plugins/sitoa/renderer/DisplayDriver.h +++ b/plugins/sitoa/renderer/DisplayDriver.h @@ -56,7 +56,9 @@ class DisplayDriver void ResetAreaRendered(); // Update the render context in order to reuse the same Arnold driver // with another render session - void UpdateDisplayDriver(RendererContext& in_rendererContext, unsigned int in_displayArea, const bool in_filterColorAov, const bool in_filterNumericAov); + void UpdateDisplayDriver(RendererContext& in_rendererContext, unsigned int in_displayArea, + const bool in_filterColorAov, const bool in_filterNumericAov, + const bool in_useOptixOnMain, const bool in_onlyShowDenoise); // Sets the dithering void SetDisplayDithering(bool in_dither); @@ -65,6 +67,8 @@ class DisplayDriver int m_renderHeight; int m_displayArea; int m_paintedDisplayArea; + bool m_useOptixOnMain; + bool m_onlyShowDenoise; }; diff --git a/plugins/sitoa/renderer/RenderInstance.cpp b/plugins/sitoa/renderer/RenderInstance.cpp index 97c6b39..605e83b 100644 --- a/plugins/sitoa/renderer/RenderInstance.cpp +++ b/plugins/sitoa/renderer/RenderInstance.cpp @@ -1264,7 +1264,8 @@ CStatus CRenderInstance::ProcessPass() if (enableDisplayDriver) m_displayDriver.UpdateDisplayDriver(m_renderContext, m_renderWidth*m_renderHeight, - GetRenderOptions()->m_filter_color_AOVs, GetRenderOptions()->m_filter_numeric_AOVs); + GetRenderOptions()->m_filter_color_AOVs, GetRenderOptions()->m_filter_numeric_AOVs, + GetRenderOptions()->m_use_optix_on_main, GetRenderOptions()->m_only_show_denoise); // Check if the render has not been aborted just before render if (InterruptRenderSignal()) @@ -1515,7 +1516,8 @@ CStatus CRenderInstance::ProcessRegion() // for these new render options (1.12), let's check their existance. Else, filterColorAov defaults to false, // and all the previously saved scenes render aliased m_displayDriver.UpdateDisplayDriver(m_renderContext, displayArea, - GetRenderOptions()->m_filter_color_AOVs, GetRenderOptions()->m_filter_numeric_AOVs); + GetRenderOptions()->m_filter_color_AOVs, GetRenderOptions()->m_filter_numeric_AOVs, + GetRenderOptions()->m_use_optix_on_main, GetRenderOptions()->m_only_show_denoise); SetLogSettings(L"Region", m_frame); } From eca6968e8e7a7d0ca59b8e806bea9361af8dfdc3 Mon Sep 17 00:00:00 2001 From: Jens Lindgren Date: Sat, 10 Nov 2018 17:59:40 +0100 Subject: [PATCH 121/159] move progress bar logic moved it from driver_process_bucket to the Init() funtion in driver_open this way the sample settings is only read once instead of every bucket --- plugins/sitoa/renderer/DisplayDriver.cpp | 48 +++++++++++++++--------- plugins/sitoa/renderer/DisplayDriver.h | 5 ++- 2 files changed, 35 insertions(+), 18 deletions(-) diff --git a/plugins/sitoa/renderer/DisplayDriver.cpp b/plugins/sitoa/renderer/DisplayDriver.cpp index f76e23d..41c6e18 100644 --- a/plugins/sitoa/renderer/DisplayDriver.cpp +++ b/plugins/sitoa/renderer/DisplayDriver.cpp @@ -34,6 +34,22 @@ void CDisplayDriverData::Init(const AtBBox2 &in_display_window, const AtBBox2 &i m_data_window = in_data_window; m_overscan = m_display_window.minx != m_data_window.minx || m_display_window.miny != m_data_window.miny || m_display_window.maxx != m_data_window.maxx || m_display_window.maxy != m_data_window.maxy; + + // get parameters necessary for progressive progress bar + AtNode* options = AiUniverseGetOptions(); + bool progressive = AiNodeGetBool(options, "enable_progressive_render"); + int aaSamples = AiNodeGetInt(options, "AA_samples"); + bool adaptiveSampling = AiNodeGetBool(options, "enable_adaptive_sampling"); + int aaSamplesMax = AiNodeGetInt(options, "AA_samples_max"); + + if (progressive) + { + if (adaptiveSampling && (aaSamplesMax > aaSamples)) + m_progressivePasses = aaSamplesMax * aaSamplesMax; + else + m_progressivePasses = aaSamples * aaSamples; + } + } @@ -178,29 +194,27 @@ driver_process_bucket CRenderInstance* renderInstance = GetRenderInstance(); DisplayDriver* displayDriver = renderInstance->GetDisplayDriver(); - // get parameters necessary for progressive progress bar - AtNode* options = AiUniverseGetOptions(); - bool progressive = AiNodeGetBool(options, "enable_progressive_render"); - int aaSamples = AiNodeGetInt(options, "AA_samples"); - bool adaptiveSampling = AiNodeGetBool(options, "enable_adaptive_sampling"); - int aaSamplesMax = AiNodeGetInt(options, "AA_samples_max"); - int progressivePasses = aaSamples * aaSamples; - if (adaptiveSampling && (aaSamplesMax > aaSamples)) - progressivePasses = aaSamplesMax * aaSamplesMax; if (renderInstance->InterruptRenderSignal()) return; - // Progress bar - displayDriver->m_paintedDisplayArea += (bucket_size_x * bucket_size_y); - int percent = (int)((displayDriver->m_paintedDisplayArea / (float)displayDriver->m_displayArea) * 100.0f); - // if in progressive render mode we need to divide percent by number of progressive passes - if (progressive && (progressivePasses > 1)) - percent = percent / progressivePasses; - displayDriver->m_renderContext.ProgressUpdate(CValue(percent).GetAsText() + L"% Rendered", L"Rendering", percent); - if (!AiOutputIteratorGetNext(iterator, &aov_name, &pixel_type, &bucket_data)) return; + + // don't update progressbar if Main (RGBA) is being denoised + if (!displayDriver->m_useOptixOnMain || + (displayDriver->m_useOptixOnMain && + !strcmp(aov_name, "RGBA_denoise") == 0)) + { + // Progress bar + displayDriver->m_paintedDisplayArea += (bucket_size_x * bucket_size_y); + int percent = (int)((displayDriver->m_paintedDisplayArea / (float)displayDriver->m_displayArea) * 100.0f); + // if in progressive render mode we need to divide percent by number of progressive passes + if (ddData->m_progressivePasses > 1) + percent = percent / ddData->m_progressivePasses; + displayDriver->m_renderContext.ProgressUpdate(CValue(percent).GetAsText() + L"% Rendered", L"Rendering", percent); + } + // if the Arnold bucket is completely in the overscan frame, don't // send it to the Softimage render view if (ddData->IsBucketOutsideView(bucket_xo, bucket_yo, bucket_size_x, bucket_size_y)) diff --git a/plugins/sitoa/renderer/DisplayDriver.h b/plugins/sitoa/renderer/DisplayDriver.h index 8974147..d3219a2 100644 --- a/plugins/sitoa/renderer/DisplayDriver.h +++ b/plugins/sitoa/renderer/DisplayDriver.h @@ -26,7 +26,8 @@ class CDisplayDriverData AtBBox2 m_data_window; // can be negative if overscan enabled public: - CDisplayDriverData() : m_overscan(false) + CDisplayDriverData() : m_overscan(false), + m_progressivePasses(1) {} // Initialize the driver data @@ -44,6 +45,8 @@ class CDisplayDriverData const int in_bucket_size_x, const int in_bucket_size_y, unsigned int &out_bucket_xo, unsigned int &out_bucket_yo, unsigned int &out_bucket_size_x, unsigned int &out_bucket_size_y); + + int m_progressivePasses; }; From 342d2a10be781b94cc13135168e8868be349a3fd Mon Sep 17 00:00:00 2001 From: Jens Lindgren Date: Sat, 10 Nov 2018 18:26:52 +0100 Subject: [PATCH 122/159] cleanup optix denoiser file output logic --- plugins/sitoa/loader/Options.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/plugins/sitoa/loader/Options.cpp b/plugins/sitoa/loader/Options.cpp index 3a61ccb..6dbf442 100644 --- a/plugins/sitoa/loader/Options.cpp +++ b/plugins/sitoa/loader/Options.cpp @@ -490,14 +490,15 @@ bool LoadDrivers(AtNode *in_optionsNode, Pass &in_pass, double in_frame, bool in } // if layerName ends with "_denoise", we add a denoise filter named after the layer and then add the output - if (thisFb.m_layerName.ReverseFindString(L"_denoise") == (thisFb.m_layerName.Length() - CString(L"_denoise").Length())) + if (CStringUtilities().EndsWith(thisFb.m_layerName, L"_denoise")) { // OptiX denoise needs a separete filter for each AOV, so we create them here instad of in LoadFilters() + CString optixFilterName = L"sitoa_" + thisFb.m_layerName + L"_optix_filter"; AtNode* optixFilterNode = AiNode("denoise_optix_filter"); if (!optixFilterNode) continue; - CNodeUtilities().SetName(optixFilterNode, CString(L"sitoa_" + thisFb.m_layerName + L"_optix_filter").GetAsciiString()); - AiArraySetStr(outputs, activeBuffer, CString(thisFb.m_layerName + L" " + thisFb.m_layerDataType + L" sitoa_" + thisFb.m_layerName + L"_optix_filter " + masterFb.m_fullName).GetAsciiString()); + CNodeUtilities().SetName(optixFilterNode, optixFilterName.GetAsciiString()); + AiArraySetStr(outputs, activeBuffer, CString(thisFb.m_layerName + L" " + thisFb.m_layerDataType + L" " + optixFilterName + L" " + masterFb.m_fullName).GetAsciiString()); } // Adding to outputs. masterFb differs from thisFb if they are both exr and share the same filename else if (thisFb.m_layerDataType.IsEqualNoCase(L"RGB") || thisFb.m_layerDataType.IsEqualNoCase(L"RGBA")) From 844ac24c0e2ea22cb41ff903a6c548a30abe1045 Mon Sep 17 00:00:00 2001 From: Jens Lindgren Date: Mon, 3 Dec 2018 23:21:04 +0100 Subject: [PATCH 123/159] add sheen parameters to toon shader --- shaders/metadata/arnold_shaders.mtd | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/shaders/metadata/arnold_shaders.mtd b/shaders/metadata/arnold_shaders.mtd index a1c7d67..d7aaea6 100644 --- a/shaders/metadata/arnold_shaders.mtd +++ b/shaders/metadata/arnold_shaders.mtd @@ -3539,7 +3539,8 @@ soft.order STRING "BeginGroup Edge enable edge_color edge_tonemap edge_opacity e "BeginGroup Emission emission emission_color EndGroup " "BeginGroup Geometry normal tangent bump_mode EndGroup " "BeginGroup AOVs aov_highlight aov_rim_light EndGroup " -"BeginGroup Advanced indirect_diffuse indirect_specular energy_conserving EndGroup" +"BeginGroup Advanced indirect_diffuse indirect_specular energy_conserving EndGroup " +"BeginGroup Sheen sheen sheen_color sheen_roughness EndGroup" # Edge @@ -3800,6 +3801,22 @@ max FLOAT 1 [attr energy_conserving] desc STRING "The Toon shader is energy conserving by default. If this is disabled, the Toon shader simply adds Base, Specular, and Transmission. Care should be taken when disabling this option as it will affect indirect illumination with the Toon shader." +[attr sheen] +desc STRING "Sheen Weight" +soft.label STRING "Weight" +min FLOAT 0 +max FLOAT 1 + +[attr sheen_color] +desc STRING "Sheen Color" +soft.label STRING "Color" + +[attr sheen_roughness] +desc STRING "Sheen Roughness" +soft.label STRING "Roughness" +min FLOAT 0 +max FLOAT 1 + ############################################################################## [node trace_set] soft.category STRING "Utility" From fa3935eefcf47ad175e3a3a76f777a0f7be34370 Mon Sep 17 00:00:00 2001 From: Jens Lindgren Date: Mon, 3 Dec 2018 23:21:32 +0100 Subject: [PATCH 124/159] add sheen aovs --- plugins/helpers/ArnoldScenePreferences.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/plugins/helpers/ArnoldScenePreferences.js b/plugins/helpers/ArnoldScenePreferences.js index a57f91e..b7eeca1 100644 --- a/plugins/helpers/ArnoldScenePreferences.js +++ b/plugins/helpers/ArnoldScenePreferences.js @@ -147,6 +147,10 @@ function CreateRenderChannels() aov_array.push({ name: "shadow_diff", type: siRenderChannelColorType }); // shadow_matte shader aov_array.push({ name: "shadow_mask", type: siRenderChannelColorType }); // shadow_matte shader aov_array.push({ name: "shadow_matte", type: siRenderChannelColorType }); + aov_array.push({ name: "sheen", type: siRenderChannelColorType }); + aov_array.push({ name: "sheen_direct", type: siRenderChannelColorType }); + aov_array.push({ name: "sheen_indirect", type: siRenderChannelColorType }); + aov_array.push({ name: "sheen_albedo", type: siRenderChannelColorType }); aov_array.push({ name: "specular", type: siRenderChannelColorType }); aov_array.push({ name: "specular_albedo", type: siRenderChannelColorType }); aov_array.push({ name: "specular_direct", type: siRenderChannelColorType }); From 1d7b957442a0f3182226a3ff7bdd8b01a75a9eff Mon Sep 17 00:00:00 2001 From: Jens Lindgren Date: Sun, 9 Dec 2018 23:51:34 +0100 Subject: [PATCH 125/159] error message if optix driver can't be created --- plugins/sitoa/loader/Options.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/plugins/sitoa/loader/Options.cpp b/plugins/sitoa/loader/Options.cpp index 6dbf442..9bc0868 100644 --- a/plugins/sitoa/loader/Options.cpp +++ b/plugins/sitoa/loader/Options.cpp @@ -496,7 +496,10 @@ bool LoadDrivers(AtNode *in_optionsNode, Pass &in_pass, double in_frame, bool in CString optixFilterName = L"sitoa_" + thisFb.m_layerName + L"_optix_filter"; AtNode* optixFilterNode = AiNode("denoise_optix_filter"); if (!optixFilterNode) + { + GetMessageQueue()->LogMsg(L"[sitoa] Couldn't create denoise_optix_filter for layer " + thisFb.m_layerName, siErrorMsg); continue; + } CNodeUtilities().SetName(optixFilterNode, optixFilterName.GetAsciiString()); AiArraySetStr(outputs, activeBuffer, CString(thisFb.m_layerName + L" " + thisFb.m_layerDataType + L" " + optixFilterName + L" " + masterFb.m_fullName).GetAsciiString()); } From 13ab967c382b57d993bc800bb70620b6c125d0a3 Mon Sep 17 00:00:00 2001 From: Jens Lindgren Date: Sat, 15 Dec 2018 17:45:16 +0100 Subject: [PATCH 126/159] add output_denoising_aovs settings --- plugins/sitoa/renderer/RendererOptions.cpp | 5 +++++ plugins/sitoa/renderer/RendererOptions.h | 4 +++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/plugins/sitoa/renderer/RendererOptions.cpp b/plugins/sitoa/renderer/RendererOptions.cpp index 3ad710c..22a6883 100644 --- a/plugins/sitoa/renderer/RendererOptions.cpp +++ b/plugins/sitoa/renderer/RendererOptions.cpp @@ -229,6 +229,7 @@ void CRenderOptions::Read(const Property &in_cp) // denoiser m_use_optix_on_main = (bool)ParAcc_GetValue(in_cp, L"use_optix_on_main", DBL_MAX); m_only_show_denoise = (bool)ParAcc_GetValue(in_cp, L"only_show_denoise", DBL_MAX); + m_output_denoising_aovs = (bool)ParAcc_GetValue(in_cp, L"output_denoising_aovs", DBL_MAX); } @@ -508,6 +509,7 @@ SITOA_CALLBACK CommonRenderOptions_Define(CRef& in_ctxt) // denoiser cpset.AddParameter(L"use_optix_on_main", CValue::siBool, siPersistable, L"", L"", false, CValue(), CValue(), CValue(), CValue(), p); cpset.AddParameter(L"only_show_denoise", CValue::siBool, siPersistable, L"", L"", true, CValue(), CValue(), CValue(), CValue(), p); + cpset.AddParameter(L"output_denoising_aovs", CValue::siBool, siPersistable, L"", L"", false, CValue(), CValue(), CValue(), CValue(), p); // the hidden version string saved with the scene cpset.AddParameter(L"sitoa_version", CValue::siString, siPersistable, L"", L"", L"", CValue(), CValue(), CValue(), CValue(), p); @@ -1087,6 +1089,9 @@ SITOA_CALLBACK CommonRenderOptions_DefineLayout(CRef& in_ctxt) layout.AddItem(L"use_optix_on_main", L"Apply on Main"); layout.AddItem(L"only_show_denoise", L"Only show denoise (in progressive)"); layout.EndGroup(); + layout.AddGroup(L"Arnold Denoiser (noice)"); + layout.AddItem(L"output_denoising_aovs", L"Output Denoising AOVs"); + layout.EndGroup(); layout.AddItem(L"sitoa_version", L"SItoA Version"); diff --git a/plugins/sitoa/renderer/RendererOptions.h b/plugins/sitoa/renderer/RendererOptions.h index 4ef2fa3..2321a45 100644 --- a/plugins/sitoa/renderer/RendererOptions.h +++ b/plugins/sitoa/renderer/RendererOptions.h @@ -215,6 +215,7 @@ class CRenderOptions // denoiser bool m_use_optix_on_main; bool m_only_show_denoise; + bool m_output_denoising_aovs; ////////////////////////////////////// @@ -390,7 +391,8 @@ class CRenderOptions // denoiser m_use_optix_on_main(false), - m_only_show_denoise(true) + m_only_show_denoise(true), + m_output_denoising_aovs(false) { for (LONG i=0; i Date: Wed, 19 Dec 2018 00:21:56 +0100 Subject: [PATCH 127/159] add button to open denoiser --- plugins/sitoa/renderer/RendererOptions.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/plugins/sitoa/renderer/RendererOptions.cpp b/plugins/sitoa/renderer/RendererOptions.cpp index 22a6883..92c930b 100644 --- a/plugins/sitoa/renderer/RendererOptions.cpp +++ b/plugins/sitoa/renderer/RendererOptions.cpp @@ -1091,6 +1091,7 @@ SITOA_CALLBACK CommonRenderOptions_DefineLayout(CRef& in_ctxt) layout.EndGroup(); layout.AddGroup(L"Arnold Denoiser (noice)"); layout.AddItem(L"output_denoising_aovs", L"Output Denoising AOVs"); + layout.AddButton(L"OpenDenoiserProperties", L"Arnold Denoiser Properties..."); layout.EndGroup(); layout.AddItem(L"sitoa_version", L"SItoA Version"); @@ -1278,6 +1279,11 @@ SITOA_CALLBACK CommonRenderOptions_PPGEvent(const CRef& in_ctxt) } } } + else if (buttonName.IsEqualNoCase(L"OpenDenoiserProperties")) + { + CValue retval = false; + Application().ExecuteCommand(L"SITOA_AddDenoiserProperty", NULL, retval); + } } else if (eventID == PPGEventContext::siParameterChange) { From e60398b2ac70b8ec6946825da933f4b5aacc6119 Mon Sep 17 00:00:00 2001 From: Jens Lindgren Date: Wed, 19 Dec 2018 00:22:57 +0100 Subject: [PATCH 128/159] exporter for denoising aovs like maxtoa --- plugins/sitoa/loader/Options.cpp | 51 ++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) diff --git a/plugins/sitoa/loader/Options.cpp b/plugins/sitoa/loader/Options.cpp index 9bc0868..929e646 100644 --- a/plugins/sitoa/loader/Options.cpp +++ b/plugins/sitoa/loader/Options.cpp @@ -189,6 +189,20 @@ bool LoadFilters() CNodeUtilities().SetName(closestFilterNode, "sitoa_closest_filter"); + // if we're outputting denoising aovs we need a variance filter + // https://github.com/Autodesk/sitoa/issues/34 + if (GetRenderOptions()->m_output_denoising_aovs && !(filterType.IsEqualNoCase(L"variance") || filterType.IsEqualNoCase(L"contour"))) + { + // create a variance filter + AtNode* varianceFilterNode = AiNode("variance_filter"); + if (!varianceFilterNode) + return false; + CNodeUtilities().SetName(varianceFilterNode, "sitoa_variance_filter"); + CNodeSetter::SetFloat(varianceFilterNode, "width", GetRenderOptions()->m_output_filter_width); // width of output_filter + CNodeSetter::SetBoolean(varianceFilterNode, "scalar_mode", false); + CNodeSetter::SetString(varianceFilterNode, "filter_weights", filterType.GetAsciiString()); // type of output_filter + } + // optix denoise filters are added in the LoadDrivers() function because they have to be unique for each AOV return true; @@ -512,6 +526,43 @@ bool LoadDrivers(AtNode *in_optionsNode, Pass &in_pass, double in_frame, bool in activeBuffer++; } + // Setup the AOVs for Arnold Denoising (noice) + // https://github.com/Autodesk/sitoa/issues/34 + if (GetRenderOptions()->m_output_denoising_aovs) + { + // get the main framebuffer, we're gonna need some data from it + Framebuffer frameBuffer(in_pass.GetFramebuffers().GetItem(L"Main")); + CFrameBuffer mainFb(frameBuffer, in_frame, false); + if (mainFb.m_driverName.IsEqualNoCase(L"driver_exr")) + { + CString fullName = CString(mainFb.m_fullName + L"_Noice_Input"); + + // we create the path by modifying the filename of the framebuffer + CString orgFileName = ParAcc_GetValue(frameBuffer, L"Filename", in_frame); + frameBuffer.PutParameterValue(L"Filename", orgFileName + L"_Noice_Input", in_frame); + CString fileNamePath = CPathTranslator::TranslatePath(frameBuffer.GetResolvedPath(CTime(in_frame)).GetAsciiString(), false); + frameBuffer.PutParameterValue(L"Filename", orgFileName, in_frame); // restore the framebuffer filename + + // create the driver node that will output the denoising aovs + AtNode* driverNode = AiNode(mainFb.m_driverName.GetAsciiString()); + if (driverNode) + { + CNodeUtilities().SetName(driverNode, fullName); + CNodeSetter::SetString(driverNode, "filename", fileNamePath.GetAsciiString()); + } + + // add the denoising aovs + AiArrayResize(outputs, activeBuffers + 5, 1); + AiArraySetStr(outputs, activeBuffers, CString(L"RGBA RGBA " + colorFilter + L" " + fullName).GetAsciiString()); + AiArraySetStr(outputs, activeBuffers+1, CString(L"N VECTOR " + colorFilter + L" " + fullName).GetAsciiString()); + AiArraySetStr(outputs, activeBuffers+2, CString(L"Z FLOAT " + colorFilter + L" " + fullName).GetAsciiString()); + AiArraySetStr(outputs, activeBuffers+3, CString(L"diffuse_albedo RGB " + colorFilter + L" " + fullName).GetAsciiString()); + AiArraySetStr(outputs, activeBuffers+4, CString(L"RGB RGB sitoa_variance_filter " + fullName + L" variance").GetAsciiString()); + } + else + GetMessageQueue()->LogMsg(L"[sitoa] Arnold Denoising AOVs can only be output to exr.", siWarningMsg); + } + // Setting outpus array only if there is at least one active framebuffer if (activeBuffer > 0) { From 6c4a48105a17d13bd043610a8dced4127d09454d Mon Sep 17 00:00:00 2001 From: Jens Lindgren Date: Wed, 19 Dec 2018 00:24:00 +0100 Subject: [PATCH 129/159] arnold denoiser ui --- plugins/helpers/ArnoldDenoiser.py | 405 ++++++++++++++++++++++++++++++ 1 file changed, 405 insertions(+) create mode 100644 plugins/helpers/ArnoldDenoiser.py diff --git a/plugins/helpers/ArnoldDenoiser.py b/plugins/helpers/ArnoldDenoiser.py new file mode 100644 index 0000000..385e5d4 --- /dev/null +++ b/plugins/helpers/ArnoldDenoiser.py @@ -0,0 +1,405 @@ +"""************************************************************************************************************************************ +Copyright 2017 Autodesk, Inc. All rights reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. +You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and limitations under the License. +************************************************************************************************************************************""" + +# Arnold Denoiser +# Initial code generated by Softimage SDK Wizard +# Executed Tue Dec 11 19:48:36 UTC+0100 2018 by Jens Lindgren + +import win32com.client +from win32com.client import constants as C + +import glob +import os +import re +import subprocess +import sys +import threading +from time import sleep + +null = None +false = 0 +true = 1 + +# startupinfo to prevent Windows processes to display a console window +if sys.platform == 'win32': + _no_window = subprocess.STARTUPINFO() + _no_window.dwFlags |= subprocess.STARTF_USESHOWWINDOW +else: + _no_window = None + + +def XSILoadPlugin( in_reg ): + if Application.plugins('Arnold Tools') is None: + Application.LoadPlugin(XSIUtils.BuildPath(in_reg.OriginPath, 'ArnoldTools.js')) + + h = Application.SItoAToolHelper() + h.SetPluginInfo(in_reg, 'Arnold Denoiser') + + in_reg.RegisterCommand('AddDenoiserProperty', 'SITOA_AddDenoiserProperty') + in_reg.RegisterProperty('arnold_denoiser') + #RegistrationInsertionPoint - do not remove this line + + return true + +def XSIUnloadPlugin( in_reg ): + return true + +def AddDenoiserProperty_Init( in_ctxt ): + oCmd = in_ctxt.Source + oArgs = oCmd.Arguments + oArgs.Add("in_inspect") + return true + +def AddDenoiserProperty_Execute(in_inspect): + inspect = True if in_inspect is None else in_inspect + + obj = Application.ActiveSceneRoot + obj = Application.ActiveProject.ActiveScene.ActivePass + propCollection = obj.Properties + prop = propCollection.find('arnold_denoiser') + + if not prop: + prop = obj.AddProperty("arnold_denoiser", false, "Arnold Denoiser") + + if inspect: + Application.InspectObj(prop) + + return prop + +def arnold_denoiser_Define( in_ctxt ): + cp = in_ctxt.Source + cp.AddParameter2('input', C.siString, '', None, None, None, None, C.siClassifUnknown, C.siPersistable) + cp.AddParameter2('output', C.siString, '', None, None, None, None, C.siClassifUnknown, C.siPersistable) + cp.AddParameter2('frame_range', C.siString, 'Complete Sequence', None, None, None, None, C.siClassifUnknown, C.siPersistable) + cp.AddParameter2('start_frame', C.siInt4, 0, 0, 2147483647, 0, 100, C.siClassifUnknown, C.siPersistable) + cp.AddParameter2('end_frame', C.siInt4, 0, 0, 2147483647, 0, 100, C.siClassifUnknown, C.siPersistable) + cp.AddParameter2('temporal_frames', C.siInt4, 0, 0, 2, 0, 2, C.siClassifUnknown, C.siPersistable) + cp.AddParameter2('variance', C.siFloat, 0.5, 0, 1, 0, 1, C.siClassifUnknown, C.siPersistable) + cp.AddParameter2('pixel_search_radius', C.siInt4, 9, 6, 21, 6, 21, C.siClassifUnknown, C.siPersistable) + cp.AddParameter2('pixel_patch_radius', C.siInt4, 3, 0, 6, 0, 6, C.siClassifUnknown, C.siPersistable) + cp.AddParameter2('light_group_aovs', C.siString, '', None, None, None, None, C.siClassifUnknown, C.siPersistable) + return true + +# Tip: Use the "Refresh" option on the Property Page context menu to +# reload your script changes and re-execute the DefineLayout callback. +def arnold_denoiser_DefineLayout( in_ctxt ): + layout = in_ctxt.Source + layout.Clear() + + file_types = 'OpenEXR files (*.exr)|*.exr||' + + item = layout.AddItem('input', 'Input', C.siControlFilePath) + item.SetAttribute(C.siUIFileFilter, file_types) + item.SetAttribute(C.siUIOpenFile, True) + item.SetAttribute(C.siUIFileMustExist, True) + item.SetAttribute(C.siUILabelMinPixels, 40) + item.SetAttribute(C.siUILabelPercentage, 20) + + item = layout.AddItem('output', 'Output', C.siControlFilePath) + item.SetAttribute(C.siUIFileFilter, file_types) + item.SetAttribute(C.siUILabelMinPixels, 40) + item.SetAttribute(C.siUILabelPercentage, 20) + + frame_ranges = [ + 'Single Frame', 'Single Frame', + 'Start / End', 'Start / End', + 'Complete Sequence', 'Complete Sequence' + ] + item = layout.AddEnumControl('frame_range', frame_ranges, 'Frame Range') + item.SetAttribute(C.siUILabelMinPixels, 80) + + layout.AddRow() + layout.AddItem('start_frame', 'Start Frame') + layout.AddItem('end_frame', 'End Frame') + layout.EndRow() + + item = layout.AddItem('temporal_frames', 'Temporal Stability Frames') + item.SetAttribute(C.siUILabelMinPixels, 140) + + item = layout.AddItem('variance', 'Variance') + item.SetAttribute(C.siUILabelMinPixels, 140) + + item = layout.AddItem('pixel_search_radius', 'Pixel Search Radius') + item.SetAttribute(C.siUILabelMinPixels, 140) + + item = layout.AddItem('pixel_patch_radius', 'Pixel Patch Radius') + item.SetAttribute(C.siUILabelMinPixels, 140) + + item = layout.AddItem('light_group_aovs', 'Light Group AOVs') + item.SetAttribute(C.siUILabelMinPixels, 100) + + layout.AddButton('denoise', 'Denoise') + return true + +def arnold_denoiser_OnInit( ): + Application.LogMessage('arnold_denoiser_OnInit called', C.siVerbose) + frame_range_logic() + +def arnold_denoiser_OnClosed( ): + Application.LogMessage('arnold_denoiser_OnClosed called', C.siVerbose) + +def arnold_denoiser_input_OnChanged( ): + Application.LogMessage('arnold_denoiser_input_OnChanged called', C.siVerbose) + oParam = PPG.input + paramVal = oParam.Value + Application.LogMessage(str('New value: ') + str(paramVal), C.siVerbose) + input_logic() + +def arnold_denoiser_frame_range_OnChanged( ): + Application.LogMessage('arnold_denoiser_frame_range_OnChanged called', C.siVerbose) + oParam = PPG.frame_range + paramVal = oParam.Value + Application.LogMessage(str('New value: ') + str(paramVal), C.siVerbose) + frame_range_logic() + +def arnold_denoiser_denoise_OnClicked( ): + Application.LogMessage('arnold_denoiser_denoise_OnClicked called', C.siVerbose) + cp = PPG.Inspected(0) + doDenoise(cp) + +def frame_range_logic(): + if PPG.frame_range.Value == 'Start / End': + PPG.start_frame.Enable(True) + PPG.end_frame.Enable(True) + elif PPG.frame_range.Value == 'Single Frame': + PPG.start_frame.Enable(True) + PPG.end_frame.Enable(False) + else: + PPG.start_frame.Enable(False) + PPG.end_frame.Enable(False) + +def input_logic(): + # convert softimage file sequnce syntax + inputFile = PPG.input.Value + inputSeq = ImageSequence(inputFile) + start_frame = inputSeq.start + end_frame = inputSeq.end + + outputSeq = ImageSequence(inputFile) + outputSeq.addFilebaseSuffix('_denoised') + + PPG.start_frame.Value = start_frame + PPG.end_frame.Value = end_frame + PPG.output.Value = outputSeq.squares() + + +class ImageSequence(object): + si_re = re.compile(r'(.*)\[(\d+)\.{2}(\d+);(\d+)\](.*)(\..+)') + square_re = re.compile(r'(.*?)(#+)(.*)(\..+)') + def __init__(self, path=None): + # Class that make conversions. + + self.start = 0 + self.end = 0 + self.padding = 4 + self.filebase = u'' + self.filehead = u'' + self.ext = u'' + self._creation_path = None + + if path is not None: + self._creation_path = path + + if self.si_re.match(path): + self.parseSiSequence() + elif self.square_re.match(path): + self.parseSquareSequence() + else: + self.parseDigitSequence() + + def __repr__(self): + return 'ImageSequence(start={}, end={}, padding={}, filebase={}, filehead={}, ext={})'.format( + self.start, + self.end, + self.padding, + self.filebase, + self.filehead, + self.ext + ) + + def parseSiSequence(self): + re_result = self.si_re.search(self._creation_path) + + self.start = int(re_result.group(2)) + self.end = int(re_result.group(3)) + self.padding = int(re_result.group(4)) + self.filebase = re_result.group(1) + self.filehead = re_result.group(5) + self.ext = re_result.group(6) + + + def parseSquareSequence(self): + re_result = self.square_re.search(self._creation_path) + + self.padding = len(re_result.group(2)) + self.filebase = re_result.group(1) + self.filehead = re_result.group(3) + self.ext = re_result.group(4) + + begin_pos = len(self.filebase) + end_pos = begin_pos + self.padding + + end_frame = start_frame = 0 + globFile = self.filebase + u'[0-9]' * self.padding + self.filehead + self.ext + filesList = glob.glob(globFile) or [] + + for matchingFile in filesList: + frame_token = int(matchingFile[begin_pos:end_pos]) + if start_frame < 0 or frame_token < start_frame: + start_frame = frame_token + if frame_token > end_frame: + end_frame = frame_token + + self.start = start_frame + self.end = end_frame + + + def parseDigitSequence(self): + base, ext = os.path.splitext(self._creation_path) + + head_length = 0 + padding = 0 + for c in reversed(base): + if u'0' <= c < u'9': + padding += 1 + elif padding > 0: + break # I already found numerical characters and they're finished now + else: + # still haven't found a numerical parameter + head_length += 1 + + if padding > 0: + if head_length > 0: + self.start = int(base[-(head_length+padding):-head_length]) + self.filehead = base[-head_length:] + else: + self.start = int(base[-(head_length+padding):]) + self.filehead = u'' + self.end = self.start + self.padding = padding + self.filebase = base[:-(head_length+padding)] + self.ext = ext + + + def si(self): + if self.start == self.end: + # if start = end, return the single frame + return self.frame(self.start) + return u'{}[{}..{};{}]{}{}'.format(self.filebase, self.start, self.end, self.padding, self.filehead, self.ext) + + def squares(self): + if self.start == self.end: + # if start = end, return the single frame + return self.frame(self.start) + return (u'{}' + u'#' * self.padding + '{}{}').format(self.filebase, self.filehead, self.ext) + + def frame(self, frame): + return (u'{}{:0' + str(self.padding) + u'd}{}{}').format(self.filebase, frame, self.filehead, self.ext) + + + def addFilebaseSuffix(self, suffix): + if self.filebase[-1] in u'._': + new_filebase = self.filebase[:-1] + new_filebase += suffix + new_filebase += self.filebase[-1:] + else: + new_filebase = self.filebase + suffix + + self.filebase = new_filebase + + +def doDenoise(cp): + #if self.running: + # return + + inFile = cp.input.Value + outFile = cp.output.Value + + if inFile == '': + XSIUIToolkit.MsgBox('An input file must be selected', C.siMsgOkOnly, 'Arnold Denoiser') + return False + if outFile == '': + XSIUIToolkit.MsgBox('An output file must be selected', C.siMsgOkOnly, 'Arnold Denoiser') + return False + + inFile = ImageSequence(inFile) + outFile = ImageSequence(outFile) + + #self.running = True + start_frame = cp.start_frame.Value + frame_range = cp.frame_range.Value + if frame_range == u'Single Frame': + end_frame = start_frame + elif frame_range == u'Start / End': + end_frame = cp.end_frame.Value + else: # complete sequence, need to check on disk all the existing input files + start_frame, end_frame = inFile.start, inFile.end + + + temporal_frames = cp.temporal_frames.Value + pixel_search_radius = cp.pixel_search_radius.Value + pixel_patch_radius = cp.pixel_patch_radius.Value + variance = cp.variance.Value + light_group_aovs = cp.light_group_aovs.Value + + runDenoise(start_frame, end_frame, inFile, outFile, temporal_frames, pixel_search_radius, pixel_patch_radius, variance, light_group_aovs) + + return True + + +def runDenoise(start_frame, end_frame, inFile, outFile, temporal_frames, pixel_search_radius, pixel_patch_radius, variance, light_group_aovs): + pb = XSIUIToolkit.ProgressBar + pb.Caption = 'Denoising ...' + pb.Maximum = int(end_frame) - int(start_frame) + 1 + pb.Visible = True + pb.StatusText = '{}/{}'.format(0, pb.Maximum) + + run = True + f = start_frame + while run and f <= end_frame: + Application.LogMessage('[sitoa] Denoising image {} '.format(inFile.frame(f))) + t = threading.Thread(target=denoiseImage, args=(inFile, outFile, f, temporal_frames, pixel_search_radius, pixel_patch_radius, variance, light_group_aovs)) + t.start() + + while t.is_alive(): + if pb.CancelPressed: + run = False + Application.LogMessage('[sitoa] Stopping Arnold Denoiser after the current frame is done...') + Application.Desktop.RedrawUI() + sleep(0.01) # just to limit the RedrawUI a bit. + else: + if not run: + Application.LogMessage('[sitoa] Arnold Denoiser has stopped.') + + i = pb.Increment() + pb.StatusText = '{}/{}'.format(i, pb.Maximum) + f += 1 + + +def denoiseImage(inFile, outFile, f, temporal_frames, pixel_search_radius, pixel_patch_radius, variance, light_group_aovs): + inFile = inFile.frame(f) + outFile = outFile.frame(f) + + noice_binary = os.path.join(os.path.dirname(Application.Plugins('Arnold Render').Filename), 'noice') + if sys.platform == 'win32': + noice_binary += '.exe' + + cmd = [noice_binary] + cmd += ['-i', inFile, '-o', outFile] + cmd += ['-ef', str(temporal_frames), '-sr', str(pixel_search_radius), '-pr', str(pixel_patch_radius), '-v', str(variance)] + + if len(light_group_aovs) > 0: + light_group_split = light_group_aovs.split(' ') + for light_group in light_group_split: + cmd += ['-l', light_group] + + res = subprocess.Popen(cmd, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, startupinfo=_no_window).communicate()[0] + Application.LogMessage(res, C.siVerbose) From a54fdd92215099df1e9896277a4576b89ff563f6 Mon Sep 17 00:00:00 2001 From: Jens Lindgren Date: Tue, 1 Jan 2019 22:36:58 +0100 Subject: [PATCH 130/159] bump min arnold version to 5.2.2.0 --- README.md | 4 ++-- config/custom_linux.py | 2 +- config/custom_windows.py | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index c74579d..30306dd 100644 --- a/README.md +++ b/README.md @@ -18,7 +18,7 @@ under an Apache 2.0 open source license. #### Requirements * Softimage 2015 SP1 -* Arnold 5.2.1.0 or newer +* Arnold 5.2.2.0 or newer * Python 2.6 or newer * Visual Studio 2012 (Windows) * GCC 4.2.4 (Linux) @@ -65,7 +65,7 @@ VS_HOME = r'C:/Program Files (x86)/Microsoft Visual Studio 11.0/VC' WINDOWS_KIT = r'C:/Program Files (x86)/Windows Kits/8.0' XSISDK_ROOT = r'C:/Program Files/Autodesk/Softimage 2015/XSISDK' -ARNOLD_HOME = r'C:/SolidAngle/Arnold-5.2.1.0/win64' +ARNOLD_HOME = r'C:/SolidAngle/Arnold-5.2.2.0/win64' TARGET_WORKGROUP_PATH = r'./Softimage_2015/Addons/SItoA' diff --git a/config/custom_linux.py b/config/custom_linux.py index 659200a..eacc4f0 100644 --- a/config/custom_linux.py +++ b/config/custom_linux.py @@ -6,7 +6,7 @@ SHCXX = r'/usr/bin/gcc-4.2.4/bin/gcc-4.2.4' XSISDK_ROOT = r'/usr/Softimage/Softimage_2015/XSISDK' -ARNOLD_HOME = r'/usr/SolidAngle/Arnold-5.2.1.0/linux' +ARNOLD_HOME = r'/usr/SolidAngle/Arnold-5.2.2.0/linux' TARGET_WORKGROUP_PATH = './Softimage_2015/Addons/SItoA' diff --git a/config/custom_windows.py b/config/custom_windows.py index d48eeca..7d648bc 100644 --- a/config/custom_windows.py +++ b/config/custom_windows.py @@ -9,7 +9,7 @@ WINDOWS_KIT = r'C:/Program Files (x86)/Windows Kits/8.0' XSISDK_ROOT = r'C:/Program Files/Autodesk/Softimage 2015/XSISDK' -ARNOLD_HOME = r'C:/SolidAngle/Arnold-5.2.1.0/win64' +ARNOLD_HOME = r'C:/SolidAngle/Arnold-5.2.2.0/win64' TARGET_WORKGROUP_PATH = r'./Softimage_2015/Addons/SItoA' From d059f882613a7a337cf636d69b41665abb29b4dd Mon Sep 17 00:00:00 2001 From: Jens Lindgren Date: Tue, 1 Jan 2019 22:39:16 +0100 Subject: [PATCH 131/159] add azimuthal roughness to standard_hair --- shaders/metadata/arnold_shaders.mtd | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/shaders/metadata/arnold_shaders.mtd b/shaders/metadata/arnold_shaders.mtd index d7aaea6..8f256b9 100644 --- a/shaders/metadata/arnold_shaders.mtd +++ b/shaders/metadata/arnold_shaders.mtd @@ -2682,7 +2682,7 @@ desc STRING "Input to calculate the square root of." [node standard_hair] soft.category STRING "Surface" soft.order STRING "BeginGroup Color base base_color melanin melanin_redness melanin_randomize EndGroup " -"BeginGroup Specular roughness ior shift EndGroup " +"BeginGroup Specular roughness roughness_anisotropic roughness_azimuthal ior shift EndGroup " "BeginGroup Tint specular_tint specular2_tint transmission_tint EndGroup " "BeginGroup Diffuse diffuse diffuse_color EndGroup " "BeginGroup Emission emission emission_color EndGroup " @@ -2729,6 +2729,17 @@ desc STRING "Roughness of hair specular reflections and transmission." min FLOAT 0 max FLOAT 1 +[attr roughness_anisotropic] +desc STRING "Enable this option to use Azimuthal Roughness. When disabled, Roughness controls both the azimuthal and longitudinal distributions." +soft.label STRING "Anisotropic Roughness" + +[attr roughness_azimuthal] +desc STRING "This parameter is used when Anisotropic Roughness is enabled. A smaller Azimuthal Roughness value lets rays go straight but a larger roughness allows more rays to travel inside the hair. The intensity becomes lower as the Azimuthal Roughness increases." +soft.label STRING "Azimuthal Roughness" +soft.disable_when STRING "{ roughness_anisotropic == 0 }" +min FLOAT 0 +max FLOAT 1 + [attr ior] desc STRING "Index of refraction. Lower IOR values give stronger forward scattering, " "and higher values give stronger reflection." From e4a98e71bb8b38cc6baf0d6b625254f36593fb49 Mon Sep 17 00:00:00 2001 From: Jens Lindgren Date: Fri, 4 Jan 2019 00:00:42 +0100 Subject: [PATCH 132/159] arnold denoiser ppg enhancements --- plugins/helpers/ArnoldDenoiser.py | 14 ++++++++++---- plugins/sitoa/renderer/RendererOptions.cpp | 4 ++-- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/plugins/helpers/ArnoldDenoiser.py b/plugins/helpers/ArnoldDenoiser.py index 385e5d4..3c3e6bd 100644 --- a/plugins/helpers/ArnoldDenoiser.py +++ b/plugins/helpers/ArnoldDenoiser.py @@ -43,7 +43,7 @@ def XSILoadPlugin( in_reg ): h = Application.SItoAToolHelper() h.SetPluginInfo(in_reg, 'Arnold Denoiser') - in_reg.RegisterCommand('AddDenoiserProperty', 'SITOA_AddDenoiserProperty') + in_reg.RegisterCommand('OpenDenoiserProperty', 'SITOA_OpenDenoiserProperty') in_reg.RegisterProperty('arnold_denoiser') #RegistrationInsertionPoint - do not remove this line @@ -52,13 +52,13 @@ def XSILoadPlugin( in_reg ): def XSIUnloadPlugin( in_reg ): return true -def AddDenoiserProperty_Init( in_ctxt ): +def OpenDenoiserProperty_Init( in_ctxt ): oCmd = in_ctxt.Source oArgs = oCmd.Arguments oArgs.Add("in_inspect") return true -def AddDenoiserProperty_Execute(in_inspect): +def OpenDenoiserProperty_Execute(in_inspect): inspect = True if in_inspect is None else in_inspect obj = Application.ActiveSceneRoot @@ -136,7 +136,9 @@ def arnold_denoiser_DefineLayout( in_ctxt ): item = layout.AddItem('light_group_aovs', 'Light Group AOVs') item.SetAttribute(C.siUILabelMinPixels, 100) - layout.AddButton('denoise', 'Denoise') + item = layout.AddButton('denoise', 'Denoise') + item.SetAttribute(C.siUICX, 80) + item.SetAttribute(C.siUICY, 30) return true def arnold_denoiser_OnInit( ): @@ -378,6 +380,9 @@ def runDenoise(start_frame, end_frame, inFile, outFile, temporal_frames, pixel_s else: if not run: Application.LogMessage('[sitoa] Arnold Denoiser has stopped.') + else: + if run: + Application.LogMessage('[sitoa] Arnold Denoiser has finished.') i = pb.Increment() pb.StatusText = '{}/{}'.format(i, pb.Maximum) @@ -401,5 +406,6 @@ def denoiseImage(inFile, outFile, f, temporal_frames, pixel_search_radius, pixel for light_group in light_group_split: cmd += ['-l', light_group] + Application.LogMessage('Starting Arnold Denoiser with command: ' + subprocess.list2cmdline(cmd), C.siVerbose) res = subprocess.Popen(cmd, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, startupinfo=_no_window).communicate()[0] Application.LogMessage(res, C.siVerbose) diff --git a/plugins/sitoa/renderer/RendererOptions.cpp b/plugins/sitoa/renderer/RendererOptions.cpp index 92c930b..d070bd3 100644 --- a/plugins/sitoa/renderer/RendererOptions.cpp +++ b/plugins/sitoa/renderer/RendererOptions.cpp @@ -1091,7 +1091,7 @@ SITOA_CALLBACK CommonRenderOptions_DefineLayout(CRef& in_ctxt) layout.EndGroup(); layout.AddGroup(L"Arnold Denoiser (noice)"); layout.AddItem(L"output_denoising_aovs", L"Output Denoising AOVs"); - layout.AddButton(L"OpenDenoiserProperties", L"Arnold Denoiser Properties..."); + layout.AddButton(L"OpenDenoiserProperties", L"Open Arnold Denoiser Properties (Current Pass)"); layout.EndGroup(); layout.AddItem(L"sitoa_version", L"SItoA Version"); @@ -1282,7 +1282,7 @@ SITOA_CALLBACK CommonRenderOptions_PPGEvent(const CRef& in_ctxt) else if (buttonName.IsEqualNoCase(L"OpenDenoiserProperties")) { CValue retval = false; - Application().ExecuteCommand(L"SITOA_AddDenoiserProperty", NULL, retval); + Application().ExecuteCommand(L"SITOA_OpenDenoiserProperty", NULL, retval); } } else if (eventID == PPGEventContext::siParameterChange) From 412ad5eb0d449644c443735df68758799fa55bb7 Mon Sep 17 00:00:00 2001 From: Jens Lindgren Date: Fri, 4 Jan 2019 02:14:38 +0100 Subject: [PATCH 133/159] fix bug in last commit --- plugins/helpers/ArnoldDenoiser.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/plugins/helpers/ArnoldDenoiser.py b/plugins/helpers/ArnoldDenoiser.py index 3c3e6bd..37fed2d 100644 --- a/plugins/helpers/ArnoldDenoiser.py +++ b/plugins/helpers/ArnoldDenoiser.py @@ -380,14 +380,15 @@ def runDenoise(start_frame, end_frame, inFile, outFile, temporal_frames, pixel_s else: if not run: Application.LogMessage('[sitoa] Arnold Denoiser has stopped.') - else: - if run: - Application.LogMessage('[sitoa] Arnold Denoiser has finished.') i = pb.Increment() pb.StatusText = '{}/{}'.format(i, pb.Maximum) f += 1 + else: + if run: + Application.LogMessage('[sitoa] Arnold Denoiser has finished.') + def denoiseImage(inFile, outFile, f, temporal_frames, pixel_search_radius, pixel_patch_radius, variance, light_group_aovs): inFile = inFile.frame(f) From ff58ae903f5474cd4b65114ee537c1346d3ead3b Mon Sep 17 00:00:00 2001 From: Jens Lindgren Date: Fri, 4 Jan 2019 02:39:29 +0100 Subject: [PATCH 134/159] improved denoiser ppg logic and robustness --- plugins/helpers/ArnoldDenoiser.py | 30 +++++++++++++++++++++--------- 1 file changed, 21 insertions(+), 9 deletions(-) diff --git a/plugins/helpers/ArnoldDenoiser.py b/plugins/helpers/ArnoldDenoiser.py index 37fed2d..c32f1c4 100644 --- a/plugins/helpers/ArnoldDenoiser.py +++ b/plugins/helpers/ArnoldDenoiser.py @@ -181,16 +181,18 @@ def frame_range_logic(): def input_logic(): # convert softimage file sequnce syntax inputFile = PPG.input.Value - inputSeq = ImageSequence(inputFile) - start_frame = inputSeq.start - end_frame = inputSeq.end + if inputFile != u'': + inputSeq = ImageSequence(inputFile) + start_frame = inputSeq.start + end_frame = inputSeq.end - outputSeq = ImageSequence(inputFile) - outputSeq.addFilebaseSuffix('_denoised') + PPG.start_frame.Value = start_frame + PPG.end_frame.Value = end_frame - PPG.start_frame.Value = start_frame - PPG.end_frame.Value = end_frame - PPG.output.Value = outputSeq.squares() + if PPG.output.Value == u'': + outputSeq = ImageSequence(inputFile) + outputSeq.addFilebaseSuffix('_denoised') + PPG.output.Value = outputSeq.squares() class ImageSequence(object): @@ -274,6 +276,8 @@ def parseDigitSequence(self): padding += 1 elif padding > 0: break # I already found numerical characters and they're finished now + elif c == os.sep: + break # don't search folders else: # still haven't found a numerical parameter head_length += 1 @@ -289,6 +293,11 @@ def parseDigitSequence(self): self.padding = padding self.filebase = base[:-(head_length+padding)] self.ext = ext + + else: + self.padding = 0 + self.filebase = base + self.ext = ext def si(self): @@ -304,7 +313,10 @@ def squares(self): return (u'{}' + u'#' * self.padding + '{}{}').format(self.filebase, self.filehead, self.ext) def frame(self, frame): - return (u'{}{:0' + str(self.padding) + u'd}{}{}').format(self.filebase, frame, self.filehead, self.ext) + if self.padding > 0: + return (u'{}{:0' + str(self.padding) + u'd}{}{}').format(self.filebase, frame, self.filehead, self.ext) + else: + return (self.filebase + self.filehead + self.ext) def addFilebaseSuffix(self, suffix): From 6b470b949d014ab3eb13846ab2ddc1cc316e897c Mon Sep 17 00:00:00 2001 From: Jens Lindgren Date: Fri, 4 Jan 2019 13:09:50 +0100 Subject: [PATCH 135/159] rewrite of denoising aovs output they are now output to the same exr as Main instead of to its own exr --- plugins/sitoa/loader/Options.cpp | 94 ++++++++++++++++++++++++-------- 1 file changed, 71 insertions(+), 23 deletions(-) diff --git a/plugins/sitoa/loader/Options.cpp b/plugins/sitoa/loader/Options.cpp index 929e646..ed72f7c 100644 --- a/plugins/sitoa/loader/Options.cpp +++ b/plugins/sitoa/loader/Options.cpp @@ -357,6 +357,7 @@ bool LoadDrivers(AtNode *in_optionsNode, Pass &in_pass, double in_frame, bool in { Framebuffer frameBuffer(in_pass.GetFramebuffers().GetItem(L"Main")); CString mainFormat(ParAcc_GetValue(frameBuffer, L"Format", in_frame)); + CFrameBuffer mainFb(frameBuffer, in_frame, false); CRefArray frameBuffers = in_pass.GetFramebuffers(); LONG nbBuffers = frameBuffers.GetCount(); @@ -379,6 +380,13 @@ bool LoadDrivers(AtNode *in_optionsNode, Pass &in_pass, double in_frame, bool in // vector of the drivers, each with theirs layers vector deepExrLayersDrivers; + // vars to hold if and how to create AOVs for noice + // it's a string because it can be added in two ways. + // recognised values are "add", "add_rename" and "exist" + CString noiceDA = L"add"; + CString noiceN = L"add"; + CString noiceZ = L"add"; + unsigned int activeBuffer = 0; for (LONG i = 0; im_output_denoising_aovs) { - // get the main framebuffer, we're gonna need some data from it - Framebuffer frameBuffer(in_pass.GetFramebuffers().GetItem(L"Main")); - CFrameBuffer mainFb(frameBuffer, in_frame, false); if (mainFb.m_driverName.IsEqualNoCase(L"driver_exr")) { - CString fullName = CString(mainFb.m_fullName + L"_Noice_Input"); - - // we create the path by modifying the filename of the framebuffer - CString orgFileName = ParAcc_GetValue(frameBuffer, L"Filename", in_frame); - frameBuffer.PutParameterValue(L"Filename", orgFileName + L"_Noice_Input", in_frame); - CString fileNamePath = CPathTranslator::TranslatePath(frameBuffer.GetResolvedPath(CTime(in_frame)).GetAsciiString(), false); - frameBuffer.PutParameterValue(L"Filename", orgFileName, in_frame); // restore the framebuffer filename + // pre-calc number of additional framebuffers to add and resize output array + int nbNoiceBuffers = 4; + if (noiceDA == L"exist") + nbNoiceBuffers -= 1; + if (noiceN == L"exist") + nbNoiceBuffers -= 1; + if (noiceZ == L"exist") + nbNoiceBuffers -= 1; + AiArrayResize(outputs, activeBuffers + nbNoiceBuffers, 1); + + // Set the name and issue a warning if it's renamed + CString nameN = L""; + CString nameZ = L""; + if (noiceN == L"add_rename") + { + nameN = L" N_noice"; + GetMessageQueue()->LogMsg(L"[sitoa] Arnold Denoising AOV \"N\" has been renamed to \"N_noice\" because \"N\" already exist with \"closest_filter\".", siWarningMsg); + } + if (noiceZ == L"add_rename") + { + nameZ = L" Z_noice"; + GetMessageQueue()->LogMsg(L"[sitoa] Arnold Denoising AOV \"Z\" has been renamed to \"Z_noice\" because \"Z\" already exist with \"closest_filter\".", siWarningMsg); + } - // create the driver node that will output the denoising aovs - AtNode* driverNode = AiNode(mainFb.m_driverName.GetAsciiString()); - if (driverNode) + // add the denoising aovs + int i = 0; + if (noiceDA != L"exist") { - CNodeUtilities().SetName(driverNode, fullName); - CNodeSetter::SetString(driverNode, "filename", fileNamePath.GetAsciiString()); + AiArraySetStr(outputs, activeBuffers+i, CString(L"diffuse_albedo RGB " + colorFilter + L" " + mainFb.m_fullName).GetAsciiString()); + i++; + } + if (noiceN != L"exist") + { + AiArraySetStr(outputs, activeBuffers+i, CString(L"N VECTOR " + colorFilter + L" " + mainFb.m_fullName + nameN).GetAsciiString()); + i++; + } + if (noiceZ != L"exist") + { + AiArraySetStr(outputs, activeBuffers+i, CString(L"Z FLOAT " + colorFilter + L" " + mainFb.m_fullName + nameZ).GetAsciiString()); + i++; } - // add the denoising aovs - AiArrayResize(outputs, activeBuffers + 5, 1); - AiArraySetStr(outputs, activeBuffers, CString(L"RGBA RGBA " + colorFilter + L" " + fullName).GetAsciiString()); - AiArraySetStr(outputs, activeBuffers+1, CString(L"N VECTOR " + colorFilter + L" " + fullName).GetAsciiString()); - AiArraySetStr(outputs, activeBuffers+2, CString(L"Z FLOAT " + colorFilter + L" " + fullName).GetAsciiString()); - AiArraySetStr(outputs, activeBuffers+3, CString(L"diffuse_albedo RGB " + colorFilter + L" " + fullName).GetAsciiString()); - AiArraySetStr(outputs, activeBuffers+4, CString(L"RGB RGB sitoa_variance_filter " + fullName + L" variance").GetAsciiString()); + AiArraySetStr(outputs, activeBuffers+i, CString(L"RGB RGB sitoa_variance_filter " + mainFb.m_fullName + L" variance").GetAsciiString()); } else GetMessageQueue()->LogMsg(L"[sitoa] Arnold Denoising AOVs can only be output to exr.", siWarningMsg); } - // Setting outpus array only if there is at least one active framebuffer + // Setting outputs array only if there is at least one active framebuffer if (activeBuffer > 0) { AiNodeSetArray(in_optionsNode, "outputs", outputs); From 6a6402fd083fcf245257e2b9a49d8385d73bc368 Mon Sep 17 00:00:00 2001 From: Jens Lindgren Date: Fri, 4 Jan 2019 13:18:16 +0100 Subject: [PATCH 136/159] update test_0255 --- .../Scenes/test_0255/ref/reference.log | 98 +++++++++--------- .../Scenes/test_0255/ref/reference.tif | Bin 21888 -> 20189 bytes 2 files changed, 50 insertions(+), 48 deletions(-) diff --git a/testsuite/XSIProject/Scenes/test_0255/ref/reference.log b/testsuite/XSIProject/Scenes/test_0255/ref/reference.log index 41e2912..6d58ad9 100644 --- a/testsuite/XSIProject/Scenes/test_0255/ref/reference.log +++ b/testsuite/XSIProject/Scenes/test_0255/ref/reference.log @@ -1,58 +1,60 @@ ======================================================= - Autodesk Softimage 11.1.57.0 + Autodesk Softimage 13.2.163.0 ======================================================= License information: using [Processing] -00:00:00 161MB | log started Wed Jun 7 12:26:10 2017 -00:00:00 161MB | Arnold 5.0.0.3 [baf78363] windows icc-17.0.2 oiio-1.7.12 osl-1.8.2 vdb-4.0.0 rlm-12.2.2 2017/05/31 10:45:24 -00:00:00 161MB | running on cavallo, pid=17084 -00:00:00 161MB | 1 x Intel(R) Core(TM) i7-4790 CPU @ 3.60GHz (4 cores, 8 logical) with 16334MB -00:00:00 161MB | Windows 8 Professional (version 6.2, build 9200) -00:00:00 161MB | soft limit for open files raised from 512 to 2048 -00:00:00 161MB | -00:00:00 161MB | loading plugins from C:\dev\Mia\Arnold\Extra_Shaders ... -00:00:00 161MB | loaded 1 plugins from 1 lib(s) and 1 OSL shaders in 0:00.00 -00:00:00 161MB | loading plugins from C:\Users\Stefano\Autodesk\Softimage_2013_SP1\Addons\SItoA\Application\Plugins\bin\nt-x86-64 ... -00:00:00 162MB | loaded 103 plugins from 1 lib(s) in 0:00.00 +00:00:00 201MB | log started Fri Jan 4 13:15:22 2019 +00:00:00 201MB | Arnold 5.2.2.0 [30b8ba14] windows icc-17.0.2 oiio-2.0.1 osl-1.10.1 vdb-4.0.0 clm-1.0.3.513 rlm-12.4.2 2018/12/04 22:02:04 +00:00:00 201MB | running on Jenus, pid=2572 +00:00:00 201MB | 1 x Intel(R) Core(TM) i7-2600K CPU @ 3.40GHz (4 cores, 8 logical) with 16333MB +00:00:00 201MB | Nvidia driver version 417.22 +00:00:00 201MB | GPU 0: GeForce GTX 1070 @ 1771MHz (compute 6.1) with 8192MB (7179MB available) +00:00:00 201MB | Windows 8 Professional (version 6.2, build 9200) +00:00:00 201MB | soft limit for open files raised from 512 to 2048 +00:00:00 201MB | +00:00:00 201MB | loading plugins from C:\Users\lindg\GitHub\sitoa\dist\Softimage_2015_SP2\Addons\SItoA\Application\Plugins\bin\nt-x86-64\..\plugins ... +00:00:00 201MB | loaded 4 plugins from 2 lib(s) in 0:00.00 +00:00:00 201MB | loading plugins from C:\Users\lindg\GitHub\sitoa\dist\Softimage_2015_SP2\Addons\SItoA\Application\Plugins\bin\nt-x86-64 ... +00:00:00 201MB | loaded 103 plugins from 1 lib(s) in 0:00.03 -00:00:00 167MB | -00:00:00 167MB | releasing resources -00:00:00 166MB | Arnold shutdown -// INFO : [sitoa] SItoA 4.0.0 win loaded. -// INFO : [sitoa] Arnold 5.0.0.3 detected. -InstallCustomPreferences("ArnoldRenderPreferences", "Arnold Render"); +00:00:00 208MB | +00:00:00 208MB | releasing resources +00:00:00 207MB | Arnold shutdown +# INFO : [sitoa] SItoA 5.2.0 win loaded. +# INFO : [sitoa] Arnold 5.2.2.0 detected. +Application.InstallCustomPreferences("ArnoldRenderPreferences", "Arnold Render") COMMAND: -processing -script "execute_test.js" -main main -// INFO : C:\Users\Stefano\Autodesk\Softimage_2013_SP1\Addons\SItoA\Application\Plugins\bin\nt-x86-64\ ->Loading: C:\dev\Mia\Arnold\sitoa\build\windows_x86_64\msvc_opt\si_11000\testsuite\test_0255\test.scn... -// INFO : 4034 - Loaded scene was created with build number: 10.1.62.0 - compatibility version: 1000 -// INFO : [sitoa] Loaded scene was created with SItoA 2.10 or older -OpenScene("C:\\dev\\Mia\\Arnold\\sitoa\\build\\windows_x86_64\\msvc_opt\\si_11000\\testsuite\\test_0255\\test.scn", null, null); -SetValue("Passes.RenderOptions.ImageLockAspectRatio", false, null); -SetValue("Passes.RenderOptions.ImageWidth", 160, null); -SetValue("Passes.RenderOptions.ImageHeight", 120, null); -SetValue("Passes.Default_Pass.Main.Filename", "C:\\dev\\Mia\\Arnold\\sitoa\\build\\windows_x86_64\\msvc_opt\\si_11000\\testsuite\\test_0255\\testrender.####.tif", null); -SetValue("Passes.Default_Pass.Main.Format", "tif", null); -SetValue("Passes.Arnold_Render_Options.output_tiff_tiled", 0, null); -SetValue("Passes.Arnold_Render_Options.enable_log_file", true, null); -SetValue("Passes.Arnold_Render_Options.log_level", 1, null); -SetValue("Passes.Arnold_Render_Options.output_file_tagdir_log", "C:\\dev\\Mia\\Arnold\\sitoa\\build\\windows_x86_64\\msvc_opt\\si_11000\\testsuite\\test_0255", null); -SetValue("Passes.Arnold_Render_Options.shaders_path", "C:\\dev\\Mia\\Arnold\\sitoa\\build\\windows_x86_64\\msvc_opt\\si_11000\\shaders", null); -SetValue("Passes.Arnold_Render_Options.textures_path", "C:\\dev\\Mia\\Arnold\\sitoa\\testsuite\\XSIProject\\Pictures", null); -SetValue("Passes.Arnold_Render_Options.save_texture_paths", false, null); -// INFO : Rendering pass 'Default_Pass'... -// INFO : Rendering frame 35 (0.0% done) -// WARNING : [arnold] node entry "volume_scattering" is deprecated, use "atmosphere_volume" -// WARNING : [arnold] node entry "standard" is deprecated, and may be removed in the future -// INFO : [sitoa] Frame 35 exported to Arnold in 0.029 sec. -RenderAllPasses(null, null, null, null, siRenderVerbosityDefault); +# INFO : C:\Users\lindg\GitHub\sitoa\dist\Softimage_2015_SP2\Addons\SItoA\Application\Plugins\bin\nt-x86-64\ +>Loading: C:\Users\lindg\GitHub\sitoa\build\windows_x86_64\msvc_opt\si_13000\testsuite\test_0255\test.scn... +# INFO : 4034 - Loaded scene was created with build number: 10.1.62.0 - compatibility version: 1000 +# INFO : [sitoa] Loaded scene was created with SItoA 2.10 or older +Application.OpenScene("C:\\Users\\lindg\\GitHub\\sitoa\\build\\windows_x86_64\\msvc_opt\\si_13000\\testsuite\\test_0255\\test.scn", "", "") +Application.SetValue("Passes.RenderOptions.ImageLockAspectRatio", False, "") +Application.SetValue("Passes.RenderOptions.ImageWidth", 160, "") +Application.SetValue("Passes.RenderOptions.ImageHeight", 120, "") +Application.SetValue("Passes.Default_Pass.Main.Filename", "C:\\Users\\lindg\\GitHub\\sitoa\\build\\windows_x86_64\\msvc_opt\\si_13000\\testsuite\\test_0255\\testrender.####.tif", "") +Application.SetValue("Passes.Default_Pass.Main.Format", "tif", "") +Application.SetValue("Passes.Arnold_Render_Options.output_tiff_tiled", 0, "") +Application.SetValue("Passes.Arnold_Render_Options.enable_log_file", True, "") +Application.SetValue("Passes.Arnold_Render_Options.log_level", 1, "") +Application.SetValue("Passes.Arnold_Render_Options.output_file_tagdir_log", "C:\\Users\\lindg\\GitHub\\sitoa\\build\\windows_x86_64\\msvc_opt\\si_13000\\testsuite\\test_0255", "") +Application.SetValue("Passes.Arnold_Render_Options.textures_path", "C:\\Users\\lindg\\GitHub\\sitoa\\testsuite\\XSIProject\\Pictures", "") +Application.SetValue("Passes.Arnold_Render_Options.save_texture_paths", False, "") +# INFO : Rendering pass 'Default_Pass'... +# INFO : Rendering frame 35 (0.0% done) +# WARNING : [arnold] node entry "volume_scattering" is deprecated, use "atmosphere_volume" +# WARNING : [arnold] node entry "standard" is deprecated, and may be removed in the future +# INFO : [sitoa] Frame 35 exported to Arnold in 0.093 sec. +# INFO : Render completed (100% done) +Application.RenderAllPasses("", "", "", "", "siRenderVerbosityDefault") Warning: return value of the executed script is not an integer -// INFO : Render completed (100% done) -// INFO : Characters has been unloaded. -// INFO : TransformUVsPlugin has been unloaded. -// INFO : [sitoa] SItoA 4.0.0 win has been unloaded. -// INFO : polymatricksPlugin has been unloaded. -// INFO : FBX-XSI import/export Plug-in has been unloaded. -// INFO : Unfold3D Plugin has been unloaded. +# INFO : Characters has been unloaded. +# INFO : polymatricksPlugin has been unloaded. +# INFO : [sitoa] SItoA 5.2.0 win has been unloaded. +# INFO : TransformUVsPlugin has been unloaded. +# INFO : FBX-XSI import/export Plug-in has been unloaded. +# INFO : Unfold3D Plugin has been unloaded. + diff --git a/testsuite/XSIProject/Scenes/test_0255/ref/reference.tif b/testsuite/XSIProject/Scenes/test_0255/ref/reference.tif index abd9ed2131dfb3b47b4fbc45d07d309acaf48c41..f057185091ee80d9235d0798c4484fe49d61fdc6 100644 GIT binary patch delta 17740 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 X6 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 ThXDlQ=`6VX6WWQTriA-1 Date: Fri, 4 Jan 2019 15:12:39 +0100 Subject: [PATCH 137/159] make the paths resolve [Pass] token --- plugins/sitoa/common/Tools.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/plugins/sitoa/common/Tools.cpp b/plugins/sitoa/common/Tools.cpp index 8e3a4ce..ccc954c 100644 --- a/plugins/sitoa/common/Tools.cpp +++ b/plugins/sitoa/common/Tools.cpp @@ -1374,8 +1374,8 @@ void SetLogSettings(const CString& in_renderType, double in_frame) if (enableStats) { CPathString statsFile = GetRenderOptions()->m_stats_file; - statsFile = statsFile.ResolveTokens(CTimeUtilities().GetCurrentFrame()); - statsFile = statsFile.ResolvePath(); + statsFile.ResolveTokensInPlace(CTimeUtilities().GetCurrentFrame(), L"[Pass]"); + statsFile.ResolvePathInPlace(); if (CUtils::EnsureFolderExists(statsFile, true)) { AiStatsSetFileName(statsFile.GetAsciiString()); @@ -1393,8 +1393,8 @@ void SetLogSettings(const CString& in_renderType, double in_frame) if (enableProfile) { CPathString profileFile = GetRenderOptions()->m_profile_file; - profileFile = profileFile.ResolveTokens(CTimeUtilities().GetCurrentFrame()); - profileFile = profileFile.ResolvePath(); + profileFile.ResolveTokensInPlace(CTimeUtilities().GetCurrentFrame(), L"[Pass]"); + profileFile.ResolvePathInPlace(); if (CUtils::EnsureFolderExists(profileFile, true)) { AiProfileSetFileName(profileFile.GetAsciiString()); From 7b4678bdf9cc5d08e545f71c870600485e69f115 Mon Sep 17 00:00:00 2001 From: Jens Lindgren Date: Fri, 4 Jan 2019 15:20:40 +0100 Subject: [PATCH 138/159] resolve [pass] as lowercase as well --- plugins/sitoa/loader/PathTranslator.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/plugins/sitoa/loader/PathTranslator.cpp b/plugins/sitoa/loader/PathTranslator.cpp index 34a524f..362ef59 100644 --- a/plugins/sitoa/loader/PathTranslator.cpp +++ b/plugins/sitoa/loader/PathTranslator.cpp @@ -27,10 +27,11 @@ CPathString CPathString::ResolveTokens(double in_frame, CString in_extraToken) { if (!in_extraToken.IsEmpty()) { - if (in_extraToken == L"[Pass]") + if (in_extraToken.IsEqualNoCase(L"[Pass]")) { Pass pass(Application().GetActiveProject().GetActiveScene().GetActivePass()); *this = CStringUtilities().ReplaceString(in_extraToken, pass.GetName(), *this); + *this = CStringUtilities().ReplaceString(L"[pass]", pass.GetName(), *this); // lowercase quick fix } } return CUtils::ResolveTokenString(*this, CTime(in_frame), false); From 15df8f39d9ae20e52a91981b7ee81a858e8f288e Mon Sep 17 00:00:00 2001 From: Jens Lindgren Date: Fri, 4 Jan 2019 15:21:24 +0100 Subject: [PATCH 139/159] workaround for [Frame] with correcting padding --- plugins/sitoa/loader/PathTranslator.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/plugins/sitoa/loader/PathTranslator.cpp b/plugins/sitoa/loader/PathTranslator.cpp index 362ef59..6c8cb3e 100644 --- a/plugins/sitoa/loader/PathTranslator.cpp +++ b/plugins/sitoa/loader/PathTranslator.cpp @@ -34,6 +34,11 @@ CPathString CPathString::ResolveTokens(double in_frame, CString in_extraToken) *this = CStringUtilities().ReplaceString(L"[pass]", pass.GetName(), *this); // lowercase quick fix } } + + // because of a bug? in Softimage SDK the [Frame] token is not using the scene padding settings + *this = CStringUtilities().ReplaceString(L"[Frame]", GetFramePadded(in_frame), *this); + *this = CStringUtilities().ReplaceString(L"[frame]", GetFramePadded(in_frame), *this); + return CUtils::ResolveTokenString(*this, CTime(in_frame), false); } From acdd0e316eda62bdf0fd95a54b9fcaec95652afb Mon Sep 17 00:00:00 2001 From: Jens Lindgren Date: Fri, 4 Jan 2019 15:40:26 +0100 Subject: [PATCH 140/159] change default filenames to something useful --- plugins/sitoa/renderer/RendererOptions.cpp | 4 ++-- plugins/sitoa/renderer/RendererOptions.h | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/plugins/sitoa/renderer/RendererOptions.cpp b/plugins/sitoa/renderer/RendererOptions.cpp index f28845b..01cbdaa 100644 --- a/plugins/sitoa/renderer/RendererOptions.cpp +++ b/plugins/sitoa/renderer/RendererOptions.cpp @@ -290,8 +290,8 @@ SITOA_CALLBACK CommonRenderOptions_Define(CRef& in_ctxt) CString defaultTexturesPath = CUtils::BuildPath(app.GetInstallationPath(siProjectPath), L"Pictures"); CString defaultAssPath = CUtils::BuildPath(L"[Project Path]", L"Arnold_Scenes"); // Ass Path CString defaultLogPath = CUtils::BuildPath(L"[Project Path]", L"Arnold_Logs"); // Log Path - CString defaultStatsPath = CUtils::BuildPath(L"[Project Path]", L"Arnold_Logs", L"arnold_stats.json"); - CString defaultProfilePath = CUtils::BuildPath(L"[Project Path]", L"Arnold_Logs", L"arnold_profile.json"); + CString defaultStatsPath = CUtils::BuildPath(L"[Project Path]", L"Arnold_Logs", L"[Scene]_[Pass].[Frame].stats.json"); + CString defaultProfilePath = CUtils::BuildPath(L"[Project Path]", L"Arnold_Logs", L"[Scene]_[Pass].[Frame].[Host]_profile.json"); // shaders path char* aux = getenv("SITOA_SHADERS_PATH"); diff --git a/plugins/sitoa/renderer/RendererOptions.h b/plugins/sitoa/renderer/RendererOptions.h index d92107b..da83a69 100644 --- a/plugins/sitoa/renderer/RendererOptions.h +++ b/plugins/sitoa/renderer/RendererOptions.h @@ -359,10 +359,10 @@ class CRenderOptions m_output_file_tagdir_log(CUtils::BuildPath(L"[Project Path]", L"Arnold_Logs")), m_enable_stats(false), - m_stats_file(CUtils::BuildPath(L"[Project Path]", L"Arnold_Logs", L"arnold_stats.json")), + m_stats_file(CUtils::BuildPath(L"[Project Path]", L"Arnold_Logs", L"[Scene]_[Pass].[Frame].stats.json")), m_stats_mode(1), m_enable_profile(false), - m_profile_file(CUtils::BuildPath(L"[Project Path]", L"Arnold_Logs", L"arnold_profile.json")), + m_profile_file(CUtils::BuildPath(L"[Project Path]", L"Arnold_Logs", L"[Scene]_[Pass].[Frame].[Host]_profile.json")), m_ignore_textures(false), m_ignore_shaders(false), From be73f57c82a398d57d4dfc1546bc7e8a0632f5d6 Mon Sep 17 00:00:00 2001 From: Jens Lindgren Date: Fri, 4 Jan 2019 16:57:57 +0100 Subject: [PATCH 141/159] add dependency graph --- plugins/sitoa/loader/Options.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/plugins/sitoa/loader/Options.cpp b/plugins/sitoa/loader/Options.cpp index 9bc0868..6f41dd0 100644 --- a/plugins/sitoa/loader/Options.cpp +++ b/plugins/sitoa/loader/Options.cpp @@ -586,10 +586,13 @@ void LoadOptionsParameters(AtNode* in_optionsNode, const Property &in_arnoldOpti CNodeSetter::SetInt(in_optionsNode, "GI_sss_samples", GetRenderOptions()->m_GI_sss_samples); CNodeSetter::SetInt(in_optionsNode, "GI_volume_samples", GetRenderOptions()->m_GI_volume_samples); - // only export progressive if in interactive mode but not if exporting .ass + // some things should only be set in interactive mode but not if exporting .ass CString renderType = GetRenderInstance()->GetRenderType(); if (Application().IsInteractive() && (renderType != L"Export")) + { CNodeSetter::SetBoolean(in_optionsNode, "enable_progressive_render", GetRenderOptions()->m_enable_progressive_render); + CNodeSetter::SetBoolean(in_optionsNode, "enable_dependency_graph", true); + } CNodeSetter::SetBoolean(in_optionsNode, "enable_adaptive_sampling", GetRenderOptions()->m_enable_adaptive_sampling); CNodeSetter::SetInt(in_optionsNode, "AA_samples_max", GetRenderOptions()->m_AA_samples_max); From fd98ee8e67e6ee3adf5d158c6ef4769afe4125e6 Mon Sep 17 00:00:00 2001 From: Jens Lindgren Date: Sat, 5 Jan 2019 17:04:01 +0100 Subject: [PATCH 142/159] profile before [Host] in default profile name --- plugins/sitoa/renderer/RendererOptions.cpp | 2 +- plugins/sitoa/renderer/RendererOptions.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/sitoa/renderer/RendererOptions.cpp b/plugins/sitoa/renderer/RendererOptions.cpp index 01cbdaa..f6065f8 100644 --- a/plugins/sitoa/renderer/RendererOptions.cpp +++ b/plugins/sitoa/renderer/RendererOptions.cpp @@ -291,7 +291,7 @@ SITOA_CALLBACK CommonRenderOptions_Define(CRef& in_ctxt) CString defaultAssPath = CUtils::BuildPath(L"[Project Path]", L"Arnold_Scenes"); // Ass Path CString defaultLogPath = CUtils::BuildPath(L"[Project Path]", L"Arnold_Logs"); // Log Path CString defaultStatsPath = CUtils::BuildPath(L"[Project Path]", L"Arnold_Logs", L"[Scene]_[Pass].[Frame].stats.json"); - CString defaultProfilePath = CUtils::BuildPath(L"[Project Path]", L"Arnold_Logs", L"[Scene]_[Pass].[Frame].[Host]_profile.json"); + CString defaultProfilePath = CUtils::BuildPath(L"[Project Path]", L"Arnold_Logs", L"[Scene]_[Pass].[Frame].profile_[Host].json"); // shaders path char* aux = getenv("SITOA_SHADERS_PATH"); diff --git a/plugins/sitoa/renderer/RendererOptions.h b/plugins/sitoa/renderer/RendererOptions.h index da83a69..cb2e400 100644 --- a/plugins/sitoa/renderer/RendererOptions.h +++ b/plugins/sitoa/renderer/RendererOptions.h @@ -362,7 +362,7 @@ class CRenderOptions m_stats_file(CUtils::BuildPath(L"[Project Path]", L"Arnold_Logs", L"[Scene]_[Pass].[Frame].stats.json")), m_stats_mode(1), m_enable_profile(false), - m_profile_file(CUtils::BuildPath(L"[Project Path]", L"Arnold_Logs", L"[Scene]_[Pass].[Frame].[Host]_profile.json")), + m_profile_file(CUtils::BuildPath(L"[Project Path]", L"Arnold_Logs", L"[Scene]_[Pass].[Frame].profile_[Host].json")), m_ignore_textures(false), m_ignore_shaders(false), From a9c27eeef615043cf0abecb5428d65067e6805f3 Mon Sep 17 00:00:00 2001 From: Jens Lindgren Date: Mon, 7 Jan 2019 21:40:24 +0100 Subject: [PATCH 143/159] support softimage sequences with no padding --- plugins/helpers/ArnoldDenoiser.py | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/plugins/helpers/ArnoldDenoiser.py b/plugins/helpers/ArnoldDenoiser.py index c32f1c4..0876f58 100644 --- a/plugins/helpers/ArnoldDenoiser.py +++ b/plugins/helpers/ArnoldDenoiser.py @@ -196,7 +196,7 @@ def input_logic(): class ImageSequence(object): - si_re = re.compile(r'(.*)\[(\d+)\.{2}(\d+);(\d+)\](.*)(\..+)') + si_re = re.compile(r'(.*)\[(\d+)\.{2}(\d+)(?:;(\d+))?\](.*)(\..+)') square_re = re.compile(r'(.*?)(#+)(.*)(\..+)') def __init__(self, path=None): # Class that make conversions. @@ -232,9 +232,14 @@ def __repr__(self): def parseSiSequence(self): re_result = self.si_re.search(self._creation_path) + padding = re_result.group(4) + if padding is None: + self.padding = 0 + else: + self.padding = int(padding) + self.start = int(re_result.group(2)) self.end = int(re_result.group(3)) - self.padding = int(re_result.group(4)) self.filebase = re_result.group(1) self.filehead = re_result.group(5) self.ext = re_result.group(6) @@ -304,8 +309,12 @@ def si(self): if self.start == self.end: # if start = end, return the single frame return self.frame(self.start) - return u'{}[{}..{};{}]{}{}'.format(self.filebase, self.start, self.end, self.padding, self.filehead, self.ext) + if self.padding > 1: + return u'{}[{}..{};{}]{}{}'.format(self.filebase, self.start, self.end, self.padding, self.filehead, self.ext) + else: + return u'{}[{}..{}]{}{}'.format(self.filebase, self.start, self.end, self.filehead, self.ext) + def squares(self): if self.start == self.end: # if start = end, return the single frame From 6b4e85ce68bc9fcec56c6f4ef96e251518ffd91f Mon Sep 17 00:00:00 2001 From: Jens Lindgren Date: Mon, 7 Jan 2019 21:41:09 +0100 Subject: [PATCH 144/159] use default padding from scene render options --- plugins/helpers/ArnoldDenoiser.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/helpers/ArnoldDenoiser.py b/plugins/helpers/ArnoldDenoiser.py index 0876f58..db66eef 100644 --- a/plugins/helpers/ArnoldDenoiser.py +++ b/plugins/helpers/ArnoldDenoiser.py @@ -203,7 +203,7 @@ def __init__(self, path=None): self.start = 0 self.end = 0 - self.padding = 4 + self.padding = Application.GetValue("Passes.RenderOptions.FramePadding") self.filebase = u'' self.filehead = u'' self.ext = u'' From bb7af7995c7927096de0eb9e5f2e365c751d5b8b Mon Sep 17 00:00:00 2001 From: Jens Lindgren Date: Mon, 7 Jan 2019 21:42:16 +0100 Subject: [PATCH 145/159] various padding fixes --- plugins/helpers/ArnoldDenoiser.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/plugins/helpers/ArnoldDenoiser.py b/plugins/helpers/ArnoldDenoiser.py index db66eef..8a87238 100644 --- a/plugins/helpers/ArnoldDenoiser.py +++ b/plugins/helpers/ArnoldDenoiser.py @@ -287,7 +287,7 @@ def parseDigitSequence(self): # still haven't found a numerical parameter head_length += 1 - if padding > 0: + if padding > 1: if head_length > 0: self.start = int(base[-(head_length+padding):-head_length]) self.filehead = base[-head_length:] @@ -319,13 +319,13 @@ def squares(self): if self.start == self.end: # if start = end, return the single frame return self.frame(self.start) - return (u'{}' + u'#' * self.padding + '{}{}').format(self.filebase, self.filehead, self.ext) + return (u'{}' + u'#' * max(self.padding, 1) + '{}{}').format(self.filebase, self.filehead, self.ext) def frame(self, frame): - if self.padding > 0: + if self.padding > 1: return (u'{}{:0' + str(self.padding) + u'd}{}{}').format(self.filebase, frame, self.filehead, self.ext) else: - return (self.filebase + self.filehead + self.ext) + return (self.filebase + str(frame) + self.filehead + self.ext) def addFilebaseSuffix(self, suffix): From f4f812f6c59a485c3f4c060706ae763e503d5ef2 Mon Sep 17 00:00:00 2001 From: Jens Lindgren Date: Mon, 7 Jan 2019 22:21:16 +0100 Subject: [PATCH 146/159] more padding fixes --- plugins/helpers/ArnoldDenoiser.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/plugins/helpers/ArnoldDenoiser.py b/plugins/helpers/ArnoldDenoiser.py index 8a87238..9d43e89 100644 --- a/plugins/helpers/ArnoldDenoiser.py +++ b/plugins/helpers/ArnoldDenoiser.py @@ -234,7 +234,7 @@ def parseSiSequence(self): padding = re_result.group(4) if padding is None: - self.padding = 0 + self.padding = 1 else: self.padding = int(padding) @@ -287,7 +287,7 @@ def parseDigitSequence(self): # still haven't found a numerical parameter head_length += 1 - if padding > 1: + if padding > 0: if head_length > 0: self.start = int(base[-(head_length+padding):-head_length]) self.filehead = base[-head_length:] @@ -322,10 +322,10 @@ def squares(self): return (u'{}' + u'#' * max(self.padding, 1) + '{}{}').format(self.filebase, self.filehead, self.ext) def frame(self, frame): - if self.padding > 1: + if self.padding > 0: return (u'{}{:0' + str(self.padding) + u'd}{}{}').format(self.filebase, frame, self.filehead, self.ext) else: - return (self.filebase + str(frame) + self.filehead + self.ext) + return (self.filebase + self.filehead + self.ext) def addFilebaseSuffix(self, suffix): From 2c615813746aed0597da369b99081fa0553194b8 Mon Sep 17 00:00:00 2001 From: Jens Lindgren Date: Tue, 8 Jan 2019 18:12:48 +0100 Subject: [PATCH 147/159] set rename message to severity info --- plugins/sitoa/loader/Options.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/sitoa/loader/Options.cpp b/plugins/sitoa/loader/Options.cpp index ed72f7c..90388d7 100644 --- a/plugins/sitoa/loader/Options.cpp +++ b/plugins/sitoa/loader/Options.cpp @@ -579,12 +579,12 @@ bool LoadDrivers(AtNode *in_optionsNode, Pass &in_pass, double in_frame, bool in if (noiceN == L"add_rename") { nameN = L" N_noice"; - GetMessageQueue()->LogMsg(L"[sitoa] Arnold Denoising AOV \"N\" has been renamed to \"N_noice\" because \"N\" already exist with \"closest_filter\".", siWarningMsg); + GetMessageQueue()->LogMsg(L"[sitoa] Arnold Denoising AOV \"N\" has been renamed to \"N_noice\" because \"N\" already exist with \"closest_filter\".", siInfoMsg); } if (noiceZ == L"add_rename") { nameZ = L" Z_noice"; - GetMessageQueue()->LogMsg(L"[sitoa] Arnold Denoising AOV \"Z\" has been renamed to \"Z_noice\" because \"Z\" already exist with \"closest_filter\".", siWarningMsg); + GetMessageQueue()->LogMsg(L"[sitoa] Arnold Denoising AOV \"Z\" has been renamed to \"Z_noice\" because \"Z\" already exist with \"closest_filter\".", siInfoMsg); } // add the denoising aovs From c6582a9c2bad134acd408f34c9531e88dfbe1ca9 Mon Sep 17 00:00:00 2001 From: Jens Lindgren Date: Tue, 8 Jan 2019 18:30:45 +0100 Subject: [PATCH 148/159] little bit of cleanup --- plugins/helpers/ArnoldDenoiser.py | 5 ----- 1 file changed, 5 deletions(-) diff --git a/plugins/helpers/ArnoldDenoiser.py b/plugins/helpers/ArnoldDenoiser.py index 9d43e89..9a07166 100644 --- a/plugins/helpers/ArnoldDenoiser.py +++ b/plugins/helpers/ArnoldDenoiser.py @@ -340,9 +340,6 @@ def addFilebaseSuffix(self, suffix): def doDenoise(cp): - #if self.running: - # return - inFile = cp.input.Value outFile = cp.output.Value @@ -356,7 +353,6 @@ def doDenoise(cp): inFile = ImageSequence(inFile) outFile = ImageSequence(outFile) - #self.running = True start_frame = cp.start_frame.Value frame_range = cp.frame_range.Value if frame_range == u'Single Frame': @@ -365,7 +361,6 @@ def doDenoise(cp): end_frame = cp.end_frame.Value else: # complete sequence, need to check on disk all the existing input files start_frame, end_frame = inFile.start, inFile.end - temporal_frames = cp.temporal_frames.Value pixel_search_radius = cp.pixel_search_radius.Value From adbbf7e48b5359bb0633b40d13083abf4c2eb987 Mon Sep 17 00:00:00 2001 From: Jens Lindgren Date: Tue, 8 Jan 2019 21:05:24 +0100 Subject: [PATCH 149/159] check if input file exist and moved and renamed some vars --- plugins/helpers/ArnoldDenoiser.py | 48 +++++++++++++++++-------------- 1 file changed, 26 insertions(+), 22 deletions(-) diff --git a/plugins/helpers/ArnoldDenoiser.py b/plugins/helpers/ArnoldDenoiser.py index 9a07166..c044b56 100644 --- a/plugins/helpers/ArnoldDenoiser.py +++ b/plugins/helpers/ArnoldDenoiser.py @@ -340,18 +340,19 @@ def addFilebaseSuffix(self, suffix): def doDenoise(cp): - inFile = cp.input.Value outFile = cp.output.Value + inFileStr = cp.input.Value - if inFile == '': + if inFileStr == '': XSIUIToolkit.MsgBox('An input file must be selected', C.siMsgOkOnly, 'Arnold Denoiser') return False if outFile == '': XSIUIToolkit.MsgBox('An output file must be selected', C.siMsgOkOnly, 'Arnold Denoiser') return False - inFile = ImageSequence(inFile) outFile = ImageSequence(outFile) + inSeq = ImageSequence(inFileStr) + outSeq = ImageSequence(outFile) start_frame = cp.start_frame.Value frame_range = cp.frame_range.Value @@ -360,7 +361,7 @@ def doDenoise(cp): elif frame_range == u'Start / End': end_frame = cp.end_frame.Value else: # complete sequence, need to check on disk all the existing input files - start_frame, end_frame = inFile.start, inFile.end + start_frame, end_frame = inSeq.start, inSeq.end temporal_frames = cp.temporal_frames.Value pixel_search_radius = cp.pixel_search_radius.Value @@ -368,12 +369,12 @@ def doDenoise(cp): variance = cp.variance.Value light_group_aovs = cp.light_group_aovs.Value - runDenoise(start_frame, end_frame, inFile, outFile, temporal_frames, pixel_search_radius, pixel_patch_radius, variance, light_group_aovs) + runDenoise(start_frame, end_frame, inSeq, outSeq, temporal_frames, pixel_search_radius, pixel_patch_radius, variance, light_group_aovs) return True -def runDenoise(start_frame, end_frame, inFile, outFile, temporal_frames, pixel_search_radius, pixel_patch_radius, variance, light_group_aovs): +def runDenoise(start_frame, end_frame, inSeq, outSeq, temporal_frames, pixel_search_radius, pixel_patch_radius, variance, light_group_aovs): pb = XSIUIToolkit.ProgressBar pb.Caption = 'Denoising ...' pb.Maximum = int(end_frame) - int(start_frame) + 1 @@ -383,19 +384,25 @@ def runDenoise(start_frame, end_frame, inFile, outFile, temporal_frames, pixel_s run = True f = start_frame while run and f <= end_frame: - Application.LogMessage('[sitoa] Denoising image {} '.format(inFile.frame(f))) - t = threading.Thread(target=denoiseImage, args=(inFile, outFile, f, temporal_frames, pixel_search_radius, pixel_patch_radius, variance, light_group_aovs)) - t.start() - - while t.is_alive(): - if pb.CancelPressed: - run = False - Application.LogMessage('[sitoa] Stopping Arnold Denoiser after the current frame is done...') - Application.Desktop.RedrawUI() - sleep(0.01) # just to limit the RedrawUI a bit. + inFile = inSeq.frame(f) + outFile = outSeq.frame(f) + if os.path.isfile(inFile): + Application.LogMessage('[sitoa] Denoising image {} '.format(inFile)) + t = threading.Thread(target=denoiseImage, args=(inFile, outFile, temporal_frames, pixel_search_radius, pixel_patch_radius, variance, light_group_aovs)) + t.start() + + while t.is_alive(): + if pb.CancelPressed: + run = False + Application.LogMessage('[sitoa] Stopping Arnold Denoiser after the current frame is done...') + Application.Desktop.RedrawUI() + sleep(0.01) # just to limit the RedrawUI a bit. + else: + if not run: + Application.LogMessage('[sitoa] Arnold Denoiser has stopped.') + else: - if not run: - Application.LogMessage('[sitoa] Arnold Denoiser has stopped.') + Application.LogMessage('[sitoa] Arnold Denoiser: Could not find input file {} '.format(inFile), C.siErrorMsg) i = pb.Increment() pb.StatusText = '{}/{}'.format(i, pb.Maximum) @@ -406,10 +413,7 @@ def runDenoise(start_frame, end_frame, inFile, outFile, temporal_frames, pixel_s Application.LogMessage('[sitoa] Arnold Denoiser has finished.') -def denoiseImage(inFile, outFile, f, temporal_frames, pixel_search_radius, pixel_patch_radius, variance, light_group_aovs): - inFile = inFile.frame(f) - outFile = outFile.frame(f) - +def denoiseImage(inFile, outFile, temporal_frames, pixel_search_radius, pixel_patch_radius, variance, light_group_aovs): noice_binary = os.path.join(os.path.dirname(Application.Plugins('Arnold Render').Filename), 'noice') if sys.platform == 'win32': noice_binary += '.exe' From ba5c4890c730b21a58186bf0fcfb053f2b7dccb7 Mon Sep 17 00:00:00 2001 From: Jens Lindgren Date: Tue, 8 Jan 2019 21:08:06 +0100 Subject: [PATCH 150/159] check that end > start --- plugins/helpers/ArnoldDenoiser.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/plugins/helpers/ArnoldDenoiser.py b/plugins/helpers/ArnoldDenoiser.py index c044b56..d3c0d59 100644 --- a/plugins/helpers/ArnoldDenoiser.py +++ b/plugins/helpers/ArnoldDenoiser.py @@ -360,6 +360,9 @@ def doDenoise(cp): end_frame = start_frame elif frame_range == u'Start / End': end_frame = cp.end_frame.Value + if end_frame < start_frame: + XSIUIToolkit.MsgBox('End Frame can\'t be before Start Frame', C.siMsgOkOnly, 'Arnold Denoiser') + return False else: # complete sequence, need to check on disk all the existing input files start_frame, end_frame = inSeq.start, inSeq.end From 474e51c78818f08e85c8c2937a1f4ac7f7934e6e Mon Sep 17 00:00:00 2001 From: Jens Lindgren Date: Tue, 8 Jan 2019 21:14:24 +0100 Subject: [PATCH 151/159] add output suffix and make the output field read only --- plugins/helpers/ArnoldDenoiser.py | 43 +++++++++++++++++++++---------- 1 file changed, 30 insertions(+), 13 deletions(-) diff --git a/plugins/helpers/ArnoldDenoiser.py b/plugins/helpers/ArnoldDenoiser.py index d3c0d59..4175783 100644 --- a/plugins/helpers/ArnoldDenoiser.py +++ b/plugins/helpers/ArnoldDenoiser.py @@ -77,7 +77,8 @@ def OpenDenoiserProperty_Execute(in_inspect): def arnold_denoiser_Define( in_ctxt ): cp = in_ctxt.Source cp.AddParameter2('input', C.siString, '', None, None, None, None, C.siClassifUnknown, C.siPersistable) - cp.AddParameter2('output', C.siString, '', None, None, None, None, C.siClassifUnknown, C.siPersistable) + cp.AddParameter2('output_suffix', C.siString, '_denoised', None, None, None, None, C.siClassifUnknown, C.siPersistable) + cp.AddParameter2('output', C.siString, '', None, None, None, None, C.siClassifUnknown, C.siReadOnly) cp.AddParameter2('frame_range', C.siString, 'Complete Sequence', None, None, None, None, C.siClassifUnknown, C.siPersistable) cp.AddParameter2('start_frame', C.siInt4, 0, 0, 2147483647, 0, 100, C.siClassifUnknown, C.siPersistable) cp.AddParameter2('end_frame', C.siInt4, 0, 0, 2147483647, 0, 100, C.siClassifUnknown, C.siPersistable) @@ -103,8 +104,10 @@ def arnold_denoiser_DefineLayout( in_ctxt ): item.SetAttribute(C.siUILabelMinPixels, 40) item.SetAttribute(C.siUILabelPercentage, 20) - item = layout.AddItem('output', 'Output', C.siControlFilePath) - item.SetAttribute(C.siUIFileFilter, file_types) + item = layout.AddItem('output_suffix', 'Output Suffix') + item.SetAttribute(C.siUILabelMinPixels, 80) + + item = layout.AddItem('output', 'Output') item.SetAttribute(C.siUILabelMinPixels, 40) item.SetAttribute(C.siUILabelPercentage, 20) @@ -143,6 +146,7 @@ def arnold_denoiser_DefineLayout( in_ctxt ): def arnold_denoiser_OnInit( ): Application.LogMessage('arnold_denoiser_OnInit called', C.siVerbose) + input_logic() frame_range_logic() def arnold_denoiser_OnClosed( ): @@ -155,6 +159,13 @@ def arnold_denoiser_input_OnChanged( ): Application.LogMessage(str('New value: ') + str(paramVal), C.siVerbose) input_logic() +def arnold_denoiser_output_suffix_OnChanged( ): + Application.LogMessage('arnold_denoiser__output_suffix_OnChanged called', C.siVerbose) + oParam = PPG.output_suffix + paramVal = oParam.Value + Application.LogMessage(str('New value: ') + str(paramVal), C.siVerbose) + input_logic() + def arnold_denoiser_frame_range_OnChanged( ): Application.LogMessage('arnold_denoiser_frame_range_OnChanged called', C.siVerbose) oParam = PPG.frame_range @@ -181,7 +192,7 @@ def frame_range_logic(): def input_logic(): # convert softimage file sequnce syntax inputFile = PPG.input.Value - if inputFile != u'': + if inputFile: inputSeq = ImageSequence(inputFile) start_frame = inputSeq.start end_frame = inputSeq.end @@ -189,10 +200,16 @@ def input_logic(): PPG.start_frame.Value = start_frame PPG.end_frame.Value = end_frame - if PPG.output.Value == u'': - outputSeq = ImageSequence(inputFile) - outputSeq.addFilebaseSuffix('_denoised') - PPG.output.Value = outputSeq.squares() + outputSuffix = PPG.output_suffix.Value + + outputSeq = ImageSequence(inputFile) + outputSeq.addFilebaseSuffix(outputSuffix) + PPG.output.Value = outputSeq.si() + + else: + PPG.start_frame.Value = 0 + PPG.end_frame.Value = 0 + PPG.output.Value = '' class ImageSequence(object): @@ -340,19 +357,19 @@ def addFilebaseSuffix(self, suffix): def doDenoise(cp): - outFile = cp.output.Value inFileStr = cp.input.Value + outputSuffix = cp.output_suffix.Value if inFileStr == '': XSIUIToolkit.MsgBox('An input file must be selected', C.siMsgOkOnly, 'Arnold Denoiser') return False - if outFile == '': - XSIUIToolkit.MsgBox('An output file must be selected', C.siMsgOkOnly, 'Arnold Denoiser') + if outputSuffix == '': + XSIUIToolkit.MsgBox('Output suffix can\'t be empty', C.siMsgOkOnly, 'Arnold Denoiser') return False - outFile = ImageSequence(outFile) inSeq = ImageSequence(inFileStr) - outSeq = ImageSequence(outFile) + outSeq = ImageSequence(inFileStr) + outSeq.addFilebaseSuffix(outputSuffix) start_frame = cp.start_frame.Value frame_range = cp.frame_range.Value From 23950e7b7af4379ca20863bf2342905bffb3aa90 Mon Sep 17 00:00:00 2001 From: Jens Lindgren Date: Tue, 8 Jan 2019 21:44:03 +0100 Subject: [PATCH 152/159] fix for finding start frame in square sequences --- plugins/helpers/ArnoldDenoiser.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/helpers/ArnoldDenoiser.py b/plugins/helpers/ArnoldDenoiser.py index 4175783..a99e4dc 100644 --- a/plugins/helpers/ArnoldDenoiser.py +++ b/plugins/helpers/ArnoldDenoiser.py @@ -279,7 +279,7 @@ def parseSquareSequence(self): for matchingFile in filesList: frame_token = int(matchingFile[begin_pos:end_pos]) - if start_frame < 0 or frame_token < start_frame: + if start_frame <= 0 or frame_token < start_frame: start_frame = frame_token if frame_token > end_frame: end_frame = frame_token From 4dc7cc94413f85d0ec25cf811e6710fec7145346 Mon Sep 17 00:00:00 2001 From: Jens Lindgren Date: Wed, 9 Jan 2019 22:08:03 +0100 Subject: [PATCH 153/159] add linktab support --- plugins/helpers/ArnoldDenoiser.py | 1 + 1 file changed, 1 insertion(+) diff --git a/plugins/helpers/ArnoldDenoiser.py b/plugins/helpers/ArnoldDenoiser.py index a99e4dc..c7dda58 100644 --- a/plugins/helpers/ArnoldDenoiser.py +++ b/plugins/helpers/ArnoldDenoiser.py @@ -367,6 +367,7 @@ def doDenoise(cp): XSIUIToolkit.MsgBox('Output suffix can\'t be empty', C.siMsgOkOnly, 'Arnold Denoiser') return False + inFileStr = XSIUtils.Linktab.ResolvePath(inFileStr) inSeq = ImageSequence(inFileStr) outSeq = ImageSequence(inFileStr) outSeq.addFilebaseSuffix(outputSuffix) From 739fa4dea2d5eb7b6566d4b6640d61a6c0ab1dc5 Mon Sep 17 00:00:00 2001 From: Jens Lindgren Date: Tue, 15 Jan 2019 00:06:54 +0100 Subject: [PATCH 154/159] rename gobo wrap and scale parameters --- plugins/helpers/ArnoldLightShaderDef.js | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/plugins/helpers/ArnoldLightShaderDef.js b/plugins/helpers/ArnoldLightShaderDef.js index 1f13ef5..74fb4b2 100644 --- a/plugins/helpers/ArnoldLightShaderDef.js +++ b/plugins/helpers/ArnoldLightShaderDef.js @@ -807,10 +807,10 @@ function ArnoldLightShaders_gobo_1_0_Define(in_ctxt) h.AddImage (params, "slidemap"); h.AddScalar(params, "rotate", 0.0, 0.0, 1000000, 0.0, 360.0); - h.AddScalar(params, "scale_s", 1.0, 0.001, 1000000, 0.001, 10.0); - h.AddScalar(params, "scale_t", 1.0, 0.001, 1000000, 0.001, 10.0); - h.AddString(params, "wrap_s", "periodic"); - h.AddString(params, "wrap_t", "periodic"); + h.AddScalar(params, "sscale", 1.0, 0.001, 1000000, 0.001, 10.0); + h.AddScalar(params, "tscale", 1.0, 0.001, 1000000, 0.001, 10.0); + h.AddString(params, "swrap", "periodic"); + h.AddString(params, "twrap", "periodic"); h.AddScalar(params, "density", 0.0, 0.0, 1.0, 0.0, 1.0); h.AddString(params, "filter_mode", "blend"); h.AddScalar(params, "offset_x", 0.0, 0.0, 1.0, 0.0, 1.0); @@ -838,8 +838,8 @@ function gobo_Layout(in_layout) item = in_layout.AddItem("slidemap", ""); item.SetAttribute(siUINoLabel, true); item = in_layout.AddItem("rotate", "Rotation"); - item = in_layout.AddItem("scale_s", "Repeat S"); - item = in_layout.AddItem("scale_t", "Repeat T"); + item = in_layout.AddItem("sscale", "Repeat S"); + item = in_layout.AddItem("tscale", "Repeat T"); var ar = Array("Periodic", "periodic", "Black", "black", @@ -847,8 +847,8 @@ function gobo_Layout(in_layout) "Mirror", "mirror", "File", "file"); - item = in_layout.AddEnumControl("wrap_s", ar, "Wrap S", siControlCombo); - item = in_layout.AddEnumControl("wrap_t", ar, "Wrap T", siControlCombo); + item = in_layout.AddEnumControl("swrap", ar, "Wrap S", siControlCombo); + item = in_layout.AddEnumControl("twrap", ar, "Wrap T", siControlCombo); item = in_layout.AddItem("density", "Density"); From c1bd6ef20b2c31dc58e595a6da20299d1f705e94 Mon Sep 17 00:00:00 2001 From: Jens Lindgren Date: Tue, 15 Jan 2019 00:18:12 +0100 Subject: [PATCH 155/159] change min max on offset parameters --- plugins/helpers/ArnoldLightShaderDef.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/helpers/ArnoldLightShaderDef.js b/plugins/helpers/ArnoldLightShaderDef.js index 74fb4b2..c03bd54 100644 --- a/plugins/helpers/ArnoldLightShaderDef.js +++ b/plugins/helpers/ArnoldLightShaderDef.js @@ -813,8 +813,8 @@ function ArnoldLightShaders_gobo_1_0_Define(in_ctxt) h.AddString(params, "twrap", "periodic"); h.AddScalar(params, "density", 0.0, 0.0, 1.0, 0.0, 1.0); h.AddString(params, "filter_mode", "blend"); - h.AddScalar(params, "offset_x", 0.0, 0.0, 1.0, 0.0, 1.0); - h.AddScalar(params, "offset_y", 0.0, 0.0, 1.0, 0.0, 1.0); + h.AddScalar(params, "offset_x", 0.0, -1000000.0, 1000000.0, -1.0, 1.0); + h.AddScalar(params, "offset_y", 0.0, -1000000.0, 1000000.0, -1.0, 1.0); // OUTPUT h.AddOutputShader(shaderDef.OutputParamDefs); From 9bcadf88958ba1f0df7d050300da2397ca5588ed Mon Sep 17 00:00:00 2001 From: Jens Lindgren Date: Wed, 23 Jan 2019 21:29:35 +0100 Subject: [PATCH 156/159] make denoiser use sitoa loglevel settings --- plugins/helpers/ArnoldDenoiser.py | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/plugins/helpers/ArnoldDenoiser.py b/plugins/helpers/ArnoldDenoiser.py index c7dda58..52f0802 100644 --- a/plugins/helpers/ArnoldDenoiser.py +++ b/plugins/helpers/ArnoldDenoiser.py @@ -212,6 +212,16 @@ def input_logic(): PPG.output.Value = '' +def SITOALogMessage(message, severity=C.siInfo): + loglevel = Application.GetValue("Passes.Arnold_Render_Options.log_level") + siloglevel = [C.siError, C.siWarning, C.siInfo, C.siVerbose][loglevel] # select the Softimage severity from SItoA loglevel. + + if severity <= siloglevel: + # LogMessage but clamp sverity at siInfo + # This makes sure that siVerbose messages get printed regardless if Verbosity is enabled in Softimage or not + Application.LogMessage(message, min(severity, C.siInfo)) + + class ImageSequence(object): si_re = re.compile(r'(.*)\[(\d+)\.{2}(\d+)(?:;(\d+))?\](.*)(\..+)') square_re = re.compile(r'(.*?)(#+)(.*)(\..+)') @@ -408,22 +418,22 @@ def runDenoise(start_frame, end_frame, inSeq, outSeq, temporal_frames, pixel_sea inFile = inSeq.frame(f) outFile = outSeq.frame(f) if os.path.isfile(inFile): - Application.LogMessage('[sitoa] Denoising image {} '.format(inFile)) + SITOALogMessage('[sitoa] Denoising image {} '.format(inFile)) t = threading.Thread(target=denoiseImage, args=(inFile, outFile, temporal_frames, pixel_search_radius, pixel_patch_radius, variance, light_group_aovs)) t.start() while t.is_alive(): if pb.CancelPressed: run = False - Application.LogMessage('[sitoa] Stopping Arnold Denoiser after the current frame is done...') + SITOALogMessage('[sitoa] Stopping Arnold Denoiser after the current frame is done...') Application.Desktop.RedrawUI() sleep(0.01) # just to limit the RedrawUI a bit. else: if not run: - Application.LogMessage('[sitoa] Arnold Denoiser has stopped.') + SITOALogMessage('[sitoa] Arnold Denoiser has stopped.') else: - Application.LogMessage('[sitoa] Arnold Denoiser: Could not find input file {} '.format(inFile), C.siErrorMsg) + SITOALogMessage('[sitoa] Arnold Denoiser: Could not find input file {} '.format(inFile), C.siError) i = pb.Increment() pb.StatusText = '{}/{}'.format(i, pb.Maximum) @@ -431,7 +441,7 @@ def runDenoise(start_frame, end_frame, inSeq, outSeq, temporal_frames, pixel_sea else: if run: - Application.LogMessage('[sitoa] Arnold Denoiser has finished.') + SITOALogMessage('[sitoa] Arnold Denoiser has finished.') def denoiseImage(inFile, outFile, temporal_frames, pixel_search_radius, pixel_patch_radius, variance, light_group_aovs): @@ -448,6 +458,6 @@ def denoiseImage(inFile, outFile, temporal_frames, pixel_search_radius, pixel_pa for light_group in light_group_split: cmd += ['-l', light_group] - Application.LogMessage('Starting Arnold Denoiser with command: ' + subprocess.list2cmdline(cmd), C.siVerbose) + SITOALogMessage('[sitoa] Starting Arnold Denoiser with command: ' + subprocess.list2cmdline(cmd), C.siVerbose) res = subprocess.Popen(cmd, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, startupinfo=_no_window).communicate()[0] - Application.LogMessage(res, C.siVerbose) + SITOALogMessage(res, C.siVerbose) From cc32d4b5b4a189615b09cf9ff2b943050c50bd4c Mon Sep 17 00:00:00 2001 From: Jens Lindgren Date: Wed, 23 Jan 2019 21:31:58 +0100 Subject: [PATCH 157/159] add AddDenoiserProperties command also added to arnold menu --- plugins/helpers/ArnoldMenu.js | 1 + plugins/helpers/ArnoldProperties.js | 33 +++++++++++++++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/plugins/helpers/ArnoldMenu.js b/plugins/helpers/ArnoldMenu.js index 4b95cac..741141f 100644 --- a/plugins/helpers/ArnoldMenu.js +++ b/plugins/helpers/ArnoldMenu.js @@ -247,6 +247,7 @@ function AddPropertiesSubMenu(in_menu) in_menu.AddCommandItem("Texture Options", "AddTextureOptionsProperties"); in_menu.AddCommandItem("Camera Options", "AddCameraOptionsProperties"); in_menu.AddCommandItem("Sidedness", "AddSidednessProperties"); + in_menu.AddCommandItem("Denoiser", "AddDenoiserProperties"); } diff --git a/plugins/helpers/ArnoldProperties.js b/plugins/helpers/ArnoldProperties.js index 98938ea..68e2743 100644 --- a/plugins/helpers/ArnoldProperties.js +++ b/plugins/helpers/ArnoldProperties.js @@ -26,6 +26,7 @@ function XSILoadPlugin(in_reg) in_reg.RegisterCommand("AddTextureOptionsProperties", "SITOA_AddTextureOptionsProperties"); in_reg.RegisterCommand("AddCameraOptionsProperties", "SITOA_AddCameraOptionsProperties"); in_reg.RegisterCommand("AddVolumeProperties", "SITOA_AddVolumeProperties"); + in_reg.RegisterCommand("AddDenoiserProperties", "SITOA_AddDenoiserProperties"); in_reg.RegisterProperty("arnold_visibility"); in_reg.RegisterProperty("arnold_matte"); @@ -92,6 +93,9 @@ function CommonAddProperties(in_collection, in_type, in_inspect) if (prop != null) volume_collection.Add(in_collection.item(i)) break; + case "Denoiser": + prop = AddDenoiserProperty(in_collection.item(i)); + break; default: break; } @@ -224,6 +228,16 @@ function AddVolumeProperties_Execute(in_collection, in_inspect) return CommonAddProperties(in_collection, "Volume", in_inspect); } +function AddDenoiserProperties_Init(in_ctxt) +{ + return CommonAddArguments(in_ctxt); +} + +function AddDenoiserProperties_Execute(in_collection, in_inspect) +{ + return CommonAddProperties(in_collection, "Denoiser", in_inspect); +} + ///////////////////////////////// // PROPERTY ADDERS ///////////////////////////////// @@ -414,6 +428,25 @@ function AddVolumeProperty(in_xsiObj) return prop; } + +function AddDenoiserProperty(in_xsiObj) +{ + var prop = null; + // is in_xsiObj capable of hosting properties ? + var classOk = in_xsiObj.IsClassOf(siSceneItemID); + + var type = in_xsiObj.type; + if (classOk && (type == "Pass")) + { + if (!CommonHasProperty(in_xsiObj, "arnold_denoiser")) + prop = in_xsiObj.AddProperty("arnold_denoiser", false, "Arnold Denoiser"); + } + else + logmessage("[sitoa] Cannot add Denoiser property to " + in_xsiObj.FullName + ". It can only be assigned to Passes", siErrorMsg); + + return prop; +} + ///////////////////////////////// ///////////////////////////////// ///////////////////////////////// From d2e8098acb339a90fd74cc91d7003b5780b7671e Mon Sep 17 00:00:00 2001 From: Jens Lindgren Date: Wed, 23 Jan 2019 23:53:51 +0100 Subject: [PATCH 158/159] small fix and cleanup --- plugins/helpers/ArnoldDenoiser.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/plugins/helpers/ArnoldDenoiser.py b/plugins/helpers/ArnoldDenoiser.py index 52f0802..c24434d 100644 --- a/plugins/helpers/ArnoldDenoiser.py +++ b/plugins/helpers/ArnoldDenoiser.py @@ -61,10 +61,9 @@ def OpenDenoiserProperty_Init( in_ctxt ): def OpenDenoiserProperty_Execute(in_inspect): inspect = True if in_inspect is None else in_inspect - obj = Application.ActiveSceneRoot obj = Application.ActiveProject.ActiveScene.ActivePass propCollection = obj.Properties - prop = propCollection.find('arnold_denoiser') + prop = propCollection.Find('arnold_denoiser') if not prop: prop = obj.AddProperty("arnold_denoiser", false, "Arnold Denoiser") From bfc3e76c8e28a7b66a3daa528b64713648314115 Mon Sep 17 00:00:00 2001 From: Jens Lindgren Date: Thu, 24 Jan 2019 00:01:53 +0100 Subject: [PATCH 159/159] add to same pass as arnold render options if they are local --- plugins/helpers/ArnoldDenoiser.py | 10 +++++++++- plugins/sitoa/renderer/RendererOptions.cpp | 8 ++++++-- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/plugins/helpers/ArnoldDenoiser.py b/plugins/helpers/ArnoldDenoiser.py index c24434d..b296c4c 100644 --- a/plugins/helpers/ArnoldDenoiser.py +++ b/plugins/helpers/ArnoldDenoiser.py @@ -55,13 +55,21 @@ def XSIUnloadPlugin( in_reg ): def OpenDenoiserProperty_Init( in_ctxt ): oCmd = in_ctxt.Source oArgs = oCmd.Arguments + oArgs.Add("in_pass") oArgs.Add("in_inspect") return true -def OpenDenoiserProperty_Execute(in_inspect): +def OpenDenoiserProperty_Execute(in_pass, in_inspect): inspect = True if in_inspect is None else in_inspect + # default to currentpass obj = Application.ActiveProject.ActiveScene.ActivePass + + if in_pass: + if not in_pass.IsEqualTo(Application.ActiveProject.ActiveScene.PassContainer): + # if Arnold Render Options is Local in the Pass where the button was pressed, use that instead of currentpass + obj = in_pass + propCollection = obj.Properties prop = propCollection.Find('arnold_denoiser') diff --git a/plugins/sitoa/renderer/RendererOptions.cpp b/plugins/sitoa/renderer/RendererOptions.cpp index d070bd3..4912161 100644 --- a/plugins/sitoa/renderer/RendererOptions.cpp +++ b/plugins/sitoa/renderer/RendererOptions.cpp @@ -1091,7 +1091,7 @@ SITOA_CALLBACK CommonRenderOptions_DefineLayout(CRef& in_ctxt) layout.EndGroup(); layout.AddGroup(L"Arnold Denoiser (noice)"); layout.AddItem(L"output_denoising_aovs", L"Output Denoising AOVs"); - layout.AddButton(L"OpenDenoiserProperties", L"Open Arnold Denoiser Properties (Current Pass)"); + layout.AddButton(L"OpenDenoiserProperties", L"Open Arnold Denoiser Properties"); layout.EndGroup(); layout.AddItem(L"sitoa_version", L"SItoA Version"); @@ -1282,7 +1282,11 @@ SITOA_CALLBACK CommonRenderOptions_PPGEvent(const CRef& in_ctxt) else if (buttonName.IsEqualNoCase(L"OpenDenoiserProperties")) { CValue retval = false; - Application().ExecuteCommand(L"SITOA_OpenDenoiserProperty", NULL, retval); + CValueArray denoiserArgs(2); + denoiserArgs[0] = cpset.GetParent(); + denoiserArgs[1] = ""; + + Application().ExecuteCommand(L"SITOA_OpenDenoiserProperty", denoiserArgs, retval); } } else if (eventID == PPGEventContext::siParameterChange)

    8lKuVCAtv}0`Rrgj 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 literal 0 HcmV?d00001 From 19e17853f97159f646563ecceb05f7d4a39b72e8 Mon Sep 17 00:00:00 2001 From: Jens Lindgren Date: Sun, 2 Sep 2018 23:49:54 +0200 Subject: [PATCH 063/159] removed setting of shaders_path in testsuite --- testsuite/SConscript | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/testsuite/SConscript b/testsuite/SConscript index 3b8386d..d52b660 100644 --- a/testsuite/SConscript +++ b/testsuite/SConscript @@ -197,11 +197,7 @@ function main(path) try { SetValue("Passes.Arnold_Render_Options.output_file_tagdir_log", "%s", null);} catch(e) {} - - try { - SetValue("Passes.Arnold_Render_Options.shaders_path", "%s", null);} - catch(e) {} - + try { SetValue("Passes.Arnold_Render_Options.textures_path", "%s", null); @@ -217,7 +213,6 @@ function main(path) get_escaped_path(os.path.abspath('test.scn')), get_escaped_path(os.path.abspath(test_env['OUTPUT_IMAGE'])), get_escaped_path(os.getcwd()), - get_escaped_path(os.path.join(ROOT_DIR, os.path.dirname(str(SITOA_SHADERS[0])))), get_escaped_path(os.path.abspath(os.path.join(ROOT_DIR,'testsuite', 'XSIProject', 'Pictures'))))) file.close() From c5709b6a9db246b22a84251c1bfdd59c959cd9fb Mon Sep 17 00:00:00 2001 From: Jens Lindgren Date: Mon, 3 Sep 2018 00:45:59 +0200 Subject: [PATCH 064/159] update test_0161 --- .../XSIProject/Scenes/test_0161/data/test.scn | Bin 525824 -> 589824 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/testsuite/XSIProject/Scenes/test_0161/data/test.scn b/testsuite/XSIProject/Scenes/test_0161/data/test.scn index 42397948d94f1e34e4817e1c361a3fc680198d57..50e29945b8c7a5084d3212fe2f408fd3cc4cc3a4 100644 GIT binary patch literal 589824 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