From 1ad50e7c4019f59735812b8c4440f07dd95b31b4 Mon Sep 17 00:00:00 2001 From: luboslenco Date: Tue, 11 Feb 2025 17:57:20 +0100 Subject: [PATCH] Cleanup --- armorcore/sources/ts/data.ts | 14 --- armorcore/sources/ts/light_data.ts | 21 ---- armorcore/sources/ts/light_object.ts | 43 --------- armorcore/sources/ts/mesh_object.ts | 4 +- armorcore/sources/ts/object.ts | 5 +- armorcore/sources/ts/render_path.ts | 11 --- armorcore/sources/ts/scene.ts | 38 +------- armorcore/sources/ts/uniforms.ts | 90 ++++++++---------- armorcore/tools/io_export_arm.py | 1 - armorforge/assets/meshes/box.arm | Bin 1351 -> 1334 bytes armorforge/assets/meshes/box_bevel.arm | Bin 19783 -> 19766 bytes armorforge/assets/meshes/cone.arm | Bin 6434 -> 6417 bytes armorforge/assets/meshes/cylinder.arm | Bin 10006 -> 9989 bytes armorforge/assets/meshes/sphere.arm | Bin 177472 -> 177455 bytes armorforge/assets/meshes/torus.arm | Bin 203581 -> 203564 bytes armorforge/sources/base_ext.ts | 2 - armorlab/sources/make_mesh.ts | 4 - armorpaint/assets/meshes/cube_shared_uvs.arm | Bin 1279 -> 1262 bytes .../assets/plugins/viewport_celshade.js | 3 +- armorpaint/sources/make_mesh.ts | 6 -- armorsculpt/sources/make_mesh.ts | 4 - base/assets/Scene.arm | Bin 178826 -> 178478 bytes base/assets/shader_datas.arm | Bin 23822 -> 23663 bytes base/shaders/deferred_light.frag.glsl | 16 +--- base/shaders/std/math.glsl | 4 - base/sources/camera.ts | 16 ++-- base/sources/ui_menu.ts | 77 +++++++-------- base/sources/util_encode.ts | 2 - base/sources/util_render.ts | 24 ++--- base/sources/viewport.ts | 9 +- 30 files changed, 98 insertions(+), 296 deletions(-) delete mode 100644 armorcore/sources/ts/light_data.ts delete mode 100644 armorcore/sources/ts/light_object.ts diff --git a/armorcore/sources/ts/data.ts b/armorcore/sources/ts/data.ts index fa7a2024..840cffec 100644 --- a/armorcore/sources/ts/data.ts +++ b/armorcore/sources/ts/data.ts @@ -2,7 +2,6 @@ // Global data list let data_cached_scene_raws: map_t = map_create(); let data_cached_meshes: map_t = map_create(); -let data_cached_lights: map_t = map_create(); let data_cached_cameras: map_t = map_create(); let data_cached_materials: map_t = map_create(); let data_cached_worlds: map_t = map_create(); @@ -30,18 +29,6 @@ function data_get_mesh(file: string, name: string): mesh_data_t { return b; } -function data_get_light(file: string, name: string): light_data_t { - let handle: string = file + name; - let cached: light_data_t = map_get(data_cached_lights, handle); - if (cached != null) { - return cached; - } - - let b: light_data_t = light_data_parse(file, name); - map_set(data_cached_lights, handle, b); - return b; -} - function data_get_camera(file: string, name: string): camera_data_t { let handle: string = file + name; let cached: camera_data_t = map_get(data_cached_cameras, handle); @@ -251,7 +238,6 @@ function data_delete_all() { data_cached_shaders = map_create(); data_cached_scene_raws = map_create(); - data_cached_lights = map_create(); data_cached_cameras = map_create(); data_cached_materials = map_create(); data_cached_worlds = map_create(); diff --git a/armorcore/sources/ts/light_data.ts b/armorcore/sources/ts/light_data.ts deleted file mode 100644 index 32f06045..00000000 --- a/armorcore/sources/ts/light_data.ts +++ /dev/null @@ -1,21 +0,0 @@ - -function light_data_parse(name: string, id: string): light_data_t { - let format: scene_t = data_get_scene_raw(name); - let raw: light_data_t = light_data_get_raw_by_name(format.light_datas, id); - if (raw == null) { - iron_log("Light data '" + id + "' not found!"); - } - return raw; -} - -function light_data_get_raw_by_name(datas: light_data_t[], name: string): light_data_t { - if (name == "") { - return datas[0]; - } - for (let i: i32 = 0; i < datas.length; ++i) { - if (datas[i].name == name) { - return datas[i]; - } - } - return null; -} diff --git a/armorcore/sources/ts/light_object.ts b/armorcore/sources/ts/light_object.ts deleted file mode 100644 index 73c412cd..00000000 --- a/armorcore/sources/ts/light_object.ts +++ /dev/null @@ -1,43 +0,0 @@ - -type light_object_t = { - base?: object_t; - data?: light_data_t; - v?: mat4_t; -}; - -function light_object_create(data: light_data_t): light_object_t { - let raw: light_object_t = {}; - raw.v = mat4_identity(); - raw.base = object_create(false); - raw.base.ext = raw; - raw.base.ext_type = "light_object_t"; - raw.data = data; - - array_push(scene_lights, raw); - return raw; -} - -function light_object_remove(raw: light_object_t) { - array_remove(scene_lights, raw); - if (_render_path_light == raw) { - _render_path_light = null; - } - - object_remove_super(raw.base); -} - -function light_object_build_mat(raw: light_object_t, camera: camera_object_t) { - transform_build_matrix(raw.base.transform); -} - -function light_object_right(raw: light_object_t): vec4_t { - return vec4_create(raw.v.m00, raw.v.m10, raw.v.m20); -} - -function light_object_up(raw: light_object_t): vec4_t { - return vec4_create(raw.v.m01, raw.v.m11, raw.v.m21); -} - -function light_object_look(raw: light_object_t): vec4_t { - return vec4_create(raw.v.m02, raw.v.m12, raw.v.m22); -} diff --git a/armorcore/sources/ts/mesh_object.ts b/armorcore/sources/ts/mesh_object.ts index 8c529f9b..3c250926 100644 --- a/armorcore/sources/ts/mesh_object.ts +++ b/armorcore/sources/ts/mesh_object.ts @@ -94,7 +94,7 @@ function mesh_object_cull_material(raw: mesh_object_t, context: string): bool { return mesh_object_set_culled(raw, false); } -function mesh_object_cull_mesh(raw: mesh_object_t, context: string, camera: camera_object_t, light: light_object_t): bool { +function mesh_object_cull_mesh(raw: mesh_object_t, context: string, camera: camera_object_t): bool { if (camera == null) { return false; } @@ -137,7 +137,7 @@ function mesh_object_render(raw: mesh_object_t, context: string, bind_params: st if (!raw.base.visible) { return; // Skip render if object is hidden } - if (mesh_object_cull_mesh(raw, context, scene_camera, _render_path_light)) { + if (mesh_object_cull_mesh(raw, context, scene_camera)) { return; } if (mesh_object_cull_material(raw, context)) { diff --git a/armorcore/sources/ts/object.ts b/armorcore/sources/ts/object.ts index 3f8fd989..c0da3adf 100644 --- a/armorcore/sources/ts/object.ts +++ b/armorcore/sources/ts/object.ts @@ -13,7 +13,7 @@ type object_t = { visible?: bool; // Skip render, keep updating culled?: bool; // base_object_t was culled last frame is_empty?: bool; - ext?: any; // mesh_object_t | camera_object_t | light_object_t | speaker_object_t + ext?: any; // mesh_object_t | camera_object_t | speaker_object_t ext_type?: string; }; @@ -83,9 +83,6 @@ function object_remove(raw: object_t) { else if (raw.ext_type == "camera_object_t") { camera_object_remove(raw.ext); } - else if (raw.ext_type == "light_object_t") { - light_object_remove(raw.ext); - } ///if arm_audio else if (raw.ext_type == "speaker_object_t") { speaker_object_remove(raw.ext); diff --git a/armorcore/sources/ts/render_path.ts b/armorcore/sources/ts/render_path.ts index 4bb0b49d..d361ef43 100644 --- a/armorcore/sources/ts/render_path.ts +++ b/armorcore/sources/ts/render_path.ts @@ -36,7 +36,6 @@ let render_path_current_h: i32; let _render_path_frame_time: f32 = 0.0; let _render_path_frame: i32 = 0; let _render_path_current_target: render_target_t = null; -let _render_path_light: light_object_t = null; let _render_path_current_image: image_t = null; let _render_path_draw_order: draw_order_t = draw_order_t.DIST; let _render_path_paused: bool = false; @@ -73,16 +72,6 @@ function render_path_render_frame() { render_path_current_h = app_h(); _render_path_meshes_sorted = false; - for (let i: i32 = 0; i < scene_lights.length; ++i) { - let l: light_object_t = scene_lights[i]; - if (l.base.visible) { - light_object_build_mat(l, scene_camera); - } - } - if (scene_lights.length > 0) { - _render_path_light = scene_lights[0]; - } - render_path_commands(); _render_path_frame++; diff --git a/armorcore/sources/ts/scene.ts b/armorcore/sources/ts/scene.ts index 70222465..f4b8c623 100644 --- a/armorcore/sources/ts/scene.ts +++ b/armorcore/sources/ts/scene.ts @@ -2,7 +2,6 @@ let scene_camera: camera_object_t; let scene_world: world_data_t; let scene_meshes: mesh_object_t[]; -let scene_lights: light_object_t[]; let scene_cameras: camera_object_t[]; ///if arm_audio let scene_speakers: speaker_object_t[]; @@ -28,7 +27,6 @@ let _scene_objects_count: i32; function scene_create(format: scene_t): object_t { _scene_uid = _scene_uid_counter++; scene_meshes = []; - scene_lights = []; scene_cameras = []; ///if arm_audio scene_speakers = []; @@ -66,10 +64,6 @@ function scene_remove() { let o: mesh_object_t = scene_meshes[i]; mesh_object_remove(o); } - for (let i: i32 = 0; i < scene_lights.length; ++i) { - let o: light_object_t = scene_lights[i]; - light_object_remove(o); - } for (let i: i32 = 0; i < scene_cameras.length; ++i) { let o: camera_object_t = scene_cameras[i]; camera_object_remove(o); @@ -145,16 +139,6 @@ function scene_get_mesh(name: string): mesh_object_t { return null; } -function scene_get_light(name: string): light_object_t { - for (let i: i32 = 0; i < scene_lights.length; ++i) { - let l: light_object_t = scene_lights[i]; - if (l.base.name == name) { - return l; - } - } - return null; -} - function scene_get_camera(name: string): camera_object_t { for (let i: i32 = 0; i < scene_cameras.length; ++i) { let c: camera_object_t = scene_cameras[i]; @@ -193,12 +177,6 @@ function scene_add_mesh_object(data: mesh_data_t, materials: material_data_t[], return object; } -function scene_add_light_object(data: light_data_t, parent: object_t = null): light_object_t { - let object: light_object_t = light_object_create(data); - parent != null ? object_set_parent(object.base, parent) : object_set_parent(object.base, _scene_root); - return object; -} - function scene_add_camera_object(data: camera_data_t, parent: object_t = null): camera_object_t { let object: camera_object_t = camera_object_create(data); parent != null ? object_set_parent(object.base, parent) : object_set_parent(object.base, _scene_root); @@ -305,11 +283,6 @@ function scene_create_object(o: obj_t, format: scene_t, parent: object_t, parent let object: camera_object_t = scene_add_camera_object(b, parent); return scene_return_object(object.base, o); } - else if (o.type == "light_object") { - let b: light_data_t = data_get_light(scene_name, o.data_ref); - let object: light_object_t = scene_add_light_object(b, parent); - return scene_return_object(object.base, o); - } else if (o.type == "mesh_object") { if (o.material_refs == null || o.material_refs.length == 0) { return scene_create_mesh_object(o, format, parent, parent_object, null); @@ -479,7 +452,6 @@ type scene_t = { name?: string; objects?: obj_t[]; mesh_datas?: mesh_data_t[]; - light_datas?: light_data_t[]; camera_datas?: camera_data_t[]; camera_ref?: string; material_datas?: material_data_t[]; @@ -539,14 +511,6 @@ type index_array_t = { values?: u32_array_t; // size = 3 }; -type light_data_t = { - name?: string; - color?: i32; - strength?: f32; - size?: f32; // Area light - size_y?: f32; -}; - type camera_data_t = { name?: string; near_plane?: f32; @@ -699,7 +663,7 @@ type irradiance_t = { type obj_t = { name?: string; - type?: string; // object, mesh_object, light_object, camera_object, speaker_object, decal_object + type?: string; // object, mesh_object, camera_object, speaker_object data_ref?: string; transform?: f32_array_t; dimensions?: f32_array_t; // Geometry objects diff --git a/armorcore/sources/ts/uniforms.ts b/armorcore/sources/ts/uniforms.ts index 4aa7780d..89c0f859 100644 --- a/armorcore/sources/ts/uniforms.ts +++ b/armorcore/sources/ts/uniforms.ts @@ -17,6 +17,28 @@ let uniforms_i32_links: (o: object_t, md: material_data_t, s: string)=>i32 = nul let uniforms_pos_unpack: f32 = 1.0; let uniforms_tex_unpack: f32 = 1.0; +let uniforms_light_size_x: f32 = 3.0; +let uniforms_light_size_y: f32 = 0.005; +let uniforms_light_strength: f32 = 1.0; +let uniforms_light_world: mat4_t = mat4_create( + 0.9502051472663879, + -0.19612328708171844, + 0.24216893315315247, + 0.7578424215316772, + 0.3094223141670227, + 0.6860249638557434, + -0.658504068851471, + -2.0724263191223145, + -0.03698595613241196, + 0.7006464004516602, + 0.7125493884086609, + 1.9363592863082886, + 0, + 0, + 0, + 1 +); + function uniforms_set_context_consts(context: shader_context_t, bind_params: string[]) { if (context.constants != null) { for (let i: i32 = 0; i < context.constants.length; ++i) { @@ -159,7 +181,6 @@ function uniforms_set_context_const(location: kinc_const_loc_t, c: shader_const_ } let camera: camera_object_t = scene_camera; - let light: light_object_t = _render_path_light; if (c.type == "mat4") { let m: mat4_t = mat4_nan(); @@ -213,62 +234,29 @@ function uniforms_set_context_const(location: kinc_const_loc_t, c: shader_const_ else if (c.type == "vec3") { let v: vec4_t = vec4_nan(); - if (c.link == "_light_dir") { - if (light != null) { - v = vec4_norm(light_object_look(light)); - } - } - else if (c.link == "_light_pos") { - let light: light_object_t = _render_path_light; - if (light != null) { - v = vec4_create(transform_world_x(light.base.transform), transform_world_y(light.base.transform), transform_world_z(light.base.transform)); - } - } - else if (c.link == "_light_color") { - let light: light_object_t = _render_path_light; - if (light != null) { - let str: f32 = light.base.visible ? light.data.strength : 0.0; - v = vec4_create( - (color_get_rb(light.data.color) / 255) * str, - (color_get_gb(light.data.color) / 255) * str, - (color_get_bb(light.data.color) / 255) * str); - } - } - else if (c.link == "_light_area0") { - if (light != null && light.data.size) { - let f2: f32 = 0.5; - let sx: f32 = light.data.size * f2; - let sy: f32 = light.data.size_y * f2; - v = vec4_create(-sx, sy, 0.0); - v = vec4_apply_mat(v, light.base.transform.world); - } + if (c.link == "_light_area0") { + let sx: f32 = uniforms_light_size_x * uniforms_light_strength * 0.25; + let sy: f32 = uniforms_light_size_y * uniforms_light_strength * 0.25; + v = vec4_create(-sx, sy, 0.0); + v = vec4_apply_mat(v, uniforms_light_world); } else if (c.link == "_light_area1") { - if (light != null && light.data.size) { - let f2: f32 = 0.5; - let sx: f32 = light.data.size * f2; - let sy: f32 = light.data.size_y * f2; - v = vec4_create(sx, sy, 0.0); - v = vec4_apply_mat(v, light.base.transform.world); - } + let sx: f32 = uniforms_light_size_x * uniforms_light_strength * 0.25; + let sy: f32 = uniforms_light_size_y * uniforms_light_strength * 0.25; + v = vec4_create(sx, sy, 0.0); + v = vec4_apply_mat(v, uniforms_light_world); } else if (c.link == "_light_area2") { - if (light != null && light.data.size) { - let f2: f32 = 0.5; - let sx: f32 = light.data.size * f2; - let sy: f32 = light.data.size_y * f2; - v = vec4_create(sx, -sy, 0.0); - v = vec4_apply_mat(v, light.base.transform.world); - } + let sx: f32 = uniforms_light_size_x * uniforms_light_strength * 0.25; + let sy: f32 = uniforms_light_size_y * uniforms_light_strength * 0.25; + v = vec4_create(sx, -sy, 0.0); + v = vec4_apply_mat(v, uniforms_light_world); } else if (c.link == "_light_area3") { - if (light != null && light.data.size) { - let f2: f32 = 0.5; - let sx: f32 = light.data.size * f2; - let sy: f32 = light.data.size_y * f2; - v = vec4_create(-sx, -sy, 0.0); - v = vec4_apply_mat(v, light.base.transform.world); - } + let sx: f32 = uniforms_light_size_x * uniforms_light_strength * 0.25; + let sy: f32 = uniforms_light_size_y * uniforms_light_strength * 0.25; + v = vec4_create(-sx, -sy, 0.0); + v = vec4_apply_mat(v, uniforms_light_world); } else if (c.link == "_camera_pos") { v = vec4_create(transform_world_x(camera.base.transform), transform_world_y(camera.base.transform), transform_world_z(camera.base.transform)); diff --git a/armorcore/tools/io_export_arm.py b/armorcore/tools/io_export_arm.py index c224f308..54130c9e 100644 --- a/armorcore/tools/io_export_arm.py +++ b/armorcore/tools/io_export_arm.py @@ -73,7 +73,6 @@ class ArmoryExporter(bpy.types.Operator, ExportHelper): for o in self.meshArray.items(): self.export_mesh(o) - self.output["light_datas"] = None self.output["camera_datas"] = None self.output["camera_ref"] = None self.output["material_datas"] = None diff --git a/armorforge/assets/meshes/box.arm b/armorforge/assets/meshes/box.arm index 4058ffc1711c8d3c9f0e08f63f559c748c63e071..618d758614a557bad502579aca54c7216e28b97d 100644 GIT binary patch delta 15 XcmX@kwT+AEKKDkZWh|3-vh)D}EyM-6 delta 32 ocmdnSb)1XoKF>y`Wh?^R3=9l8nduoN@hOQViNyydFK6io0H&S`2mk;8 diff --git a/armorforge/assets/meshes/box_bevel.arm b/armorforge/assets/meshes/box_bevel.arm index 67ca2aa03cd0a53c2e374003b3468d6670770abc..9e2fb9db881b182dfe95b2a16d13bae8e20e8c5d 100644 GIT binary patch delta 17 ZcmX>;i*eg5MyC7R8=02*Oy23!2LM8g2WtQT delta 34 qcmdlsi}Cm@MyC5b8=02*2yinnFyv&WXOzUJB$gx=ADFz{ryl^*UJSYb diff --git a/armorforge/assets/meshes/cone.arm b/armorforge/assets/meshes/cone.arm index ed8f676d6f603f47028861a82544140c5e11be74..1745e288f5ce41bc8cc10fc33ec5893b6987c8a4 100644 GIT binary patch delta 15 WcmZ2vG|`CZKKDkZMv2K&B>Dg?2L+t~ delta 32 ncmbPew8)6*KF>y`MhO9K1_p+l%=C{zw#Nq>!nte+ diff --git a/armorforge/assets/meshes/torus.arm b/armorforge/assets/meshes/torus.arm index f2e1ee88dbf7e9c1f02284bad288faa1627ea42f..44b27dade8c6a0e3871a27df44b61d5a7ac69665 100644 GIT binary patch delta 27 jcmdnHjc3g^9;W-;jZCdfjIB&eTbY>WNKIca#oPw~hUW;+ delta 44 zcmZ3pjc4yR9;W*|jZCdfjIB&eTbY>WNC|K=Ffim~re~DIrzDmn79W^CSBkkG060kw A9smFU diff --git a/armorforge/sources/base_ext.ts b/armorforge/sources/base_ext.ts index 7fc82338..5ec55b5c 100644 --- a/armorforge/sources/base_ext.ts +++ b/armorforge/sources/base_ext.ts @@ -2,8 +2,6 @@ function base_ext_init() { sim_init(); - object_remove(scene_lights[0].base); - transform_move(project_paint_objects[0].base.transform, vec4_z_axis(), -999); // Move default cube away tab_scene_new_object("box.arm"); } diff --git a/armorlab/sources/make_mesh.ts b/armorlab/sources/make_mesh.ts index a4d5b51c..77154585 100644 --- a/armorlab/sources/make_mesh.ts +++ b/armorlab/sources/make_mesh.ts @@ -181,9 +181,6 @@ function make_mesh_run(data: material_t, layer_pass: i32 = 0): node_shader_conte node_shader_add_uniform(frag, "vec3 light_area2", "_light_area2"); node_shader_add_uniform(frag, "vec3 light_area3", "_light_area3"); node_shader_add_function(frag, str_ltc_evaluate); - node_shader_add_uniform(frag, "vec3 light_pos", "_point_pos"); - node_shader_add_uniform(frag, "vec3 light_color", "_point_color"); - node_shader_write(frag, "float ldist = distance(wposition, light_pos);"); node_shader_write(frag, "const float LUT_SIZE = 64.0;"); node_shader_write(frag, "const float LUT_SCALE = (LUT_SIZE - 1.0) / LUT_SIZE;"); node_shader_write(frag, "const float LUT_BIAS = 0.5 / LUT_SIZE;"); @@ -197,7 +194,6 @@ function make_mesh_run(data: material_t, layer_pass: i32 = 0): node_shader_conte node_shader_write(frag, "mat3 mident = mat3(1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0);"); node_shader_write(frag, "float ltcdiff = ltc_evaluate(n, vvec, dotnv, wposition, mident, light_area0, light_area1, light_area2, light_area3);"); node_shader_write(frag, "vec3 direct = albedo * ltcdiff + ltcspec * 0.05;"); - node_shader_write(frag, "direct *= light_color * (1.0 / (ldist * ldist));"); node_shader_add_uniform(frag, "vec4 shirr[7]", "_envmap_irradiance"); node_shader_add_function(frag, str_sh_irradiance()); diff --git a/armorpaint/assets/meshes/cube_shared_uvs.arm b/armorpaint/assets/meshes/cube_shared_uvs.arm index 5b72f6d31702ade78f5508b7001bf6b6734e4e53..b0c39d1ce51e69e0127d701ad7c8ff5ad59d50db 100644 GIT binary patch delta 15 Wcmey*`Hqw6KKDkZIF`wUEPVhmLIsxq delta 32 ncmaFI`Ja>NKF>y`I2HkJ1_p+l%=C{zw#Nq>!<5~IvtfC6$ diff --git a/armorpaint/assets/plugins/viewport_celshade.js b/armorpaint/assets/plugins/viewport_celshade.js index 862130e4..aaa8fb29 100644 --- a/armorpaint/assets/plugins/viewport_celshade.js +++ b/armorpaint/assets/plugins/viewport_celshade.js @@ -3,8 +3,9 @@ let plugin = plugin_create(); // Register custom viewport shader context_set_viewport_shader(function(shader) { - node_shader_add_uniform(shader, "vec3 light_dir", "_light_dir"); + // node_shader_add_uniform(shader, "vec3 light_dir", "_light_dir"); node_shader_write(shader, " \ + vec3 light_dir = vec3(0.5, 0.5, -0.5);\ float dotnl = max(dot(n, light_dir), 0.0); \ output_color = basecol * step(0.5, dotnl) + basecol; \ "); diff --git a/armorpaint/sources/make_mesh.ts b/armorpaint/sources/make_mesh.ts index 34afad79..078a7fdd 100644 --- a/armorpaint/sources/make_mesh.ts +++ b/armorpaint/sources/make_mesh.ts @@ -398,11 +398,6 @@ function make_mesh_run(data: material_t, layer_pass: i32 = 0): node_shader_conte node_shader_add_uniform(frag, "vec3 light_area2", "_light_area2"); node_shader_add_uniform(frag, "vec3 light_area3", "_light_area3"); node_shader_add_function(frag, str_ltc_evaluate); - node_shader_add_uniform(frag, "vec3 light_pos", "_point_pos"); - node_shader_add_uniform(frag, "vec3 light_color", "_point_color"); - // write(frag, "float dotnl = max(dot(n, normalize(light_pos - wposition)), 0.0);"); - // write(frag, "vec3 direct = albedo * dotnl;"); - node_shader_write(frag, "float ldist = distance(wposition, light_pos);"); node_shader_write(frag, "const float LUT_SIZE = 64.0;"); node_shader_write(frag, "const float LUT_SCALE = (LUT_SIZE - 1.0) / LUT_SIZE;"); node_shader_write(frag, "const float LUT_BIAS = 0.5 / LUT_SIZE;"); @@ -416,7 +411,6 @@ function make_mesh_run(data: material_t, layer_pass: i32 = 0): node_shader_conte node_shader_write(frag, "mat3 mident = mat3(1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0);"); node_shader_write(frag, "float ltcdiff = ltc_evaluate(n, vvec, dotnv, wposition, mident, light_area0, light_area1, light_area2, light_area3);"); node_shader_write(frag, "vec3 direct = albedo * ltcdiff + ltcspec * 0.05;"); - node_shader_write(frag, "direct *= light_color * (1.0 / (ldist * ldist));"); node_shader_add_uniform(frag, "vec4 shirr[7]", "_envmap_irradiance"); node_shader_add_function(frag, str_sh_irradiance()); diff --git a/armorsculpt/sources/make_mesh.ts b/armorsculpt/sources/make_mesh.ts index e4824224..20be76bd 100644 --- a/armorsculpt/sources/make_mesh.ts +++ b/armorsculpt/sources/make_mesh.ts @@ -283,9 +283,6 @@ function make_mesh_run(data: material_t, layer_pass: i32 = 0): node_shader_conte node_shader_add_uniform(frag, "vec3 light_area2", "_light_area2"); node_shader_add_uniform(frag, "vec3 light_area3", "_light_area3"); node_shader_add_function(frag, str_ltc_evaluate); - node_shader_add_uniform(frag, "vec3 light_pos", "_point_pos"); - node_shader_add_uniform(frag, "vec3 light_color", "_point_color"); - node_shader_write(frag, "float ldist = distance(wposition, light_pos);"); node_shader_write(frag, "const float LUT_SIZE = 64.0;"); node_shader_write(frag, "const float LUT_SCALE = (LUT_SIZE - 1.0) / LUT_SIZE;"); node_shader_write(frag, "const float LUT_BIAS = 0.5 / LUT_SIZE;"); @@ -299,7 +296,6 @@ function make_mesh_run(data: material_t, layer_pass: i32 = 0): node_shader_conte node_shader_write(frag, "mat3 mident = mat3(1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0);"); node_shader_write(frag, "float ltcdiff = ltc_evaluate(n, vvec, dotnv, wposition, mident, light_area0, light_area1, light_area2, light_area3);"); node_shader_write(frag, "vec3 direct = albedo * ltcdiff + ltcspec * 0.05;"); - node_shader_write(frag, "direct *= light_color * (1.0 / (ldist * ldist));"); node_shader_add_uniform(frag, "vec4 shirr[7]", "_envmap_irradiance"); node_shader_add_function(frag, str_sh_irradiance()); diff --git a/base/assets/Scene.arm b/base/assets/Scene.arm index e8638c1c2f8d8e1a8cce631a3d9ef24327d498c2..e739fcfcc1f936075dc51e0ffceb9349b5e3d66c 100644 GIT binary patch delta 41 xcmeDB%C+tj7t?+2iA>6jY?A|+#5dY1^ELoO)*5db8|4Ke@# delta 269 zcmZ4YiL2`?7t?*7iA>6j?2`kS#5dY1^UAO?FfjOJre~DgW&yHFDhpC?^8gt+Afd?* z*+eqD3qRrqzk>oe*nm zzc|y(e*UfR_LCp-mNlpFwx{qiZcpK5Iy$|c8)kZZN@7W3@m)qB|31hPumkcEb5n1_ ztpu}@^K)Bh!8EiA>rX?KT86a&LYgY|A`(BCqh~v*C`c0Mp_OFaQ7m delta 132 zcmaFAgRyTHBh!7JiA>s@+zbp1IhpAhB^yVRl-mDky$O-_b C1}TpK diff --git a/base/shaders/deferred_light.frag.glsl b/base/shaders/deferred_light.frag.glsl index 7626085b..e26f7eab 100644 --- a/base/shaders/deferred_light.frag.glsl +++ b/base/shaders/deferred_light.frag.glsl @@ -16,8 +16,6 @@ uniform sampler2D ssaotex; uniform vec2 camera_proj; uniform vec3 eye; uniform vec3 eye_look; -uniform vec3 point_pos; -uniform vec3 point_col; uniform vec3 light_area0; uniform vec3 light_area1; uniform vec3 light_area2; @@ -171,13 +169,9 @@ float ltc_evaluate(vec3 N, vec3 V, float dotnv, vec3 P, mat3 Minv, vec3 points0, return max(0.0, -sum); } -vec3 sample_light(const vec3 p, const vec3 n, const vec3 v, const float dotnv, const vec3 lp, const vec3 light_col, +vec3 sample_light(const vec3 p, const vec3 n, const vec3 v, const float dotnv, const vec3 albedo, const float rough, const vec3 f0, const float occ ) { - vec3 ld = lp - p; - vec3 l = normalize(ld); - float dotnl = max(0.0, dot(n, l)); - float theta = acos(dotnv); vec2 tuv = vec2(rough, theta / (0.5 * PI)); tuv = tuv * LUT_SCALE + LUT_BIAS; @@ -195,11 +189,7 @@ vec3 sample_light(const vec3 p, const vec3 n, const vec3 v, const float dotnv, c vec3(0.0, 0.0, 1.0)); float ltcdiff = ltc_evaluate(n, v, dotnv, p, m1, light_area0, light_area1, light_area2, light_area3); vec3 direct = albedo * ltcdiff + ltcspec * 0.05; - - direct *= attenuate(distance(p, lp)); - direct *= light_col; - direct *= clamp(dotnl + 2.0 * occ * occ - 1.0, 0.0, 1.0); // Micro shadowing - + direct *= vec3(1000.0, 1000.0, 1000.0); return direct; } @@ -252,6 +242,6 @@ void main() { albedo = vec3(0.0, 0.0, 0.0); } - frag_color.rgb += sample_light(p, n, v, dotnv, point_pos, point_col, albedo, roughness, f0, occ); + frag_color.rgb += sample_light(p, n, v, dotnv, albedo, roughness, f0, occ); frag_color.a = 1.0; // Mark as opaque } diff --git a/base/shaders/std/math.glsl b/base/shaders/std/math.glsl index 1f4fd97d..bbb09b14 100644 --- a/base/shaders/std/math.glsl +++ b/base/shaders/std/math.glsl @@ -13,7 +13,3 @@ vec2 envmap_equirect(const vec3 normal, const float angle) { float rand(const vec2 co) { // Unreliable return fract(sin(dot(co.xy, vec2(12.9898, 78.233))) * 43758.5453); } - -float attenuate(const float dist) { - return 1.0 / (dist * dist); -} diff --git a/base/sources/camera.ts b/base/sources/camera.ts index 745c3458..002f9f3d 100644 --- a/base/sources/camera.ts +++ b/base/sources/camera.ts @@ -175,16 +175,12 @@ function camera_update() { } if (operator_shortcut(map_get(config_keymap, "rotate_light"), shortcut_type_t.DOWN)) { - if (scene_lights.length > 0) { - camera_redraws = 2; - let light: light_object_t = scene_lights[0]; - let pi2: f32 = math_pi() * 2.0; - let mx: f32 = mouse_movement_x / 100; - context_raw.light_angle = math_fmod(context_raw.light_angle + math_fmod(mx, pi2) + pi2, pi2); - let m: mat4_t = mat4_rot_z(mx); - light.base.transform.local = mat4_mult_mat(light.base.transform.local, m); - transform_decompose(light.base.transform); - } + camera_redraws = 2; + let pi2: f32 = math_pi() * 2.0; + let mx: f32 = mouse_movement_x / 100; + context_raw.light_angle = math_fmod(context_raw.light_angle + math_fmod(mx, pi2) + pi2, pi2); + let m: mat4_t = mat4_rot_z(mx); + uniforms_light_world = mat4_mult_mat(uniforms_light_world, m); } if (operator_shortcut(map_get(config_keymap, "rotate_envmap"), shortcut_type_t.DOWN)) { diff --git a/base/sources/ui_menu.ts b/base/sources/ui_menu.ts index 08493e7f..78f3c978 100644 --- a/base/sources/ui_menu.ts +++ b/base/sources/ui_menu.ts @@ -196,51 +196,44 @@ function ui_menu_render() { context_raw.ddirty = 2; } - if (scene_lights.length > 0) { - let light: light_object_t = scene_lights[0]; + let lhandle: ui_handle_t = ui_handle(__ID__); + lhandle.value = uniforms_light_strength; + lhandle.value = math_floor(lhandle.value * 100) / 100; + ui_menu_align(ui); + uniforms_light_strength = ui_slider(lhandle, tr("Light"), 0.0, 4.0, true); + if (lhandle.changed) { + context_raw.ddirty = 2; + } - let lhandle: ui_handle_t = ui_handle(__ID__); - let scale: f32 = 1333; - lhandle.value = light.data.strength / scale; - lhandle.value = math_floor(lhandle.value * 100) / 100; - ui_menu_align(ui); - light.data.strength = ui_slider(lhandle, tr("Light"), 0.0, 4.0, true) * scale; - if (lhandle.changed) { - context_raw.ddirty = 2; + let lahandle: ui_handle_t = ui_handle(__ID__); + lahandle.value = context_raw.light_angle / math_pi() * 180; + ui_menu_align(ui); + let new_angle: f32 = ui_slider(lahandle, tr("Light Angle"), 0.0, 360.0, true, 1) / 180 * math_pi(); + if (ui.is_hovered) { + let vars: map_t = map_create(); + map_set(vars, "shortcut", map_get(config_keymap, "rotate_light")); + ui_tooltip(tr("{shortcut} and move mouse", vars)); + } + let ldiff: f32 = new_angle - context_raw.light_angle; + if (math_abs(ldiff) > 0.005) { + if (new_angle < 0) { + new_angle += (math_floor(-new_angle / (2 * math_pi())) + 1) * 2 * math_pi(); } + else if (new_angle > 2 * math_pi()) { + new_angle -= math_floor(new_angle / (2 * math_pi())) * 2 * math_pi(); + } + context_raw.light_angle = new_angle; + let m: mat4_t = mat4_rot_z(ldiff); + uniforms_light_world = mat4_mult_mat(uniforms_light_world, m); + context_raw.ddirty = 2; + } - light = scene_lights[0]; - let lahandle: ui_handle_t = ui_handle(__ID__); - lahandle.value = context_raw.light_angle / math_pi() * 180; - ui_menu_align(ui); - let new_angle: f32 = ui_slider(lahandle, tr("Light Angle"), 0.0, 360.0, true, 1) / 180 * math_pi(); - if (ui.is_hovered) { - let vars: map_t = map_create(); - map_set(vars, "shortcut", map_get(config_keymap, "rotate_light")); - ui_tooltip(tr("{shortcut} and move mouse", vars)); - } - let ldiff: f32 = new_angle - context_raw.light_angle; - if (math_abs(ldiff) > 0.005) { - if (new_angle < 0) { - new_angle += (math_floor(-new_angle / (2 * math_pi())) + 1) * 2 * math_pi(); - } - else if (new_angle > 2 * math_pi()) { - new_angle -= math_floor(new_angle / (2 * math_pi())) * 2 * math_pi(); - } - context_raw.light_angle = new_angle; - let m: mat4_t = mat4_rot_z(ldiff); - light.base.transform.local = mat4_mult_mat(light.base.transform.local, m); - transform_decompose(light.base.transform); - context_raw.ddirty = 2; - } - - let sxhandle: ui_handle_t = ui_handle(__ID__); - sxhandle.value = light.data.size; - ui_menu_align(ui); - light.data.size = ui_slider(sxhandle, tr("Light Size"), 0.0, 4.0, true); - if (sxhandle.changed) { - context_raw.ddirty = 2; - } + let sxhandle: ui_handle_t = ui_handle(__ID__); + sxhandle.value = uniforms_light_size_x; + ui_menu_align(ui); + uniforms_light_size_x = ui_slider(sxhandle, tr("Light Size"), 0.0, 4.0, true); + if (sxhandle.changed) { + context_raw.ddirty = 2; } ///if (is_paint || is_sculpt) diff --git a/base/sources/util_encode.ts b/base/sources/util_encode.ts index 17a76fbf..fe3b3300 100644 --- a/base/sources/util_encode.ts +++ b/base/sources/util_encode.ts @@ -10,8 +10,6 @@ function util_encode_scene(raw: scene_t): buffer_t { armpack_encode_string("objects"); armpack_encode_null(); util_encode_mesh_datas(raw.mesh_datas); - armpack_encode_string("light_datas"); - armpack_encode_null(); armpack_encode_string("camera_datas"); armpack_encode_null(); armpack_encode_string("camera_ref"); diff --git a/base/sources/util_render.ts b/base/sources/util_render.ts index 9682c705..70531974 100644 --- a/base/sources/util_render.ts +++ b/base/sources/util_render.ts @@ -31,11 +31,9 @@ function util_render_make_material_preview() { scene_camera.data.fov = 0.92; viewport_update_camera_type(camera_type_t.PERSPECTIVE); - let light: light_object_t = scene_lights.length > 0 ? scene_lights[0]: null; - let _light_strength: f32 = light != null ? light.data.strength : 0.0; - if (light != null) { - light.data.strength = 0; - } + + let _light_strength: f32 = uniforms_light_strength; + uniforms_light_strength = 0; let probe: world_data_t = scene_world; let _probe_strength: f32 = probe.strength; @@ -75,10 +73,7 @@ function util_render_make_material_preview() { camera_object_build_proj(scene_camera); camera_object_build_mat(scene_camera); - if (light != null) { - light.data.strength = _light_strength; - } - + uniforms_light_strength = _light_strength; probe.strength = _probe_strength; context_raw.envmap_angle = _envmap_angle; context_raw.brush_scale = _brush_scale; @@ -115,10 +110,8 @@ function util_render_make_decal_preview() { let saved_fov: f32 = scene_camera.data.fov; scene_camera.data.fov = 0.92; viewport_update_camera_type(camera_type_t.PERSPECTIVE); - let light: light_object_t = scene_lights.length > 0 ? scene_lights[0] : null; - if (light != null) { - light.base.visible = false; - } + let _light_strength: f32 = uniforms_light_strength; + uniforms_light_strength = 0.0; scene_world._.envmap = context_raw.preview_envmap; // No resize @@ -148,10 +141,7 @@ function util_render_make_decal_preview() { camera_object_build_proj(scene_camera); camera_object_build_mat(scene_camera); - light = scene_lights.length > 0 ? scene_lights[0] : null; - if (light != null) { - light.base.visible = true; - } + uniforms_light_strength = _light_strength; scene_world._.envmap = context_raw.show_envmap ? context_raw.saved_envmap : context_raw.empty_envmap; diff --git a/base/sources/viewport.ts b/base/sources/viewport.ts index b5fe0433..4a61c47e 100644 --- a/base/sources/viewport.ts +++ b/base/sources/viewport.ts @@ -77,12 +77,9 @@ function viewport_zoom(f: f32) { function viewport_update_camera_type(camera_type: i32) { let cam: camera_object_t = scene_cameras[0]; - let light: light_object_t = scene_lights.length > 0 ? scene_lights[0] : null; if (camera_type == camera_type_t.PERSPECTIVE) { cam.data.ortho = null; - if (light != null) { - light.base.visible = true; - } + uniforms_light_strength = 1.0; } else { let f32a: f32_array_t = f32_array_create(4); @@ -92,9 +89,7 @@ function viewport_update_camera_type(camera_type: i32) { f32a[2] = -2 * f * (app_h() / app_w()); f32a[3] = 2 * f * (app_h() / app_w()); cam.data.ortho = f32a; - if (light != null) { - light.base.visible = false; - } + uniforms_light_strength = 0.0; } camera_object_build_proj(cam); context_raw.ddirty = 2;