Exigo Opublikowano 23 Września 2013 Udostępnij Opublikowano 23 Września 2013 Piszę toola (edytor map 2d, non-grid) do swoich projektów, i jestem na etapie wprowadzania funkcji wypalania lightmap. Początkowo myślałem o zwykłym scencilu z penumbrą (na community roi się od rozszerzeń tego typu), ale wypalanie ma się dziać w edytorze, stąd można szaleć z wszelakimi metodami, nawet takimi które nie są osiągalne choć częściowo real-time w gm. Stąd pomyślałem sobie, czemu tego nie renderować metodą oświetlenia globalnego? Pomysł trochę dziwaczny, bo w 2d, stąd mało materiałów jak coś takiego napisać, ale wydaje mi się jak najbardziej sensowny. Jakieś pomysły, wskazówki, być może źródła? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am Lord Opublikowano 23 Września 2013 Udostępnij Opublikowano 23 Września 2013 Możesz castować cienie na surface i stworzyć z niego tilesy które będą zapisane w pliku mapy. W ten sam sposób jest wypalany multitexturing w tym 3D edytorze terenów: http://gmc.yoyogames.com/index.php?showtopic=526631 Edit: W podobny sposób tutaj wypaliłem textury i globalne światło: https://forum.gmclan.org/index.php?showtopic=29616 Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Exigo Opublikowano 23 Września 2013 Autor Udostępnij Opublikowano 23 Września 2013 Właśnie dokładnie o tym napisałem w tytułowym poście. Interesuje mnie metoda wyłącznie wypalania, nie technika rysowania wypalonych świateł w grze, bo to już mam od dawna napisane. Ale i tak dzięki. :) @Edit: Prawie idealny gif znaleziony na jakimś blogu pokazujący o co mi biega (wyobraźcie sobie lepszą jakość i jednorazowe wypalanie tego w edytorze z wielkim buttonem "bake lights" z paskiem postępu. :D): Szkoda że autor nie pokazał źródeł/metody. @Edit (18:02): Napisałem sobie prostą implementację, operując różnymi wartościami, wychodzą fajne rzeczy (2k fotonów, 3 sec. renderingu): Source Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am Lord Opublikowano 23 Września 2013 Udostępnij Opublikowano 23 Września 2013 Znalazłeś jakiś artykuł o tym? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Exigo Opublikowano 23 Września 2013 Autor Udostępnij Opublikowano 23 Września 2013 Nie byłem w stanie znaleźć nic takiego związanego z 2d, więc zacząłem implementować własnym sposobem. Efekty były fajne, ale zrobił się problem gdy chciałem zrobić odbicia (kombinowałem z getpixel, ale przy tylu samplach komp mi się zawiesił, więc odpuściłem). Dosłownie moment temu wpadłem na użycie silnika fizycznego i zrobienie fotonów jako ciała. ; D (ok. 8 sec. spawania) To po lewej to skrzynka. Obija się światło od niej, jea. :D Nie wiem czy metoda jest "poprawna", ale w każdym razie powyższy efekt został zrobiony tym kodem: GML if keyboard_check_pressed(ord("B")) { show_message("bake"); w = ep_world_create(); ep_world_set_settings(w, 1, 20, 40, .1, .5, .1, .6, 1); ep_world_set_sleeping(w, true, 30, 0, .01, .001); body = ep_body_create_static(w); shape = ep_shape_create_box(w, body, 32, 32, 128 - 48, 128, 0, 1); ep_shape_set_collision(w, body, shape, 1, 1, 0); repeat (4096) { i = obj_add(def_photon); with (i) { w = main.w; xx = 128; yy = 128; life = 1; body = ep_body_create_dynamic(w, true); shape = ep_shape_create_box(w, body, 1, 1, 0, 0, 0, 1); ep_body_set_position(w, body, xx, yy, 0); ep_shape_set_collision(w, body, shape, 1, 0, 0); //ep_shape_set_material(w, body, shape, 1, .1, 0, 0); len = 1; dir = random(360); ep_body_apply_impulse(w, body, 0, 0, ldx(len, dir), ldy(len, dir), 0, 0, 1, 1); } } surface_set_target(sf_ray); draw_clear(0); draw_set_blend_mode(bm_add); repeat (128) { ep_world_update_contacts(w); ep_world_simulate_step(w); with (def_photon){ //ep_body_apply_impulse(w, body, 0, 0, (-1 + random(2)) * 1, (-1 + random(2)) * 1, 0, 0, 1, 1); xx = ep_body_get_x(w, body) + ((-1 + random(2)) * (1 - life)) * 16; yy = ep_body_get_y(w, body) + ((-1 + random(2)) * (1 - life)) * 16; draw_set_alpha(life * .025)// + (-1 + random(2)) * .0125); draw_point(xx, yy); life -= .0078125; } } draw_set_alpha(1); draw_set_blend_mode(bm_normal); surface_reset_target(); ep_world_destroy(w); } texture_set_interpolation(false); draw_surface_ext(sf_ray, 0, 0, 2, 2, 0, c_white, 1); texture_set_interpolation(true); Tymczasem będę dalej próbował uzyskiwać coraz lepsze efekty mniejszym kosztem. Jak ktoś ma pomysły, pisać. Szczególnie te związane z optymalizacją. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am Lord Opublikowano 23 Września 2013 Udostępnij Opublikowano 23 Września 2013 Nie sądziłem że ExtremePhysisc jest taki precyzyjny by mógł obijać obiekty wielkości pixela :D Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
szmalu Opublikowano 23 Września 2013 Udostępnij Opublikowano 23 Września 2013 O, lubię ExtremePhysics Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am Lord Opublikowano 23 Września 2013 Udostępnij Opublikowano 23 Września 2013 Lepszy od tego kiepskiego Box2D który jest w Studio. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Exigo Opublikowano 24 Września 2013 Autor Udostępnij Opublikowano 24 Września 2013 Tak, to prawda. Gdzieś nawet widziałem zestawienie poruszające tą tematykę, i EP było poza konkurencją. Nie dość że był szybszy, to posiadał szerszy zakres funkcjonalności od większości silników tego typu. Co do samego wypalania, cel prawie osiągnięty - od tego momentu jest to wbudowane do edytora i reaguje z innymi obiektami. Prezentowane światła wypalały się mniej-więcej 8 sec., i wydaje mi się że nie jest to zły wynik. No i jest ten "Bake lights" który sobie obiecałem. ;D Próbuje się też uporać w międzyczasie z wciskaniem fotonów pomiędzy trójkąty. Na obrazku jest to widoczne jeśli ktoś spróbuje się przyjrzeć. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am Lord Opublikowano 24 Września 2013 Udostępnij Opublikowano 24 Września 2013 Tylko po co skoro i tak obiekt tego buga przykryje. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rekomendowane odpowiedzi
Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto
Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.
Zarejestruj nowe konto
Załóż nowe konto. To bardzo proste!
Zarejestruj sięZaloguj się
Posiadasz już konto? Zaloguj się poniżej.
Zaloguj się