📄 水面渲染 --(转载) - 火星时代社区-全球领先的数字艺术媒体.htm
字号:
<NOSCRIPT><A
href="http://8888.hxsd.com/www/delivery/ck.php?n=aa374cab&cb=INSERT_RANDOM_NUMBER_HERE"
target=_blank><IMG alt=""
src="C:\Documents and Settings\Administrator\桌面\水面渲染 --(转载) - 火星时代社区-全球领先的数字艺术媒体_files\ai(2).gif"
border=0></A></NOSCRIPT></TD>
<TD>
<SCRIPT type=text/javascript><!--//<![CDATA[
var m3_u = (location.protocol=='https:'?'https://8888.hxsd.com/www/delivery/ajs.php':'http://8888.hxsd.com/www/delivery/ajs.php');
var m3_r = Math.floor(Math.random()*99999999999);
if (!document.MAX_used) document.MAX_used = ',';
document.write ("<scr"+"ipt type='text/javascript' src='"+m3_u);
document.write ("?zoneid=34");
document.write ('&cb=' + m3_r);
if (document.MAX_used != ',') document.write ("&exclude=" + document.MAX_used);
document.write (document.charset ? '&charset='+document.charset : (document.characterSet ? '&charset='+document.characterSet : ''));
document.write ("&loc=" + escape(window.location));
if (document.referrer) document.write ("&referer=" + escape(document.referrer));
if (document.context) document.write ("&context=" + escape(document.context));
if (document.mmm_fo) document.write ("&mmm_fo=1");
document.write ("'></scr"+"ipt>");
//]]>--></SCRIPT>
<NOSCRIPT><A
href="http://8888.hxsd.com/www/delivery/ck.php?n=ab65782e&cb=INSERT_RANDOM_NUMBER_HERE"
target=_blank><IMG alt=""
src="C:\Documents and Settings\Administrator\桌面\水面渲染 --(转载) - 火星时代社区-全球领先的数字艺术媒体_files\ai(3).gif"
border=0></A></NOSCRIPT> </TD></TR></TBODY></TABLE><!--影视区独立广告--><!--Maya、动漫独立广告--><!--教育培训独立广告--><!--max 建筑版独立广告--><!--游戏版独立广告--><!--ads edit--></DIV></TD></TR></TBODY></TABLE><!-- post 9589660 popup menu -->
<DIV class=vbmenu_popup id=postmenu_9589660_menu style="DISPLAY: none">
<TABLE cellSpacing=1 cellPadding=4 border=0>
<TBODY>
<TR>
<TD class=thead>shenxue</TD></TR>
<TR>
<TD class=vbmenu_option><A
href="http://bbs.hxsd.com/member.php?u=88787">查看公开信息</A></TD></TR>
<TR>
<TD class=vbmenu_option><A
href="http://bbs.hxsd.com/private.php?do=newpm&u=88787"
rel=nofollow>发送悄悄话给 shenxue </A></TD></TR>
<TR>
<TD class=vbmenu_option><A
href="http://bbs.hxsd.com/search.php?do=finduser&u=88787"
rel=nofollow>查找 shenxue 发表的更多帖子 </A></TD></TR><!-- zGia! goodish thread begin -->
<TR>
<TD class=vbmenu_option><A
href="http://bbs.hxsd.com/search.php?do=finduser&u=88787&starteronly=1&viewgoodish=1"
rel=nofollow>查找 shenxue 发表的精华主题 </A></TD></TR><!-- zGia! goodish thread end --></TBODY></TABLE></DIV><!-- / post 9589660 popup menu --></DIV></DIV></DIV></DIV><!-- / close content container --><!-- / post #9589660 --><!-- post #9589678 --><!-- open content container -->
<DIV align=center>
<DIV class=page style="WIDTH: 100%; TEXT-ALIGN: left">
<DIV
style="PADDING-RIGHT: 25px; PADDING-LEFT: 25px; PADDING-BOTTOM: 0px; PADDING-TOP: 0px"
align=left>
<DIV id=edit9589678
style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 6px; PADDING-TOP: 0px"><!-- this is not the last post shown on the page --><!-- chenc 修改显示大图自动撑开表格 -->
<TABLE class=tborder id=post9589678
style="TABLE-LAYOUT: auto; WORD-BREAK: break-all" cellSpacing=0 cellPadding=6
width="100%" align=center border=0><!-- /chenc 修改显示大图自动撑开表格 -->
<TBODY>
<TR>
<TD class=thead
style="BORDER-RIGHT: #000000 0px solid; BORDER-TOP: #000000 1px solid; FONT-WEIGHT: normal; BORDER-LEFT: #000000 1px solid; BORDER-BOTTOM: #000000 1px solid"
width=175><!-- status icon and date --><A name=post9589678><IMG
class=inlineimg alt=旧
src="水面渲染 --(转载) - 火星时代社区-全球领先的数字艺术媒体_files/post_old.gif" border=0></A>
2007-05-18 , 19:02 <!-- / status icon and date --></TD>
<TD class=thead
style="BORDER-RIGHT: #000000 1px solid; BORDER-TOP: #000000 1px solid; FONT-WEIGHT: normal; BORDER-LEFT: #000000 0px solid; BORDER-BOTTOM: #000000 1px solid"
align=right> #<A id=postcount9589678
href="http://bbs.hxsd.com/showpost.php?p=9589678&postcount=2"
target=new rel=nofollow name=2><STRONG>2</STRONG></A> </TD></TR>
<TR vAlign=top>
<TD class=alt2
style="BORDER-RIGHT: #000000 1px solid; BORDER-TOP: #000000 0px solid; BORDER-LEFT: #000000 1px solid; BORDER-BOTTOM: #000000 0px solid"
width=175><!-- vbPlaza start chenc 补充名片区宽度限制 -->
<DIV id=postmenu_9589678 style="WIDTH: 175px"><!-- vbPlaza end chenc 补充名片区宽度限制 --><A
class=bigusername2
href="http://bbs.hxsd.com/member.php?u=88787">shenxue</A>
<SCRIPT
type=text/javascript> vbmenu_register("postmenu_9589678", true); </SCRIPT>
</DIV><!-- chenc修改显示自定义头衔 --><!-- /chenc修改显示自定义头衔 --> <BR><!-- vbPlaza修改显示官方头衔-->
<DIV class=smallfont><FONT color=red>【火星荣誉会员】</FONT> </DIV><!-- /vbPlaza修改显示官方头衔-->
<DIV class=smallfont><BR><!-- chenc修改显示UID -->
<DIV><STRONG>UID:</STRONG> 88787 </DIV><!-- /chenc修改显示UID -->
<DIV><STRONG>帖子:</STRONG> 1673 </DIV><!-- chenc 修改显示积分 -->
<DIV><A
href="http://bbs.hxsd.com/search.php?do=finduser&u=88787&viewreputation=1"
rel=nofollow><STRONG>积分</A>:</STRONG> 115 <IMG class=inlineimg
alt="shenxue 即将成为的新星"
src="水面渲染 --(转载) - 火星时代社区-全球领先的数字艺术媒体_files/reputation_pos.gif"
border=0><IMG class=inlineimg alt="shenxue 即将成为的新星"
src="水面渲染 --(转载) - 火星时代社区-全球领先的数字艺术媒体_files/reputation_pos.gif"
border=0></DIV><!-- /chenc 修改显示积分 --><!-- vbPlaza start chenc 修改显示资产--><STRONG>火星币:</STRONG>
998<BR><!-- vbPlaza end chenc 修改显示资产-->
<DIV></DIV><!-- show awards --><!-- /show awards --><!-- show blog --><!-- /show blog --><!-- show question -->
<DIV id=userquestion887879589678 style="DISPLAY: none">
<FIELDSET><LEGEND>shenxue 的问题</LEGEND>
<DIV
style="PADDING-RIGHT: 5px; PADDING-LEFT: 5px; PADDING-BOTTOM: 5px; PADDING-TOP: 5px"><A
href="http://qa.hxsd.com/">还没有问题?</A></DIV></FIELDSET> </DIV><!-- /show question --></DIV></TD>
<TD class=alt1 id=td_post_9589678 style="BORDER-RIGHT: #000000 1px solid"><!-- icon and title -->
<DIV class=smallfont><IMG class=inlineimg alt=默认
src="水面渲染 --(转载) - 火星时代社区-全球领先的数字艺术媒体_files/icon1.gif" border=0>
<STRONG>Re:水面渲染 --(转载)</STRONG> <!-- zGia! reputation begin --><!-- zGia! reputation end --></DIV>
<HR style="COLOR: #000000" SIZE=1>
<!-- / icon and title --><!-- message -->
<DIV class=post_contents id=post_message_9589678
style="FONT-SIZE: 14px; LINE-HEIGHT: 24px">一.
水面动画<BR><BR>当然,第一步就是让水面运动起来。对均匀网格来说,需要计算出每个顶点的位置和法线。实际上,如果仅模拟比较平静的水面,甚至只需计算法线就行了,这也是目前游戏中常见的做法。<BR><BR>仅使用法线来模拟水面的好处是可以极大的简化几何模型,最简单的情况下,一个网格就能代表整个水面,你甚至不必担心如何处理LOD计算。它的实现思想就是bump
mapping,区别在于这里我们使用动态的normal map。可以实时计算出每条法线的位置,也可以从预先处理好的normal
map中获得这些信息。显然,适用后者计算量可以减少很多。在Farcry中,水面实际上只使用了一张normal map,在vertex
shader中,对纹理坐标进行不同的缩放和偏移,从而获得动态水面。对这种方法来说,normal
map质量的好坏对最终效果有很大影响。下面的代码显示了通过混合三层不同的波来模拟水面的情况:<BR><BR>bumpCoord1 =
texCoord + time*0.02;<BR><BR>bumpCoord2 = texCoord * 2.0f + time *
0.02;<BR><BR>bumpCoord3 = texCoord / 2.0f + time * 0.01;<BR><BR>half3
vBumpTexA = tex2D(tex0, bumpCoord1).xyz;<BR><BR>half3 vBumpTexB =
tex2D(tex0, bumpCoord2).xyz;<BR><BR>half3 vBumpTexC = tex2D(tex0,
bumpCoord3).xyz;<BR><BR>half3 vBumpTex = normalize(2.0 * (vBumpTexA.xyz +
vBumpTexB.xyz+vBumpTexC.xyz) -
3.0);<BR><BR><BR><BR>上述方法最大的缺点就是对于起伏较大的水面来说,就无能为力了,由于仅仅使用法线来表示水面起伏,因此,当近距离观察时,可以看到水面实际是静止的。为了进一步增加真实性,让顶点真正运动起来是必须的。如何来计算水面运动呢?简单来说,可以把水面运动看作一系列正弦或余弦波的叠加。根据不同的时间和顶点坐标位置,计算出当前顶点的高度。然而,实践中我们却更偏向于适用Gerstner
Wave。以下是3D Gerstner
Wave的3D波动方程,注意这里的x是一个矢量x(x,z),代表顶点的坐标位置,w为角速度,k为波矢量,k为波数,x0为顶点的初始位置。<BR><IMG
alt="" src="水面渲染 --(转载) - 火星时代社区-全球领先的数字艺术媒体_files/14713843.jpg"
border=0></DIV><!-- / message --><BR></TD></TR>
<TR>
<TD class=alt2
style="BORDER-RIGHT: #000000 1px solid; BORDER-TOP: #000000 0px solid; BORDER-LEFT: #000000 1px solid; BORDER-BOTTOM: #000000 1px solid"><IMG
class=inlineimg alt="shenxue 当前离线"
src="水面渲染 --(转载) - 火星时代社区-全球领先的数字艺术媒体_files/user_offline.gif" border=0>
</TD>
<TD class=alt1
style="BORDER-RIGHT: #000000 1px solid; BORDER-TOP: #000000 0px solid; BORDER-LEFT: #000000 0px solid; BORDER-BOTTOM: #000000 1px solid"
align=right><!-- controls --><A
onclick="self.scrollTo(0, 0); return false;"
href="http://bbs.hxsd.com/showthread.php?t=9589660#top"><IMG
src="水面渲染 --(转载) - 火星时代社区-全球领先的数字艺术媒体_files/top.gif" border=0></A> <!-- / controls --></TD></TR></TBODY></TABLE><!-- post 9589678 popup menu -->
<DIV class=vbmenu_popup id=postmenu_9589678_menu style="DISPLAY: none">
<TABLE cellSpacing=1 cellPadding=4 border=0>
<TBODY>
<TR>
<TD class=thead>shenxue</TD></TR>
<TR>
<TD class=vbmenu_option><A
href="http://bbs.hxsd.com/member.php?u=88787">查看公开信息</A></TD></TR>
<TR>
<TD class=vbmenu_option><A
href="http://bbs.hxsd.com/private.php?do=newpm&u=88787"
rel=nofollow>发送悄悄话给 shenxue </A></TD></TR>
<TR>
<TD class=vbmenu_option><A
href="http://bbs.hxsd.com/search.php?do=finduser&u=88787"
rel=nofollow>查找 shenxue 发表的更多帖子 </A></TD></TR><!-- zGia! goodish thread begin -->
<TR>
<TD class=vbmenu_option><A
href="http://bbs.hxsd.com/search.php?do=finduser&u=88787&starteronly=1&viewgoodish=1"
rel=nofollow>查找 shenxue 发表的精华主题 </A></TD></TR><!-- zGia! goodish thread end --></TBODY></TABLE></DIV><!-- / post 9589678 popup menu --></DIV></DIV></DIV></DIV><!-- / close content container --><!-- / post #9589678 --><!-- post #9589688 --><!-- open content container -->
<DIV align=center>
<DIV class=page style="WIDTH: 100%; TEXT-ALIGN: left">
<DIV
style="PADDING-RIGHT: 25px; PADDING-LEFT: 25px; PADDING-BOTTOM: 0px; PADDING-TOP: 0px"
align=left>
<DIV id=edit9589688
style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 6px; PADDING-TOP: 0px"><!-- this is not the last post shown on the page --><!-- chenc 修改显示大图自动撑开表格 -->
<TABLE class=tborder id=post9589688
style="TABLE-LAYOUT: auto; WORD-BREAK: break-all" cellSpacing=0 cellPadding=6
width="100%" align=center border=0><!-- /chenc 修改显示大图自动撑开表格 -->
<TBODY>
<TR>
<TD class=thead
style="BORDER-RIGHT: #000000 0px solid; BORDER-TOP: #000000 1px solid; FONT-WEIGHT: normal; BORDER-LEFT: #000000 1px solid; BORDER-BOTTOM: #000000 1px solid"
width=175><!-- status icon and date --><A name=post9589688><IMG
class=inlineimg alt=旧
src="水面渲染 --(转载) - 火星时代社区-全球领先的数字艺术媒体_files/post_old.gif" border=0></A>
2007-05-18 , 19:03 <!-- / status icon and date --></TD>
<TD class=thead
style="BORDER-RIGHT: #000000 1px solid; BORDER-TOP: #000000 1px solid; FONT-WEIGHT: normal; BORDER-LEFT: #000000 0px solid; BORDER-BOTTOM: #000000 1px solid"
align=right> #<A id=postcount9589688
href="http://bbs.hxsd.com/showpost.php?p=9589688&postcount=3"
target=new rel=nofollow name=3><STRONG>3</STRONG></A> </TD></TR>
<TR vAlign=top>
<TD class=alt2
style="BORDER-RIGHT: #000000 1px solid; BORDER-TOP: #000000 0px solid; BORDER-LEFT: #000000 1px solid; BORDER-BOTTOM: #000000 0px solid"
width=175><!-- vbPlaza start chenc 补充名片区宽度限制 -->
<DIV id=postmenu_9589688 style="WIDTH: 175px"><!-- vbPlaza end chenc 补充名片区宽度限制 --><A
class=bigusername2
href="http://bbs.hxsd.com/member.php?u=88787">shenxue</A>
<SCRIPT
type=text/javascript> vbmenu_register("postmenu_9589688", true); </SCRIPT>
</DIV><!-- chenc修改显示自定义头衔 --><!-- /chenc修改显示自定义头衔 --> <BR><!-- vbPlaza修改显示官方头衔-->
<DIV class=smallfont><FONT color=red>【火星荣誉会员】</FONT> </DIV><!-- /vbPlaza修改显示官方头衔-->
<DIV class=smallfont><BR><!-- chenc修改显示UID -->
<DIV><STRONG>UID:</STRONG> 88787 </DIV><!-- /chenc修改显示UID -->
<DIV><STRONG>帖子:</STRONG> 1673 </DIV><!-- chenc 修改显示积分 -->
<DIV><A
href="http://bbs.hxsd.com/search.php?do=finduser&u=88787&viewreputation=1"
rel=nofollow><STRONG>积分</A>:</STRONG> 115 <IMG class=inlineimg
alt="shenxue 即将成为的新星"
src="水面渲染 --(转载) - 火星时代社区-全球领先的数字艺术媒体_files/reputation_pos.gif"
border=0><IMG class=inlineimg alt="shenxue 即将成为的新星"
src="水面渲染 --(转载) - 火星时代社区-全球领先的数字艺术媒体_files/reputation_pos.gif"
border=0></DIV><!-- /chenc 修改显示积分 --><!-- vbPlaza start chenc 修改显示资产--><STRONG>火星币:</STRONG>
998<BR><!-- vbPlaza end chenc 修改显示资产-->
<DIV></DIV><!-- show awards --><!-- /show awards --><!-- show blog --><!-- /show blog --><!-- show question -->
<DIV id=userquestion887879589688 style="DISPLAY: none">
<FIELDSET><LEGEND>shenxue 的问题</LEGEND>
<DIV
style="PADDING-RIGHT: 5px; PADDING-LEFT: 5px; PADDING-BOTTOM: 5px; PADDING-TOP: 5px"><A
href="http://qa.hxsd.com/">还没有问题?</A></DIV></FIELDSET> </DIV><!-- /show question --></DIV></TD>
<TD class=alt1 id=td_post_9589688 style="BORDER-RIGHT: #000000 1px solid"><!-- icon and title -->
<DIV class=smallfont><IMG class=inlineimg alt=默认
src="水面渲染 --(转载) - 火星时代社区-全球领先的数字艺术媒体_files/icon1.gif" border=0>
<STRONG>Re:水面渲染 --(转载)</STRONG> <!-- zGia! reputation begin --><!-- zGia! reputation end --></DIV>
<HR style="COLOR: #000000" SIZE=1>
<!-- / icon and title --><!-- message -->
<DIV class=post_contents id=post_message_9589688
style="FONT-SIZE: 14px; LINE-HEIGHT: 24px">从数学角度来看,Gerstner
Wave并不比普通的正余弦波动方程复杂,但他的波形却更像水波。对于正余弦波来说,波峰和波谷波的弧度都是均匀的,而实际上水波的波峰要尖一些,波峰则要圆滑。注意上述方程中对给定顶点x0来说,不同时刻,水平位置也是不同的,因此可以正确模拟出这种效果。多个Gerstner
Wave相互叠加,就能模拟出相当不错的水面。有了水面高度,进一步对方程求导,就能计算出法线。<BR><BR>有时,你也许需要渲染电影级真实度的水面,那么这种简单波形叠加的方法也许就有些力不从心。可以适用FFT来模拟更真实的水面,它使用了统计波的模型(statistical
wave
model),通过快速傅立叶(FFT)变换求值。基本的思想是创建一个类似海面的,具有相同频谱的波形域,然后通过傅立叶变换转换到空间域。因此,水体表面实际上就是由许多由风产生的正弦波线性叠加而成。以下是所使用的波形方程:<BR><IMG
alt="" src="水面渲染 --(转载) - 火星时代社区-全球领先的数字艺术媒体_files/76926170.jpg"
border=0></DIV><!-- / message --><BR></TD></TR>
<TR>
<TD class=alt2
style="BORDER-RIGHT: #000000 1px solid; BORDER-TOP: #000000 0px solid; BORDER-LEFT: #000000 1px solid; BORDER-BOTTOM: #000000 1px solid"><IMG
class=inlineimg alt="shenxue 当前离线"
src="水面渲染 --(转载) - 火星时代社区-全球领先的数字艺术媒体_files/user_offline.gif" border=0>
</TD>
<TD class=alt1
style="BORDER-RIGHT: #000000 1px solid; BORDER-TOP: #000000 0px solid; BORDER-LEFT: #000000 0px solid; BORDER-BOTTOM: #000000 1px solid"
align=right><!-- controls --><A
onclick="self.scrollTo(0, 0); return false;"
href="http://bbs.hxsd.com/showthread.php?t=9589660#top"><IMG
src="水面渲染 --(转载) - 火星时代社区-全球领先的数字艺术媒体_files/top.gif" border=0></A> <!-- / controls --></TD></TR></TBODY></TABLE><!-- post 9589688 popup menu -->
<DIV class=vbmenu_popup id=postmenu_9589688_menu style="DISPLAY: none">
<TABLE cellSpacing=1 cellPadding=4 border=0>
<TBODY>
<TR>
<TD class=thead>shenxue</TD></TR>
<TR>
<TD class=vbmenu_option><A
href="http://bbs.hxsd.com/member.php?u=88787">查看公开信息</A></TD></TR>
<TR>
<TD class=vbmenu_option><A
href="http://bbs.hxsd.com/private.php?do=newpm&u=88787"
rel=nofollow>发送悄悄话给 shenxue </A></TD></TR>
<TR>
<TD class=vbmenu_option><A
href="http://bbs.hxsd.com/search.php?do=finduser&u=88787"
rel=nofollow>查找 shenxue 发表的更多帖子 </A></TD></TR><!-- zGia! goodish thread begin -->
<TR>
<TD class=vbmenu_option><A
href="http://bbs.hxsd.com/search.php?do=finduser&u=88787&starteronly=1&viewgoodish=1"
rel=nofollow>查找 shenxue 发表的精华主题 </A></TD></TR><!-- zGia! goodish thread end --></TBODY></TABLE></DIV><!-- / post 9589688 popup menu --></DIV></DIV></DIV></DIV><!-- / close content container --><!-- / post #9589688 --><!-- post #9589693 --><!-- open content container -->
<DIV align=center>
<DIV class=page style="
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -