设为首页收藏本站

红警DIY论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2207|回复: 10

【基础理论研究】VPL及其原理

[复制链接]
发表于 2015-2-14 21:28:41 | 显示全部楼层 |阅读模式


vpl用UE打开,可见到如下乱七八糟的数字,全部以十六进制书写。


如图所示。
两个黑框标注,根据VK的研究,设定了色盘里所属色的范围,即16~31号。直接修改的话没有任何实际效果。
红框标注,设定了这个vpl使用多少个section,这个数字最大不能超过20,即10进制的32。section的意义请向下继续阅读
同一行的几个CD,意义不详。

从00000010H到00000300H开始,是一个内置的色盘。没有任何用处。


从000002a0H开始,每256个字节称为一个section。每个section都是一套色盘序列号,其基础是原版存在的unit色盘。section本身不包含颜色信息,只相当于调用了原版的unit色盘,重新安排了颜色位置。虽然在编辑器里看起来好像是颜色,其前提是色盘是原版的unit色盘。


section共有32个,即每个VXL体素点和光源的32个夹角关系。具体哪个夹角对应哪个section,不明。
光源位置不明。
*猜想*可能为线性关系

固定颜色,固定法线值的体素点在转动过程中,因为和光源夹角不断变化,有32种夹角的可能性,会挑选对应夹角的section。然后使用exe内写死的特定未知算法,使用颜色,法线值和夹角值进行某种变换,得到一个此section上某个位置的结果。此位置上的字节值转换为十进制,就是原版色盘上的序号,于是游戏将会使用这个序号对应的色盘而不是体素点本身在绘制时使用的色盘值来显示。

举例:(数字均为胡编乱造,仅为揭示原理)
某体素点在vxlse里绘制时使用106,法线值15,旋转到方向20。
则游戏在绘制这个点时,会使用第20号section,使用106,20和15三个参数,进行某种不明运算,得到结果是99。20号section的99字节上写着78(注意,这是十六进制),换算为十进制是120。于是,游戏在绘制这个点的时候将使用120号色。
法线在游戏里的用途就是这样,但是算法不明。


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
发表于 2015-2-15 11:35:39 | 显示全部楼层
好深奥啊,完全看不懂
发表于 2015-2-15 20:02:14 | 显示全部楼层
UE要花钱吧
发表于 2015-2-15 21:22:02 | 显示全部楼层
从头到尾都是16进制,不会转为10进制。
发表于 2015-2-15 21:42:33 | 显示全部楼层

It's free
 楼主| 发表于 2015-2-15 21:47:57 | 显示全部楼层
布加迪 发表于 2015-2-15 16:22
从头到尾都是16进制,不会转为10进制。

当然是十六进制,只不过色盘序号还是转成十进制人类才能明白
发表于 2015-2-15 23:31:14 | 显示全部楼层
kenosis 发表于 2015-2-15 21:47
当然是十六进制,只不过色盘序号还是转成十进制人类才能明白

色盘序号改成10进制才叫蛋疼,用16进制大部分色系都是同一个数字开头。
发表于 2015-2-16 12:37:45 | 显示全部楼层
z1392714780 发表于 2015-2-15 11:35
好深奥啊,完全看不懂

看不懂+1
发表于 2015-2-16 15:20:35 | 显示全部楼层
本帖最后由 鬼蟬 于 2015-2-16 15:24 编辑

        这楼主要讲的就是vxl模型(后略为vxl)中的一个像素最终在屏幕上显示成什么样的。

        在做vxl的时候,模型中的每一个像素点具有两个属性,第一个是按Ctrl+I显示的那个颜色,这里命名为涂装色,第二个是按Ctrl+J显示的那个明暗不同的“颜色”,叫做法线值(其实法线并不是一个颜色,只是一个数值,只不过VxlSE里用灰度色显示以示区分罢了)。到vxl的层面为止,就是涂装色和法线值决定了这个像素在游戏里如何显示。

        涂装色相信大家完全不陌生,只要做好自动法线,在VxlSE里面涂装色越深,游戏里的颜色也越深,虽然有一些颜色会花掉,呈现出不应该有的颜色。在素材区呆过一段时间也应该知道,做vxl有两个流派,一个是自动发现+色差来增加质感的色差党,一个是小众的手动法线党。手动法线就相当于是手动调整一个像素点的“朝向”。在游戏中,随着模型的转动,像素会以一定的规律变亮或者变暗,模拟光照对模型不同部位的影响,使得模型具有立体感。

        一楼的这篇文章,其实就是在进一步阐述,在涂装色和法线值背后,更深层的决定像素在游戏里显示方式的规则:VPL。

        如前述,游戏里为了使vxl具有立体感,会对光照进行模拟,这样就需要定义一个光源的方向。而vxl整体的朝向和法线值会决定一个像素在游戏中的“朝向”(如果不太好理解的话,可以想成对于你自己而言的“右侧”并不是一个具体的方向,它会随着你自身的转动而转动,有时候朝着东,有时候朝着南,但对你来说都可以是“右侧”)。根据这个像素的实际朝向和光源方向,可以算出其中的夹角。如同现实生活中的经验一样,一个面与光源的夹角越大,它看起来就越暗。这个规律在vpl里以32个section来表现。抛开sections在vpl文件里的本质,这里直接说明其作用。

        求得光源和法线方向的夹角之后,根据夹角大小分成了由大到小的32个等级,这里借用section这个名称,对于每种涂装色,vpl里都定义了它每个section的颜色(有些颜色原版vxl中并未使用,ww就乱定义了一下,导致一旦使用会出现诡异的颜色)。然而,涂装色的每个section的色彩并不能任意规定,而是还要从pal本身引用,事实上vpl里记录section颜色的是pal的色号而不是具体的rgb值,因此其实即使是一个涂装色随着朝向不同会有不同的明暗,其实本质上还是调用了色盘里其他的颜色来实现的。

        从法线值和光源方向求出夹角大小,夹角大小决定了section,再根据涂装色和section确定一个像素在游戏里实际显示出来的颜色,就是vxl显示颜色的原理了。
发表于 2015-2-16 15:32:45 | 显示全部楼层
也就是说,画花了的vxl,要么是你的涂色本身就是花的,要么就是你的法线导致某相邻像素块使用的是不同的section,导致色差变花
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|小黑屋|手机版|管理员邮箱|红警DIY官方论坛    

GMT+8, 2017-4-30 13:02 , Processed in 0.105152 second(s), 21 queries , Xcache On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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