I seem to be encountering a problem with utilizing SpotLights and shadows within Three.js

In my simple scene, there is a single .dae mesh and a 7000*7000 plane underneath it. I want to illuminate the scene with a high SpotLight to cast a shadow of the mesh on the ground. However, there seems to be an issue! No matter how high I position the SpotLight, the plane remains unlit. Additionally, the mesh is only partially illuminated within a small square area.

You can observe the scenario here:

Whenever I move the mesh (a monster), the lighting becomes inconsistent.

This is how I set up the light:

// create a spotlight
self.spotLight = new THREE.SpotLight();

// set its position
self.spotLight.position.y = 1000; //I assume it needs to be elevated to illuminate everything
self.spotLight.position.x = 0; //(0, 0) are the spawn coordinates of the mesh and also the center of the plane
self.spotLight.position.z = 0;
self.spotLight.castShadow = true;

This is how the plane is constructed:

//The plane.
self.plane = new THREE.Mesh(new THREE.PlaneGeometry(self.groundSize, self.groundSize), new THREE.MeshLambertMaterial({color: 0x5C8A00}));
self.plane.receiveShadow = true;
self.plane.position.x = 0;
self.plane.position.y = -26;
self.plane.position.z = 0;

Furthermore, here is an image showing multiple PointLights:

Despite adding more lights, the shadow still vanishes!

What am I doing incorrectly here? From what I know, light should spread uniformly in all directions! Another problem is that I'm having difficulty incorporating multiple SpotLights in the scene. The performance drastically declines when I do so – could this be planned? Perhaps due to enabling shadows on each one...

@Neil, you're experiencing the same issue in your code!

Answer №1

Check out the jsfiddle I made displaying a plane with Lambert material and a spinning cube that creates a shadow - perhaps you'll notice some differences from your own setup.

edit

Experiment with various parameters, like this one that prevents clipping in my demo:

spotLight.shadowCameraFov = 70;

View the updated demo and check out the moving demo

Similar questions

If you have not found the answer to your question or you are interested in this topic, then look at other similar questions below or use the search

Error message: Unknown scope- unable to process 'files-path' Android File provider issue

My current project involves implementing file system access in react native Android. However, when attempting to add 'files-path' in XML, an error stating "Error: Unsupported type 'files-path'" is encountered. I am utilizing the react n ...

Highlight the active class on the Angular Navbar

I have been successfully using [routerLinkActive]="['active']" in my application to add an active class when the button on navbar is clicked and redirects to example.com/home. However, I noticed that if I only navigate to example.com, the active ...

Undefined React custom hooks can be a tricky issue to troub

Just delving into the world of React and trying to wrap my head around custom hooks, but I keep hitting roadblocks. Here's the latest hurdle that I'm facing, hoping for some guidance. I'm taking a step-by-step approach to creating a functio ...

What is the best way to implement a function that can be passed as a parameter to the express.get

The app variable is defined by const app = express(); The above code snippet is functioning properly: app.get('/posts/:id', (req, res) => { res.json( post_creator.CreatePost(req.params.id) ); }); However, the code below is not function ...

Error: Failed to clone an object in Electron due to an unhandled promise

I'm in need of assistance with sending files from the main directory to the renderer. Before proceeding, I attempted to check if it was functioning correctly by using console.log(files). However, this resulted in an error message. Can someone please p ...

Ajax removes the selection from the hyperlink under the mouse cursor

Currently, my webpage is set up to constantly refresh a div using an Ajax request every second. Within this div are hyperlinks. Unfortunately, when users hover over one of the hyperlinks and pause for a moment without moving their cursor, the "hover" pseu ...

Generate an Array reference using the index of elements instead of duplicating the values

When initializing b, it appears that the array data is being copied from a instead of referencing it, as originally intended: let a = [0,1]; let b = [a[0], 2]; a[0]=3; console.log(b); The resulting output is 0,2. What is the reason for the output not ...

Inconsistencies with AJAX performance

Hey there, I'm a newbie and absolutely loving this site! Currently diving into the world of JavaScript and have been through numerous tutorials. However, I seem to be struggling with getting Ajax to work. Recently stumbled upon this code snippet on ...

Issues with the functionality of AngularJS router implementation

I have searched through various resources like Stack Overflow and other blogs, but unfortunately, I haven't been able to fix the routing issue in my AngularJS code. Although there are no error messages, the routing functionality doesn't seem to b ...

Efficiently incorporate a set of fields into a form and automatically produce JSON when submitted

The optimal approach for dynamically adding a set of fields and generating JSON based on key-value pairs upon form submission. <div class="container"> <div class="col-md-4"> <form method="POST" id="myform"> <div class="f ...

Implementing dynamic component rendering in Vue JS based on dropdown selection

I'm a beginner with Vue JS and I have a specific task in mind. Task Description : I need to create a dropdown with the following values. https://i.sstatic.net/Nllw7.png Upon selecting each value, a specific dropdown component should be added to th ...

There was a parsing error due to an unexpected token, and we were expecting a comma instead

Below is the code snippet written in react js: class Posts extends Component { render() { return ( {console.log('test')} ); } } When I executed this code, an error occurred stating: Parsing error: Unexpected token, expected " ...

An error occurred while attempting to run the npm installation command

When trying to run the npm install command, I keep encountering this error: npm ERR! code 1 npm ERR! path /Users/alex/Documents/serviceName/node_modules/platform-tracer/node_modules/ls-trace npm ERR! command failed npm ERR! command sh -c node scripts/post_ ...

Animating the Three.js Globe camera when a button is clicked

Struggling to create smooth camera movement between two points, trying to implement the function below. Currently working with the Globe from Chrome Experiments. function changeCountry(lat, lng) { var phi = (90 - lat) * Math.PI / 180; var theta = ...

an observable with an empty array inside

I am working with a ko.observable that holds an object containing three arrays structured like this: self.filter({ file: [], site: [], statut: [] })` However, my attempts to empty these arrays have been unsuccessful. I have tried using the code: array = ...

Simple method for swapping out an HTML string with image tags solely using JavaScript

In our Ionic 2 App, we are displaying content from a backend API in the form of Questions and Answers. The Answers are generated using summernote, allowing us to render raw HTML in the app. However, we need to replace all instances of img tags in the answe ...

Error: Unable to access the 'name' property of an undefined value. Despite my efforts, I am unable to determine the root cause of this issue. My technology stack includes mysql for the database, nodejs for the backend,

Can someone help me with a TypeError: Cannot read property 'name' of undefined error I'm encountering while trying to add new users to a MySql database using Node.js and EJS as the view engine? I've been unable to identify the cause of ...

Eliminating choices from a dropdown list using jQuery

I am currently working on a page that contains 5 dropdown menus, all of which have been assigned the class name 'ct'. During an onclick event, I want to remove the option with the value 'X' from each dropdown menu. My current code snipp ...

Tips for designing a button that can execute a JavaScript function repeatedly

My goal is to rotate the numbers clockwise when the rotate button is clicked. I have included all the relevant code. I have created a button that triggers a javascript function when clicked. The problem is that the function only rotates the numbers once. ...

Tips for showing data from an hour ago in Angular

Here is the code snippet provided: data = [ { 'name' : 'sample' 'date' : '2020-02-18 13:50:01' }, { 'name' : 'sample' 'date' : '2020-02- ...