This repository has been archived on 2023-10-09. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
blender-archive/tests/gtests/alembic/abc_export_test.cc
Dalai Felinto 3abe8b3292 Rename any instance of scene layer or render layer in code with view layer
The RenderResult struct still has a listbase of RenderLayer, but that's ok
since this is strictly for rendering.

* Subversion bump (to 2.80.2)
* DNA low level doversion (renames) - only for .blend created since 2.80 started

Note: We can't use DNA_struct_elem_find or get file version in init_structDNA,
so we are manually iterating over the array of the SDNA elements instead.

Note 2: This doversion change with renames can be reverted in a few months. But
so far it's required for 2.8 files created between October 2016 and now.

Reviewers: campbellbarton, sergey

Differential Revision: https://developer.blender.org/D2927
2017-11-23 07:48:23 -02:00

153 lines
4.2 KiB
C++

#include "testing/testing.h"
// Keep first since utildefines defines AT which conflicts with fucking STL
#include "intern/abc_util.h"
#include "intern/abc_exporter.h"
extern "C" {
#include "BLI_utildefines.h"
#include "BKE_library.h"
#include "BLI_math.h"
#include "DNA_scene_types.h"
}
#include "DEG_depsgraph.h"
class TestableAbcExporter : public AbcExporter {
public:
TestableAbcExporter(Main *bmain, EvaluationContext *eval_ctx,
Scene *scene, ViewLayer *view_layer, Depsgraph *depsgraph,
const char *filename, ExportSettings &settings)
: AbcExporter(bmain, eval_ctx, scene, view_layer, depsgraph, filename, settings)
{
}
void getShutterSamples(unsigned int nr_of_samples,
bool time_relative,
std::vector<double> &samples)
{
AbcExporter::getShutterSamples(nr_of_samples, time_relative, samples);
}
void getFrameSet(unsigned int nr_of_samples,
std::set<double> &frames) {
AbcExporter::getFrameSet(nr_of_samples, frames);
}
};
class AlembicExportTest : public testing::Test
{
protected:
ExportSettings settings;
Scene scene;
EvaluationContext eval_ctx;
Depsgraph *depsgraph;
TestableAbcExporter *exporter;
Main *bmain;
virtual void SetUp()
{
settings.frame_start = 31.0;
settings.frame_end = 223.0;
/* Fake a 25 FPS scene with a nonzero base (because that's sometimes forgotten) */
scene.r.frs_sec = 50;
scene.r.frs_sec_base = 2;
bmain = BKE_main_new();
/* TODO(sergey): Pass scene layer somehow? */
DEG_evaluation_context_init(&eval_ctx, DAG_EVAL_VIEWPORT);
depsgraph = DEG_graph_new();
exporter = NULL;
}
virtual void TearDown()
{
BKE_main_free(bmain);
DEG_graph_free(depsgraph);
delete exporter;
}
// Call after setting up the settings.
void createExporter()
{
ViewLayer *view_layer = (ViewLayer *)scene.view_layers.first;
exporter = new TestableAbcExporter(bmain, &eval_ctx, &scene, view_layer, depsgraph, "somefile.abc", settings);
}
};
TEST_F(AlembicExportTest, TimeSamplesFullShutter) {
settings.shutter_open = 0.0;
settings.shutter_close = 1.0;
createExporter();
std::vector<double> samples;
/* test 5 samples per frame */
exporter->getShutterSamples(5, true, samples);
EXPECT_EQ(5, samples.size());
EXPECT_NEAR(1.240, samples[0], 1e-5f);
EXPECT_NEAR(1.248, samples[1], 1e-5f);
EXPECT_NEAR(1.256, samples[2], 1e-5f);
EXPECT_NEAR(1.264, samples[3], 1e-5f);
EXPECT_NEAR(1.272, samples[4], 1e-5f);
/* test same, but using frame number offset instead of time */
exporter->getShutterSamples(5, false, samples);
EXPECT_EQ(5, samples.size());
EXPECT_NEAR(0.0, samples[0], 1e-5f);
EXPECT_NEAR(0.2, samples[1], 1e-5f);
EXPECT_NEAR(0.4, samples[2], 1e-5f);
EXPECT_NEAR(0.6, samples[3], 1e-5f);
EXPECT_NEAR(0.8, samples[4], 1e-5f);
/* use the same setup to test getFrameSet() */
std::set<double> frames;
exporter->getFrameSet(5, frames);
EXPECT_EQ(965, frames.size());
EXPECT_EQ(1, frames.count(31.0));
EXPECT_EQ(1, frames.count(31.2));
EXPECT_EQ(1, frames.count(31.4));
EXPECT_EQ(1, frames.count(31.6));
EXPECT_EQ(1, frames.count(31.8));
}
TEST_F(AlembicExportTest, TimeSamples180degShutter) {
settings.shutter_open = -0.25;
settings.shutter_close = 0.25;
createExporter();
std::vector<double> samples;
/* test 5 samples per frame */
exporter->getShutterSamples(5, true, samples);
EXPECT_EQ(5, samples.size());
EXPECT_NEAR(1.230, samples[0], 1e-5f);
EXPECT_NEAR(1.234, samples[1], 1e-5f);
EXPECT_NEAR(1.238, samples[2], 1e-5f);
EXPECT_NEAR(1.242, samples[3], 1e-5f);
EXPECT_NEAR(1.246, samples[4], 1e-5f);
/* test same, but using frame number offset instead of time */
exporter->getShutterSamples(5, false, samples);
EXPECT_EQ(5, samples.size());
EXPECT_NEAR(-0.25, samples[0], 1e-5f);
EXPECT_NEAR(-0.15, samples[1], 1e-5f);
EXPECT_NEAR(-0.05, samples[2], 1e-5f);
EXPECT_NEAR( 0.05, samples[3], 1e-5f);
EXPECT_NEAR( 0.15, samples[4], 1e-5f);
/* Use the same setup to test getFrameSet().
* Here only a few numbers are tested, due to rounding issues. */
std::set<double> frames;
exporter->getFrameSet(5, frames);
EXPECT_EQ(965, frames.size());
EXPECT_EQ(1, frames.count(30.75));
EXPECT_EQ(1, frames.count(30.95));
EXPECT_EQ(1, frames.count(31.15));
}