Tweakers maakt gebruik van cookies, onder andere om de website te analyseren, het gebruiksgemak te vergroten en advertenties te tonen. Door gebruik te maken van deze website, of door op 'Ga verder' te klikken, geef je toestemming voor het gebruik van cookies. Je kunt ook een cookievrije versie van de website bezoeken met minder functionaliteit. Wil je meer informatie over cookies en hoe ze worden gebruikt, bekijk dan ons cookiebeleid.

Meer informatie

Door , , reacties: 31, views: 16.126 •

Ontwikkelaar id Software heeft de broncode van de BFG Edition van Doom 3 openbaar gemaakt. De bestanden zijn te downloaden via Github. De code valt onder de GNU General Public License. De code bevat niet de render-techniek die bekend staat als Carmack's Reverse.

Uitgever Bethesda maakt via het eigen blog bekend dat de broncode van Doom 3 is vrijgegeven. De code is te downloaden via Github. Ontwikkelaar id Software, sinds 2009 eigendom van Bethesda, kondigde eerder deze maand al aan dat de broncode vrijgegeven zou worden. De code valt onder de GNU General Public License. De studio gaf een jaar geleden al de broncode van Doom 3 uit, de shooter die in 2004 op de markt kwam. In oktober leverde id Software echter de BFG Edition van Doom 3 af, een nieuwe versie van de game met een verbeterd uiterlijk, beter geluid, ondersteuning voor 3d-schermen en een verbeterd systeem voor savegames. De BFG Edition bevat bovendien een extra hoofdstuk.

Uit de broncode van de BFG Edition zijn een aantal onderdelen verwijderd. Zo is de code die integratie met Steam regelt weggelaten en ook het deel dat het afspelen van Bink-video's verzorgt. Bovendien heeft id Software een stuk weggelaten dat verband houdt met een render-techniek die bekend staat als Carmack's Reverse. Het gaat daarbij om een onderdeel dat het renderen van 'shadow volumes' regelt. De studio had hierover een conflict met Creative, de fabrikant die vooral bekend is van geluidskaarten. Die heeft een patent op een vergelijkbare techniek als Carmack ontwikkelde voor Doom 3. Hetzelfde conflict zorgde in 2011 voor flinke vertraging bij het vrijgeven van de broncode van Doom 3. Tegelijk met de broncode verschijnt ook een patch voor de BFG Edition.

Doom 3 BFG Edition

Reacties (31)

Wat ik me afvraag is of dit daadwerkelijk zin heeft, de Doom 3 code is al een jaar vrijgegeven en heb nog over geen enkel project iets gehoord dat er gebruik van maakt...
Heel mooi dat ze uit zichzelf de broncode vrijgeven. Kan iedereen er leuke dingen mee gaan bouwen, in plaats van alleen id. Zouden meer mensen moeten doen.
Leuk om in de broncode te kunnen snuffelen.
De implementatie van de give all cheat:

static bool Cheat_GiveAll( void ) {
if( PLAYERCOUNT != 1 || ::g->netgame ) {
return false;
}

::g->plyr->armorpoints = 200;
::g->plyr->armortype = 2;

int i;
for (i=0;i<NUMWEAPONS;i++)
::g->plyr->weaponowned[i] = true;

for (i=0;i<NUMAMMO;i++)
::g->plyr->ammo[i] = ::g->plyr->maxammo[i];

for (i=0;i<NUMCARDS;i++)
::g->plyr->cards[i] = true;

::g->plyr->message = STSTR_KFAADDED;
return true;
}

kwestie van 3 arrays vullen dus.
Je hoeft er ook geen gebruik van te maken, op het moment dat het uitkomt is het ook al een 'oudere' engine. Persoonlijk gebruikten wij het om soort van 'van te leren', een kijkje in de keuken bij Id, hoe doen zij dat. Verder is de engine nu 'besmet' met GPL (geef zelf de voorkeur aan MIT, GPL is niet vrij ... vrij betekend dat je er alles mee kunt doen, GPL dwingt je een richting in) dus je kunt het niet overal zomaar meer voor gebruiken.

[Reactie gewijzigd door HerrPino op 27 november 2012 11:15]

Het kan wel interessant zijn, de code is voor een groot gedeelte geschreven door John Carmack, dat mag toch wel als een genie gezien worden. Het kan dus interessant zijn om te lezen hoe hij bepaalde problemen oplost / aanpakt.

Deze site biedt trouwens een leuke analyse van een gedeelte van de Doom 3 engine:

http://fabiensanglard.net/doom3/index.php
Als je de code download en compileert heb je dan gratis Doom 3 BFG?
Of is het net als bij quake 3 dat de daadwerkelijke resources in de vorm van geluid 3D modellen etcetera ontbreken waarna het alsnog niet gespeeld kan worden.
Lijkt me vrij sterk dat ze alle 3D models, geluiden, textures, map files etc. gratis weggeven, zou het hele BFG edition van Doom3 teniet doen.
Misschien wel mogelijk om zelf je eigen textures, models, maps etc. toe te voegen aan de broncode om zo je eigen Doom 3 amature edition te maken (ook leuk met teletubbies e.d. erin)
Het is alleen de code, dus niet de textures die je ook nodig heb.
Het is alleen de bronCODE, niet alle bronBESTANDEN...
"GPL is niet vrij"

Volledig oneens, het gaat om de vrijheid van de code en niet om de realisatie van jouw wens de code alsnog op te sluiten.
Creative's depth fail stencil shadow rendering is een van de belachelijkste patenten ooit.

Stencil shadows werken door het schaduw-volume van een object te renderen naar de stencil buffer. Een object werkt namelijk een schaduw op een ander object als zijn schaduw volume snijdt met dat obstakel. Een schaduwvolume is simpelweg het gehele volume dat achter een object zit, gezien vanuit de lichtbron.

Voor alle schaduw volume polygonen die naar de camera toe zijn gericht (frontfacing, dus die je van de voorkant kan zien) tel je 1 op bijde waarde in de stencilbuffer, en voor alle polygonen die van de camera af zijn gericht (backfacing) trek je er 1 af. Alle pixels die hierna geen 0 in de stencilbuffer hebben vallen in de schaduw. Het principe erachter is dat als het schaduw-volume een obstakel raakt, je alleen de voorkant van het volume kan zien omdat de achterkant wordt geclipped door de z-waardes van het obstakel in de depth buffer.

Deze techniek heeft echter een groot nadeel - als de camera zich ín het schaduw-volume bevindt, dan zijn álle polygonen backfacing, met als resultaat dat alle waarden in de stencilbuffer ongelijk zijn aan 0 als je die polygonen kunt zien en zou je denken dat alles in de schaduw ligt. Hier hebben Carmack en mensen bij Creative (William Bilodeau en Michael Songy) onafhankelijk van elkaar een vrij simpele oplossing voor gevonden. Iets dat iedereen kan bedenken als je het probleem een beetje aandachtig bekijkt.

Het probleem is namelijk:
  • schaduw volume polygonen die wel zichtbaar zijn geven schaduw terwijl ze dat niet moeten doen
  • schaduw volume polygonen die niet zichtbaar zijn geven geen schaduw terwijl ze dat wel moeten doen.
Ok, we willen dus schaduw voor de delen die níet zichtbaar zijn. Well, Einstein, als we dan gewoon eens de depth test omdraaien! Dus alleen als schaduw volume polygonen tekenen als de depth test faalt, oftewel, als de polygonen áchter andere polygonen liggen.

Een volume dat volledig zichtbaar is zal hierdoor helemaal niet renderen (resultaat 0 in de stencilbuffer). Voor een volume dat voor de helft zichtbaar is omdat hij een obstakel raakt zal alleen het gedeelte dat zich achter het obstakel bevindt worden gerenderd (resultaat ongelijk aan 0 in stencilbuffer). En voor een volume dat geheel achter een obstakel zit zullen zowel frontfacing (+1) als backfacing (-1) polygonen renderen waardoor het resultaat alsnog 0 is.

Simpele oplossing dus. Maar slim als ze zijn hebben Bilodeau en Songy het snel gepatenteerd, nog voordat Carmack erover gepubliceerd had, met als resutlaat een enorme rem op de innovatie op basis van iets dat iedereen met 3 hersencellen ook wel zelf kan bedenken.

[Reactie gewijzigd door .oisyn op 27 november 2012 12:20]

Deze broncode is heel interessant. Niet vanwege doom3, omdat de code al bekend was en eigenlijk niet echt veranderd is, maar vanwege de oude doom-versies. Hier staat namelijk code in om de doom-geluiden en -muziek af te spelen, en dat is code die nog nooit eerder vrijgegeven was vanwege licentie-rechten.
Nu is het nog steeds niet die oude code, maar is er toch iets waar anderen naar kunnen kijken hoe het nu echt moet, voorzover dat niet al bekend was. Destijds was dit een van de grootste problemen, om het echt als doom te laten klinken.
De community kennende zullen ze allicht zelf uiteindelijk met een gratis, vrij asset pack komen
De arrays zijn al gevuld, nu wordt er enkel een andere waarde aan elk element gegeven.
Maar de broncode is al lang vrijgegeven, nu is er alleen nog extra van de BFG versie vrijgegeven..
tja, dat is het nadeel van software/algorithme patenten en eigenlijk patenten uberhaupt.. maar voor de patenthouder is het wel fijn... Patenten zorgen er overigens ook voor dat er meer geld gestoken wordt in research, hell, het is een grote bakermat voor research, want bedrijven moeten ook geld verdienen..

Tja, en rem op innovatie is tweeslachtig natuurlijk, eigenlijk remt het niets, want je kunt ook gewoon een licentie nemen op het patent en daarna ermee verder.. Het probleem is alleen altijd: Was jij maar eerder die het had bedacht en gepatenteerd had........

En blijkbaar had niet iedereen met 3 hersencellen het ook wel zelf kunnen bedenken, want waarom was het dan niet eerder bedacht.. Ik zeg al, achteraf is het vaak makkelijk zeggen van 'pff dat had iedereen wel kunnen bedenken', en vaak genoeg gebeurd het ook dat afzonderlijk van elkaar dingen worden bedacht..

Maar je uitleg is in iedergeval heel duidelijk ;)
want waarom was het dan niet eerder bedacht..
Lekker onzin argument ook weer. Er is altijd iemand die iets als eerste heeft bedacht. Betekent dat dat álles dus bijzonder is? Algoritmen zijn geen domeinnamen die je zo snel mogelijk moet registreren voordat iemand anders 'm pakt. Sommige dingen zijn gewoon common sense.

Stencilshadows waren voor die tijd gewoon niet interessant omdat de hardware niet snel genoeg was.

[Reactie gewijzigd door .oisyn op 27 november 2012 13:56]

GPL gaat vooral om de vrijheid van eigen code en niet van die van anderen. Dat is net zoiets als zeggen dat iedereen vrij is om te schieten op iedereen, en dat af te doen als "vrijheid". Ja, dat is het technisch gezien ook wel, maar echt vrolijk wordt je er niet van. Door de imperking van die vrijheid heb ik de vrijheid om gewoon veilig over straat te lopen.

GPL code kun je niet gebruiken zonder de rest van de code ook GPL te maken. Dat vind ik een grove imperking van de vrijheid, en dus vind ik het niet vrij. GPL is het opleggen van een ideologie aan anderen. Dat is ook de hele reden dat het viraal is, omdat de bedenkers vinden dat de wereld daar beter van wordt. Dus iedereen die het gebruikt moet eraan voldoen, in de hoop dat zo steeds meer en meer code geGPL'd wordt. Je zou bijna de analogie kunnen trekken met menig geloofsovertuiging.

[Reactie gewijzigd door .oisyn op 27 november 2012 14:03]

Als ik me niet vergis zou je je eigen code als dynamic library kunnen compileren en tijdens runtime laden om zo de GPL (voor je eigen code) te omzeilen.

Op dit item kan niet meer gereageerd worden.