Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Beiträge: 774

Beruf: Student

  • Private Nachricht senden

11

29.03.2010, 21:43

Gute Idee :)
Hab jetzt einfach mal ein Vergleichsbild aus Xrodon im ersten Level gemacht - dort ist das Postpro relativ dezent eingesetzt!
Hier wird auch auf das zusätzliche Einfärben verzichtet.
Es gibt aber in dem Spiel sicher noch wesentlich bessere Beispiele, kann ja jeder selbst ausprobieren über das Optionemenu.
In Xrodon sind auch fast alle Übergangseffekte in den Menus und jede Menge Zauber mit diesem Postpro gestaltet, da sich die Werte ja sehr leicht ändern lassen... da tu ich mich jetzt nur gerade recht schwer das einzufangen, weil mans in Xrodon leider nicht on-the-fly ändern kann.


(Link)

Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von »Wümpftlbrümpftl« (29.03.2010, 21:50)


BlazeX

Alter Hase

Beiträge: 478

Wohnort: DD

Beruf: Maschinenbau-Student

  • Private Nachricht senden

12

19.05.2010, 16:41

Für 18 instruktionen bekommst du komplettes Parallax-Normalmapping inkl. Specular Highlights...
Na dann los! Zeig mal.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

13

19.05.2010, 18:18

As you wish^^

Is aber alles schon etwas länger her:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
/************************************************************

in:

  t0        texcoords
  t1        lightvector
  t2        halfvector
  t3        viewvector

  stage 0   diffuse texture
  stage 1   normal map

  c0        const (0.0f, 0.5f, 1.0f, 2.0f)
  c1        (specular power, height scale, offset, 0.0f)
  c2        light color

*************************************************************/

ps_2_0

dcl v0

dcl t0
dcl t1
dcl t2
dcl t3

dcl_2d s0
dcl_2d s1


// parallax mapping

texld r0, t0, s1

nrm r1, t3               // renormalize viewvector
mul r1, r1, c1.y

mad r0, r0, c0.w, -c0.z  // decompress height
mad r4, r1, r0.a, t0


// normal mapping

texld r1, r4, s1         // r1 <- normal map

nrm r3, t2               // renormalize halfvector
nrm r2, t1               // renormalize lightvector

texld r0, r4, s0         // r0 <- diffuse texture

mad r1, r1, c0.w, -c0.z  // decompress normals

// r4 <- lambert
dp3 r4, r1, r2           // N * L

// r5 <- blinn specular
dp3 r5, r1, r3           // N * H
pow r5, r5.w, c1.x
mul r5, r5, r0.a

mad r0, r0, r4, r5       // texture * diffuse + specular
mul r0, r0, c2           // (texture * diffuse + specular) * light color
mul r0, r0, v0

mov oC0, r0



Screenshot:

(Link)

Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von »dot« (19.05.2010, 19:23)


BlazeX

Alter Hase

Beiträge: 478

Wohnort: DD

Beruf: Maschinenbau-Student

  • Private Nachricht senden

14

20.05.2010, 14:00

Etwas länger? ASM ist doch Steinzeit! :o
Scherz, ich weiß, dass das bei GPUs noch nicht lang her ist.
Aber könntest du das bitte mal nach HLSL/GLSL oder irgendetwas verständlicheres übersetzen?

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

15

20.05.2010, 14:29

Heute würde man das meistens sowieso anders machen weil n wenig mehr Arithmetik kein Problem für aktuelle GPUs ist ;)

Aber gut, in HLSL würde das ganze in etwa so aussehen (nicht getestet!):

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
float height_scale;
float height_bias;

float specular_power;
float3 light_color;


sampler diffuse_tex : s0;  // gloss map in alpha channel
sampler normal_map : s1;  // bump map in alpha channel


float4 ParallaxNormalMap(float2 t : TEXCOORD0,  // Texcoords
                         float3 l : TEXCOORD1,  // Light vector in Tangent Space
                         float3 h : TEXCOORD2,  // Half vector in Tangent Space
                         float3 v : TEXCOORD3   // View vector in Tangent Space
                         ) : COLOR0
{   
  float height = tex2D(normal_map, t).a * height_scale - height_bias;
  
  v = normalize(v);  // renormalize v
  
  t += v.xy * height;  // parallax
  
  float3 n = tex2D(normal_map, t).xyz;
  
  l = normalize(l);  // renormalize l
  h = normalize(h);  // renormalize h
  
  float4 diffuse_color = tex2D(diffuse_tex, t);
  
  n = n * 2.0f - 1.0f;
  
  float lambert = max(dot(n, l), 0.0f);
  float specular = pow(max(dot(n, h), 0.0f), specular_power) * diffuse_color.a;
  
  return float4(lambert * diffuse_color.rgb + specular) * light_color, 1.0f);
}

Dieser Beitrag wurde bereits 10 mal editiert, zuletzt von »dot« (20.05.2010, 15:04)


Werbeanzeige