Replies: 3 comments
This comment has been hidden.
This comment has been hidden.
-
Archived and moved to Godot Engine Proposals |
Beta Was this translation helpful? Give feedback.
-
let me find the problem statement here's the design as I think it works you have a lot of 8_000 player servers all these take is input you have a lot of a 10_000 player world servers 1 b each player server see all the other players as ghosts and do not interact max, jamie-pate, Godot Engine — Today at 17:51 # Copyright (c) 2018-present. This file is part of V-Sekai https://v-sekai.org/.
# K. S. Ernest (Fire) Lee & Contributors
# state_lcrs_tree_converter.exs
# SPDX-License-Identifier: MIT
defmodule StateNode do
defstruct [:first_child, :next_sibling, :state]
end
defmodule StateLCRSTreeFilter do
use Membrane.Filter
alias StateNode
def handle_init(_opts) do
{:ok, %{}}
end
@impl true
def handle_demand(:output, size, :buffers, _ctx, state) do
{{:ok, demand: {:input, size}}, state}
end
def handle_process(:input, buffer, _ctx, state) do
states = buffer.payload
tree = convert_states_to_tree(states)
buffer = %{buffer | payload: tree}
{{:ok, buffer: {:output, buffer}}, state}
end
defp convert_states_to_tree([state | _] = states) do
%StateNode{
state: elem(state, 0),
first_child: convert_children(elem(state, 1)),
next_sibling: convert_siblings(tl(states))
}
end
defp convert_siblings([]), do: nil
defp convert_siblings([head | tail]) do
%StateNode{
state: elem(head, 0),
first_child: convert_children(elem(head, 1)),
next_sibling: convert_siblings(tail)
}
end
defp convert_children([]), do: nil
defp convert_children([head | tail]) do
%StateNode{
state: elem(head, 0),
first_child: convert_children(elem(head, 1)),
next_sibling: convert_children(tail)
}
end
end convert_states_to_tree is my function do that max, jamie-pate, Godot Engine — Today at 17:54 max, jamie-pate, Godot Engine — Today at 17:54 https://github.com/elixir-nx/nx we're 3 ips in pure elixir. We can go to 15_308 gpu xla f32 ips on this chart |
Beta Was this translation helpful? Give feedback.
-
This art for this demo would consist of a large train station model and some models of trains. It would consists on trains coming in and out of the station, and a huge amount (thousands) of agents (AI) entering and leaving trains all the time. This demo would allow to stress the following
Godot existing features:
Game features:
Fales comments
We can approximate the size of the state based on the size of the variants synchronized, and apply an average compression ratio
the profiler also shows you that bandwidth, but it's not smart, so it does not include things like protocol compression.
If you have a 1000 objects, each represented by 4 bytes ID + payload, you already have a 4K state, at 60Hz that's 240K/s and this is without payload (but also without compression).
ID Software's Quake 3 was 20 hertz tick rate (1998).
As a good actionable, we should test a few popular games bandwidth usage.
Start the client, measure the min/max/avg/deviation bandwidth in a real match scenario.
For example:
Fire's comments
What's a good estimate on a baseline channel rate on upload and download? 1. of a player 2. of a server
References
Beta Was this translation helpful? Give feedback.
All reactions