From 9d0266280fe8e2fd5197248458a2327e74006153 Mon Sep 17 00:00:00 2001 From: Damien Picard Date: Mon, 13 Oct 2025 02:52:16 +0200 Subject: [PATCH] Cycles: OSL Camera: Allow mm as parameter unit, use as cam distance Commit 6c6d1a9b63 allowed several units to OSL camera shaders' parameters. Only meters 'm' were supported as distance units, because others cannot be converted automatically into the shader' unit. This commit allows using 'mm' in addition to 'm', and makes the Blender property use a 'DISTANCE_CAMERA' subtype. This assumes that someone using 'mm' specifically wants to use the value for camera parameters, which means it can be used as is, without any conversion in the shader. The camera templates were updated to use a focal length in mm. Pull Request: https://projects.blender.org/blender/blender/pulls/147347 --- intern/cycles/blender/addon/osl.py | 2 ++ scripts/templates_osl/advanced_camera.osl | 4 +++- scripts/templates_osl/basic_camera.osl | 4 +++- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/intern/cycles/blender/addon/osl.py b/intern/cycles/blender/addon/osl.py index df206eeaace..09fa3fa4c37 100644 --- a/intern/cycles/blender/addon/osl.py +++ b/intern/cycles/blender/addon/osl.py @@ -150,6 +150,8 @@ def osl_param_ensure_property(ccam, param): ui.update(subtype='ANGLE') elif datatype is float and metadata.get('unit') == 'm': ui.update(subtype='DISTANCE') + elif datatype is float and metadata.get('unit') == 'mm': + ui.update(subtype='DISTANCE_CAMERA') elif datatype is float and metadata.get('unit') in ('s', 'sec'): ui.update(subtype='TIME_ABSOLUTE') elif metadata.get('slider'): diff --git a/scripts/templates_osl/advanced_camera.osl b/scripts/templates_osl/advanced_camera.osl index f2b004968cd..1997886177b 100644 --- a/scripts/templates_osl/advanced_camera.osl +++ b/scripts/templates_osl/advanced_camera.osl @@ -26,7 +26,9 @@ float invertDistortionModel(float x, float y, float k1, float k2, float k3) return -1.0; } -shader camera(float focal_length = 50.0 [[ float min = 0.0, float sensitivity = 0.2 ]], +shader camera(float focal_length = 50.0 [[ float min = 0.0, + string unit = "mm", + float sensitivity = 0.2 ]], int do_distortion = 0 [[ string widget = "checkBox"]], int do_swirl = 0 [[ string widget = "checkBox"]], int do_dof = 0 [[ string widget = "checkBox"]], diff --git a/scripts/templates_osl/basic_camera.osl b/scripts/templates_osl/basic_camera.osl index 19ccae3f8c5..71f20247d2b 100644 --- a/scripts/templates_osl/basic_camera.osl +++ b/scripts/templates_osl/basic_camera.osl @@ -1,6 +1,8 @@ /* A basic perspective camera. */ -shader camera(float focal_length = 90.0, +shader camera(float focal_length = 90.0 [[ float min = 0.0, + string unit = "mm", + float sensitivity = 0.2 ]], output point position = 0.0, output vector direction = 0.0, output color throughput = 1.0)