NEWS

Actualización naval

Noticias oficiales de Rust de Facepunch

Actualización naval
OFICIAL

Rust - Remolque de actualización naval

Barcos fabricados por jugadores

¡Ya están aquí barcos fabricados por jugadores, ofreciendo una nueva forma de explorar los mares, incluido el Mar Profundo!

¡Coloca la nueva Estación de Construcción de Barcos desplegable en el agua y ponte a construir con tus compañeros! Utiliza el nuevo Plan de Construcción de Barcos para construir tu barco soñado, utilizando un nuevo conjunto de bloques específicos para cada barco.

Añade un volante, un ancla, velas, motores, tablas, rampas y cañones para completar tu embarcación y adentrarte en el Mar Profundo.

Una cuidadosa consideración y colocación de los motores y las velas es importante si quieres un barco apto para la navegación, ya que afectarán a su manejo y velocidad. Las velas y los motores pueden invertirse usando las opciones del menú radial para un aparcamiento marcha atrás muy práctico.

Asegúrate de poner un código de bloqueo en el volante para evitar accesos no deseados o robos de tu reluciente barco nuevo.

Los desplegables regulares pueden colocarse en tus barcos. Si trabajan en el remolcador, también trabajarán aquí.

¿Necesitas hacer un cambio después de darte cuenta de que tu barco solo da vueltas en círculos? Utiliza el modo Desplegar y Editar (no disponible en el mar profundo) para desplegar rápida y fácilmente una estación de construcción de barcos alrededor de tu barco.

¡Diviértete construyendo y explorando los mares!

Nuevos barcos desplegables

Para que tu embarcación esté en condiciones de navegar, ahora tenemos algunos nuevos desplegables, ¡específicamente para tu barco!

Estación de Construcción de Barcos

La estación de construcción de barcos se puede colocar en aguas profundas, se usa para construir y editar tu barco.

Plano de construcción

El plan de construcción de barcos es similar al del planificador de obras que conoces y adoras, pero para embarcaciones.

Velas

Una lámina de tela endurecida aparejada para atrapar el viento y ayudar a impulsar el barco hacia adelante.

Timón

Imprescindible para cualquier barco navegable. Se usa para dirigir y controlar tu dirección, con un bloqueo incorporado para mantener tu embarcación segura cuando no estás al volante.

Motor

Un motor potente que funciona con combustible de baja calidad y lo consume rápidamente. Ruidosos, sedientos e ineficientes, pero invaluables cuando necesitas escapar del peligro, perseguir a otros jugadores o salir de una mala situación. A veces la velocidad merece la pena por el coste.

Presentadora

Un ancla pesada usada para evitar que tu barco derivara. Bájalo para mantener la posición y mantén tu recipiente exactamente donde quieres. Sin ella, tu barco podría derivar hasta la orilla.

Cañón

Un arma naval poderosa usada para hundir los barcos de otros jugadores. Cárgalo con balas de cañón.

Pequeña rampa

Puente huecos y crea puntos de acceso rápidos. Ideal para abordar otros barcos o llegar a tierra desde el agua.

Plank

Usaba para salvar huecos, abordar otros barcos y resolver pequeños desacuerdos empujando amigos a mar abierto.

el mar profundo

El Mar Profundo es una nueva región offshore a la que puedes viajar en barcos. Es de alto riesgo, alta recompensa y intencionadamente implacable.

Puedes acceder navegando hacia el borde del mapa usando un barco potente como barcos fabricados por jugadores, RHIBs o los nuevos barcos PT.

Este no es un lugar para vivir: no puedes construir y nada reaparece. Primero en llegar, primero en servir. Las profundidades del mar se abren y cierran de forma intermitente, como un evento mundial.

En el interior, puedes explorar nuevos contenidos detallados a continuación en este blog:

• Islas tropicales

• Ciudades flotantes

• Barcos fantasma

• Embarcaciones controladas por científicos

Tenemos muchos planes para expandir las profundidades marinas y usarlas como puente entre mundos.

Barcos fantasma

Al igual que los monumentos, los Barcos Fantasma son barcos estacionarios dispersos por el mar profundo y llenos de botín para que la gente lo recoja mientras navega en sus barcos.

Cada Nave Fantasma está protegida por científicos, tanto en la nave como en patrullas cercanas, que intentarán mantenerte fuera de la nave. Algunos Barcos Fantasma también contienen cajas cerradas, que tendrás que hackear bajo presión de otros jugadores y barcos científicos.

Esperamos que los barcos fantasma, junto con otros lugares de botín como islas tropicales, ofrezcan suficiente incentivo para visitar el mar profundo con frecuencia.

Ciudades flotantes de aguas profundas

Mientras exploras las profundidades marinas, puede que te encuentres con las Ciudades Flotantes. Construidos a partir de barcazas abandonadas y la estructura de una plataforma petrolífera sin terminar, estos monumentos destartalados sirven como refugio seguro para todo tipo de jugadores.

Actualmente, existen cuatro variantes de Ciudades Flotantes que pueden aparecer en un servidor, y cada ciudad flotante ofrece el mismo tipo de instalaciones. Entre ellos se incluyen muelles donde puedes asegurar tu barco y varios vendedores NPC que venden armas, equipo, comida y suministros médicos.

Se puede acceder a una barcaza agrícola cercana por una pequeña tarifa, dándote la oportunidad de cosechar cosechas frescas. A lo largo de cada monumento, las comodidades conocidas de las zonas seguras están repartidas entre las plataformas, incluyendo recicladores, bancos de trabajo, mesas de investigación y refinerías.

En el centro de cada ciudad flotante se encuentra el Deep Deck Casino, un espacio acogedor que ofrece entretenimiento y un lugar para relajarse para todos los marineros cansados. Aquí puedes conocer a otros supervivientes, relajarte en la piscina, disfrutar de la música y apostar tus regalos a tu antojo.

Solo recuerda portarte bien mientras estés allí: monta problemas, y las torretas de seguridad te recordarán por qué fue una mala idea.

Islas de aguas profundas

Durante años, el océano ha sido solo un vacío azul entre tú y las plataformas petrolíferas. Con esta actualización, presentamos un nuevo bioma en las Islas Tropicales, las Islas Tropicales.

Estas microislas son completamente distintas del continente. Prepárate para arenas blancas, palmeras densas e incluso un nuevo delicioso manjar natural. Aquí no verás pinos.

Su naturaleza semi-procedimental dará lugar a experiencias diferentes. Algunos podrían tener ruinas antiguas, otros una veta madre de mineral, o ambas cosas.

Pero ve con cuidado. No eres el único que busca una fortuna ahí fuera.

BARCOS CIENTÍFICOS

Hemos añadido un barco nuevo: el PT Boat. Solo se encuentra en las profundidades marinas: es más lento que el RHIB y consume más combustible, pero es más fuerte y tiene un buen impacto.

Cuidado, las profundidades del mar están llenas de los nuevos Barcos Científicos. Estas embarcaciones (incluyendo los RHIBs y la nueva lancha PT) están tripuladas por científicos que recorren el Mar Profundo en grupos coordinados buscando jugadores con los que participar. Puede que los encuentres protegiendo la Caja Hackeada a bordo de un Barco Fantasma. Cada barco puede ser despejado de Científicos y robado por el jugador. Nos preguntamos qué encontraréis a bordo.

Cada lancha PT viene equipada con dos torretas. Uno equipado con dos ametralladoras de calibre 50, y el otro con un cañón más preciso de calibre 50. Cada una puede recargarse con munición estándar de fusil 5.56.

RHIB Refresh

El RHIB ha necesitado un poco de cuidado, y no hay mejor momento para hacerlo que la Actualización Naval. El modelo y las texturas han sido actualizados, junto con un nuevo modelo de caja de almacenamiento.

El RHIB ahora viene equipado con una brújula funcional y pantallas de mapas, ayudándote a navegar por el océano.

nueva IA científica en plataformas petrolíferas Y EN EL MAR

Si luchas contra muchos científicos, ya sabes, intentar colarte o flanquearlos es la forma perfecta de morir.

Siempre saben dónde estás, y te girarán instantáneamente y te teletransportarán si intentas jugar con inteligencia y superarles.

Por eso, es muy tentador o bien dispararles desde muy lejos o acampar detrás de un cuello de botella y esperar a que inevitablemente entren uno a uno.

Esto convierte la toma de un monumento custodiado por científicos en una prueba de recursos con un techo de habilidad bajo.

En resumen:

d

Ya sabes cómo va el truco, ¿y tienes suficiente munición y vendas para grindar a través de ellos?

La nueva IA científica está surgiendo progresivamente, pero solo para , y por ahora.

Plataformas petrolíferas

Naves fantasma

Islas de aguas profundas

Se les distingue por su atuendo de camuflaje naval y su visera cuadrada.

A diferencia de sus primos, no ven a través de las paredes y necesitan confiar en ruidos y avistamientos recientes para encontrarte.

Esto significa que puedes atraerlos asomándose o haciendo ruido, y luego rodear y dispararles por detrás.

Esto se facilita aún más por su menor tiempo de reacción.

Si apareces en un ángulo que no esperaban, se sorprenderán, y entonces puedes derribarles antes de que puedan reaccionar.

Además, no se lanzarán a cuellos de botella para que un jugador que acampe los masacre, sino que intentarán flanquear, lanzar granadas de humo y lanzarse juntos, o simplemente esperarán en emboscada al otro lado.

También serán mucho más cautelosos con los francotiradores; si les alcanzan o oyen un disparo, todos se lanzarán a cubrirse y esperarán.

Estaremos atentos a tus comentarios y seguiremos ajustándolos.

Cuando estén en un estado suficientemente bueno, consideraremos cambiar a los otros científicos de la isla principal a la nueva IA.

MODELO DE VISTA DEL PLANIFICADOR DE EDIFICIOS

El planificador, al construir o desplegar un objeto, siempre ha tenido un modelo en tercera persona que todos los demás pueden ver, pero nunca ha tenido un modelo en primera persona.

Creemos que sería bueno que lo que ven los demás coincidiera con lo que tú ves, así que hemos añadido un Viewmodel al planificador.

Nuevas misiones

Tenemos 5 nuevas misiones con temática naval en la actualización de este mes. Estos pueden recogerse de una mezcla de NPCs nuevos y ya existentes proveedores de misión. Algunas requieren que te aventures en las profundidades marinas, otras te mantienen arraigado en el continente.

Esta actualización aporta mucho trabajo para mejorar la forma en que creamos y modificamos las misiones internamente. Todavía hay más cosas que queremos hacer con las misiones, pero ahora estamos en mejor posición para trabajar en ellas que antes. Este trabajo además incorpora varias correcciones de calidad de vida y mejoras en misiones existentes y conversaciones con NPC, así como optimizaciones de fondo relacionadas.

Grandes embarcaciones petrolíferas

Ahora los barcos científicos aparecerán en Large Oilrig junto con la caja, lo que supone un reto adicional a los jugadores al sacar petróleo del mar.

Los RHIBs patrullan alrededor de la Gran Plataforma Petrolífera, impidiendo que los jugadores se acerquen. Estos reaparecen cada vez que la plataforma petrolera se reinicia.

Puedes matar a los científicos y robar el botín a bordo. Los barcos robados se quedarán después de que la plataforma petrolera se reinicie.

DLC de paquete de artista

Rust tiene una de las bases de jugadores más diversas de cualquier juego popular, desde jugadores de PVP hardcore hasta RPers amigables y no tan amigables. Para reflejar esto, hemos sacado nuestros mejores pinceles digitales y creado el Artist DLC Pack; Una colección de objetos geniales e ingeniosos diseñados para ayudarte a expresarte, ya sea que quieras pintar un retrato encantador o etiquetar la base de tu vecino.

Pistola de paintball y monos

Convierte el asalto táctico en arte con la pistola de paintball y el mono. Con un tipo de munición único, carga el tolva con bolas de pintura, selecciona el color de tu equipo y crea una escena. Viene en 5 colores para varios equipos.

Las bolas de pintura hacen diferentes cantidades de daño dependiendo de si tanto el jugador herido como el instigador llevan el mono equipado. Hay convases de servidor separados para escalar estos si los administradores lo desean, 'paintballstandarddamage' y 'paintballoverallsdamage'.

Por supuesto, también puedes usar la pistola de paintball para marcar lo que quieras, ¡no solo a otros jugadores! Además, los monos de paintball tienen una característica única: la capucha se sube o baja dinámicamente según la prefieras.

Blanco reactivo pintable

Ilumina tus propios objetivos con esta apariencia desplegable para el Objetivo Reactivo. Puedes pintar tanto en la tabla de objetivo como en el casco de cubo. Como característica adicional, el cubo actúa como la cabeza de un jugador, permitiéndote perfeccionar tus habilidades de tiro a la cabeza.

Marcos ornamentados

Aporta un toque de clase a tu base con estos marcos ornamentados. Pinta sobre ellos o añade una foto, y cuando estés satisfecho con tu obra maestra, dale al marco una descripción única. Viene en 5 tamaños, desde pequeño hasta extra extra grande.

Marcos de iluminación

Ilumina tu obra de arte con esta colección de 5 marcos iluminados. Apoyando IO, puedes mostrar estas luces encendidas o apagadas, lo que resaltará tu trabajo para que todos lo vean.

Fotogramas de obturación

Desenrolla tus diseños con los marcos del obturador. Disponible en 5 variantes de tamaño, puedes subir y bajar los obturadores tanto manualmente como con IO, permitiendo infinitas posibilidades desde un concurso de juegos de rol hasta la revelación definitiva de la base de trampas.

Lienzos sin marco

Si el marco extra grande no es lo suficientemente grande para tu ambición, no busques más que este conjunto de 5 lienzos sin marco. Puedes usarlos para crear murales de proporciones verdaderamente épicas.

Caballete portátil

Lleva tu talento al aire libre con este nuevo y único desplegable. Puedes montar cualquier marco de tamaño grande y pintar todo lo que quieras, disfrutando del aire fresco a favor del viento de Fishing Village. En el modo pintura, puedes alternar el fondo e incluso el propio lienzo, ayudándote en tu visión creativa. El caballete soporta cualquier color que quieras usar, incluso negro...

Ventana pintable

Tanto si quieres hacer vidrieras, un acuario, un escaparate o un señuelo al estilo de Mi Pobre Angelito, ¡esta ventana pintable te será muy útil! Este desplegable es una skin para la Ventana de Cristal Reforzada.

Rosette Award Sprays

Por último, pero no menos importante, con el paquete DLC de Artista se otorgan 4 sprays personalizados que se pueden usar con la herramienta de pintura. Incluye sprays para el 1º Puesto, 2º Puesto, 3º Puesto y... Último puesto. Usa estos como consideres oportuno.

Nuevo aspecto para taller: SKS

Este mes, presentamos el próximo Workshop Skinnable: el SKS

El SKS ha sido una solicitud popular por parte de la comunidad de desolladores, ¡y estamos encantados de atendernos! Como una de nuestras armas más recientes, estamos deseando ver cómo funciona la comunidad con sus gráficos actualizados.

Para crear tu propia skin SKS, acércate al taller del juego y localiza el objeto de arma SKS. Desde ahí, puedes descargar el archivo del modelo y añadir tus propios materiales.

Rendimiento del servidor

Si has estado siguiendo el desarrollo de esta actualización, probablemente sabrás que tuvimos que hacerlo debido a algunos problemas preocupantes de rendimiento del servidor. Desde entonces nos hemos centrado muchísimo en acercar el rendimiento del servidor lo más posible a los niveles previos a la actualización naval. Aunque muchos de los problemas estaban en contenido nuevo, no nos quedamos ahí y hemos mejorado mucho los cuellos de botella de rendimiento antiguos.

Lo pospusieron el año pasado

Muchas de estas explicaciones pueden ser un poco técnicas, pero pensamos que podría ser interesante ver el proceso que seguimos al trabajar estos temas.

Rendimiento de cocina/horno

Hemos notado algunos tiempos de fotograma largos atribuidos al proceso del horno: esto incluye cualquier hoguera, caldera, barbacoa, etc. Al mirar más de cerca, tenía algunos problemas. El proceso de cocción funciona cada 0,5 segundos sin aleatoriedad, así que si muchos hornos funcionaran a la vez probablemente se amontonarían y causarían grandes picos. En un caso de prueba artificial con 500 hornos funcionando sincronizados, veíamos 18 ms para trabajar en todos los hornos.

Los hornos ahora utilizan un presupuesto máximo de 0,25 ms por fotograma para suavizar el coste cuando funcionan a gran escala. Esto solo haría que el sistema funcionara más lento, así que también hicimos algunas optimizaciones para que cada horno funcionara más rápido. Al crear un elemento de salida, solíamos crear un nuevo elemento (por ejemplo, 1x metal frag) e intentar añadir ese elemento a la salida (que normalmente añadía +1 a la pila existente y luego eliminaba el elemento recién creado). Es mucho más rápido comprobar si ya hay un elemento en la salida y simplemente aumentar su número, saltándose el proceso de creación de nuevos elementos (llevamos un tiempo usando este truco en el sistema Industrial). Cada horno también iteraba sobre todos sus elementos para encontrar el combustible en cada tick, que ahora está almacenado en caché. Por último, el horno marcaba su inventario como sucio cada vez que actualizaba el proceso de cocción (para actualizar el progreso animado en el icono del objeto), que ahora solo se ensucia al superar un umbral (5%, 10%, etc.), lo que reduce drásticamente la carga de enviar el inventario actualizado.

Estos cambios reducen la prueba artificial de 500 hornos fundiendo mineral metálico a un máximo de 0,25 ms, a menudo menos y sin cambios visibles para los jugadores.

Rendimiento industrial

El sistema industrial siempre ha sido un reto en cuanto al rendimiento de los servidores. Los diseños de bases y tuberías se han vuelto cada vez más elaborados y complejos con los años, lo que expone nuevos cuellos de botella en la lógica. Este mes, pude conseguir una copia de una base que funcionaba extremadamente mal en uno de nuestros servidores en vivo y que fue un punto de referencia útil. En algunos casos, esta base gastaba 20 ms por fotograma para evaluar completamente todo el sistema industrial, lo cual obviamente es un problema en cualquier servidor.

Las principales ventajas aquí consistieron en reducir el número de veces que tuvimos que iterar sobre contenedores de objetos y otros arrays. A esta escala, simplemente obtener un elemento de un contenedor puede ser lento, ya que el orden de los elementos en memoria puede no coincidir con el orden de los elementos en un contenedor, por lo que potencialmente necesitamos iterar sobre todo el contenedor para encontrar qué elemento hay en una ranura determinada. Multiplica eso por cada ranura en cada entrada, evaluando cada ranura en cada salida, y el coste se acumula rápidamente. Hacer una búsqueda rápida a la que podemos referirnos durante el proceso industrial fue una gran ganancia, en algunos casos, evitando más de 20.000 enumeraciones.

Comprobar que los elementos pasaban filtros también nos estaba costando tiempo, pasar todo el contenedor de entrada por el filtro una sola vez al inicio del proceso nos permitía saltar aún más enumeraciones. También significaba que podíamos quitar un par de capas de bucles for anidados. El resultado final es que la base anterior ahora alcanzaría un pico de 3 ms por fotograma. Sigue siendo bastante tiempo, pero es una mejora notable respecto al estuche original.

Sistema de relaciones

El sistema RelationshipManager controla el sistema de Contactos: toma imágenes de los jugadores que conoces y lleva un seguimiento de tus relaciones. Es relativamente limitado en funcionalidad, pero estaba tardando bastante en servidores muy poblados.

Esto consistía en iterar sobre cada jugador en el servidor, encontrar a los jugadores en rango, comprobar si eran visibles (usando una prueba de física) y crear una nueva relación si era necesario. También revisaría todas las relaciones existentes que tiene un jugador, calcularía cuántos jugadores han marcado a un jugador como negativo y lo marcaría como hostil por defecto (es decir, su placa de nombre será roja). Esto ocurría cada 1 segundo sin protección para muchos jugadores que lo activaban en el mismo frame, así que esto podía llevar a tiempos de frames muy largos ocasionales, hasta 0,75 ms en servidores ocupados.

He actualizado este proceso para usar una cola presupuestada, así que solo haremos un máximo de 0,15 ms de procesamiento en un frame. Si más jugadores necesitan una actualización, esperará al siguiente frame. Como esta lógica no tiene por qué estar perfectamente actualizada, un pequeño retraso es aceptable y probablemente no se notará. También actualicé el cálculo de hostil para que solo se ejecute si un jugador ha modificado un contacto (marcado como amistoso/hostil/neutral), ya que en la mayoría de los casos este cálculo daba el mismo resultado cada vez. Por último, actualicé la comprobación de línea de visión al crear nuevos contactos para usar el sistema de oclusión del servidor como primera pasada, lo que significa que muchas veces podemos saltarnos el cálculo de física.

Tamaños de los controladores de control de jugadores

Somos soportadores de cambiar el tamaño del colisionador del jugador en escenarios seleccionados: cuando está en el suelo, dormido, montado en vehículos, etc. Esto se aplicaba iterando sobre cada jugador del servidor, cada frame, y actualizándolo según fuera necesario. En un servidor con poca población, esto tardaba 0,25 ms, aunque en la mayoría de los casos no necesitaba actualizar el tamaño del colisionador.

He mejorado esto para usar una cola presupuestada, así que solo actualizará 0,05 ms de jugadores por fotograma. Como el tamaño del colisionador de jugadores es bastante importante, he añadido un ajuste manual de tamaño cuando el jugador cambia de estado (por ejemplo, entra en suspensión), así que el tamaño debería actualizarse inmediatamente y no retrasarse unos pocos fotogramas.

Volúmenes de Parentalidad

Tenemos un sistema en Rust llamado "volúmenes parentales"; como su nombre indica, estos volúmenes detectan si un reproductor u otra entidad está cerca y debe ser parentado a otro objeto. Como hay muchos casos límite, también hacemos comprobaciones adicionales (como consultas de física) para evitar problemas.

Los próximos barcos fabricados por jugadores dependen de él, y también lo utilizan mucho más que cualquier otra cosa en el mundo. Durante el desarrollo, hemos descubierto que añade un alto coste al procesamiento del servidor. Aquí tienes un ejemplo de 100 barcos hechos de 3 bloques y 3 jugadores dormidos:

Y aquí está cuánto cuesta - , que es mucho para algo que no está en uso activo:

3,5 ms

He dedicado tiempo a reescribir esta lógica que ejecuta si está configurada como (que es la opción por defecto). Ahora es:

TriggerParent.TickMode

1

• Utiliza su propia cola de procesamiento en lugar de Invokes, reduciendo los bloqueos si el mundo físico cambia entre invocaciones individuales

• Utilizó procesamiento por lotes y trabajos en ráfaga para solaparse el trabajo entre hilos siempre que fuera posible

• Saltar trabajo si el volumen y su contenido no se han movido o cambiado

Como resultado, el escenario anterior ahora adopta:

• 1,4 ms (-61%) si todos los barcos se están moviendo

• 0,25 ms (-93%) si todos los barcos son estáticos

Picos de Aparición Procedural

Mientras revisaba nuestra telemetría de rendimiento, he notado que estamos experimentando picos enormes y extraños y frecuentes de lag cada minuto más o menos:

Resulta que nuestro sistema de población de entidades estaba teniendo dificultades para reaparecer todas las entidades que faltaban (específicamente los montones de chatarra). Funciona rastreando la densidad de una población en el servidor, ejecutando un montón de muestras aleatorias del mundo, filtrando las inválidas y finalmente usando esas posiciones para generar entidades.

Escribí una herramienta que simula la reposición de población(), visualiza cómo funciona el muestreo y por qué se rechazan las muestras. Varias razones de rechazo están codificadas por colores, siendo solo "Verde" el éxito. Aquí está la visualización de las correcciones anteriores: (límite máximo) intenta generar 800 montones de chatarra:

spawn.dump_map <popname> [cuenta=100]

25000

Resulta que teníamos un par de bugs que impedían tanto generar nuevas entidades como muestras fijas aunque no tuviéramos entidades que generar. Al arreglar eso y volver a ejecutar la herramienta, tenemos intentos de generar 800 pilas de chatarra (hay que hacer zoom para ver los píxeles):

3019

Esto también tuvo un efecto positivo en nuestra telemetría de tiempo máximo de fotogramas: los picos de lag son mucho más raros ahora:

Rendimiento de la torreta automática

Las torretas automáticas son constantemente un gran desgaste para los servidores. Esto es porque hacen actualizaciones frecuentes de ángulo cada pocos segundos, esto ocurre con cada torreta en un servidor. Cada una de estas actualizaciones de ángulo se sincronizaba constantemente a través de la red con todos los clientes cercanos. Esto estaba saturando a los clientes con un montón de sobrecarga innecesaria de red.

El gráfico siguiente muestra la diferencia de tiempo de ejecución del método que se utilizó para enviar estos valores a través de la red. El parche salió a las 22:00 en nuestros servidores de staging (puedes ver la caída brusca tras la implementación). Este cambio también afecta a la Ballista y al nuevo Cañón, reduciendo los gastos de red de ambos.

SendAimDir()

Estas actualizaciones de ángulo también se realizaban para cada torreta del hilo principal sin mucho balanceo de carga ni limitaciones.

Para combatir esto, he introducido dos nuevos bucles presupuestados, que evitarán que un montón de Torretas Automáticas consuman en exceso los recursos del servidor. Esto será más evidente en servidores grandes. Cada uno de los presupuestos de servidor para torretas puede configurarse con los Convars que aparecen a continuación:

Se pueden dedicar milisegundos máximos por fotograma a actualizaciones de ángulos de torreta y actualizaciones generales

NUEVO - tick_update_ms (por defecto 1) -

Se puede gastar un máximo de milisegundos por fotograma en las comprobaciones de munición de la torreta

NUEVO - ammo_update_ms

(por defecto 0,1) -

¿Cuántos milisegundos se pueden dedicar por fotograma a captar ángulos de torreta?

scan_budget_ms

(por defecto 0,5) -

Rendimiento de flotabilidad

En preparación para la Actualización Naval, necesitábamos una forma para que nuestros sistemas de agua pudieran soportar una gran cantidad de objetos flotantes en aguas profundas. Esto no solo incluye los barcos de los nuevos jugadores, sino también objetos flotantes existentes como cadáveres o botín.

El código de flotabilidad ya estaba bastante optimizado y usaba algunas de nuestras APIs más nuevas para obtener cosas como la altura del agua o comprobar colisiones. Sin embargo, cada objeto de flotación estaba ejecutando simulaciones por sí mismo, lo que significa que ejecutaban todos los pasos individuales de flotabilidad uno por uno.

En lugar de hacer comprobaciones una por una, podemos agrupar estas comprobaciones de flotabilidad para que se ejecuten en todos los objetos usando múltiples hilos de trabajo. Anteriormente, en lógica simplificada, comprobábamos la altura del agua para varios puntos en cada objeto y luego añadíamos algunas fuerzas para mover el objeto hacia la superficie del agua. Ahora obtenemos todas las alturas de todos los objetos flotantes al mismo tiempo en varios hilos, calculamos sus fuerzas y finalmente aplicamos sus fuerzas de nuevo al hilo principal.

Esto acaba siendo 4 veces más rápido en un escenario con 200 barcos (cada barco con varios puntos de flotabilidad), y escala mejor que antes a medida que añades más objetos.

Unidad personalizada / physx

La física ha sido el cuello de botella del rendimiento de los servidores Rust durante mucho tiempo. Más allá de reducir el número de colisionadores en el mundo, no hemos tenido forma de reducir este coste de forma significativa. Sin embargo, el año pasado obtuvimos la capacidad de hacer cambios personalizados en nuestra propia versión del Unity Engine y desplegar actualizaciones del juego a través de él.

Puedes desglosar el tick de la física de muchas maneras diferentes. El mayor cuello de botella para el óxido se llama . Esta es la parte del tick de física donde rápidamente encuentras pares de colisionadores que podrían estar colisionando, antes de realizar cálculos más costosos para encontrar información de contacto precisa en una fase posterior. Simplemente debido al tamaño del mapa en Rust y a la densidad de colisionadores que tienen las bases grandes, esto acaba siendo una operación costosa.

Broadphase

Hemos realizado cambios específicos en el motor de física (PhysX), lo que acelera drásticamente esta parte del tick físico. Paralelizar la fase de trabajo fue el mayor impacto que pudimos hacer, dividiendo cada región en su propia tarea que se programa en todos los hilos de trabajo disponibles antes de que los resultados se combinen de nuevo en el hilo principal.

El gráfico anterior muestra el tiempo medio dedicado al tick de física durante un largo periodo en uno de nuestros servidores más activos. El punto medio del gráfico es cuando cambiamos a la nueva versión de Unity con nuestras bibliotecas personalizadas de PhysX. La mejora en rendimiento es bastante drástica.

Para asegurarnos de que estos cambios fueran seguros, lanzamos una actualización del servidor antes de la actualización naval solo con el cambio a la nueva versión de Unity/PhysX. Naturalmente, todas estas mejoras de rendimiento se convirtieron en aumentar los límites de jugadores, y el ciclo vuelve a empezar.

Tengo más mejoras en PhysX/Unity en marcha para el futuro, así que las cosas mejorarán a partir de aquí.

Rendimiento del Jugador Montado - Embarcaciones

Cuando un jugador estaba montado, siempre estábamos configurando su posición en la posición montada en cada frame en vez de limitarnos a hacer de padres. La crianza movería automáticamente al jugador a la posición montada por algo relativamente barato o gratis, mientras que nuestro método de configuración es bastante caro. Hay varias razones de código por las que necesitamos configurar cada trama (relacionadas con los volúmenes parentales), pero he conseguido superar suficientes como para poder desplegar la crianza montable en unos pocos montables seleccionados. Por ahora, solo serán barcos, pero confío en que podremos ponerlo en más montables en el futuro. Este coste también se estaba incrementando por la IA montada en vehículos, que había aumentado bastante en este parche. Por suerte, estas mejoras también solucionan la IA, aumentando el coste.

Antes, mostrando un servidor de prueba (aproximadamente 0,6 ms por fotograma moviendo jugadores) con un número bajo de jugadores (alrededor de 20~):

Con cientos de IA ahora alcanzamos 0,02 ms en el método padre de y ni siquiera se llama:

MountedPlayerSync

MountedPlayerSync

Rendimiento de furgón de cola

El mes pasado noté una caída inusual en el rendimiento al correr por Outpost, resultó que el tren de cola estático usaba una cantidad excesiva de lienzos, esto ya está solucionado.

Esto también afectó a los jugadores en las cercanías de vagones de cola de cola en estado salvaje.

Rendimiento de trampa de escopeta/torreta de llamas

Hemos notado algunos picos inusuales causados por torretas de llamas y trampas de escopeta. Ocurría cada pocos segundos en bases grandes sin ningún TC. Bastante raro, pero fijo al fin y al cabo.

También he reducido la sobrecarga de red de las torretas de llamas. Enviaban su rotación a todos los jugadores en el rango de la red cada 0,1 segundos, lo cual era innecesario.

Perfilador de Servidor - Modo Inmediato

Un par de días antes del confinamiento interno, implementé una mejora experimental para capturar regiones específicas del código. Esto debería ser útil para perseguir picos de retardo o medir código que se ejecuta con poca frecuencia. Aquí tienes un par de ejemplos de uso:

ServerProfiler

registrar Run() y todos los internos, luego exportar una instantánea usando(ServerProfiler.RecordScope("IndustrialQueue", RecordIndustrialQueueServerVar)) { industrialQueue.Run(); } // O // seguir grabando y exportar solo cuando se gaste más de 5 ms usando (ServerProfiler.RecordScopeIfSlow("IndustrialQueue", TimeSpan.FromMilliseconds(5), RecordIndustrialQueueServerVar)) { industrialQueue.Run(); }

En ambos casos generará un archivo, que puedes encontrar localmente en server/<ident>/profiler/. Para no saturarse de instantáneas y no tener demasiada sobrecarga (la grabación sigue ralentizando el rendimiento, la exportación es asíncrona):

IndustrialQueue.json.gz

• Se recomienda encarecidamente tener una bandera para determinar si los ámbitos están activos o no (RecordIndustrialQueueServerVar, por ejemplo)

• ServerProfiler tiene un periodo de espera interno de 30 minutos tras la exportación en el que los telescopios permanecen inactivos. Configurado mediante perfil. ExportIntervalS, el intervalo puede reiniciarse con perfil. ResetExportInterval si no quieres esperar

• Toda la función puede desactivarse mediante perfil. ImmediateModeEnabled(por defecto activado)

• Está diseñado para código que se ejecuta en 0,05ms o más, así que no lo uses para perfilar algo barato (configurar el perfilador y instalar ganchos de perfilador cuesta)

Gotas de Twitch - caseras 4

¡Los Twitch Drops han vuelto!

¡Del 5 al 15 de febrero!

¡Sintoniza para ver increíbles streams de algunos de nuestros creadores emergentes favoritos en la comunidad de Rust! No olvides reclamar tus Drops después de ver a estos fantásticos creadores en Twitch.

Sincronizado

ahorrar un 50% de descuento en Rust

¡Ahoy! Para celebrar el tan esperado lanzamiento de la Actualización Naval, ¡Rust ahora está a mitad de precio por tiempo limitado! ¡y regalárselo a un amigo para que se sumen nuevos compañeros de tripulación!

Cógmalo en Steam