.[ ČeskéHry.cz ].
Unity3D zobrazení části objektu pouze pod světlem

 
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> 3D API / 3D Enginy
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
G0rk1ll



Založen: 17. 04. 2008
Příspěvky: 6

PříspěvekZaslal: 24. září 2013, 16:41:27    Předmět: Unity3D zobrazení části objektu pouze pod světlem Odpovědět s citátem

Zdravím!
Řeším v Unity menší problém. Potřebuju systém, kdy nepřítel bude odhalen pouze hráčským světlem tedy tak, aby na nepřítele nepůsobilo(přesněji aby jím prošlo, ne culling) veškeré světlo, kromě světla hráče. Zkoušel jsem to přes shadery ale nedopracoval jsem se k tomu, co jsem chtěl. Nějaká rada jak to vyřešit? Případně jak to udělat jinak.


Zde ukázka toho, co to dělá:

Samozřejmě potřebuji vykreslit jenom část zasaženou světlem, ne celou stranu.

Díky!
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
quas4



Založen: 18. 10. 2007
Příspěvky: 199

PříspěvekZaslal: 24. září 2013, 18:39:15    Předmět: Odpovědět s citátem

asi bych uvazoval o nejake modifikaci projective texture mapping + discard ve fragment shaderu.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Mem



Založen: 28. 07. 2007
Příspěvky: 1959
Bydliště: Olomouc

PříspěvekZaslal: 25. září 2013, 10:49:20    Předmět: Odpovědět s citátem

Pro náš DarkHunt jsem napsal primitivní fragment shader pro světlo baterky, myslíš něco takového?



kód:
Shader "Playito/Transparent Flashlight" {
Properties {
  _MainTex ("Texture", 2D) = "white" {}
  _Emission ("Flashlight Color", Color) = (1,1,1,1)
}

SubShader {
   Tags {"Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent"}
   LOD 1
   
CGPROGRAM
#pragma surface surf BlinnPhong alpha
#include "UnityCG.cginc"

sampler2D _MainTex;
float4 _Emission;
uniform float FX = 0.5;
uniform float FY = 0.5;
uniform float RATIO = 1.0;
uniform float INTENSITY = 1.0;
uniform float SIZE = 100.0;

  struct Input {
      float2 uv_MainTex;
      float4 screenPos;
  };

void surf (Input IN, inout SurfaceOutput o) {
   fixed4 c = tex2D(_MainTex, IN.uv_MainTex);
   o.Albedo = c.rgb;
   o.Alpha = c.a;
   
   float ss = 100*sqrt((IN.screenPos.x-FX)*(IN.screenPos.x-FX)+(IN.screenPos.y*RATIO-FY*RATIO)*(IN.screenPos.y*RATIO-FY*RATIO));
   o.Emission = c.rgb * (1.5-ss/(SIZE/10.0)) * INTENSITY;

   //else
   //{
   //   o.Emission = UNITY_LIGHTMODEL_AMBIENT * o.Albedo;
   //}
 }   
ENDCG
}


Fallback "Diffuse"
}


(Měl jsem tam původně i hromadu IFů a pak zjistil, že je efektivnější nechat spočítat "zbytečně" každý pixel Smile)
_________________
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Weny Sky



Založen: 28. 07. 2007
Příspěvky: 241

PříspěvekZaslal: 25. září 2013, 11:49:34    Předmět: Odpovědět s citátem

rekl bych, ze chce dosahnout :


Zkus se podivat na:
http://unitycoder.com/blog/2012/02/22/x-ray-cutout-shader-with-mouse/
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
joeblack



Založen: 14. 09. 2009
Příspěvky: 66

PříspěvekZaslal: 25. září 2013, 15:21:24    Předmět: Odpovědět s citátem

pouzivas deffered shading ?
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Mem



Založen: 28. 07. 2007
Příspěvky: 1959
Bydliště: Olomouc

PříspěvekZaslal: 25. září 2013, 17:51:51    Předmět: Odpovědět s citátem

Weny: Jj, ale to stačí na výstupu místo výpočtu emission měnit alphu. Pokud tu černou háže světlo, tak by to mohl využít jako informaci pro alpha test a vyřešeno (když pominu, že v tom příkladu na obrázku by to asi vyžralo nějaké díry i uprostřed Smile)
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Zobrazit příspěvky z předchozích:   
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> 3D API / 3D Enginy Časy uváděny v GMT + 1 hodina
Strana 1 z 1

 
Přejdi na:  
Nemůžete odesílat nové téma do tohoto fóra
Nemůžete odpovídat na témata v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete hlasovat v tomto fóru


Powered by phpBB © 2001, 2005 phpBB Group


Vzhled udelal powermac
Styl "vykraden" z phpBB stylu MonkiDream - upraveno by rezna