游戏开发论坛

 找回密码
 立即注册
搜索
查看: 4889|回复: 13

一点点NV显卡硬件shadow map的资料

[复制链接]

19

主题

638

帖子

638

积分

高级会员

Rank: 4

积分
638
发表于 2009-1-15 10:08:00 | 显示全部楼层 |阅读模式
经常有人找这个,今天偶然发现一段,贴过来:
要使用NV的硬件shadow map支持,要使用NV的FOURCC纹理格式,GeForce6/7只能用"RAWZ",是每点分成4个成员的,需要组合解码,不太方便,解码也会有误差。GeForce8支持直接每点为整数的"INTZ",比较实用。

"No z-compare" z-buffers are exposed as a separate FOURCC format ('RAWZ'
on NV4x and 'INTZ' on G8x).
To create a RAWZ z-buffer, just do:
1. On GeForce 6/7 series use: (D3DFORMAT)MAKEFOURCC('R','A','W','Z')
2. On GeForce 8 series use: (D3DFORMAT)MAKEFOURCC('I','N','T','Z')
例:
m_pd3dDevice->CreateTexture(TEXDEPTH_WIDTH, TEXDEPTH_HEIGHT, 1,
D3DUSAGE_DEPTHSTENCIL, (D3DFORMAT)MAKEFOURCC('I','N','T','Z'),
D3DPOOL_DEFAULT, &m_pSMZTexture, NULL)
然后将这个纹理的第一层surface设置到depth buffer。

不过个人不喜欢用这个,因为不是通用的,宁愿用shader来做。

19

主题

638

帖子

638

积分

高级会员

Rank: 4

积分
638
 楼主| 发表于 2009-1-15 10:13:00 | 显示全部楼层

Re:一点点NV显卡硬件shadow map的资料

解码RAWZ数据的代码:

float3 rawval = floor( 255.0 * tex2D(RawZSampler, tcoord).arg + 0.5);
float z = dot( rawval, float3(0.996093809371817670572857294849,
    0.0038909914428586627756752238080039,
    1.5199185323666651467481343000015e-5) / 255.0);

227

主题

1793

帖子

1866

积分

金牌会员

Rank: 6Rank: 6

积分
1866
发表于 2009-1-15 17:51:00 | 显示全部楼层

Re:一点点NV显卡硬件shadow map的资料

请问如何把float z转为float3 rawval?

72

主题

447

帖子

454

积分

中级会员

Rank: 3Rank: 3

积分
454
QQ
发表于 2009-1-16 08:57:00 | 显示全部楼层

Re: Re:一点点NV显卡硬件shadow map的资料

oz01: Re:一点点NV显卡硬件shadow map的资料

请问如何把float z转为float3 rawval?


一个是标量 一个是矢量

19

主题

638

帖子

638

积分

高级会员

Rank: 4

积分
638
 楼主| 发表于 2009-1-16 15:15:00 | 显示全部楼层

Re: Re:一点点NV显卡硬件shadow map的资料

oz01: Re:一点点NV显卡硬件shadow map的资料

请问如何把float z转为float3 rawval?

为什么要反向转?

227

主题

1793

帖子

1866

积分

金牌会员

Rank: 6Rank: 6

积分
1866
发表于 2009-1-17 15:28:00 | 显示全部楼层

Re:一点点NV显卡硬件shadow map的资料

我没理解错的话
这个方法RAWZ就是把深度值打包到RGB
之后再从RGB解包回来
对吧?

19

主题

638

帖子

638

积分

高级会员

Rank: 4

积分
638
 楼主| 发表于 2009-1-17 23:28:00 | 显示全部楼层

Re: Re:一点点NV显卡硬件shadow map的资料

oz01: Re:一点点NV显卡硬件shadow map的资料

我没理解错的话
这个方法RAWZ就是把深度值打包到RGB
之后再从RGB解包回来
对吧?


没错,区别是打包过程是硬件做的,速度比用shader快很多

227

主题

1793

帖子

1866

积分

金牌会员

Rank: 6Rank: 6

积分
1866
发表于 2009-1-18 10:23:00 | 显示全部楼层

Re:一点点NV显卡硬件shadow map的资料

orz
我的显卡是X550
不可能有硬件支持的
请问有没有啥通用性比较强的方法?

19

主题

638

帖子

638

积分

高级会员

Rank: 4

积分
638
 楼主| 发表于 2009-1-18 11:12:00 | 显示全部楼层

Re: Re:一点点NV显卡硬件shadow map的资料

oz01: Re:一点点NV显卡硬件shadow map的资料

orz
我的显卡是X550
不可能有硬件支持的
请问有没有啥通用性比较强的方法?


要通用就得用shader把深度写入纹理了,DX9级的显卡都支持32位浮点纹理,比较方便,而老显卡就只能象这个RAWZ格式一样把Z值打包到RGB了。

227

主题

1793

帖子

1866

积分

金牌会员

Rank: 6Rank: 6

积分
1866
发表于 2009-1-19 09:32:00 | 显示全部楼层

Re:一点点NV显卡硬件shadow map的资料

具体该怎么打包?
你只给出了解包……
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-20 11:05

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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