游戏开发论坛

 找回密码
 立即注册
搜索
12
返回列表 发新帖
楼主: hlsl

可配置笔触的勾边截图

[复制链接]

6

主题

390

帖子

400

积分

中级会员

Rank: 3Rank: 3

积分
400
 楼主| 发表于 2005-9-14 12:34:00 | 显示全部楼层

Re: 可配置笔触的勾边截图

azureye: 其实都是外边缘,那个“内边缘”是假相,其实还是外边缘。我只是检测 sign(dot(N1,V1)) != sign(dot(N2,V2))者为勾边。我的勾边是生成勾边网格后用贴图的
sf_2005914123339.jpg

6

主题

390

帖子

400

积分

中级会员

Rank: 3Rank: 3

积分
400
 楼主| 发表于 2005-9-14 12:39:00 | 显示全部楼层

Re: 可配置笔触的勾边截图

这种勾边的好处是可以自定义有趣的笔触
sf_2005914123915.jpg

53

主题

419

帖子

451

积分

中级会员

Rank: 3Rank: 3

积分
451
发表于 2005-9-14 13:08:00 | 显示全部楼层

Re:可配置笔触的勾边截图

感觉真不错,很有艺术感的笔触

59

主题

1104

帖子

1199

积分

金牌会员

Rank: 6Rank: 6

积分
1199
发表于 2005-9-14 14:36:00 | 显示全部楼层

Re:可配置笔触的勾边截图

:) 还有一步没做到,就是两个相邻的边的夹角大于一定值的时候,算成一条边,这样效果就更好了:)

59

主题

1104

帖子

1199

积分

金牌会员

Rank: 6Rank: 6

积分
1199
发表于 2005-9-14 14:41:00 | 显示全部楼层

Re:可配置笔触的勾边截图

另外内边也可以勾出来的,用摄象机的位置分别dot一条边的两个面法线,然后看两个dot值的乘积是否小于1,小于1的话就是一条边。

18

主题

971

帖子

982

积分

高级会员

Rank: 4

积分
982
发表于 2005-9-14 15:38:00 | 显示全部楼层

Re:可配置笔触的勾边截图

这种边的做法都是用简单的dot来实现的吧,呵呵.

6

主题

390

帖子

400

积分

中级会员

Rank: 3Rank: 3

积分
400
 楼主| 发表于 2005-9-15 00:39:00 | 显示全部楼层

Re: Re: Re: 可配置笔触的勾边截图

azureyes: Re: Re: 可配置笔触的勾边截图



N1,V1,N2,V2 你分别指什么?  

边缘应该是视线与法线点乘为0吧.

N1,N2分别是某条边的两个相邻三角形的面法线
V1,V2分别是归一化的eye点到某条边的两个相邻三角形的中心点的向量

视线和法线点乘==0的做法,只适合于高精度的模型,如果应用于面数低的模型就常常会有断断续续的勾边情况。好象在object space的这种做法已不太有

6

主题

390

帖子

400

积分

中级会员

Rank: 3Rank: 3

积分
400
 楼主| 发表于 2005-9-15 12:52:00 | 显示全部楼层

Re: Re:可配置笔触的勾边截图

azureyes: Re:可配置笔触的勾边截图

在pixel shader里面计算视线和法线点乘==0, 可以得到比较好的效果,因为法线被插值了。 是连续的。 我想是这样

噢,这样应该可以。但我是CPU计算勾边的,因为后续还有很多工作,没法放在PS中

18

主题

971

帖子

982

积分

高级会员

Rank: 4

积分
982
发表于 2005-9-15 18:01:00 | 显示全部楼层

Re:可配置笔触的勾边截图

这个是很复杂,但求hull办法基本上没有很快的,这些做法不是为了大规模render场景,基本上是为了些效果准备的吧...如果做anti-portal的话,一样要求hull,只是要限制遮光板的数目........

6

主题

390

帖子

400

积分

中级会员

Rank: 3Rank: 3

积分
400
 楼主| 发表于 2005-9-15 23:04:00 | 显示全部楼层

Re: Re:可配置笔触的勾边截图

azureyes: Re:可配置笔触的勾边截图

你那个查找边缘的算法,就和找Shadow Volume的算法的一样, 如果模型复杂了,极其消耗性能的.
不知道你截图用的模型,是多复杂的.


我截图上的模型就是DirectX SDK带的tiger.x,大概500来面吧。

dot(N,V) == 0检测,遍历所有顶点一次,复杂度O(n)
sign(dot(N1,V1)) != sign(dot(N2,V2)),遍历所有边一次,复杂度同样是O(n),只不过多一次点击运算而已。这应该是几何上准确的勾边定义。

以下取自Art-based Modeling and Rendering for Computer Graphics, by Lee Markosian:
A polygon is front-facing if the dot product of its outward normal and a vector from a point on the polygon to the camera position is positive. Otherwise the polygon is back-facing. A silhouette edge is an edge adjacent to one front-facing and one back-facing polygon.

不过勾边计算确实是跟模型复杂度有关,这也是勾边的特性之一吧:)如果实在吃不消可以把渲染的模型和检测勾边的模型分开。渲染的模型面数可以高些,检测勾边的模型面数限制在某一范围内。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-12-27 20:09

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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