Unity3D egyedi shader

Unity3D egyedi shader
2015-08-14T14:31:10+02:00
2015-08-15T11:12:23+02:00
2022-12-02T18:40:39+01:00
vger
Sziasztok,
szeretnék Unity3D-ben olyan átlátszó kockákat csinálni, amiknek az összeérő oldaluk nem "árnyékos". Csatoltam egy képet hogy most milyen, aki megnézi annak rögtön érthető lesz a kérdés. 
Az lenne a cél, hogy egy árnyékoktól mentes egybefüggő kockát kapjak kis kockákból kirakva.
Sok keresgélés után arra jutottam hogy a shader-el lehet variálni, esetleg egyedit készíteni. Találtam egy példát (Glass Shader) de ezzel is ugyanúgy látszanak az árnyékok az oldalakon.
Tudna segíteni valaki abban hogy hogy lehet ettől megszabadulni?

Köszönöm.
Mutasd a teljes hozzászólást!
Csatolt állomány
szerintem Tipcike már leírta a "megoldást": ne kockákat használj, hanem csak négyzeteket, azaz maradj síkban,
ha esetleg ez zavar, mert akarsz "vastagságot" adni ennek a felületnek, tehát "valódi" testet akarsz, akkor csinálhatod azt, hogy a "kockáknak" csak azon oldalait hagyod meg, amelyek az általuk kiadott test felszínén van (az összes kocka konvex burka), azaz gyakorlatilag csak azokat a lapokat hagyod meg, amelyek nem érintkeznek más kockákkal,
erre vélhetőleg írhatsz shadert is, de szerintem felesleges elbonyolítani, egyszerűen ki kell törölni a felesleges lapokat,
ha esetleg az még zavarni fog, hogy általános esetben az átlátszóság miatt így is marad "dupla takarás", mert legyen csak egy kockád, ekkor akárhonnan is nézed, a szemedből induló félegyenes mindig 2 oldalt fog metszeni, gondolom ez alapján érthető, hogy mire gondolok, de ezen 2 oldal közül valójában csak az egyik néz feléd, a másikat (a "hátsót") csak az átlátszóság miatt látod, ez utóbbit az ún. back-face culling-gal "szokás" eltüntetni, ha ezt nem tudod "beállítani", akkor erre lehet egyszerű shadert írni,
nem vagyok otthon Unity3D-ben, de ha jól látom az ábrádon, akkor azon az átlátszóság ellenére bizony van backface culling (mert pld. a két szélső oszlop szabad oldala nem sötétedik, stb.), azaz semmi dolgod nincsen csak a felesleges lapokat törölni (vagy, ha "dinamikusan" hoznád létre a "kockákat", akkor a "felesleget" eleve nem létrehozni),
Mutasd a teljes hozzászólást!

  • szeretnék Unity3D-ben olyan átlátszó kockákat csinálni, amiknek az összeérő oldaluk nem "árnyékos".

    mit jelent az árnyékos?
    hogy az átlászó színek összeadódnak és attól sötétebb lett?

    Az lenne a cél, hogy egy árnyékoktól mentes egybefüggő kockát kapjak kis kockákból kirakva.

    Kell az a transparency?
    Mutasd a teljes hozzászólást!
  • Igen, ahogy mondod, az átlátszó színek összeadódnak és ettől sötétebb lesz. Csak  nem tudtam így megfogalmazni elsőre Ha megnézed a csatolt képet látszik minden oldalon a sötétebb rész.

    Kell a transparency mert a padló egy térkép lesz aminek látszani kellene a kockákon át.
    Mutasd a teljes hozzászólást!
  • Szerintem még te sem tudod mit akarsz.

    A kockáknak az oldalait valahogy jelölni kell, különben nem látszana kockának.

    Próbáld lerajzolni, hogy mit szeretnél látni a kocka oldalai helyett és rájössz, hogy jó ez így. :)

    Vagy ne legyen kocka, csak egy átlátszó színes négyzet.
    Mutasd a teljes hozzászólást!
  • Kell a transparency mert a padló egy térkép lesz aminek látszani kellene a kockákon át.


    akkor először azzal foglalkozzál, mert szerintem meglepetés fog érni...

    értsd: ha a fehér alapból annyi marad meg, amit a példaképeden látszik, akkor mit gondolsz, hogy a nem teljesen homogén fehér térképedből mi fog látszódni? pld. az egyes "üvegkockáid" "normális esetben" (tehát, ha valós leképezést csinálsz) a kép(részletek) kontrasztarányait is igen nagy mértékben befolyásolják majd...

    szerintem jobban jársz, ha a kedvenc képszerkesztődben összerakod a látványt, majd az alapján próbálod a shader-t "megírni", jobban mondva utána gondolni, hogy valójában mit is akarsz, meg azt hogyan is lehet "kimatekozni", és utána "szabad" csak nekiállni kódolni... (persze az is egy hozzáállás, hogy elkezdesz a material paraméterekkel játszadozni, hátha kijön belőle valami érdekes látvány, vagy egy alapshaderből kiindulva "játszadozol", de...)
    Mutasd a teljes hozzászólást!
  • Köszönöm a tanácsokat. Úgy látom akad itt néhány hozzáértő ember, úgyhogy leírnám pontosan mire is megy ki ez az egész, mert lehet teljesen rossz nyomon vagyok.
    A "talaj" egy google térkép lesz, amit ezzel csinálok: Asset Store
    Ehez adott egy táblázat GPS koordinátákkal és az adott területhez tartozó értékkel (ez lehet hőmérséklet, csapadék, lábszagtöménység, tökmindegy...) Ezt az adatot szeretném megjeleníteni a térkép fölött egy hőtérképes megjelenítési móddal. Ezt úgy gondoltam megoldani, hogy az értékekhez színeket rendelek, majd az adott koordináta fölé rakok egy átlátszó kockát az adott színnel. A kockák átlátszóságát 30-50% között állítgatva be lehet lőni hogy látszódjon alatta a térkép, az nem probléma, kipróbáltam.
    A baj az, hogy ez így szépen kiadja a hőtérképet ahogy szeretném, de úgy néz ki mint egy rossz kockásfüzet a sötétedő oldalak miatt. Még jobban kijön akkor, ha mozgatom a térképet.
    Már csak annyi hiányozna hogy eltüntessem az "árnyékos" oldalakat, és boldog lennék.
    Szóval ha ez így hülyeség, és van esetleg ötletetek hogy hogy lehetne ezt másképp megoldani, osszátok meg velem léci.
    Köszönöm.
    Mutasd a teljes hozzászólást!
  • szerintem Tipcike már leírta a "megoldást": ne kockákat használj, hanem csak négyzeteket, azaz maradj síkban,
    ha esetleg ez zavar, mert akarsz "vastagságot" adni ennek a felületnek, tehát "valódi" testet akarsz, akkor csinálhatod azt, hogy a "kockáknak" csak azon oldalait hagyod meg, amelyek az általuk kiadott test felszínén van (az összes kocka konvex burka), azaz gyakorlatilag csak azokat a lapokat hagyod meg, amelyek nem érintkeznek más kockákkal,
    erre vélhetőleg írhatsz shadert is, de szerintem felesleges elbonyolítani, egyszerűen ki kell törölni a felesleges lapokat,
    ha esetleg az még zavarni fog, hogy általános esetben az átlátszóság miatt így is marad "dupla takarás", mert legyen csak egy kockád, ekkor akárhonnan is nézed, a szemedből induló félegyenes mindig 2 oldalt fog metszeni, gondolom ez alapján érthető, hogy mire gondolok, de ezen 2 oldal közül valójában csak az egyik néz feléd, a másikat (a "hátsót") csak az átlátszóság miatt látod, ez utóbbit az ún. back-face culling-gal "szokás" eltüntetni, ha ezt nem tudod "beállítani", akkor erre lehet egyszerű shadert írni,
    nem vagyok otthon Unity3D-ben, de ha jól látom az ábrádon, akkor azon az átlátszóság ellenére bizony van backface culling (mert pld. a két szélső oszlop szabad oldala nem sötétedik, stb.), azaz semmi dolgod nincsen csak a felesleges lapokat törölni (vagy, ha "dinamikusan" hoznád létre a "kockákat", akkor a "felesleget" eleve nem létrehozni),
    Mutasd a teljes hozzászólást!
  • Igen, a kockákat dinamikusan hozom létre, megpróbálom akkor ezt a megoldást hogy eleve nem hozom létre azt az oldalt ami nem kell.
    Köszönöm a sok hasznos segítséget.
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd