Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Rapture Gallery Issues #2875

Closed
decentraland-bot opened this issue Nov 23, 2024 · 6 comments
Closed

Rapture Gallery Issues #2875

decentraland-bot opened this issue Nov 23, 2024 · 6 comments
Assignees
Labels
2-medium Important issues we must fix, but not as important as high! bug Something isn't working

Comments

@decentraland-bot
Copy link

Severity:

SEV-3 | Stability or minor user impact

Description:

Video caching: Video art is being cached and gets passed onto the next video art. Prior to the new client, when approaching artwork it would become a video seamlessly - occasionally with a brief black loading screen. Sometimes the video art does not work at all in the client.

Dummy avatars: We had dummy avatars dancing on the roof, they're no longer there. We also had dummy avatars on the ground floor looking at art, on the second floor bartending and on the roof bartending. None of them show.

UI: We had a button to toggle the music on and off, it's no longer there. We also have a system to display art details on screen when hovering over the 'info' button under the artwork, it's also gone.

Exterior posters: There were posters on the black vertical panels outside the building, they're gone now.

Colours: Colours and materials are different to the original design, please let us know when colour testing for the client is finished so we can update the build to look as it did before.

Screen glitching: On moving the camera the screen glitches (horizontal lines appear)

Video quality: Video resolution seems lower in some of the artwork, namely the two large pieces on the second floor in Hope gallery.

Rooftop DJ: Doesn't appear consistently (sometimes he's there sometimes he's not)

Custom Emote caching: We have custom emotes set up with all the seating areas. The emotes are now caching and following the avatar.

None of these errors existed before the new client and everything had been intensely play-tested many many times to avoid any bugs.

Operating system:

NA

Error:

NA

Expected Behavior:

Scene should function as expected

Current Behavior:

Listed the issues in the ticket

Steps to reproduce:

See above info

Ticket number:

NA

@Kaze-No-Kai
Copy link

https://www.dropbox.com/scl/fo/zgekx2kyhd83c2mpa3om1/AI1xipzC6XXu39XIHSF5ZEg?rlkey=z7y9c7vgej9ixutwap48el7em&st=vl14rct0&dl=0

Screen recording 1 : Lasted 1.30min until crashing.
Screen recording 2: Lasted 1.46min until crashing.
Screen recording 3: Lasted under 1min until crashing.
Screen recording 4: Lasted 2.15min until crashing.

@nearnshaw
Copy link
Member

Dummy avatars: We had dummy avatars dancing on the roof, they're no longer there. We also had dummy avatars on the ground floor looking at art, on the second floor bartending and on the roof bartending. None of them show.

This issue can be explained by this known issue:
decentraland/creator-hub#270

The other issues require investigation

@anicalbano anicalbano added bug Something isn't working 2-medium Important issues we must fix, but not as important as high! and removed ReportBot need QA validation labels Nov 26, 2024
@aixaCode aixaCode removed the new Issues to triage label Nov 27, 2024
@dalkia
Copy link
Collaborator

dalkia commented Dec 18, 2024

Current State, tested in 0.49

  • (PENDING) Video caching: Video art is being cached and gets passed onto the next video art. Prior to the new client, when approaching artwork it would become a video seamlessly - occasionally with a brief black loading screen. Sometimes the video art does not work at all in the client.

Whatsmore, sometimes starting a video causes crash of clients

  • (FIXED) Dummy avatars: We had dummy avatars dancing on the roof, they're no longer there. We also had dummy avatars on the ground floor looking at art, on the second floor bartending and on the roof bartending. None of them show.
image image
  • (PENDING) UI: We had a button to toggle the music on and off, it's no longer there. We also have a system to display art details on screen when hovering over the 'info' button under the artwork, it's also gone.

  • (PENDING) Exterior posters: There were posters on the black vertical panels outside the building, they're gone now.

  • (PENDING) Colours: Colours and materials are different to the original design, please let us know when colour testing for the client is finished so we can update the build to look as it did before.

@GBirch33 would you consider it finished now?

  • (MORE INFO REQUIRED) Screen glitching: On moving the camera the screen glitches (horizontal lines appear)

Does it occur still if the VSync is enabled?

  • (PENDING) Video quality: Video resolution seems lower in some of the artwork, namely the two large pieces on the second floor in Hope gallery.

  • (PENDING) Rooftop DJ: Doesn't appear consistently (sometimes he's there sometimes he's not)

Easily repruceable by exiting and entering the scene

image image
  • (PENDING) Custom Emote caching: We have custom emotes set up with all the seating areas. The emotes are now caching and following the avatar.

We still need to fix scene emote

@fcolarich fcolarich self-assigned this Dec 20, 2024
@fcolarich fcolarich moved this from Todo to In Progress in Explorer Alpha Dec 20, 2024
@fcolarich
Copy link
Contributor

fcolarich commented Dec 22, 2024

After checking the scene code and verifying it on client, I can confirm that the issue with the posters outside of the scene is caused by the scene itself.
If I approach the scene from outside (like teleporting to a parcel next to it), the posters are there, but when I enter the scene, the posters disappear. This is caused by logic on the scene that toggles the posters on/off when the player enters or leaves the scene, BUT, given that the posters are created when the scene is loaded, when the player enters the scene it tries to toggle them and they disappear. So if the player teleports to the scene, the posters will be loaded and then be removed because its basically the same as entering the scene after it loaded. So, the fix would be on the scene code, I would replace the toggle by 2 functions one to turn the posters on and one off. So you only turn it off if the player leaves the scene and otherwise turn them on.

I attach a video of the evidence to share with the creator:

2024-12-22.21-09-22.mp4

So instead of this code:

    export function toggleFrontScreens() {
        if (!frontScreensVisible) {
          createFrontScreens()
          console.log('Turn ON Poster')
        }
        else if (frontScreensVisible) {
          console.log('Turn OFF Poster')
          turnOffFrontScreens()
        }
        }

I would propose something like this:

export function TurnOnScreens() {
        if (!frontScreensVisible) {
          createFrontScreens()
        }
      }

export function TurnOffScreens() {
         if (frontScreensVisible) {
          turnOffFrontScreens()
        }
        }

and replace the use of the Toggle on the lazyLoading.ts file so when the player ENTERS the first floor, they call TurnOnScreens and when they EXIT the first floor, they call TurnOffScreens.
It should be pretty straightforward.

The rest are all handled on this PR: #3027

@fcolarich
Copy link
Contributor

fcolarich commented Dec 22, 2024

More info regarding the DJ dissappearing,
the code used in the scene is this:

const dj = engine.addEntity()

  export function createDJ() {

    GltfContainer.createOrReplace(dj, {
        src: 'models/rapture-dj.glb',
        visibleMeshesCollisionMask: ColliderLayer.CL_PHYSICS
    })
    Transform.createOrReplace(dj, {
        position: Vector3.create(9.5, 37.22, 32),
        scale: Vector3.create(1.2, 1.2, 1.2),
        rotation: Quaternion.fromEulerDegrees(0, -90, 0)
    })
    Animator.createOrReplace(dj, {
        states:[{
            clip: "complete",
            playing: true, 
            loop: true,
        }, {
            clip: "dance.",
            playing: false, 
            loop: true,
        }, {
            clip: "idle", 
            playing: false,
            loop: true
        }, {
            clip: "splat", 
            playing: false,
            loop: true
        }]
    })
  }

  export function removeDJ() {
    engine.removeEntity(dj)
  }

The scene is creating the DJ when the player goes into the 3rd floor and removing it when the player leaves it, but when the player returns to the floor, the entity was removed and the function CreateDJ does not add the entity for the DJ again (which was removed with removeDJ). Which means that CreateDJ is trying to add components to an entity that doesn't exist.
So the fix should be to add the CreateEntity call inside the CreateDJ function. I would also add a flag to check if the DJ is created or not.
The fix would be something like this, which I tested and works correctly:

let dj = engine.addEntity()
  let djCreated = true;

  export function createDJ() {

    if (!djCreated)
        {dj = engine.addEntity()
        djCreated = true;}

    GltfContainer.createOrReplace(dj, {
        src: 'models/rapture-dj.glb',
        visibleMeshesCollisionMask: ColliderLayer.CL_PHYSICS
    })
    Transform.createOrReplace(dj, {
        position: Vector3.create(9.5, 37.22, 32),
        scale: Vector3.create(1.2, 1.2, 1.2),
        rotation: Quaternion.fromEulerDegrees(0, -90, 0)
    })
    Animator.createOrReplace(dj, {
        states:[{
            clip: "complete",
            playing: true, 
            loop: true,
        }, {
            clip: "dance.",
            playing: false, 
            loop: true,
        }, {
            clip: "idle", 
            playing: false,
            loop: true
        }, {
            clip: "splat", 
            playing: false,
            loop: true
        }]
    })
  }

  export function removeDJ() {
    if (djCreated)
    {
        engine.removeEntity(dj)
        djCreated = false
    }
  }

Video proof:

2024-12-22.21-43-49.mp4

@fcolarich
Copy link
Contributor

I have been looking at the issue with the scene emotes for the seating areas and it is related to the scene code.
It has several issues actually:
First, its not using the updated position to check the distance (so it always uses the initial distance and it never stops the emoting).
Once I got that fixed, I noticed that it was not properly stopping the interval nor the timeout it sets up. So the interval keeps running and adds another one for each time we try to sit. And the timeout causes that if the player moves before the first 8 seconds, the emote will play anyway, even if the player moved.
So this needs fixing.
The proposed fix would look something like this:

  function onPointerDown() {
    const playerTransform = Transform.get(player);    
    const targetRotation = Quaternion.fromEulerDegrees(cameraTarget.x, cameraTarget.y, cameraTarget.z);
    
    Transform.createOrReplace(player, {
      position: playerTransform.position,
      rotation: targetRotation
    });

    movePlayerTo({
      newRelativePosition: playerTransform.position,
      cameraTarget: cameraTarget,
    });

    triggerSceneEmote({ src: sitEmote, loop: false });

    let sitTimer = utils.timers.setTimeout(() => {
      triggerSceneEmote({
        src: sitLoopEmote,
        loop: true,
      });
    }, sitDuration);

    // Add a listener for player movement to stop the emote when the player moves away
    const initialPosition = Vector3.clone(playerTransform.position);
    const checkDistance = () => {
      
      const currentPosition = Transform.get(player).position;
      const distance = Vector3.distance(initialPosition, currentPosition);
      if (distance > 1) { // Adjust the distance threshold as needed
        triggerSceneEmote({ src: 'Idle', loop: false }); // Stop the emote
        utils.timers.clearInterval(interval); // Clear the loop emote
        utils.timers.clearTimeout(sitTimer); // Clear the loop emote
      }
    };

    let interval = utils.timers.setInterval(checkDistance, 500);
  }

Here is a look at the diff with the main changes:
image

There are potentially other issues or optimizations to be done, but I´m focusing only on the issues described on the ticket.
Cheers!!

@fcolarich fcolarich moved this from In Progress to With QA / Awaiting Review in Explorer Alpha Dec 25, 2024
@fcolarich fcolarich moved this from With QA / Awaiting Review to Done in Explorer Alpha Jan 9, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
2-medium Important issues we must fix, but not as important as high! bug Something isn't working
Projects
Archived in project
Development

No branches or pull requests

8 participants