Skip to content

Cross Page PRP Referenes cause Sorting Order Issues. #453

@Traveler263

Description

@Traveler263

Under still uncertain trigger conditions (As Descent was loading perfectly in spite of these apparent systematic issues for several iterations, and the bug cropped up suddenly after a cross page reference appeared to try to load an item from a PRP I had not pushed to Minkata for testing- but I am NOT certain that was the trigger cause of the problem), it seems that having too many Cross-Page references for a mesh parent being in One PRP, with its drawable child being in a different PRP can have knockon effects on all other objects within that PRP, causing irregular and inconsistent loading.

Image

For example, in this image, one log amongst this ladder was erroneously still assigned to "dsntVolcano" PRP which had a drawable object within it as the child of a Parented object in a different PRP, resulting in many items from the "dsntVolcano" PRP to load incorrectly.

Bizarrely, this could also cause items in "dsntVolcano" PRP to Partially render correctly- for example the following objects, which were having random parts of single meshes rendering correctly while the rest of it was not.

Image Image

Per Ehren on discord:

For the caldera. The dsntUpperShaft page had an object that requested a child object that had been accidentally sorted to the dsntVolcano page, this caused the Draw span to be entirely loaded just by the request for the one object that had now been added to that wrong Draw span by virtue of being sorted to the wrong page.

The issue seems to be a conflict caused by the loading of the Draw span from both the parent object's page and the child object's page itself (which carries important coordinate data for where things should actually be displayed).

Additionally to this, adding to the weirdness, there seems to be a location-dependent trigger on where one links FROM with regards to rendering the age correctly or not.

During testing, it was noticed that if one linked to Descent either by linking book or python command, the location one linked FROM was highly dependent on how things loaded correctly.

If one linked from the relto bookshelf to Descent, either the treasurebookshaftfall spawn or the default link point either by book or command, the age would load with many drawn items loaded in incorrect places. HOWEVER, if one stood at the terminal in the Nexus age, as if one had just used it, and was either using the nexus itself or a console command, the age would load its visuals successfully. YET- if one took several steps away from the machine and linked with a command, the age would not load its visuals successfully.

To help illustrate this issue, I have an imported relto mesh paged into a copy of my descent blend- the fissure hole approximating the successful nexus link, and the hole where the hut is approximating a failed link from relto.

Image

During testing, I migrated the default spawn point to the same location as the treasurebookshaftfall link point to ensure that the destination point's physical location was not a problem.

Image Image Image Image

(The green line approximates where the successful link was originating from, the red line approximates where a failed link was originating from.)

Links originating at the Relto Fissure area (Where the Nexus is, roughly at the Zero Point of the Descent File, essentially) seemed to work successfully if you were in the exact tiny space that the nexus linkout point is, but otherwise was such a significantly tiny window of physical space that it's a miracle this was even stumbled upon in the first place.

My suspicion is that when items from the dsntVolcano PRP were improperly being loaded, they were being loaded with 'local coordinates' for a parent-child relationship which were being read as global coordinates, rather than their true global coordinates. This would lead to, in cases where one loaded the calling-upon PRP to another age, visuals such as this:

Image (Picture courtesy of Ehren)

In this example, Ehren paged in "dsntUpperShaft" PRP to Relto, loading all of its called upon drawable spans- this included our missing Caldera Objects from the dsntVolcano PRP that were NOT assigned to this PRP, but were accidentally being called to it due to a parent object reference from dsntUpperShaft to its child object in dsntVolcano.

The local coordinates for the drawn objects were applied instead of their local coordinates, resulting in this updside down Caldera view.

My own personal suggestion would be to institute some kind of check for "Is a Parent Object and its Child Object in the same PRP?" and halt an export if that is the case- listing said parent object and child object as being in mismatching PRPs.

Metadata

Metadata

Assignees

No one assigned

    Type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions