游戏开发论坛

 找回密码
 立即注册
搜索
查看: 14949|回复: 24

D3D光照模型与色彩来源全分析

[复制链接]

362

主题

3023

帖子

3553

积分

论坛元老

Rank: 8Rank: 8

积分
3553
发表于 2008-4-10 15:48:00 | 显示全部楼层 |阅读模式
d3d的光照,色彩模型比较龌龊。脱离实际。而且,
即不能实现许多真实的效果,又比真实的光照,色彩模型来的繁琐。

付:图一张(反复试验,画成此图)

一般来说,材质的Ambient==Diffuse,灯光Ambient==0,这样就比较真实了。
实际上D3DUtil也是这么做的。
还有文理阶段的Diffuse和光照阶段的Diffuse意义不同,前者具有真实的物理意义。

建议大家封装自己的Light,Material的时候,不要采用d3d原有的这种龌龊的模型。
sf_2008410154825.jpg

15

主题

202

帖子

207

积分

中级会员

Rank: 3Rank: 3

积分
207
QQ
发表于 2008-4-13 11:40:00 | 显示全部楼层

Re:D3D光照模型与色彩来源全分析

你的头像..

121

主题

2029

帖子

2034

积分

金牌会员

Rank: 6Rank: 6

积分
2034
QQ
发表于 2008-4-13 12:25:00 | 显示全部楼层

Re:D3D光照模型与色彩来源全分析

固顶管线是如此,如果是可编程管线就只有寄存器的概念。别的都是渣。

362

主题

3023

帖子

3553

积分

论坛元老

Rank: 8Rank: 8

积分
3553
 楼主| 发表于 2008-4-13 21:38:00 | 显示全部楼层

Re:D3D光照模型与色彩来源全分析

前几天被这个搞得烦死了,所以整理出一张图。
我的引擎里已经修改了这种固定管线光照和材质。

typedef struct _MATERIAL
{
    FLOATCOLOR Diffuse;        //  0 - 15
    FLOATCOLOR Specular;        // 16 - 31
    FLOATCOLOR Emissive;        // 32 - 47
    Float Power;                // 48 - 51
}MATERIAL;

typedef enum _LIGHTTYPE // 4 bytes
{
    LIGHT_POINT = 1,
    LIGHT_SPOT = 2,
    LIGHT_DIRECTIONAL = 3,
    _FORCE_DWORD = 0x7fffffff,
}LIGHTTYPE;

typedef struct _LIGHT
{
    FLOATCOLOR Color;                // 0  - 15

    LIGHTTYPE Type;                        // 16 - 19

    UInt32 _unused;                        // 20 - 23

    VEC3 Pos;                                // 24 - 35
    VEC3 Dir;                                // 36 - 47

    Float Range;                        // 48 - 51
    Float Falloff;
    Float Attenuation0;
    Float Attenuation1;
    Float Attenuation2;
    Float Theta;
    Float Phi;
}LIGHT;

362

主题

3023

帖子

3553

积分

论坛元老

Rank: 8Rank: 8

积分
3553
 楼主| 发表于 2008-4-26 17:22:00 | 显示全部楼层

Re: D3D光照模型与色彩来源全分析

有个地方错了,我修一下:
D3DRS_SPECULARENABLE==TRUE的时候,
高光会附加到D3DTA_Diffuse上面去,
可以不使用D3DTA_Specular

如果D3DRS_SPECULARENABLE==FALSE,不是说没有高光,
而是,高光不会附加到D3DTA_Diffuse中,
但我们仍然可以通过D3DTA_Specular使用高光。

这和很多资料上面写的大有出入。
D3DRS_SPECULARENABLE并不是高光的开关!

再说下alpha的问题,
不论光照是否开启,D3DRS_SPECULARENABLE是否开启,
D3DTA_Specular的alpha永远==0

D3DTA_Diffuse的alpha值仅仅取自Diffuse,而不受Ambient,Emissive影响。
而且与光照无关!


sf_2008426172220.jpg

362

主题

3023

帖子

3553

积分

论坛元老

Rank: 8Rank: 8

积分
3553
 楼主| 发表于 2008-4-28 17:30:00 | 显示全部楼层

Re:D3D光照模型与色彩来源全分析

在补充下,如果关闭光照,D3DRS_LIGHTING , FALSE
那么,将无法使用材质颜色(取得的是0xffffffff)
但是顶点颜色不受影响。

2

主题

141

帖子

141

积分

注册会员

Rank: 2

积分
141
发表于 2008-4-28 21:28:00 | 显示全部楼层

Re:D3D光照模型与色彩来源全分析

D3D 固定管线的光照并不龌龊、脱离实际 即使open gl也是一样的
数学物理模型就是这样
表现光和影本来就应当用shader的而不是用固定管线的

36

主题

1047

帖子

1147

积分

金牌会员

Rank: 6Rank: 6

积分
1147
发表于 2008-4-29 00:12:00 | 显示全部楼层

Re: Re: D3D光照模型与色彩来源全分析

instemast: Re: D3D光照模型与色彩来源全分析

有个地方错了,我修一下:
D3DRS_SPECULARENABLE==TRUE的时候,
高光会附加到D3DTA_Diffuse上面去,
可以...

关于 specluar alpha,是取自 mateiral 的 specular alpha 值。这个我测试过。

362

主题

3023

帖子

3553

积分

论坛元老

Rank: 8Rank: 8

积分
3553
 楼主| 发表于 2008-4-29 14:43:00 | 显示全部楼层

Re: Re:D3D光照模型与色彩来源全分析

chesskillerboss: Re3D光照模型与色彩来源全分析

D3D 固定管线的光照并不龌龊、脱离实际 即使open gl也是一样的
数学物理模型就是这样
表现光和影本来就应当用shader的而不是用固定管线的


我倒很怀疑你有没有学习过光学

362

主题

3023

帖子

3553

积分

论坛元老

Rank: 8Rank: 8

积分
3553
 楼主| 发表于 2008-4-29 14:48:00 | 显示全部楼层

Re: Re: Re: D3D光照模型与色彩来源全分析

congy: Re: Re: D3D光照模型与色彩来源全分析


关于 specluar alpha,是取自 mateiral 的 specular alpha 值。这个我测试过。


这不可能,我材质的所有alpha都是0xFF,
而且我全部设置了 MSC_MATERIAL 。

而且,就算找你所说,那么,MSC_COLOR1 这个有什么用?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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