Skip to content

Commit 6b68900

Browse files
committed
Demo - improve deformation blur demo
1 parent d895966 commit 6b68900

File tree

1 file changed

+112
-50
lines changed
  • tutorials/13_deformation_motion_blur

1 file changed

+112
-50
lines changed

tutorials/13_deformation_motion_blur/main.cpp

Lines changed: 112 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -93,56 +93,67 @@ int main()
9393
vertex cube_data_motionBlur[cube_NumberOfVertices*numberOfBlurKeyTime] =
9494
{
9595
// vertices at camera exposure = 0.0
96-
{ -1.0f, 1.0f, -1.0f, 0.f, 1.f, 0.f, 0.f, 0.f },
97-
{ 1.0f, 1.0f, -1.0f, 0.f, 1.f, 0.f, 0.f, 0.f },
98-
{ 1.0f, 1.0f, 1.0f , 0.f, 1.f, 0.f, 0.f, 0.f },
99-
{ -1.0f, 1.0f, 1.0f , 0.f, 1.f, 0.f, 0.f, 0.f},
100-
{ -1.0f, -1.0f, -1.0f , 0.f, -1.f, 0.f, 0.f, 0.f },
101-
{ 1.0f, -1.0f, -1.0f , 0.f, -1.f, 0.f, 0.f, 0.f },
102-
{ 1.0f, -1.0f, 1.0f , 0.f, -1.f, 0.f, 0.f, 0.f },
103-
{ -1.0f, -1.0f, 1.0f , 0.f, -1.f, 0.f, 0.f, 0.f },
104-
{ -1.0f, -1.0f, 1.0f , -1.f, 0.f, 0.f, 0.f, 0.f },
105-
{ -1.0f, -1.0f, -1.0f , -1.f, 0.f, 0.f, 0.f, 0.f },
106-
{ -1.0f, 1.0f, -1.0f , -1.f, 0.f, 0.f, 0.f, 0.f },
107-
{ -1.0f, 1.0f, 1.0f , -1.f, 0.f, 0.f, 0.f, 0.f },
108-
{ 1.0f, -1.0f, 1.0f , 1.f, 0.f, 0.f, 0.f, 0.f },
109-
{ 1.0f, -1.0f, -1.0f , 1.f, 0.f, 0.f, 0.f, 0.f },
110-
{ 1.0f, 1.0f, -1.0f , 1.f, 0.f, 0.f, 0.f, 0.f },
111-
{ 1.0f, 1.0f, 1.0f , 1.f, 0.f, 0.f, 0.f, 0.f },
112-
{ -1.0f, -1.0f, -1.0f , 0.f, 0.f, -1.f , 0.f, 0.f },
113-
{ 1.0f, -1.0f, -1.0f , 0.f, 0.f, -1.f , 0.f, 0.f },
114-
{ 1.0f, 1.0f, -1.0f , 0.f, 0.f, -1.f, 0.f, 0.f },
115-
{ -1.0f, 1.0f, -1.0f , 0.f, 0.f, -1.f, 0.f, 0.f },
116-
{ -1.0f, -1.0f, 1.0f , 0.f, 0.f, 1.f, 0.f, 0.f },
117-
{ 1.0f, -1.0f, 1.0f , 0.f, 0.f, 1.f, 0.f, 0.f },
118-
{ 1.0f, 1.0f, 1.0f , 0.f, 0.f, 1.f, 0.f, 0.f },
119-
{ -1.0f, 1.0f, 1.0f , 0.f, 0.f, 1.f, 0.f, 0.f },
96+
{ -1.0f, 1.0f, -1.0f, 0.f, 1.f, 0.f, 0.f, 0.f },
97+
{ 1.0f, 1.0f, -1.0f, 0.f, 1.f, 0.f, 1.f, 0.f },
98+
{ 1.0f, 1.0f, 1.0f , 0.f, 1.f, 0.f, 1.f, 1.f },
99+
{ -1.0f, 1.0f, 1.0f , 0.f, 1.f, 0.f, 0.f, 1.f},
100+
101+
{ -1.0f, -1.0f, -1.0f , 0.f, -1.f, 0.f, 0.f, 0.f },
102+
{ 1.0f, -1.0f, -1.0f , 0.f, -1.f, 0.f, 1.f, 0.f },
103+
{ 1.0f, -1.0f, 1.0f , 0.f, -1.f, 0.f, 1.f, 1.f },
104+
{ -1.0f, -1.0f, 1.0f , 0.f, -1.f, 0.f, 0.f, 1.f },
105+
106+
{ -1.0f, -1.0f, 1.0f , -1.f, 0.f, 0.f, 0.f, 0.f },
107+
{ -1.0f, -1.0f, -1.0f , -1.f, 0.f, 0.f, 1.f, 0.f },
108+
{ -1.0f, 1.0f, -1.0f , -1.f, 0.f, 0.f, 1.f, 1.f },
109+
{ -1.0f, 1.0f, 1.0f , -1.f, 0.f, 0.f, 0.f, 1.f },
110+
111+
{ 1.0f, -1.0f, 1.0f , 1.f, 0.f, 0.f, 0.f, 0.f },
112+
{ 1.0f, -1.0f, -1.0f , 1.f, 0.f, 0.f, 1.f, 0.f },
113+
{ 1.0f, 1.0f, -1.0f , 1.f, 0.f, 0.f, 1.f, 1.f },
114+
{ 1.0f, 1.0f, 1.0f , 1.f, 0.f, 0.f, 0.f, 1.f },
115+
116+
{ -1.0f, -1.0f, -1.0f , 0.f, 0.f, -1.f , 0.f, 0.f },
117+
{ 1.0f, -1.0f, -1.0f , 0.f, 0.f, -1.f , 1.f, 0.f },
118+
{ 1.0f, 1.0f, -1.0f , 0.f, 0.f, -1.f, 1.f, 1.f },
119+
{ -1.0f, 1.0f, -1.0f , 0.f, 0.f, -1.f, 0.f, 1.f },
120+
121+
{ -1.0f, -1.0f, 1.0f , 0.f, 0.f, 1.f, 0.f, 0.f },
122+
{ 1.0f, -1.0f, 1.0f , 0.f, 0.f, 1.f, 1.f, 0.f },
123+
{ 1.0f, 1.0f, 1.0f , 0.f, 0.f, 1.f, 1.f, 1.f },
124+
{ -1.0f, 1.0f, 1.0f , 0.f, 0.f, 1.f, 0.f, 1.f },
125+
120126

121127
// vertices at camera exposure = 1.0 : slightly deform the Cube
122-
{ -1.0f+shiftX, 1.0f, -1.0f, 0.f, 1.f, 0.f, 0.f, 0.f },
123-
{ 1.0f+shiftX, 1.0f+shiftY, -1.0f, 0.f, 1.f, 0.f, 0.f, 0.f },
124-
{ 1.0f+shiftX, 1.0f+shiftY, 1.0f , 0.f, 1.f, 0.f, 0.f, 0.f },
125-
{ -1.0f+shiftX, 1.0f, 1.0f , 0.f, 1.f, 0.f, 0.f, 0.f},
126-
{ -1.0f, -1.0f, -1.0f , 0.f, -1.f, 0.f, 0.f, 0.f },
127-
{ 1.0f, -1.0f, -1.0f , 0.f, -1.f, 0.f, 0.f, 0.f },
128-
{ 1.0f, -1.0f, 1.0f , 0.f, -1.f, 0.f, 0.f, 0.f },
129-
{ -1.0f, -1.0f, 1.0f , 0.f, -1.f, 0.f, 0.f, 0.f },
130-
{ -1.0f, -1.0f, 1.0f , -1.f, 0.f, 0.f, 0.f, 0.f },
131-
{ -1.0f, -1.0f, -1.0f , -1.f, 0.f, 0.f, 0.f, 0.f },
132-
{ -1.0f+shiftX, 1.0f, -1.0f , -1.f, 0.f, 0.f, 0.f, 0.f },
133-
{ -1.0f+shiftX, 1.0f, 1.0f , -1.f, 0.f, 0.f, 0.f, 0.f },
134-
{ 1.0f, -1.0f, 1.0f , 1.f, 0.f, 0.f, 0.f, 0.f },
135-
{ 1.0f, -1.0f, -1.0f , 1.f, 0.f, 0.f, 0.f, 0.f },
136-
{ 1.0f+shiftX, 1.0f+shiftY, -1.0f , 1.f, 0.f, 0.f, 0.f, 0.f },
137-
{ 1.0f+shiftX, 1.0f+shiftY, 1.0f , 1.f, 0.f, 0.f, 0.f, 0.f },
138-
{ -1.0f, -1.0f, -1.0f , 0.f, 0.f, -1.f , 0.f, 0.f },
139-
{ 1.0f, -1.0f, -1.0f , 0.f, 0.f, -1.f , 0.f, 0.f },
140-
{ 1.0f+shiftX, 1.0f+shiftY, -1.0f , 0.f, 0.f, -1.f, 0.f, 0.f },
141-
{ -1.0f+shiftX, 1.0f, -1.0f , 0.f, 0.f, -1.f, 0.f, 0.f },
142-
{ -1.0f, -1.0f, 1.0f , 0.f, 0.f, 1.f, 0.f, 0.f },
143-
{ 1.0f, -1.0f, 1.0f , 0.f, 0.f, 1.f, 0.f, 0.f },
144-
{ 1.0f+shiftX, 1.0f+shiftY, 1.0f , 0.f, 0.f, 1.f, 0.f, 0.f },
145-
{ -1.0f+shiftX, 1.0f, 1.0f , 0.f, 0.f, 1.f, 0.f, 0.f },
128+
{ -1.0f+shiftX, 1.0f, -1.0f, 0.f, 1.f, 0.f, 0.f, 0.f },
129+
{ 1.0f+shiftX, 1.0f+shiftY, -1.0f, 0.f, 1.f, 0.f, 1.f, 0.f },
130+
{ 1.0f+shiftX, 1.0f+shiftY, 1.0f , 0.f, 1.f, 0.f, 1.f, 1.f },
131+
{ -1.0f+shiftX, 1.0f, 1.0f , 0.f, 1.f, 0.f, 0.f, 1.f},
132+
133+
{ -1.0f, -1.0f, -1.0f , 0.f, -1.f, 0.f, 0.f, 0.f },
134+
{ 1.0f, -1.0f, -1.0f , 0.f, -1.f, 0.f, 1.f, 0.f },
135+
{ 1.0f, -1.0f, 1.0f , 0.f, -1.f, 0.f, 1.f, 1.f },
136+
{ -1.0f, -1.0f, 1.0f , 0.f, -1.f, 0.f, 0.f, 1.f },
137+
138+
{ -1.0f, -1.0f, 1.0f , -1.f, 0.f, 0.f, 0.f, 0.f },
139+
{ -1.0f, -1.0f, -1.0f , -1.f, 0.f, 0.f, 1.f, 0.f },
140+
{ -1.0f+shiftX, 1.0f, -1.0f , -1.f, 0.f, 0.f, 1.f, 1.f },
141+
{ -1.0f+shiftX, 1.0f, 1.0f , -1.f, 0.f, 0.f, 0.f, 1.f },
142+
143+
{ 1.0f, -1.0f, 1.0f , 1.f, 0.f, 0.f, 0.f, 0.f },
144+
{ 1.0f, -1.0f, -1.0f , 1.f, 0.f, 0.f, 1.f, 0.f },
145+
{ 1.0f+shiftX, 1.0f+shiftY, -1.0f , 1.f, 0.f, 0.f, 1.f, 1.f },
146+
{ 1.0f+shiftX, 1.0f+shiftY, 1.0f , 1.f, 0.f, 0.f, 0.f, 1.f },
147+
148+
{ -1.0f, -1.0f, -1.0f , 0.f, 0.f, -1.f , 0.f, 0.f },
149+
{ 1.0f, -1.0f, -1.0f , 0.f, 0.f, -1.f , 1.f, 0.f },
150+
{ 1.0f+shiftX, 1.0f+shiftY, -1.0f , 0.f, 0.f, -1.f, 1.f, 1.f },
151+
{ -1.0f+shiftX, 1.0f, -1.0f , 0.f, 0.f, -1.f, 0.f, 1.f },
152+
153+
{ -1.0f, -1.0f, 1.0f , 0.f, 0.f, 1.f, 0.f, 0.f },
154+
{ 1.0f, -1.0f, 1.0f , 0.f, 0.f, 1.f, 1.f, 0.f },
155+
{ 1.0f+shiftX, 1.0f+shiftY, 1.0f , 0.f, 0.f, 1.f, 1.f, 1.f },
156+
{ -1.0f+shiftX, 1.0f, 1.0f , 0.f, 0.f, 1.f, 0.f, 1.f },
146157

147158
};
148159

@@ -217,26 +228,77 @@ int main()
217228
CHECK(rprLightSetTransform(light, RPR_TRUE, &lightm.m00));
218229

219230
// Set light radiant power in Watts
220-
CHECK(rprPointLightSetRadiantPower3f(light, 100, 100, 100));
231+
CHECK(rprPointLightSetRadiantPower3f(light, 200, 200, 200));
221232

222233
// Attach the light to the scene
223234
CHECK(rprSceneAttachLight(scene, light));
224235
}
225236

237+
// apply material on cube
238+
rpr_material_node diffuseA = nullptr;
239+
rpr_material_node diffuseB = nullptr;
240+
rpr_material_node uv_node = nullptr;
241+
rpr_material_node uv_scaled_node = nullptr;
242+
rpr_material_node checker = nullptr;
243+
rpr_material_node layered = nullptr;
244+
{
245+
CHECK( rprMaterialSystemCreateNode(matsys, RPR_MATERIAL_NODE_DIFFUSE, &diffuseA));
246+
CHECK( rprMaterialNodeSetInputFByKey(diffuseA, RPR_MATERIAL_INPUT_COLOR, 0.0f, 0.5f, 1.0f, 0.0f)); // Diffuse color
247+
248+
CHECK( rprMaterialSystemCreateNode(matsys, RPR_MATERIAL_NODE_DIFFUSE, &diffuseB));
249+
CHECK( rprMaterialNodeSetInputFByKey(diffuseB, RPR_MATERIAL_INPUT_COLOR, 0.5f, 0.20f, 1.0f, 0.0f)); // Diffuse color
250+
251+
CHECK( rprMaterialSystemCreateNode(matsys, RPR_MATERIAL_NODE_INPUT_LOOKUP, &uv_node));
252+
CHECK( rprMaterialNodeSetInputUByKey(uv_node, RPR_MATERIAL_INPUT_VALUE, RPR_MATERIAL_NODE_LOOKUP_UV));
253+
254+
CHECK( rprMaterialSystemCreateNode(matsys, RPR_MATERIAL_NODE_ARITHMETIC, &uv_scaled_node));
255+
CHECK( rprMaterialNodeSetInputUByKey(uv_scaled_node, RPR_MATERIAL_INPUT_OP, RPR_MATERIAL_NODE_OP_MUL));
256+
CHECK( rprMaterialNodeSetInputNByKey(uv_scaled_node, RPR_MATERIAL_INPUT_COLOR0, uv_node));
257+
CHECK( rprMaterialNodeSetInputFByKey(uv_scaled_node, RPR_MATERIAL_INPUT_COLOR1, 0.7f, 0.7f, 0.0f, 0));
258+
259+
CHECK( rprMaterialSystemCreateNode(matsys, RPR_MATERIAL_NODE_CHECKER_TEXTURE, &checker));
260+
CHECK( rprMaterialNodeSetInputNByKey(checker, RPR_MATERIAL_INPUT_UV , uv_scaled_node));
261+
262+
// Create layered material
263+
CHECK( rprMaterialSystemCreateNode(matsys, RPR_MATERIAL_NODE_BLEND, &layered));
264+
CHECK( rprMaterialNodeSetInputNByKey(layered, RPR_MATERIAL_INPUT_COLOR0, diffuseA)); // Set material for base layer
265+
CHECK( rprMaterialNodeSetInputNByKey(layered, RPR_MATERIAL_INPUT_COLOR1, diffuseB)); // Set material for top layer
266+
CHECK( rprMaterialNodeSetInputNByKey(layered, RPR_MATERIAL_INPUT_WEIGHT, checker));
267+
268+
CHECK( rprShapeSetMaterial(cube,layered));
269+
}
270+
271+
// apply material on floor
272+
rpr_material_node diffuseC = nullptr;
273+
{
274+
CHECK( rprMaterialSystemCreateNode(matsys, RPR_MATERIAL_NODE_DIFFUSE, &diffuseC));
275+
CHECK( rprMaterialNodeSetInputFByKey(diffuseC, RPR_MATERIAL_INPUT_COLOR, 1.0f, 0.2f, 0.0f, 0.0f)); // Diffuse color
276+
277+
CHECK( rprShapeSetMaterial(plane,diffuseC));
278+
}
279+
226280
// set exposure, for motion blur
227281
CHECK(rprCameraSetExposure(camera,1.0));
228282

229283
// Progressively render an image
284+
CHECK( rprContextSetParameterByKey1f(context, RPR_CONTEXT_DISPLAY_GAMMA , 2.2f ) ); // set display gamma
230285
CHECK(rprContextSetParameterByKey1u(context,RPR_CONTEXT_ITERATIONS,NUM_ITERATIONS));
231286
CHECK( rprContextRender(context) );
232-
CHECK(rprContextResolveFrameBuffer(context,frame_buffer,frame_buffer_resolved,true));
287+
CHECK(rprContextResolveFrameBuffer(context,frame_buffer,frame_buffer_resolved,false));
233288

234289
std::cout << "Rendering finished.\n";
235290

236291
// Save the result to file
237292
CHECK( rprFrameBufferSaveToFile(frame_buffer_resolved, "13.png") );
238293

239294
// Release the stuff we created
295+
CHECK(rprObjectDelete(diffuseA));diffuseA=nullptr;
296+
CHECK(rprObjectDelete(diffuseB));diffuseB=nullptr;
297+
CHECK(rprObjectDelete(uv_node));uv_node=nullptr;
298+
CHECK(rprObjectDelete(uv_scaled_node));uv_scaled_node=nullptr;
299+
CHECK(rprObjectDelete(checker));checker=nullptr;
300+
CHECK(rprObjectDelete(layered));layered=nullptr;
301+
CHECK(rprObjectDelete(diffuseC));diffuseC=nullptr;
240302
CHECK(rprObjectDelete(matsys));matsys=nullptr;
241303
CHECK(rprObjectDelete(plane));plane=nullptr;
242304
CHECK(rprObjectDelete(cube));cube=nullptr;

0 commit comments

Comments
 (0)