Jump to content
J Montes

[GAME] YourCity Racing

Recommended Posts

las bandadas de pajaros se pueden hacer con un sistema de particulas animadas (si estan en el aire) y dan el pego bastande bien.... le pones un script al sistema de particulas para que se comporte como una bandada (se mueva y cambie de direccion) y a las partculas les activas el "noise" (suave) y queda bien....  pero si quieres ver los pajaros posados a pie de calle y atendrias que usar modelos....

el sistema de dia/noche tengo varios hechos.... a veces con skybox... pero prefiero hacerlos con una esfera gigante (invertida y de pocos poligonos) ...con nuves.... y hasta tengo hecha una lluvia tipo "breath of the wild" 

las nuves las puede hacer muy "baratas" con un shader que mezcle barias texturas tipo ruido (perlin noise) se les puede hacer que calcules los normals si las quieres mas realista pero entonces ya consumen un pelin mas de recursos... la lluvia tipo "zelda" que tengo afecta a todos los materiales (que tengan el shader especial que he hecho) que genera ruido como de "drops" y ademas crea "olas" que van hacia abajo (sigiendo la superficie) usando en una parte del  shader codigo de "triplanar shading" para que parezca que el agua se desliza hacia abajo.... y ademas tiene un efecto postProcesing que detecta los "bordes" (tipo edgeDetect) pero solo los bordes que miran hacia arriba, y en vez de poner un "edge" pone "chispitas" (como en breath of the wild)  ....todo el efecto de lluvia responde a una variable global asi se puede hacer que llueva: nada, poco, mucho, o demasiado... 

estaba intentando subirte un video pa que lo vieras... pero no se que pasa que unitySpain nunca me deja subir (directamente) videos ni imagenes...:44_frowning2:

 

Share this post


Link to post
Share on other sites
16 minutes ago, Igor said:

pero no se que pasa que unitySpain nunca me deja subir (directamente) videos ni imagenes...:44_frowning2:

Los usuarios tenéis un top de tamaño máximo de 8MB por archivo adjunto. Cuando da error suele ser que te pasas de tamaño y directamente lo rechaza...

 

Recuerda que siempre puedes subirlo a otra parte y pegar aquí los links...

Share this post


Link to post
Share on other sites
26 minutes ago, pioj said:

Ruerda que siempre puedes subirlo a otra parte y pegar aquí los links...

si, eso ya lo sabia, gracias.

pero no queria subirlo a youtube porque era solo para mostrarle la lluvia...

de todas formas las imagenes tampoco me suele dejar subir (y pesan menos de 8megas) ...me sale "error 200"... no se que sera...

Share this post


Link to post
Share on other sites

Aquí se ve la carga (previa generación) de pedazos de mapa, recorriendo varios kilómetros y decenas de pedazos.

En esta versión, todos los pedazos están cargados (pero desactivados) en la escena, pero también pueden cargarse dinámicamente. De esa forma he podido generar más de 110km2 (al parecer esto es más que GTA San Andreas o que AC Origins :4_joy:), aunque en los extremos la iluminación y las físicas no se comportan del todo bien. Además, en algunos casos tarda demasiado en cargar, y se ve feo -faltaría generar diferentes LODs para cada trozo de escenario.  En el video, también se pueden ver varios defectos en la generación del escenario.

Intentaré avanzar con el generador de escenarios.

Edited by J Montes

Share this post


Link to post
Share on other sites

Actualizo.

En esta versión el importador aplica algunos materiales y el generador genera coordenadas UV, aunque el wrapping es muy basico y las paredes verticales se ven mal texturizadas.

Share this post


Link to post
Share on other sites

hola! quedan bien las texturillas...

quizas los edificios puedas usar un shader especial que detecte los vertices y te auto ajuste la textura dependiendo de las dimensiones de los "planos" (por la posicion de los vertices) para hacer que los edificios tengan las ventanas correctas (en altura y anchura) (cada 3metros de altura poner un piso (una fila de ventanas) pero abajo, en la primera fila, en el bajo, poner otra textura tipo tiendas y portales) 

si quieres te lo hago

Edited by Igor

Share this post


Link to post
Share on other sites

Había escrito (más bien copiado y retocado) un shader para aplicar vertex colors que además añadía una detail texture, pero generando las coordenadas UV en el shader: sólo funcionaba en el plano horizontal.

Lo mismo hice para wrapear las texturas que hay ahora: las coordenadas UV corresponden a las coordenadas X,Z en world space (así que todo lo que no sea horizontal está deformado).

¿Cómo se haría para, teniendo en cuenta si el triángulo es vertical u horizontal, asignar UV correctas en un vertex shader? ¿Es mejor usar un shader que incluir las coordenadas UV en el modelo? Si tienes un ejemplo lo pruebo O:)

De todas formas: mi intención era generar las coordenadas UV en el generador, como hago ahora, pero de forma correcta: aplicando cube, cylinder o sphere wrapping, o directamente en base al perfil y altura del edificio (que al fin y al cabo, lo estoy generando proceduralmente, y tengo más "información").  Sin embargo no sé ni cómo se suele hacer, ni qué pinta tienen las texturas que se usan para esto, si se usan muchos o pocos materiales...

También pensaba añadir algo más de detalle a la geometría: balcones, tejados chimeneas, quizá portales... pero no tengo claro qué tipo de modelos debería generar o qué será lo más razonable... para mí lo más fácil es generar puertas, portales, balcones, etc como geometría, pero son demasiados triángulos. 

Supongo que tendré que usar una mezcla de todo esto, en función del LOD. Por ahora sólo estoy generando el nivel "más detallado", pero imaginaba que tendré que generar varias versiones de cada "pedazo de mapa", simplificando geometrías y usando menos materiales.

Edited by J Montes

Share this post


Link to post
Share on other sites

Update.

Esta versión no tiene muchas novedades. Trabajé en la iluminación y añadí efectos de postprocesado (bloom), y muestra una ruta de 12km por la costa.

Me gusta el aspecto del asfalto y la iluminación, pero después de grabar este video probé con HDR y Deferred Rendering, y después nunca volví a recuperar este aspecto. La iluminación y definición de materiales es un arte oscuro y difícil que me supera por completo. Creo que lo dejaré para más adelante, cuando los coches y algunos otros modelos sean más finales, porque mi talento gráfico es nulo.

20200131-driving-vigo-7-long-coast-map.png

Edited by J Montes

Share this post


Link to post
Share on other sites

¿Has pensado hacerlo multijugador?, seria un puntazo poder quedar con tus amigos y echar unas carreras por tu ciudad o pueblo. En plan carrera hasta la casa de Pepito, jajaja

Edited by zelleGames

Share this post


Link to post
Share on other sites

hola!

veo que sigues trabajando en el proyecto XD

se me olvido contestarte

On 2/12/2020 at 11:30 PM, J Montes said:

¿Cómo se haría para, teniendo en cuenta si el triángulo es vertical u horizontal, asignar UV correctas en un vertex shader? ¿Es mejor usar un shader que incluir las coordenadas UV en el modelo? Si tienes un ejemplo lo pruebo O:)

para saber si es horizontal o vertical se haria algo tipo "triplanar shader", si quieres te hago que sea asi.

pero de momento te he hecho un shader (especialmente para ti) que te crea las UVs directamente (en el shader), y te las ajustaria para que la textura no se corte indevidamente (osea siempre el numero de repeticiones sera un numero entero (int))

ponle una textura de UNA ventana, y te la repetira un numero de veces X (int) pero siempre intentara mantener el mismo tamaño de ventana, entonces te rapetira mas o menos veces la ventana parra llenar el poligono. osea, contra mas grande sea el poligono mas ventanas pone... contra mas alto, mas "pisos" pone...

puedes poner las medidas de cada "altura" (piso) del edificio (he puesto 3 metros, osea que cada 3 metros te hace una copia de la textura)  (siempre te hara un numero de copias entero, no te "partira" los pisos, las ventanas) y tambien poner la medida de el "ancho" de la textura (de la ventana/habitacion/lo que sea)

(son las variable vertical size (x) y horizontal size (y))

he puesto para que tambien puedas ponerle una BumpMap y un SpecularMap (para el specularMap haz una copia de la textura de la ventana y pon donde sea cristal blanco y en el resto negro, y en unity en el inspector en la textura donde pone "Alpha Source" le pones "from grey scale") y asi te hara reflejos solo donde la texura sea "cristal"...

aqui tienes el shader.

Shader "Custom/buildings 1" {
	Properties {
		_Color ("Color", Color) = (1,1,1,1)
		_MainTex ("Albedo (RGB)", 2D) = "white" {}
		
		_BumpMap("Normal Map", 2D) = "bump" {}
		_SpecularColor("Specular Color", Color) = (0.5, 0.5, 0.5, 1)
		_SpecMap("Specular Map (alpha)", 2D) = "white" {}
		_Glossiness("Smoothness", Range(0,1)) = 0.5

		_SizeY("vertical Size", Float) = 3
		_SizeX("horizontal Size", Float) = 6
	}
	SubShader {
		Tags { "RenderType"="Opaque" }
		LOD 200

		CGPROGRAM
		// Physically based Standard lighting model, and enable shadows on all light types
		#pragma surface surf StandardSpecular fullforwardshadows vertex:vert

		// Use shader model 3.0 target, to get nicer looking lighting
		#pragma target 3.0

		sampler2D _MainTex;
		sampler2D _BumpMap;
		sampler2D _SpecMap;


		struct Input {
			float2 uv_MainTex;
			//float3 worldPos;
			//float3 worldNormal;
			//float2 auxUV;
		};

		

		float _SizeX;
		float _SizeY;

		half _Glossiness;
		half _Metallic;
		fixed4 _Color;
		fixed3 _SpecularColor;

		void vert(inout appdata_full v) {
			//float3 pos = UnityObjectToClipPos(v.vertex);
			float3 pos = mul(_Object2World, v.vertex).xyz;
			float3 vUp = float3(0, 1, 0);
			float3 vNormal = mul(_Object2World, float4(v.normal, 0)).xyz;
			//float3 vNormal = UnityObjectToWorldNormal(v.normal);
			float3 vTang = normalize(cross(vNormal, vUp));
			float vDist_x = dot(vTang, pos);
			float vDist_y = dot(vUp, pos);
			float uv_x = (int)(vDist_x / _SizeX);
			float uv_y = (int)(vDist_y / _SizeY);
			v.texcoord = float4(uv_x, uv_y, 1, 1);

		}

		// Add instancing support for this shader. You need to check 'Enable Instancing' on materials that use the shader.
		// See https://docs.unity3d.com/Manual/GPUInstancing.html for more information about instancing.
		// #pragma instancing_options assumeuniformscaling
		UNITY_INSTANCING_BUFFER_START(Props)
			// put more per-instance properties here
		UNITY_INSTANCING_BUFFER_END(Props)

		void surf (Input IN, inout SurfaceOutputStandardSpecular o) {
			// Albedo comes from a texture tinted by color
			
			fixed4 c = tex2D(_MainTex, IN.uv_MainTex) * _Color;
			o.Albedo = c.rgb;
			// Metallic and smoothness come from slider variables
			half spec = tex2D(_SpecMap, IN.uv_MainTex).a;
			o.Normal = UnpackNormal(tex2D(_BumpMap, IN.uv_MainTex));
			o.Specular = _SpecularColor * spec;
			o.Smoothness = _Glossiness * spec;
			o.Alpha = c.a;
		}
		ENDCG
	}
	FallBack "Diffuse"
}

 

puedes usa una textura tipo algo asi para probar: 

denisik11160800013.jpg

o algo asi:

window_c_0106.jpg

si necesitas que te explique algo mas o que te cambie cosas dime.

el shader lo he hecho para probar si te sirve algo asi... a ver si te gusta...

se le puede añadar cosas y funcionalidades... tambien puedo intentar hacer, como te dije, que el primer piso sea una textura diferente (comercios/portales) si quieres te lo hago tambien...

saludos.

Edited by Igor
  • Like 2

Share this post


Link to post
Share on other sites
On 2/19/2020 at 1:36 AM, Igor said:

para saber si es horizontal o vertical se haria algo tipo "triplanar shader", si quieres te hago que sea asi.

No conocía los triplanar shaders, muy interesante, pero tienes razón, creo que no es lo que estamos buscando.

He aplicado el tuyo ¡muchas gracias! (imagen debajo), pero se ve raro. Supongo que mis normales no están correctas (tengo que revisar esto, creo que el importador las está suavizando :/).

De todas formas, creo que calcularé las coordenadas UV en el generador, supongo que eso engorda los vertex buffers pero tendré más control ¿no? ¿es importante? ¿debería preferir usar un shader cuando sea posible?.

image.png

 

On 2/18/2020 at 8:39 AM, zelleGames said:

¿Has pensado hacerlo multijugador?, seria un puntazo poder quedar con tus amigos y echar unas carreras por tu ciudad o pueblo. En plan carrera hasta la casa de Pepito, jajaja

Aparte del modo "historia", la idea es que al menos haya algún modo "Hot Seat" o "Party" para carreras, vueltas rápidas y/o tramos. Y me gustaría que se pudieran compartir online las repeticiones / coches fantasma para poder correr contra los fantasmas de otros jugadores.

Experimentaré también con un modo 2/3/4 player en pantalla partida, pero si no lo veo fácil, nada.

Multijugador online simultáneo con físicas compartidas... lo veo más difícil. Quizá simultáneo contra coches fantasma.

Edited by J Montes

Share this post


Link to post
Share on other sites
7 hours ago, J Montes said:

No conocía los triplanar shaders, muy interesante, pero tienes razón, creo que no es lo que estamos buscando.

He aplicado el tuyo ¡muchas gracias! (imagen debajo), pero se ve raro. Supongo que mis normales no están correctas (tengo que revisar esto, creo que el importador las está suavizando :/).

De todas formas, creo que calcularé las coordenadas UV en el generador, supongo que eso engorda los vertex buffers pero tendré más control ¿no? ¿es importante? ¿debería preferir usar un shader cuando sea posible?.

image.png

 

hola

si, creo que eso que pasa sera por las "normal" es lo que he usado para que el shader calcule como colocar la texturas, igual estan suavizadas como dices.

no se si usas "mesh.RecalculateNormals()" al crear el mesh de los edificios.... pero creo que eso deberia ponerte las normals correctas...

tambien se podria hacer que el shader calcule las normas... si quieres lo intento

Share this post


Link to post
Share on other sites

Creo que estás usando la normal de la carretera, en vez del suelo de los edificios, mira lo que te digo... :4_joy:

Share this post


Link to post
Share on other sites
4 hours ago, pioj said:

Creo que estás usando la normal de la carretera, en vez del suelo de los edificios, mira lo que te digo... :4_joy:

Sagerao :D, pero no, he probado a recalcularlas. El shader cuenta espacio para 3 ventanas en un triángulo y 5 en el adyacente, supongo que porque mis edificios no son estrictamente ortogonales o por algún bug. De todas formas prefiero hacer esto generando coordenadas UV, al menos por ahora.

Dejo aquí el progreso. Grabación de replay y "ghost car":

Edited by J Montes
  • Like 1

Share this post


Link to post
Share on other sites

×
×
  • Create New...