stride3d / stride3d/stride

[Serializer] Error when instantiating a prefab with a Material with Transparency set

Open
#905 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

area-Graphics bug priority-Medium work-estimate-M
Dominant language
C#
Stars
7.8k
Forks
1.2k
Avg merge
2d 17h
Merged PRs (30d)
49

Description

Release Type: Official Release

Version: (beta04-1265)

Platform(s): Windows

Describe the bug
I have a character prefab that contains a model with a material that has Transparency option enabled and set. When I instantiate this prefab the first time, it actually works fine. But when I change scenes and then instantiate it again, it fails with the following:

https://media.discordapp.net/attachments/500292370923913222/774736583865139220/unknown.png

Material:
https://media.discordapp.net/attachments/500292370923913222/774750905429786624/unknown.png

To Reproduce
Steps to reproduce the behavior:

  1. See above

Expected behavior
Should be able to instantiate a prefab without issue.

Screenshots
If applicable, add screenshots to help explain your problem (use GitHub drag & drop)

Log and callstacks
at Stride.Rendering.ValueParameterKeySerializer1.Serialize(ValueParameterKey1& obj, ArchiveMode mode, SerializationStream stream)
at Stride.Core.Serialization.DataSerializer1.Serialize(Object& obj, ArchiveMode mode, SerializationStream stream) at Stride.Core.Serialization.MemberReuseSerializer1.Serialize(T& obj, ArchiveMode mode, SerializationStream stream)
at Stride.Core.DataSerializers.StrideRendering_ParameterKeyInfoSerializer.Serialize(ParameterKeyInfo& obj, ArchiveMode mode, SerializationStream stream)
at Stride.Core.Serialization.Serializers.ListAllSerializer2.Serialize(TList& obj, ArchiveMode mode, SerializationStream stream) at Stride.Core.Serialization.SerializerExtensions.Serialize[T](SerializationStream stream, T& obj, ArchiveMode mode) at Stride.Rendering.ParameterCollection.Serializer.Serialize(ParameterCollection& parameterCollection, ArchiveMode mode, SerializationStream stream) at Stride.Core.Serialization.MemberReuseSerializer1.Serialize(T& obj, ArchiveMode mode, SerializationStream stream)
at Stride.Core.DataSerializers.StrideRendering_MaterialPassSerializer.Serialize(MaterialPass& obj, ArchiveMode mode, SerializationStream stream)
at Stride.Core.Serialization.MemberReuseSerializer1.Serialize(T& obj, ArchiveMode mode, SerializationStream stream) at Stride.Core.Serialization.Serializers.ListAllSerializer2.Serialize(TList& obj, ArchiveMode mode, SerializationStream stream)
at Stride.Core.Serialization.MemberReuseSerializer1.Serialize(T& obj, ArchiveMode mode, SerializationStream stream) at Stride.Core.DataSerializers.StrideRendering_MaterialSerializer.Serialize(Material& obj, ArchiveMode mode, SerializationStream stream) at Stride.Core.Serialization.MemberReuseSerializer1.Serialize(T& obj, ArchiveMode mode, SerializationStream stream)
at Stride.Core.Serialization.Serializers.DictionaryAllSerializer3.Serialize(TDictionary& obj, ArchiveMode mode, SerializationStream stream) at Stride.Core.Serialization.MemberReuseSerializer1.Serialize(T& obj, ArchiveMode mode, SerializationStream stream)
at Stride.Core.DataSerializers.StrideEngine_ModelComponentSerializer.Serialize(ModelComponent& obj, ArchiveMode mode, SerializationStream stream)
at Stride.Core.Serialization.DataSerializer1.Serialize(Object& obj, ArchiveMode mode, SerializationStream stream) at Stride.Core.Serialization.MemberReuseSerializer1.Serialize(T& obj, ArchiveMode mode, SerializationStream stream)
at Stride.Core.Serialization.Serializers.ListAllSerializer2.Serialize(TList& obj, ArchiveMode mode, SerializationStream stream) at Stride.Core.DataSerializers.StrideEngine_EntityComponentCollectionSerializer.Serialize(EntityComponentCollection& obj, ArchiveMode mode, SerializationStream stream) at Stride.Core.Serialization.MemberReuseSerializer1.Serialize(T& obj, ArchiveMode mode, SerializationStream stream)
at Stride.Engine.Entity.EntitySerializer.Serialize(Entity& obj, ArchiveMode mode, SerializationStream stream)
at Stride.Core.Serialization.MemberReuseSerializer1.SerializeExtended(T& obj, ArchiveMode mode, SerializationStream stream, DataSerializer1 dataSerializer)
at Stride.Core.Serialization.SerializerExtensions.SerializeExtended[T](SerializationStream stream, T& obj, ArchiveMode mode, DataSerializer1 dataSerializer) at Stride.Engine.EntityComponent.Serializer.Serialize(EntityComponent& obj, ArchiveMode mode, SerializationStream stream) at Stride.Core.DataSerializers.StrideEngine_TransformComponentSerializer.Serialize(TransformComponent& obj, ArchiveMode mode, SerializationStream stream) at Stride.Core.Serialization.MemberReuseSerializer1.Serialize(T& obj, ArchiveMode mode, SerializationStream stream)
at Stride.Core.Serialization.Serializers.ListAllSerializer2.Serialize(TList& obj, ArchiveMode mode, SerializationStream stream) at Stride.Core.DataSerializers.TransformComponent_TransformChildrenCollectionSerializer.Serialize(TransformChildrenCollection& obj, ArchiveMode mode, SerializationStream stream) at Stride.Core.Serialization.DataSerializer1.Serialize(Object& obj, ArchiveMode mode, SerializationStream stream)
at Stride.Core.Serialization.MemberReuseSerializer1.Serialize(T& obj, ArchiveMode mode, SerializationStream stream) at Stride.Core.DataSerializers.StrideEngine_TransformComponentSerializer.Serialize(TransformComponent& obj, ArchiveMode mode, SerializationStream stream) at Stride.Core.Serialization.DataSerializer1.Serialize(Object& obj, ArchiveMode mode, SerializationStream stream)
at Stride.Core.Serialization.MemberReuseSerializer1.Serialize(T& obj, ArchiveMode mode, SerializationStream stream) at Stride.Core.Serialization.Serializers.ListAllSerializer2.Serialize(TList& obj, ArchiveMode mode, SerializationStream stream)
at Stride.Core.DataSerializers.StrideEngine_EntityComponentCollectionSerializer.Serialize(EntityComponentCollection& obj, ArchiveMode mode, SerializationStream stream)
at Stride.Core.Serialization.MemberReuseSerializer1.Serialize(T& obj, ArchiveMode mode, SerializationStream stream) at Stride.Engine.Entity.EntitySerializer.Serialize(Entity& obj, ArchiveMode mode, SerializationStream stream) at Stride.Core.Serialization.MemberReuseSerializer1.Serialize(T& obj, ArchiveMode mode, SerializationStream stream)
at Stride.Core.Serialization.Serializers.ListSerializer1.Serialize(List1& obj, ArchiveMode mode, SerializationStream stream)
at Stride.Core.Serialization.MemberReuseSerializer1.Serialize(T& obj, ArchiveMode mode, SerializationStream stream) at Stride.Core.DataSerializers.StrideEngine_PrefabSerializer.Serialize(Prefab& obj, ArchiveMode mode, SerializationStream stream) at Stride.Core.Serialization.MemberReuseSerializer1.SerializeExtended(T& obj, ArchiveMode mode, SerializationStream stream, DataSerializer1 dataSerializer) at Stride.Core.Serialization.SerializerExtensions.SerializeExtended[T](SerializationStream stream, T& obj, ArchiveMode mode, DataSerializer1 dataSerializer)
at Stride.Engine.Design.EntityCloner.Clone[T](HashSet1 clonedObjects, TryGetValueFunction2 mappedObjects, T entity)
at Stride.Engine.Design.EntityCloner.Clone(Prefab prefab)
at Stride.Engine.Prefab.Instantiate()
...
\Core.cs:line 94
at Stride.Core.MicroThreading.Scheduler.Run()

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Reproduce the failure by instantiating a prefab with a transparent Material, changing scenes, and instantiating it again. Start with Stride.Engine.Prefab.Instantiate and EntityCloner.Clone, then trace ValueParameterKeySerializer and MaterialSerializer around the reported serialization stack; done means the prefab instantiates successfully after the scene change.

Written by the indexing model from the issue text.

Assessment

Tech stack
csharp
Domain
game-dev
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
30/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.