对WoW Shader文件的分析

Wow的渲染引擎是同时支持固定渲染管线渲染和Shader渲染管线渲染的.
bls文件是wow的shader文件,分析它的实现可以学习引擎是怎样渲染的,以及如何做一个兼容固定管线和Shader管线的引擎.

bls里存储的是OpenGL low-level shading language的指令,terrain1.bls,terrain2.bls,terrain3.bls,terrain4.bls分别对应渲染一块具有1/2/3/4层的纹理地形.terrain1_s.bls,terrain2_s.bls,terrain3_s.bls,terrain4_s.bls分别对应渲染带高光反射的地形,其对应使用的是带有_s的地形纹理.

虽然shader可以按任何算法和顺序来混合使用各层纹理,但Wow的shader的使用仍受限于与固定管线的兼容,使用ARBfp1.0标准,仍然是按标准纹理层次先后叠加.从使用的纹理可以看出,
layer0Texture,layer1Texture,..,,blendTexture,其中blendTexture的每一个分量都是一个Alpha图,

地形块为3层纹理时,第一层直接渲染不需要Alpha图,第2,3层各需要一张Alpha图,即共需2张Alpha图,这2张Alpha图存储在BlendTexture的x,w分量上.
使用4层纹理时,使用BlendTexture的x/y/w作3张Alpha图.
由于最多有4层地形纹理,BlendTexture的z就剩下来作为阴影图使用,完成了整个地形块的Shader.

posted on 2006-02-21 20:26 linghuye 阅读(2332) 评论(20)  编辑 收藏 引用 所属分类: 3D图形学研究

评论

 re: 对WoW Shader文件的分析       

wow 的图象引擎是什么公司做的啊?
2006-03-03 15:49 |

 re: 对WoW Shader文件的分析       

嗯,是他们自己开发的引擎.
2006-03-03 20:05 |

 re: 对WoW Shader文件的分析       

大哥,我BT了一个<鬼武者3 PC版>的游戏,,,,

这游戏的模型非常不错,是日本鬼子做的,

主角还是金城武的模型呢!

我很想把里面的模型搞出来做DEMO ,

看了一下里面的文件封装得很简陋,全是。LDT的

音乐文件都可以真接用WinAMP播放,

有许多纹理文件都可以用ACDsee直接打开,

我想请大哥出马,帮忙分析下日本鬼子模形文件。



这是BT种子,我就下的这个





2006-03-04 12:27 |

 re: 对WoW Shader文件的分析       

to Ori
你在这里找苦力来了?
2006-03-06 09:48 |

 re: 对WoW Shader文件的分析       

分析模型,解放资源都是Linghuye老大的乐趣、爱好,何苦之有?

我也非常想做这些,虽然自已技术浅薄,但乐此不彼!
2006-03-06 10:15 |

 re: 对WoW Shader文件的分析       

我得 wowmapview 编译不通过,没有SDL,不知道什么地方可以下载,或者可以给我一个马?谢谢 inversewalking@133sh.com
我是上次向你请教水平裁减的那个。
万分感谢!
2006-03-09 18:13 |

 re: 对WoW Shader文件的分析       

就是SDL_opengl.h没有,
2006-03-09 18:14 |

 re: 对WoW Shader文件的分析       

需要的SDL包可以在 下载,要下载Source Code包.

wowmapview中的SDL/SDL.h,SDL/SDL_opengl.h,都在SDL包中的 include目录中,
复制一个到wowmapview工程目录下并改名为SDL目录即可,需要的lib,dll可以用包中VisualC.zip里的vc工程文件编译生成.
2006-03-09 19:11 |

 re: 对WoW Shader文件的分析       

如果针对不同的纹理层数设计不同的pass,那就是说WOW的地形确实是按chunk来渲染的?那DP调用会不会太多了?而且要不停的切换纹理……
2006-05-20 16:04 |

 re: 对WoW Shader文件的分析       

我的意思是,如果按纹理来渲染,就是说对于当前每种可见的纹理都渲染一次,每次渲染都提供一张该纹理对应的alpha图(第一层不需要),当然这样就要求运行时把每种纹理对应的mesh组织好。这样渲染的优点是DP调用少,多少种纹理就多少次DP调用,而且不用频繁切换纹理;缺点是多层纹理重叠的象素实际上被渲染了多次,而且大部分顶点也都要被处理多次……说的我自己都没底气了,到底密集细碎的DP调用能多大程度影响效率这个我也没有经验,回头试一试。

WOW基本是没有LOD的(最多可以有两级好象),如果使用LOD的话,那么最坏的情况下对于远处的一个chunk可能一个DP调用只绘制了两个三角形,想起来就相当不爽
2006-05-20 16:21 |

 re: 对WoW Shader文件的分析       

问下什么是DP?
切换显存中的压缩纹理,我以为消耗不大,不用每次都下载.
重要的是按每种可见的顺序是有要求的,不是简单的纹理都渲染一次,达不到最终要渲染的效果,一个chunk的每层纹理叠加权重累加.
不知道按当前每种可见的纹理都渲染一次,且不按chunk来渲染,如何作到这点?
另外我以为实践中应该避免的似乎是"而且大部分顶点也都要被处理多次".
2006-05-21 12:11 |

 re: 对WoW Shader文件的分析       

DP可能是DrawPramitive函数, D3D的
2006-05-22 09:11 |

 re: 对WoW Shader文件的分析       

对,DP就是指d3d的DrawPrimitive(DrawIndexedPrimitive)。
按纹理不按chunk渲染,具体说就是对于每种纹理,都把用到该纹理的chunk的顶点都拼成一个大vertex buffer(或index buffer),用一张alpha图(实际上只需要一个通道)来控制该层纹理在每个顶点位置的混合权重。这样对每层纹理渲染一次就得到最终的结果了。
2006-05-22 15:43 |

 re: 对WoW Shader文件的分析       

这只是我初步的考虑,还没有实践过。我会把两种方案都试一下,哪种效率高应该很容易判断。
2006-05-22 15:48 |

 re: 对WoW Shader文件的分析       

我认为按纹理渲染不是效率上的问题,而是我怀疑根本做不出wow中的地形纹理混合的效果.我所知道的渲染公式是 (A * (1-a1) + B * a1)) * (1-a2) + C * a2,不是A * a0 + B * a1 + C * a2这种简单的权重混合.
我曾经想过按材质分类渲染,结论是不可行,只能尽可能减少纹理材质切换,但不能完全按材质分类渲染.
wow的alpha层数据是依附于每个chunk给出的,所以按chunk渲染是比较自然地,减少材质切换的优化建立在以chunk为渲染单位上,即归类具有相同层数,使用相同shader,使用相似纹理的chunk.

不过,期待你的实践.

// 顺便说一下,不喜欢DP这样的缩写,我用OpenGL,比较喜欢VBO,PBO,RTT,:),just joking.
2006-05-22 23:28 |

 re: 对WoW Shader文件的分析       

我之前已经实现了。
方法是渲染每层细节纹理时都提供两个texturestage给显卡:stage0是alpha图(也就是只用到该图的alpha通道,如果用可编程管线实际上最多可以把4层alpha塞到一个alpha图里),对于这一层,COLOR取CURRENT,ALPHA取TEXTURE;stage1是纹理本身,COLOR取TEXTURE,ALPHA取CURRENT。之后在帧缓存里把这一层纹理和前面的结果混合:SRCBLEND设为SRCALPHA,DESTBLEND设为INVSRCALPHA。也就是说对于每一层纹理都是:Res_n = Cur_n-1 * ( 1 - alpha_n ) + color_n * alpha_n
2006-05-23 14:04 |

 re: 对WoW Shader文件的分析       

不好意思我这里说的都是d3d的东西,OGL没有用过不过应该也有类似的概念吧
2006-05-23 14:05 |

 re: 对WoW Shader文件的分析       

我后来看了一下WOW地形渲染bls文件,之前都是用HLSL,汇编形式的看的比较吃力,不过还是看明白了。

我认为你看的不够仔细,alpha图的x,y,z通道分别对应第1,2,3层纹理的alpha权重(如你所说,和叠加顺序有关),w通道应该是阴影值(1为阴影,0为正常),而且能看出最终屏蔽了阴影中的高光,保留了70%的diffuse亮度。
2006-05-30 17:00 |

 re: 对WoW Shader文件的分析       

To 平民程序,
我和你的理解是完全一致的,也实现了类似的室外地形。这里有一点点细微的差别,就是wow也许是把Blend Factor保存在了贴图中,然后在PS里面Sampler,而我是直接增加了一个Vertex stream, 保存float4 的alpha值,使用TEXCOORD1的语意,让顶点渲染引擎直接进行插值。

楼主我很想和你交个朋友,我人在上海。
2007-07-09 18:23 |

 re: 对WoW Shader文件的分析       

lol can't read nothing

all is chinese :(

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/352179.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

wow服务器显示锦标赛,魔兽世界史诗钥石地下城 全球锦标赛“计时赛”指南

史诗钥石地下城全球锦标赛(MDI)春季赛的“试炼场”已经结束。全球数以千计的勇士响应号召&#xff0c;获得了进入锦标赛服务器参加“计时赛”的资格。东部赛区的地下城英雄们&#xff0c;请了解以下这些信息&#xff01; 欢迎来到锦标赛服务器 所有成功通过“试炼场”挑战的玩家…

wow转服服务器不显示,《魔兽世界》部分服务器开启免费转服 解决负载过高问题...

《魔兽世界》全新资料片“暗影国度”已于本周四正式开启&#xff0c;新版本上线导致大量玩家同时涌入游戏&#xff0c;给一些服务器造成了不小的负担。为了解决这个问题&#xff0c;提升玩家体验。今日&#xff0c;魔兽世界官方微博宣布官方为部分高负载、高排队的服务器开启了…

wow镜头模拟

3D游戏编程中&#xff0c;镜头的控制相当重要&#xff0c;不同的镜头表现&#xff0c;能给玩家完全不同的体验&#xff1b;比如《跑跑卡丁车》中的跟随镜头&#xff0c;每当甩尾的时候&#xff0c;镜头也会有相应的运动轨迹&#xff0c;如果只是单单的垂直俯视&#xff0c;那肯…

魔兽世界服务器卡 邮件寄不出去,魔兽世界怀旧服邮件收不到怎么办 WOW怀旧服邮件取不出来解决方法...

魔兽世界怀旧服邮件收不到是游戏邮箱玩法&#xff0c;玩家们邮寄金币与物品给朋友时有时候等了很久还没到达喔&#xff0c;很多玩家想知道魔兽世界怀旧服邮件收不到怎么办、WOW怀旧服邮件取不出来解决方法呢&#xff0c;跑跑车游戏网为大家带来介绍。 *魔兽世界怀旧服邮件收不到…

ROS:launch启动文件的使用方法

目录 一、launch文件结构二、launch文件语法2.1根元素2.2参数设置2.3重映射、嵌套 三、示例3.1示例一3.2示例二3.3示例三3.4示例四 一、launch文件结构 由XML语言写的&#xff0c;可实现多个节点的配置和启动。 不再需要打开多个终端用多个rosrun命令来启动不同的节点了 可自动…

Unity3D学习笔记(二十三)导入WOW角色

今天看到新闻&#xff0c;魔兽世界最新的资料片《潘达利亚的迷雾》就要在十月二日上线了。这次中国大陆服务器总算是有机会版本与全球同步&#xff0c;和世界上其他地区的玩家在Raid进度上一决高下。 作为一名几乎没有存在感的业余玩家&#xff0c;好像跟我也没有什么关系。 倒…

威固的MOM,你的WOW 「 WOW 手武之道」威固巅峰技术交流赛圆满收官

近日&#xff0c;由全球特种材料公司伊士曼旗下汽车膜品牌威固&#xff08;V-KOOL&#xff09;举办的2022威固WOW手武之道技术交流会&PK赛&#xff0c;顺利收官。来自各地服务商的多位技师光芒尽显&#xff0c;展示贴装艺术&#xff0c;分别赢得广州站、南京站、郑州站及成…

WOW!Illustrator CS6完全自学宝典pdf

下载地址&#xff1a;网盘下载 编辑推荐 由一线设计师联合打造的最详细、最权威的Illustrator自学宝典。内容完整、详细&#xff0c;实例时尚&#xff0c;视觉感超强。 内容简介 《WOW!Illustrator CS6完全自学宝典&#xff08;全彩&#xff09;》以这一系列过程为主线&#xf…

CSS3 会跳舞的三角形

会跳舞的三角形&#xff0c;这个动效使用了两个动画变换来实现&#xff0c;一个是水平方向的运动&#xff0c;一个是径向的旋转。 在两个方向的运动速度上加以一定的控制&#xff0c;就可以出来不同的舞蹈节奏感。 把这两个三角形换成CSS3卡通图片&#xff0c;可以进一步加工…

WOW制作小地图

。。。。。。。。。。。。。。。。。 原本只是想用unity自带的GUI功能实现魔兽世界的小地图效果&#xff0c;结果折腾了一个晚上。 原来的思路如下&#xff1a; 根据玩家坐标&#xff0c;计算出应显示的地图缩略图部分&#xff08;128128&#xff09;&#xff1b;用GUI遮罩将非…

wow

写博客就有积分&#xff1f; 欢迎使用Markdown编辑器 你好&#xff01; 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章&#xff0c;了解一下Markdown的基本语法知识。 新的改变 我们对Markdown编辑器进行了一…

wow怎么修改服务器地址,wow如何修改登录服务器地址

wow如何修改登录服务器地址 内容精选 换一换 由裸金属服务器自动分配的网络是禁止修改的,在只有SSH登录的情况下修改,有可能会导致裸金属服务器无法连接。如果裸金属服务器存在自定义vlan网络网卡,您可以配置或修改该网卡的网络。 容器镜像服务是一种支持容器镜像全生命周期…

Depcheck 检查前端项目中未使用的依赖包

前言 随着前端项目的迭代&#xff0c;项目中一部分的依赖包可能没被项目所使用的&#xff0c;手动查找这些依赖包耗时又繁琐&#xff0c;有没有根据能够快速的帮助我们识别和清理项目中未使用的依赖包呢&#xff1f; Depcheck 简介 Depcheck 是一款用于分析项目中依赖关系的…

斩获阿里offer,这份258页面试宝典也太顶了....

测试三年有余&#xff0c;很多新学到的技术不能再项目中得到实践&#xff0c;同时薪资的涨幅很低&#xff0c;于是萌生了跳槽大厂的想法 但大厂不是那么容易进的&#xff0c;前面惨败字节&#xff0c;为此我辛苦准备了两个月&#xff0c;又从小公司开始面试了半个月有余&#…

深入理解API网关Kong:动态负载均衡配置

深入理解API网关Kong&#xff1a;动态负载均衡配置 背景 在 NGINX 中&#xff0c;负载均衡的配置主要在 upstream 指令中进行。upstream 指令用于定义一个服务器群组和负载均衡方法。客户端请求在这个服务器群组中进行分发。 NGINX 提供了以下几种负载均衡方法&#xff1a; …

图论与算法(4)图的深度优先遍历应用

1. 无向图的联通分量个数 1.1 联通分量个数 无向图的联通分量个数是指图中无法通过边连接到其他分量的顶点集合的个数。可以通过深度优先搜索或广度优先搜索来计算无向图的联通分量个数。 1.2 记录联通分量 &#xff08;1&#xff09;多个联通量的数&#xff1a; 7 6 0 1 0…

linux 应用程序 键盘,在Linux下安装Noted:适用于Linux的键盘驱动的笔记应用程序...

得益于Pop!_OS 20.04和Regolith Linux之类的发行版&#xff0c;键盘驱动的台式机环境逐渐风行一时。Noted是一个新的笔记应用程序&#xff0c;可在Linux和macOS上免费使用&#xff0c;该应用程序是受Notational Velocity(流行的macOS开源笔记记录应用程序)启发的&#xff0c;其…

xheditor可视化富文本编辑器

简洁易用的基于jQuery的富文本编辑器xheditor从CSDN上已经改版退出了&#xff0c;新版的Markdown编辑器将原版的编辑文章相关SEO的设置也设为自动获取了&#xff0c;总的感觉现在的编辑器没有原来那么方便了。本文来自http://xheditor.com/&#xff0c;纪念在CSDN上用过感觉最好…

Guitar Pro中文版免费激活注册机码V2021.20.7下载地址问题疑难解答

很多玩音乐的小伙伴都有一个共同的难题&#xff0c;目前很多编曲软件都是由国外引进来的&#xff0c;自然是以英文版为主&#xff0c;那作为国人的我们使用起来自然就不是那么容易&#xff0c;当然技术在更新&#xff0c;这个问题自然也是要有解决的方案的&#xff0c;今天小编…

好用的Mac窗口管理器:Rectangle for Mac

Rectangle Mac中文版是一个基于Spectacle应用程序的开源窗口管理器&#xff0c;用Swift编写&#xff0c;能够使用键盘快捷键移动窗口并调整其大小。Rectangle mac中文免费版适用于绝大数应用,并拥有维护良好的开源库,持续更新.欢迎大家下载体验Rectangle mac窗口管理器 Spectac…