#1 posted by ericw on 2015/01/13 09:25:57
Fabien Sanglard's doom3 code review has some interesting stuff on that:
http://fabiensanglard.net/doom3/renderer.php
Not really sure how state of the art engines do it though.
#2 posted by mh on 2015/01/13 10:00:37
You could do something with hardware occlusion queries.
Beware that vis data is needed on both client and server. The server uses it for determining which entities to write to the client, but also for line-of-sight target checking in PF_newcheckclient and PF_checkclient.
Easy,
#3 posted by beyon on 2015/01/13 10:44:15
just render everything!
Is the question how to do Quake-vis in real time or more general? Saurbraten obviously uses different data structures...all depends on what your goal is?
How State-of-the-art Engines Do It
#4 posted by mh on 2015/01/13 13:15:13
Culling the Battlefield: http://www.slideshare.net/DICEStudio/culling-the-battlefield-data-oriented-design-in-practice
Uses software rendering to a low-resolution depthbuffer with artist-placed low-resolution occlusion geometry in order to determine what's visible and what's not. In other words that's not something you're going to be able to do with existing content (and I can confidently predict that you'd meet some resistance from mappers if you were to suggest them building occlusion geometry for new content too).
#5 posted by JneeraZ on 2015/01/13 13:18:31
I don't know about that ... I think many mappers would build occlusion geo if the offset was they didn't have to spend 60 hours running VIS.
Occlusion Geometry
Is that anything like hint brushes?
Just Use Detail Brushes And Tyr's Compilers
#7 posted by Kinn on 2015/01/13 13:30:41
Rendering Everything
is a viable option though. I do it in TrenchBroom and get 60 FPS even on large maps. I don't think that adding light maps will make much of a difference, but dynamic lights might pose a problem.
#9 posted by Spirit on 2015/01/13 14:53:55
Wouldn't all the entities being visible and active be a problem?
Wot Spirit Says
#10 posted by mh on 2015/01/13 15:28:03
I mentioned this above, but PVS is not just used for rendering. Without PVS you'll also be sending all entities to the client each frame, and line of sight testing for targetting will also always succeed. You may be able to get away without PVS for rendering in a map editor, but you almost certainly can't get away without it for the latter two in the actual engine itself.
#11 posted by JneeraZ on 2015/01/13 15:41:14
I'd wager it wouldn't matter all that much in the end. How many entities are actually doing anything each frame? Most monsters are standing around waiting for the player to show up. Everything else just animates statically.
So, really, how much additional network traffic is there going to be?
#12 posted by JneeraZ on 2015/01/13 15:41:52
Err, by animates statically I obviously mean animates but doesn't move. :P
Most monsters are standing around waiting for the player to show up.
Not in a Tronyn map...
What Problem Are We Trying To Solve Here?
#14 posted by Kinn on 2015/01/13 16:24:20
Is it vis compile times?
Yes...
#15 posted by Scragbait on 2015/01/13 16:48:03
For me, VIS times on most of my Travial maps was beyond brutal and VIS ran for days. But I was also using a 1.3GHz Pentium 100. I added to the problem by designing maps without respecting the engine and its limitations. The burden of long VIS times cut into time and machine resources that could have been used for further creative work.
Ok
#16 posted by Kinn on 2015/01/13 16:58:18
So have you tried using func_detail and tyrann's tools?
Yeah
#17 posted by ijed on 2015/01/13 18:04:50
If vis takes longer than a couple of hours then you either need to update your tools, learn how to use them properly or both.
And, as Mh says, without PVS all enemies will wake on map start.
#18 posted by gb on 2015/01/13 18:07:53
Or even Q3BSP and manually creating portals.
OK, OK, I'll stop it.
#19 posted by mh on 2015/01/13 18:11:30
How many entities are actually doing anything each frame? Most monsters are standing around waiting for the player to show up.
And how do they know that the player's shown up? By doing a vis test, that's how (like I said, look at PF_checkclient and PF_newcheckclient, both of which use the PVS). So if you run with the "just draw everything" approach, ignoring vis data, then that vis test will always pass. And then they're no longer just standing around doing nothing.
Network Traffic
#20 posted by mh on 2015/01/13 18:12:29
Testing e1m2 with protocol 666, the network traffic difference is a factor of 10.
#21 posted by JneeraZ on 2015/01/13 18:37:57
"And how do they know that the player's shown up? By doing a vis test, that's how (like I said, look at PF_checkclient and PF_newcheckclient, both of which use the PVS). So if you run with the "just draw everything" approach, ignoring vis data, then that vis test will always pass. And then they're no longer just standing around doing nothing."
Sure, but then you come up with a different method. :)
I'm just noodling around the ideas here. I think VIS was great 20 years ago ... not sure there aren't better solutions these days.
#22 posted by JneeraZ on 2015/01/13 18:39:59
"Testing e1m2 with protocol 666, the network traffic difference is a factor of 10."
This only affects people playing across a network and ... well, I guess both of them would have to find a new hobby or something. :P
#23 posted by JneeraZ on 2015/01/13 18:43:08
I guess where my brain is heading is a thinking exercise for engine programmers ... what if VIS didn't exist? Go.
#24 posted by Kinn on 2015/01/13 18:51:45
I guess where my brain is heading is a thinking exercise for engine programmers ... what if VIS didn't exist? Go.
Just to be clear are we talking about something that requires no pre-processing step? Also, how much work should the designer have to do?
#25 posted by JneeraZ on 2015/01/13 19:00:48
I don't know. I think anything is fair game ... LDs placing portals or totally automated. It's just interesting to think about.
|