Message 1 of 1
Update nodes between rendering cause segmentation fault
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report
When reading the official example for arnold python api, I notice that the example deletes all relevant nodes before replacing them with the new ones. I was wondering if it is possible to just update the parameters of those nodes between frames using `AiNodeSetXXX`? (However, a segmentation fault is generated in this process, I do not know whether this is the correct way to do so)
A minimum working example:
#include <ai.h>
#include <string>
#include <vector>
#include <iostream>
#include <algorithm>
#include <filesystem>
namespace fs = std::filesystem;
int main() {
const fs::path ass_path = "test.ass";
AiBegin();
auto universe = AiUniverse();
auto session = AiRenderSession(universe, AI_SESSION_BATCH);
auto load_ass_param = AiParamValueMap();
AiParamValueMapSetInt(load_ass_param, AtString("mask"), AI_NODE_ALL);
AiSceneLoad (universe, ass_path.c_str(), load_ass_param);
AiMsgInfo("Finish rendering");
/* preprocess */
AiRender(session);
AtArray* vlist = AiArrayAllocate(8, 1, AI_TYPE_VECTOR);
AiArraySetVec(vlist, 0, AtVector(0.200000003, -0.200000003, 0.200000003));
AiArraySetVec(vlist, 1, AtVector(0.200000003, -0.200000003, -0.200000003));
AiArraySetVec(vlist, 2, AtVector(-0.200000003, -0.200000003, 0.200000003));
AiArraySetVec(vlist, 3, AtVector(-0.200000003, -0.200000003, -0.200000003));
AiArraySetVec(vlist, 4, AtVector(0.200000003, 0.200000003, 0.200000003));
AiArraySetVec(vlist, 5, AtVector(0.200000003, 0.200000003, -0.200000003));
AiArraySetVec(vlist, 6, AtVector(-0.200000003, 0.200000003, 0.200000003));
AiArraySetVec(vlist, 7, AtVector(-0.200000003, 0.200000003, -0.200000003));
auto node = AiNodeLookUpByName(universe, AtString("/cube:Mesh/cube:MeshShape"));
AiNodeSetArray(node, AtString("vlist"), vlist);
// auto new_node = AiNodeClone(node);
// AiNodeSetArray(new_node, AtString("vlist"), vlist);
// AiNodeReplace(node, new_node, true);
AiRender(session);
AiMsgInfo("Finish rendering");
AiRenderSessionDestroy(session);
AiUniverseDestroy(universe);
AiEnd();
return 0;
}
And my test.ass is:
### exported: Wed Dec 13 14:34:47 2023
### from: Arnold 7.2.4.1 [1fee86c4] linux x86_64 clang-15.0.7 oiio-2.4.1 osl-1.12.9 vdb-7.1.1 adlsdk-7.4.2.47 clmhub-3.1.1.43 rlm-14.2.5 optix-6.6.0 2023/10/17 03:09:19
### host app: MtoA 5.3.4.1 4d32feb2 (fix-5.3.4) Maya 2024
### user: hansljy
### render_layer: defaultRenderLayer
### bounds: -0.2 -0.2 -0.2 0.2 0.2 0.2
### meters_per_unit: 0.010000
options
{
AA_samples 3
AA_seed 300
outputs "RGBA RGBA defaultArnoldFilter/gaussian_filter defaultArnoldDriver/driver_exr.RGBA"
xres 960
yres 540
texture_per_file_stats on
texture_searchpath "/home/hansljy/maya/projects/textures/sourceimages"
texture_automip off
camera "/persp/perspShape"
color_manager "defaultColorMgtGlobals"
meters_per_unit 0.xxx-xxxxxxxx
frame 300
procedural_searchpath "/home/hansljy/maya/projects/textures/"
GI_diffuse_depth 1
GI_specular_depth 1
GI_transmission_depth 8
declare render_layer constant STRING
render_layer "defaultRenderLayer"
enable_dependency_graph true
}
gaussian_filter
{
name defaultArnoldFilter/gaussian_filter
}
driver_exr
{
name defaultArnoldDriver/driver_exr.RGBA
filename "/home/hansljy/maya/projects/textures/images/untitled.exr"
color_space ""
}
color_manager_ocio
{
name defaultColorMgtGlobals
config "/usr/autodesk/maya/resources/OCIO-configs/Maya2022-default/config.ocio"
color_space_linear "ACEScg"
}
persp_camera
{
name /persp/perspShape
matrix
0.719401479 0.694594502 0 0
-0.320911646 0.332372785 0.886873186 0
0.616017222 -0.638017893 0.462012947 0
6.23699188 -6.45974159 4.67774391 1
near_clip 0.100000001
far_clip 10000
shutter_start 0
shutter_end 0
shutter_type "box"
rolling_shutter "off"
rolling_shutter_duration 0
motion_start 0
motion_end 0
exposure 0
fov 54.4322243
uv_remap 0 0 0 1
declare dcc_name constant STRING
dcc_name "perspShape"
}
polymesh
{
name /cube:Mesh/cube:MeshShape
visibility 255
sidedness 255
matrix
1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1
shader "standardSurface1"
id 3745223389
nsides 12 1 UINT
3 3 3 3 3 3 3 3 3 3 3 3
vidxs 36 1 UINT
4 2 0 2 7 3 6 5 7 1 7 5 0 3 1 4 1 5 4 6 2 2 6 7 6 4 5 1 3 7 0 2 3 4 0 1
nidxs 36 1 UINT
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
31 32 33 34 35
vlist 8 1 VECTOR
0.200000003 -0.200000003 0.200000003 0.200000003 -0.200000003 -0.200000003 -0.200000003 -0.200000003 0.200000003
-0.200000003 -0.200000003 -0.200000003 0.200000003 0.200000003 0.200000003 0.200000003 0.200000003 -0.200000003
-0.200000003 0.200000003 0.200000003 -0.200000003 0.200000003 -0.200000003
nlist 36 1 VECTOR
0 0 1 0 0 1 0 0 1 -1 0 0 -1 0 0 -1 0 0 0 1 0 0 1 0 0 1 0 0 0 -1 0 0 -1 0 0 -1 0 -1 0
0 -1 0 0 -1 0 1 0 0 1 0 0 1 0 0 0 0 1 0 0 1 0 0 1 -1 0 0 -1 0 0 -1 0 0 0 1 0 0 1 0
0 1 0 0 0 -1 0 0 -1 0 0 -1 0 -1 0 0 -1 0 0 -1 0 1 0 0 1 0 0 1 0 0
smoothing on
disp_padding 0
disp_height 1
disp_zero_value 0
disp_autobump off
autobump_visibility 1
step_size 0
volume_padding 0
declare dcc_name constant STRING
dcc_name "cube:MeshShape"
}
standard_surface
{
name standardSurface1
base_color 0.400000006 0.400000006 0.400000006
specular_roughness 0.5
transmit_aovs on
normal 1 1 1
tangent 1 1 1
}
The program will crash on the second render call:
00:00:00 129MB | [ass] loading test.ass ...
00:00:00 129MB | [ass] read 3212 bytes, 7 nodes in 0:00.00
00:00:00 129MB | Finish rendering
00:00:00 227MB | parameter vlist on /cube:Mesh/cube:MeshShape was modified - reinitializing node
[1] 138736 segmentation fault (core dumped) ./test