This allows users to implement arbitrary camera models using OSL by writing shaders that take an image position as input and compute ray origin and direction. The obvious applications for this are e.g. panorama modes, lens distortion models and realistic lens simulation, but the possibilities are endless. Currently, this is only supported on devices with OSL support, so CPU and OptiX. However, it is independent from the shading model used, so custom cameras can be used without getting the performance hit of OSL shading. A few samples are provided as Text Editor templates. One notable current limitation (in addition to the limited device support) is that inverse mapping is not supported, so Window texture coordinates and the Vector pass will not work with custom cameras. Pull Request: https://projects.blender.org/blender/blender/pulls/129495
61 lines
1.4 KiB
C
61 lines
1.4 KiB
C
/* SPDX-FileCopyrightText: 2011-2022 Blender Foundation
|
|
*
|
|
* SPDX-License-Identifier: Apache-2.0 */
|
|
|
|
/* Constant Globals */
|
|
|
|
#pragma once
|
|
|
|
#include "kernel/types.h"
|
|
|
|
#include "kernel/integrator/state.h"
|
|
#include "kernel/util/profiler.h"
|
|
|
|
#include "util/color.h"
|
|
#include "util/texture.h"
|
|
|
|
CCL_NAMESPACE_BEGIN
|
|
|
|
/* Not actually used, just a nullptr pointer that gets passed everywhere, which we
|
|
* hope gets optimized out by the compiler. */
|
|
struct KernelGlobalsGPU {
|
|
int unused[1];
|
|
};
|
|
using KernelGlobals = const ccl_global KernelGlobalsGPU *ccl_restrict;
|
|
|
|
/* Launch parameters */
|
|
struct KernelParamsOptiX {
|
|
/* Kernel arguments */
|
|
const int *path_index_array;
|
|
float *render_buffer;
|
|
int offset;
|
|
|
|
/* Init kernel arguments */
|
|
int num_tiles;
|
|
int max_tile_work_size;
|
|
|
|
/* Global scene data and textures */
|
|
KernelData data;
|
|
#define KERNEL_DATA_ARRAY(type, name) const type *name;
|
|
#include "kernel/data_arrays.h"
|
|
|
|
/* Integrator state */
|
|
IntegratorStateGPU integrator_state;
|
|
};
|
|
|
|
#ifdef __NVCC__
|
|
extern "C"
|
|
# ifndef __CUDACC_RDC__
|
|
static
|
|
# endif
|
|
__constant__ KernelParamsOptiX kernel_params;
|
|
#endif
|
|
|
|
/* Abstraction macros */
|
|
#define kernel_data kernel_params.data
|
|
#define kernel_data_array(name) kernel_params.name
|
|
#define kernel_data_fetch(name, index) kernel_params.name[(index)]
|
|
#define kernel_integrator_state kernel_params.integrator_state
|
|
|
|
CCL_NAMESPACE_END
|