This can be useful to match transforms to what native Cycles would see in Blender, as USD typically uses centimeters, but Blender uses meters. This patch also fixes the hardcoded focal length multiplicator, which is now using the same units as everything else. Default of "stageMetersPerUnit" is 0.01 to match the USD default of centimeters. Differential Revision: https://developer.blender.org/D14630
46 lines
1.6 KiB
C++
46 lines
1.6 KiB
C++
/* SPDX-License-Identifier: Apache-2.0
|
|
* Copyright 2022 NVIDIA Corporation
|
|
* Copyright 2022 Blender Foundation */
|
|
|
|
#pragma once
|
|
|
|
#include "hydra/config.h"
|
|
|
|
#include <pxr/base/gf/camera.h>
|
|
#include <pxr/imaging/hd/camera.h>
|
|
#include <pxr/imaging/hd/timeSampleArray.h>
|
|
|
|
HDCYCLES_NAMESPACE_OPEN_SCOPE
|
|
|
|
class HdCyclesCamera final : public PXR_NS::HdCamera {
|
|
public:
|
|
HdCyclesCamera(const PXR_NS::SdfPath &sprimId);
|
|
~HdCyclesCamera() override;
|
|
|
|
void ApplyCameraSettings(PXR_NS::HdRenderParam *renderParam, CCL_NS::Camera *targetCamera) const;
|
|
|
|
static void ApplyCameraSettings(PXR_NS::HdRenderParam *renderParam,
|
|
const PXR_NS::GfCamera &cameraData,
|
|
PXR_NS::CameraUtilConformWindowPolicy windowPolicy,
|
|
CCL_NS::Camera *targetCamera);
|
|
static void ApplyCameraSettings(PXR_NS::HdRenderParam *renderParam,
|
|
const PXR_NS::GfMatrix4d &worldToViewMatrix,
|
|
const PXR_NS::GfMatrix4d &projectionMatrix,
|
|
const std::vector<PXR_NS::GfVec4d> &clipPlanes,
|
|
CCL_NS::Camera *targetCamera);
|
|
|
|
PXR_NS::HdDirtyBits GetInitialDirtyBitsMask() const override;
|
|
|
|
void Sync(PXR_NS::HdSceneDelegate *sceneDelegate,
|
|
PXR_NS::HdRenderParam *renderParam,
|
|
PXR_NS::HdDirtyBits *dirtyBits) override;
|
|
|
|
void Finalize(PXR_NS::HdRenderParam *renderParam) override;
|
|
|
|
private:
|
|
PXR_NS::GfCamera _data;
|
|
PXR_NS::HdTimeSampleArray<PXR_NS::GfMatrix4d, 2> _transformSamples;
|
|
};
|
|
|
|
HDCYCLES_NAMESPACE_CLOSE_SCOPE
|