游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2431|回复: 4

关于ComputeTangent算法严重缺陷的讨论

[复制链接]

64

主题

855

帖子

856

积分

高级会员

Rank: 4

积分
856
QQ
发表于 2005-11-15 11:34:00 | 显示全部楼层 |阅读模式
偶前几日翻出以前做的坦克模型想在D3D中进行NormalMap方式的渲染,结果发现坦克车体上几个面的高光、NormalMap的凹凸方向不对,后来经过多方跟踪调试,发现问题出在模型身上。共有两个问题:

一、原来模型在3DSMax里应用了UVW Map的修改器,而在该修改器里,U Tile的方向被Flip过,所以,贴图的U坐标轴实际是反的,而V轴不变。则按照ComputeTangent的算法,先把指向+V的Tangent单位向量求出来,然后最后再用Normal 叉乘 Tangent 求 Binormal,则此时叉乘出的Binormal和实际Binormal是方向正好是反的。不应该是Normal 叉乘 Tangent,而应该是Tangent 叉乘 Normal 才对。
    所以微软等某些Tangent的算法是有缺陷的,它对应的3dsmax模型应该是UV Gizmo没有Flip或者旋转过的,而一般美工是很有可能对UVW Gizmo进行旋转操作的。我现在把Binormal的求解放到了Tangent一起,每求出一个Tangent则找出此Tangent对应的正确方向的Binormal,然后分别累加Tangent和Binormal。

二、UVW Map映射方式的问题。我的模型有些部件通过UVW Map中的Planar模式映射UV,则出现了这样的情况:构成一个面的3个顶点,其中1、2顶点的U坐标相同,1、3顶点的U坐标不同,1、2、3顶点的V坐标均相同,(U1 == U2 && U1 != U3 && V1 == V2  && V1 == V3),这样的面是无法得到正确的Tangent的,因为Tangent垂直于这个面。当然我们也可以假设在这个面中一条垂直于Binormal的向量为Tangent。但因尽量避免这种Planar模式对于一个物体映射UV的情况

    总结一下,如果采用一般的Tangent求法,要做到UV坐标轴始终平行于每个面,而且不能对UV轴平面进行翻转(不是旋转)超过180度的操作。

    大家可以这样试验一下,在3dsmax里新建一个Box,贴上贴图,然后是用UVW Map修改器,在UVW Map修改器中选择Box方式映射,然后再UTile后面的Flip炫项打勾,或者将UVWMap的Gizmo翻转180度以上,导出模型,最后在游戏中用NormalMap方式渲染模型,你会发现其中的凹凸效果完全是错误的。。。

50

主题

992

帖子

1012

积分

金牌会员

Rank: 6Rank: 6

积分
1012
发表于 2005-11-15 11:42:00 | 显示全部楼层

Re:关于ComputeTangent算法严重缺陷的讨论

是得调整,而且美工如果用到镜面方法进行贴图,也会出类似的问题。在shader里调整一下就好了

50

主题

992

帖子

1012

积分

金牌会员

Rank: 6Rank: 6

积分
1012
发表于 2005-11-15 11:44:00 | 显示全部楼层

Re:关于ComputeTangent算法严重缺陷的讨论

或者用工具处理一下模型

64

主题

855

帖子

856

积分

高级会员

Rank: 4

积分
856
QQ
 楼主| 发表于 2005-11-15 12:47:00 | 显示全部楼层

Re: Re:关于ComputeTangent算法严重缺陷的讨论

QiKi: Re:关于ComputeTangent算法严重缺陷的讨论

是得调整,而且美工如果用到镜面方法进行贴图,也会出类似的问题。在shader里调整一下就好了


在Shader里调整我觉得不太现实吧,问题实在是太复杂了。。
我觉得还是在Precompute的时候才能正确的调整。

59

主题

1104

帖子

1199

积分

金牌会员

Rank: 6Rank: 6

积分
1199
发表于 2005-11-15 17:58:00 | 显示全部楼层

Re:关于ComputeTangent算法严重缺陷的讨论

....先前做导出插件的时候就时常发现UV是反的。。。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-22 15:23

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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