<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=Content-Type content="text/html; charset=us-ascii">
<META content="MSHTML 6.00.2900.3492" name=GENERATOR></HEAD>
<BODY>
<DIV>
<DIV>
<DIV><FONT face=Arial size=2><SPAN class=610141016-18032009>Hi 
all,</SPAN></FONT></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><SPAN class=748162509-11032009><FONT face=Arial size=2>We are 
drawing textured terrain tiles, and want to write a shader that uses 
different code paths for different types of terrain. Water surfaces, for 
instance, are to be drawn differently than forested surfaces. <SPAN 
class=917084611-11032009>T</SPAN>o do this we have a texture with different<SPAN 
class=917084611-11032009> discrete</SPAN> values for different classes of 
terrain<SPAN class=917084611-11032009> as a basis for selecting code 
path</SPAN>.</FONT></SPAN></DIV>
<DIV><SPAN class=748162509-11032009><FONT face=Arial 
size=2></FONT></SPAN> </DIV>
<DIV><SPAN class=748162509-11032009><FONT face=Arial size=2>In the shader, it is 
obviously not possible to simply use an if statement, and select code path 
depending on values in the classification texture, since that 
would introduce aliasing.</FONT></SPAN></DIV>
<DIV><SPAN class=748162509-11032009><FONT face=Arial 
size=2></FONT></SPAN> </DIV>
<DIV><SPAN class=748162509-11032009><FONT face=Arial size=2>To reduce aliasing I 
tried to reduce the frequency by "filtering" the texture like 
this:</FONT></SPAN></DIV>
<DIV><SPAN class=748162509-11032009><FONT face=Arial 
size=2></FONT></SPAN> </DIV>
<DIV><SPAN class=748162509-11032009><FONT face=Arial size=2>vec2 distx = 
dFdx(texcoord);</FONT></SPAN></DIV>
<DIV><SPAN class=748162509-11032009><FONT face=Arial size=2>vec2 disty = 
dFdy(texcoord);</FONT></SPAN></DIV>
<DIV><SPAN class=748162509-11032009><FONT face=Arial size=2>float r = 
texture2D(classmap,texcoord-distx) + texture2D(classmap,texcoord+distx) 
+</FONT></SPAN></DIV>
<DIV><SPAN class=748162509-11032009><FONT face=Arial 
size=2>            
texture2D(classmap,texcoord-disty) + texture2D(classmap,texcoord+disty) 
+</FONT></SPAN></DIV><SPAN class=748162509-11032009>
<DIV><SPAN class=748162509-11032009><FONT face=Arial 
size=2>            
texture2D(classmap,texcoord-distx-disty) + 
texture2D(classmap,texcoord+distx+disty) +</FONT></SPAN></DIV>
<DIV><FONT face=Arial 
size=2>            
texture2D(classmap,texcoord-distx+disty) + 
texture2D(classmap,texcoord+distx-disty) +</FONT></DIV>
<DIV>
<DIV><SPAN class=748162509-11032009><FONT face=Arial 
size=2>            
texture2D(classmap,texcoord)*2.0;</FONT></SPAN></DIV></SPAN></DIV>
<DIV><SPAN class=748162509-11032009><FONT face=Arial size=2>r = 
r/10.0;</FONT></SPAN></DIV>
<DIV><SPAN class=748162509-11032009><FONT face=Arial><FONT size=2>...and using 
the value r as basis for the final fragment color.<SPAN 
class=917084611-11032009> (In this case, the classmap only contains two values 
(0 and 1) and aliasing could be removed by using mipmap filtering etc of the 
classmap texture, but we will extend this into using more classes, and then 
normal texture filtering can't be used. I hope this illustrates the aliasing 
problem anyway.)</SPAN></FONT></FONT></SPAN></DIV>
<DIV><SPAN class=748162509-11032009><FONT face=Arial 
size=2></FONT></SPAN> </DIV>
<DIV><FONT face=Arial><FONT size=2><SPAN class=748162509-11032009>This "filter" 
is probably too simple, but </SPAN><SPAN class=748162509-11032009>am I on the 
correct path? Is it possible to create a filter that reduces the aliasing to an 
acceptable level<SPAN class=917084611-11032009>, and if so, what should it look 
like</SPAN>?</SPAN></FONT></FONT></DIV>
<DIV><SPAN class=748162509-11032009><FONT face=Arial 
size=2></FONT></SPAN> </DIV>
<DIV><SPAN class=748162509-11032009><FONT face=Arial size=2>I can't be the first 
one that wants to use terrain class maps like this, how is it generally 
done?</FONT></SPAN></DIV>
<DIV><SPAN class=748162509-11032009><FONT face=Arial 
size=2></FONT></SPAN> </DIV>
<DIV><SPAN class=748162509-11032009><FONT face=Arial size=2>We're using OSG 
2.6.1, RHEL 5.1 and GTX280.</FONT></SPAN></DIV>
<DIV><SPAN class=748162509-11032009><FONT face=Arial 
size=2></FONT></SPAN> </DIV>
<DIV><SPAN class=748162509-11032009><FONT face=Arial size=2><SPAN 
class=610141016-18032009>Regards;</SPAN></FONT></SPAN></DIV>
<DIV><SPAN class=748162509-11032009><FONT face=Arial size=2><SPAN 
class=610141016-18032009>Anders Wallerman, Saab AB, 
Sweden</SPAN></FONT></SPAN></DIV>
<DIV><SPAN class=748162509-11032009><FONT face=Arial size=2><SPAN 
class=610141016-18032009></SPAN></FONT></SPAN> </DIV></DIV></DIV></BODY></HTML>