游戏开发论坛

 找回密码
 立即注册
搜索
查看: 6479|回复: 19

关于Detail Map

[复制链接]

35

主题

161

帖子

161

积分

注册会员

Rank: 2

积分
161
发表于 2006-2-21 15:36:00 | 显示全部楼层 |阅读模式
Focus on 3D Terrain Programming中讲到Detail Map为一张“灰度图”,采用平铺的方式叠加到地形纹理上。要实现Foucus on Terrain中所说的detal map,要通过multipass或multiple texture blending。但书中没说怎么混合,我现在是用multipass多次渲染。
第一次pass渲染纹理。
第二次pass将细节纹理用重复纹理寻址方式贴上去。与上一次渲染的混合方式如下:
SetRenderState(D3DRS_SRCBLEND,D3DBLEND_SRCCOLOR ) ;
SetRenderState(D3DRS_DESTBLEND, D3DBLEND_ONE) ;
但效果不对。书中说的不是很清楚,而且为什么要用“灰度图”呢?显然和一般的纹理混合不同。detail map应该可以适应各种纹理,也就是无论雪地,草地,detail map混合上去后都能产生细节。比如detail map上有几个坑,混合上后,草地上雪地上都有坑。请高手帮忙解释一下!

这是第一次pass后:


这是第二次pass后:








ps:我在网上搜了一些文章,往往谈到将两个纹理混合称为Detail Map。我想这两者的含义不同吧?我已经将多个纹理根据高度值预先混合,得到的新的纹理,这应该不能称之为Detail Map吧。

44

主题

248

帖子

274

积分

中级会员

Rank: 3Rank: 3

积分
274
发表于 2006-2-21 20:04:00 | 显示全部楼层

Re:关于Detail Map

书上的源代码看看就知道了阿

35

主题

161

帖子

161

积分

注册会员

Rank: 2

积分
161
 楼主| 发表于 2006-2-22 09:42:00 | 显示全部楼层

Re:关于Detail Map

我没有源代码。你有吗,请发一份给我好吗?谢谢!
happyfirecn@yahoo.com.cn

2

主题

141

帖子

141

积分

注册会员

Rank: 2

积分
141
发表于 2006-2-22 11:32:00 | 显示全部楼层

Re:关于Detail Map

我现在就在做Terrain
给你一些提示,代码就免了
1。纹理没有高层图(或者光照图、法线图、切向图等等,其实本质全是heightmap)在背后起作用得,只能是一个伪3D的游戏,其实就是2.5D,这也是目前大批国产所谓的网游画面质量上不去的根本原因,跨过了这道坎你就会豁然开朗了,做3D游戏第一重要的就是3D材质,背后最重要的就是heightmap。
2。细节纹理一般有一层程序纹理在控制各层纹理在最后效果中所起的作用,每个分区其实只要三层基础纹理+程序纹理就能很好的表达大部分效果,而不是一个单元格一个单元格让美工或策划去编辑
3。细节纹理用到的PS 伪代码一般是:(假设程序纹理是TEXproc)
(TEX1*TEXproc.r+TEX2*TEXproc.g+TEX3*TEXproc.b)*DiffuseColor;

也可用D3DTOP_ADDSIGNED 或D3DTOP_ADDSIGNED2X

35

主题

161

帖子

161

积分

注册会员

Rank: 2

积分
161
 楼主| 发表于 2006-2-22 14:13:00 | 显示全部楼层

Re:关于Detail Map

多谢chesskillerboss!但我还是有些不明白:
1 “细节纹理一般有一层程序纹理在控制各层纹理在最后效果中所起的作用”
你说的程序纹理指什么?
我从(TEX1*TEXproc.r+TEX2*TEXproc.g+TEX3*TEXproc.b)*DiffuseColor看,你的程序纹理
似乎对3个纹理进行了调制,我不理解这个公式的含义。为什么用程序纹理的r,g,b分别对3个纹理进行调制?我现在在使用detail map之前只有一个纹理,这个纹理是用了4个纹理根据高度值插值计算的,这4个纹理是根据高度不同所采用的不同纹理。那么你的公式里面的TEX1,2,3是什么关系呢?

2 书上说得detail map是灰度图,我感觉是用的他的“图案”而不是颜色。而且这是一种全局的效果。我看了torque引擎示例的terrain,其detail map就一张图,就是靠近地面看时的那个效果。
我的理解对吗?如果是这样,请问怎么将detail map与当前的纹理混合。

3 关于你说的分区是什么,根据什么分的,有什么作用?

非常感谢!

2

主题

141

帖子

141

积分

注册会员

Rank: 2

积分
141
发表于 2006-2-22 15:23:00 | 显示全部楼层

Re:关于Detail Map

用三张基础纹理+1张程序纹理,是一般directX 9野外TERRAIN的表达方法,因为4层纹理是很多老的3D显卡的也支持的,你说的那本书里有讲到terrain texture, 我用的就是他的方法,感谢Real Time 3D Terrain Engines Using C++ And Dx9。可以用程序纹理,也可以用你的那个纹理(你的纹理的出处是Introduction to 3D Game Programming with DirectX 9.0) 所谓细节纹理其实就是预先计算一张纹理,这张纹理的背后一定是高层图等灰度图在起作用,比如这张纹理的大小是2048X2048,然后让这张纹理作用在你的一个子分区上,比如8X8的单元格上, 那样的话你的每单元格上有了256X256的一个打底的texture, 然后你每个单元个格上会有一个自己的纹理(如果你没有象我那样用程序纹理一次完成的话),这两张纹理按下面的计算得到了远看是远的效果,近看是细节纹理的效果。
D3DTOP_ADDSIGNED
或D3DTOP_ADDSIGNED2X(效果更好,色彩鲜艳)
如果你的显卡不支持上面的option,你就只有用D3DTOP_MODULATE了

35

主题

161

帖子

161

积分

注册会员

Rank: 2

积分
161
 楼主| 发表于 2006-2-22 19:02:00 | 显示全部楼层

Re:关于Detail Map

非常感谢chesskillerboss!
Introduction to 3D Game Programming with DirectX 9.0中讲的纹理很简单,就是一张大纹理,不过他讲了将静态光照作用在纹理上。
我说的方法出处是Foucus on Terrain Programming。可惜我没有这本书的代码,到detail map之前的内容我都是根据书中的opengl代码片断用d3d实现的,可惜detail map他讲的太不detail 了

我觉得你的方法非常好,虽然没有解决我怎么使用Focus on Terrain书中的detail map.
你可以给我一段代码例子吗?
再次感谢!

25

主题

145

帖子

341

积分

中级会员

Rank: 3Rank: 3

积分
341
发表于 2006-2-23 09:19:00 | 显示全部楼层

Re:关于Detail Map

可以参考我的东东:http://bbs.gameres.com/showthread.asp?threadid=37783

35

主题

161

帖子

161

积分

注册会员

Rank: 2

积分
161
 楼主| 发表于 2006-2-23 15:08:00 | 显示全部楼层

Re:关于Detail Map

up

35

主题

161

帖子

161

积分

注册会员

Rank: 2

积分
161
 楼主| 发表于 2006-2-25 10:26:00 | 显示全部楼层

Re:关于Detail Map

up
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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