Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Do Mai 16, 2024 18:52

Foren-Übersicht » Programmierung » Shader
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 2 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Fr Sep 16, 2011 00:38 
Offline
DGL Member

Registriert: Fr Apr 08, 2011 23:41
Beiträge: 19
Programmiersprache: Free Pascal, ASM
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? :(

_________________
Mich interesiert es nicht in welcher sprache du programmiers. Mich interesiert, was du in dieser sprache programmieren kannst.


Zuletzt geändert von Lord Horazont am Mo Sep 19, 2011 22:12, insgesamt 1-mal geändert.
Codetag angepasst


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: So Sep 18, 2011 16:49 
Offline
DGL Member

Registriert: Fr Apr 08, 2011 23:41
Beiträge: 19
Programmiersprache: Free Pascal, ASM
Niemand? :(

_________________
Mich interesiert es nicht in welcher sprache du programmiers. Mich interesiert, was du in dieser sprache programmieren kannst.


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 2 Beiträge ] 
Foren-Übersicht » Programmierung » Shader


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.049s | 18 Queries | GZIP : On ]