Recently, I am working on a real-time rendering based on unity through distributed rendering. There are many moving objects related to logic in this scene. Now I use the way of RPC call to synchronize the master and slave worlds. However, due to the lag of message transmission, the slave world cannot be completely synchronized, resulting in the dislocation of the picture when the segmented scenes are spliced together.Anybody knows something about parallel rendering using multiple computers, and the rendering is real-time rendering?
I discussed this problem with my senior brother today, and unfortunately I decided to overturn the plan. As I’ve understood before, there are two directions for distributed rendering that address this real-time rendering.
One is oriented to pipeline data flow, in which the 3d image data of the 3D world is captured by the host computer and then divided into four copies and distributed to the other three hosts. The four data are calculated by one master terminal and three slave terminals. This calculation process is the process of converting 3d image data into 2d image. The other three secondary end after the calculation of the calculated data back to the master end, the master end then four pieces of data into a complete data, and finally render on the screen. This is really a distributed rendering.
Another solution is to face the direction of the communication synchronization, are specific to four computers at the same time, import the same project assets, cut off the other 3 from the power, only by the main end offer from end motion object location information, real-time update from end, achieve the goal of a synchronization, then four hosts, including the main end camera view in a split, The data from all four hosts is then projected onto the screen simultaneously. The latter scheme seems to be feasible, but after a careful thought, the scenes in the four hosts cannot be completely synchronized in any case, and the complexity of scenes in each host including communication, parsing instructions and camera movement will directly affect the image data projected to the screen by each host. It is like projecting the scenes of four worlds onto the screen, although they are highly similar, there are still differences and delays. This kind of synchronization might work in a multiplayer game, but in my project it would have to be high enough that the worlds of almost all four consoles would be exactly the same so that it wouldn’t feel like a wobble when projected onto the screen.
So I decided to reverse my previous approach to network syncing, which was very sad, and went for piped image data. I hope readers can provide me with the following help.
-
How to capture the underlying image data in Unity.
-
How does the Unity image pipeline make a break to achieve a premise of data sending?
-
Is there a good way to transmit data through LAN based on Unity
I will accept any useful comments, thank you very much, if you want to access my synchronization solution, which I abandoned, please visit my YouTube and Github documents, and I will attach my Google email, please feel free to contact me.