游戏开发论坛

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

[讨论]Direct3D中如何实现多光照的Shader?

[复制链接]

12

主题

38

帖子

38

积分

注册会员

Rank: 2

积分
38
发表于 2005-3-3 20:22:00 | 显示全部楼层 |阅读模式
怎么实现能够适应多个不同光源的Shader呢?

要能够自动适应多个光源,并且针对点光源,平行光作不同的处理。那么shader里应该怎么写呢?

1. 如果在Shader中写个for循环的话,低版本的shader是不支持循环次数是变量的。

2. 如果用程序控制写多个pass,每个pass传不同光源的话,会有性能上的浪费。因为坐标变换实际上是不用重复算这么多次的。

大家讨论一下吧

59

主题

1104

帖子

1199

积分

金牌会员

Rank: 6Rank: 6

积分
1199
发表于 2005-3-3 20:34:00 | 显示全部楼层

Re:[讨论]Direct3D中如何实现多光照的Shader?

多个pass吧,GPU不是CPU。。

12

主题

38

帖子

38

积分

注册会员

Rank: 2

积分
38
 楼主| 发表于 2005-3-3 21:25:00 | 显示全部楼层

Re:[讨论]Direct3D中如何实现多光照的Shader?

那么一般的空间变换还则罢了,如果需要变换的向量较多(如法线什么的)也就忍了,如果还有骨骼皮肤动画...不知道同让HLSL的编译器把for展开,哪个开销更大

59

主题

1104

帖子

1199

积分

金牌会员

Rank: 6Rank: 6

积分
1199
发表于 2005-3-3 21:56:00 | 显示全部楼层

Re:[讨论]Direct3D中如何实现多光照的Shader?

骨骼动画还是不要放到shader里面做了。。-。-

6

主题

444

帖子

457

积分

中级会员

Rank: 3Rank: 3

积分
457
发表于 2005-3-3 22:03:00 | 显示全部楼层

Re:[讨论]Direct3D中如何实现多光照的Shader?

延迟渲染(Deferred Rendering)是比较理想的多光源解决办法,不过缺点也比较明显比如AA问题,显存带宽瓶颈,硬件需求等等……

31

主题

630

帖子

635

积分

高级会员

Rank: 4

积分
635
发表于 2005-3-4 12:15:00 | 显示全部楼层

Re:[讨论]Direct3D中如何实现多光照的Shader?

我就是用shader实现的骨骼,没什么问题呀。

31

主题

630

帖子

635

积分

高级会员

Rank: 4

积分
635
发表于 2005-3-4 12:26:00 | 显示全部楼层

Re:[讨论]Direct3D中如何实现多光照的Shader?

ps_2_0有64个指令的限制,如果多个光照,再加上反光贴图、凹凸贴图,估计得用多个pass.

31

主题

630

帖子

635

积分

高级会员

Rank: 4

积分
635
发表于 2005-3-4 12:30:00 | 显示全部楼层

Re:[讨论]Direct3D中如何实现多光照的Shader?

用shader实现的骨骼的缺陷就是,每个pass得跑一遍骨骼程序。
但是骨骼并没有什么计算量:
    float4 position = weight.x * mul(bones[index.x], IN.position);
    position += weight.y * mul(bones[index.y], IN.position);
    float3 normal = weight.x * mul(bones[index.x], IN.normal);
    normal += weight.y * mul(bones[index.y], IN.normal);

6

主题

444

帖子

457

积分

中级会员

Rank: 3Rank: 3

积分
457
发表于 2005-3-4 13:03:00 | 显示全部楼层

Re:[讨论]Direct3D中如何实现多光照的Shader?

http://www.ati.com/developer/gdc/D3DTutorial_DeferredShading.pdf

12

主题

38

帖子

38

积分

注册会员

Rank: 2

积分
38
 楼主| 发表于 2005-3-4 13:14:00 | 显示全部楼层

Re: Re:[讨论]Direct3D中如何实现多光照的Shader?

fujingqiu: Re:[讨论]Direct3D中如何实现多光照的Shader?

用shader实现的骨骼的缺陷就是,每个pass得跑一遍骨骼程序。
但是骨骼并没有什么计算量:
    float4 pos...


这个...如果每个定点受多块骨头的影响...还有有一定开销的
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-23 23:53

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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