Trending Games | ArcheAge | WildStar | Elder Scrolls Online | Star Wars: The Old Republic

  Network:  FPSguru RTSguru
Login:  Password:   Remember?  
Show Quick Gamelist Jump to Random Game
Members:2,857,287 Users Online:0
Games:742  Posts:6,242,895
Recent forum postsRSS
Active threads
Cloud view
List all forums
General Forums
Developers Corner General Discussion
Popular Game Forums
Click a status to find game forum
Game Forums
Click a letter to find game forum
A-C
2029 Online 2112: Revolution 2Moons 4Story 8BitMMO 9 Dragons A Mystical Land A Tale in the Desert III A3 ACE Online ARGO Online Aberoth Absolute Force Online Absolute Terror Achaea Adellion Aerrevan Aetolia, the Midnight Age Age of Armor Age of Conan Age of Empires Online Age of Mourning Age of Wulin Age of Wushu Aida Arenas Aika Aion Albion Online Alganon All Points Bulletin (APB) Allods Online Altis Gates Amazing World Anarchy Online Ancients of Fasaria Andromeda 5 Angels Online Angry Birds Epic Anime Trumps Anmynor Anno Online Applo Arcane Hearts Arcane Legends ArchLord ArcheAge Archeblade Archlord X Ascend: Hand of Kul Asda 2 Asda Story Ashen Empires Asheron's Call Asheron's Call 2 Astera Online Astonia III Astro Empires Astro Lords: Oort CLoud Asura Force Atlantica Online Atriarch Aura Kingdom Aurora Blade Auto Assault Avatar Star Battle Dawn Battle Dawn Galaxies Battle for Graxia Battle of 3 Kingdoms Battle of the Immortals Battlecruiser Online Battlestar Galactica Online Battlestar Reloaded Beyond Protocol Black Aftermath Black Desert Black Gold Black Prophecy Black Prophecy Tactics: Nexus Conflict Blacklight Retribution Blade & Soul Blade Hunter Blade Wars Blazing Throne Bless Blitz 1941 Blood and Jade Bloodlines Champions Boot Hill Heroes Borderlands 2 Borderlands: The Pre-Sequel Bound by Flame Bounty Bay Online Brain Storm Bravada Bravely Default Bravely Second Brawl Busters. Brick-Force Bright Shadow Bullet Run Business Tycoon Online CTRacer Cabal Online Caesary Call of Camelot Call of Gods Call of Thrones Camelot Unchained Canaan Online Cardmon Hero Cartoon Universe CasinoRPG Cast & Conquer Castle Empire Castlot Celtic Heroes Champions Online Champions of Regnum Chaos Online Child of Light Chrono Tales Citadel of Sorcery CitiesXL Citizen Zero City of Decay City of Heroes City of Steam City of Transformers City of Villains Civilization Online Clan Lord Clash of Clans Cloud Nine Club Penguin Colony of War Command & Conquer: Tiberium Alliances Company of Heroes Online Conquer Online Conquer Online 3 Continent of the Ninth (C9) Core Blaze Core Exiles Corum Online Craft of Gods Crimecraft Crimelife 2 Cronous Crota II Crusaders of Solaris Cultures Online Cyber Monster 2 Céiron Wars
D-F
D&D Online DC Universe DK Online DOTA DOTA 2 DUST 514 DV8: Exile Dalethaan Dance Groove Online Dark Age of Camelot Dark Ages Dark Legends Dark Orbit Dark Relic: Prelude Dark Solstice Dark and Light DarkEden Online DarkSpace Darkblood Online Darkest Dungeon Darkfall Darkfall: Unholy Wars Darkwind: War on Wheels Das Tal Dawn of Fantasy Dawntide DayZ Dead Earth Dead Frontier Dead Island Dead Island 2 Dead Island: Riptide Deco Online Deepworld Defiance Deicide Online Dekaron Demons at the Horizon Desert Operations Destiny Diablo 3 Diamonin Digimon Battle Dino Storm Disciple Divergence Divina Divine Souls Divinity: Original Sin Dofus Dominus Online Dragon Age: Inquisition Dragon Ball Online Dragon Born Online Dragon Crusade Dragon Empires Dragon Eternity Dragon Nest Dragon Oath Dragon Pals Dragon Raja Dragon's Call Dragon's Call II Dragon's Prophet DragonSky DragonSoul Dragona Dragonica Dragons and Titans Drakengard 3 Dream of Mirror Online Dreamland Online Dreamlords: The Reawakening Drift City Duels Dungeon Blitz Dungeon Fighter Online Dungeon Overlord Dungeon Party Dungeon Rampage Dungeon Runners Dungeon of the Endless Dynastica Dynasty Warriors Online Dynasty of the Magi EIN (Epicus Incognitus) EVE Online Earth Eternal Earth and Beyond Earthrise Eclipse War Ecol Tactics Online Eden Eternal Edge of Space Einherjar - The Viking's Blood Elder Scrolls Online Eldevin Elf Online Elite: Dangerous Embers of Caerus Emil Chronicle Online Empire Empire & State Empire Craft Empire Universe 3 EmpireQuest Empires of Galldon End of Nations Endless Ages Endless Blue Moon Online Endless Online Entropia Universe EpicDuel Erebus: Travia Reborn Eredan Eternal Blade Eternal Lands Eternal Saga Ether Fields Ether Saga Online Eudemons Online EuroGangster EverEmber Online EverQuest Next EverQuest Online Adventures Evernight Everquest Everquest II Evony Exarch Exorace F.E.A.R. Online Face of Mankind Fairyland Online Fall of Rome Fallen Earth Fallen Sword Fallout Online Family Guy Online Fantage Fantasy Earth Zero Fantasy Realm Online Fantasy Tales Online Fantasy Worlds: Rhynn Faunasphere Faxion Online Fearless Fantasy Ferentus Ferion Fiesta Online Final Fantasy Type-0 HD Final Fantasy XI Final Fantasy XIV Final Fantasy XIV: A Realm Reborn Firefall Fists of Fu Florensia Flyff Football Manager Live Football Superstars Force of Arms Forge Forsaken World Fortnite Fortuna Forum for Discussion of Everlight Freaky Creatures Free Realms Freesky Online Freeworld Fung Wan Online Furcadia Fury Fusion Fall
G-L
GalaXseeds Galactic Command Online Game of Thrones: Seven Kingdoms Gameglobe Gate To Heavens Gates of Andaron Gatheryn Gauntlet Gekkeiju Online Ghost Online Ghost Recon Online Gladiatus Glitch Global Agenda Global Soccer Gloria Victis Glory of Gods GoGoRacer Goal Line Blitz Gods and Heroes GodsWar Online Golemizer Golf Star GoonZu Online Graal Kingdoms Granado Espada Online Grand Chase Grand Fantasia Grepolis Grimlands Guild Wars Guild Wars 2 Guild Wars Factions Guild Wars Nightfall H1Z1 Habbo Hotel Hailan Rising HaloSphere2 Haven & Hearth Hawken Heart Forth Alicia Hearthstone: Heroes of Warcraft Helbreath Hellgate Hellgate: London Hello Kitty Online Hero Online Hero Zero Hero's Journey Hero: 108 Online HeroSmash Heroes & Generals Heroes & Legends: Conquerors of Kolhar Heroes in the Sky Heroes of Bestia Heroes of Gaia Heroes of Might and Magic Online Heroes of Thessalonica Heroes of Three Kingdoms Heroes of the Storm Hex Holic Online Hostile Space Hunter Blade Huxley Icewind Dale: Enhanced Edition Illutia Illyriad Immortals USA Imperator Imperian Inferno Legend Infestation: Survivor Stories Infinite Crisis Infinity Infinity Iris Online Iron Grip: Marauders Irth Worlds Island Forge Islands of War Istaria: Chronicles of the Gifted Jade Dynasty Jagged Alliance Online Juggernaut Jumpgate Jumpgate Evolution KAL Online Kakele Online Kaos War Karos Online Kartuga Kicks Online King of Kings 3 Kingdom Heroes Kingdom Under Fire II Kingdom of Drakkar Kingory Kings and Legends Kings of the Realm KingsRoad Kitsu Saga Kiwarriors Knight Age Knight Online Knights of Dream City Kothuria Kung Foo! Kunlun Online Kyn L.A.W. LEGO Universe La Tale Land of Chaos Online Landmark Lands of Hope: Phoenix Edition LastChaos League of Angels League of Legends - Clash of Fates Legend of Edda: Vengeance Legend of Golden Plume Legend of Katha Legend of Mir 2 Legend of Mir 3 Legendary Champions Lego Minifigures Online Lichdom: Battlemage Life is Feudal Light of Nova Lime Odyssey Line of Defense Lineage Lineage Eternal: Twilight Resistance Lineage II Linkrealms Loong Online Lord of the Rings Online Lords Online Lords of the Fallen Lost Saga Lucent Heart Lunia Lusternia: Age of Ascension Luvinia World
M-Q
MU Online Mabinogi Maestia: Rise of Keledus MagiKnights Magic Barrage Magic World Online Manga Fighter MapleStory Martial Heroes Marvel Heroes Marvel Super Hero Squad Online Marvel: Avengers Alliance MechWarrior Online Megaten Meridian 59 : Evolution Merlin MetalMercs Metaplace Metin 2 MicroVolts Middle-earth: Shadow of Mordor Midkemia Online Might & Magic Heroes: Kingdoms MilMo Minecraft Mini Fighter Minions of Mirth Ministry of War Monato Esprit Monkey King Online Monkey Quest Monster & Me Monster Madness Online MonsterMMORPG Moonlight Online: Tales of Eternal Blood Moonrise Mordavia Mortal Online Mourning My Lands Myst Online: URU Live Myth Angels Online Myth War Myth War 2 Mytheon Mythic Saga Mythos N.E.O Online NIDA Online Nadirim Naviage: The Power of Capital Navy Field Need for Speed World Nemexia Neo's Land NeoSteam Neocron Nether Neverwinter Nexus: The Kingdom Of The Winds NinjaTrick NosTale Novus Aeterno Oberin Odin Quest Odyssey RPG Ogre Island Omerta 3 Online Boxing Manager Onverse Order & Chaos Online Order of Magic Original Blood Origins Return Origins of Malu Orion's Belt Otherland Forums OverSoul Overkings Oz Online Oz World Pandora Saga Pantheon: Rise of the Fallen Panzar Parabellum Parallel Kingdom Parfait Station Path of Exile Pathfinder Online Perfect World Perpetuum Online Persona V Phantasy Star Online 2 Phantasy Star Universe Phoenix Dynasty Online Phylon Pi Story Picaroon Pirate Galaxy Pirate Storm Pirate101 PirateKing Online Pirates of the Burning Sea Pirates of the Caribbean Online Pixie Hollow Planeshift Planet Arkadia Planet Calypso PlanetSide 2 Planetside Planets³ Playboy Manager Pocket Legends Pockie Ninja Pockie Pirates Pockie Saints PoxNora Prime World Prime: Battle for Dominus Priston Tale Priston Tale II Prius Online Project Blackout Project Powder Project Titan Forums Project Wiki Project Zomboid Puzzle Pirates Quest for Infamy Quickhit Football
R-S
R2 Online RAN Online RF Online ROSE Online Rage of 3 Kingdoms Ragnarok Online Ragnarok Online II RaiderZ Rakion Rappelz RappelzSEA Ravenmarch Realm Fighter Realm of the Mad God Realm of the Titans Realms Online Reclamation Red Stone Red War: Edem's Curse Regnum Online Remnant Knights Renaissance Repulse Requiem: Memento Mori Rift RiotZone Rise Rise of Dragonian Era Rise of Empire Rise of the Tycoon Risen 3: Titan Lords Rising of King Risk Your Life Rivality Rockfree Rohan: Blood Feud Role Play Worlds Roll n Rock Roma Victor Romadoria Rosh Online Roto X Rubies of Eventide Ruin Online Rumble Fighter Runes of Magic Runescape Rust Rusty Hearts Ryzom S4 League SAGA SD Gundam Capsule Fighter Online SMITE SUN Sacred 3 Sagramore Salem SaySayGirls Scarlet Blade Scions of Fate Seal Online: Evolution Second Chance Heroes Second Life Secret of the Solstice Seed Serenia Fantasy Seven Seas Saga Seven Souls Online Sevencore Shadow Realms Shadow of Legend Shadowbane Shadowrun Online Shaiya Shards Online Shattered Galaxy Sho Online Shot Online Shroud of the Avatar SideQuest Siege on Stars Sigonyth: Desert Eternity Silkroad Online Skyblade Skyforge SmashMuck Champions Smoo Online Soldier Front Soul Master Soul Order Online Soul of Guardian Space Heroes Universe Sparta: War of Empires Spellcasters Sphere Spiral Knights Spirit Tales Splash Fighters Squad Wars Star Citizen Star Sonata 2 Star Stable Star Supremacy Star Trek Online Star Trek: Infinite Space Star Wars Galaxies Star Wars: Clone Wars Adventures Star Wars: The Old Republic StarQuest Online Stargate Worlds Starlight Story Starpires State of Decay SteelWar Online Stone Age 2 Stormfall: Age of War Storybricks Stronghold Kingdoms Styx: Master of Shadows Sudden Attack Supremacy 1914 Supreme Destiny Sword Girls Sword of Destiny: Rise of Aions SwordX Swords of Heavens Swordsman
T-Z
TERA TS Online Tabula Rasa Tactica Online Tales Runner Tales of Fantasy Tales of Pirates Tales of Pirates II Tales of Solaris Talisman Online Tamer Saga Tank Ace Tantra Online Tatsumaki: Land at War Terra Militaris TerraWorld Online Thang Online The 4th Coming The Agency The Aurora World The Banner Saga The Black Watchmen The Chronicle The Chronicles of Spellborn The Crew The Division The Hammers End The Incredible Adventures of Van Helsing The Incredible Adventures of Van Helsing 2 The Legend of Ares The Lost Titans The Matrix Online The Mighty Quest for Epic Loot The Missing Ink The Mummy Online The Myth of Soma The Pride of Taern The Realm Online The Repopulation The Secret World The Sims Online The Strategems The West The Witcher 3: Wild Hunt Theralon There Therian Saga Thrones of Chaos Tibia Tibia Micro Edition Tiger Knight Titan Siege Titans of Time Toontown Online Top Speed Topia Online Torchlight Total Domination Transformers Universe Transistor Transverse Traveller AR Travia Online Travian Trials of Ascension Tribal Hero Tribal Wars Tribes Universe Trickster Online Trove Troy Online True Fantasy Live Online Turf Battles Twelve Sky Twelve Sky 2 Twilight War Tynon U.B. Funkeys UFO Online URDEAD Online Ultima Forever: Quest for the Avatar Ultima Online Ultima X: Odyssey Ultimate Naruto Ultimate Soccer Boss Uncharted Waters Online Undercover 2: Merc Wars Underlight Unification Wars Universe Online Utopia Valkyrie Sky Vampire Lord Online Vanguard: Saga of Heroes Vanquish Space Vector City Racers Vendetta Online Victory - Age of Racing Vindictus Virtonomics Vis Gladius Visions of Zosimos VoidExpanse Voyage Century Online W.E.L.L. Online WAR (Warhammer Online) WAR2 Glory WYD Global Wakfu War Thunder War of 2012 War of Angels War of Legends War of Mercenaries War of Thrones War of the Immortals WarFlow Waren Story Wargame1942 Warhammer 40,000: Eternal Crusade Warhammer 40K: Dark Millennium Online Warhammer Online: Wrath of Heroes Warkeepers Warrior Epic Wartune Wasteland 2 WebLords Wild West Online WildStar Wind of Luck WindSlayer 2 Wings of Destiny Wish Wizard101 Wizardry Online Wizards and Champions Wonder King Wonderland Online World Golf Tour World of Battles World of Darkness World of Heroes World of Kung Fu World of Pirates World of Speed World of Tanks World of Tanks Generals World of Warcraft World of Warplanes World of Warships World of the Living Dead WorldAlpha Wurm Online Xenoblade Chronicles: X Xenocell Xiah Xsyon Xulu YS Online Yitien ZU Online Zentia Zero Online Zero Online: The Andromeda Crisis Zodiac Online Zombies Ate My Pizza eRepublik

MMORPG.com Discussion Forums

Guild Wars 2

Guild Wars 2 

General Discussion  » The culling bugs are worse than you think--and unlikely to ever receive anything more than a half-baked partial fix

6 Pages 1 2 3 4 5 6 » Search
114 posts found
  Quizzical

Guide

Joined: 12/11/08
Posts: 13395

 
OP  2/17/13 6:46:50 PM#1

When people first talked about "the culling bug", there were a bunch of different things that I thought could plausibly cause it.  Having played the game for a while, the source is nearly "all of the above".  It's not a single bug.  It's a bunch of different bugs that all lead to the same intuitive final effect:  something that should be visible on the screen isn't.  Let's break it down, starting with the best news and moving to the worst.

The one cause that I thought was possible that doesn't seem to be a problem is delays in loading data.  I have an SSD (OCZ Agility), so I can't tell if the code to load new textures or vertex data is efficient or not; a good SSD can make even rather bad code look good.  But all of the instances of improper culling that I've found either corrected themselves very quickly or could be conclusively shown that "waiting to load data client-side" was not the problem.  So let's call loading stuff from the hard drive "not a bug".

Next we have bad network code.  Some things in the game world change, so the client doesn't know when and where to draw players, NPCs, and mobs, among other things, until the server tells it where.  For bandwidth reasons, the server can't tell a given client more than a tiny fraction of what is going on in the game world.  But that's fine, as you don't need to know what is happening on the other side of the map.

The problem comes if the server mistakenly neglects to tell the player about something that is near enough that it should be drawn.  If the server mistakenly neglects to tell the client that there is a mob in the area, then the client doesn't draw it.  If the mob is attacking the player, however, the damage will still register.  That's a nasty problem.

The good news is that bad network code is fixable.  The bad news is that, just from playing the game, I'm not 100% convinced that bad network code is a problem.  I've seen situations where I was fighting a mob that suddenly vanished, while other players continued to attack it.  The server no longer telling my computer to draw that mob is one possible culprit, but not the only one.  Regardless, ArenaNet has said that network code is a problem that leads to at least one culling bug, and they're working on fundamentally redoing the network code.  I'll take their word for it.

Now, a fundamentally wrong algorithm is a nasty problem to discover this far after launch.  Typos are easy to fix, but trying to redo an algorithm entirely will probably introduce new bugs, and possibly very nasty ones.  That's fine if alpha testing is a year away; you can fix the bugs as you find them.  It's not fine if the game launched months ago.  That this is the least bad of the culling bugs should indicate that there are some serious problems here.

The problem is that not all of the situations where you might blame network code are actually the fault of network code.  I've seen the game cull my own character in exactly the manner that it culled players or mobs that could plausibly be bad network code.  The client doesn't need the server to tell it where on the screen the player's character is:  it's always in the same place, up to camera zoom perhaps.  The server telling the client that where the player is can affect where the camera is, but not where the player is relative to the camera, apart from how far the player is zoomed out.  If a player's own character is culled, then bad network code is categorically not the problem.  This means that even if ArenaNet fixes the network code perfectly, at least some (and possibly all!) of the culling bugs that one might intuitively think are due to bad network code will still remain.

And yes, it still gets worse.  Next is attempts at declining to draw objects that the client thinks will not appear on the screen.  This might actually account for that last culling bug.

Declining to draw objects that won't appear on the screen is a very important performance optimization that 3D games basically have to do in order to be efficient.  If you can tell that an object definitely won't appear on the screen, then you skip drawing it that frame.  The alternative is to compute the uniforms for the object, pass them to the rendering thread, upload them to the GPU, switch to the appropriate texture and vertex data, send the appropriate drawing command, process the data in the first few stages of the rendering pipeline (incidentally, as a DirectX 9.0c game, Guild Wars 2 necessarily skips 4 of the first 5 stages), destroy every single primitive in either back face culling, clipping, or fragment tests, and then not make any changes whatsoever to the framebuffer.  If you can tell that in the end, it's not going to change the framebuffer or depth buffer, then a few quick CPU-side instructions to verify that and skip the rest of those steps is far more efficient.  Since most of the objects near enough to you to be buffered won't be on the screen at any given time, this can have a big impact on your frame rates.

The problem is if you decline to draw objects that would have appeared.  This happens in a number of places in the game, where you can be facing an object, rotate the camera, and the object suddenly disappears, even though it's far from the edge of the screen.  Rotate the camera back and the object reappears.  It disappears and reappears as you rotate past a certain spot that is well within the screen.  The ideal behavior is that the object would be culled slightly after it goes off of the screen.

Determining absolutely for certain whether an object would appear on the screen is impractically slow to do on the CPU.  But there are some easy tests that you can make.  If you know that all vertices in a model are within a distance d of some particular point, and that particular point is at a distance greater than d from a clipping plane and on the side that will be clipped, then the entire object won't appear.  If the "center" point is a little bit nearer than d to the clipping plane, then the object might appear or it might not, so you have to go ahead and send the rendering commands and let the video card sort it out.

If you're only slightly wrong, this can lead to objects being mostly off of the screen, then suddenly having the last bit vanish abruptly rather than continuing to scroll off.  The third palace boss in Zelda 2 did this, for example.  But Guild Wars 2 commonly culls objects this way that aren't anywhere near the edge of the screen.  Probably the clearest example of this that I've found is the rocks on the ground at the entrance to the cave between Doldenvan Passage and Darkriven Bluffs in Wayfarer Foothills.

This could easily be caused by either a bad function that isn't properly computing whether things are off the screen, or bad model data that claims vertices are close to some particular point even though they aren't.  The good news is that the former would likely be easy to fix.  The bad news is that if it were the former, it's extremely probable that the game would have culling issues at least an order of magnitude worse than they are today.  That means it's not likely to be the former, and rather, there's a lot of bad models in the game.

Why is that bad news, if it's only particular models that are bad?  It's bad because fixing it means you have to go through and check every single model in the entire game to see if it's culled properly for being off of the screen.  That's a massive undertaking.  If ArenaNet didn't do that as they made the models (which is when you should do it), then it's pretty unlikely that they're going to do it now.

And finally, we have the worst news of the bunch, and the one that is extremely unlikely to ever be fixed:  near plane clipping.  The way that 3D graphics is done is that you compute the position of all of the vertices relative to the camera over the course of the first several stages of the rendering pipeline, and then you clip away anything that isn't in a particular frustum, which is basically a pyramid with the top cut off.  Well, technically you convert everything to homogeneous coordinates in real projective space RP^3 and take a box from that and clip everything outside of that box.  But the way that 3D perspective graphics (as opposed to other projections, most notably isometric) is almost invariably done is to compute the coordinates of every vertex, and then multiply by a matrix that converts the frustum you want to the box that the video card will clip.  It's probably more helpful to think of it in terms of a frustum because most computer programmers don't know anything about projective spaces.

Four of the clipping planes correspond to the edges of a rectangular window.  For example, one of the clipping planes tests whether a vertex would be off of the left edge of the game window, so as not to proceed with further computations of data that won't appear on the screen.  These are pretty easy to handle.

The other two clipping planes are the "top" and "bottom" of the frustum, and correspond to the near and far clipping planes.  Anything beyond a particular distance from the camera will be clipped and not drawn.  Anything too near to the camera will also be clipped and not drawn by the near clipping plane.  This is most emphatically not just a case of not drawing things behind the camera.  Up to some minimum positive distance in front of the camera, things that are right in front of the camera won't be drawn.

Whoever makes a game engine can set the near plane clipping distance to whatever he wants.  In order to avoid near plane clipping problems, you'd like to make it as small as possible.  The problem is the way the depth buffer works.  If the near clipping plane is at a distance d from the camera, you use up over 90% of the depth buffer precision for objects less than 10d from the camera.  You use up over 99% of it for objects less than 100d from the camera.

If your far clipping plane is at a distance of 1 km (technically the clipping plane coordinates are unitless, but you probably have some distance scale in mind while writing the program, so let's use units) and the near clipping plane is at a distance of 1 m, you chop off anything within 1 m of the camera.  If you set the near clipping plane distance to 1 mm, then you don't chop much off for being too close, but you do use up over 99.9% of the depth buffer for objects within 1 m of the camera.  For objects far off in the distance, one object could be a full 10 cm in front of another, but they round to the same depth buffer value, so the video card can't tell which is in front.  That will cause graphical artifacting, most likely of the flickering sort, as which object appears in "front" in a given frame depends on which happens to be rendered first that frame.

There are three ways to fix this.  One is to set the depth buffer manually in pixel/fragment shaders to something other than the fixed function depth buffer value.  The problem with this is that it means that you can't use early fragment tests and skip running the pixel shader when you know that an object is behind another object that has already been drawn.  This brings a large performance hit.

The second fix is to not use 3D perspective.  If you use an isometric projection instead, the problem is basically solved.  Of course, many players want a 3D perspective rather than isometric, so for many games, this is a non-starter.

The other approach is to pick an arbitrary distance for the near clipping plane and then set your camera position such that it never, ever gets too close to anything that would be problematic if it gets chopped up by the near clipping plane.  This can be a bit of a pain, but it's doable.  The real problem with it is that you have to have this in mind as you determine where to place the camera for objects that block it as you create every single model in the game that can block the camera.

One might ask, why is the depth buffer done that way if it's such a pain?  The answer is that the formula for the depth buffer was chosen to be something that is fast to compute.  In the early days of 3D graphics, this was a big deal.  A bit of a pain to handle the near clipping plane in exchange for 10% faster frame rates across the board would be well worth it.  (The 10% is a made-up number that would vary by game, but it was substantial as compared to some other possible formulas.)

The problem with the near clipping plane clipping things that you would prefer to draw isn't merely that you lose track of a few things right up against the camera.  It's that, when combined with back face culling, very large objects can disappear.

Many objects are closed surfaces, that is, they don't have a boundary.  For these, some faces will inevitably appear in front of others.  Think of a cube, for example, where it's impossible to see more than three facets at a time from a single viewpoint.  For closed surfaces, you can check to see which faces are in front and which are in back, and not draw the faces in back.  You do this because it's faster to not draw something than it is to do all of the work to draw it, only to have it covered up by something else.  Only having to draw half of the faces is a huge performance optimization.

The problem comes when the front faces that would have appeared on the screen are destroyed by near plane clipping while the back faces are eliminated by back face culling.  In that case, the entire object is invisible.  Guild Wars 2 has a pretty bad case of this.  You can make some entire mountains in Guild Wars 2 completely vanish, thereby allowing you to see what is behind the mountain, even while you're staring right at the mountain.

The fix, as I said above, is to make sure that the appropriate objects block the camera far enough away that they aren't culled by near plane clipping.  For example, if you set a near clipping plane distance of 10 cm, then anything that needs to be drawn must block the camera such that the camera position can never be within 10 cm of the object.

This is a form of collision detection.  You check how far along a particular line from the player the camera can go up to the desired zoom distance before it runs into anything.  You stop when it runs into anything, and that's where the camera will be placed for that frame.

The problem is that collision detection is hard.  Collision detection done properly in 3D is especially hard.  Collision detection done properly in 3D and implemented in a way that it will run fast is harder yet.  And running fast matters, because you can't start computing where everything is relative to the camera in a given frame until you know where the camera is.

Alas, ArenaNet's solution to 3D collision detection being hard was to not implement it at all.  Collision detection in Guild Wars 2 is fundamentally 2D.  It's a height map, where any given point on the ground is assigned a height.  If the slope where you're standing is too steep, you lose your footing and slide down.  The proof of this is that there are many places in the game where there are two discrete objects with one substantially above the other.  If you stand halfway between them, you stand on air at a height between the heights of the surfaces of the two boxes or poles or whatever.  Height maps tend to do that by their very nature, but it takes a severely botched approach to fundamentally 3D collision detection for that to happen more than once in a great while.  (If you want to know how it's possible to have one player standing above another, there are multiple height maps, and the game checks the one that your own height is nearest to.)

The advantage to this is that it's a lot easier to implement than fundamentally 3D collision detection.  The disadvantage is that if your game is fundamentally 3D, it simply doesn't work right.  This is one of the reasons why jumping puzzles are so awkward, for example:  you can't really tell where you can stand and where you can't except by standing there and seeing if you fall.

Height maps are fine for games that are fundamentally 2D.  For example, Guild Wars 1 did the same thing, and it worked fine.  But you can't jump in Guild Wars 1 or fall off of a cliff or whatever, let alone fail a jumping puzzle because you rolled at an inopportune time.  (Yes, I know how to turn off the double-tap to roll option, but enabling it by default was a terrible decision.)  To tell whether two objects collide, it only needed to check their x and y coordinates, and not their height.  Many games that we think of as 3D are fundamentally 2D for collision detection purposes, and it works fine if it's never possible for one object to be above another.

The reason this is so bad is that it means that the near clipping plane glitches are basically unfixable.  Fixing them properly would mean redoing collision detection for the entire game.  That's not just implementing a new algorithm for it.  You'd have to go through every single model that has any sort of collision detection involved--whether players, NPCs, mobs, or terrain--and redo a good chunk of the model.  That's tremendously expensive, and really a non-starter.  But anything short of that will mean that Guild Wars 2 has culling bugs forever.

  Grymmoire

Advanced Member

Joined: 7/01/04
Posts: 35

2/17/13 7:03:04 PM#2

Nicely written explanation and introspection; too bad many may suffer from ADD and thus can only suffer through reading one to two paragraphs on most forums.

Guild Wars' 2 culling issue has nearly driven me away from playing the game, since all my avatars are level 80 and I spend most of my gaming time in WvWvW. Presently, in Tier 3, the huge zergs know they can take advantage of the culling issue(s) and the constant appearance of 30+ atop one is more than a tad annoying. Also helps thieves and d\d elementalist who use ride the lightning; the latter to escape more than they should.

If my computer were mere pittance of an electronical toy, I could at least blame it.; alas neither it nor my internet speed is an issue, so i await AN's "fix(es}" and only time will tell if they will deliver before my patience finally ends.

Btw, just my opinion, but I would have preferred a fixed over the shoulder camera view with a manual zoom function as well as a better field of vision to what AN implemented; the constant zooming in\out especially when one gets tossed into a hill, fence, bridge or other object is downright poor and gives me eye strain and the narrow FOV is just mysteriious to me.

  NaughtyP

Novice Member

Joined: 12/02/11
Posts: 795

2/18/13 1:15:16 AM#3

Maybe you can send this to them lol. Honestly, I'd still be playing the game if they fixed culling. I'm not even sure how people still put up with it, but it's their choice I guess.

Enter a whole new realm of challenge and adventure.

  jpnz

Elite Member

Joined: 6/29/06
Posts: 3563

2/18/13 2:03:45 AM#4

This is something that isn't all that surprising.

The 'culling' has been really badly handled by ANet in terms of communication and this technical reason is why.

ANet really can't admit 'hey we can't fundamentally fix culling'.

But this is just bizzare, ANet committed to the WvWvW / DE with massive amount of players from the very start.

Either there was massive miscalculations at the start or something fell off during development.

Gdemami -
Informing people about your thoughts and impressions is not a review, it's a blog.

  Gaia_Hunter

Elite Member

Joined: 5/04/12
Posts: 2609

2/18/13 2:35:28 AM#5

I wouldn't really call an intended performance optimization a bug.

 

https://forum-en.guildwars2.com/forum/pvp/wuvwuv/Update-on-Culling

As you know we’ve been working on this problem for a while but what I think we haven’t ever said before is that our goal is to remove culling completely from WvW. In order to remove culling completely we have to address three issues:

1) Bandwidth out of our servers/datacenter (traffic would increase without culling)
2) Bandwidth in to each client (traffic to each client would also increase without culling)
3) Client performance issues related to rendering (potentially) all the players on a map at once. (Note that we base our performance requirements in this case on min-spec clients. We don’t want to stop anybody being able to play the game after all.)

Until all three of those issues have been dealt with we can’t turn culling off because doing so would cause something to break or perform poorly.

Ok, now let’s talk about what progress we’ve made!

Issue #1 was the easiest to deal with because we can basically just throw money at the problem. When we first started down the road toward removing culling from WvW I took a bunch of bandwidth measurements and then went to the executives and said, essentially, “Hey, if we disable culling our network traffic will increase by X%. Are we ok with that?”. The answer I got was a clear and unambiguous “yes!” So issue #1 isn’t a problem after all.

Issue #2 is a little harder. We need to ensure that folks with a min-spec network connection won’t be overwhelmed by the data we send them and we obviously can’t just buy a better connection for all of our players. So we put our heads together and came up with a plan to reduce the bandwidth required for WvW (and Gw2 in general) as much as possible. Those changes are in testing now and will be rolled out as soon as we’re convinced that they’re solid. Assuming we’re able to get everything working the way we’d like (and I’m fairly confident that we will) then this will address issue #2.

So that leaves us with issue #3: client performance. Some time ago the WvW team acquired an engine programmer who is focused 100% on this issue (and he is being assisted by another engine programmer who isn’t officially on the WvW team). They’re working on some really fantastic optimizations and engine modifications which we hope will allow even min-spec clients to render all the players on a WvW map. We’ll be talking in more detail about the specific changes they’re making when things get just a little more nailed down, but I can say right now that I’m very impressed with the work they’ve done already.

 

 

https://forum-en.guildwars2.com/forum/pvp/wuvwuv/The-real-problem-here-is-invisible-enemies-Give-their-algorithms-time-to-match-servers-properly/page/4#post356817

This is a multi-faceted issue that involves both reporting from the server to the client and client asset loading. Much like a super villain team-up these two parts of the issue are combining to make an unpleasant situation worse. We’re pursuing both parts of the issue and hope to see incremental improvements as we get fixes in and tested.

The reporting issue is really all about performance tradeoffs. Every decision that the server makes about what to report to which client consumes resources, as does the act of reporting itself. These resources (server CPU, network bandwidth, etc.) are finite and are the same ones that are used by every other aspect of WvW as well. How we make use of those resources determines the number of players we can support in a given map and how smooth the simulation feels. The system that we have in place now constitutes an attempt to strike a balance between a perfect simulation that handles all the details and makes them available to every client immediately and a simulation that supports a reasonably large number of players while maintaining smooth performance under most gameplay situations. This is a true dilemma because we really want to achieve both of those goals completely and simultaneously but that just isn’t possible at the moment.

Could we throw more hardware at the problem? Maybe, but the servers that we’re running on now are Serious Business™ and simply buying faster CPUs likely wouldn’t gain us even a linear increase in performance. With today’s hardware I believe that we’re likely to gain far more improvement from code changes than we would from slightly faster CPUs. As you might imagine the way that we manage client/server communication is pretty well core to the way our game works so making changes to that system is a tricky affair that must be undertaken with great care and much testing. Further, since we can’t really create any more resources (CPU, network) every substantial change involves making a hard decision about performance, scale, and completeness of the various aspects of Gw2. Some of the most robust, correct, and appealing solutions to this issue are also the ones that will take the longest to implement correctly, thus adding response time into the mix of factors we need to consider. In a situation like this, sadly, there are no easy answers. That said, we’re evaluating possible changes to reporting even now and are committed to making WvW into the best experience we can.

The client issue relates to the way that we load assets when preparing to display characters. WvW hits this more than most other parts of the game because players are pretty much the most complicated characters that we have and, especially at higher levels, they tend to be quite varied (so things like texture caching don’t help us as much as they might elsewhere in the game). WvW tends to have much higher player densities than the rest of the game so that’s why we see these issues coming up in WvW more than elsewhere. This asset loading issue will be influenced by client hardware (kind of like saying water is wet, I know) but we see this issue crop up on even high end systems so it’s clear that hardware is not the major determining factor. So, while better hardware may improve the situation a bit it won’t make the client issue go away completely. At this point we have a solid repro of the client issue and we’re aggressively pursuing fixes.

Currently playing: GW2
Cooperative (semi cooperative)board games you should check: Pandemic, Sentinels of the Multiverse, Eldritch Horror, Descent 2.0,Level 7 Omega Protocol, Last Night on Earth

  Jean-Luc_Picard

Elite Member

Joined: 1/10/13
Posts: 2766

There... are... four... lights!

2/18/13 3:23:48 AM#6

You don't need to make the entity clipping full 3D in a game like GW2. The horizontal distance from the camera works just fine. And even a 3D distance calculation between two points is child's play on today's computers, not to mention most games use a cube instead of a sphere for culling distance.

And the fact that entities are visible "too late" (or not at all) has nothing to do with collision detections, you mix up two totally different problems. Collision detection can be done even if the two colliding entities aren't even displayed. Do you really think they make collision detections client side?

Playing now: Archeage, WoW, Landmark, GW2

Top 3 MMORPGs played: UO, AC1 and WoW

Honorable mentions: AO, LotRO and GW2.

"The ability to speak doesn't make you intelligent" - Qui-gon Jinn. After many years of reading Internet forums, there's no doubt that neither does the ability to write.

  jpnz

Elite Member

Joined: 6/29/06
Posts: 3563

2/18/13 3:47:49 AM#7
Originally posted by Gaia_Hunter

I wouldn't really call an intended performance optimization a bug.

/Long post that doesn't actually answer OP's concern nor contradict OP's technical reasons

I am no where near as technically proficient as Quizzical but even I can see that the ANet's post about culling doesn't address OP's concern.

Course we can say 'its not a bug, it is a feature!' but I tend to deal with facts and bugs are bugs. Bad game design is sometimes just that, bad game design.

Gdemami -
Informing people about your thoughts and impressions is not a review, it's a blog.

  Toxia

Apprentice Member

Joined: 7/25/09
Posts: 1298

2/18/13 3:57:37 AM#8

I wont pretend to be techy and understand your long post quiz, but i wanted to throw something in there you might have missed, possibly. You could very well have said it in your post somewhere. It's hard to explain, but i'll give it a shot.

The data on movement of other players seems to be calculated client side. If another player on your screen moves left, the server seems to register that, but lets your client do the 'how much and how far', which, when tinkering with client side data of your OWN character, will apply to theirs. For instance, when using a hack program to make yourself move at 50% increased speed permanently, it will also make OTHER characters on your screen move at that speed as well, causing desyncronization.

What ends up happening, is youll see players falling off cliffs, or running against walls, or jumping when their is no need to. On THEIR screen, they are hopping from rock to rock, whereas on MY screen, they are jumping around in the middle of a field of grass.

So instead of 'X player is at position 123, -123, 321, then 124,-124, 320, then 125, -125. 319' being sent to your client to render, it simply says 'X player is moving left....left...left....up...up....left...jumping...jumping' and it lets your client decide how much and how far that movement is going.

It DOES, however, seem to check both your current position, and the other characters current position( from each their own client) when attacking. So, i could be standing in front of an enemy player, hitting the button to attack, yet it will still register as Miss or Obstructed, as on the other players screen, they are far away or behind a wall.

I think GW2 is a beautiful game, and have found said program to let me reach places i shouldnt to take great screenshots.( For instance, using a Climb hack, i have pictures of my asura sleeping in the Statue of Dwayna's arms, as you cannot normally climb up to get in said arms.) It is not strange to be flying above rata sum, snapping pictures, and see every player on the map zipping around in the sky with me as well.

So, in short, i think it's an error in the way they use clients, instead of sending coordinates to you to render directly, it is sending general movements for your client to decide on its own. I believe this is a BIG source of culling, as you must wait for YOUR computer to 'think' about where players are. As we know, players have vastly different computers and they each have their own limit to what they can 'think' about at once.

Again, i'm not techy, so this might not make a lick of sense. apologies. Hope i added something to your conclusions.

The Deep Web is sca-ry.

  Jean-Luc_Picard

Elite Member

Joined: 1/10/13
Posts: 2766

There... are... four... lights!

2/18/13 4:13:56 AM#9

Sad to read about people who admit having cheated... but whatever. Karma can be nasty when it hits back.

The client has some prediction algorithms, but the only, real, true character position is the one server side. This can result in some difference between what's displayed and the real positions, but it would rather lead the client to "anticipate" the display rather than to delay it (e.g. thinking that a character keeps moving when it has in fact stopped).

The culling problem isn't related to that though. I don't think it's related to anything our so eloquent OP has said either.

Playing now: Archeage, WoW, Landmark, GW2

Top 3 MMORPGs played: UO, AC1 and WoW

Honorable mentions: AO, LotRO and GW2.

"The ability to speak doesn't make you intelligent" - Qui-gon Jinn. After many years of reading Internet forums, there's no doubt that neither does the ability to write.

  Toxia

Apprentice Member

Joined: 7/25/09
Posts: 1298

2/18/13 4:22:16 AM#10
Originally posted by Jean-Luc_Picard

Sad to read about people who admit having cheated... but whatever. Karma can be nasty when it hits back.

The client has some prediction algorithms, but the only, real, true character position is the one server side. This can result in some difference between what's displayed and the real positions, but it would rather lead the client to "anticipate" the display rather than to delay it (e.g. thinking that a character keeps moving when it has in fact stopped).

The culling problem isn't related to that though. I don't think it's related to anything our so eloquent OP has said either.

Nothing I do affects other players, nor can be used to gain me a higher advantage over them. As i said, i's quite hard, if not impossible, to use the program to 'cheat'(as in, fly over WvW and hit people from the sky) since anything i set to my client applies to any characters on my screen as well. So sure, i could run up the side of a cliff and try and hit players, but it simply wont work, as my client will think they are somewhere they never are. I have 436 screenshots of gw2, currently being photoshopped to perfection, simply for my own collection. That is the limit to what anyone can do with it. So if karma's gunna come get me for wanting pretty pictures, god help my soul.

My point, outside of that, was to show that when an enemy zerg is coming for you, your computer is thinking about where they are, how fast they are coming, etc, instead of simply being transferred hard coordinates to.

The Deep Web is sca-ry.

  cura

Advanced Member

Joined: 7/24/04
Posts: 867

2/18/13 4:24:25 AM#11
Originally posted by jpnz

This is something that isn't all that surprising.

The 'culling' has been really badly handled by ANet in terms of communication and this technical reason is why.

ANet really can't admit 'hey we can't fundamentally fix culling'.

But this is just bizzare, ANet committed to the WvWvW / DE with massive amount of players from the very start.

Either there was massive miscalculations at the start or something fell off during development.

I think they are rather saving on bandwidth and infrastructure. Bussiness is bussiness :-/

  Gaia_Hunter

Elite Member

Joined: 5/04/12
Posts: 2609

2/18/13 4:55:44 AM#12
Originally posted by jpnz
Originally posted by Gaia_Hunter

I wouldn't really call an intended performance optimization a bug.

/Long post that doesn't actually answer OP's concern nor contradict OP's technical reasons

I am no where near as technically proficient as Quizzical but even I can see that the ANet's post about culling doesn't address OP's concern.

Course we can say 'its not a bug, it is a feature!' but I tend to deal with facts and bugs are bugs. Bad game design is sometimes just that, bad game design.

Cullinng is best known as hidden surface determination, hidden surface removal, occlusion culling or visible surface determination.

Guild Wars 2 uses the Umbrs Occlusion engine.

No, culling isn't a bug.

And of course there is tons of information directly from Anet for those actually interested in the problem and not on bashing Anet.

 

https://forum-en.guildwars2.com/forum/pvp/wuvwuv/January-WvW-culling-loading-changes/first#post1272774

In the January update we’ll be making a couple of preliminary changes to WvW.
1. The first of our engine changes will be coming on line to help improve character load times by using fallback models.
2. We’ll be switching over to the culling methodology that we trialed in December.

The engine change we’re making uses fallback models to represent characters until their detailed models are fully loaded. The fallback models are cached so that they can display without any asset load delay and there is a distinct fallback model for each race/gender/armor-class combination. As a result of this change players will be able to see characters represented as fallback models as soon as those characters are reported to the client. Once the specific, detailed model for a given character is completely loaded from disk the fallback model will be replaced with the detailed model. This visual compromise will help to ensure that players see other characters as quickly as possible in WvW. Please note that this change does not eliminate delays due to culling, it only addresses delays due to asset load times. Players on higher spec machines would therefore expect to see fallback models less often than players on lower spec machines. This change also lays the groundwork for more extensive uses of fallback models in future updates.

In December we ran a one matchup trial of an updated culling system. Based on all the feedback we received, both during and after the trial, we will be transitioning to the updated culling system that we used in the trial. This update allows the culling system to handle allies and enemies separately so that being surrounded by a group of allies will not impact the culling of enemies (and vice-versa). The general consensus after the trial is that this system lead to a better player experience in WvW. We further saw that some of the issues people had with the new system were related to asset load times rather than culling issues so making this change in combination with our character loading improvements should lead to an improved overall experience. It is important to note, however, that while we believe this change is an improvement to the WvW experience it does not fully address the issues with culling and we are still working towards our goal of removing culling from WvW completely. This change is intended to give players an improved WvW experience while we continue work on our more comprehensive solution.

While this update only contains a couple of visible changes to WvW it lays a lot of important groundwork for future updates. We have some exciting changes coming and this update is just the beginning!

------------------

Krakah, no, the behavior that you’re describing is the server culling which characters get reported to your client. This update doesn’t eliminate that, though it biases the algorithm such that being surrounded by allies won’t cause you to be unable to see any enemies (and vice versa). Disabling culling entirely is something that we’re working on still and this update lays some of the groundwork we need to do that.

--------------------

That capability isn’t part of the January update but in future updates we’ll be using fallback models more extensively to help with performance in high population scenarios. The fallback models are cheaper in a number of ways including poly count, texture size, and animation count & complexity. I don’t think it would be visually satisfying to have nothing but fallback models on the screen but we’re definitely exploring the right balance. You will see these additional changes related to fallback models in the coming months.

------------------

Hi all, I think a little more explanation is in order.

First, let’s call the culling system that we’re switching to “affinity culling” just to make it easier to talk about. Under affinity culling the system handles enemies and allies independently. This means that the maximum number of allies that you can see under affinity culling is 1/2 the maximum number of characters (combined enemy & ally) that you could see under the original culling. Ditto for enemies. In exchange for that cost he benefit that we get is that running with (or through, or past) a large group of allies (e.g. a guild) won’t prevent you from seeing the enemies who are closest to you.

During the initial trial of affinity culling we found that a number of players reported asset loading issues that were highlighted by culling. Any time that your client is aware of another character at all (dot on the map, targetable in world, nameplate is visible, etc.) then culling is no longer a factor because that character has already been reported to your client. In that case if you can’t see the character the issue is one of asset load time. The fallback model feature which is shipping this month directly addresses those issues by providing a cached model to show immediately when the character is reported to the client.

The order of operations looks like this:
1) Character X enters player’s visibility
2)
delay due to the mechanics of culling

3) Server reports character X to client
4)
delay due to asset load time

5) Character X full model is visible on-screen to the player

Using fallback models we end up with this instead
1) Character X enters player’s visibility
2)
delay due to the mechanics of culling                           

3) Server reports character X to client
4a) Character X fallback model is visible on-screen to the player
4b)
delay due to asset load time

5) Character X full model is visible on-screen to the player

As you can see we’ve made the asset load delay unimportant (or at least less important) and allowed the player to be aware of character X sooner (in some cases quite a bit sooner).

The combination of affinity culling and fallback models provides a better experience than affinity culling alone. Even so, the affinity culling is not intended to be our last change to the system, but rather to hold players over until we can make more extensive updates to the system (which take time to implement and test). In future updates we’ll be making changes in an effort to eliminate the delay due to culling (step 2 above) and to tell each client about character X as soon as the server decides they have become visible again. We hope to do this by removing culling completely and preserving client performance though a mix of network and engine optimizations, the more extensive use of fallback models, and sundry wizardry.

As I’ve said in the past our ultimate goal is to remove culling and we’re pushing hard to make that happen. This update represents the first steps in that direction and much of what it accomplishes is to lay the groundwork for our upcoming updates. The next few months are an exciting time for us on the WvW team and we’re very excited about the changes are coming.

--------------------------
Anyone  wanting information on  the causes of the problem and the steps being taken to sort it have from the mouth of the programmers working on it - outside of having the source code itself (which is inconceivable to be shared by Anet) it is the best one can expect.
 
Anet recognizes the problem, communicate with its players.
Now one either believe they can fix the problem or at least minimize it or one doesn't believe it.

I don't see any communication problem or pretending the problem exist.

Currently playing: GW2
Cooperative (semi cooperative)board games you should check: Pandemic, Sentinels of the Multiverse, Eldritch Horror, Descent 2.0,Level 7 Omega Protocol, Last Night on Earth

  jpnz

Elite Member

Joined: 6/29/06
Posts: 3563

2/18/13 6:19:06 AM#13
Originally posted by Gaia_Hunter
 

Cullinng is best known as hidden surface determination, hidden surface removal, occlusion culling or visible surface determination.

Guild Wars 2 uses the Umbrs Occlusion engine.

No, culling isn't a bug.

/More irrelevant posts that doesn't address the issue; near plane clipping.

Notice that ANet keeps on harping about models and how it doesn't render them and how the bandwidth / processing isn't there on the server / client etc etc?

Notice that they don't say that clipping could be why? Notice that they never say it is their 'engine'?

I have some very basic understanding of this but even I can see that they wrote a whole lot of 'stuff' without actually telling us it is their engine that's the problem.

 

Edit 1: if you want to refute Quizzical with technical knowledge go ahead. I'd love to see someone try cause it'll be hilarious.

Gdemami -
Informing people about your thoughts and impressions is not a review, it's a blog.

  Yaos

Novice Member

Joined: 10/12/04
Posts: 154

2/18/13 6:46:45 AM#14
Their culling system attempts to intelligently cull information that is of no use to you, that's pretty much it.
  dimnikar

Novice Member

Joined: 11/06/12
Posts: 277

2/18/13 7:13:22 AM#15

Culling is only buggy when you notice it.

 

If you can't see it working - then it's doing what it's supposed to.

 

 

http://lyrics.iztok.org/verse/Lynyrd_Skynyrd/Simple_Man/80615

  User Deleted
2/18/13 7:16:49 AM#16
Agreed and so is the Loot nerfs/permaDR bug. They've had 4-5 months now to fix those and they still haven't done it yet. Been watching. There's a new forum post about the loot problem and the culling problem daily (and I do include the posts about how thieves need nerfing because they have omgwtfbbqstealth GASP in that count) people keep thinking its the class it's not. The only thing I keep seeing is them saying either the problems don't exist (as they do with the loot, thousands of people's experiences are wrong despite video and screenshot evidence to the contrary you see) or that they are endlessly looking into the problem (like they've done with culling.) Oh well onward to a game title that has better management methinks. So much for GW2.
  kitarad

Hard Core Member

Joined: 12/17/10
Posts: 1276

2/18/13 7:18:28 AM#17
My goodness Quizz that was amazing. You explained things very well even for a dumbo like me. You are the man I really take my hat off ,you're very knowledgable and the best thing about you is that you can explain things so very well. I cannot say how many times I myself encounterd this but lot of times I just put it down as a glitch and just moved on but now that you have explained I have began examing my experience in other games and realised that this  was not like that in them. Well just have to put it down as budget concerns with their model since it was b2p they had to keep costs down or make even less.

  Volmok

Advanced Member

Joined: 6/22/12
Posts: 63

2/18/13 7:52:04 AM#18

I had a blast reading this post. It reminded me of my 3D computing courses and exams at Computer Science :D

I always kept thingking about GW2 culling issues and always said that it could not be just the computing of objects and trimming out what is not supposed to be rendered; being a developer (not 3d rendering, but server developer) I see very often the impact of poor server code on client machines.

If I were to guess what is the issue with the "culling bug" I'd say that the server code on ANet servers that deals with the player's positioning in the world is badly written and the client side computation is rather OK; I base my assumption on the fact that when the groups that fight is small the game seems to handle things well, but when one of the group has a size of 30+ things start behaving strange:

- I fight an emeny in melee range and suddenly it dissapears and 10 enemies apear at 1500+ range

- I see projectiles, spells cast and then the player is rendered but the AoE spells do not render anymore, just the damage, when suddenly the player is gone, but his/her spell is visible

- Friendly NPCs dissapear in world (not WvW) without a reason; I am the only one in the area.

All these to me point to be bad algorithm which decides the priority of models to be displayed and it seems that given the same input (or a small variation) it produces a different state of the rendered world.

 

I might be wrong on this, so do not quote me!

V.

  Jean-Luc_Picard

Elite Member

Joined: 1/10/13
Posts: 2766

There... are... four... lights!

2/18/13 8:10:21 AM#19
Originally posted by Volmok

I had a blast reading this post. It reminded me of my 3D computing courses and exams at Computer Science :D

And that's exactly how it sounds - like someone who has read about 3D computing theory but has little practical knowledge.

I always kept thingking about GW2 culling issues and always said that it could not be just the computing of objects and trimming out what is not supposed to be rendered; being a developer (not 3d rendering, but server developer) I see very often the impact of poor server code on client machines.

There you are closer to the real cause - not that the server code is generally poor, but it's obvious the culling problem comes from limitations server side.

All these to me point to be bad algorithm which decides the priority of models to be displayed and it seems that given the same input (or a small variation) it produces a different state of the rendered world.

I might be wrong on this, so do not quote me!

I'd rather quote you than the OP. I'm sure you're closer to the real cause than him with his lengthy post full of technical terms totally unrelated to the problem at hand.

Playing now: Archeage, WoW, Landmark, GW2

Top 3 MMORPGs played: UO, AC1 and WoW

Honorable mentions: AO, LotRO and GW2.

"The ability to speak doesn't make you intelligent" - Qui-gon Jinn. After many years of reading Internet forums, there's no doubt that neither does the ability to write.

  Gaia_Hunter

Elite Member

Joined: 5/04/12
Posts: 2609

2/18/13 9:47:13 AM#20
Originally posted by jpnz
Originally posted by Gaia_Hunter
 

Cullinng is best known as hidden surface determination, hidden surface removal, occlusion culling or visible surface determination.

Guild Wars 2 uses the Umbrs Occlusion engine.

No, culling isn't a bug.

/More irrelevant posts that doesn't address the issue; near plane clipping.

Notice that ANet keeps on harping about models and how it doesn't render them and how the bandwidth / processing isn't there on the server / client etc etc?

Notice that they don't say that clipping could be why? Notice that they never say it is their 'engine'?

I have some very basic understanding of this but even I can see that they wrote a whole lot of 'stuff' without actually telling us it is their engine that's the problem.

 

Edit 1: if you want to refute Quizzical with technical knowledge go ahead. I'd love to see someone try cause it'll be hilarious.

What do you think renders the models? What do you think send the information regarding player position?

Their engine mom?

The order of operations looks like this:
1) Character X enters player’s visibility
2)
delay due to the mechanics of culling

3) Server reports character X to client
4)
delay due to asset load time

5) Character X full model is visible on-screen to the player

Using fallback models we end up with this instead
1) Character X enters player’s visibility
2)
delay due to the mechanics of culling                           

3) Server reports character X to client
4a) Character X fallback model is visible on-screen to the player
4b)
delay due to asset load time

5) Character X full model is visible on-screen to the player

I think the OP is underestimating the extensive bandwitdh required as the main culprit rather than anything regarding the physic engine (which is something I bring often since I feel most people have no real perception of how taxing is a good physic engine and how that lead to zones connected by loading screens opposed to semaless worlds that have no collision detection).but to the high amount of information going not only in the server but between server and client.

Which is why one of the solutions pointed is to initially send a standard representation of the enemy profession and only later send the customization details.

In fact that also goes more in line with how DEs break and how in PvE sometimes you only see players when you are almost on top of them.

 

Want to read more about bandwitdh management with tons of players involved?

http://www.fsegames.eu/devblog1.html

 

Currently playing: GW2
Cooperative (semi cooperative)board games you should check: Pandemic, Sentinels of the Multiverse, Eldritch Horror, Descent 2.0,Level 7 Omega Protocol, Last Night on Earth

6 Pages 1 2 3 4 5 6 » Search