From fe23d56c202ea037ec94993da35e0c0bea38c29b Mon Sep 17 00:00:00 2001 From: Sebastien Blaineau-Ortega Date: Mon, 1 Mar 2021 04:22:28 +0100 Subject: [PATCH] Read velocities from point based schemas (#676) * Read velocities on point based geometries #221 Co-authored-by: sebastien.ortega Co-authored-by: ADS\blaines --- testsuite/test_0157/README | 6 + testsuite/test_0157/data/scene.usda | 71 ++++++++++ testsuite/test_0157/data/test.ass | 116 +++++++++++++++ testsuite/test_0157/ref/reference.log | 197 ++++++++++++++++++++++++++ testsuite/test_0157/ref/reference.tif | Bin 0 -> 16238 bytes translator/reader/read_geometry.cpp | 93 +++++++++--- 6 files changed, 467 insertions(+), 16 deletions(-) create mode 100644 testsuite/test_0157/README create mode 100644 testsuite/test_0157/data/scene.usda create mode 100644 testsuite/test_0157/data/test.ass create mode 100644 testsuite/test_0157/ref/reference.log create mode 100644 testsuite/test_0157/ref/reference.tif diff --git a/testsuite/test_0157/README b/testsuite/test_0157/README new file mode 100644 index 0000000000..40cf6fd2ad --- /dev/null +++ b/testsuite/test_0157/README @@ -0,0 +1,6 @@ +Mesh Velocities with varying topologies + +See #221 #564 + +author: sebastien ortega + diff --git a/testsuite/test_0157/data/scene.usda b/testsuite/test_0157/data/scene.usda new file mode 100644 index 0000000000..8117adcbd7 --- /dev/null +++ b/testsuite/test_0157/data/scene.usda @@ -0,0 +1,71 @@ +#usda 1.0 +( + defaultPrim = "sopcreate1" + endTimeCode = 8 + framesPerSecond = 24 + metersPerUnit = 1 + startTimeCode = 4 + timeCodesPerSecond = 24 + upAxis = "Y" +) + +def Xform "sopcreate1" ( + kind = "component" +) +{ + matrix4d xformOp:transform:xform = ( (1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (0, 0, 0, 1) ) + uniform token[] xformOpOrder = ["xformOp:transform:xform"] + + def Mesh "mesh_0" + { + float3[] extent.timeSamples = { + 3: [(-0.50000006, -0.86602545, -0.5), (1, 0.8660254, 0.5)], + 4: [(-1, -1, -0.5), (1, 1, 0.5)], + 5: [(-0.80901706, -0.9510565, -0.5), (1, 0.95105654, 0.5)], + 6: [(-1, -0.86602545, -0.5), (1, 0.86602545, 0.5)], + 7: [(-0.9009689, -0.9749279, -0.5), (1, 0.9749279, 0.5)], + 8: [(-1, -1, -0.5), (1, 1, 0.5)], + } + int[] faceVertexCounts.timeSamples = { + 3: [3, 3, 4, 4, 4], + 4: [4, 4, 4, 4, 4, 4], + 5: [5, 5, 4, 4, 4, 4, 4], + 6: [6, 6, 4, 4, 4, 4, 4, 4], + 7: [7, 7, 4, 4, 4, 4, 4, 4, 4], + 8: [8, 8, 4, 4, 4, 4, 4, 4, 4, 4], + } + int[] faceVertexIndices.timeSamples = { + 3: [2, 1, 0, 3, 4, 5, 0, 1, 4, 3, 1, 2, 5, 4, 2, 0, 3, 5], + 4: [3, 2, 1, 0, 4, 5, 6, 7, 0, 1, 5, 4, 1, 2, 6, 5, 2, 3, 7, 6, 3, 0, 4, 7], + 5: [4, 3, 2, 1, 0, 5, 6, 7, 8, 9, 0, 1, 6, 5, 1, 2, 7, 6, 2, 3, 8, 7, 3, 4, 9, 8, 4, 0, 5, 9], + 6: [5, 4, 3, 2, 1, 0, 6, 7, 8, 9, 10, 11, 0, 1, 7, 6, 1, 2, 8, 7, 2, 3, 9, 8, 3, 4, 10, 9, 4, 5, 11, 10, 5, 0, 6, 11], + 7: [6, 5, 4, 3, 2, 1, 0, 7, 8, 9, 10, 11, 12, 13, 0, 1, 8, 7, 1, 2, 9, 8, 2, 3, 10, 9, 3, 4, 11, 10, 4, 5, 12, 11, 5, 6, 13, 12, 6, 0, 7, 13], + 8: [7, 6, 5, 4, 3, 2, 1, 0, 8, 9, 10, 11, 12, 13, 14, 15, 0, 1, 9, 8, 1, 2, 10, 9, 2, 3, 11, 10, 3, 4, 12, 11, 4, 5, 13, 12, 5, 6, 14, 13, 6, 7, 15, 14, 7, 0, 8, 15], + } + uniform token orientation = "leftHanded" + point3f[] points ( + interpolation = "vertex" + ) + point3f[] points.timeSamples = { + 3: [(1, 0, 0.5), (-0.50000006, 0.8660254, 0.5), (-0.4999999, -0.86602545, 0.5), (1, 0, -0.5), (-0.50000006, 0.8660254, -0.5), (-0.4999999, -0.86602545, -0.5)], + 4: [(1, 0, 0.5), (-4.371139e-8, 1, 0.5), (-1, -8.742278e-8, 0.5), (1.1924881e-8, -1, 0.5), (1, 0, -0.5), (-4.371139e-8, 1, -0.5), (-1, -8.742278e-8, -0.5), (1.1924881e-8, -1, -0.5)], + 5: [(1, 0, 0.5), (0.30901697, 0.95105654, 0.5), (-0.80901706, 0.5877852, 0.5), (-0.80901694, -0.58778536, 0.5), (0.30901712, -0.9510565, 0.5), (1, 0, -0.5), (0.30901697, 0.95105654, -0.5), (-0.80901706, 0.5877852, -0.5), (-0.80901694, -0.58778536, -0.5), (0.30901712, -0.9510565, -0.5)], + 6: [(1, 0, 0.5), (0.49999997, 0.86602545, 0.5), (-0.50000006, 0.8660254, 0.5), (-1, -8.742278e-8, 0.5), (-0.4999999, -0.86602545, 0.5), (0.4999999, -0.86602545, 0.5), (1, 0, -0.5), (0.49999997, 0.86602545, -0.5), (-0.50000006, 0.8660254, -0.5), (-1, -8.742278e-8, -0.5), (-0.4999999, -0.86602545, -0.5), (0.4999999, -0.86602545, -0.5)], + 7: [(1, 0, 0.5), (0.6234898, 0.7818315, 0.5), (-0.22252095, 0.9749279, 0.5), (-0.9009689, 0.4338836, 0.5), (-0.90096885, -0.43388376, 0.5), (-0.222521, -0.9749279, 0.5), (0.62349004, -0.7818313, 0.5), (1, 0, -0.5), (0.6234898, 0.7818315, -0.5), (-0.22252095, 0.9749279, -0.5), (-0.9009689, 0.4338836, -0.5), (-0.90096885, -0.43388376, -0.5), (-0.222521, -0.9749279, -0.5), (0.62349004, -0.7818313, -0.5)], + 8: [(1, 0, 0.5), (0.70710677, 0.70710677, 0.5), (-4.371139e-8, 1, 0.5), (-0.70710677, 0.70710677, 0.5), (-1, -8.742278e-8, 0.5), (-0.70710665, -0.7071069, 0.5), (1.1924881e-8, -1, 0.5), (0.707107, -0.70710653, 0.5), (1, 0, -0.5), (0.70710677, 0.70710677, -0.5), (-4.371139e-8, 1, -0.5), (-0.70710677, 0.70710677, -0.5), (-1, -8.742278e-8, -0.5), (-0.70710665, -0.7071069, -0.5), (1.1924881e-8, -1, -0.5), (0.707107, -0.70710653, -0.5)], + } + uniform token subdivisionScheme = "none" + vector3f[] velocities ( + interpolation = "vertex" + ) + vector3f[] velocities.timeSamples = { + 3: [(0, -50, 25), (43.30127, 25.000004, 25), (-43.301273, 24.999996, 25), (0, -50, -25), (43.30127, 25.000004, -25), (-43.301273, 24.999996, -25)], + 4: [(0, -50, 25), (50, 0.0000021855694, 25), (-0.000004371139, 50, 25), (-50, -5.9624404e-7, 25), (0, -50, -25), (50, 0.0000021855694, -25), (-0.000004371139, 50, -25), (-50, -5.9624404e-7, -25)], + 5: [(0, -50, 25), (47.552826, -15.450849, 25), (29.38926, 40.45085, 25), (-29.389269, 40.450848, 25), (-47.552826, -15.450856, 25), (0, -50, -25), (47.552826, -15.450849, -25), (29.38926, 40.45085, -25), (-29.389269, 40.450848, -25), (-47.552826, -15.450856, -25)], + 6: [(0, -50, 25), (43.301273, -24.999998, 25), (43.30127, 25.000004, 25), (-0.000004371139, 50, 25), (-43.301273, 24.999996, 25), (-43.301273, -24.999996, 25), (0, -50, -25), (43.301273, -24.999998, -25), (43.30127, 25.000004, -25), (-0.000004371139, 50, -25), (-43.301273, 24.999996, -25), (-43.301273, -24.999996, -25)], + 7: [(0, -50, 25), (39.091576, -31.17449, 25), (48.746395, 11.126047, 25), (21.69418, 45.048447, 25), (-21.694187, 45.048443, 25), (-48.746395, 11.12605, 25), (-39.091568, -31.174501, 25), (0, -50, -25), (39.091576, -31.17449, -25), (48.746395, 11.126047, -25), (21.69418, 45.048447, -25), (-21.694187, 45.048443, -25), (-48.746395, 11.12605, -25), (-39.091568, -31.174501, -25)], + 8: [(0, -50, 25), (35.35534, -35.35534, 25), (50, 0.0000021855694, 25), (35.35534, 35.35534, 25), (-0.000004371139, 50, 25), (-35.355343, 35.35533, 25), (-50, -5.9624404e-7, 25), (-35.355328, -35.35535, 25), (0, -50, -25), (35.35534, -35.35534, -25), (50, 0.0000021855694, -25), (35.35534, 35.35534, -25), (-0.000004371139, 50, -25), (-35.355343, 35.35533, -25), (-50, -5.9624404e-7, -25), (-35.355328, -35.35535, -25)], + } + } +} + diff --git a/testsuite/test_0157/data/test.ass b/testsuite/test_0157/data/test.ass new file mode 100644 index 0000000000..d053adf2a5 --- /dev/null +++ b/testsuite/test_0157/data/test.ass @@ -0,0 +1,116 @@ +### exported: Fri Feb 26 16:21:18 2021 +### from: Arnold 6.2.0.1 [903992ac] windows clang-10.0.1 oiio-2.2.1 osl-1.11.6 vdb-7.1.1 clm-2.0.0.235 rlm-12.4.2 optix-6.6.0 2021/02/09 10:40:42 +### host app: MtoA 4.2.2 8271f300 (develop) Maya 2022 +### bounds: 0 0 0 0 0 0 +### user: blaines +### render_layer: defaultRenderLayer +### scene: C:/maya/scenes/usd_vel.mb + + + +options +{ + AA_samples 5 + AA_seed 4 + outputs "RGBA RGBA myfilter mydriver" + xres 160 + yres 120 + pixel_aspect_ratio 1.33333325 + texture_per_file_stats on + texture_automip off + camera "/persp/perspShape" + frame 4 + GI_diffuse_depth 1 + GI_specular_depth 1 + GI_transmission_depth 8 + declare render_layer constant STRING + render_layer "defaultRenderLayer" +} + +gaussian_filter +{ + name myfilter +} + +driver_tiff +{ + name mydriver + filename "testrender.tif" + color_space "" +} + +persp_camera +{ + name /persp/perspShape + matrix 1 2 b85MATRIX +8Fca(W:BqD`7Dirz_qN;u8El@&a7M[3z7*dw.8+]+<8El>mz7I(E[8Hbc38c;hKy8Fca(W:BqD`7Dirz_qN;u8El@&a7M[3z7*dw.8+]+<8El>mz7I(E[8Hbc38c;hKy + near_clip 0.100000001 + far_clip 10000 + shutter_start -0.02 + shutter_end 0.02 + shutter_type "box" + rolling_shutter "off" + rolling_shutter_duration 0 + motion_start -0.5 + motion_end 0.5 + exposure 0 + fov 1 2 FLOAT +54.4322243 54.4322243 + uv_remap 0 0 0 1 + lens_tilt_angle 1 2 VECTOR2 +0 0 0 0 + lens_shift 1 2 VECTOR2 +0 0 0 0 + declare dcc_name constant STRING + dcc_name "perspShape" +} + +skydome_light +{ + name /aiSkyDomeLight1/aiSkyDomeLightShape1 + matrix 1 2 b85MATRIX +y!$$$$$$$$$(y!$$$$$$$$$(y!$$$$$$$$$(yy!$$$$$$$$$(y!$$$$$$$$$(y!$$$$$$$$$(y + exposure 1 + cast_shadows on + cast_volumetric_shadows on + shadow_density 1 + shadow_color 0 0 0 + samples 1 + normalize on + camera 0 + transmission 1 + diffuse 1 + specular 1 + sss 1 + indirect 1 + max_bounces 999 + motion_start -0.5 + motion_end 0.5 + volume_samples 2 + volume 1 + aov "default" + resolution 1000 + format "latlong" + portal_mode "interior_only" + aov_indirect off + declare dcc_name constant STRING + dcc_name "aiSkyDomeLightShape1" +} + +usd +{ + name /aiStandIn/aiStandInShape + visibility 255 + matrix 1 2 b85MATRIX +y!$$$$$$$$$(y!$$$$$$$$$(y!$$$$$$$$$(yy!$$$$$$$$$(y!$$$$$$$$$(y!$$$$$$$$$(y + use_light_group off + motion_start -0.02 + motion_end 0.02 + override_nodes off + filename "scene.usda" + object_path "" + frame 4 + declare dcc_name constant STRING + dcc_name "aiStandInShape" +} + diff --git a/testsuite/test_0157/ref/reference.log b/testsuite/test_0157/ref/reference.log new file mode 100644 index 0000000000..6c6e205bf7 --- /dev/null +++ b/testsuite/test_0157/ref/reference.log @@ -0,0 +1,197 @@ +00:00:00 72MB | log started Fri Feb 26 18:37:30 2021 +00:00:00 72MB | Arnold 6.2.0.1 [903992ac] windows clang-10.0.1 oiio-2.2.1 osl-1.11.6 vdb-7.1.1 clm-2.0.0.235 rlm-12.4.2 optix-6.6.0 2021/02/09 10:40:42 +00:00:00 72MB | running on REMS4QL1726, pid=30264 +00:00:00 72MB | 2 x Intel(R) Xeon(R) Gold 5218 CPU @ 2.30GHz (32 cores, 64 logical) with 65154MB +00:00:00 75MB | NVIDIA driver version 442.50 (Optix 60600) +00:00:00 75MB | GPU 0: Quadro RTX 4000 @ 1545MHz (compute 7.5) with 8192MB (6629MB available) (NVLink:0) +00:00:00 75MB | Windows 10 (version 10.0, build 19041) +00:00:00 75MB | soft limit for open files is set at 2048 +00:00:00 75MB | +00:00:00 75MB | loading plugins from C:\arnold\arnold-usd\build\windows_x86_64\msvc_opt\usd-0.20.11_arnold-6.2.0.1\procedural ... +00:00:00 79MB | usd_proc.dll: usd uses Arnold 6.2.0.1 +00:00:00 79MB | loaded 1 plugins from 1 lib(s) in 0:00.08 +00:00:00 79MB | loading plugins from C:\arnold\sdk\6.2.0.1\bin\..\plugins ... +00:00:00 79MB | alembic_proc.dll: alembic uses Arnold 6.2.0.1 +00:00:00 79MB | cryptomatte.dll: cryptomatte uses Arnold 6.2.0.1 +00:00:00 79MB | cryptomatte.dll: cryptomatte_filter uses Arnold 6.2.0.1 +00:00:00 79MB | cryptomatte.dll: cryptomatte_manifest_driver uses Arnold 6.2.0.1 +00:00:00 79MB | skipping already loaded plugin: C:\arnold\sdk\6.2.0.1\bin\..\plugins\usd_proc.dll ... +00:00:00 79MB | loaded 4 plugins from 2 lib(s) in 0:00.01 +00:00:00 79MB | [kick] command: C:\arnold\sdk\6.2.0.1\bin\kick test.ass -dw -r 160 120 -sm lambert -bs 16 -o testrender.tif -set driver_tiff.dither false -nocrashpopup -dp -v 6 +00:00:00 79MB | loading plugins from . ... +00:00:00 79MB | no plugins loaded +00:00:00 79MB | [metadata] loading metadata file: test.ass +00:00:00 80MB | [ass] loading test.ass ... +00:00:00 80MB | [ass] read 2328 bytes, 6 nodes in 0:00.00 +00:00:00 80MB | [kick] applying 2 attr value overrides +00:00:00 81MB | +00:00:00 81MB | authorizing with default license managers: rlm, network, user ... +00:00:01 86MB | [network] authorized for "87287ARNOL_2020_0F" in 0:01.62 +00:00:01 86MB | [network] expiration date: permanent, in use: 1/100 +00:00:01 86MB | +00:00:01 105MB | [color_manager] no color manager is active +00:00:01 106MB | [color_manager] rendering color space is "linear" with declared chromaticities: +00:00:01 106MB | r(0.6400, 0.3300) g(0.3000, 0.6000) b(0.1500, 0.0600) and w(0.3127, 0.3290) +00:00:01 120MB | +00:00:01 120MB | there are 1 light and 2 objects: +00:00:01 120MB | 1 persp_camera +00:00:01 120MB | 1 skydome_light +00:00:01 120MB | 1 utility +00:00:01 120MB | 1 driver_tiff +00:00:01 120MB | 1 gaussian_filter +00:00:01 120MB | 1 list_aggregate +00:00:01 120MB | 1 usd +00:00:01 120MB | +00:00:01 120MB | rendering image at 160 x 120, 5 AA samples +00:00:01 120MB | AA samples max +00:00:01 120MB | AA sample clamp +00:00:01 120MB | diffuse samples 2 / depth 1 +00:00:01 120MB | specular samples 2 / depth 1 +00:00:01 120MB | transmission samples 2 / depth 8 +00:00:01 120MB | volume indirect +00:00:01 120MB | total depth 10 +00:00:01 120MB | bssrdf samples 2 +00:00:01 120MB | transparency depth 10 +00:00:01 120MB | initializing 8 nodes ... +00:00:01 151MB | [proc] /aiStandIn/aiStandInShape: loaded 3 nodes (1 objects, 2 shaders) +00:00:01 152MB | creating root object list ... +00:00:01 152MB | node initialization done in 0:00.05 (multithreaded) +00:00:01 152MB | updating 12 nodes ... +00:00:01 152MB | /aiSkyDomeLight1/aiSkyDomeLightShape1: skydome_light using 1 sample, 2 volume samples +00:00:01 152MB | scene bounds: (-1.00000012 -1.00000012 -1) -> (1 1 1) +00:00:01 152MB | node update done in 0:00.00 (multithreaded) +00:00:01 152MB | [aov] parsing 1 output statements ... +00:00:01 152MB | [aov] registered driver: "mydriver" (driver_tiff) +00:00:01 152MB | [aov] * "RGBA" of type RGBA filtered by "myfilter" (gaussian_filter) +00:00:01 152MB | [aov] done preparing 2 AOVs for 1 output to 1 driver (0 deep AOVs) +00:00:01 153MB | starting 64 bucket workers of size 16x16 ... +00:00:01 161MB | [accel] polymesh bvh4_motion done - 0:00.00 - 6 prims, 2 keys +00:00:01 171MB | 0% done - 2613 rays/pixel +00:00:01 172MB | 5% done - 214 rays/pixel +00:00:01 172MB | 10% done - 84 rays/pixel +00:00:01 172MB | 15% done - 87 rays/pixel +00:00:01 172MB | 20% done - 82 rays/pixel +00:00:01 173MB | 25% done - 34 rays/pixel +00:00:01 173MB | 30% done - 297 rays/pixel +00:00:01 173MB | 35% done - 112 rays/pixel +00:00:01 173MB | 40% done - 31 rays/pixel +00:00:01 173MB | 45% done - 27 rays/pixel +00:00:01 174MB | 50% done - 60 rays/pixel +00:00:01 174MB | 55% done - 114 rays/pixel +00:00:01 174MB | 60% done - 88 rays/pixel +00:00:01 174MB | 65% done - 180 rays/pixel +00:00:01 174MB | 70% done - 225 rays/pixel +00:00:01 168MB | 75% done - 500 rays/pixel +00:00:01 168MB | 80% done - 136 rays/pixel +00:00:01 168MB | 85% done - 119 rays/pixel +00:00:01 168MB | 90% done - 156 rays/pixel +00:00:01 168MB | 95% done - 38 rays/pixel +00:00:01 168MB | 100% done - 69 rays/pixel +00:00:01 168MB | render done in 0:00.070 +00:00:01 168MB | [driver_tiff] writing file `testrender.tif' +00:00:01 168MB | render done +00:00:01 168MB | +00:00:01 168MB | ----------------------------------------------------------------------------------- +00:00:01 168MB | scene creation time 0:00.12 machine utilization (0.40%) +00:00:01 168MB | plugin loading 0:00.10 +00:00:01 168MB | ----------------------------------------------------------------------------------- +00:00:01 168MB | frame time 0:01.83 machine utilization (5.62%) +00:00:01 168MB | node init 0:00.06 +00:00:01 168MB | rendering 0:00.07 +00:00:01 168MB | pixel rendering 0:00.07 +00:00:01 168MB | unaccounted 0:01.69 +00:00:01 168MB | ----------------------------------------------------------------------------------- +00:00:01 168MB | top session self-times by category +00:00:01 168MB | worker waiting 0:00.06 (35.23%) +00:00:01 168MB | InitializeNodes 0:00.04 (25.89%) +00:00:01 168MB | RenderBucket 0:00.01 ( 7.55%) +00:00:01 168MB | surface closure (_default_arnold_shader) 0:00.01 ( 5.74%) +00:00:01 168MB | ray traversal+intersection 0:00.00 ( 4.20%) +00:00:01 168MB | TraceCameraRay 0:00.00 ( 3.78%) +00:00:01 168MB | accumulateBucketSamples 0:00.00 ( 3.36%) +00:00:01 168MB | polymesh::intersect (/sopcreate1/mesh_0) 0:00.00 ( 2.66%) +00:00:01 168MB | standard_surface (_default_arnold_shader) 0:00.00 ( 2.24%) +00:00:01 168MB | ----------------------------------------------------------------------------------- +00:00:01 168MB | top session self-times by node +00:00:01 168MB | worker waiting 0:00.06 (35.23%) +00:00:01 168MB | InitializeNodes 0:00.04 (25.89%) +00:00:01 168MB | standard_surface:_default_arnold_shader 0:00.02 (15.39%) +00:00:01 168MB | surface closure 0:00.01 ( 5.74%) +00:00:01 168MB | ray traversal+intersection 0:00.00 ( 3.22%) +00:00:01 168MB | AiLightsTrace 0:00.00 ( 1.96%) +00:00:01 168MB | TraceShadow 0:00.00 ( 1.40%) +00:00:01 168MB | RenderBucket 0:00.01 ( 7.55%) +00:00:01 168MB | polymesh:/sopcreate1/mesh_0 0:00.00 ( 4.48%) +00:00:01 168MB | polymesh::intersect 0:00.00 ( 2.66%) +00:00:01 168MB | BVH_motion::intersect 0:00.00 ( 1.54%) +00:00:01 168MB | TraceCameraRay 0:00.00 ( 3.78%) +00:00:01 168MB | accumulateBucketSamples 0:00.00 ( 3.36%) +00:00:01 168MB | ----------------------------------------------------------------------------------- +00:00:01 168MB | peak CPU memory used 174.65MB +00:00:01 168MB | at startup 75.51MB +00:00:01 168MB | plugins 3.77MB +00:00:01 168MB | AOV samples 10.01MB +00:00:01 168MB | output buffers 0.39MB +00:00:01 168MB | framebuffers 0.39MB +00:00:01 168MB | node overhead 0.01MB +00:00:01 168MB | message passing 0.13MB +00:00:01 168MB | memory pools 42.05MB +00:00:01 168MB | geometry 0.00MB +00:00:01 168MB | polymesh 0.00MB +00:00:01 168MB | accel structs 0.00MB +00:00:01 168MB | strings 24.25MB +00:00:01 168MB | profiler 0.03MB +00:00:01 168MB | unaccounted 18.11MB +00:00:01 168MB | ----------------------------------------------------------------------------------- +00:00:01 168MB | ray counts ( /pixel, /sample) (% total) (avg. hits) (max hits) +00:00:01 168MB | camera 537600 ( 28.00, 1.00) ( 18.75%) ( 0.28) ( 1) +00:00:01 168MB | shadow 1164522 ( 60.65, 2.17) ( 40.62%) ( 0.00) ( 0) +00:00:01 168MB | diffuse_reflect 573676 ( 29.88, 1.07) ( 20.01%) ( 0.00) ( 0) +00:00:01 168MB | specular_reflect 590846 ( 30.77, 1.10) ( 20.61%) ( 0.00) ( 0) +00:00:01 168MB | total 2866644 ( 149.30, 5.33) (100.00%) ( 0.05) ( 1) +00:00:01 168MB | by ray depth: 0 1 +00:00:01 168MB | total 59.4% 40.6% +00:00:01 168MB | ----------------------------------------------------------------------------------- +00:00:01 168MB | shader calls ( /pixel, /sample) (% total) +00:00:01 168MB | primary 299818 ( 15.62, 0.56) (100.00%) +00:00:01 168MB | total 299818 ( 15.62, 0.56) (100.00%) +00:00:01 168MB | by ray depth: 0 1 +00:00:01 168MB | total 100.0% 0.0% +00:00:01 168MB | ----------------------------------------------------------------------------------- +00:00:01 168MB | geometry (% hit ) (instances) ( init mem, final mem) +00:00:01 168MB | lists 1 (100.0%) ( 0) ( 0.00, 0.00) +00:00:01 168MB | procs 1 (100.0%) ( 0) ( 0.00, 0.00) +00:00:01 168MB | polymeshes 1 (100.0%) ( 0) ( 0.00, 0.00) +00:00:01 168MB | ----------------------------------------------------------------------------------- +00:00:01 168MB | geometric elements ( min) ( avg.) ( max) +00:00:01 168MB | objects (procs) 1 ( 1) ( 1.0) ( 1) +00:00:01 168MB | polygons 6 ( 6) ( 6.0) ( 6) +00:00:01 168MB | ----------------------------------------------------------------------------------- +00:00:01 168MB | triangle tessellation ( min) ( avg.) ( max) (/ element) (% total) +00:00:01 168MB | polymeshes 12 ( 12) ( 12.0) ( 12) ( 2.00) (100.00%) +00:00:01 168MB | unique triangles 12 +00:00:01 168MB | CPU memory use 0.00MB +00:00:01 168MB | vertices 0.00MB +00:00:01 168MB | vertex indices 0.00MB +00:00:01 168MB | packed normals 0.00MB +00:00:01 168MB | normal indices 0.00MB +00:00:01 168MB | uniform indices 0.00MB +00:00:01 168MB | largest polymeshes by triangle count +00:00:01 168MB | 12 tris -- /sopcreate1/mesh_0 +00:00:01 168MB | ----------------------------------------------------------------------------------- +00:00:01 168MB | acceleration structures: (% total) +00:00:01 168MB | list 2 ( 66.67%) +00:00:01 168MB | bvh motion (2 keys) 1 ( 33.33%) +00:00:01 168MB | total 3 (100.00%) +00:00:01 168MB | ----------------------------------------------------------------------------------- +00:00:01 168MB | performance warnings: +00:00:01 168MB WARNING | Rendering CPU utilization was only 6%. Your render may be bound by a single threaded process or I/O. +00:00:01 168MB | ----------------------------------------------------------------------------------- +00:00:01 163MB | +00:00:01 163MB | releasing resources +00:00:02 122MB | unloading 3 plugins +00:00:02 122MB | closing usd_proc.dll ... +00:00:02 122MB | closing alembic_proc.dll ... +00:00:02 122MB | closing cryptomatte.dll ... +00:00:02 122MB | unloading plugins done +00:00:02 122MB | Arnold shutdown diff --git a/testsuite/test_0157/ref/reference.tif b/testsuite/test_0157/ref/reference.tif new file mode 100644 index 0000000000000000000000000000000000000000..40cbb0e6c8c5a276f85e077861e6b3dec9e04c41 GIT binary patch literal 16238 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 literal 0 HcmV?d00001 diff --git a/translator/reader/read_geometry.cpp b/translator/reader/read_geometry.cpp index e0ff3020ed..bbe3602b73 100644 --- a/translator/reader/read_geometry.cpp +++ b/translator/reader/read_geometry.cpp @@ -43,12 +43,80 @@ PXR_NAMESPACE_USING_DIRECTIVE + +namespace { + +/** + * Read a UsdGeomPointsBased points attribute to get its positions, as well as its velocities + * If velocities are found, we just get the positions at the "current" frame, and interpolate + * to compute the positions keys. + * If no velocities are found, we get the positions at the different motion steps + **/ +static inline void _ReadPointsAndVelocities(const UsdGeomPointBased &geom, AtNode *node, + const char *attrName, const TimeSettings &time) +{ + UsdAttribute pointsAttr = geom.GetPointsAttr(); + UsdAttribute velAttr = geom.GetVelocitiesAttr(); + + VtValue velValue; + if (time.motionBlur && velAttr && velAttr.Get(&velValue, time.frame)) { + // Motion blur is enabled and velocity attribute is present + const VtArray& velArray = velValue.Get>(); + size_t velSize = velArray.size(); + if (velSize > 0) { + // Non-empty velocities + VtValue posValue; + if (pointsAttr.Get(&posValue, time.frame)) { + const VtArray& posArray = posValue.Get>(); + size_t posSize = posArray.size(); + // Only consider velocities if they're the same size as positions + if (posSize == velSize) { + VtArray fullVec; + fullVec.resize(2 * posSize); // we just want 2 motion keys + const GfVec3f *pos = posArray.data(); + const GfVec3f *vel = velArray.data(); + for (size_t i = 0; i < posSize; ++i, pos++, vel++) { + // Set 2 keys, the first one will be the extrapolated + // position at "shutter start", and the second the + // extrapolated position at "shutter end", based + // on the velocities + fullVec[i] = (*pos) + time.motionStart * (*vel); + fullVec[i + posSize] = (*pos) + time.motionEnd * (*vel); + } + // Set the arnold array attribute + AiNodeSetArray(node, attrName, AiArrayConvert(posSize, 2, + AI_TYPE_VECTOR, fullVec.data())); + // We need to set the motion start and motion end + // corresponding the array keys we've just set + AiNodeSetFlt(node, "motion_start", time.motionStart); + AiNodeSetFlt(node, "motion_end", time.motionEnd); + return; + } + } + } + } + + // No velocities, let's read the positions, eventually at different motion frames + if (ReadArray(pointsAttr, node, attrName, time) > 1) { + // We got more than 1 key, so we need to set the motion start/end + AiNodeSetFlt(node, "motion_start", time.motionStart); + AiNodeSetFlt(node, "motion_end", time.motionEnd); + } +} + +} // namespace + /** Reading a USD Mesh description to Arnold **/ void UsdArnoldReadMesh::Read(const UsdPrim &prim, UsdArnoldReaderContext &context) { const TimeSettings &time = context.GetTimeSettings(); float frame = time.frame; + + // For some attributes, we should never try to read them with motion blur, + // we use another timeSettings for them + TimeSettings staticTime(time); + staticTime.motionBlur = false; AtNode *node = context.CreateArnoldNode("polymesh", prim.GetPath().GetText()); @@ -69,11 +137,11 @@ void UsdArnoldReadMesh::Read(const UsdPrim &prim, UsdArnoldReaderContext &contex } } } - ReadArray(mesh.GetFaceVertexCountsAttr(), node, "nsides", time); + ReadArray(mesh.GetFaceVertexCountsAttr(), node, "nsides", staticTime); if (!meshOrientation.reverse) { // Basic right-handed orientation, no need to do anything special here - ReadArray(mesh.GetFaceVertexIndicesAttr(), node, "vidxs", time); + ReadArray(mesh.GetFaceVertexIndicesAttr(), node, "vidxs", staticTime); } else { // We can't call ReadArray here because the orientation requires to // reverse face attributes. So we're duplicating the function here. @@ -90,12 +158,8 @@ void UsdArnoldReadMesh::Read(const UsdPrim &prim, UsdArnoldReaderContext &contex AiNodeResetParameter(node, "vidxs"); } - // Vertex positions - if (ReadArray(mesh.GetPointsAttr(), node, "vlist", time) > 1) { - AiNodeSetFlt(node, "motion_start", time.motionStart); - AiNodeSetFlt(node, "motion_end", time.motionEnd); - } - + _ReadPointsAndVelocities(mesh, node, "vlist", time); + VtValue sidednessValue; if (mesh.GetDoubleSidedAttr().Get(&sidednessValue)) AiNodeSetByte(node, "sidedness", VtValueGetBool(sidednessValue) ? AI_RAY_ALL : 0); @@ -173,10 +237,9 @@ void UsdArnoldReadCurves::Read(const UsdPrim &prim, UsdArnoldReaderContext &cont // CV counts per curve ReadArray(curves.GetCurveVertexCountsAttr(), node, "num_points", time); // CVs positions - if (ReadArray(curves.GetPointsAttr(), node, "points", time) > 1) { - AiNodeSetFlt(node, "motion_start", time.motionStart); - AiNodeSetFlt(node, "motion_end", time.motionEnd); - } + + _ReadPointsAndVelocities(curves, node, "points", time); + AtArray *pointsArray = AiNodeGetArray(node, "points"); unsigned int pointsSize = (pointsArray) ? AiArrayGetNumElements(pointsArray) : 0; @@ -235,10 +298,8 @@ void UsdArnoldReadPoints::Read(const UsdPrim &prim, UsdArnoldReaderContext &cont UsdGeomPoints points(prim); // Points positions - if (ReadArray(points.GetPointsAttr(), node, "points", time) > 1) { - AiNodeSetFlt(node, "motion_start", time.motionStart); - AiNodeSetFlt(node, "motion_end", time.motionEnd); - } + _ReadPointsAndVelocities(points, node, "points", time); + AtArray *pointsArray = AiNodeGetArray(node, "points"); unsigned int pointsSize = (pointsArray) ? AiArrayGetNumElements(pointsArray) : 0;