From 5fbeb3c9a0c74f466f8c6e8bf6d4c44bc8554ff7 Mon Sep 17 00:00:00 2001 From: Alejandro Alvarez Melucci <163010988+AlejandroAlvarezMelucciDCL@users.noreply.github.com> Date: Tue, 4 Feb 2025 16:56:36 -0300 Subject: [PATCH] feat: dynamic lights (#234) * Initial draft of LightSource component * Fixed conflicting ids * Refactor structure * Fixed ids * Removed unused property and adjusted ids again * Fixed color reference * Fixed lowecase to oneof name * Test to fix proto builds * Renamed file to properly generate classes with the intended name * Updated documentation * Added cookie field * Added missing import * Fixed proper type reference * Set optional properties, improved documentation * Updated shadow mask type to TextureUnion * Reordered properties to support different defaults on different messages --- .../sdk/components/light_source.proto | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 proto/decentraland/sdk/components/light_source.proto diff --git a/proto/decentraland/sdk/components/light_source.proto b/proto/decentraland/sdk/components/light_source.proto new file mode 100644 index 00000000..67c9a3c9 --- /dev/null +++ b/proto/decentraland/sdk/components/light_source.proto @@ -0,0 +1,35 @@ +syntax = "proto3"; +package decentraland.sdk.components; +import "decentraland/sdk/components/common/id.proto"; +import "decentraland/common/colors.proto"; +import "decentraland/common/texture.proto"; +option (common.ecs_component_id) = 1079; + +message PBLightSource { + optional bool active = 4; // default = true, whether the lightSource is active or not. + optional decentraland.common.Color3 color = 1; // default = Color.white, the tint of the light, in RGB format where each component is a floating point value with a range from 0 to 1. + optional float brightness = 2; // default = 250, ranges from 1 (dim) to 100,000 (very bright), expressed in Lumens for Point and Spot. + optional float range = 3; // default = 10, how far the light travels, expressed in meters. + + oneof type { + Point point = 6; + Spot spot = 7; + } + + message Point { + optional ShadowType shadow = 5; // default = ShadowType.ST_NONE The type of shadow the light source supports. + } + + message Spot { + optional float inner_angle = 1; // default = 21.8. Inner angle can't be higher than outer angle, otherwise will default to same value. Min value is 0. Max value is 179. + optional float outer_angle = 2; // default = 30. Outer angle can't be lower than inner angle, otherwise will inner angle will be set to same value. Max value is 179. + optional ShadowType shadow = 5; // default = ShadowType.ST_NONE The type of shadow the light source supports. + optional decentraland.common.TextureUnion shadow_mask_texture = 8; // Texture mask through which shadows are cast to simulate caustics, soft shadows, and light shapes such as light entering from a window. + } + + enum ShadowType { + ST_NONE = 0; // No shadows are cast from this LightSource. + ST_SOFT = 1; // More realistic type of shadow that reduces block artifacts, noise or pixelation, but requires more processing. + ST_HARD = 2; // Less realistic type of shadow but more performant, uses hard edges. + } +}