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?
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.
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;
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
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
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!