
Buen día a todos, mi nombre es Sergey Noskov. Hoy me gustaría hablar sobre la creación de mi primer proyecto independiente completo llamado 35MM, lanzado en Steam en 2016. La historia es, por supuesto, larga, y desde entonces se han publicado varios artículos y entrevistas sobre el tema del proyecto, sin embargo, no hubo una descripción detallada del proceso de desarrollo. Además, los aspectos técnicos de la implementación apenas se tocaron. En realidad, hablaremos de esto.
Comencemos con un poco de historia. 35MM es una aventura con una vista en primera persona en el escenario de un post-apocalipsis en Rusia. La gente: un simulador de marcha. El juego nos cuenta la historia del viaje de dos vagabundos por las tierras desiertas que dejó la civilización. La mayor parte de la población murió después de una terrible enfermedad, y ahora la naturaleza recupera sus puntos de la humanidad. Desafortunadamente, no recuerdo exactamente cómo nació la idea de este proyecto, pero definitivamente recuerdo que en ese momento era un entusiasta fanático del tema del acosador, los juegos de Metro y, en general, ese entorno atmosférico. Los paisajes de ciudades abandonadas, zonas industriales y pueblos siempre despertaron mi inquietud y deleite. No sé qué tipo de enfermedad es y cómo explicar ese amor, pero somos muchos. En general, tal pasión por este tema fue suficiente para comenzar a crear su propio mundo de juegos pequeños.

Como ya tenía dos proyectos pequeños (Light y Train), así como experiencia en el motor de Unity, comencé a desarrollar un nuevo juego en él. Si no me equivoco, en ese momento la quinta versión del motor ya estaba disponible, pero hasta cierto punto soy conservador (no es mi mejor rasgo profesional), así que decidí quedarme en la versión 4.7. Para una comprensión general, hay muchas diferencias significativas entre las versiones 4 y 5 del motor, especialmente en términos de renderizado, iluminación y materiales. Unity 5 introdujo sombreadores físicamente precisos que pueden reflejar correctamente la luz y mostrar reflejos. En palabras simples: el resplandor y los reflejos en los materiales con tales sombreadores se ven más naturales y atractivos. En la versión 4, los sombreadores básicos eran mucho más simples, sin embargo, escribir sus propios sombreadores podría mejorar significativamente la calidad de la imagen. Hablaremos de esto un poco más tarde. Está claro que el desarrollo del juego incluye muchos aspectos, además de trabajar en el propio motor. Para que el motor tenga algo que llenar, se requiere contenido: modelos, texturas, sonidos, guiones, etc. Todo eso al final lo vemos en el monitor y lo escuchamos en las columnas. Y, por supuesto, cada tipo de contenido requiere su propio software. Para crear modelos 3D utilicé 3D max, para trabajar con gráficos 2D y crear texturas (Photoshop, para trabajar con sonido), Adobe Audition, escribí el código en el programa Monodevelop que vino con Unity. Te recomiendo especialmente que cierres los ojos o pases al siguiente capítulo: el juego está escrito en Javascript. Solo shh, no se lo digas a nadie. Solo sé que para algunos esto es de mal gusto y nadie escribe en Javascript. En general, se seleccionan las herramientas principales y el flujo de trabajo se aleja lentamente.
Como empezó todo
En algunas entrevistas, ya mencioné que generalmente no tengo un plan de desarrollo claro, sino solo el panorama general. Por lo tanto, a menudo, la creación de ubicaciones ocurre espontáneamente y el diseño se piensa sobre la marcha. Esto, por supuesto, es más un menos que un plus, pero hay un lado positivo: es muy entretenido y nunca se sabe exactamente qué sucederá después. Resulta que el juego en cierta medida ya vive su propia vida en las etapas iniciales. El desarrollo de 35MM comenzó con la creación de la primera ubicación: una casa forestal abandonada y una parcela espaciosa con campos y bosques de coníferas.

Para construir la superficie de la tierra se utilizó un terreno con 5-6 texturas de hierba y tierra. El sombreador de terreno estándar pinta la superficie con diferentes texturas usando la máscara RGBA, que creamos con un pincel en el motor, y el resultado a menudo se ve muy borroso, las transiciones entre las texturas son demasiado suaves y no parecen naturales. Para refinar este punto, se cambió el sombreador de terreno y se agregó una máscara de compensación. La textura en blanco y negro "desplazó" la máscara dibujada en el terreno y creó bordes rasgados y más afilados, que visualmente complicaron ligeramente la apariencia de la superficie.


La superficie de nuestra tierra se complementó con varios tipos de hierba en forma de pleins dispersos al azar. La unidad también tiene un modo de cartelera (cuando las llanuras de hierba siempre miran al jugador), pero no es muy adecuada para jugar con una vista en primera persona, porque es demasiado notable cómo la hierba "mira" nuestra cámara. Siempre debe tener cuidado con el césped y agregarlo dentro de límites razonables, ya que este placer arroja muchas llamadas y esto a su vez afecta el rendimiento. Cuantos más llamamientos, mayor será la carga en el sistema informático. Pero no olvide que no solo los desafíos aumentan la carga. Hay muchas formas de matar el rendimiento en el juego. Además de la hierba en el suelo, para variar, se esparcieron mallas con ramas y piedras, así como una serie de calcomanías con suciedad y rastros de ruedas de automóviles.

Después de crear la superficie, ve a la vegetación, los árboles y los arbustos. Preferí plantar la parte principal del bosque (árboles coníferos) usando las herramientas del terreno en sí, es decir, con un cepillo. La ventaja de este método es que se realiza rápida y fácilmente, además, a una gran distancia, dicho bosque se transforma de mallas a vallas publicitarias, lo que afecta muy bien la optimización. Sin embargo, cerca de la carga aumenta mucho, porque, según tengo entendido, tales árboles no ruedan. Tal vez me equivoque y alguien me corrija. Butching es una herramienta muy importante para la optimización. Hablando en términos generales, esta es una combinación de mallas con un material en una malla común, lo que reduce significativamente el número de llamadas de extracción, respectivamente, reduce la carga. Otra desventaja de los asientos en el terreno es la misma posición de los árboles, es decir, todos se crean en el mismo ángulo y esta igualdad es sorprendente. En este sentido, instalé algunos pinos, abetos y árboles de hoja caduca manualmente en diferentes ángulos y con diferentes tamaños, lo que agregó variedad al paisaje. Los arbustos se arreglaron de la misma manera.


Para completar, queda por tratar con el cielo. Para esta tarea, se utilizó un material ordinario de skybox con seis texturas. Hubo intentos de modificar el sombreador para que el cielo se viera dinámico, pero el resultado no se justificó y esta idea tuvo que ser abandonada. Una alternativa era el uso de un sistema de partículas con textura de nubes y carteles horizontales con interpolaciones de movimiento. Por lo que recuerdo, se utilizó una opción similar en el juego Stalker, y de hecho hay muchos más en otro lugar.

Iluminación
En la cuarta versión del motor Unity, había un modo muy conveniente para hornear mapas de luz: doble mapa de luz. Hay una opción similar en las versiones actuales, pero aún no la he estudiado en detalle. El modo dual nos permitió dibujar sombras y brillos en tiempo real a corta distancia, pero a medida que nos alejábamos de la cámara, todo esto se convirtió sin problemas en mapas de luz horneados, lo que facilitó enormemente la tarea de nuestro hardware. En general, utilicé este método en todas las ubicaciones del juego. Como resultado, para cada ubicación intermedia, se horneó un conjunto de aproximadamente 5-10 mapas de luz para el plano cercano, y una cantidad similar para el distante (en el fondo, también se usaron mapas de luz, pero solo con el ambiente al horno).


En general, en muchas áreas intenté usar luz completamente horneada, con la excepción de la luz del sol. Se colocaron luces puntuales en lugares para enfatizar los acentos y más luz. Esto se hizo principalmente en habitaciones donde penetraba poca luz externa. En varios lugares, por supuesto, también se utilizaron lámparas de época oxidada con sombras: luz de un fuego, una lámpara de mesa, una lámpara de techo o pared. Por cierto, cuando trabajé con iluminación, tuve que lidiar con un gran problema relacionado con las lámparas Point y las sombras en tiempo real. En algunas áreas, la mirada de la cámara en una fuente puntual de luz con sombras dio frisos y frenos inquietantes. No está del todo claro por qué la carga era tan alta, pero el generador de perfiles en ese momento mostró llamadas fuera de escala durante una fracción de segundo. Para corregir la situación, ayudó el uso de dos luminarias Spot dirigidas en direcciones opuestas entre sí. Esta opción resultó ser menos pesada.

Modelos
La mayoría de los modelos 3D para el juego fueron creados de forma independiente. Algo se hizo con mucho cuidado, horneando mapas normales y otras sutilezas, y algo se creó a toda prisa para ahorrar tiempo. La mayoría de los objetos se crearon en grupos y utilizaron una sola textura de atlas. Es decir, en una textura había secciones, por ejemplo, para un bloque de hormigón, una señal de tráfico, escombros de ladrillo, una escotilla de alcantarilla, etc. Esto permitió utilizar un material para todos estos objetos y, en consecuencia, permitió que los objetos vibraran. Como recordamos, esto es bastante bueno. Algunos modelos los descargué fielmente de Internet, de bibliotecas gratuitas. Básicamente, estos son pequeños accesorios para llenar las habitaciones, sin embargo, traté de modificar un poco todos estos modelos para que la similitud no fuera muy evidente. A menudo noté activos idénticos en los juegos independientes, lo que influyó en mi percepción, no de la mejor manera. Lo más problemático en términos de creación fue el transporte. El modelado de vehículos con ruedas desde cero lleva mucho tiempo y lleva mucho tiempo. Por lo tanto, compré varias copias de los autos en la tienda de activos.



Una "canción" separada fue la creación de personajes. Esto sigue siendo un experimento. Para aquellos que no tienen una buena idea de cuánto trabajo se necesita para que aparezca un personaje que pueda existir de alguna manera en el juego, explicaré. Se crea un modelo de alta poli con todos los detalles, botones en las mangas, arrugas en la cara, etc. Se crea un modelo low-poly del mismo personaje con un escaneo de textura (en mi juego, el número de polígonos por personaje era en promedio de aproximadamente 5-8 mil). Además, un mapa normal, un mapa ambiental (sombreado suave) se elimina del modelo de alta poli para el de baja poli por manipulaciones astutas o sin complicaciones. Por lo general, desde ambiente hago un mapa difuso en Photoshop. En el mapa difuso en el canal alfa, cree un mapa especular para crear brillo.


Para 2019, por supuesto, ya es demasiado primitivo, pero durante 16 años y para el proyecto independiente fue bastante adecuado.
Además, nuestro persa necesita ser coqueteado, para colocar huesos en él, debido a lo cual puede mover sus extremidades, mover su mandíbula, doblar y doblar sus dedos, etc. Bueno, al final, todo debe ser animado. Por lo general, se crea un conjunto de animaciones con diferentes estados para el personaje: caminar, correr, pararse o sentarse. Pero también se requieren fragmentos únicos, por ejemplo, en mi caso, para el compañero de nuestro héroe Petrovich, se requirió una gran cantidad de variaciones de acciones: abrir puertas, examinar un mapa, pelear con bandidos, lanzar una bomba de luz al nivel de Bor, etc. Todo esto tenía que ser animado a mano, lo que, por supuesto, es muy sorprendente en su torpeza. En general, la animación manual de los movimientos humanos es una tarea muy difícil y es extremadamente difícil lograr un resultado plausible. Por lo tanto, motion cap es la solución más adecuada para esta tarea. Hasta donde sé, ahora esta opción es más barata y más rápida que el trabajo del animador, aunque los datos recibidos deben procesarse y "limpiarse" manualmente.

Sombreadores
Aclararé de inmediato que entendí la escritura de sombreadores en ese momento de manera muy superficial. Mi entrenamiento fue principalmente en el análisis de ejemplos listos y su refinamiento. Tomé varias opciones de la red, cambié los parámetros, agregué nuevos o eliminé los viejos y verifiqué cómo esto afecta el resultado. Resultó que esta es una actividad extremadamente emocionante. De particular interés para mí fue el manejo de diferentes canales de textura como una máscara. En algunos casos, intenté ajustar la cantidad máxima de información en una textura y usarla. Al comienzo del artículo, mencioné las diferencias entre la cuarta y las versiones posteriores de Unity, y específicamente, la presencia de sombreado físicamente correcto en las últimas. Traté de eliminar esta deficiencia por mi cuenta, y el efecto fresnel se agregó al sombreador estándar con un mapa especular, cubmap y normal. Esta es una característica de los materiales reflectantes, en la que las superficies en un ángulo relativo a nuestra vista reflejan el entorno (o cubmap en este caso) con más fuerza y, por lo general, se ven más claras y más contrastantes. Esto es muy notable en una bola brillante, cuyos bordes parecen más brillantes que el centro. Pude repetir este efecto, así como agregar la capacidad de pintar el cubmap en el material, que generalmente podemos ver en superficies reflectantes pero rugosas. Este sombreador me satisfizo por completo y se aplicó a la mayoría de los materiales del juego.


La segunda experiencia interesante fue la creación de un sombreador para la piel de los personajes. La base fue un código encontrado en Internet que le permite utilizar una textura de degradado, que es responsable de la intensidad y el color de la iluminación que afecta al modelo. Una textura similar con un tinte rojizo en el medio hizo posible imitar la piel humana, que, por así decirlo, es un poco translúcida, es decir, tiene su propio grosor, en el que la luz se dispersa suavemente. El efecto no es perfecto, pero se ve mejor que el plástico estándar Bumped Specular.

Además de los sombreadores anteriores, se crearon muchas opciones secundarias con efectos individuales en el proceso. Por ejemplo, un sombreador de charcos con un mapa de cubos y una deformación de mapa difusa. Dado que es demasiado costoso aplicar reflejos reales a los charcos, y no quería usar un renderizado en la textura (esto es cuando el marco se guarda en la textura y se usa en el material, durante el cual, por ejemplo, se pueden hacer distorsiones del aire caliente), decidí hacer distorsiones simples de la textura de la tierra, estirado sobre un charco. El efecto fue bastante agradable y no tensó el hierro en absoluto. Por cierto, se utilizó un sombreador con un renderizado de textura para distorsionar el aire de las lámparas de queroseno y una hoguera. Parece haber sido distorsión por calor del activo detonador. Además, para simular rayos de luz volumétricos, se creó un sombreador de vértices con el efecto de Partícula suave y el efecto de luz de borde (cuando miramos los polígonos en ángulo, la malla pasa a alfa). Esta es una forma clásica y ya barbuda de implementación. Ahora, para la nueva Unidad hay una opción genial que funciona en función del post-efecto y le permite dibujar rayos de luz reales incluso con las sombras.
Otro aspecto digno de mención es el conjunto de sombreadores que se hicieron para simular superficies mojadas. El juego tiene un episodio en el que en algún momento comienza una fuerte lluvia y algunos de los materiales adquieren suavemente un brillo característico. El efecto principal se aplicó al terreno, en el cual, como en el caso de los charcos, la textura difusa comenzó a distorsionarse. Las filtraciones de agua también aparecieron en las ventanas de las casas. Bueno, el chip más "húmedo" fueron las gotas que cayeron sobre la lente. Aquí, de hecho, estaba atormentado por las dudas, porque el héroe no tenía gafas ni casco, y no estaba claro cómo las gotas se mostraban tan obsesivamente en la pantalla. Sin embargo, visualmente me gustó tanto el efecto que no pude rechazarlo.

Así que pasamos sin problemas a los post-efectos. Hablando de gotas en la pantalla, todo es simple: unas pocas gotas de la textura se multiplican y bajan a diferentes velocidades. Paralelamente, las ondas (texturas de gradiente) se mueven hacia abajo, que se multiplican, cada una por su propio grupo de gotas. Luego todo se resume, se muestra ligeramente en la "difusión", por así decirlo, pero se utiliza principalmente como una máscara para cambiar las coordenadas. Como resultado, nuestra imagen está distorsionada por la refracción de las gotas de agua. El conjunto principal de efectos posteriores que siempre fueron opcionales en la cámara (si el jugador los encendió o apagó) es antialiasing, SSAO, Bloom, Aberration, Vignette, Sun Shafts. Todos estos son efectos Unity estándar, pero SSAO se ha modificado para que la representación de las sombras a distancia se reduzca a cero, porque en la distancia en la niebla los puntos oscuros de las sombras parecían extraños. El efecto de aberración también se modificó (esta es la distorsión de color de la imagen cuando se usan lentes, algo así como contornos de color en los bordes de los objetos). El efecto estándar de Unity pintó los bordes de color verde burdeos de los objetos (una solución bastante extraña en mi opinión). De hecho, la mayoría de las veces los colores están más cerca del amarillo-rojo-azul, que me di cuenta. Otro efecto permanente fue la corrección de color propia. El efecto de Unidad estándar me pareció demasiado intensivo en recursos, por lo que se realizó uno propio y simplificado. Básicamente, creó el efecto de la asignación de tonos y cambió ligeramente el esquema de color a uno más frío. Elegir una paleta de colores para una imagen siempre es una tarea difícil, que es difícil de determinar. Sucede que le pueden gustar opciones completamente opuestas y tomar una decisión es extremadamente difícil. En este proyecto, me decidí por colores apagados y fríos. Para muchos, parecía demasiado desvanecida, pero me parece que transmite con mucha precisión el estado de ánimo que intenté reflejar en mi juego, el estado de tristeza, desánimo y soledad.


¿Qué hay del código?
En repetidas ocasiones mencioné en una entrevista que siempre estaba lejos del tema de la programación y me enfoqué más en el componente visual. Comencé a escribir el primer código completo mientras trabajaba en el juego "Train", así que para el momento en que desarrollé 35MM ya tenía algunas habilidades. En general, el género de búsqueda me pareció muy adecuado para comprender la programación en mi nivel inicial. La mayoría de las acciones en el juego se basan en disparadores. Un objeto ingresa al disparador (un cubo con un colisionador) y algo comienza a suceder, por ejemplo, comienza una escena de corte. En el guión, como en el guión de la representación teatral, se describe línea por línea cuándo y qué sucede: ahora la cámara del jugador se apaga, la cámara de la escena de corte se enciende, el personaje aparece en el cuadro, comienza la animación de la conversación, etc. Creo que hay herramientas que facilitan todo este proceso (creoporque no fue profundo), pero esta opción todavía me parece la más comprensible, porque tú mismo controlas todos los eventos.El movimiento de nuestro compañero en el juego se implementó mediante disparadores, que eran puntos de control de su ruta. Si presiona el gatillo, podría activarse una nueva animación o el personaje podría decir algo.
Este método se utilizó en todos los niveles, excepto el último. En la ubicación final de la ciudad, si llegamos a ella con un compañero, ya no nos guiará por la ruta, sino que correrá detrás de nosotros. Allí, ya se ha utilizado un controlador basado en NavMesh (un sistema que permite que un objeto busque una ruta a un objetivo y se mueva hacia él).
Las cosas fueron más difíciles con el oso en la segunda ubicación del juego. Se usó un controlador que funciona solo con un cuerpo rígido (cuerpo físico), por lo que la bestia era estúpida y a menudo se estrellaba contra árboles y otros objetos. El material físico con cero fricción nos permitió evitar serios atascos y, como resultado, el oso resbaló y continuó persiguiéndonos. Aquí, y en general en las áreas donde puedes morir, me encontré con el problema más grave para mí: el lanzamiento de la muerte y el reinicio. En el momento de la muerte, era necesario tener en cuenta todos los estados actuales del personaje: si la linterna está encendida, si la tarjeta está abierta, si el cuchillo está activado, etc. También se requería preservar los valores de salud y todos los recursos y luego, todo lo que se activó, se requería desactivar y comenzar la animación de la caída de la cámara. Después de oscurecer la pantalla, fue necesario devolver todo y leer los valores almacenados.De hecho, no hay grandes dificultades con el enfoque adecuado, pero en mi caso aparecieron muchos errores: o el cuchillo permaneció en mis manos ante mis ojos cuando el oso atacó, luego la tarjeta no desapareció, todo eso. Además, nunca se sabe cómo un jugador puede conducirse en este momento, dónde correrá y en qué condiciones puede conducir un oso, que puede quedar atrapado en algún lugar o, por ejemplo, atacarnos a través del muro. En general, hay muchos matices que no podrá prever de inmediato.atacarnos a través del muro. En general, hay muchos matices que no podrá prever de inmediato.atacarnos a través del muro. En general, hay muchos matices que no podrá prever de inmediato.La interacción de nuestro personaje con los objetos se realizó utilizando el rayo Raycast. Todos los objetos interactivos fueron etiquetados con la etiqueta Asunto, y cuando el rayo los golpea, activa la luz de fondo (la malla es un indicador con bordes resaltados) e incluye un guión que ya es responsable de la acción que podemos tomar con este objeto, por ejemplo, recoger un objeto, leer una nota o abre la puerta.Para la interacción, inicialmente había planes para hacer manos completas que alcanzaran los objetos, esto crearía un efecto más obvio de presencia. Pero esta opción representaba para mí la gran dificultad de implementación y la posibilidad de tener un "paquete" completo de errores en el futuro, por lo que solo había manos que llevaban elementos ya seleccionados. Hay un prefabricado con pequeños mangos delante de la cámara, en el que todos los objetos ya están presentes (cámara, cuchillo, hacha, etc.). Cuando selecciona un objeto durante el juego, el deseado se enciende y los innecesarios se apagan.
Un punto interesante estaba relacionado con la animación de los personajes hablando. La técnica es primitiva, pero lo pensé yo misma, orgullosa, sí. Al principio, pensé que al comunicar los personajes, tendría que comenzar la animación de la apertura de la mandíbula en un orden aleatorio con cada frase. Pero luego se me ocurrió que un guión podía leer el nivel de volumen de la banda sonora en el momento de la reproducción y transferir este nivel a un valor flotante, que ya es responsable de la posición de la mandíbula del héroe. Finalmente, la mandíbula se abrió automáticamente al pronunciar palabras al ritmo del archivo de sonido. Esto simplificó enormemente la tarea, aunque parecía demasiado "máquina".Optimización
La optimización es una parte muy importante del desarrollo, de la que depende la facilidad con la que el juego funcionará en diferentes hardware. Me referiré a la optimización del componente visual del proyecto. Hay varios métodos útiles para esto: grupos de logias, el sacrificio está ocluido, recortando objetos a distancia. El grupo LOD debe usarse en el caso de objetos "pesados" de alta poli. Para hacer esto, cree varias mallas con un número diferente de polígonos. Cuanto más lejos esté la cámara del sujeto, más simplificado se dibuja el modelo en el marco. Por ejemplo, para 35MM, las cabañas se usaron en modelos de automóviles, personajes y algunos árboles. Por lo general, se hicieron 2-3 cargas, entre las cuales cada malla posterior tenía casi 2 veces menos polígonos. Para mayor claridad: el modelo original del automóvil consta de 15 mil polígonos, el primer LOD ya tiene alrededor de 9 toneladas.(el número de nervaduras disminuye, las piezas pequeñas, como las bisagras, las piezas interiores se retiran), el segundo LOD ya alcanza las 5 toneladas (se quitan las manijas de las puertas, los espejos dentro de la cabina, la geometría se vuelve aún más fácil). Más en la misma línea. Para los lods, por cierto, se utilizó un truco interesante. Cuando horneamos mapas de luz para un objeto con lods, tenemos que hornear para ambos objetos. Para reducir el tiempo de cocción y guardar la memoria del sistema, utilicé un script que transfirió automáticamente el mapa de luz asignado con todas las coordenadas desde el objeto primario (cero LOD) a todos los demás alojamientos.Se utilizó un truco interesante. Cuando horneamos mapas de luz para un objeto con lods, tenemos que hornear para ambos objetos. Para reducir el tiempo de cocción y guardar la memoria del sistema, utilicé un script que transfirió automáticamente el mapa de luz asignado con todas las coordenadas desde el objeto primario (cero LOD) a todos los demás alojamientos.Se utilizó un truco interesante. Cuando horneamos mapas de luz para un objeto con lods, tenemos que hornear para ambos objetos. Para reducir el tiempo de cocción y guardar la memoria del sistema, utilicé un script que transfirió automáticamente el mapa de luz asignado con todas las coordenadas desde el objeto principal (cero LOD) a todos los demás alojamientos.El segundo método de optimización es la eliminación de oclusiones. Este es un mecanismo en el que se corta todo lo que no está en el campo de visión de la cámara o está cerrado por otro objeto. Por ejemplo, cuando entramos en la habitación, detrás de la pared ya no vemos muchos objetos en la calle y, por lo tanto, no hay necesidad de gastar recursos para representarlos.
Otra forma útil de simplificar el renderizado es recortando objetos a distancia. Esta es la primera opción que conocí desde el momento del proyecto "Light". Se cuelga un guión en la cámara que ajusta su distancia de representación para cada capa. En mi caso, se crearon especialmente tres categorías de capas, con objetos pequeños (artículos para el hogar, martillos, ladrillos y escombros pequeños), con tamaños medianos y ligeramente más altos que el promedio (teteras, arbustos, macetas, farolas pequeñas, etc.). A tres categorías se les asignaron distancias: 40, 80 y 120 metros. Una vez más allá de la distancia especificada, la cámara dejó de representar el objeto correspondiente. La opción es muy conveniente y efectiva, ya que los pequeños accesorios ya no se pueden ver desde lejos y, por lo tanto, no tiene sentido hacerlo.Sonido
La mayoría de los sonidos del juego fueron tomados de bibliotecas gratuitas de Internet. Por lo general, descargué las opciones necesarias y luego las combiné y mezclé en Adobe Audition. En general, no hay mucho que decir sobre esta parte del trabajo, porque es un proceso bastante rutinario y aburrido y no es particularmente atractivo para mí. Por cierto, el trabajo de introducir sonidos, puntuar escenas cortadas, ajustar archivos de sonido para que suene el sonido deseado en el momento adecuado, todo esto probablemente tomó un cuarto del tiempo total trabajando en el juego. El único momento agradable fue la introducción de la música, en la que trabajó el genial y extremadamente talentoso compositor Dmitry Nikolaev. Estoy muy satisfecho con lo que hizo, porque en general, no sabía exactamente lo que quería escuchar. Pero Dmitry sintió muy bien el estado de ánimo.que se estableció en el proyecto y se implementó en forma de ambiente atmosférico. Resultó algo fantástico, misterioso y melódico.Otro paso interesante fue trabajar con personajes de voz. A pesar de las críticas externas, todavía estoy satisfecho con el resultado y creo que los actores hicieron su trabajo muy bien. Por cierto, los personajes principales expresados por Vsevolod Petrykin y Alexander Bragi, por lo que muchas gracias a ellos.En general, no hubo problemas serios con el sonido, aunque, después del lanzamiento, se descubrió un error raro que todavía no podía superar, porque todavía no entendía su naturaleza. A veces, parte de los sonidos dejaron de sonar o sonaron con un fuerte efecto de eco. Al hablar con un héroe, una voz podría desaparecer repentinamente y, de la misma manera, recuperarse repentinamente. Hubo conjeturas asociadas con una gran carga y una gran cantidad de sonidos que se reproducen simultáneamente. También hubo suposiciones sobre la conexión del error con las zonas de reverberación, pero esto no es exacto.Eso es probablemente todo. Ha pasado mucho tiempo desde el desarrollo, se han olvidado algunas cosas y otras se han vuelto completamente irrelevantes, pero espero que el artículo sea útil para alguien y pueda proporcionar respuestas a algunas preguntas. ¡Gracias a todos y buena suerte!