DGL
https://delphigl.com/forum/

Hierarchische licht berechnung fur punkt-lichter
https://delphigl.com/forum/viewtopic.php?f=20&t=10068
Seite 1 von 1

Autor:  Herrcoolness [ Fr Sep 16, 2011 00:38 ]
Betreff des Beitrags:  Hierarchische licht berechnung fur punkt-lichter

Hallo Jungs. Ich implementiere jetzt das licht in meinen engine. Ich mache gerade die punkt lichter. Ich habe schon die screen coverage optimalizierung implementier, welche basiert auf dem Gamasutra "The Mechanics of Robust Stencil Shadows" article in der sektion "Scissor Optimization" http://www.gamasutra.com/view/feature/2 ... hp?print=1. Dann die licht zmin-zmax optimalizierung, welche verhindert das nur die tiles kalkuliert werden, die in der grenze von zmin-zmax des lichtes liegen. Ich habe auch uber die optimalizierung nachgedacht, welche verhindert, dass das tile nicht per-pixel kalkuliert werdens soll, wenn kein punkt in diesen tile mit seinem normal zum licht zeigt. Fur die pararell lichter habe ich die loesing gefunden (hofe ich) . Ich kalkuliere das aritmetische durchschnitts normal von allen normals die in diesen tile sind. Normaliziere diesen normal und dann kalkuliere ich den niedrigsten cosinus wert zwischen den durchschnits normal vektor und die anderen normal vektoren mit dem dotproduct:

Ein pseudo-code fur bessere verstehung:

Code:
  1.  
  2. type fvec3= record x,y,z:single
  3.  
  4. var normals:array [0..63] of fvec3;// normal-vector array
  5.       i:longint;//index counter
  6.       durchschnitt_normal:fvec3;//der durchnitts normal
  7.       minimal_negative_cosinus:single;// minimaler cosinus zwischen  durchnitts normal und der normal-vector array
  8.       temp_cosinus:single;
  9.      
  10. begin
  11. //die normal-vektoren sind schon in "normals" array kalkuliert worden (durch die phong interpolation oder tangent space matrix)
  12.  
  13. //berechne durchschnitts-normal der normals-array
  14. durchschnitt_normal=fvec3 (0);
  15. for i:=0 to 63 do  durchschnitt_normal+=normals[i];
  16. normalize (durchschnitt_normal);
  17.  
  18. //berchne minimalen cosinus, die grenze, wo minimal ein normal-vector von der normals-array zum licht zeigt
  19. minimal_negative_cosinus:=1;
  20. for i:=0 to 63 do
  21. begin
  22.        temp_cosinus:=dotproduct (durchschnitt_normal,normals[i]);
  23.        if minimal_negative_cosinus>temp_cosinus then minimal_negative_cosinus:=temp_cosinus;
  24. end;
  25. minimal_negative_cosinus-=1;//wir brauchen noch 90 grad weil die fleche von licht von jeder seite zwishen 0 und 90 grad winkel sichtbar ist ;cos (0)-cos(90)=1
  26.  
  27. for i:=0 to tile_num_of_lights do
  28. begin
  29.      
  30.       if dotproduct (pararell_licht_normal [i],durchschnitt_normal)< minimal_negative_cosinus then continue;
  31.       ///////////////////////
  32.       //hier wird die per-pixel beleuchtung berechnet ...
  33.       //////////////////////
  34. end;
  35.  


Ok ich habe loesung fuer die pararell-lichter. Aber was ist mit punkt-lichter? Da kommt ins spiel die pixel und licht position in world-space. Jedes pixel hat gegen den licht anderen normal-vektor. Hat jemand eine idee? :(

Autor:  Herrcoolness [ So Sep 18, 2011 16:49 ]
Betreff des Beitrags:  Re: Hierarchische licht berechnung fur punkt-lichter

Niemand? :(

Seite 1 von 1 Alle Zeiten sind UTC + 1 Stunde
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/