游戏开发论坛

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

shader 能实现FLAT着色的效果吗?

[复制链接]

8

主题

716

帖子

716

积分

高级会员

Rank: 4

积分
716
发表于 2006-11-24 10:19:00 | 显示全部楼层

Re:shader 能实现FLAT着色的效果吗?

你已经用了shader,D3DSHADE_FLAT属于FF所以不会起作用。
你要FLAT,PS里直接return float4(1,1,1,1);
或者PS中加一张一半白一半黑的图片
然后用float2(LdotN, 0)去采样作为PS的返回值

8

主题

553

帖子

560

积分

高级会员

Rank: 4

积分
560
发表于 2006-11-24 10:54:00 | 显示全部楼层

Re: Re: Re:shader 能实现FLAT着色的效果吗?

jk20012001: Re: Re:shader 能实现FLAT着色的效果吗?




SM3.0的寄存器已经全部变了,每个寄存器都会内插,不分color还是texcoord,只有SM3.0以前的才可以用shade_flat

请试过在说话,你以为那“包括sm3.0"几个字是随便写的?

8

主题

553

帖子

560

积分

高级会员

Rank: 4

积分
560
发表于 2006-11-24 10:57:00 | 显示全部楼层

Re: Re:shader 能实现FLAT着色的效果吗?

GAMEDESIGNER: Re:shader 能实现FLAT着色的效果吗?

[em10] [em4]
"设置D3DSHADE_FLAT,然后在shader里用color0/1 "

哎~搞了一晚上,还是没搞出...

你还是没明白什么是flat shading....

35

主题

370

帖子

376

积分

中级会员

Rank: 3Rank: 3

积分
376
发表于 2006-11-24 11:04:00 | 显示全部楼层

Re:shader 能实现FLAT着色的效果吗?

       直接用前面的pd3dDevice->SetRenderState(D3DRS_SHADEMODE, D3DSHADE_FLAT);
不用shader就可以flat
--------------------------------------------------------------------------------------------------------------------------
     另外问下马肝大哥:  flat因该是在VS-&gtS(仅指可编程控制部分)之间的流水线决定的吧? 在VS输出顶点纹理坐标和颜色后,PS应该根据VS中输出的两顶点之间的像素个数来进行 纹理坐标(texCoord)插值,亮度插值(diffuse,specular),也就是说PS中用到的纹理坐标不等于VS输出的纹理坐标了?
还是等于,而之间的橡素颜色生成方式是 用顶点颜色插值而不用取纹理颜色.
       flat模式只要PS不使用 插值就行了吧.

26

主题

178

帖子

237

积分

中级会员

Rank: 3Rank: 3

积分
237
发表于 2006-11-24 11:16:00 | 显示全部楼层

Re:shader 能实现FLAT着色的效果吗?

用normal map可以???flat??

oh ???不可以

8

主题

716

帖子

716

积分

高级会员

Rank: 4

积分
716
发表于 2006-11-24 11:34:00 | 显示全部楼层

Re:shader 能实现FLAT着色的效果吗?

geometry的2个vertex中间可能会生成n个fragment,per fragment的属性Interpolation自vertex

所以想要flat,直接设置所有vertex的diffuse = 同色就好了,或者在ps中取单色sampler也意义相同,只不过可以有更多的控制权,像是glossmap、normalmap或者alphamap之类。

26

主题

88

帖子

88

积分

注册会员

Rank: 2

积分
88
 楼主| 发表于 2006-11-24 11:59:00 | 显示全部楼层

Re:shader 能实现FLAT着色的效果吗?

如果 float4 finalDiffuseColor = diffuseColorValue*saturate(dot(lightVir,normal));
to 千里马肝:
1."设置所有vertex的diffuse = 同色",finalDiffuseColor恒等于diffuseColorValue,那岂不是没有明暗效果了?
2.&quotS中加一张一半白一半黑的图片,然后用float2(LdotN, 0)去采样作为PS的返回值"
哎~不明白啊老兄`.黑白图怎么用float2(LdotN, 0)去采样?能写写关键语句么? 一句代码胜过十句话~
3.(to all)
如果不用SHADER,那我当初的问题就不成问题了,也没讨论的意义.要用shader实现,因为以后我还要做specular,reflact等效果~`

26

主题

178

帖子

237

积分

中级会员

Rank: 3Rank: 3

积分
237
发表于 2006-11-24 12:16:00 | 显示全部楼层

Re: Re:shader 能实现FLAT着色的效果吗?

千里马肝: Re:shader 能实现FLAT着色的效果吗?

geometry的2个vertex中间可能会生成n个fragment,per fragment的属性Interpolation自vertex

所以想要fla...

?是???挝徽彰靼? flat???是平面?挝簧系母黜??用同一??normal 亦即各??在不同平面上有不同的normal ??拥男Ч?潘?lat

8

主题

716

帖子

716

积分

高级会员

Rank: 4

积分
716
发表于 2006-11-24 12:35:00 | 显示全部楼层

Re:shader 能实现FLAT着色的效果吗?

你错就错在ps里dot(lightVir,normal)
都已经快per pixel lighting了
哪里还有flat

听狗狗的,准没错的 [em10]

8

主题

553

帖子

560

积分

高级会员

Rank: 4

积分
560
发表于 2006-11-24 12:47:00 | 显示全部楼层

Re:shader 能实现FLAT着色的效果吗?

抛开你想实现的效果不谈,D3DSHADE_FLAT的意义在于:让rast硬件不对COLOR0/1进行插值,per pixel的数据直接从leading vertex数据对应里的ram bank里去取。为什么只能用color0/1,这是历史遗留问题。
flat shading应该属于per vertex lighting的范畴,lighting calculation在leading vertex里进行计算,然后rast硬件直接把结果送给PS,PS直接作decal操作然后输出。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-25 23:32

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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