<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=Content-Type content="text/html; charset=windows-1250">
<META content="MSHTML 6.00.2900.5583" name=GENERATOR>
<STYLE></STYLE>
</HEAD>
<BODY bgColor=#ffffff>
<DIV><FONT face=Arial size=2>Hi Robert and J-S (I hope you are reading this 
mail),</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face=Arial size=2>As promised (although it did not take 7 not  2 
days) I have refactored LispSM and related classes to easily fit into osgShadow 
node kit. Attached zip contains osgShadow example + ViewDependentShadow 
directory with all the classes. ViewDependentShadow directory may also serve as 
folder for separate node kit if you decide that these files will not 
go into osgShadow. </FONT></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face=Arial size=2>Currently all the files use ViewDependentShadow 
namespace but conversion to osgShadow would be as simple as search and replace 
of two strings:   </FONT></DIV>
<DIV><FONT face=Arial size=2>    "VIEWDEPENDENTSHADOW" to 
"OSGSHADOW" - i am using it as a prefix in headers - replace 
without whole words match </FONT></DIV>
<DIV><FONT face=Arial size=2>    "ViewDependentShadow" to 
"osgShadow"  - replace using whole words match. There 
is ViewDependentShadowTechnique class which should not change its 
name.</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face=Arial size=2>J-S suggested that this code should be added 
to 2.6 release. I think that it may be bit too early for this. My opinion is 
that my code is quite mature and I would welcome 
its inclusion in OSG codebase but I am afraid that it 
may significantly differ from other osgShadow classes. Besides its quite 
large (around 5 k lines). This may create some learning problems for 
users. I think that before putting it in osgShadow it should be tested on the 
battlefield so best approach for this would be creation of advanced shadow 
example (for example osgSimShadows) showing advantages of this code for large 
terrain databases. Alternate route would be to create separate 
ViewDependentShadow nodekit and create similar example showing its use. 
</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face=Arial size=2>Once the example survives tests by the 
users and users will show more intersest it could be put 
into osgShadow. I would be very grateful if Robert could do some 
preview of the classes attached and give me some feeedback whether he likes it 
or not and what to do next. I am bit swamped recently but still eager 
to make rearangments and fix possible issues. </FONT></DIV>
<DIV><FONT face=Arial size=2> </DIV>
<DIV>
<DIV>Zip contains only VS 2008 solution but testing it under other 
OSes should be straightforward - osgshadow makefile may require addition 
of remainig cpp files. osgShadow example scenes are not what this technique 
is aimed for but it works with them. l have implemented this technique 
mainly for large terrain / directional light simulation scenarios. Run 
osgshadow with --lispsm switch. --debugHUD adds debugging display.</DIV>
<DIV> </DIV>
<DIV>Class hierarchy and short explanation follows (I will create more 
serious specification if it gets Okayed)</DIV>
<DIV> </DIV>
<DIV>ViewDependentShadowTechnique </DIV>
<DIV>
<DIV class=moz-signature>
<DIV class=moz-signature>
<DIV class=moz-signature>
<DIV class=moz-signature>
<DIV class=moz-signature>
<DIV class=moz-signature>
<DIV class=moz-signature>
<DIV class=moz-signature>
<DIV class=moz-signature>
<DIV class=moz-signature>
<DIV class=moz-signature>
<DIV class=moz-signature>
<DIV class=moz-signature>
<DIV class=moz-signature>    DebugShadowMap</DIV>
<DIV class=moz-signature>        
StandardShadowMap</DIV>
<DIV class=moz-signature>        
    MinimalShadowMap</DIV>
<DIV 
class=moz-signature>                
MinimalCullBoundsShadowMap                
</DIV>
<DIV 
class=moz-signature>                
MinimalDrawBoundsShadowMap</DIV>
<DIV class=moz-signature>        
            
LightSpacePerspectiveShadowMap</DIV>
<DIV class=moz-signature> </DIV>
<DIV class=moz-signature>Each class adds new layer of functionality.</DIV>
<DIV class=moz-signature> </DIV>
<DIV class=moz-signature>
<DIV class=moz-signature>ViewDependentShadowTechnique - performs similar 
role as ShadowTechnique with this exception that it provides neccessary 
framework for many Shadow resoures (Textures, Texgens etc) per many 
views. Derived techniques have initialization deferred to cull 
phase. Its somewhat similar to osgSim::OverlayNode & 
osgSim::OverlayNode::ViewData. </DIV>
<DIV class=moz-signature> </DIV>
<DIV class=moz-signature>DebugShadowMap - derived from 
ViewDependentShadowTechnique lays some groundwork for debugging convex 
hulls and shadow maps for each view.</DIV>
<DIV class=moz-signature> </DIV>
<DIV class=moz-signature>StandardShadowMap - derived from DebugShadowMap - 
implements basic shadow map algorithm in accordance to 
ViewDependentShadowTechnique rules.</DIV>
<DIV class=moz-signature> </DIV>
<DIV class=moz-signature>MinimalShadowMap - derived from StandardShadowMap - 
Iplements basic shadow scene bounds optimization. It computes convex hull 
intersection of Camera Frustum, Light Volume and Scene Bounds. </DIV>
<DIV class=moz-signature>Uses computed ConvexHull to 
optimize ShadowMap camera frustum (field of view) thus optimizing ShadowMap 
resolution usage. </DIV>
<DIV class=moz-signature> </DIV>
<DIV class=moz-signature>MinimalCullBoundsShadowMap - Derived from 
MinimalShadowMap. Further optimizes shadow  bounds by computing bounds from 
render leaves that passed ShadowReceiving scene 
culltraversal.               
</DIV>
<DIV class=moz-signature> </DIV>
<DIV class=moz-signature>
<DIV class=moz-signature>MinimalDrawBoundsShadowMap - Derived from 
MinimalShadowMap. Further optimizes shadow bounds by computing bounds from 
scene prerendered into small resolution depth map.</DIV>
<DIV class=moz-signature> </DIV>
<DIV class=moz-signature>
<DIV class=moz-signature>LightSpacePerspectiveShadowMap - In the example its 
derived from MinimalCullBoundsShadowMap. With one macro it can be simply 
switched to derive from MinimalShadowMap or MinimalCullBoundsShadowMap or 
MinimalDrawBoundsShadowMap. Depending on the </DIV>
<DIV class=moz-signature>BaseClass their precision gets improved. In the final 
version I will change it to use template to easily switch between parent 
classes and allow for use of them all. Especially deriving from 
MinimalDrawBoundsShadowMap can do miracles in some scenarios.</DIV>
<DIV class=moz-signature> </DIV>
<DIV class=moz-signature>Similarly TrapezoidalShadowMaps could be derived 
from one of MinimalXXShadowMap classes. </DIV>
<DIV class=moz-signature> </DIV></DIV></DIV></DIV>
<DIV class=moz-signature>Supporting classes:</DIV>
<DIV class=moz-signature> </DIV>
<DIV class=moz-signature>ConvexHull (class based on 
osgSimulation::OverlayNode CustomPolytope adding few methods I 
needed)</DIV>
<DIV class=moz-signature> </DIV>
<DIV class=moz-signature>Let me know what You think about all this. As one 
may see I treated LisPSM as an excuse to slip some 
other shadow supporting code. Those other classes do much more heavy work than 
LisPSM code. In my opinion they are more valuable and 
should be much more interesting for others trying to implement their shadow 
algorithms.  </DIV></DIV></DIV></DIV></DIV></DIV></DIV></DIV></DIV></DIV></DIV></DIV></DIV></DIV></DIV></FONT></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face=Arial size=2>Cheers,</FONT></DIV>
<DIV><FONT face=Arial size=2>Wojtek Lewandowski</FONT></DIV></BODY></HTML>