Ejemplo n.º 1
0
int ED_object_add_generic_get_opts(bContext *C, wmOperator *op, float *loc, float *rot, int *enter_editmode, unsigned int *layer)
{
	View3D *v3d = CTX_wm_view3d(C);
	int a, layer_values[20];
	int view_align;
	
	*enter_editmode = FALSE;
	if(RNA_struct_find_property(op->ptr, "enter_editmode") && RNA_boolean_get(op->ptr, "enter_editmode")) {
		*enter_editmode = TRUE;
	}

	if(RNA_property_is_set(op->ptr, "layers")) {
		RNA_boolean_get_array(op->ptr, "layers", layer_values);
		*layer= 0;
		for(a=0; a<20; a++) {
			if(layer_values[a])
				*layer |= (1 << a);
			else
				*layer &= ~(1 << a);
		}
	}
	else {
		/* not set, use the scenes layers */
		Scene *scene = CTX_data_scene(C);
		*layer = scene->layact;
	}

	/* in local view we additionally add local view layers,
	   not part of operator properties */
	if(v3d && v3d->localvd)
		*layer |= v3d->lay;

	if(RNA_property_is_set(op->ptr, "rotation"))
		view_align = FALSE;
	else if (RNA_property_is_set(op->ptr, "view_align"))
		view_align = RNA_boolean_get(op->ptr, "view_align");
	else {
		view_align = U.flag & USER_ADD_VIEWALIGNED;
		RNA_boolean_set(op->ptr, "view_align", view_align);
	}
	
	if (view_align)
		ED_object_rotation_from_view(C, rot);
	else
		RNA_float_get_array(op->ptr, "rotation", rot);
	

	RNA_float_get_array(op->ptr, "location", loc);

	if(*layer == 0) {
		BKE_report(op->reports, RPT_ERROR, "Property 'layer' has no values set");
		return 0;
	}

	return 1;
}
Ejemplo n.º 2
0
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Get additional Octane scene settings.
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void BlenderSync::sync_kernel() {
    PointerRNA oct_scene = RNA_pointer_get(&b_scene.ptr, "octane");

    Kernel *kernel = scene->kernel;
    Kernel prevkernel = *kernel;

    BL::RenderSettings r = b_scene.render();
    if(r.use_motion_blur()) {
        float fps                                           = (float)b_scene.render().fps() / b_scene.render().fps_base();
        float shuttertime                                   = r.motion_blur_shutter();
        BlenderSession::MotionBlurType mb_type              = static_cast<BlenderSession::MotionBlurType>(RNA_enum_get(&oct_scene, "mb_type"));
        float mb_frame_time_sampling                        = mb_type == BlenderSession::INTERNAL ? 1.0f / fps : 0.0f;
        kernel->oct_node->fShutterTime                      = mb_frame_time_sampling != 0.0f ? shuttertime / mb_frame_time_sampling : 0.0f;
        BlenderSession::MotionBlurDirection mb_direction    = static_cast<BlenderSession::MotionBlurDirection>(RNA_enum_get(&oct_scene, "mb_direction"));
        switch(mb_direction) {
            case BlenderSession::BEFORE:
                kernel->oct_node->mbAlignment = ::OctaneEngine::Kernel::BEFORE;
                break;
            case BlenderSession::AFTER:
                kernel->oct_node->mbAlignment = ::OctaneEngine::Kernel::AFTER;
                break;
            case BlenderSession::SYMMETRIC:
                kernel->oct_node->mbAlignment = ::OctaneEngine::Kernel::SYMMETRIC;
                break;
            default:
                break;
        }
    }
    else kernel->oct_node->fShutterTime = 0.0f;

    kernel->oct_node->type = static_cast< ::OctaneEngine::Kernel::KernelType>(RNA_enum_get(&oct_scene, "kernel_type"));
    kernel->oct_node->infoChannelType = channel_translator[RNA_enum_get(&oct_scene, "info_channel_type")];

    ::Octane::RenderPassId cur_pass_type = Passes::pass_type_translator[RNA_enum_get(&oct_scene, "cur_pass_type")];
    if(cur_pass_type == ::Octane::RenderPassId::RENDER_PASS_BEAUTY) {
        kernel->oct_node->iMaxSamples = interactive ? get_int(oct_scene, "max_preview_samples") : get_int(oct_scene, "max_samples");
        //kernel->oct_node->iMaxPreviewSamples = get_int(oct_scene, "max_preview_samples");
        //if(kernel->oct_node->iMaxPreviewSamples == 0) kernel->oct_node->iMaxPreviewSamples = 16000;
    }
    else if(cur_pass_type == ::Octane::RenderPassId::RENDER_PASS_AMBIENT_OCCLUSION) {
        kernel->oct_node->iMaxSamples = get_int(oct_scene, "pass_ao_max_samples");
        //kernel->oct_node->iMaxPreviewSamples = kernel->oct_node->iMaxSamples;
    }
    else {
        kernel->oct_node->iMaxSamples = get_int(oct_scene, "pass_max_samples");
        //kernel->oct_node->iMaxPreviewSamples = kernel->oct_node->iMaxSamples;
    }
    if(scene->session->b_session && scene->session->b_session->motion_blur && scene->session->b_session->mb_type == BlenderSession::SUBFRAME && scene->session->b_session->mb_samples > 1)
        kernel->oct_node->iMaxSamples = kernel->oct_node->iMaxSamples / scene->session->b_session->mb_samples;
    if(kernel->oct_node->iMaxSamples < 1) kernel->oct_node->iMaxSamples = 1;

    kernel->oct_node->fFilterSize = get_float(oct_scene, "filter_size");
    kernel->oct_node->fRayEpsilon = get_float(oct_scene, "ray_epsilon");
    kernel->oct_node->bAlphaChannel = get_boolean(oct_scene, "alpha_channel");
    kernel->oct_node->bAlphaShadows = get_boolean(oct_scene, "alpha_shadows");
    kernel->oct_node->bBumpNormalMapping = get_boolean(oct_scene, "bump_normal_mapping");
    kernel->oct_node->bBkFaceHighlight = get_boolean(oct_scene, "wf_bkface_hl");
    kernel->oct_node->fPathTermPower = get_float(oct_scene, "path_term_power");

    kernel->oct_node->bKeepEnvironment = get_boolean(oct_scene, "keep_environment");

    kernel->oct_node->fCausticBlur = get_float(oct_scene, "caustic_blur");
    kernel->oct_node->iMaxDiffuseDepth = get_int(oct_scene, "max_diffuse_depth");
    kernel->oct_node->iMaxGlossyDepth = get_int(oct_scene, "max_glossy_depth");

    kernel->oct_node->fCoherentRatio = get_float(oct_scene, "coherent_ratio");
    kernel->oct_node->bStaticNoise = get_boolean(oct_scene, "static_noise");

    kernel->oct_node->iSpecularDepth = get_int(oct_scene, "specular_depth");
    kernel->oct_node->iGlossyDepth = get_int(oct_scene, "glossy_depth");
    kernel->oct_node->fAODist = get_float(oct_scene, "ao_dist");
    kernel->oct_node->GIMode = static_cast< ::OctaneEngine::Kernel::DirectLightMode>(RNA_enum_get(&oct_scene, "gi_mode"));
    kernel->oct_node->iDiffuseDepth = get_int(oct_scene, "diffuse_depth");
    kernel->oct_node->sAoTexture = get_string(oct_scene, "ao_texture");

    kernel->oct_node->fExploration = get_float(oct_scene, "exploration");
    kernel->oct_node->fGIClamp = get_float(oct_scene, "gi_clamp");
    kernel->oct_node->fDLImportance = get_float(oct_scene, "direct_light_importance");
    kernel->oct_node->iMaxRejects = get_int(oct_scene, "max_rejects");
    kernel->oct_node->iParallelism = get_int(oct_scene, "parallelism");

    kernel->oct_node->fZdepthMax = get_float(oct_scene, "zdepth_max");
    kernel->oct_node->fUVMax = get_float(oct_scene, "uv_max");
    kernel->oct_node->iSamplingMode = RNA_enum_get(&oct_scene, "sampling_mode");
    kernel->oct_node->fMaxSpeed = get_float(oct_scene, "max_speed");

    kernel->oct_node->bLayersEnable = get_boolean(oct_scene, "layers_enable");
    kernel->oct_node->iLayersCurrent = get_int(oct_scene, "layers_current");
    kernel->oct_node->bLayersInvert = get_boolean(oct_scene, "layers_invert");
    kernel->oct_node->layersMode = static_cast< ::OctaneEngine::Kernel::LayersMode>(RNA_enum_get(&oct_scene, "layers_mode"));

    kernel->oct_node->iParallelSamples = get_int(oct_scene, "parallel_samples");
    kernel->oct_node->iMaxTileSamples = get_int(oct_scene, "max_tile_samples");
    kernel->oct_node->bMinimizeNetTraffic = get_boolean(oct_scene, "minimize_net_traffic");
    kernel->oct_node->bDeepImageEnable = get_boolean(oct_scene, "deep_image");
    kernel->oct_node->iMaxDepthSamples = get_int(oct_scene, "max_depth_samples");
    kernel->oct_node->fDepthTolerance = get_float(oct_scene, "depth_tolerance");
    kernel->oct_node->iWorkChunkSize = get_int(oct_scene, "work_chunk_size");
    kernel->oct_node->bAoAlphaShadows = get_boolean(oct_scene, "ao_alpha_shadows");
    kernel->oct_node->fOpacityThreshold = get_float(oct_scene, "opacity_threshold");

    if(kernel->modified(prevkernel)) kernel->tag_update();

    // GPUs
    int iValues[8] = {0, 0, 0, 0, 0, 0, 0, 0};
    RNA_boolean_get_array(&oct_scene, "devices", iValues);
    kernel->uiGPUs = 0;
    for(int i = 0; i < 8; ++i)
        if(iValues[i]) kernel->uiGPUs |= 0x01 << i;

    if(kernel->uiGPUs != prevkernel.uiGPUs) kernel->tag_updateGPUs();
} //sync_kernel()