Kezdőoldal » Számítástechnika » Programozás » Unity kész játék modolása,...

Unity kész játék modolása, dnSpy segítségével, mit tehetek még a grafika abszolút lebutítása, és még több FPS szám elérése érdekében?

Figyelt kérdés

Nem az én játékom, de nagyon felkeltette az érdeklődésem ez a modolás, hogy nagyon gyenge GPU -kra mennyit lehetne lefaragni a vizuális megjelenésből egy adott játékban, de csak úgy, hogy a forráskód áll rendelkezésre, tehát Unity Editor teljes hiányában. Már sikerült elég szép eredményt elérnem, ahol átlagban 30fps -t hozott a kártyám (sima gtx 1650), most átlagban 10-15fps -el is többet ad, gyengén észrevehető vizuális degradációval. Vagyis úgy, hogy a Screen Space Reflection ugyanúgy aktív, meg a cinematikus effektek, mint pl a köd, vagy az objektumok ragyogása. Már sikerült megtalálnom azt is, amivel a textúrák méretét tudom felezni, egészen a végletekig, de most arra gondoltam, ha még lehetne valahogy a poligon számokat is csökkenteni, az lenne az igazi. Utóbbit viszont nem tudom hogy kell, egyáltalán lehet -e már kész játék esetén, ha nem áll rendelkezésre az Unity projekt, vagyis valós időben, de legalább is a scene betöltése előtt a meglévő objektumokat valahogy visszabubítani. Mert a textúra méret felezése vagy negyedelése akkor hasznos, ha valakinek nincs elég GPU memória. A következő beállításokkal szórakoztam eddig, nem tudom pontosan mindegyik jelentését, de ezzel sikerült fps növekedést elérni:


Texture.allowThreadedTextureCreation = true;

Texture.anisotropicFiltering = AnisotropicFiltering.Disable;

Texture.masterTextureLimit = 1;

RenderTexture.active.anisoLevel = 0;

RenderTexture.active.filterMode = FilterMode.Point;

RenderTexture.active.dimension = TextureDimension.Cube;

RenderTexture.active.useDynamicScale = true;

RenderTexture.active.volumeDepth = 0;

RenderTexture.active.width = 8;

RenderTexture.active.height = 8;

OnDemandRendering.renderFrameInterval = 15;

SupportedRenderingFeatures.active.defaultMixedLightingModes = SupportedRenderingFeatures.LightmapMixedBakeModes.None;

SupportedRenderingFeatures.active.editableMaterialRenderQueue = false;

SupportedRenderingFeatures.active.enlighten = false;

SupportedRenderingFeatures.active.lightmapBakeTypes = LightmapBakeType.Baked;

SupportedRenderingFeatures.active.lightmapsModes = LightmapsMode.NonDirectional;

SupportedRenderingFeatures.active.lightProbeProxyVolumes = false;

SupportedRenderingFeatures.active.mixedLightingModes = SupportedRenderingFeatures.LightmapMixedBakeModes.None;

SupportedRenderingFeatures.active.motionVectors = false;

SupportedRenderingFeatures.active.overridesEnvironmentLighting = false;

SupportedRenderingFeatures.active.overridesFog = false;

SupportedRenderingFeatures.active.overridesLODBias = false;

SupportedRenderingFeatures.active.overridesMaximumLODLevel = false;

SupportedRenderingFeatures.active.overridesOtherLightingSettings = false;

SupportedRenderingFeatures.active.receiveShadows = false;

SupportedRenderingFeatures.active.reflectionProbeModes = SupportedRenderingFeatures.ReflectionProbeModes.None;

SupportedRenderingFeatures.active.reflectionProbes = false;

SupportedRenderingFeatures.active.rendererPriority = false;

SupportedRenderingFeatures.active.terrainDetailUnsupported = false;

SupportedRenderingFeatures.active.editableMaterialRenderQueue = false;

RenderSettings.defaultReflectionMode = DefaultReflectionMode.Skybox;

RenderSettings.defaultReflectionResolution = 0;

RenderSettings.reflectionBounces = 0;

RenderSettings.reflectionIntensity = 0f;

QualitySettings.masterTextureLimit = 1;

QualitySettings.antiAliasing = 0;

QualitySettings.anisotropicFiltering = AnisotropicFiltering.Disable;

QualitySettings.maximumLODLevel = 0;

QualitySettings.realtimeReflectionProbes = false;

QualitySettings.pixelLightCount = 0;

QualitySettings.maxQueuedFrames = 0;

QualitySettings.shadowmaskMode = ShadowmaskMode.Shadowmask;

QualitySettings.skinWeights = SkinWeights.TwoBones;

QualitySettings.lodBias = 0f;

QualitySettings.maximumLODLevel = 0;


Ha valaki tud még valami expert trükköt, akár olyat, amihez az Unity beépített moduljait kell átírni, az sem gond, a dnSpy mindent enged. A cél egy teljesen lebutított, de még az eredeti játék hangulatát megőrizni hivatott "potato" grafika lenne.



2022. okt. 28. 19:46
 1/3 A kérdező kommentje:

Ja, ez kimaradt, ez önmagában 50% -al növelte a teljesítményt SSR bekapcsolása mellett:


this.ssrMain.settings.advancedSettings.resolution = ScreenSpaceReflection.SSRResolution.HalfTraceFullResolve;

this.ssrMain.settings.advancedSettings.highQualitySharpReflections = false;

this.ssrMain.settings.advancedSettings.allowBackwardsRays = false;

this.ssrMain.settings.advancedSettings.bilateralUpsample = false;

this.ssrMain.settings.advancedSettings.highlightSuppression = false;

this.ssrMain.settings.advancedSettings.improveCorners = false;

this.ssrMain.settings.advancedSettings.reduceBanding = false;

this.ssrMain.settings.advancedSettings.traceBehindObjects = true;

this.ssrMain.settings.advancedSettings.traceEverywhere = false;

this.ssrMain.settings.advancedSettings.treatBackfaceHitAsMiss = false;

this.ssrMain.settings.advancedSettings.useTemporalConfidence = false;

this.ssrMain.settings.basicSettings.additiveReflection = false;

this.ssrMain.settings.basicSettings.enableHDR = false;

2022. okt. 28. 20:04
 2/3 anonim ***** válasza:

A már elkészült Unity játékok poligonszámának csökkentésére nincsen közvetlen mód, mivel a 3D modellek poligonjai a játék buildjében már előre meghatározottak. Viszont vannak más módszerek, amiket még kipróbálhatsz a teljesítmény növelésére.


LOD Group:

Egyes modellek esetén lehetnek LOD (Level of Detail) változatok, amik alacsonyabb poligonszámú verziók ugyanannak a modellnek. Ezeket többnyire távolabbi objektumoknál használják, hogy kevesebb erőforrást igényeljenek. Mivel nincs hozzáférésed az eredeti Unity projektállományokhoz, próbáld meg keresni, hogy vannak-e LOD Group komponensek az egyes objektumokon, és ha igen, állítsd be a LOD változatokat alacsonyabbra.


Occlusion Culling:

Az Occlusion Culling segítségével a kamera által nem látott objektumokat nem rendereli a játék, így csökkentve a GPU terhelését. Ha a játékban van Occlusion Culling, próbáld meg megtalálni és optimalizálni azt. Ha nincs, próbáld meg implementálni a kódjába.


Voxelization:

A Voxelization egy eljárás, ami a 3D modelleket voxel alapú reprezentációra alakítja, amely gyakran kevesebb poligont használ. Ez a módszer azonban nem túl egyszerű a kész játékokon, és általában az eredeti modellekkel kell elvégezni. Ettől függetlenül érdemes lehet utánajárni, hogy létezik-e olyan megoldás, ami a már kész játékba is implementálható.


Shader optimalizálás:

Az árnyalók (shaderek) a grafikus megjelenítés egyik legfontosabb részei, és a teljesítményre is jelentős hatással vannak. Próbáld meg keresni, hogy a játék melyik árnyalóit használja, és optimalizáld őket a teljesítmény növelése érdekében.


Más komponensek kikapcsolása:

A Post-processing effektek, mint a Bloom, Depth of Field, Ambient Occlusion, stb., nagy hatással lehetnek a teljesítményre. Ha nem történt meg eddig, próbáld meg őket kikapcsolni vagy legalább csökkenteni a hatásukat.


Végül pedig, ha ezek a módszerek nem vezetnek jelentős teljesítménynövekedéshez, akkor lehet, hogy már a lehető legtöbb

2023. márc. 26. 12:11
Hasznos számodra ez a válasz?
 3/3 A kérdező kommentje:
Ez tutira ChatGPT -s válasz. :D Amúgy azóta sikerült elég szép eredményeket elérnem, de sajnos a ChatGPT aligha segített ebben. Azt kell mondjam, hogy a játékfejlesztők munkáját nem fogja elvenni egyhamar. Ha konkrét, nagyon célzott, specifikus kérdéseket teszek fel, mondjuk olyat, ami inkább száraz matek (ami nekem nagyon rosszul megy), talán abban tud segíteni legtöbbet, feltéve ha érti, hogy mit akarok.
2023. ápr. 2. 02:55

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!