Search Unity

Graphics [RELEASED] Perfect Culling - Pixel Perfect Occlusion Culling

Discussion in 'Tools In Progress' started by PatrickKa, Apr 18, 2021.

  1. PatrickKa

    PatrickKa

    Joined:
    Apr 30, 2014
    Posts:
    245
    Thank you for the update. My device should arrive mid next week. :)
     
    sameng likes this.
  2. davdun

    davdun

    Joined:
    Mar 17, 2015
    Posts:
    9
    Thanks for this great asset, the new vulcan baking is really quick and the ability to tweak the code has been useful. One tweak that I have found useful and others may find useful is being able to nest volumes of different resolutions within each other. Think of the situation of a large terrain with hills that completly occlude complex prefab buildings on the terrain. My requirement is to have a high resolution occlusion volume for each of the prefab buildings but low resolution volume for the terrain occlusion between the prefabs - so it does not take a long time to bake.

    Out of the box if you have one volume nested within another volume that have common renderers the volumes will fight each other over whether the renderers are visible. So the tweak I have ended up doing is added a new field on the volume that allows me to link to a 'parent' volume (e.g. high resolution volume has a reference to the low resolution volume). I added a boolean to the PerfectCullingBakeGroup called "onlyIfInBounds" and In the Start method for PerfectCullingBakingBehaviour for volumes that have a parent volume set I go through all its bakeGroups and find the matching bakeGroup in the parent PerfectCullingBakingBehaviour and set the "onlyIfInBounds" to true in that situation for both bakeGroup objects.

    Then in the PerfectCullingCamera I have some logic that if I am not in bounds of the high resoluton volume it will use the low resolution volume to set the renderer visibility state, if i am in the high resolution volume then it will use the high resolution volume to take over for those renderers that are relevant (the other renderers not shared between the low resolution volume and current in bounds high resolution volume will still be processed by the low resolution volume).

    It works for me, I think it would be a nice future feature - i'm sure there is a nicer and more optimized way than the way i have done it though.
     
    PatrickKa and sameng like this.
  3. sameng

    sameng

    Joined:
    Oct 1, 2014
    Posts:
    184
    Sounds like an intuitive, useful solution to have parent / priority volumes. I have similar scene setups that I'd love to use this sort of feature.
    Would love to see this feature in the main plugin!
     
    PatrickKa likes this.
  4. PatrickKa

    PatrickKa

    Joined:
    Apr 30, 2014
    Posts:
    245
    Thank you very much. Really appreciate. I definitely really like your idea and it also sounds like a great way to solve it.

    I will experiment with it and try to make it an official feature. :)
     
  5. davdun

    davdun

    Joined:
    Mar 17, 2015
    Posts:
    9
    Sounds good! One other thing I have noticed, I'm fairly sure there is a bug if you rotate the culling volume. You can instantly see the issue if you set a high resolution cell size and enable probe visualisation (as it will only show a small number of probes due to the high resolution). If the culling volume is unrotated the visualization of the probes (yellow spheres) will surround the scene camera if it is in the volume, if you rotate the culling volume the visualizations will be rotated as well and will no longer surround the scene camera (if its in the volume). This also effects the in game camera and culling fails to work correctly.

    This occurs when there is either no bake yet, or the bake was done when the volume was rotated.

    I'm fairly certain its something wrong with PerfectCullingMath.GetIndexForWorldPos - specifically the first two lines where world pos is calculated. It looks like the rotation of the volume is being cancelled out.
     
  6. neoshaman

    neoshaman

    Joined:
    Feb 11, 2011
    Posts:
    6,493
    Making game is hard, I have yet to use this asset due tobpre requisite works still taking time.

    But can I make a speculative question?

    This does not support dynamics as far I know. But would this hack works? Make trigger volumes state based on their visibility with this asset, any dynamic objects that are fully overlap by the volume deactivate their visual, or anything you want, when the volume state is non visible.
     
  7. PatrickKa

    PatrickKa

    Joined:
    Apr 30, 2014
    Posts:
    245
    I most likely have a fix for your rotation issue. I just didn't release it yet because I was still trying whether it fails in other situations (so far it looks very stable and if it also works for you I'm sure I can release it in the next update).

    I sent you a PM. :)

    I'm convinced that it would be possible to implement support for dynamics on top of what Perfect Culling does. It may be an additional visibility grid or maybe just comparing whether visible objects are similiar. It may also be possible to use the Perfect Culling data to jump start a completely different culling algorithm for dynamic objects that can run much more cheaply this way. So many possibilities but it may also really depend on the scene. :)
     
  8. PatrickKa

    PatrickKa

    Joined:
    Apr 30, 2014
    Posts:
    245
    @DanjelRicci @sameng Version 1.2.2 was approved and hopefully fixes/works around the Applie Silicon issue.
     
    sameng likes this.
  9. ckohlmeyer

    ckohlmeyer

    Joined:
    Apr 17, 2021
    Posts:
    40
    Yeah thanks again PatrickKa. This asset is really crucial to making our game work on a very performance limited platform.

    We are doing the exact same this with our game. Works well, but agreed, it’d be great if this could just be part of the standard behavior.

    Would live the dynamic support. Maybe this is similar to the ideas already described, but I was thinking you could do a pass where the system makes a transparent cube at every cell (or at some defined resolution) so you can just see if cells (or subcells) are occluded, and then at runtime check if a dynamic object’s bounds are touching any occluded cell.
     
  10. ckohlmeyer

    ckohlmeyer

    Joined:
    Apr 17, 2021
    Posts:
    40
    We tried commenting out these lines, and have been testing it like that for a couple of weeks. The project-wide reimport hasn’t happened again.
    I’m not 100% sure if it wont happen again, or if that was the cause, because the issue was a bit unpredictable to start with, but it at least appears to be working
     
  11. DanjelRicci

    DanjelRicci

    Joined:
    Mar 8, 2010
    Posts:
    310
    Great! I'm still using Unity 2020 due to other issues unrelated to Perfect Culling, but I plan on trying 2021 again later on, so this is good news.
     
  12. sameng

    sameng

    Joined:
    Oct 1, 2014
    Posts:
    184
    Thanks so much! Will update you on my experience. I really appreciate the fast patch :)
     
  13. ckohlmeyer

    ckohlmeyer

    Joined:
    Apr 17, 2021
    Posts:
    40
    Darn, and it just happened again. It seems like clicking somewhere in the Unity UI, while the bake is happening, might be triggering
     
  14. ckohlmeyer

    ckohlmeyer

    Joined:
    Apr 17, 2021
    Posts:
    40
    I'm running into a little bit of a weird issue.
    When I run the bake, using "Unity For Rendering", the LODGroup culling distance is causing objects to cull during the occlusion bake. This is definitely no good since it locks in a single cull distance, which you'd never want to do. You'd always want the LODGroup to be the sole source of distance culling.

    Is there any way to correct for this while using Unity For Rendering?

    I tested disabling "Use Unity For Rendering", and the problem stopped happening. I also started getting faster bakes. My GPU utilization is going from about 35% when checked on, to about 65% when disabled, on an RTX2080super.
    Is there any reason to not disable "Use Unity For Rendering"?
     
    Last edited: Aug 25, 2022
  15. ckohlmeyer

    ckohlmeyer

    Joined:
    Apr 17, 2021
    Posts:
    40
    Last edited: Aug 25, 2022
  16. ckohlmeyer

    ckohlmeyer

    Joined:
    Apr 17, 2021
    Posts:
    40
    Any updates on this transparency issue? It is causing some big problems in our new level. Thank you!
     
  17. Deleted User

    Deleted User

    Guest

    @PatrickKa Do you have any ETA to implement dynamic object culling on this plugin?
     
  18. PatrickKa

    PatrickKa

    Joined:
    Apr 30, 2014
    Posts:
    245
    Hey,

    Sorry for the late response. Unfortunately I have not received any notifications about posts in this thread (even though I watch it) :(

    For Unity you should be able to just create a new quality level that is used for baking and make sure to configure the LOD bias so that it does not cull.

    If you need to modify shaders and customize the bake process itself the native renderers make that pretty hard. That would be a reason not to use them. If the default configuration works for you there is however no reason not to use them because they are much faster and that is the primary reason why they exist. :)

    I'm taking a look. So far it appears to be a render order problem (this is actually one of the many reasons why stacking transparency is problematic in general) but I don't have a solution yet. Again sorry for the late response I simply was not notified about new posts. Feel free to also reach out via mail next time.

    No ETA yet. I also cannot even promise that it will become a feature. It needs testing to verify the feasibility and effectiveness.
     
  19. PatrickKa

    PatrickKa

    Joined:
    Apr 30, 2014
    Posts:
    245
    I just sent you a PM. Please give it a try and report back.
     
  20. SomethingElse12

    SomethingElse12

    Joined:
    Apr 4, 2022
    Posts:
    50
    Hey, does this work with very large open worlds? like 100's of scenes and 100 thousands of objects? Is there some limitation on that? Also does it have any stutter on loading/unloading scenes when loading them additively in open world?
     
    Last edited: Sep 8, 2022
  21. PatrickKa

    PatrickKa

    Joined:
    Apr 30, 2014
    Posts:
    245
    Hey,

    It sounds like you are talking about a pretty massive open world game.

    One limitation is that a single PerfectCullingVolume can only address 65000 objects. Now an object can be a single renderer but also all renderers controlled by a single LODGroup. So different LODs are not hurting this and the limit is usually not an issue.
    If you have hundreds of scenes you will need to bake all of them. If scenes are also supposed to take into account geometry from other scenes the bake times could become pretty rough and hurt iteration times especially because you need to load them into memory for the bake process, too.
    Perfect Culling cannot cull dynamic objects but only the baked scene geometry.
    Terrain is only culled as a whole (visible or not visible because there is no API to cull invidiual chunks as far as I know).
    Open world games usually lack culling opportunities.
    The baked data consumes memory, too. The larger the scene the more it will consume.

    Because of all of this I'm usually advising against using Perfect Culling for open world games. Now not all games are the same and some people found ways to make it work for their open world games.
    If you target PC you may be able to develop a GPU driven occlusion culling system that does not have such limitations but costs a few milliseconds of your frame time. If you target mobile this may be too expensive and you might not have a choice but try Perfect Culling or other solutions and potentially even need to scale back the scope of your game to make it feasible.

    There should be no stutter because all the data was baked and will be readily available after the scene was loaded.

    I hope this helps a little bit.
     
    PutridEx likes this.
  22. SomethingElse12

    SomethingElse12

    Joined:
    Apr 4, 2022
    Posts:
    50
    The largest scene I have is around 10000 objects, so I guess this could work. Should still be better in triangle heavy closed areas than without it. The iteration times are not a problem. Already have a dedicated PC for that purpose. I guess I will try your asset, because umbra culling simply crashes the editor from the amount of scenes/geometry and with it I potentially save double the fps. Thanks for the info.
     
  23. ckohlmeyer

    ckohlmeyer

    Joined:
    Apr 17, 2021
    Posts:
    40
    Thanks again for the great tool and all of the support you've provided!

    I've been getting errors from objects that have a Double-Sided Tag on them. I'm not sure if it's actually causing any problems or not.
    And what I see in the hierarchy for these error objects is something like this:
    OriginalObject
    --CloneObject (no mesh)
    --CloneObject (with mesh)
    -----CloneObject (no mesh)

    I've included an image of that.

    Is that normal behavior?

    And every object like that gives me this error:

    Can't remove MeshRenderer because PerfectCullingRendererTag (Script) depends on it
    UnityEngine.Object:DestroyImmediate (UnityEngine.Object)
    Koenigz.PerfectCulling.PerfectCullingSceneColor:Dispose () (at Assets/Koenigz/Perfect Culling/Scripts/PerfectCullingSceneColor.cs:154)
    Koenigz.PerfectCulling.PerfectCullingBakerNativeWin64:Dispose () (at Assets/Koenigz/Perfect Culling/Scripts/Baker/Native/PerfectCullingBakerNativeWin64.cs:385)
    Koenigz.PerfectCulling.PerfectCullingBakingBehaviour/<PerformBakeAsync>d__18:<>m__Finally2 ()
    Koenigz.PerfectCulling.PerfectCullingBakingBehaviour/<PerformBakeAsync>d__18:MoveNext () (at Assets/Koenigz/Perfect Culling/Scripts/PerfectCullingBakingBehaviour.cs:418)
    Koenigz.PerfectCulling.PerfectCullingBakingManager:EditorUpdate () (at Assets/Koenigz/Perfect Culling/Scripts/PerfectCullingBakingManager.cs:224)
    UnityEditor.EditorApplication:Internal_CallUpdateFunctions ()
     

    Attached Files:

  24. PatrickKa

    PatrickKa

    Joined:
    Apr 30, 2014
    Posts:
    245
    It should be harmless especially if you cannot see any issues. Of course, I will definitely look into it though.
     
  25. Deleted User

    Deleted User

    Guest

    Would it be possible to bake a scene then at runtime spawn it on another location? Our game has every level on its own separate scene then we dyamically spawn different layout configurations. Would be great to have a solution that can support this.
     
  26. PatrickKa

    PatrickKa

    Joined:
    Apr 30, 2014
    Posts:
    245
    This should work as long as the scene content stays the same relative to the PerfectCullingVolume (one way to achieve that is to have the PerfectCullingVolume at the root and parent everything below it).
     
  27. jmgek

    jmgek

    Joined:
    Dec 9, 2012
    Posts:
    177
    Webgl?
     
  28. PatrickKa

    PatrickKa

    Joined:
    Apr 30, 2014
    Posts:
    245
    Generally all platforms are supported because the expensive steps are performed during bake time. WebGL may have some harher memory constraints that you need to keep in mind though.
     
  29. sameng

    sameng

    Joined:
    Oct 1, 2014
    Posts:
    184
    Perfect culling working better on m1 now! :)
    I was wondering if it were possible to hook perfect culling into the shadowcaster settings from the perspective of a light?

    it would be really incredible for performance if perfectculling could cull shadowcasters for say, the directional light--(from the perspective of the light maybe?) it would greatly increase performance.
     
    PatrickKa likes this.
  30. PatrickKa

    PatrickKa

    Joined:
    Apr 30, 2014
    Posts:
    245
    Thats an interesting idea for sure. I think the only way to implement this would be to create a new render pipeline and even then I'm not sure whether Unity allows to customize it to this level as it requires to adjust the shadow mapping render passes. Furthermore shadow mapping is usually already pretty fast because it only needs to populate the depth buffer (no fragment shader invocations) and can cull everything that is outside of the range of the light. So for most lights there is already so much culling going on that culling an additional couple more renderers may not even make a difference anymore. Only one way to find out though.

    Anyway I do not think this will ever become an official Perfect Culling feature but maybe an interesting project for people that feel adventurous. :)
     
  31. sameng

    sameng

    Joined:
    Oct 1, 2014
    Posts:
    184
    Ah thanks for the reply! I was just thinking it would simply toggle on/off the "cast shadows" option on the renderer--
    someone from Unity helped profile my project on Switch and the shadowpass was actually one of the big performance sucks.

    Do you have any idea where one could hook into that? Almost like an "alternative" way to poll Perfect Culling bake result and cull my own custom property, from arbitrary locations? I like the system and how fast it is--and since it's already baked/loaded, it would be great to use the data for many things :)
     
  32. PatrickKa

    PatrickKa

    Joined:
    Apr 30, 2014
    Posts:
    245
    I think you have two options here.

    1) Bake the location of the light (is basically just a single cell so should be pretty much instant).
    The Bake API actually features a helper function for this. However it may modify your scene temporarily so use with care (it basically spawns a dummy PerfectCullingVolume; you can find the implemtation in PerfectCullingAPI.cs to create something similiar that fits your needs even better if needed). This also only works in the Unity Editor:
    Code (CSharp):
    1. HashSet<Renderer> PerfectCullingAPI.Bake.BakeSingleViewPointNow(Vector3 position, List<Renderer> inputRenderers)
    2) Use the existing bake data to read visibility information. This should also work at run-time if needed (though you may want to create an extenstion method for PerfectCullingBakeGroup so you can access m_runtimeGroupData instead of accessing renderers to maintain compatibility with other run-time features):
    Code (CSharp):
    1. // Allocate once
    2. List<ushort> results = new List<ushort>();
    3.  
    4. // Clear List so we can safely re-use it
    5. results.Clear();
    6. volume.GetIndicesForWorldPos(pos, results);
    7.  
    8. for (int indexIndices = 0; indexIndices < results.Count; ++indexIndices)
    9. {
    10.   foreach (Renderer r in volume.bakeGroups[indexIndices].renderers)
    11.   {
    12.     DoSomethingWithRenderer(r);
    13.   }
    14. }
    I have not tested this code but hopefully gives you some ideas. You can also look at the camera code in PerfectCullingCamera.cs for reference.
     
    Last edited: Sep 23, 2022
    sameng likes this.
  33. asirz

    asirz

    Joined:
    Mar 25, 2020
    Posts:
    1
    Hey, is there a way to check if a PerfectCullingVolume has culled an object? Like a function that returns a bool, given an input of the GameObject in the volume. Let's say I have an Object A that was baked in the volume and I have a separate Object B, who's culling behaviour I want to match with Object A. I tried going through the API but none of the functions seem to do this, I tried checking if Object A's renderer is enabled by
    Code (CSharp):
    1. GameObjectA.GetComponent<MeshRenderer>().enabled;
    but this returned true even when the object was culled. I guess what I'm asking is what the mechanism is for the culled Object A, since it's not the MeshRenderer that's changing.

    Thanks,

    asirz
     
  34. PatrickKa

    PatrickKa

    Joined:
    Apr 30, 2014
    Posts:
    245
    Perfect Culling does usually not toggle the Renderer component because it is pretty slow.
    By default it toggles this property (if available in your Unity version): https://docs.unity3d.com/ScriptReference/Renderer-forceRenderingOff.html

    However if you need Perfect Culling to toggle the Renderer component instead you can also customize that in PerfectCullingConstants.cs by changing the ToggleRenderMode.

    Furthermore the function that changes the state of the renderer is called ToggleRenderer and can be found in PerfectCullingUtil.cs if you want to take a look or need to customize it (like adding a callback or whatever).
    Just be aware that this is potentially called for thousands of objects and executing expensive code in ToggleRenderer may impact performance.

    Right now there is no API for checking the state of a Renderer but I made a note to add that! Should be simple enough. For now you can just check the forceRenderingOff property I mentioned because I'd assume what is currently being used. :)

    You also may be able to use PerfectCullingSceneGroup to toggle other components along with Renderers. See the demo scene Demo_UnityBehaviours for that. It enables a Light and a Script.

    I hope this helps but feel free to ask more questions :)
     
  35. crowmaster

    crowmaster

    Joined:
    Jul 6, 2012
    Posts:
    83
    Does this asset allow occlusion culling of dynamic objects?
     
  36. PatrickKa

    PatrickKa

    Joined:
    Apr 30, 2014
    Posts:
    245
    No, if you are talking about fully dynamic objects that have not been baked.
     
  37. JamesWjRose

    JamesWjRose

    Joined:
    Apr 13, 2017
    Posts:
    687
    @PatrickKa

    Quick presales question: One of your videos mentioned the ability to use Unity's Occlusion Culling as well as your asset. Thing is, I have bitten off too much. Been attempting to make a large world map (for a few years now, and for vr, how stupid am I?) and found a great city asset in CSCape. I have a city that is nearly 10km x 7km. (with some areas within that empty) The city works great! Highly recommend it to people. (beware the LACK of documentation) anyway...

    When I saw that your asset had a max of 60K+ (ish) renders, I was f'ED! I had too many other objects in the game, too many renders. So I combined mesh and reduced the number of objects in the game and got to :
    • Buildings has 53208 Renders
    • Road Side Objects has 50801 Renders
    • Road Network has 4780 Renders
    So my thought was since PC doesn't work on terrains so well that I would use Unity's culling for the Buildings and terrain, and your asset for everything else.

    I get that I still will have to likely reduce my world... but is the IDEA worth me pursuing? or?

    Thanks kindly for the info, and have a wonderful day
    James
     
  38. PatrickKa

    PatrickKa

    Joined:
    Apr 30, 2014
    Posts:
    245
    Hey James,

    I think you may be able to use Umbra and PC like that. However you need to make sure that PC is still aware of the buildings and you can do that by assigning them as "Additional occluders" what that means is that they are taken into account for the baking process as occluders but not controlled by PC. There is also no limitation for the number of renderers for this reason. Combining PC and Umbra is a bit of uncharted territory though because usually everybody moves away from Umbra. For this reason I have not heard practical experiences trying to use it like that.

    Your world is definitely very large and generally the larger your level the more memory PC might consume. If you target mobile VR that could become an issue. It may also result in pretty hefty bake times. After all the main idea behind PC is to perform as much work as possible in the Editor to make occlusion culling as fast as it can get at run-time. This involves a lookup table that can grow pretty large for such a large scene.

    If you target PC VR I'd first suggest to try whether Umbra works for your use-case. Alternatively find or create a GPU based occlusion culling system. Such a GPU based solution would also support dynamic objects (PC does not currently support dynamic objects). None of these solutions will beat PC in terms of performance at run-time but they will probably beat it when it comes to iteration time because bake steps do not exist or are much faster. For such large level sizes that could become very important.

    Just some food for thought. :)

    Thank you! Have a wonderful day and weekend!
     
    JamesWjRose likes this.
  39. JamesWjRose

    JamesWjRose

    Joined:
    Apr 13, 2017
    Posts:
    687
    Patrick,

    Thanks for the quick response. I'll purchase your asset and give it a try and let you know how it goes.

    For the record: I did try Umbra for just the terrain and buildings, and that worked fine. But when I add other details, street lights, signs, etc Umbra never finishes.

    I also have GPUI, and it can be great but it's having some issues too.

    This is not for mobile VR. LOL!

    I promise to report back details for you and the others.

    Have a wonderful weekend
     
  40. crowmaster

    crowmaster

    Joined:
    Jul 6, 2012
    Posts:
    83
    How this culling solution works with Unity terrain? Atm it is only possible to cull it whole?
     
  41. PatrickKa

    PatrickKa

    Joined:
    Apr 30, 2014
    Posts:
    245
    A mesh representation is created for the baking process. The terrain can only be culled as whole.
     
    crowmaster likes this.
  42. crowmaster

    crowmaster

    Joined:
    Jul 6, 2012
    Posts:
    83
    Thanks for answer. I am also using RealtimeCSG in my project. Does Perfect Culling understand meshes generated by this CSG library?
     
  43. PatrickKa

    PatrickKa

    Joined:
    Apr 30, 2014
    Posts:
    245
    I don't have any experience using RealtimeCSG but if the asset is not constantly creating and destroying new renderers and only updates the Mesh it should work.
     
  44. crowmaster

    crowmaster

    Joined:
    Jul 6, 2012
    Posts:
    83
    Okay, recently purchased the asset.

    How to add PerfectCullingRendererTag to terrain? I want to make it render double sided to make cells under terrain bake correctly.
     
  45. PatrickKa

    PatrickKa

    Joined:
    Apr 30, 2014
    Posts:
    245
    If you are currently using the PerfectCullingTerrain script you cannot enable this but you can workaround it:
    - Remove the PerfectCullingTerrain script
    - Add the TerrainToMeshUtility script and select Create Mesh
    - Add the PerfectCullingRendererTag to the generated Renderer
    - Add it to the PerfectCullingVolume like any other renderer (probably just clear bake groups and re-add everything to also make sure the old PerfectCullingTerrain is no longer referenced)

    I hope this helps. It may be a good idea to add this feature to the PerfectCullingTerrain because it sounds like a useful feature for sure (just made a note)!
     
    crowmaster likes this.
  46. crowmaster

    crowmaster

    Joined:
    Jul 6, 2012
    Posts:
    83
    Thanks for reply again. Now i got another issue. In my game i am using special billboard objects, which are simple flat rects. Because they not rotate to camera when baking, it gives incorrect results when culling from some view points. I don't want to not cull them at all, because they use relatively expensive shader. Ideally i'd like to proxy them with some bounding volume, when baking. Is this possible?
     
  47. PatrickKa

    PatrickKa

    Joined:
    Apr 30, 2014
    Posts:
    245
    Maybe it would be enough to just add the PerfectCullingRendererTag and check the double-sided checkbox?

    You could also write a script to swap out meshes before the bake starts and restore them after the bake finished. The API gives you hooks into this process. I made a note to implement some sort of proxy support as a built-in feature though. Could maybe just go into the PerfectCullingRendererTag and have an override mesh field.
     
  48. crowmaster

    crowmaster

    Joined:
    Jul 6, 2012
    Posts:
    83
    Btw would be very nice to have option to enable culling on editor camera, for troubleshooting
     
  49. atomicjoe

    atomicjoe

    Joined:
    Apr 10, 2013
    Posts:
    1,869
    If you enter play mode and select the game camera with Perfect Culling enabled, you can see the renderers being disabled in realtime in the editor view.
     
  50. crowmaster

    crowmaster

    Joined:
    Jul 6, 2012
    Posts:
    83
    Thats not exactly what i want.