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

FSA

Community-Fossil

  • »FSA« ist der Autor dieses Themas
  • Private Nachricht senden

1

16.12.2013, 17:16

Additives Blenden

Hallo! Ich versuche mich seit langem mal wieder an einem Forward-Renderer und möchte gerne mehrere Lichtquellen in eine Szene setzen. Aktuell render ich folgendermaßen:
Erster Pass mit Licht eins:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
blendStateDescription.RenderTarget[0].BlendEnable = TRUE;
blendStateDescription.RenderTarget[0].SrcBlend = D3D11_BLEND_ONE;
blendStateDescription.RenderTarget[0].DestBlend = D3D11_BLEND_ZERO;
blendStateDescription.RenderTarget[0].BlendOp = D3D11_BLEND_OP_ADD;
blendStateDescription.RenderTarget[0].SrcBlendAlpha = D3D11_BLEND_SRC_ALPHA;
blendStateDescription.RenderTarget[0].DestBlendAlpha = D3D11_BLEND_INV_SRC_ALPHA;
blendStateDescription.RenderTarget[0].BlendOpAlpha = D3D11_BLEND_OP_ADD;
blendStateDescription.RenderTarget[0].RenderTargetWriteMask = 0x0f;


Zweiter Pass mit Licht zwei:

C-/C++-Quelltext

1
blendStateDescription.RenderTarget[0].DestBlend = D3D11_BLEND_ONE;


Leider sehe ich nichts von meiner zweiten Lichtquelle. Wenn ich die Passes vertausche, dann sehe ich mein Objekt transparent, aber immer noch mit nur einem Licht. Hat jemand eine Idee, wie die Blendstates sein müssen?

Anbei noch zwei Screenshots.
1. Bild: ONEZERO, ONEONE
2. Bild: ONEONE, ONEZERO
»FSA« hat folgende Bilder angehängt:
  • 1..PNG
  • 2..PNG

Zitat

Der RCCSWU (RandomCamelCaseSomtimesWithUndersquare) Stil bricht auch mal mit den veraltet strukturierten Denkmustern und erlaubt dem Entwickler seine Kreativität zu entfalten.

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

2

16.12.2013, 17:36

Wie ist dein Z-Buffer konfiguriert?

Und wieso aktivierst du beim 1. Pass überhaupt Blending, wenn der Destination Factor null ist?
Das ist doch total unnötig.

FSA

Community-Fossil

  • »FSA« ist der Autor dieses Themas
  • Private Nachricht senden

3

17.12.2013, 21:50

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
depthStencilDescTex.Width     = static_cast<int32_t>(m_vScreenSize.x);
    depthStencilDescTex.Height    = static_cast<int32_t>m_vScreenSize.y);
    depthStencilDescTex.MipLevels = 1;
    depthStencilDescTex.ArraySize = 1;
    depthStencilDescTex.Format    = DXGI_FORMAT_D24_UNORM_S8_UINT;
    depthStencilDescTex.SampleDesc.Count   = pConfig->Direct3D.MultiSamplingSamples;
    depthStencilDescTex.SampleDesc.Quality = pConfig->Direct3D.MultiSamplingQuality;
    depthStencilDescTex.Usage          = D3D11_USAGE_DEFAULT;
    depthStencilDescTex.BindFlags      = D3D11_BIND_DEPTH_STENCIL;
    depthStencilDescTex.CPUAccessFlags = 0; 
    depthStencilDescTex.MiscFlags      = 0;

Das habe ich eingefügt, da ich mit anderen Blend OP's experimentiert habe.

Zitat

Der RCCSWU (RandomCamelCaseSomtimesWithUndersquare) Stil bricht auch mal mit den veraltet strukturierten Denkmustern und erlaubt dem Entwickler seine Kreativität zu entfalten.

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

4

17.12.2013, 23:29

Ich meinte eigentlich auch die Z-Buffer-States.
Womöglich ist der zweite Pass gar nicht sichtbar, eben wegen des Z-Buffers.

FSA

Community-Fossil

  • »FSA« ist der Autor dieses Themas
  • Private Nachricht senden

5

18.12.2013, 18:08

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
depthStencilDesc.DepthEnable = TRUE;
depthStencilDesc.DepthWriteMask = D3D11_DEPTH_WRITE_MASK_ALL;
depthStencilDesc.DepthFunc = D3D11_COMPARISON_LESS;
depthStencilDesc.StencilEnable = TRUE;
depthStencilDesc.StencilReadMask = 0xFF;
depthStencilDesc.StencilWriteMask = 0xFF;
depthStencilDesc.FrontFace.StencilFailOp = D3D11_STENCIL_OP_KEEP;
depthStencilDesc.FrontFace.StencilDepthFailOp = D3D11_STENCIL_OP_INCR;
depthStencilDesc.FrontFace.StencilPassOp = D3D11_STENCIL_OP_KEEP;
depthStencilDesc.FrontFace.StencilFunc = D3D11_COMPARISON_ALWAYS;
depthStencilDesc.BackFace.StencilFailOp = D3D11_STENCIL_OP_KEEP;
depthStencilDesc.BackFace.StencilDepthFailOp = D3D11_STENCIL_OP_DECR;
depthStencilDesc.BackFace.StencilPassOp = D3D11_STENCIL_OP_KEEP;
depthStencilDesc.BackFace.StencilFunc = D3D11_COMPARISON_ALWAYS;


Und Rasterizer:

C-/C++-Quelltext

1
2
3
4
5
6
7
RRDesc.AntialiasedLineEnable = FALSE;
RRDesc.DepthBias = 0;
RRDesc.DepthBiasClamp = 0.0f;
RRDesc.DepthClipEnable = TRUE;
RRDesc.FillMode = D3D11_FILL_SOLID;
RRDesc.CullMode = D3D11_CULL_BACK;
RRDesc.MultisampleEnable = true;

Zitat

Der RCCSWU (RandomCamelCaseSomtimesWithUndersquare) Stil bricht auch mal mit den veraltet strukturierten Denkmustern und erlaubt dem Entwickler seine Kreativität zu entfalten.

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

6

18.12.2013, 19:09

Mein Verdacht hat sich bestätigt. D3D11_COMPARISON_LESS ist der Übeltäter.
Übrigens, ab dem 2. Pass musst du nicht mehr in den Z-Buffer schreiben. Das spart ggf. Zeit.

FSA

Community-Fossil

  • »FSA« ist der Autor dieses Themas
  • Private Nachricht senden

7

18.12.2013, 19:17

Laut MSDN müsste es doch eigentlich genügen, wenn ich einfach DepthEnable auf false setze, oder? Ich habe dann weder schreiben, noch testen.

Zitat von »MSDN«


Set DepthEnable to FALSE to disable depth testing and prevent writing to the depth buffer.

Zitat

Der RCCSWU (RandomCamelCaseSomtimesWithUndersquare) Stil bricht auch mal mit den veraltet strukturierten Denkmustern und erlaubt dem Entwickler seine Kreativität zu entfalten.

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

8

18.12.2013, 19:47

Aber du willst doch den Test nicht abschalten ... ?(

FSA

Community-Fossil

  • »FSA« ist der Autor dieses Themas
  • Private Nachricht senden

9

18.12.2013, 19:49

Wie genau soll ich sonst den zweiten Pass rendern? Mit D3D11_COMPARISON_LESS_EQUAL?

Zitat

Der RCCSWU (RandomCamelCaseSomtimesWithUndersquare) Stil bricht auch mal mit den veraltet strukturierten Denkmustern und erlaubt dem Entwickler seine Kreativität zu entfalten.

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

10

18.12.2013, 19:50

Ja.
Dass LESS nicht klappt, sollte doch klar sein, oder?
Die Aussage "z < z" ist immer falsch.

Werbeanzeige