[Serializer] Error when instantiating a prefab with a Material with Transparency set
Nobody has claimed this yet.
- 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:
- 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
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- 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