blender/intern/cycles/render/integrator.h
Brecht Van Lommel 01df756bd1 Cycles Volume Render: scattering support.
This is done by adding a Volume Scatter node. In many cases you will want to
add together a Volume Absorption and Volume Scatter node with the same color
and density to get the expected results.

This should work with branched path tracing, mixing closures, overlapping
volumes, etc. However there's still various optimizations needed for sampling.
The main missing thing from the volume branch is the equiangular sampling for
homogeneous volumes.

The heterogeneous scattering code was arranged such that we can use a single
stratified random number for distance sampling, which gives less noise than
pseudo random numbers for each step. For volumes where the color is textured
there still seems to be something off, needs to be investigated.
2014-01-07 15:03:41 +01:00

90 lines
1.8 KiB
C++

/*
* Copyright 2011-2013 Blender Foundation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License
*/
#ifndef __INTEGRATOR_H__
#define __INTEGRATOR_H__
#include "kernel_types.h"
CCL_NAMESPACE_BEGIN
class Device;
class DeviceScene;
class Scene;
class Integrator {
public:
int min_bounce;
int max_bounce;
int max_diffuse_bounce;
int max_glossy_bounce;
int max_transmission_bounce;
int max_volume_bounce;
bool probalistic_termination;
int transparent_min_bounce;
int transparent_max_bounce;
bool transparent_probalistic;
bool transparent_shadows;
int volume_max_steps;
float volume_step_size;
bool no_caustics;
float filter_glossy;
int seed;
int layer_flag;
float sample_clamp;
bool motion_blur;
int aa_samples;
int diffuse_samples;
int glossy_samples;
int transmission_samples;
int ao_samples;
int mesh_light_samples;
int subsurface_samples;
int volume_samples;
enum Method {
BRANCHED_PATH = 0,
PATH = 1
};
Method method;
SamplingPattern sampling_pattern;
bool need_update;
Integrator();
~Integrator();
void device_update(Device *device, DeviceScene *dscene, Scene *scene);
void device_free(Device *device, DeviceScene *dscene);
bool modified(const Integrator& integrator);
void tag_update(Scene *scene);
};
CCL_NAMESPACE_END
#endif /* __INTEGRATOR_H__ */