Merge commit 'origin/master^' into blender2.8
This commit is contained in:
commit
11130970c6
@ -58,7 +58,6 @@ include(cmake/openexr.cmake)
|
||||
include(cmake/freetype.cmake)
|
||||
include(cmake/freeglut.cmake)
|
||||
include(cmake/glew.cmake)
|
||||
include(cmake/hdf5.cmake)
|
||||
include(cmake/alembic.cmake)
|
||||
include(cmake/glfw.cmake)
|
||||
include(cmake/clew.cmake)
|
||||
|
@ -102,8 +102,6 @@ if(BUILD_MODE STREQUAL Release)
|
||||
${CMAKE_COMMAND} -E copy_directory ${LIBDIR}/python/ ${HARVEST_TARGET}/python/ &&
|
||||
# alembic
|
||||
${CMAKE_COMMAND} -E copy_directory ${LIBDIR}/alembic ${HARVEST_TARGET}/alembic &&
|
||||
# hdf5
|
||||
${CMAKE_COMMAND} -E copy_directory ${LIBDIR}/hdf5 ${HARVEST_TARGET}/hdf5 &&
|
||||
# BlendThumb
|
||||
${CMAKE_COMMAND} -E copy ${LIBDIR}/BlendThumb64/bin/blendthumb.dll ${HARVEST_TARGET}/ThumbHandler/lib/BlendThumb64.dll &&
|
||||
${CMAKE_COMMAND} -E copy ${LIBDIR}/BlendThumb32/bin/blendthumb.dll ${HARVEST_TARGET}/ThumbHandler/lib/BlendThumb.dll &&
|
||||
|
@ -36,20 +36,42 @@ CCL_NAMESPACE_BEGIN
|
||||
|
||||
/* Returns the square of the roughness of the closure if it has roughness,
|
||||
* 0 for singular closures and 1 otherwise. */
|
||||
ccl_device_inline float bsdf_get_roughness_squared(const ShaderClosure *sc)
|
||||
ccl_device_inline float bsdf_get_specular_roughness_squared(const ShaderClosure *sc)
|
||||
{
|
||||
if(CLOSURE_IS_BSDF_SINGULAR(sc->type)) {
|
||||
return 0.0f;
|
||||
}
|
||||
|
||||
if(CLOSURE_IS_BSDF_MICROFACET(sc->type)) {
|
||||
MicrofacetBsdf *bsdf = (MicrofacetBsdf*) sc;
|
||||
MicrofacetBsdf *bsdf = (MicrofacetBsdf*)sc;
|
||||
return bsdf->alpha_x*bsdf->alpha_y;
|
||||
}
|
||||
|
||||
return 1.0f;
|
||||
}
|
||||
|
||||
ccl_device_inline float bsdf_get_roughness_squared(const ShaderClosure *sc)
|
||||
{
|
||||
/* This version includes diffuse, mainly for baking Principled BSDF
|
||||
* where specular and metallic zero otherwise does not bake the
|
||||
* specified roughness parameter. */
|
||||
if(sc->type == CLOSURE_BSDF_OREN_NAYAR_ID) {
|
||||
OrenNayarBsdf *bsdf = (OrenNayarBsdf*)sc;
|
||||
return sqr(sqr(bsdf->roughness));
|
||||
}
|
||||
|
||||
if(sc->type == CLOSURE_BSDF_PRINCIPLED_DIFFUSE_ID) {
|
||||
PrincipledDiffuseBsdf *bsdf = (PrincipledDiffuseBsdf*)sc;
|
||||
return sqr(sqr(bsdf->roughness));
|
||||
}
|
||||
|
||||
if(CLOSURE_IS_BSDF_DIFFUSE(sc->type)) {
|
||||
return 0.0f;
|
||||
}
|
||||
|
||||
return bsdf_get_specular_roughness_squared(sc);
|
||||
}
|
||||
|
||||
ccl_device_forceinline int bsdf_sample(KernelGlobals *kg,
|
||||
ShaderData *sd,
|
||||
const ShaderClosure *sc,
|
||||
@ -176,7 +198,7 @@ ccl_device_forceinline int bsdf_sample(KernelGlobals *kg,
|
||||
float threshold_squared = kernel_data.background.transparent_roughness_squared_threshold;
|
||||
|
||||
if(threshold_squared >= 0.0f) {
|
||||
if(bsdf_get_roughness_squared(sc) <= threshold_squared) {
|
||||
if(bsdf_get_specular_roughness_squared(sc) <= threshold_squared) {
|
||||
label |= LABEL_TRANSMIT_TRANSPARENT;
|
||||
}
|
||||
}
|
||||
|
@ -140,7 +140,7 @@ ccl_device_inline void kernel_update_denoising_features(KernelGlobals *kg,
|
||||
/* All closures contribute to the normal feature, but only diffuse-like ones to the albedo. */
|
||||
normal += sc->N * sc->sample_weight;
|
||||
sum_weight += sc->sample_weight;
|
||||
if(bsdf_get_roughness_squared(sc) > sqr(0.075f)) {
|
||||
if(bsdf_get_specular_roughness_squared(sc) > sqr(0.075f)) {
|
||||
albedo += sc->weight;
|
||||
sum_nonspecular_weight += sc->sample_weight;
|
||||
}
|
||||
|
@ -164,6 +164,7 @@ ccl_device_inline void path_state_next(KernelGlobals *kg, ccl_addr_space PathSta
|
||||
#endif
|
||||
}
|
||||
|
||||
#ifdef __VOLUME__
|
||||
ccl_device_inline bool path_state_volume_next(KernelGlobals *kg, ccl_addr_space PathState *state)
|
||||
{
|
||||
/* For volume bounding meshes we pass through without counting transparent
|
||||
@ -180,6 +181,7 @@ ccl_device_inline bool path_state_volume_next(KernelGlobals *kg, ccl_addr_space
|
||||
|
||||
return true;
|
||||
}
|
||||
#endif
|
||||
|
||||
ccl_device_inline uint path_state_ray_visibility(KernelGlobals *kg, ccl_addr_space PathState *state)
|
||||
{
|
||||
|
@ -119,7 +119,7 @@ __forceinline const sseb unpacklo( const sseb& a, const sseb& b ) { return _mm_u
|
||||
__forceinline const sseb unpackhi( const sseb& a, const sseb& b ) { return _mm_unpackhi_ps(a, b); }
|
||||
|
||||
template<size_t i0, size_t i1, size_t i2, size_t i3> __forceinline const sseb shuffle( const sseb& a ) {
|
||||
return _mm_shuffle_epi32(a, _MM_SHUFFLE(i3, i2, i1, i0));
|
||||
return _mm_castsi128_ps(_mm_shuffle_epi32(a, _MM_SHUFFLE(i3, i2, i1, i0)));
|
||||
}
|
||||
|
||||
template<> __forceinline const sseb shuffle<0, 1, 0, 1>( const sseb& a ) {
|
||||
|
@ -26,7 +26,11 @@ thread::thread(function<void(void)> run_cb, int group)
|
||||
joined_(false),
|
||||
group_(group)
|
||||
{
|
||||
#if (__cplusplus > 199711L) || (defined(_MSC_VER) && _MSC_VER >= 1800)
|
||||
thread_ = std::thread(&thread::run, this);
|
||||
#else
|
||||
pthread_create(&pthread_id_, NULL, run, (void*)this);
|
||||
#endif
|
||||
}
|
||||
|
||||
thread::~thread()
|
||||
@ -60,7 +64,17 @@ void *thread::run(void *arg)
|
||||
bool thread::join()
|
||||
{
|
||||
joined_ = true;
|
||||
#if (__cplusplus > 199711L) || (defined(_MSC_VER) && _MSC_VER >= 1800)
|
||||
try {
|
||||
thread_.join();
|
||||
return true;
|
||||
}
|
||||
catch (const std::system_error&) {
|
||||
return false;
|
||||
}
|
||||
#else
|
||||
return pthread_join(pthread_id_, NULL) == 0;
|
||||
#endif
|
||||
}
|
||||
|
||||
CCL_NAMESPACE_END
|
||||
|
@ -24,10 +24,16 @@
|
||||
# include <functional>
|
||||
#else
|
||||
# include <boost/thread.hpp>
|
||||
# include <pthread.h>
|
||||
#endif
|
||||
#include <pthread.h>
|
||||
#include <queue>
|
||||
|
||||
#ifdef _WIN32
|
||||
# include "util_windows.h"
|
||||
#else
|
||||
# include <pthread.h>
|
||||
#endif
|
||||
|
||||
#ifdef __APPLE__
|
||||
# include <libkern/OSAtomic.h>
|
||||
#endif
|
||||
@ -60,7 +66,11 @@ public:
|
||||
|
||||
protected:
|
||||
function<void(void)> run_cb_;
|
||||
#if (__cplusplus > 199711L) || (defined(_MSC_VER) && _MSC_VER >= 1800)
|
||||
std::thread thread_;
|
||||
#else
|
||||
pthread_t pthread_id_;
|
||||
#endif
|
||||
bool joined_;
|
||||
int group_;
|
||||
};
|
||||
@ -81,7 +91,24 @@ public:
|
||||
inline void unlock() {
|
||||
OSSpinLockUnlock(&spin_);
|
||||
}
|
||||
#else /* __APPLE__ */
|
||||
#elif defined(_WIN32)
|
||||
inline thread_spin_lock() {
|
||||
const DWORD SPIN_COUNT = 50000;
|
||||
InitializeCriticalSectionAndSpinCount(&cs_, SPIN_COUNT);
|
||||
}
|
||||
|
||||
inline ~thread_spin_lock() {
|
||||
DeleteCriticalSection(&cs_);
|
||||
}
|
||||
|
||||
inline void lock() {
|
||||
EnterCriticalSection(&cs_);
|
||||
}
|
||||
|
||||
inline void unlock() {
|
||||
LeaveCriticalSection(&cs_);
|
||||
}
|
||||
#else
|
||||
inline thread_spin_lock() {
|
||||
pthread_spin_init(&spin_, 0);
|
||||
}
|
||||
@ -97,10 +124,12 @@ public:
|
||||
inline void unlock() {
|
||||
pthread_spin_unlock(&spin_);
|
||||
}
|
||||
#endif /* __APPLE__ */
|
||||
#endif
|
||||
protected:
|
||||
#ifdef __APPLE__
|
||||
OSSpinLock spin_;
|
||||
#elif defined(_WIN32)
|
||||
CRITICAL_SECTION cs_;
|
||||
#else
|
||||
pthread_spinlock_t spin_;
|
||||
#endif
|
||||
|
@ -280,6 +280,11 @@ public:
|
||||
*/
|
||||
GHOST_TSuccess handleKeyEvent(void *eventPtr);
|
||||
|
||||
/**
|
||||
* Informs if the system provides native dialogs (eg. confirm quit)
|
||||
*/
|
||||
virtual bool supportsNativeDialogs(void);
|
||||
|
||||
protected:
|
||||
/**
|
||||
* Initializes the system.
|
||||
|
@ -1710,3 +1710,9 @@ void GHOST_SystemCocoa::putClipboard(GHOST_TInt8 *buffer, bool selection) const
|
||||
|
||||
[pool drain];
|
||||
}
|
||||
|
||||
bool
|
||||
GHOST_SystemCocoa::supportsNativeDialogs(void)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
@ -636,9 +636,9 @@ GHOST_SystemSDL::addDirtyWindow(GHOST_WindowSDL *bad_wind)
|
||||
}
|
||||
|
||||
bool
|
||||
GHOST_SystemSDL::supportsNativeDialogs(void)
|
||||
GHOST_SystemSDL::supportsNativeDialogs(void)
|
||||
{
|
||||
return false
|
||||
return false;
|
||||
}
|
||||
|
||||
GHOST_TSuccess GHOST_SystemSDL::getButtons(GHOST_Buttons& buttons) const
|
||||
|
@ -223,10 +223,10 @@ public:
|
||||
*/
|
||||
static GHOST_TSuccess pushDragDropEvent(GHOST_TEventType eventType, GHOST_TDragnDropTypes draggedObjectType, GHOST_WindowWin32 *window, int mouseX, int mouseY, void *data);
|
||||
|
||||
/**
|
||||
* Confirms quitting he program when there is just one window left open
|
||||
* in the application
|
||||
*/
|
||||
/**
|
||||
* Confirms quitting he program when there is just one window left open
|
||||
* in the application
|
||||
*/
|
||||
int confirmQuit(GHOST_IWindow *window) const;
|
||||
|
||||
protected:
|
||||
|
@ -38,6 +38,7 @@ set(SRC
|
||||
if(WITH_OPENVDB)
|
||||
add_definitions(
|
||||
-DWITH_OPENVDB
|
||||
-DOPENVDB_3_ABI_COMPATIBLE
|
||||
)
|
||||
|
||||
list(APPEND INC_SYS
|
||||
|
@ -45,7 +45,7 @@ void OpenVDBWriter::insert(const openvdb::GridBase::Ptr &grid)
|
||||
|
||||
void OpenVDBWriter::insert(const openvdb::GridBase &grid)
|
||||
{
|
||||
#if (OPENVDB_LIBRARY_MAJOR_VERSION_NUMBER == 3)
|
||||
#if (OPENVDB_LIBRARY_MAJOR_VERSION_NUMBER >= 3)
|
||||
m_grids->push_back(grid.copyGrid());
|
||||
#else
|
||||
m_grids->push_back(grid.copyGridWithNewTree());
|
||||
|
@ -74,10 +74,18 @@ bool _bli_array_iter_span(
|
||||
bool use_wrap, bool use_delimit_bounds,
|
||||
bool (*test_fn)(const void *arr_item, void *user_data), void *user_data,
|
||||
unsigned int span_step[2], unsigned int *r_span_len);
|
||||
#define BLI_array_iter_span(arr, arr_len, use_wrap, use_delimit_bounds, test_fn, user_data, \
|
||||
span_step, r_span_len) \
|
||||
#define BLI_array_iter_span( \
|
||||
arr, arr_len, use_wrap, use_delimit_bounds, test_fn, user_data, \
|
||||
span_step, r_span_len) \
|
||||
_bli_array_iter_span( \
|
||||
arr, arr_len, sizeof(*(arr)), use_wrap, use_delimit_bounds, test_fn, user_data, \
|
||||
span_step, r_span_len)
|
||||
|
||||
bool _bli_array_is_zeroed(
|
||||
const void *arr,
|
||||
unsigned int arr_len, size_t arr_stride);
|
||||
#define BLI_array_is_zeroed(arr, arr_len) \
|
||||
_bli_array_is_zeroed( \
|
||||
arr, arr_len, sizeof(*(arr)))
|
||||
|
||||
#endif /* __BLI_ARRAY_UTILS_H__ */
|
||||
|
@ -308,3 +308,20 @@ bool _bli_array_iter_span(
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Simple utility to check memory is zeroed.
|
||||
*/
|
||||
bool _bli_array_is_zeroed(
|
||||
const void *arr_v,
|
||||
unsigned int arr_len, size_t arr_stride)
|
||||
{
|
||||
const char *arr_step = (const char *)arr_v;
|
||||
size_t i = arr_stride * arr_len;
|
||||
while (i--) {
|
||||
if (*(arr_step++)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
@ -109,7 +109,7 @@ void AnimationImporter::animation_to_fcurves(COLLADAFW::AnimationCurve *curve)
|
||||
fcu->flag = (FCURVE_VISIBLE | FCURVE_AUTO_HANDLES | FCURVE_SELECTED);
|
||||
// fcu->rna_path = BLI_strdupn(path, strlen(path));
|
||||
fcu->array_index = 0;
|
||||
fcu->totvert = curve->getKeyCount();
|
||||
//fcu->totvert = curve->getKeyCount();
|
||||
|
||||
// create beztriple for each key
|
||||
for (unsigned int j = 0; j < curve->getKeyCount(); j++) {
|
||||
@ -669,6 +669,13 @@ void AnimationImporter:: Assign_float_animations(const COLLADAFW::UniqueId& list
|
||||
|
||||
}
|
||||
|
||||
float AnimationImporter::convert_to_focal_length(float in_xfov, int fov_type, float aspect, float sensorx)
|
||||
{
|
||||
// NOTE: Needs more testing (As we curretnly have no official test data for this)
|
||||
float xfov = (fov_type == CAMERA_YFOV) ? (2.0f * atanf(aspect * tanf(DEG2RADF(in_xfov) * 0.5f))) : DEG2RADF(in_xfov);
|
||||
return fov_to_focallength(xfov, sensorx);
|
||||
}
|
||||
|
||||
/*
|
||||
* Lens animations must be stored in COLLADA by using FOV,
|
||||
* while blender internally uses focal length.
|
||||
@ -698,13 +705,9 @@ void AnimationImporter::Assign_lens_animations(const COLLADAFW::UniqueId& listid
|
||||
FCurve *fcu = *iter;
|
||||
|
||||
for (unsigned int i = 0; i < fcu->totvert; i++) {
|
||||
|
||||
double input_fov = fcu->bezt[i].vec[1][1];
|
||||
|
||||
// NOTE: Needs more testing (As we curretnly have no official test data for this)
|
||||
double xfov = (fov_type == CAMERA_YFOV) ? (2.0f * atanf(aspect * tanf(DEG2RADF(input_fov) * 0.5f))) : DEG2RADF(input_fov);
|
||||
|
||||
fcu->bezt[i].vec[1][1] = fov_to_focallength(xfov, cam->sensor_x);
|
||||
fcu->bezt[i].vec[0][1] = convert_to_focal_length(fcu->bezt[i].vec[0][1], fov_type, aspect, cam->sensor_x);
|
||||
fcu->bezt[i].vec[1][1] = convert_to_focal_length(fcu->bezt[i].vec[1][1], fov_type, aspect, cam->sensor_x);
|
||||
fcu->bezt[i].vec[2][1] = convert_to_focal_length(fcu->bezt[i].vec[2][1], fov_type, aspect, cam->sensor_x);
|
||||
}
|
||||
|
||||
BLI_addtail(AnimCurves, fcu);
|
||||
|
@ -202,6 +202,8 @@ public:
|
||||
// gives a world-space mat, end's mat not included
|
||||
bool calc_joint_parent_mat_rest(float mat[4][4], float par[4][4], COLLADAFW::Node *node, COLLADAFW::Node *end);
|
||||
|
||||
float convert_to_focal_length(float in_xfov, int fov_type, float aspect, float sensorx);
|
||||
|
||||
#ifdef ARMATURE_TEST
|
||||
Object *get_joint_object(COLLADAFW::Node *root, COLLADAFW::Node *node, Object *par_job);
|
||||
#endif
|
||||
|
@ -366,7 +366,7 @@ void RNA_api_scene(StructRNA *srna)
|
||||
RNA_def_float(func, "shutter_close", 1.0f, -1.0f, 1.0f, "Shutter close", "", -1.0f, 1.0f);
|
||||
RNA_def_boolean(func, "selected_only" , 0, "Selected only", "Export only selected objects");
|
||||
RNA_def_boolean(func, "uvs" , 1, "UVs", "Export UVs");
|
||||
RNA_def_boolean(func, "normals" , 1, "Normals", "Export cormals");
|
||||
RNA_def_boolean(func, "normals" , 1, "Normals", "Export normals");
|
||||
RNA_def_boolean(func, "vcolors" , 0, "Vertex colors", "Export vertex colors");
|
||||
RNA_def_boolean(func, "apply_subdiv" , 1, "Subsurfs as meshes", "Export subdivision surfaces as meshes");
|
||||
RNA_def_boolean(func, "flatten" , 0, "Flatten hierarchy", "Flatten hierarchy");
|
||||
|
@ -385,7 +385,7 @@ static uiBlock *block_create_confirm_quit(struct bContext *C, struct ARegion *ar
|
||||
UI_block_emboss_set(block, UI_EMBOSS);
|
||||
|
||||
uiLayout *layout = UI_block_layout(
|
||||
block, UI_LAYOUT_VERTICAL, UI_LAYOUT_PANEL, 10, 2, U.pixelsize * 480, U.pixelsize * 110, 0, style);
|
||||
block, UI_LAYOUT_VERTICAL, UI_LAYOUT_PANEL, 10, 2, U.widget_unit * 24, U.widget_unit * 6, 0, style);
|
||||
|
||||
/* Text and some vertical space */
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user