From 68b6c39b2b0ad88a3aeb1090da20b66cf0407ab1 Mon Sep 17 00:00:00 2001 From: zhouhang95 <765229842@qq.com> Date: Wed, 10 Apr 2024 16:20:14 +0800 Subject: [PATCH 1/7] panorama camera --- ui/zenoedit/dialog/zrecorddlg.ui | 20 ++++++++++++++++++++ zenovis/xinxinoptix/PTKernel.cu | 19 +++++++++++++++++++ 2 files changed, 39 insertions(+) diff --git a/ui/zenoedit/dialog/zrecorddlg.ui b/ui/zenoedit/dialog/zrecorddlg.ui index 71c3a8ed68..7b27864e41 100644 --- a/ui/zenoedit/dialog/zrecorddlg.ui +++ b/ui/zenoedit/dialog/zrecorddlg.ui @@ -180,6 +180,26 @@ + + + + PanoramaCamera + + + false + + + + + + + Hemisphere + + + false + + + diff --git a/zenovis/xinxinoptix/PTKernel.cu b/zenovis/xinxinoptix/PTKernel.cu index 75dfd235fb..ed0214b030 100644 --- a/zenovis/xinxinoptix/PTKernel.cu +++ b/zenovis/xinxinoptix/PTKernel.cu @@ -199,6 +199,25 @@ extern "C" __global__ void __raygen__rg() float3 ray_origin = eye_shake; float3 ray_direction = terminal_point - eye_shake; ray_direction = normalize(ray_direction); + int panorama = 1; + int hemisphere = 1; + if (panorama) { + float phi = (float(idx.x) + subpixel_jitter.x) / float(w) * 2.0f * M_PIf; + if (hemisphere) { + phi = ((float(idx.x) + subpixel_jitter.x) / float(w) + 0.5f) * M_PIf; + } + float theta = (float(idx.y) + subpixel_jitter.y) / float(h) * M_PIf; + float y = -cosf(theta); + float z = sinf(theta) * cosf(phi); + float x = sinf(theta) * sinf(-phi); + + mat3 camera_transform = mat3( + cam.right.x, cam.up.x, -cam.front.x, + cam.right.y, cam.up.y, -cam.front.y, + cam.right.z, cam.up.z, -cam.front.z + ); + ray_direction = camera_transform * make_float3(x, y, z); + } RadiancePRD prd; prd.pixel_area = cam.height/(float)(h)/(cam.focal_length); From ef3dfb4e7766eaabb586de4b4310ad882b663ac6 Mon Sep 17 00:00:00 2001 From: zhouhang95 <765229842@qq.com> Date: Wed, 10 Apr 2024 19:03:57 +0800 Subject: [PATCH 2/7] ui --- ui/zenoedit/dialog/ZOptixCameraSetting.cpp | 16 ++++++++++++++++ ui/zenoedit/viewport/optixviewport.cpp | 10 ++++++++-- ui/zenoedit/viewport/optixviewport.h | 4 ++-- zeno/src/nodes/CameraNodes.cpp | 5 +++++ zenovis/include/zenovis/Camera.h | 4 +++- zenovis/src/Camera.cpp | 4 +++- zenovis/src/optx/RenderEngineOptx.cpp | 12 +++++++++--- zenovis/xinxinoptix/PTKernel.cu | 6 ++---- zenovis/xinxinoptix/optixPathTracer.cpp | 4 +++- zenovis/xinxinoptix/optixPathTracer.h | 2 ++ zenovis/xinxinoptix/xinxinoptixapi.h | 2 +- 11 files changed, 54 insertions(+), 15 deletions(-) diff --git a/ui/zenoedit/dialog/ZOptixCameraSetting.cpp b/ui/zenoedit/dialog/ZOptixCameraSetting.cpp index 623e79ef5d..a14609fb40 100644 --- a/ui/zenoedit/dialog/ZOptixCameraSetting.cpp +++ b/ui/zenoedit/dialog/ZOptixCameraSetting.cpp @@ -44,6 +44,14 @@ ZOptixCameraSetting::ZOptixCameraSetting(zenovis::ZOptixCameraSettingInfo &info, m_exposure->setStyleSheet("color: white;"); m_exposure->setChecked(info.exposure); + QCheckBox *m_panorama_camera = new QCheckBox(tr("PanoramaCamera")); + m_panorama_camera->setStyleSheet("color: white;"); + m_panorama_camera->setChecked(info.panorama_camera); + + QCheckBox *m_panorama_hemisphere = new QCheckBox(tr("PanoramaHemisphere")); + m_panorama_hemisphere->setStyleSheet("color: white;"); + m_panorama_hemisphere->setChecked(info.panorama_hemisphere); + mainLayout->addWidget(new QLabel("Aperture")); mainLayout->addWidget(m_aperture); mainLayout->addWidget(new QLabel("ShutterSpeed")); @@ -52,6 +60,8 @@ ZOptixCameraSetting::ZOptixCameraSetting(zenovis::ZOptixCameraSettingInfo &info, mainLayout->addWidget(m_iso); mainLayout->addWidget(m_aces); mainLayout->addWidget(m_exposure); + mainLayout->addWidget(m_panorama_camera); + mainLayout->addWidget(m_panorama_hemisphere); mainLayout->addLayout(buttonLayout); @@ -78,5 +88,11 @@ ZOptixCameraSetting::ZOptixCameraSetting(zenovis::ZOptixCameraSettingInfo &info, connect(m_exposure, &QCheckBox::stateChanged, this, [&](int state) { info.exposure = state == Qt::Checked; }); + connect(m_panorama_camera, &QCheckBox::stateChanged, this, [&](int state) { + info.panorama_camera = state == Qt::Checked; + }); + connect(m_panorama_hemisphere, &QCheckBox::stateChanged, this, [&](int state) { + info.panorama_hemisphere = state == Qt::Checked; + }); } diff --git a/ui/zenoedit/viewport/optixviewport.cpp b/ui/zenoedit/viewport/optixviewport.cpp index cb85615c84..726dde82b4 100644 --- a/ui/zenoedit/viewport/optixviewport.cpp +++ b/ui/zenoedit/viewport/optixviewport.cpp @@ -351,7 +351,9 @@ void OptixWorker::onSetData( float shutter_speed, float iso, bool aces, - bool exposure + bool exposure, + bool panorama_camera, + bool panorama_hemisphere ) { // zeno::log_info("I am in optix thread, now I want to set value {}", iso); auto scene = m_zenoVis->getSession()->get_scene(); @@ -360,6 +362,8 @@ void OptixWorker::onSetData( scene->camera->zOptixCameraSettingInfo.iso = iso; scene->camera->zOptixCameraSettingInfo.aces = aces; scene->camera->zOptixCameraSettingInfo.exposure = exposure; + scene->camera->zOptixCameraSettingInfo.panorama_camera = panorama_camera; + scene->camera->zOptixCameraSettingInfo.panorama_hemisphere = panorama_hemisphere; scene->drawOptions->needRefresh = true; } @@ -454,7 +458,9 @@ void ZOptixViewport::setdata_on_optix_thread(zenovis::ZOptixCameraSettingInfo va value.shutter_speed, value.iso, value.aces, - value.exposure + value.exposure, + value.panorama_camera, + value.panorama_hemisphere ); } diff --git a/ui/zenoedit/viewport/optixviewport.h b/ui/zenoedit/viewport/optixviewport.h index d7ef63a06b..debc0b4680 100644 --- a/ui/zenoedit/viewport/optixviewport.h +++ b/ui/zenoedit/viewport/optixviewport.h @@ -44,7 +44,7 @@ public slots: void onCleanUpScene(); void onSetBackground(bool bShowBg); - void onSetData(float, float, float, bool, bool); + void onSetData(float, float, float, bool, bool, bool, bool); private: Zenovis *m_zenoVis; @@ -108,7 +108,7 @@ class ZOptixViewport : public QWidget void sig_updateCameraProp(float aperture, float disPlane, UI_VECTYPE skipParam = UI_VECTYPE()); void sig_cleanUpScene(); void sig_setBackground(bool bShowBg); - void sig_setdata_on_optix_thread(float, float, float, bool, bool); + void sig_setdata_on_optix_thread(float, float, float, bool, bool, bool, bool); public slots: void onFrameRunFinished(int frame); diff --git a/zeno/src/nodes/CameraNodes.cpp b/zeno/src/nodes/CameraNodes.cpp index e8694880d9..7ca8ee3f40 100644 --- a/zeno/src/nodes/CameraNodes.cpp +++ b/zeno/src/nodes/CameraNodes.cpp @@ -58,6 +58,8 @@ struct SetPhysicalCamera : INode { ud.set2("iso", get_input2("iso")); ud.set2("aces", get_input2("aces")); ud.set2("exposure", get_input2("exposure")); + ud.set2("panorama_camera", get_input2("panorama_camera")); + ud.set2("panorama_hemisphere", get_input2("panorama_hemisphere")); set_output("camera", std::move(camera)); } @@ -71,6 +73,9 @@ ZENO_DEFNODE(SetPhysicalCamera)({ {"float", "iso", "150"}, {"bool", "aces", "0"}, {"bool", "exposure", "0"}, + {"bool", "exposure", "0"}, + {"bool", "panorama_camera", "0"}, + {"bool", "panorama_hemisphere", "0"}, }, { {"CameraObject", "camera"}, diff --git a/zenovis/include/zenovis/Camera.h b/zenovis/include/zenovis/Camera.h index 00126d5de2..fe38e5181c 100644 --- a/zenovis/include/zenovis/Camera.h +++ b/zenovis/include/zenovis/Camera.h @@ -17,6 +17,8 @@ struct ZOptixCameraSettingInfo { float iso = 150; bool aces = false; bool exposure = false; + bool panorama_camera = false; + bool panorama_hemisphere = false; }; struct Camera { @@ -75,7 +77,7 @@ struct Camera { float get_safe_frames() const; bool is_locked_window() const; void setCamera(zeno::CameraData const &cam); - void setPhysicalCamera(float aperture, float shutter_speed, float iso, bool aces, bool exposure); + void setPhysicalCamera(float aperture, float shutter_speed, float iso, bool aces, bool exposure, bool panorama_camera, bool panorama_hemisphere); void placeCamera(glm::vec3 pos, glm::vec3 front, glm::vec3 up); void lookCamera(float cx, float cy, float cz, float theta, float phi, float radius, bool ortho_mode, float fov, float aperture, float focalPlaneDistance); void focusCamera(float cx, float cy, float cz, float radius); diff --git a/zenovis/src/Camera.cpp b/zenovis/src/Camera.cpp index aca4d46924..fd76a6ecd4 100644 --- a/zenovis/src/Camera.cpp +++ b/zenovis/src/Camera.cpp @@ -52,12 +52,14 @@ void Camera::setCamera(zeno::CameraData const &cam) { this->m_need_sync = true; } -void Camera::setPhysicalCamera(float aperture, float shutter_speed, float iso, bool aces, bool exposure) { +void Camera::setPhysicalCamera(float aperture, float shutter_speed, float iso, bool aces, bool exposure, bool panorama_camera, bool panorama_hemisphere) { this->zOptixCameraSettingInfo.aperture = aperture; this->zOptixCameraSettingInfo.shutter_speed = shutter_speed; this->zOptixCameraSettingInfo.iso = iso; this->zOptixCameraSettingInfo.aces = aces; this->zOptixCameraSettingInfo.exposure = exposure; + this->zOptixCameraSettingInfo.panorama_camera = panorama_camera; + this->zOptixCameraSettingInfo.panorama_hemisphere = panorama_hemisphere; } static glm::mat4 MakeInfReversedZProjRH(float fovY_radians, float aspectWbyH, float zNear) { diff --git a/zenovis/src/optx/RenderEngineOptx.cpp b/zenovis/src/optx/RenderEngineOptx.cpp index 23df143dda..1f0827e572 100644 --- a/zenovis/src/optx/RenderEngineOptx.cpp +++ b/zenovis/src/optx/RenderEngineOptx.cpp @@ -781,7 +781,9 @@ struct GraphicsManager { ud.get2("shutter_speed"), ud.get2("iso"), ud.get2("aces"), - ud.get2("exposure") + ud.get2("exposure"), + ud.get2("panorama_camera"), + ud.get2("panorama_hemisphere") ); } } @@ -821,7 +823,9 @@ struct GraphicsManager { ud.get2("shutter_speed"), ud.get2("iso"), ud.get2("aces"), - ud.get2("exposure") + ud.get2("exposure"), + ud.get2("panorama_camera"), + ud.get2("panorama_hemisphere") ); } } @@ -1063,7 +1067,9 @@ struct RenderEngineOptx : RenderEngine, zeno::disable_copy { cam.zOptixCameraSettingInfo.shutter_speed, cam.zOptixCameraSettingInfo.iso, cam.zOptixCameraSettingInfo.aces, - cam.zOptixCameraSettingInfo.exposure + cam.zOptixCameraSettingInfo.exposure, + cam.zOptixCameraSettingInfo.panorama_camera, + cam.zOptixCameraSettingInfo.panorama_hemisphere ); } diff --git a/zenovis/xinxinoptix/PTKernel.cu b/zenovis/xinxinoptix/PTKernel.cu index ed0214b030..4dc5882d3a 100644 --- a/zenovis/xinxinoptix/PTKernel.cu +++ b/zenovis/xinxinoptix/PTKernel.cu @@ -199,11 +199,9 @@ extern "C" __global__ void __raygen__rg() float3 ray_origin = eye_shake; float3 ray_direction = terminal_point - eye_shake; ray_direction = normalize(ray_direction); - int panorama = 1; - int hemisphere = 1; - if (panorama) { + if (params.physical_camera_panorama_camera) { float phi = (float(idx.x) + subpixel_jitter.x) / float(w) * 2.0f * M_PIf; - if (hemisphere) { + if (params.physical_camera_panorama_hemisphere) { phi = ((float(idx.x) + subpixel_jitter.x) / float(w) + 0.5f) * M_PIf; } float theta = (float(idx.y) + subpixel_jitter.y) / float(h) * M_PIf; diff --git a/zenovis/xinxinoptix/optixPathTracer.cpp b/zenovis/xinxinoptix/optixPathTracer.cpp index 9a81fac636..40680ff19a 100644 --- a/zenovis/xinxinoptix/optixPathTracer.cpp +++ b/zenovis/xinxinoptix/optixPathTracer.cpp @@ -3696,12 +3696,14 @@ void set_window_size(int nx, int ny) { resize_dirty = true; } -void set_physical_camera_param(float aperture, float shutter_speed, float iso, bool aces, bool exposure) { +void set_physical_camera_param(float aperture, float shutter_speed, float iso, bool aces, bool exposure, bool panorama_camera, bool panorama_hemisphere) { state.params.physical_camera_aperture = aperture; state.params.physical_camera_shutter_speed = shutter_speed; state.params.physical_camera_iso = iso; state.params.physical_camera_aces = aces; state.params.physical_camera_exposure = exposure; + state.params.physical_camera_panorama_camera = panorama_camera; + state.params.physical_camera_panorama_hemisphere = panorama_hemisphere; } void set_perspective(float const *U, float const *V, float const *W, float const *E, float aspect, float fov, float fpd, float aperture) { set_perspective_by_fov(U,V,W,E,aspect,fov,0,0.024f,fpd,aperture,0.0f,0.0f,0.0f,0.0f); diff --git a/zenovis/xinxinoptix/optixPathTracer.h b/zenovis/xinxinoptix/optixPathTracer.h index d26f167511..db9b8c3a67 100644 --- a/zenovis/xinxinoptix/optixPathTracer.h +++ b/zenovis/xinxinoptix/optixPathTracer.h @@ -254,6 +254,8 @@ struct Params float physical_camera_iso; bool physical_camera_aces; bool physical_camera_exposure; + bool physical_camera_panorama_camera; + bool physical_camera_panorama_hemisphere; }; diff --git a/zenovis/xinxinoptix/xinxinoptixapi.h b/zenovis/xinxinoptix/xinxinoptixapi.h index 826145e270..47600ccf39 100644 --- a/zenovis/xinxinoptix/xinxinoptixapi.h +++ b/zenovis/xinxinoptix/xinxinoptixapi.h @@ -54,7 +54,7 @@ void optixupdateend(); void set_window_size(int nx, int ny); void set_outside_random_number(int32_t outside_random_number); void set_perspective(float const *U, float const *V, float const *W, float const *E, float aspect, float fov, float fpd, float aperture); -void set_physical_camera_param(float aperture, float shutter_speed, float iso, bool aces, bool exposure); +void set_physical_camera_param(float aperture, float shutter_speed, float iso, bool aces, bool exposure, bool panorama_camera, bool panorama_hemisphere); void set_perspective_by_fov(float const *U, float const *V, float const *W, float const *E, float aspect, float fov, int fov_type, float L, float focal_distance, float aperture, float pitch, float yaw, float h_shift, float v_shift); void set_perspective_by_focal_length(float const *U, float const *V, float const *W, float const *E, float aspect, float focal_length, float w, float h, float focal_distance, float aperture, float pitch, float yaw, float h_shift, float v_shift); void load_object(std::string const &key, std::string const &mtlid, const std::string& instID, float const *verts, size_t numverts, int const *tris, size_t numtris, std::map> const &vtab,int const *matids, std::vector const &matNameList); From bb963c983386a528280def74bf7e028760940a52 Mon Sep 17 00:00:00 2001 From: zhouhang95 <765229842@qq.com> Date: Fri, 12 Apr 2024 18:56:24 +0800 Subject: [PATCH 3/7] ray_origin --- zenovis/xinxinoptix/PTKernel.cu | 1 + 1 file changed, 1 insertion(+) diff --git a/zenovis/xinxinoptix/PTKernel.cu b/zenovis/xinxinoptix/PTKernel.cu index 4dc5882d3a..6bd15d3d03 100644 --- a/zenovis/xinxinoptix/PTKernel.cu +++ b/zenovis/xinxinoptix/PTKernel.cu @@ -200,6 +200,7 @@ extern "C" __global__ void __raygen__rg() float3 ray_direction = terminal_point - eye_shake; ray_direction = normalize(ray_direction); if (params.physical_camera_panorama_camera) { + float3 ray_origin = make_float3(0.0f, 0.0f, 0.0f); float phi = (float(idx.x) + subpixel_jitter.x) / float(w) * 2.0f * M_PIf; if (params.physical_camera_panorama_hemisphere) { phi = ((float(idx.x) + subpixel_jitter.x) / float(w) + 0.5f) * M_PIf; From be6fa1ec7775fa95e542ad33ea81515fe923bff1 Mon Sep 17 00:00:00 2001 From: zhouhang95 <765229842@qq.com> Date: Fri, 12 Apr 2024 23:58:23 +0800 Subject: [PATCH 4/7] vr180 --- zenovis/xinxinoptix/PTKernel.cu | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/zenovis/xinxinoptix/PTKernel.cu b/zenovis/xinxinoptix/PTKernel.cu index 6bd15d3d03..ede80e4f38 100644 --- a/zenovis/xinxinoptix/PTKernel.cu +++ b/zenovis/xinxinoptix/PTKernel.cu @@ -200,21 +200,28 @@ extern "C" __global__ void __raygen__rg() float3 ray_direction = terminal_point - eye_shake; ray_direction = normalize(ray_direction); if (params.physical_camera_panorama_camera) { - float3 ray_origin = make_float3(0.0f, 0.0f, 0.0f); + ray_origin = make_float3(0.0f, 0.0f, 0.0f); float phi = (float(idx.x) + subpixel_jitter.x) / float(w) * 2.0f * M_PIf; + mat3 camera_transform = mat3( + cam.right.x, cam.up.x, -cam.front.x, + cam.right.y, cam.up.y, -cam.front.y, + cam.right.z, cam.up.z, -cam.front.z + ); if (params.physical_camera_panorama_hemisphere) { - phi = ((float(idx.x) + subpixel_jitter.x) / float(w) + 0.5f) * M_PIf; + int idxx = idx.x >= w/2? idx.x - w/2 : idx.x; + phi = ((float(idxx) + subpixel_jitter.x) / float(w / 2) + 0.5f) * M_PIf; + if (idx.x < w / 2) { + ray_origin = camera_transform * make_float3(-0.03f, 0.0f, 0.0f); + } + else { + ray_origin = camera_transform * make_float3(0.03f, 0.0f, 0.0f); + } } float theta = (float(idx.y) + subpixel_jitter.y) / float(h) * M_PIf; float y = -cosf(theta); float z = sinf(theta) * cosf(phi); float x = sinf(theta) * sinf(-phi); - mat3 camera_transform = mat3( - cam.right.x, cam.up.x, -cam.front.x, - cam.right.y, cam.up.y, -cam.front.y, - cam.right.z, cam.up.z, -cam.front.z - ); ray_direction = camera_transform * make_float3(x, y, z); } From 1df1ac8b1ffaab3833cc957a7e138838ee1bbcc0 Mon Sep 17 00:00:00 2001 From: zhouhang95 <765229842@qq.com> Date: Sat, 13 Apr 2024 00:30:32 +0800 Subject: [PATCH 5/7] vr180 ui --- ui/zenoedit/dialog/ZOptixCameraSetting.cpp | 22 ++++++++++++++++------ ui/zenoedit/viewport/optixviewport.cpp | 9 ++++++--- ui/zenoedit/viewport/optixviewport.h | 4 ++-- zeno/src/nodes/CameraNodes.cpp | 6 ++++-- zenovis/include/zenovis/Camera.h | 5 +++-- zenovis/src/Camera.cpp | 5 +++-- zenovis/src/optx/RenderEngineOptx.cpp | 9 ++++++--- zenovis/xinxinoptix/PTKernel.cu | 6 +++--- zenovis/xinxinoptix/optixPathTracer.cpp | 5 +++-- zenovis/xinxinoptix/optixPathTracer.h | 3 ++- zenovis/xinxinoptix/xinxinoptixapi.h | 2 +- 11 files changed, 49 insertions(+), 27 deletions(-) diff --git a/ui/zenoedit/dialog/ZOptixCameraSetting.cpp b/ui/zenoedit/dialog/ZOptixCameraSetting.cpp index a14609fb40..d42f83f12e 100644 --- a/ui/zenoedit/dialog/ZOptixCameraSetting.cpp +++ b/ui/zenoedit/dialog/ZOptixCameraSetting.cpp @@ -48,9 +48,14 @@ ZOptixCameraSetting::ZOptixCameraSetting(zenovis::ZOptixCameraSettingInfo &info, m_panorama_camera->setStyleSheet("color: white;"); m_panorama_camera->setChecked(info.panorama_camera); - QCheckBox *m_panorama_hemisphere = new QCheckBox(tr("PanoramaHemisphere")); - m_panorama_hemisphere->setStyleSheet("color: white;"); - m_panorama_hemisphere->setChecked(info.panorama_hemisphere); + QCheckBox *m_panorama_vr180 = new QCheckBox(tr("PanoramaVR180")); + m_panorama_vr180->setStyleSheet("color: white;"); + m_panorama_vr180->setChecked(info.panorama_vr180); + + QDoubleSpinBox* m_pupillary_distance = new QDoubleSpinBox(); + m_pupillary_distance->setDecimals(3); + m_pupillary_distance->setRange(0.0, 10000); + m_pupillary_distance->setValue(info.pupillary_distance); mainLayout->addWidget(new QLabel("Aperture")); mainLayout->addWidget(m_aperture); @@ -61,7 +66,9 @@ ZOptixCameraSetting::ZOptixCameraSetting(zenovis::ZOptixCameraSettingInfo &info, mainLayout->addWidget(m_aces); mainLayout->addWidget(m_exposure); mainLayout->addWidget(m_panorama_camera); - mainLayout->addWidget(m_panorama_hemisphere); + mainLayout->addWidget(m_panorama_vr180); + mainLayout->addWidget(new QLabel("PupillaryDistance")); + mainLayout->addWidget(m_pupillary_distance); mainLayout->addLayout(buttonLayout); @@ -91,8 +98,11 @@ ZOptixCameraSetting::ZOptixCameraSetting(zenovis::ZOptixCameraSettingInfo &info, connect(m_panorama_camera, &QCheckBox::stateChanged, this, [&](int state) { info.panorama_camera = state == Qt::Checked; }); - connect(m_panorama_hemisphere, &QCheckBox::stateChanged, this, [&](int state) { - info.panorama_hemisphere = state == Qt::Checked; + connect(m_panorama_vr180, &QCheckBox::stateChanged, this, [&](int state) { + info.panorama_vr180 = state == Qt::Checked; + }); + connect(m_pupillary_distance, QOverload::of(&QDoubleSpinBox::valueChanged), this, [&](double value) { + info.pupillary_distance = value; }); } diff --git a/ui/zenoedit/viewport/optixviewport.cpp b/ui/zenoedit/viewport/optixviewport.cpp index 726dde82b4..cd192505c5 100644 --- a/ui/zenoedit/viewport/optixviewport.cpp +++ b/ui/zenoedit/viewport/optixviewport.cpp @@ -353,7 +353,8 @@ void OptixWorker::onSetData( bool aces, bool exposure, bool panorama_camera, - bool panorama_hemisphere + bool panorama_vr180, + float pupillary_distance ) { // zeno::log_info("I am in optix thread, now I want to set value {}", iso); auto scene = m_zenoVis->getSession()->get_scene(); @@ -363,7 +364,8 @@ void OptixWorker::onSetData( scene->camera->zOptixCameraSettingInfo.aces = aces; scene->camera->zOptixCameraSettingInfo.exposure = exposure; scene->camera->zOptixCameraSettingInfo.panorama_camera = panorama_camera; - scene->camera->zOptixCameraSettingInfo.panorama_hemisphere = panorama_hemisphere; + scene->camera->zOptixCameraSettingInfo.panorama_vr180 = panorama_vr180; + scene->camera->zOptixCameraSettingInfo.pupillary_distance = pupillary_distance; scene->drawOptions->needRefresh = true; } @@ -460,7 +462,8 @@ void ZOptixViewport::setdata_on_optix_thread(zenovis::ZOptixCameraSettingInfo va value.aces, value.exposure, value.panorama_camera, - value.panorama_hemisphere + value.panorama_vr180, + value.pupillary_distance ); } diff --git a/ui/zenoedit/viewport/optixviewport.h b/ui/zenoedit/viewport/optixviewport.h index debc0b4680..71672cd701 100644 --- a/ui/zenoedit/viewport/optixviewport.h +++ b/ui/zenoedit/viewport/optixviewport.h @@ -44,7 +44,7 @@ public slots: void onCleanUpScene(); void onSetBackground(bool bShowBg); - void onSetData(float, float, float, bool, bool, bool, bool); + void onSetData(float, float, float, bool, bool, bool, bool, float); private: Zenovis *m_zenoVis; @@ -108,7 +108,7 @@ class ZOptixViewport : public QWidget void sig_updateCameraProp(float aperture, float disPlane, UI_VECTYPE skipParam = UI_VECTYPE()); void sig_cleanUpScene(); void sig_setBackground(bool bShowBg); - void sig_setdata_on_optix_thread(float, float, float, bool, bool, bool, bool); + void sig_setdata_on_optix_thread(float, float, float, bool, bool, bool, bool, float); public slots: void onFrameRunFinished(int frame); diff --git a/zeno/src/nodes/CameraNodes.cpp b/zeno/src/nodes/CameraNodes.cpp index 7ca8ee3f40..cf700e13b9 100644 --- a/zeno/src/nodes/CameraNodes.cpp +++ b/zeno/src/nodes/CameraNodes.cpp @@ -59,7 +59,8 @@ struct SetPhysicalCamera : INode { ud.set2("aces", get_input2("aces")); ud.set2("exposure", get_input2("exposure")); ud.set2("panorama_camera", get_input2("panorama_camera")); - ud.set2("panorama_hemisphere", get_input2("panorama_hemisphere")); + ud.set2("panorama_vr180", get_input2("panorama_vr180")); + ud.set2("pupillary_distance", get_input2("pupillary_distance")); set_output("camera", std::move(camera)); } @@ -75,7 +76,8 @@ ZENO_DEFNODE(SetPhysicalCamera)({ {"bool", "exposure", "0"}, {"bool", "exposure", "0"}, {"bool", "panorama_camera", "0"}, - {"bool", "panorama_hemisphere", "0"}, + {"bool", "panorama_vr180", "0"}, + {"float", "pupillary_distance", "0.06"}, }, { {"CameraObject", "camera"}, diff --git a/zenovis/include/zenovis/Camera.h b/zenovis/include/zenovis/Camera.h index fe38e5181c..1249175294 100644 --- a/zenovis/include/zenovis/Camera.h +++ b/zenovis/include/zenovis/Camera.h @@ -18,7 +18,8 @@ struct ZOptixCameraSettingInfo { bool aces = false; bool exposure = false; bool panorama_camera = false; - bool panorama_hemisphere = false; + bool panorama_vr180 = false; + float pupillary_distance = 0.06; }; struct Camera { @@ -77,7 +78,7 @@ struct Camera { float get_safe_frames() const; bool is_locked_window() const; void setCamera(zeno::CameraData const &cam); - void setPhysicalCamera(float aperture, float shutter_speed, float iso, bool aces, bool exposure, bool panorama_camera, bool panorama_hemisphere); + void setPhysicalCamera(float aperture, float shutter_speed, float iso, bool aces, bool exposure, bool panorama_camera, bool panorama_vr180, float pupillary_distance); void placeCamera(glm::vec3 pos, glm::vec3 front, glm::vec3 up); void lookCamera(float cx, float cy, float cz, float theta, float phi, float radius, bool ortho_mode, float fov, float aperture, float focalPlaneDistance); void focusCamera(float cx, float cy, float cz, float radius); diff --git a/zenovis/src/Camera.cpp b/zenovis/src/Camera.cpp index fd76a6ecd4..e5ca2178b4 100644 --- a/zenovis/src/Camera.cpp +++ b/zenovis/src/Camera.cpp @@ -52,14 +52,15 @@ void Camera::setCamera(zeno::CameraData const &cam) { this->m_need_sync = true; } -void Camera::setPhysicalCamera(float aperture, float shutter_speed, float iso, bool aces, bool exposure, bool panorama_camera, bool panorama_hemisphere) { +void Camera::setPhysicalCamera(float aperture, float shutter_speed, float iso, bool aces, bool exposure, bool panorama_camera, bool panorama_vr180, float pupillary_distance) { this->zOptixCameraSettingInfo.aperture = aperture; this->zOptixCameraSettingInfo.shutter_speed = shutter_speed; this->zOptixCameraSettingInfo.iso = iso; this->zOptixCameraSettingInfo.aces = aces; this->zOptixCameraSettingInfo.exposure = exposure; this->zOptixCameraSettingInfo.panorama_camera = panorama_camera; - this->zOptixCameraSettingInfo.panorama_hemisphere = panorama_hemisphere; + this->zOptixCameraSettingInfo.panorama_vr180 = panorama_vr180; + this->zOptixCameraSettingInfo.pupillary_distance = pupillary_distance; } static glm::mat4 MakeInfReversedZProjRH(float fovY_radians, float aspectWbyH, float zNear) { diff --git a/zenovis/src/optx/RenderEngineOptx.cpp b/zenovis/src/optx/RenderEngineOptx.cpp index 1f0827e572..d65cce7667 100644 --- a/zenovis/src/optx/RenderEngineOptx.cpp +++ b/zenovis/src/optx/RenderEngineOptx.cpp @@ -783,7 +783,8 @@ struct GraphicsManager { ud.get2("aces"), ud.get2("exposure"), ud.get2("panorama_camera"), - ud.get2("panorama_hemisphere") + ud.get2("panorama_vr180"), + ud.get2("pupillary_distance") ); } } @@ -825,7 +826,8 @@ struct GraphicsManager { ud.get2("aces"), ud.get2("exposure"), ud.get2("panorama_camera"), - ud.get2("panorama_hemisphere") + ud.get2("panorama_vr180"), + ud.get2("pupillary_distance") ); } } @@ -1069,7 +1071,8 @@ struct RenderEngineOptx : RenderEngine, zeno::disable_copy { cam.zOptixCameraSettingInfo.aces, cam.zOptixCameraSettingInfo.exposure, cam.zOptixCameraSettingInfo.panorama_camera, - cam.zOptixCameraSettingInfo.panorama_hemisphere + cam.zOptixCameraSettingInfo.panorama_vr180, + cam.zOptixCameraSettingInfo.pupillary_distance ); } diff --git a/zenovis/xinxinoptix/PTKernel.cu b/zenovis/xinxinoptix/PTKernel.cu index ede80e4f38..f884ba3de1 100644 --- a/zenovis/xinxinoptix/PTKernel.cu +++ b/zenovis/xinxinoptix/PTKernel.cu @@ -207,14 +207,14 @@ extern "C" __global__ void __raygen__rg() cam.right.y, cam.up.y, -cam.front.y, cam.right.z, cam.up.z, -cam.front.z ); - if (params.physical_camera_panorama_hemisphere) { + if (params.physical_camera_panorama_vr180) { int idxx = idx.x >= w/2? idx.x - w/2 : idx.x; phi = ((float(idxx) + subpixel_jitter.x) / float(w / 2) + 0.5f) * M_PIf; if (idx.x < w / 2) { - ray_origin = camera_transform * make_float3(-0.03f, 0.0f, 0.0f); + ray_origin = camera_transform * make_float3(-params.physical_camera_pupillary_distance, 0.0f, 0.0f); } else { - ray_origin = camera_transform * make_float3(0.03f, 0.0f, 0.0f); + ray_origin = camera_transform * make_float3(params.physical_camera_pupillary_distance, 0.0f, 0.0f); } } float theta = (float(idx.y) + subpixel_jitter.y) / float(h) * M_PIf; diff --git a/zenovis/xinxinoptix/optixPathTracer.cpp b/zenovis/xinxinoptix/optixPathTracer.cpp index 40680ff19a..f32797a5d2 100644 --- a/zenovis/xinxinoptix/optixPathTracer.cpp +++ b/zenovis/xinxinoptix/optixPathTracer.cpp @@ -3696,14 +3696,15 @@ void set_window_size(int nx, int ny) { resize_dirty = true; } -void set_physical_camera_param(float aperture, float shutter_speed, float iso, bool aces, bool exposure, bool panorama_camera, bool panorama_hemisphere) { +void set_physical_camera_param(float aperture, float shutter_speed, float iso, bool aces, bool exposure, bool panorama_camera, bool panorama_vr180, float pupillary_distance) { state.params.physical_camera_aperture = aperture; state.params.physical_camera_shutter_speed = shutter_speed; state.params.physical_camera_iso = iso; state.params.physical_camera_aces = aces; state.params.physical_camera_exposure = exposure; state.params.physical_camera_panorama_camera = panorama_camera; - state.params.physical_camera_panorama_hemisphere = panorama_hemisphere; + state.params.physical_camera_panorama_vr180 = panorama_vr180; + state.params.physical_camera_pupillary_distance = pupillary_distance; } void set_perspective(float const *U, float const *V, float const *W, float const *E, float aspect, float fov, float fpd, float aperture) { set_perspective_by_fov(U,V,W,E,aspect,fov,0,0.024f,fpd,aperture,0.0f,0.0f,0.0f,0.0f); diff --git a/zenovis/xinxinoptix/optixPathTracer.h b/zenovis/xinxinoptix/optixPathTracer.h index db9b8c3a67..1f1714ec57 100644 --- a/zenovis/xinxinoptix/optixPathTracer.h +++ b/zenovis/xinxinoptix/optixPathTracer.h @@ -255,7 +255,8 @@ struct Params bool physical_camera_aces; bool physical_camera_exposure; bool physical_camera_panorama_camera; - bool physical_camera_panorama_hemisphere; + bool physical_camera_panorama_vr180; + float physical_camera_pupillary_distance; }; diff --git a/zenovis/xinxinoptix/xinxinoptixapi.h b/zenovis/xinxinoptix/xinxinoptixapi.h index 47600ccf39..b37b55f2fd 100644 --- a/zenovis/xinxinoptix/xinxinoptixapi.h +++ b/zenovis/xinxinoptix/xinxinoptixapi.h @@ -54,7 +54,7 @@ void optixupdateend(); void set_window_size(int nx, int ny); void set_outside_random_number(int32_t outside_random_number); void set_perspective(float const *U, float const *V, float const *W, float const *E, float aspect, float fov, float fpd, float aperture); -void set_physical_camera_param(float aperture, float shutter_speed, float iso, bool aces, bool exposure, bool panorama_camera, bool panorama_hemisphere); +void set_physical_camera_param(float aperture, float shutter_speed, float iso, bool aces, bool exposure, bool panorama_camera, bool panorama_vr180, float pupillary_distance); void set_perspective_by_fov(float const *U, float const *V, float const *W, float const *E, float aspect, float fov, int fov_type, float L, float focal_distance, float aperture, float pitch, float yaw, float h_shift, float v_shift); void set_perspective_by_focal_length(float const *U, float const *V, float const *W, float const *E, float aspect, float focal_length, float w, float h, float focal_distance, float aperture, float pitch, float yaw, float h_shift, float v_shift); void load_object(std::string const &key, std::string const &mtlid, const std::string& instID, float const *verts, size_t numverts, int const *tris, size_t numtris, std::map> const &vtab,int const *matids, std::vector const &matNameList); From 35f29416b86bf8d80f777f9b835c7adf8b88d223 Mon Sep 17 00:00:00 2001 From: zhouhang95 <765229842@qq.com> Date: Sun, 14 Apr 2024 02:07:55 +0800 Subject: [PATCH 6/7] fix --- zenovis/xinxinoptix/PTKernel.cu | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/zenovis/xinxinoptix/PTKernel.cu b/zenovis/xinxinoptix/PTKernel.cu index f884ba3de1..e8ba24a947 100644 --- a/zenovis/xinxinoptix/PTKernel.cu +++ b/zenovis/xinxinoptix/PTKernel.cu @@ -211,10 +211,10 @@ extern "C" __global__ void __raygen__rg() int idxx = idx.x >= w/2? idx.x - w/2 : idx.x; phi = ((float(idxx) + subpixel_jitter.x) / float(w / 2) + 0.5f) * M_PIf; if (idx.x < w / 2) { - ray_origin = camera_transform * make_float3(-params.physical_camera_pupillary_distance, 0.0f, 0.0f); + ray_origin = camera_transform * make_float3(-params.physical_camera_pupillary_distance / 2.0f, 0.0f, 0.0f); } else { - ray_origin = camera_transform * make_float3(params.physical_camera_pupillary_distance, 0.0f, 0.0f); + ray_origin = camera_transform * make_float3(params.physical_camera_pupillary_distance / 2.0f, 0.0f, 0.0f); } } float theta = (float(idx.y) + subpixel_jitter.y) / float(h) * M_PIf; From 477e9e4a1ae07124c37ba738875463cfdfe52e37 Mon Sep 17 00:00:00 2001 From: zhouhang95 <765229842@qq.com> Date: Sun, 28 Apr 2024 18:38:58 +0800 Subject: [PATCH 7/7] fix ui --- ui/zenoedit/dialog/zrecorddlg.ui | 20 -------------------- 1 file changed, 20 deletions(-) diff --git a/ui/zenoedit/dialog/zrecorddlg.ui b/ui/zenoedit/dialog/zrecorddlg.ui index 7b27864e41..71c3a8ed68 100644 --- a/ui/zenoedit/dialog/zrecorddlg.ui +++ b/ui/zenoedit/dialog/zrecorddlg.ui @@ -180,26 +180,6 @@ - - - - PanoramaCamera - - - false - - - - - - - Hemisphere - - - false - - -