游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2305|回复: 8

求助(急)!!shadow volume的问题。

[复制链接]

65

主题

518

帖子

521

积分

高级会员

Rank: 4

积分
521
发表于 2006-11-17 20:23:00 | 显示全部楼层 |阅读模式
小弟在作shadow volume时候碰到这样的问题:当观察点(eyePos)进入到阴影体内部时,阴影体原先面法向量的朝向观察点的面全都看不到了,这样本该在写stencil的时候有的Increment和Decrease这两个过程会缺少一个(三角面朝向反了,自然不会写到pixel里面)。也就是画面中对应stencil值本该回0的像素没回去。渲染出来的阴影就错误了。这种情况应该怎么办哪?
sf_20061117202313.jpg

65

主题

518

帖子

521

积分

高级会员

Rank: 4

积分
521
 楼主| 发表于 2006-11-17 20:25:00 | 显示全部楼层

Re: 求助(急)!!shadow volume的问题。

上图是错误产生的现象。现面这张是观察点在阴影体外时的样子,应该是正确的吧。
sf_20061117202451.jpg

65

主题

518

帖子

521

积分

高级会员

Rank: 4

积分
521
 楼主| 发表于 2006-11-17 20:44:00 | 显示全部楼层

Re:求助(急)!!shadow volume的问题。

我在Effect里面设置成这样:
pass PASS_STENCIL_CCW
{       
        CullMode        = CCW ;
        AlphaBlendEnable= TRUE ;
        SrcBlend        = ZERO ;
        DestBlend        = ONE ;               
        ZEnable        = TRUE ;
        ZWriteEnable        = FALSE ;
               
        StencilEnable        = TRUE;
        StencilRef        = 0x1;
        StencilMask        = 0xffffffff;
        StencilWriteMask        = 0xffffffff;
        StencilPass        = INCR;
        StencilFunc        = ALWAYS;
        StencilZFail        = KEEP;
}
       
pass PASS_STENCIL_CW
{
               
        CullMode = CW ;
        AlphaBlendEnable = TRUE ;
        SrcBlend = ZERO ;
        DestBlend = ONE ;               
        ZEnable = TRUE ;
        ZWriteEnable = FALSE ;               
        StencilEnable = TRUE;
        StencilRef = 0x1;
        StencilMask = 0xffffffff;
        StencilWriteMask        = 0xffffffff;
        StencilPass = DECR;
        StencilFunc = ALWAYS;
        StencilZFail = KEEP;
}       
       
pass PASS_SCREEN_SHADE
{
AlphaBlendEnable        = TRUE ;
BlendOp                = ADD ;
SrcBlend                = SRCALPHA ;
DestBlend                = INVSRCALPHA ;                       
StencilEnable        = TRUE;
CullMode                = CCW;
StencilPass                = KEEP;
StencilFunc                = NOTEQUAL;
StencilRef                = 0;
ZEnable                = FALSE;
}

5

主题

686

帖子

697

积分

高级会员

Rank: 4

积分
697
QQ
发表于 2006-11-18 11:20:00 | 显示全部楼层

Re:求助(急)!!shadow volume的问题。

CCW时Z_FAIL加1,CW时Z_FAIL减1
渲染时模板值大于等于1再画Quad

65

主题

518

帖子

521

积分

高级会员

Rank: 4

积分
521
 楼主| 发表于 2006-11-18 17:34:00 | 显示全部楼层

Re:求助(急)!!shadow volume的问题。

谢谢jk20012001,我回家就去试试.

65

主题

518

帖子

521

积分

高级会员

Rank: 4

积分
521
 楼主| 发表于 2006-11-18 21:13:00 | 显示全部楼层

Re:求助(急)!!shadow volume的问题。

改过之后发现还是不对,而且问题更严重了,连在阴影体外面都不对了。

65

主题

518

帖子

521

积分

高级会员

Rank: 4

积分
521
 楼主| 发表于 2006-11-19 18:41:00 | 显示全部楼层

Re:求助(急)!!shadow volume的问题。

我好像是搞错了。我原来健的shadow volume只含有degenerate quads,也就是说经过拉伸之后的shadow volume没有“盖子”。后来我试着把面都填死了,渲染出来就对了。但是最后绘制screen quad的时候采用的是:
    Stencilfunc = LESS ;
    stencilref = 0 ;

5

主题

686

帖子

697

积分

高级会员

Rank: 4

积分
697
QQ
发表于 2006-11-22 10:35:00 | 显示全部楼层

Re:求助(急)!!shadow volume的问题。

SV其实挺恶心的。。。渲染次数多,对模型的适应性也不大好,DegenerateQuad在模型动画里面用也很不方便,还是改用SM吧

36

主题

1047

帖子

1147

积分

金牌会员

Rank: 6Rank: 6

积分
1147
发表于 2006-11-22 11:57:00 | 显示全部楼层

Re:求助(急)!!shadow volume的问题。

貌似目前游戏中使用的大多是 sv,sm 自阴影不能。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-25 22:14

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表