游戏开发论坛

 找回密码
 立即注册
搜索
楼主: oz01

请问在shader里如何获取当前点的深度值?

[复制链接]

5

主题

686

帖子

697

积分

高级会员

Rank: 4

积分
697
QQ
发表于 2008-12-6 12:51:00 | 显示全部楼层

Re:请问在shader里如何获取当前点的深度值?

你可以用摄像机空间的深度,不要用其次剪裁空间的深度值,前者对小数点后的数字精度没有后者敏感,对你提高RGB888打包精度可能会有些帮助,不过就是要注意数据溢出,毕竟摄像机空间的深度值比较大

227

主题

1793

帖子

1866

积分

金牌会员

Rank: 6Rank: 6

积分
1866
 楼主| 发表于 2008-12-6 18:15:00 | 显示全部楼层

Re:请问在shader里如何获取当前点的深度值?

数据肯定不会有溢出
我估计问题出在数据打包上
打包:
OUT.color.r=floor(IN.color0.b)/255.0;
OUT.color.g=frac(IN.color0.b);
OUT.color.b=frac(IN.color0.b*255.0);
解包:
float posz=colorposZ.r*255.0+colorposZ.g+colorposZ.b/255.0;

227

主题

1793

帖子

1866

积分

金牌会员

Rank: 6Rank: 6

积分
1866
 楼主| 发表于 2008-12-6 18:20:00 | 显示全部楼层

Re: 请问在shader里如何获取当前点的深度值?

结果就这样............

59

主题

984

帖子

1200

积分

金牌会员

Rank: 6Rank: 6

积分
1200
发表于 2008-12-6 20:51:00 | 显示全部楼层

Re:请问在shader里如何获取当前点的深度值?

这个看起有点像depth bias引起的问题

楼主试了9楼的方法没有
多渲染一次,把z值写进endertarget里面,纹理格式用32或者16位浮点

另外,X550本来就不是很强的显卡,做shadow mapping和HDR都很影响性能

227

主题

1793

帖子

1866

积分

金牌会员

Rank: 6Rank: 6

积分
1866
 楼主| 发表于 2008-12-6 20:59:00 | 显示全部楼层

Re:请问在shader里如何获取当前点的深度值?

32或者16位浮点会导致速度极慢
8位RGBA则非常快
现在已经2次渲染了
一次渲染阴影图
一次渲染可视模型

19

主题

638

帖子

638

积分

高级会员

Rank: 4

积分
638
发表于 2008-12-6 21:31:00 | 显示全部楼层

Re:请问在shader里如何获取当前点的深度值?

那个图的效果和精度有关,但即使精度没问题也会出类似的问题,比较深度时加个很小的偏移是必要的。

按理说OpenGL也应该能在你的显卡上支持浮点纹理的,要不你还是考虑换DX吧……

227

主题

1793

帖子

1866

积分

金牌会员

Rank: 6Rank: 6

积分
1866
 楼主| 发表于 2008-12-6 22:18:00 | 显示全部楼层

Re:请问在shader里如何获取当前点的深度值?

目前这个程序可以在linux下编译运行.............
浮点纹理并不是必须的
问题肯定出在对Z值打包解包的过程

5

主题

972

帖子

975

积分

高级会员

Rank: 4

积分
975
发表于 2008-12-7 07:57:00 | 显示全部楼层

Re:请问在shader里如何获取当前点的深度值?

polygon offset

59

主题

984

帖子

1200

积分

金牌会员

Rank: 6Rank: 6

积分
1200
发表于 2008-12-7 14:02:00 | 显示全部楼层

Re:请问在shader里如何获取当前点的深度值?

GPU Gems里那片文章用的是距离的平方进行打包
lz在计算时有没有弄错

如果是window上的dx程序,可以用pix或者perfHUD这些工具debug一下shader
linux下偶就不太清楚了

19

主题

638

帖子

638

积分

高级会员

Rank: 4

积分
638
发表于 2008-12-7 14:04:00 | 显示全部楼层

Re: Re:请问在shader里如何获取当前点的深度值?

oz01: Re:请问在shader里如何获取当前点的深度值?

浮点纹理并不是必须的
问题肯定出在对Z值打包解包的过程

问题不.在.那.
在于要将从纹理里取得的Z值向远处做个很小的偏移,也就是加个偏移量,使本来相同位置的表面错开一点
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-20 18:49

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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