Zobrazit předchozí téma :: Zobrazit následující téma |
Autor |
Zpráva |
G0rk1ll
Založen: 17. 04. 2008 Příspěvky: 6
|
Zaslal: 24. září 2013, 16:41:27 Předmět: Unity3D zobrazení části objektu pouze pod světlem |
|
|
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 |
|
 |
quas4
Založen: 18. 10. 2007 Příspěvky: 199
|
Zaslal: 24. září 2013, 18:39:15 Předmět: |
|
|
asi bych uvazoval o nejake modifikaci projective texture mapping + discard ve fragment shaderu. |
|
Návrat nahoru |
|
 |
Mem

Založen: 28. 07. 2007 Příspěvky: 1959 Bydliště: Olomouc
|
Zaslal: 25. září 2013, 10:49:20 Předmět: |
|
|
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 ) _________________
 |
|
Návrat nahoru |
|
 |
Weny Sky

Založen: 28. 07. 2007 Příspěvky: 241
|
|
Návrat nahoru |
|
 |
joeblack
Založen: 14. 09. 2009 Příspěvky: 66
|
Zaslal: 25. září 2013, 15:21:24 Předmět: |
|
|
pouzivas deffered shading ? |
|
Návrat nahoru |
|
 |
Mem

Založen: 28. 07. 2007 Příspěvky: 1959 Bydliště: Olomouc
|
Zaslal: 25. září 2013, 17:51:51 Předmět: |
|
|
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 ) |
|
Návrat nahoru |
|
 |
|