Jump to content
UnitySpain

Aceptamos donaciones vía Paypal.

UnitySpain.com es un servicio gratuito, pero mantener la Comunidad conlleva una serie de gastos.

Fondo Anual Unityspain: Donados 15,00€ de 150,00€

  • Servidor: Dominio.com y Hosting Web
  • Mantenimiento de los Foros
  • Contenido y Servicios Extras
  • Mantenimiento para Redes Sociales
Sign in to follow this  
ZOOSTAGE

problema con Iluminacion

Recommended Posts

Hola! tengo un problema! o mas que un problema desconocimiento de como hacerlo pero me pasa lo siguiente  actualmente mi luz de ambiente esta seteada con un color claro lo que le da a todo mas luminosidad y vida pero! no me esta haciendo bien las sombras y los sitios donde no debería haber luz ya que la luz ambiente afecta a todo el mundo tengo zonas del juego como bodega cuevas y demás que debería ser oscuro pero con la luz de ambiente no se pone. Bien e cambiado la luz ambiente a SKYBOX y si hace las sombras y demás como debe pero! queda todo muy oscuro aquí dos ejemplos de sin o con.

Asi lo tengo ahora: no se ve una luz natural realista por que apenas hay sombras.
2017-08-15 at 21-56-21.png

 

Asi lo queiro pero con mas luz (Claridad en las sombras): En esta imagen la luz trabaja como debe con las sombras y demás solo que queda muy oscuro la parte de sombras.

2017-08-15 at 21-58-07.png

 

Como puedo arreglar esto para tener un equilibrio para que la luz trabaje asi pero la parte de sombra quede con un poco  de mas luz solo un poco mas.

No puedo poner luces point ni nada simular ya que es un MMO de mundo abierto de 900 km 

Que hago mal o que me falta por hacer?

 

GRACIAS CHICOS!

Share this post


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

Como puedo arreglar esto para tener un equilibrio para que la luz trabaje asi pero la parte de sombra quede con un poco  de mas luz solo un poco mas.

No puedo poner luces point ni nada simular ya que es un MMO de mundo abierto de 900 km 

Que hago mal o que me falta por hacer?

900 km? maldito loco desquiciado jajaj

De la imagen tenes muchisima luz ambiente, generalmente se le da un toque para dar el efecto pero ahi directamente eliminaste toda sombra, y encima el bloom ayuda mas.

Si queres interiores oscuros vs exteriores iluminados no podes setear un ambient light y quedar feliz, generalmente te tenes que comer la molesta luz esa o usar global illumination para simular un poco una luz mas real. Si deseas interiores oscuros primero tenes que decir que la amb = 0, nada, y despues fakeaer esa ambient afuera mediante points o spots, no tiene porque ser en todos los lugares sino es lugares estrategicos, podes ayudarte del bloom (usas un buen radio) y del tone mapping.

Mira este ej que te hice:

light.png

Esto tiene ambient cero, izquierda tiene tres spot fakeando la ambient + tonemapping + bloom exagerado , derecha algo de bloom. Lo bueno es que los parametros los podes cambiar cuando ingresas a una cueva por ejemplo.

lo verde del ambient lo notas en las rocas, solo en el objeto de interes no tenes que fakear el ambient para todo el terreno.

Si queres usar el ambient te puedo mencionar un juego que hacia un lindo truquito, en farcry 3 (y 4 tmb) cuando te metias a una cueva el amb se ponia en cero o eso es lo que me parecia que pasaba. Depende tambien de que clase de interior sea si es una choza de 5x5 m2 no vas a hacer ese truco, queda muy feo si miras para afuera, ahora si tenes una cueva medianamente grande podes meterte cuando pasas una cierta distancia (sin la posibilidad de mirar hacia afuera ni tan adentro) hacer un "fade" de ambient light.

Saludos

Share this post


Link to post
Share on other sites

A ver. Es como dice lightbug: Usas mucha luz ambiental.

No tengo claro que versión de unity usas pero lo que debes saber es que es imposible combinar zonas iluminadas(exteriores) y zonas no iluminadas(interiores) sin encontrarte problemas de iluminación. Antaño(y aun ahora) se empleaba la luz ambiental y se modificaba con un script: En muchos juegos aun se ve como la luz ambiental cambia al entrar a interiores.

Otra forma de tratar este problema es emplear vertexColor: Los vértices de las meshes se pintan(al menos uno de los canales) para indicar las zonas en las que es interior. Luego usas un shader especial que lea esta información y la use en la iluminación. Unity no tiene una herramienta para pintar meshes peeeeero... las hay por internet y yo tengo una propia. A parte de que en el modelador 3d esto no te supondrá un problema.

Supondré que usas el sistema de terrenos de unity3d y colocas objetos en el editor. Con esto te recomiendo la primera idea(modificar la luz ambiental con un script). Aunque no es realista es lo mejor (aunque eso lo decides tu).

Edited by marcoscuro1

Share this post


Link to post
Share on other sites

Una solucion es via script, como dicen @lightbug y @marcoscuro1, cambiar el ambientLight igual al entrar en contacto con unos "trigrer" o como se escriba (disparadores/collider)... usando un "lerp" o algun otro metodo para suavizar el cambio...

Sino tambien puedes hacerlo con un shader "postEffect" en la camara que modifique los valores RGB multiplicandolos por una constante que tambien deberias cambiarla via script como antes...

Solo que via shader, ya que te pones a hacer un shader de "luminance", puedes hacer uno de contraste y saturacion con dos variables, lo cual te dara mas libertad y mas un abanico mas amplio de posibilidades, incluso puedes poner variables independientes para cada canal (RGB) para asi poder realzar cada color indepentientemete, puede usarse para por ejemplo realzar solo los tonos rojos, hacer que cuando desciende la vida se vallan apagando los tonos hasta volverse en blanco y negro (tonos de gris) o poner todo en tono sepia, etc, hize uno hace mogollon que hacia esas cosas, no se si funcionara en unity porque lo hice hace al menos 7 años para el "motor" DarkBasic, era muy simple (costaba poco procesamiento) multiplicaba los valores RGB por las variables, creo recordar que primero sumaba los tres valores r+g+b y los dividia entre tres(dividir entre tres es multiplicar por 0.3333333) para hallar la media de los tres tonos, luego no me acuerdo muy bien como hacia con ese valor para calcular la saturacion... Ummmm...

Nose, voy a ver si lo encuentro y lo modifico para unity y sino lo hago otra vez

Postdada: lo de dividir /3 es igual a multiplicar *0.3333333, parece una tonteria pero multiplicar es un proceso mas simple que dividir, en la cpu/gpu cuesta menos tiempo(realmente no se si es cierto, lo lei en algun lado...) pero siempre que puedo (si es una constante porejemplo, en vez de dividir entre diez, multiplico por 0.1f) multiplico por su correspondiente valor, sobre todo si esta dentro de un bucle "for" o algo asi...

Share this post


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

Postdada: lo de dividir /3 es igual a multiplicar *0.3333333, parece una tonteria pero multiplicar es un proceso mas simple que dividir

Aunque instruccion a instruccion cuesta menos (gracias al algoritmo de booth) dependera de la arquitectura del procesador(hay calculos matriciales importantisimos que sea hacen en una sola instruccion, sobre todo en celulares) o del compilador (hablo de programacion en general), quizas pones dividir por 2, pero el compilador a nivel instrucciones te hace un *0.5f" porque lo ve conveniente, la verdad ni idea. Pero si, siempre es recomendable, si el error de truncamiento lo permite usar multiplicacion, por ej si no podes representar el 0.3(periodico) en float vas a tener un error.

daria un numero...mmm creo que asi... a ver.. me llevo una ... sumo un dos por aqui... mmm ... Si, asi:

0.3(periodico) --> 0.3333333432674407958984375

pero bueno, esta mas que bien para el resultado que se quiere y cuesta menos. buen dato:91_thumbsup:
.

7 hours ago, Igor said:

pero siempre que puedo (si es una constante porejemplo, en vez de dividir entre diez, multiplico por 0.1f) multiplico por su correspondiente valor, sobre todo si esta dentro de un bucle "for" o algo asi...

Si yo hago lo mismo.

Share this post


Link to post
Share on other sites
Shader "Custom/satu" {
   Properties {
      _MainTex ("Base (RGB)", 2D) = "white" {}
      _Satu ("Saturance", float) = 1.0
      _Lumi ("Luminance", float) = 0.05
   }
   SubShader {
      Tags {"RenderType"="Opaque"}
      LOD 200

      CGPROGRAM
      #pragma surface surf Lambert

      sampler2D _MainTex;
      float _Satu;
      float _Lumi;

      struct Input {
         float2 uv_MainTex;
      };

      void surf (Input IN, inout SurfaceOutput o) {
         half4 c = tex2D (_MainTex, IN.uv_MainTex);
         float gray = (c.r + c.g + c.b) * 0.333333;
         c.r = (c.r + _Lumi + (gray * (_Satu-1))) / _Satu;
         c.g = (c.g + _Lumi + (gray * (_Satu-1))) / _Satu;
         c.b = (c.b + _Lumi + (gray * (_Satu-1))) / _Satu;

         o.Albedo = c.rgb;
         o.Alpha = o.a;
      }
      ENDCG
   }
   FallBack "Diffuse"
}

Encontre el shader, esta es la version simple, como antes habia hablado de el, lo pongo aqui para el que lo quiera, sean libres de usarlo, modificarlo, u mandarlo a la papelera de reciclaje

la satu normal es 1, con satu de 0.5 los colores son el doble de intensos, si pones un 2, seran la mitad, contra mas alto el numero mas gris sera todo

La "lumi" si pones 0 esla luz normal, lo que pongas se añade, como si fuera otra ambient light mas,

Para controlar cada canal por separado pones 3 variables de saturacion (_SatuR, _SatuG, _SatuB) en "properties", y despues de CGPROGRAM donde sampler2D _MainTex....

Y cambias en "void surf" en la operacion c.r = , c.g = , c.r = cada "_Satu" respectibamente por _SatuR, _SatuG y _SatuB

Esto te permitiria porejemplo en tu juego quitar(volver en tonos de grises) de repente todos los colores menos el rojo, como en la fantastica pelicula "SinCity" :)

 

En realidad es un shader muy cutre, jeje, lo hize hace mogollon y ahora mirandolo creo que las operaciones me las invente un poco a lo loco, me parece que no son muy "correctas"... Pero hacen lo que queria que hiciesen, jeje, bueno, jeje, para colmo he visto que divido varias vezes:7_sweat_smile::7_sweat_smile:

Postdata: @lightbug gracias por tu info complementaria sobre las divisiones/multiplicaciones, habia leido que costaba menos pero no sabia ni porque ni nada, no estaba muy seguro de que fuese cierto pero con lo que has dicho le veo mas sentido, si sabia que al hacer el cambio en alguna operacion se perdia algo de precision ...no siempre lo hacia (cambiar division por multiplicacion) a veces viene mal o a veces no se puede...

Share this post


Link to post
Share on other sites

El problema es que cuando bajo la luz ambiente las texturas se me ven muy negras apagadas sin vida y realmente no son así no se si a la textura independiente mente le hace falta algún mapa de luz o algún añadido.

Estuve trabajando un poco en la luz y ahora se acerca mucho a lo que quiero pero sin embargo miren la textura del barco esta apagada.

gracias chicos por su ayuda!

Share this post


Link to post
Share on other sites
16 hours ago, ZOOSTAGE said:

El problema es que cuando bajo la luz ambiente las texturas se me ven muy negras apagadas sin vida y realmente no son así no se si a la textura independiente mente le hace falta algún mapa de luz o algún añadido.

La textura es lo que es, suponiendo que usas un shader standard podes decir cuanto toma o refleja la luz pero mas que eso no, lo que podes hacer es primero verificar que la textura no tenga info de luz, por ejemplo si queres crear un material con el piso de madera de tu casa, tenes que sacarle una foto, no es lo mismo sacarsela al mediodia, que a las 7 pm con luz artificial, la textura va a tener informacion de luz implicita o con flash, obviamente la podes modificar un poco pero lo primero que tenes que buscar es que quede lo mas neutra y que tenga cierta versatilidad, por ejmplo:

Wood_floor_by_gnrbishop.jpg

esta textura es bien neutra, funciona para luz baja y para luz alta, se puede meter en casi cualquier escenario que queda bien (suponiendo un material bien seteado).

Si todavia no le encontras la "vida" a tus textures quizas (mejor dicho casi seguro) no tengas que levantar el amb light para conseguir algo en un material, no tiene sentido eso, lo que podes hacer luego es ir directamente a los postFX (suponiendo que tus texutras son correctas), modificar bloom , tonemapping, color correction, etc hasta tener lo que quieras, me parece que ahi le erraste en queres obtener un resultado con la herramienta equivocada.

Share this post


Link to post
Share on other sites

Igor intente poner tu shader pero :

Como lo soluciono?

Shader error in 'Custom/satu': expression left of ."a" is not a struct or array at line 30 (on d3d9)

 

Como seria tu shader para 3d

 

gracias
 

Edited by ZOOSTAGE

Share this post


Link to post
Share on other sites
Sign in to follow this  

×
×
  • Create New...