Doom III и GeForceFX 5900

Doom III и GeForceFX 5900

В раздел: Статии от на 23.08.2004, 16,602 показвания

В момента Doom III се води може би най-напредничавата откъм това, което виждате на екрана игра, а манията по нея е всеобща. Макар да съм на мнение, че играта съвсем не е толкова добра, колкото би ми се искало – нито откъм геймплей, нито откъм свършена работа от ID Software (за последното ще посоча обективни причини), се налага да използвам играта най-малкото за тестове, защо не и “да разтоваря” понякога. В алфа версията на играта, изтекла преди време имаше множество настройки, които след известни промени успяваха да докарат приличен фреймрейт дори и на слаби карти. В излезлата финална (ако може да се нарече финална) версия на играта обаче има явни пропуски, да не говорим за по принцип ниското качество на изображението.

Проблемите идват основно от използването на компресия върху текстурите, които от своя страна са тежки, а се използват буквално промишлени количества във всеки кадър. Осветлението и сенките също тежат, а без тях се губи атмосферата на играта. В самата инсталация се оказа, че не са включени никакви оптимизации за последните поколения видеокарти – по подразбиране (и независимо какво задавате в конфигурационния файл) се ползва arb2 рендерер за GeForce видеокартите и Radeon-ите 9×00. Единствено Radeon 8500 е заслужил свое място в наличните оптимизации, вероятно защото е бил една от най-добрите, ако не и най-добрата видеокарта в началото на разработката на играта. Кармак въодушевено обясняваше как поддръжката на Environment и DOT3 Bump Mapping ще помогне да докарат на играта невероятен вид, като запазят все пак приличен за игра брой кадри, но днес това изглежда е стара история – играта наистина ползва (и то много) Bump Mapping, за съжаление това е за сметка на липсата на кой знае какви ефекти от шейдърите. А днес те са не само на мода, а и по принцип помагат да виждаме наистина интересни и качествени ефекти. Тъй като играта е правена предимно за GeForce видеокарти (не мога да отреча това), и то старо поколение, оказва се, че с далеч по-новите FX-и въобще не върви както би ни се искало. Възможния избор на оптимизации на теория (според различните cfg файлове в Base директорията) би трябвало да включва следните възможности за “r_renderer” – best, arb, arb2, cg, exp, nv10, nv20, nv25, nv30, r200 (защо не и r300?).

*Да ги наричам “оптимизации” е правилно доколкото всеки възможен избор да би трябвало да използва програми, подходящи за съответните видеокарти. Подобрение за картите на ATi донесе възможността в interaction.vfp многократното обръщение към текстурите да се замести с математически действия, но това води до сериозно забавяне при GeForceFX видеокартите. За съжаление, както вече споменах, активни са само arb/arb2 и, разбира се, best, който пак ползва arb2. Има начин да включите “Cg”, но липсата на готови програми в glprogs директорията ще ви остави само със светлините и никаква картина на екрана :). И все пак, да спомена как става – един от вариантите е да изтеглите Cg библиотеките, компилатора и т.н. от сайта на nVidia – нещо, което бях свършил преди време, но сега наистина не ми се занимаваше с него. Вариант две – ако имате инсталирана FarCry може да копирате нужните файлове в System32 директорията, да посочите “cg” и да видите резултата. В конзолата ще се появят куп грешки. Doom III OpenGL рендерера ползва opengl32.dll библиотеката на Windows, не е проблем с командата r_glDriver да посочите “nvoglnt”, която е сред инсталираните с драйвера на nVidia. Промяна в количеството кадри няма, не се надявайте на някакво подобрение от това.

Защо се захванах всъщност с Doom III – още при първото пускане ми направи изключително лошото качество на текстурите. Не вярвам да има човек, който да не ес е подразлил от това. И не само текстурите – включването на “Ultra” качество не само не подобряваше особено вида, но и забавяше изключително много играта. Да, възможността да играя на High си оставаше, но предпочетох да потърся начин да имам едновременно високо качество в допълнение към количество кадри, подходящи за игра.

Преди да изброя нещата, които съм променял (а опитах едва ли не всяка от командите по-долу и признавам – за много от тях нямам идея какво вършат), ще спомена някои други оптимизации. След като се начетох из разни ръководства на обяснения как това или онова правело играта по-пъргава, помагало за бързо зареждане, ремахвало забавянето при отваряне ан някои врати, не нарушавало много качеството на картината, забързвало играта и т.н. и т.н., както и предполагах, се оказа, че дори и половината неща не правят нищо за бързодействието в което и да е отношение – нито за скоростта на зареждане на нивата, нито за повишаване на броя кадри, а много от тях наистина могат да влошат качеството на изображението или да направят инсталацията на играта два пъти по-голяма :).

По-малко място на харда, по-бързо зареждане:

Досега тези две бяха несъвместими. Този “tweak” определено е за хора с МНОГО здрави нерви и МНОГО свободно време. Съвета на различни хора да се разархивират pk4 архивите в base директорията, с цел по-бързо зареждане има няколко съществени недостатъка. Първо, така инсталацията се увеличава неимоверно много. Второ, подобно количество файлове изисква постоянна дефрагментация, а предвид съществуващите и ползвани от повечето дефрагментатори това не гарантира линейност при четенето на файловете – най-малкото така текстурите (със 110% сигурност това е най-тежката част от Doom III) се пръсват и не се извличат само нужните от тях, а всички остават някъде по харда. Естествено, първият ми съвет в това отношение е да сложите Doom3 директно на отделен дял :). Всичко хубаво, но при мен това е невъзможно, или по-скоро не го желая, защото мания или не игарта не заслужава ЧАК такова внимание, пък и това не е наистина най-добрата идея.

Какво може да се направи. Ще спазя някакъв ред на действия като за хора с два дяла на диска. На първо време свалете O&O Defrag V6. Аз работя със Server Edition, не съм сигурен дали останалите версии разполагат със същите възможности. Откъде да го свалите…е, фрий сървъри колкото искате :). Преди да инсталирате играта пуснете дефрагментация от типа “SPACE”. Идеята е след като инсталирате Doom, всички негови файлове да се намират от един клъстер натам. Тук е мястото да спомена, че колкото по-голям е размера на клъстера, зададен при форматирането, ще имате съответно по-висока скорост на четене и това значително намалява стърженето на твърдия диск. Инсталацията на играта може да се мести свободно насам-натам, така че няма проблем с това дали имате готова инсталация или тепърва ще я правите. Направете на другият дял папка base и разархивирайте в нея pk4 файловете с WinRAR/WinZIP/7zip или друга подобра програма. Всъщност това са zip архиви с нормална компресия. На няколко места прочетох идеята след това просто да ги архивирате без компресия, но това е безсмислено – така пак ще имате големината на разкомпресираните папки, а всеки път когато зареждате ниво играта ще трябва да чете целите pk4 файлове. Споменах вече, че основният пълнеж на \base\ са текстурите, които са във формат TGA и се намират в папка “textures”, както и в “env”, “lights” и не малко са пръснати из папките в “models”. По подразбиране всички текстури са 24-битови TGA и предвид размерите си са едва няколко основни размера на файловете. TGA форматът обаче предлага и възможност за компресия без загуба на качество, затова хората с наистина много свободно време могат да се хванат на работа – отваряте файловете с Photoshop и ги презаписвате като компресирани 24-bit TGA. Тъй като са много, особено в папките в “textures”, може да направите готов Action като запишете в него действията SaveAs>Overwrite>24-btt+LRE Compression>Save>Close и му поставите функционален бутон (по ваше си желание) и след това го ползвате за всички файлове във същата папка. Този Action трябва да се прави поотделно за всяка папка ако не искате да ви запамети файловете в първата, в която сте го направили. В много случаи смаляването на размерите на файловете е наистина невероятно. Base директорията ви може и да ви се стори наистина малка след тази галимация. Всичко това води само до по-малка инсталация, но тъй като четенето от диска ще се извършва в по-малък брой клъстери ще доведе и до по-бързо зареждане на нивата, макар през това време малко да нараства натоварването над процесора (така или иначе не ви интересува особено, пък и е наистина много малко).

Сега идва време за нова дефрагментация, тъй като сме освободили място на диска и между файловете. Противно на всички други съвети, ще ви кажа въобще да не се занимавате с друг тип дефрагментация освен този, който ще спомена, защото ще бъде излишно. Не ми се правят детайлни рисунки, но обикновените алгоритми на дефрагментаторите са свързани основно с два типа дефрагментация – такава за пестене на място, която събира фрагментите и използва празните места в клъстерите така, че да са запълнени докрай и да няма файлове с няколко фрагмента, като всичко става без оглед положението на файловете в папките или нуждата от последователност при следващото им четене. Вторият тип дефрагментация, при която се оставят места след дефрагментираните файлове, така че да се намали риска за бъдещо фрагментиране при използването им. И двата варианта за нас са безсмислени, защото малките по размер файлове от разкомпресираните pk4 файлове ще бъдат буквално пръснати навсякъде из дяла, за да запълват клъстери. По-добър вариант има, разбира се. O&O Defrag V6 има три допълнителни метода на дефрагментация, един от които ни върши прекрасна работа. Това са “Complete” методите и както се досещате при ползването им се реорганизират напълно файловете в дяла. В случая конкретно ни интересува “Complete/Access”, който променя местата на файловете според времето на достъпа до тях. Всичко това се отнася само за дялове, където освен Doom има и други неща – в противен случай така или иначе ще имате всичко на едно място (при положение, че имате един дял само за Doom3). За да сте сигурни, че всичко в директорията на играта е с най-късна (най-скорошна) дата на достъп е достатъчно да преместите папката на друг дял и да я върнете. Ако нямате тази възможност може да изключите Simple File Sharing (ако сте с WindowsXP) и да промените собственика на цялата папка и после да върнете вашето си име, но това са действия, които не се наемам да описвам :). След връщането на папката на мястото й във всички файлове в нея ще е влизано след всички останали файлове и папки на дяла, съответно може да включите вече на работа дефрагментатора с опция “Complete/Access”, като преди това изхвърлите кошчето, за да не се освобождава място от него по-късно. Имайте предвид, че това е наистина дълъг процес и силно зависи от скоростта на диска, IDE контролера и драйверите за последния. След завършване на дефрагментацията всички файлове от директорията Doom 3 ще да наредени в последователни клъстери ;). Това е възможно най-добриятш метод с оглед бързина на достъп до файловете, а използването на компресия в текстурите ви гарантира поне (не съм го мерил, предполагам дори е много повече) поне 30% спестено място. Все пак е нужно да знаете, че липсата на pk4 файлове (поне доколкото ми е известно) няма да ви позволи да играете в Multiplayer режим. Ако държите да играете в такъв, разархивирайте pk4 файловете поотделно, минете през Photoshop всички текстури, които намерите в полечуните папки, компресирайте каквото е било в pk4 файла (със 7zip е не само лесно, но и безплатно), но без компресия и пристъпете към следващия. Така ще запазите сравнително бърз достъп в комбинация с малък размер.

Драйвери:

Използвах версия 65.62 на драйверите Forceware. Известно е, че между режимите High Quality и Quality в драйвера има разлика, но противно на очакванията, такава липсва. Единственото различие между тях е възможността да променяте следните параметри:

– Trilinear optimization
– Anisotropic mip filter optimization
– Anisotropic sample optimization

Обясненията на nVidia за значенията им са по-долу

За разлика FarCry тук пусках само два варианта на настройките от драйвера – включени и изключени Trilinear optimization, Anisotropic mip filter optimization и Anisotropic sample optimization съответно при Quality и High Quality режими в драйвера. Причината да не ги ползвам поотделно е по-малката разлика в броя кадри и съвсем малката в качеството на филтрирането преди и след оптимизациите. За сметка на това използвах още един начин на оптимизация (или махането на такава, зависи от гледната точка) – RivaTuner и менюто за настройка на OpenGL.

Оттук се изключва вертикалната синхронизация, макар играта да разполага с подобен контрол – от това меню се изключва за всички OpenGL приложения.

Level Of Detail – за максимално качество е стойността “0”. Отрицателните стойности водят до по-остро изображение, но то ще изглежда назъбено (не се хващайте за думата, в Doom3 е без друго отдалечените обекти и текстурите получават своя дял Antialiasing само с GeForce видеокарти при ползване на Quincunx или 8xS заглаждане на ръбовете, така че е по-добре да нямат нужда от заглаждане), а положителните замазват изображението.

Промяната на типа компресия или форсирането й от следващото меню когато е изключена в конфигурационния файл не води до промяна.

MaxTLF

MidTLF

MinTLF

Тестовете на анизотропната филтрация са правени в 5 варианта:

HQ, not optimizedHigh Quality, изключени оптимизации в драйвера (HQ ги изключва и нямате достъп до тях), изключена Override Intelisample trilinear filtering quality
control
в RivaTuner.

Q, On-On-On, TLFOpt. OffQuality, включени Trilinear optimization, Anisotropic mip filter optimization и Anisotropic sample optimization оптимизации в драйвера,
изключена Override Intelisample trilinear filtering quality control в RivaTuner.

Q, On-On-On, Max/Mid/MinTLFQuality, включени Trilinear optimization, Anisotropic mip filter optimization и Anisotropic sample optimization оптимизации в драйвера,
включена Override Intelisample trilinear filtering quality control в RivaTuner съответно в последователностите от горните три екрана.

В RivaTuner са достъпни повече методи на заглаждане отколкото в контрония панел на драйвера. Тези над 2x не работят или поне не могат да се ползват в Doom3. 6x съвсем не е 6x :). Texture Sharpening на теория удвоява нивото на анизотропната филтрация, от което полза има в режимите на antialiasing, ползващи supersampling, както и в Quincunx и 4x 9-tap режимите (особено вторият много замазва текстурите, но от друга страна Doom наистина има нужад от това).

Тестова система:

– Athlon64 3000+
– Abit KV8
– MSI GeForceFX 5900 128MB, 425/850 MHz
– 2x512MB Geil Platinum DDR500 @ 2-3-3-6
– 160GB Hitachi 7K250 PATA
– WindowsXP SP2,DirectX9c

За тестовете използвах собствено демо. Причината да запиша такова – в Doom3 има съществена разлика в показаните кадри при пускане само на демото и при първоначално зареждане на нивото и пускане на демото след това. Това се отнася и за демото, което идва по подразбиране с играта. Втора причина бе твърде голямата дължина на вграденото demo1 – при подобен брой тестове можех да прекарам пред компютъра цяла седмица, за да свърша :). Двете запазени игри – Antialiasing и Anisotropic са съответно на местата, където съм правил скрийншотове.

Тестовете за анизотропна филтрация са правени чрез смяна на нивото на филтрация (с клавиш “;”) вътре в играта при зареждане на сейв-а Anisotropic и след това пускане на конзола и timedemo test.

Тестовете за заглаждане на ръбовете са правени след зареждане на сейв-а Antialiasing и въвеждане в конзолата на timedemo test.
*Запазените игри и демото може да свалите оттук.

Долу са няколко екрана от него:

Настройки в конфигурационните файлове.

Основните настройки на играта са в DoomConfig.cfg, но за по-лесно може да зададете настройките в autoexec.cfg – ако няма такъв файл може да направите с Notepad текстов файл и да му смените разширението. По-долу са изброени повечето команди, които се задават в конфигурационните файлове, част от които съм ползвал. Естествено има още цял куп команди, но да се занимая поотделно с всички наистина не е по силите ми.

—————————————————

com_compressSaveGame = “0”
com_videoRam = “64”
com_showMemoryUsage = “0”
com_showFPS = “1”
com_allowConsole = “0”
com_machineSpec = “0”
seta execMachineSpec
cm_backFaceCull = “0”
g_showBrass = “0”
g_showProjectilePct = “0”
g_showHud = “1”
g_showPlayerShadow = “0
g_fov = “90”
g_skipParticles = “0”
g_skipFX = “0”
image_downSizeLimit = “256”
image_ignoreHighQuality = “1”
image_downSizeBumpLimit = “256”
image_downSizeSpecularLimit = “64”
image_downSizeBump = “1”
image_downSizeSpecular = “1”
image_showBackgroundLoads = “0”
image_useCache = “1”
image_cacheMegs = “64”
image_cacheMinK = “4096”
image_useOfflineCompression = “0”
image_writeTGA = “0”
image_writeNormalTGAPalletized = “0”
image_writeNormalTGA = “0”
image_writePrecompressedTextures = “0”
image_usePrecompressedTextures = “1”
image_useNormalCompression = “1”
image_useAllFormats = “1”
image_useCompression = “1”
image_preload = “1”
image_colorMipLevels = “0”
image_roundDown = “1”
image_forceDownSize = “0”
image_downSize = “1”
image_lodbias = “0”
image_anisotropy = “0”
image_filter = “GL_LINEAR_MIPMAP_LINEAR”
in_alwaysRun = “0”
r_hdr_monitorDither = “0.01”
r_hdr_gamma = “1”
r_hdr_bloomFraction = “0.1”
r_hdr_exposure = “1.0”
r_hdr_useFloats = “0”
r_sb_screenSpaceShadow = “1”
r_sb_linearFilter = “1”
r_sb_useCulling = “1”
r_sb_singleSide = “-1”
r_sb_showFrustumPixels = “0”
r_sb_frustomFOV = “92”
r_sb_occluderFacing = “0”
r_sb_polyOfsUnits = “3000”
r_sb_polyOfsFactor = “2”
r_sb_randomize = “1”
r_sb_samples = “4”
r_sb_biasScale = “0.0001”
r_sb_jitterScale = “0.006”
r_sb_usePbuffer = “1”
r_sb_noShadows = “0”
r_sb_viewResolution = “1024”
r_sb_lightResolution = “1024”
r_vertexBufferMegs = “32”
r_showVertexCache = “0”
r_materialOverride = “”
r_debugPolygonFilled = “1”
r_debugArrowStep = “120”
r_debugLineWidth = “1”
r_debugLineDepthTest = “0”
r_cgFragmentProfile = “best”
r_cgVertexProfile = “best”
r_jointNameOffset = “0.5”
r_jointNameScale = “0.02”
r_showSkel = “0”
r_useEntityCallbacks = “1”
r_lockSurfaces = “0”
r_showOverDraw = “0”
r_showTextureVectors = “0”
r_showAlloc = “0”
r_showDominantTri = “0”
r_showTangentSpace = “0”
r_showTexturePolarity = “0”
r_showEdges = “0”
r_showPrimitives = “0”
r_showSurfaces = “0”
r_showDepth = “0”
r_showInteractions = “0”
r_showCull = “0”
r_showMemory = “0”
r_showNormals = “0”
r_showSurfaceInfo = “0”
r_showTris = “0”
r_showViewEntitys = “0”
r_showLightCount = “0”
r_showInteractionScissors = “0”
r_showInteractionFrustums = “0”
r_showEntityScissors = “0”
r_showLightScissors = “0”
r_showShadowCount = “0”
r_showShadows = “0”
r_showLights = “0”
r_showSmp = “0”
r_showImages = “0”
r_showIntensity = “0”
r_showTrace = “0”
r_showDefs = “0”
r_showLightScale = “0”
r_showDynamic = “0”
r_showDemo = “0”
r_showUpdates = “0”
r_showVertexColor = “0”
r_showSilhouette = “0”
r_showUnsmoothedTangents = “0”
r_showPortals = “0”
r_lightAllBackFaces = “0”
r_orderIndexes = “1”
r_forceLoadImages = “1”
r_singleArea = “0”
r_singleSurface = “-1”
r_singleEntity = “-1”
r_singleLight = “-1”
r_usePortals = “1”
r_demonstrateBug = “0”
r_screenFraction = “100”
r_useDepthBoundsTest = “0”
r_useCombinerDisplayLists = “1”
r_useScissor = “1”
r_useOptimizedShadows = “1”
r_useExternalShadows = “1”
r_flareSize = “1”
r_lightSourceRadius = “0”
r_lightScale = “2”
r_testStepGamma = “0”
r_testGammaBias = “0”
r_testGamma = “0”
r_testARBProgram = “0”
r_shadows = “0”
r_subviewOnly = “0”
r_skipParticles = “0”
r_skipGuiShaders = “0”
r_skipSubviews = “0”
r_frontBuffer = “0”
r_shadowPolygonFactor = “0”
r_shadowPolygonOffset = “-1”
r_offsetunits = “-600”
r_offsetfactor = “0”
r_clear = “2”
r_logFile = “0”
r_useFrustumFarDistance = “0”
r_useShadowCulling = “1”
r_useInteractionScissors = “2”
r_useInteractionCulling = “1”
r_useEntityScissors = “0”
r_useEntityCulling = “1”
r_useClippedLightScissors = “1”
r_useLightScissors = “1”
r_useLightCulling = “3”
r_useCulling = “2”
r_usePreciseTriangleInteractions = “0”
r_ignore2 = “0”
r_ignore = “0”
r_skipROQ = “0”
r_skipDiffuse = “0”
r_skipBump = “1”
r_skipSpecular = “1”
r_skipOverlays = “0” (
r_skipUpdates = “0”
r_skipFrontEnd = “0”
r_skipDeforms = “0”
r_skipFogLights = “0”
r_skipBlendLights = “0”
r_skipNewAmbient = “1”
r_skipAmbient = “0”
r_skipTranslucent = “0”
r_skipRenderContext = “0”
r_skipRender = “0”
r_skipBackEnd = “0”
r_skipCopyTexture = “0”
r_skipDynamicTextures = “0”
r_skipInteractions = “0”
r_skipLightScale = “0”
r_skipPostProcess = “0”
r_skipSuppress = “0”
r_jitter = “0”
r_renderer = “best”
r_brightness = “1”
r_gamma = “1.6”
r_swapInterval = “1”
r_finish = “0”
r_ignoreGLErrors = “1”
r_znear = “3”
r_useInfiniteFarZ = “1”
r_useStateCaching = “1”
r_useIndexBuffers = “0”
r_useVertexBuffers = “1”
r_useCachedDynamicModels = “1”
r_useDeferredTangents = “1”
r_useTwoSidedStencil = “1”
r_useTurboShadow = “1”
r_useInteractionTable = “1”
r_useShadowSurfaceScissor = “1”
r_useShadowVertexProgram = “1”
r_useShadowProjectedCull = “1”
r_useNodeCommonChildren = “1”
r_useSilRemap = “1”
r_useTripleTextureARB = “1”
r_useConstantMaterials = “1”
r_useNV20MonoLights = “1”
r_checkBounds = “0”
r_singleTriangle = “0”
r_customHeight = “486”
r_customWidth = “720”
r_fullscreen = “1”
r_displayRefresh = “0”
r_mode = “3”
r_multiSamples = “0”
r_useLightPortalFlow = “1”
r_glDriver = “”
r_inhibitFragmentProgram = “0”
r_slopNormal = “0.02”
r_slopTexCoord = “0.001”
r_slopVertex = “0.01”
r_mergeModelSurfaces = “1”
r_terrainScale = “3”
r_skipMegaTexture = “0”
r_showMegaTextureLabels = “0”
r_showMegaTexture = “0”
r_megaTextureLevel = “0”
r_useDepthBoundsTest “1”
r_ext_vertex_array_range “1”
radiant_QE4StyleWindows = “0”
radiant_TextureLock = “1”
radiant_RotateLock = “1”
radiant_LoadLast = “1”
radiant_LastProject = “doom.qe4”
radiant_LastMap = “W:”
radiant_RunBefore = “1”
radiant_NewFaceGrab = “1”
radiant_NewRightClick = “1”
radiant_NewVertex = “1”
radiant_Autosave = “1”
radiant_LoadLastMap = “0”
radiant_NewTextureWindowStuff = “0”
radiant_AutosaveMinutes = “5”
radiant_Snapshots = “0”
radiant_StatusPointSize = “10”
radiant_CamXYUpdate = “1”
radiant_NewLightStyle = “1”
radiant_MoveSpeed = “400”
radiant_AngleSpeed = “300”
radiant_CubicClipping = “1”
radiant_CubicScale = “13”
radiant_ALTEdgeDrag = “0”
radiant_UseTextureBar = “0”
radiant_QE4Paint = “1”
radiant_SnapT = “0”
radiant_XZVIS = “0”
radiant_YZVIS = “0”
radiant_ZVIS = “1”
radiant_SizePainting = “0”
radiant_WideToolBar = “1”
radiant_NoClamp = “0”
radiant_Rotation = “45”
radiant_HiColorTextures = “1”
radiant_ChaseMouse = “1”
radiant_EntityShow = “0”
radiant_TextureScale = “50”
radiant_TextureScrollbar = “1”
radiant_UseDisplayLists = “1”
radiant_SwitchClipKey = “1”
radiant_SelectWholeEntitiesKey = “1”
radiant_TextureQuality = “6”
radiant_UseGLLighting = “0”
radiant_LoadShaders = “2”
radiant_NoStipple = “1”
radiant_UndoLevels = “63”
radiant_RadiantMapPath = “”
radiant_ModelPath = “”
radiant_NewMapFormat = “1”

—————————————————

В cfg файла задаваме параметрите, които ни интересуват със seta и командата, например r_renderer добива вида seta r_renderer “стойност”. Може да слагате коментари или да спирате включването на дадена команда с поставянето на “//” пред командата
или коментара, например:

seta r_renderer “nvoglnt” //stoinosti “nvoglnt”
или “opengl32”

Това ще изпълни командата, коментара си е за ваше улеснение.

//seta r_renderer “nvoglnt” //stoinosti “nvoglnt” или “opengl32”

Така командата не се изпълнява.
За пускане на конзолата в играта е нужно да натиснете “Ctrl+Alt+~”, но за по-лесно в autoexec.cfg може да добавите следните редове:

bind “~” “toggleconsole”
seta com_allowConsole “1”

Така конзолата се пуска само с натискане на “~”.
Тестовете за анизотропна филтрация са повечко на брой, така че за улеснение съм променял нивото директно в играта:

bind “;” “toggle image_anisotropy 0 2 4 8”

Има разминаване между резултатите преди и след промяна с клавиш от клавиатурата, не ми е известно защо – след натискане на “;” при едно и също ниво на анизотропна филтрация броят кадри пада с 3~5 кадъра/сек спрямо FPS при задаване в autoexec.cfg и влизане в играта. Все пак за тестовете това нямаше значение, тъй като кадрите
падат пропорционално на общия брой кадри, съответно показанията пак са верни. Така съм променял нивото на анизотропна филтрация САМО в тестовете за нейното качество и брой кадри, не и в тези за Antialiasing и разделителни способности.

За да махнете филмчето в началото изберете Properties на шорткъта към Doom3.exe и добавете ” +Disconnect” в полето Target (т.е. редът Target трябва да придобие следния вид – “___\Doom 3\Doom3.exe” +Disconnect, където ___ е мястото на инсталацията на играта. ” +Disconnect” се добавя след кавичките.

Засега autoexec.cfg съдържа следното (бутоните копирате от DoomConfig.cfg): //Custom.cfg

unbindall
bind “~” “toggleconsole”
bind “ENTER” “_button2”
bind “ESCAPE” “togglemenu”
bind “;” “toggle image_anisotropy 0 2 4 8”
bind “/” “_impulse14”
bind “0” “_impulse10”
bind “1” “_impulse0”
bind “2” “_impulse1”
bind “3” “_impulse2”
bind “4” “_impulse3”
bind “5” “_impulse4”
bind “6” “_impulse5”
bind “7” “_impulse6”
bind “8” “_impulse7”
bind “9” “_impulse8”
bind “[” “_impulse15”
bind “]” “_impulse14”
bind “a” “_moveleft”
bind “c” “_movedown”
bind “d” “_moveright”
bind “f” “_impulse11”
bind “q” “_impulse9”
bind “r” “_impulse13”
bind “s” “_back”
bind “t” “clientMessageMode”
bind “w” “_forward”
bind “y” “clientMessageMode 1”
bind “BACKSPACE” “clientDropWeapon”
bind “PAUSE” “pause”
bind “UPARROW” “_forward”
bind “DOWNARROW” “_back”
bind “LEFTARROW” “_moveLeft”
bind “RIGHTARROW” “_moveRight”
bind “ALT” “_strafe”
bind “CTRL” “_speed”
bind “SHIFT” “_impulse13”
bind “DEL” “_moveDown”
bind “PGDN” “_zoom”
bind “END” “_impulse19”
bind “F1” “_impulse28”
bind “F2” “_impulse29”
bind “F3” “_impulse17”
bind “F5” “savegame quick”
bind “F6” “_impulse20”
bind “F7” “_impulse22”
bind “F9” “loadgame quick”
bind “F12” “screenshot”
bind “KP_END” “_impulse11”
bind “KP_INS” “_moveUp”
bind “KP_DEL” “clientDropWeapon”
bind “MOUSE1” “_attack”
bind “MWHEELDOWN” “_impulse14”
bind “MWHEELUP” “_impulse15”
seta com_allowConsole “1”

Естествено, може да си назначавате бутони по свой избор. Копирам и останалите команди преди тези, започващи с “r_”, макар това да не е наложително – иначе ще се заредят от DoomConfig.cfg.
Следват параметрите, в които съм внасял или съм опитвал да внасям промени. Някои от тях (удебелените) са придружени от екрани, където може да направите сравнение “преди и след”, а някои имат обяснителни коментари. Стойностите са тези, които съм задал, а не тези по подразбиране (за не говоря, че не разполагам с всички по подразбиране защото взех готова инсталация на играта :)). Първоначалният брой кадри в дадената сцена (без да движа героя) бе около 19FPS при 4хАА и 8xAF.

seta g_fov “90”

По подразбиране стойността е 90 градуса. Това е настройката Field Of View и промяната и в посока по-голямо число би донесла вероятно по-висока производителност ако мога да вярвам на резултатите от FarCry (тук дори не си правих труда да проверя). За разлика от FarCry обаче Doom3 се играе в затворени порстранства и всичко над 90 градуса причинява FishEye ефект и се разтеглят ъглине на изображението. Може ад се променя в движение, така че го опитайте за себе си.

seta r_glDriver “nvoglnt”
seta r_renderer “nv30”
//best, arb, arb2, cg, exp,
nv10, nv20, nv25, nv30, r200

seta r_cgFragmentProfile “best”
seta r_cgVertexProfile “best”

Както споменах, промените тук нито са задължителни, нито водят до подобрение или влошаване на производителността.

seta r_forceLoadImages “0”
seta r_shadows “1”
seta r_skipBump “0”
seta r_skipSpecular “0”
seta r_skipNewAmbient “0”

seta r_brightness “1.4”
seta r_gamma “1.5”
seta r_LightScale “2”

Настройките на гамата и яркостта, при които играя играта. В допълнение може да използвате r_LightScale със стойности 1, 2, 3, 4 и т.н. На петте екрана по-долу са стойности от 1 до 5. Играта по подразбиране пуска стойност 2, според мен също това е най-подходящата, но ако прецените може да ползвате и 3.

seta r_swapInterval “0”

seta r_safemode “0”

seta r_useIndexBuffers “1”

seta r_fullscreen “1”

seta r_mode “5”

r_mode има стойности, от които зависи разделителната способност.
4=800×600, 5=1024×768, 6=1152×864, 7=1280×1024.
seta r_multiSamples “0”

r_multiSamples задава заглаждането на ръбовете, 0 е изключено (съответно 2=2x, 4=4x), но с конфигурационния файл, получен след описаните дотук и по нататък действие без АА не може да се играе, вероятно някоя от опциите за Culling е причината. Antialiasing може да се задава и от драйвера, разбира се, но аз предпочитам да ползвам
RivaTuner, тъй като достъпните оттам режими са повече.

seta r_useStateCaching “1”
seta r_usePortals “1”

seta r_useVertexBuffers “1”
seta r_vertexBufferMegs “128”

След включването на тази опция имаше промяна в броя кадри. Опитах стойности 64, 128 и 256 за r_vertexBufferMegs без това да доведе до някаква промяна.

seta r_orderIndexes “1”

seta r_useCulling “2”

Възможните стойности са 0, 1 и 2. Двата екрана са съответно от “1” и “2”.

seta r_useShadowCulling “1”

seta r_useLightCulling “1”

seta r_useCachedDynamicModels “1”

seta r_useTurboShadows “1”

seta r_usetwoSidedStencil “1”

seta r_useShadowVertexProgram “1”


seta r_ext_vertex_array_range “1”

seta r_colorbits “32”

seta r_depthbits “24”

seta r_stencilbits “8”

Не е ясно какво става ако зададете съответно стойности 32 и 0 на опциите по-горе. Бих казал резултат няма :).
seta r_varmegs “256”

seta r_mergeShadows “1”

seta r_useOptimizedShadows “1”

Задължително трябва да има стойност “1” ако искате
да виждате реалистични сенки. Иначе се махат много от тях за сметка
на общата осветеност, на теория би трябвало изключването й да повишава
производителността, но не съм си правил опити. Какво ще е Doom3
без сенки?

seta image_maxPreload “1”

seta image_downSizeLimit “512”

seta image_ignoreHighQuality “0”

seta image_downSizeBumpLimit “512”

seta image_downSizeSpecularLimit “128”

seta image_downSizeBump “0”

seta image_downSizeSpecular “0”

seta image_forceDownSize “0”

seta image_downSize “0”

За да са активни по-горните трябва да е пусната
image_downSize
(т.е. стойност “1”) или image_forceDownSize.
По подразбиране стойностите на image_downSizeLimit, image_downSizeBumpLimit
и image_downSizeSpecularLimit са съответно 256/256/64
и при пускане на image_downSize, image_downSizeBump
и image_downSizeSpecular има ефект, който може да видите
на първият от трите екрана по-долу(влошаване ан качеството на текстурите).
Втория и третия екран са съответно при стойности 512/512/128 и 1024/1024/256.

seta image_useCache “1”

seta image_cacheMegs “256”

seta image_cacheMinK “4096”

По подразбиране стойностите на трите команди горе са съответно 0, 20 и по спомени – 2048 – всъщност при “0” за image_useCache останалите нямат значение. Според не един източник в интернет това водело до “голямо” подобрение. В каква насока така и не разбрах, при всички режими, включвщи antialiasing и/или анизотропна
филтрация ефект от промяната няма нито в моя тест, нито във вграденото демо (за второто не съм се напъвал особено, както вече споделих). Държа ги на 1/256/4096 от чиста проба куртоазия :).
seta image_usePrecompressedTextures “1”

Според повечето ръководства за настройка на Doom3 тази настройка променяла незначително качеството, но вдигала значително броя кадри. Според мен, а вероятно и според вас, наред със следващите команди това е един от основните виновници за лошото качество на текстурите. За голямо съжаление, докато можах да прежаля производителността, която добави включването на следващите опции за сметка на повишеното качество на изображението, ми се наложи да се примиря с image_usePrecompressedTextures “1” тъй като предлага немалка положителна разлика в броя кадри в секунда, а наистина не се забелязва…чак толкова.

“1”

“0”

“1”

“0”

seta image_useNormalCompression “0”

Стоности 0, 1 и 2. След като видите следващите два екрана не се съмнявам, че ще ползвате “0”.

seta image_useAllFormats “1”

seta image_useCompression “0”

И това ще го оставите на “0”, убеден съм :).

seta image_compressBump “0”

seta image_compressSpecular “0”

seta image_compressDiffuse “0”

Нито една от тези опции не води до повишаване на производителността (броят кадри не се променя при включването им), а при положение, че не я променят няма причина се ползват.

seta image_roundDown “1”

seta image_lodbias “0”

seta image_anisotropy “4”

seta image_filter “GL_LINEAR_MIPMAP_LINEAR”

LOD Bias може да се променя, в положителна посока ще донесе влошаване на изображението за сметка на някакъв прираст в производителността, в отрицателна колкото ще подобри, толкова и ще влоши текстурите в далечината. Анизотропната филтрация се задава с image_anisotropy и има стойности 0, 2, 4 и 8. По-долу съм разгледал по-подробно както производителността, така и измененията в изображението при включване на различни оптимизации.

seta cm_backFaceCull “1”

Няма забележим ефект при ползване, въпреки мнението на някои колеги за повишаване на FPS.

seta com_showFPS “1”

Тази команда е за показване на FPS вътре в играта. Полезно, поне ако тествате ;).

seta comVideoRAM “128”

По подразбиране има стойност “64”. Направете я на колкото памет има видеокартата ви, макар това да не се отразява на производителността.

seta com_purgeAll “0”

seta com_machineSpec “3”

seta execMachineSpec

В крайна сметка трябва да получите това :):

Тестове:

Следващите екрани и графика са от теста за анизотропна филтрация с включени различни оптимизации (изброените по-рано). Отново ще припомня, че реално кадрите са мало повече, но след “гореща замяна” на нивото на AF падат. Реалните са в теста за заглаждане на ръбовете. Все пак става видимо, че оптимизациите съвсем не толкова развалят качеството на картината. Следващия път, когато ми заговорят за невероятно лошото качество поради оптимизирането на анизотропната филтрация вече бих се засмял – за сведение неоптимизираната 8 level
AF не изглежда по-добре от максимално оптимизираната, а разликата в средния брой кадри е малко над 30% в полза на втория вариант. Лично аз бих се спрял или на него, или на оптимизиран 4 level, който увеличава  разликата до 50% спрямо чист 8 level AF а качеството е сравнително добро (забелязва се разликата между 4 и 8 level, не се лъжете). Тестът е правен при 4x Antialiasing.

2xAF, HQ, not optimized

2xAF, Q, On-On-On, TLFOpt. Off

2xAF, Q, On-On-On, MaxTLF

2xAF, Q, On-On-On, MidTLF

2xAF, Q, On-On-On, MinTLF

4xAF, HQ, not optimized

4xAF, Q, On-On-On, TLFOpt. Off

4xAF, Q, On-On-On, MaxTLF

4xAF, Q, On-On-On, MidTLF

4xAF, Q, On-On-On, MinTLF

8xAF, HQ, not optimized

8xAF, Q, On-On-On, TLFOpt. Off

8xAF, Q, On-On-On, MaxTLF

8xAF, Q, On-On-On, MidTLF

8xAF, Q, On-On-On, MinTLF

HQ, not optimizedHigh Quality, изключени
оптимизации в драйвера (HQ ги изключва и нямате достъп до тях), изключена Override Intelisample trilinear filtering quality control в RivaTuner.

Q, On-On-On, TLFOpt. OffQuality, включени Trilinear optimization, Anisotropic mip filter optimization
и Anisotropic sample optimization оптимизации в драйвера, изключена Override Intelisample trilinear filtering quality control в RivaTuner.

Q, On-On-On, Max/Mid/MinTLFQuality, включени Trilinear optimization, Anisotropic mip filter optimization
и Anisotropic sample optimization оптимизации в драйвера, включена Override Intelisample trilinear filtering quality
control
в RivaTuner

Doom3 не може да се играе без анизотропна филтрация и заглаждане на ръбовете. И двете крадат много  производителност, но за разлика от анизотропната филтрация няма как да се оптимизира antialiasing-a. На следващата графика са резултатите при използване на различни нива на АА, а след това и сравнения между тях от снетите скрийншоти.

Quincunx е по-добър от 2xAA, но причинява леко замазване на текстурите. Замазването невлошава качеството на картината, даже напротив, според мен в някои отношения подобрява (премахва резултатите от компресията на места). От друга страна това се премахва с използване на Texture Sharpening от RivaTuner, като броят кадри остава близо до този на 2xAA, а качеството е по-високо.Все пак ако държите на остротата на текстурите ще трябва да ползвате 2xAA. С малко по-бърза видеокарта (или овърколкната добре) може да използвате 4x режимите, където “най-изгоден” е 4xS – по-високо качество от 4x и същия брой кадри. 6x както може да се убедите не съществува,
а 8x, макар и най-доброто ниво, което съм виждал (наистина изглежда безумно) е твърде, твърде трудоемък за това поколение видеокарти. 4×9-tap причинява замазване на изображението и пак трябва да се прибегне до Texture Sharpening, а резултата вижте сами. Кадрите навсякъде в тази статия са малко тъмни, но в следващите екрани това си личи особено силно (най-вече сега, след като току що излизам от играта). Жълтите тръби при Quincunx
например изглеждат по-лошо отколкото при 2хAA, поне докато не се вгледате, за съжаление не рискувах да ги изсветля така, както са в играта.

2xAA


QuincunxAA


Quincunx + Texture Sharpening


4xAA from driver


4xAA from cfg


4x 9-tap


4x 9-tap+Texture Sharpening


4xS


8xAA

Standart r_ShowTris “1”
noAA
2xAA
2xQ AA
2xQ+TS
4xDriver
4xGame
4x 9-tap
4x 9-tap+TS
4xS AA
6xAA :)
8xAA

Остана само още едно нещо, което да си заслужава промяната – разделителната способност. С FX5900 да играете на 1280×1024 би било опит за самоубийство, освен ако не сте изключили всички ефекти, в който случай наистина бих ви се чудил доста.

При 800×600 броят кадри е повече от два пъти по-висок отколкото при 1280×1024, При 1152×864 все пак (с известни условности) може ад се играе. 1024×768 остава най-добър вариант. Ако сте прегледали всичко дотук вероятно като мен сте стигнали до заключение, че 1024×768, Quincunx Antialiasing и 4 или 8 level оптимизирана анизотропна филтрация са си съвсем в рамките на нормалното за игра – качеството ще отстъпва леко само
по отношение на заглаждането на ръбовете. Толкова от мен… Всъщност съвсем накрая видях още нещо, което бях забравил – не ползвайте g_skipFX – не носи повишена производителност, каквото и да пишат из tweak- uide-овете :).









Коментарите са забранени.