要做眼睛,各位请做好被虐哭的准备。

本篇教程将由三部分构成:一、起源1的眼睛到底什么原理;二、正确的制作方法;三、一些小问题。

一、起源1眼睛的原理。

现在的游戏对眼睛的制作是通过对眼球骨进行骨骼约束,两个眼球骨都有个固定的人体外的骨骼,即目标骨骼,通过约束可以让眼球朝向目标骨骼。

但是起源1的操作让人迷惑:

首先,模型没有眼球骨骼,却有着眼球材质。

第二,眼球的权重被放置在头骨上。

第三,眼球不必须是个球体,可以是一个片,可以是半个球,可以是椭圆,总之什么都行。

第四,眼球被分成了眼白和虹膜,眼白不能动,虹膜可以在眼白上滑动。

第五,虹膜滑动不是真正的滑动,而是通过UV移动来假装虹膜的滑动,下面给大家上个示意图,大概就是这样,通过移动uv来让眼睛看起来好像是在转动,但其实并没有动。

第六,眼球材质与平常的贴图不一样,使用的眼球的专属材质,但是,这个专属材质在多年发展中自己也发生了变化,从”Eye”变成了”EyeRefract”,前者的着色器支持眼白和虹膜的贴图,而后者支持<环境光遮蔽纹理>、<envmap反射纹理>和<Cornea角膜纹理>。您也许觉得更新换代是好事,但是我要说的是,后者着色器的缺心眼设定是,模型材质<必须>提供上述三个纹理,否则就显示紫黑格子或者奇怪的反光,如下图所示。

正常⬆

缺少ssao⬆

缺少c

缺少env

然而大家也都深有体会,envmap从头到尾对自制模型作者一点也不友好,一个是很难自制envmap,另一个是envmap的版本问题会导致有的地方无法使用。环境光遮蔽贴图是3dmax的贴图烘培的产物,用于在静态光照中模拟模型上的阴影,而这个也是难制作,易出问题。也许您会觉得Cornea角膜纹理可能会好制作一点,那么我可以负责任的说,这个纹理简直是个反人类的贴图属性。一般来说,我们会使用蓝色调RGB贴图来作为法线贴图,但!Cornea角膜纹理使用红绿通道作为法线贴图,这是什么弱智操作?这还没完!蓝色通道和透明通道还会作为其他属性去应用,这让一张贴图承载一大堆作用还用反人类的通道做法线,简直就是吃饱了撑的,因此大可以放弃这个”EyeRefract”着色器,回到早期的”Eye”着色器去使用。

第七,UV滑动即可实现眼球假装转动,但是您需要在qc中写下一些特定属性,才能让模型编译过程中,为mdl模型生成处于模型中的一些隐藏的射线。这些射线的作用是,为引擎标注每个眼睛(可以多个眼睛)的根部位置,以及眼睛应该朝向的正方向。


此部分的原理是:1、眼球根部位置可以指定每个眼球的UV该如何旋转,大家都懂两点确定一条线,于是这种射线便由眼球根部射出到Viewtarget上,这个射线与眼球模型相交的地方便将UV的中心放到这里。2、标注eyeposition属性和attachment属性可以告诉眼睛应朝向的正方向,这个正方向作为一个向量,将与步骤1中的Uv变换相互呼应,将UV的形状进行拉伸,以显示正确的虹膜比例在非中心位置。(可能您会看不懂这部分,其实我也不懂,我只是通俗地解释了一遍,虽然解释的不特别准确,但是只要提供正确的位置信息,它就能正确运行,就是这么不讲道理,非常无语。)

第八,在您做好所有上述准备后,qc中还需要额外的属性才能让sfm正确识别眼球部分qc并创建viewtarget。这个额外属性是两个flex滑条,这个滑条部署在attachment属性提供的”eyes”上面,它们同时作为预设属性,可以通过滑条控制Uv的变化。非常重要的是,必须包含这两个属性才能在sfm中看到viewtarget,否则就没有。

二、正确的制作方法

下面进行准备以及制作眼睛的过程。(该过程使用一个我以前转模的模型制作)

*可以看到这个模型只有眼睛骨骼。*⬆

1、删除smd模型的眼睛骨骼

2、为眼睛网格指定新的材质,eyeball_l、eyeball_r

3、将眼睛网格权重指向头骨,此例子中头骨为bip_head

4、将眼睛网格重新展开UV(这步可能不用做也可以)

5、制作虹膜的独立贴图(包含alpha通道,遮蔽虹膜旁的纹理)

6、制作眼白的独立贴图(这里用纯白色代替)

7、把做好的贴图放到材质路径下

8、开始写vmt

"eyes"
{"$basetexture" "flu\HOK\Yao\50502_Yao\eyebase" //眼白"$iris" "flu\HOK\Yao\50502_Yao\iris" //虹膜"$halflambert" 1 //非必要-半伯朗照明"$nodecal" "1" //非必要-禁用子弹贴花
}


9、添加qc内容

Qc写法:
$model "medic" "medic.smd" {eyeball "eye_right" "bip_head" -1.2783 -3.6165 65.0663 "eyeball_r" 1 3 "iris_unused" 0.5eyeball "eye_left" "bip_head" 1.2783 -3.6165 65.0663 "eyeball_l" 1 -3 "iris_unused" 0.5//**下面是关于<smd>模型文件<!非常重要!>的说明://smd模型<不能>包含眼球骨骼,<但>模型网格必须存在,<并且>眼球有UV,材质名为(material name),使用"EyeRefract"着色器//**下面是属性值的说明://eyeball (name) (bone name) (X) (Y) (Z) (material name) (diameter) (angle) (iris material) (pupil scale)//name作用为匹配眼睑规则,只对eyelid属性有效//bone name是眼球模型的权重所在骨骼//***下面是眼球部分://XYZ为眼球的世界中心位置//眼球模型的材质需要是(material name),且眼球的权重应全部为(bone name)//从正面看眼球的宽度比例。用于防止虹膜在头部内滚动。//(angle)为壁虎眼的角度,人类都有2~4度壁虎眼,为防止斗鸡眼//***下面是虹膜部分,可忽略学习://(iris material)<已弃用>,用"iris_unused"代替//(pupil scale)虹膜纹理的比例//必备flex
flexcontroller eyes range -22 22 "eyes_updown"
flexcontroller eyes range -22 22 "eyes_rightleft"
}//眼睛后部的世界坐标
$eyeposition 0 0 70//眼睛中心坐标
$attachment "eyes" "bip_head" 0.002 -3.6165 65.0652 absolute
//添加眼部中心位置到头骨上,absolute使用世界位置

步骤9的操作:

10、查看眼球位置,改qc中位置

由于您的模型可能不是X轴对称,请勿图方便只改一个、其他复制数字,一定要对应好才可以。分别是两个眼球的中心位置,两眼中间位置,两眼睛后部只有Z轴的位置。

11、导出修改后的smd模型并用crowbar打包

12、测试及修改模型

下图可以看到模型已经成功制作完毕了。

图2

移动viewtarget:

但是您可以看到一个问题就是虹膜太小,下面修改,增大虹膜比例。同时模型壁虎眼过大,把度数调小。

成果图如下,壁虎眼好很多,虹膜也比例正常了

三、一些小问题

1、注意您的模型不一定是X轴对称,请记得要对应好所有位置。

2、注意vmt使用eyes着色器

3、注意贴图指向和写法不要出错

4、注意添加qc时添加全,不要出现遗漏:eyeball、attachment、flexcontorll、eyeposition请全部包含

5、请注意眼睛网格权重放到头骨

6、请注意要删除眼睛骨骼

7、请注意要给眼睛指定单独的材质,例如:eyeball_l、eyeball_r

8、注意虹膜贴图文件的alpha通道。

9、qc中调整虹膜大小比例

10、如果因为vta读取问题导致打包错误,请用dmx格式文件或删除vta相关部分再次尝试。

11、生成的viewtarget可能会错误地驱动眼球UV变化,请注意qc中的正确位置填写

12、Blender或其他软件中查看位置时,一定注意您使用的是全局坐标 or 世界坐标。

13、左右眼的位置不要搞混了,而且<必须>先写右眼。

一些bug情况:

1、虹膜过小


2、qc中位置写错(因为这个模型是Y轴对称)


3、vmt使用eyerefract的问题

更新(2021-11-30 素材提供:科普莱bot)

经过科普莱大佬的测试后,发现了新的bug问题,即提供两个位置点(眼睛中心、眼睛中心正后方)不能达成正常效果,会造成眼睛的滑条出现错乱的问题。

为此科普莱大佬参考了【油管视频】 老外的教学,发现在

$attachment "eyes" "bip_head" 0.002 -3.6165 65.0652 absolute
//添加眼部中心位置到头骨上,absolute使用世界位置

这个地方仍需提供给 attachment 函数两个位置,即左眼和右眼的中心位置。具体写法如下图。


⬆修改前

⬆修改后

可以看到加了两个用绝对值absolute后缀的左眼和右眼的中心位置坐标,效果如下图所示。

左边为修复前,右边为修复后,操作为滑动eye_updowneye_leftright两个滑条。

最后让我们来看一下开心的康普莱。

sfm眼睛带viewtarget制作相关推荐

  1. win10用html文件做壁纸,利用win10自带工具制作动态壁纸的简单方法

    微软在最强大操作系统利用win10自带工具制作动态壁纸的简单方法的详细介绍. 利用win10自带工具制作动态壁纸的简单方法: 把图片做成动态壁纸,总共分4步:1.准备素材,2.素材导入,3.调整效果, ...

  2. Django网站实战——手把手带大家制作一个经典的网站

    一.前言 今天小编带大家制作一个经典的网站的案例,功能包括登录.注册.注销.改密.免密登录.忘记密码,那么下面就让我们开始吧. 二.创建项目并创建子应用 首先创建项目,然后在项目根目录下创建子应用,如 ...

  3. esp8266 蓝牙耳机_手把手带你制作WIFI智能开关.走进物联网-ESP8266学习日记(三)...

    手把手带你制作WIFI智能开关.走进物联网-ESP8266学习日记(三) 2020-05-11 19:43:10 12点赞 137收藏 10评论 上一次我们初步认识了SDK编程和透传,给模组更新FW. ...

  4. esp8266 蓝牙耳机_走进物联网智能家居-手把手带你制作wifi智能开关-ESP8266学习笔记(二)...

    走进物联网智能家居-手把手带你制作wifi智能开关-ESP8266学习笔记(二) 2020-05-09 13:44:11 9点赞 72收藏 6评论 小编注:此篇文章来自即可瓜分10万金币,周边好礼达标 ...

  5. Android Studio自带图标制作利器 Image Asset Studio

    曾几何时, Android开发没有那么方便, 制作一个图标也许都要请美工, 或者自己花时间去PS. 或者去一些在线图标制作网站, 例如: https://makeappicon.com/ http:/ ...

  6. 哥们哥们,人机大战晓得吧玩家对战晓得吧,简易三子棋,呕心沥血500行代码手把手带你制作第一个小游戏,可以保存收藏以后接着看哟,最后有源码哦

    目录 前言 一.游戏想要有意思,函数不可少,整活的函数 二.三子棋的游戏界面 三.三子棋的功能步骤分析      1.菜单     2.三子棋实现的总体框架     3.棋盘创建     4.棋盘初始 ...

  7. 【Unity2d】带你制作一款类似于金山打字的小游戏

    博主大概08年开始接触电脑游戏,当时玩的是我哥的电脑,那时候家里没网,只可以玩电脑上自带的单机游戏,比如扫雷.蜘蛛纸牌等等,当然还有红色警戒.冰封王座.星际争霸.帝国崛起等等,这些大概是我哥当时在大学 ...

  8. LED灯带的制作过程

    LED灯带生产过程 Automatic production of LED string lights 01 LED灯带 一.电线制作   新年又快到了,装饰室外夜晚的LED灯带为新年增加了很多喜庆气 ...

  9. 带你制作百词斩单词表读写插件

    上篇博文简单的介绍了一下Chrome插件,今天就与大家分享一下我做的这款有实际意义的插件吧. 做这款插件主要是用百词斩站点进行单词学习时,遇到的一点点闹心事儿.在单词表中不能听发音.也不能练习拼写.所 ...

最新文章

  1. Android MarsDaemon实现进程及Service常驻
  2. dos拼接字符串以及截取字符串
  3. 好文推荐(对JScript初,中级者有用):面向对象的Jscript[转贴]
  4. 如何將Clonezilla live放到一個已經有其他作業系統存在的硬碟中
  5. 查看UNIX/Linux资源占用的top命令
  6. Spark _19 _Spark内存管理
  7. 前端知识点整理(三)不定时更新~
  8. 插值法补齐缺失数据_数据挖掘非常重要的一步:数据预处理
  9. 修改系统时间导致myeclipse不能自动发布的解决方法
  10. 服务器协议热更_汽车和电话的开放协议,以及更多开放源新闻
  11. 关于事件模型,js事件绑定和解除的学习
  12. bzoj 2527: [Poi2011]Meteors
  13. mysql删除员工_MySQL误删数据救命指南:开发人员必收藏
  14. 淘宝云梯分布式计算平台架构
  15. 机器学习方法(二)——xgboost(原理篇)
  16. Android项目导入高德地图
  17. mysql sql trace_SQL_TRACE及 Tkprof用法以及问题分析
  18. 计算机声音管理器不见了,电脑Realtek高清晰音频管理器不见了怎么办
  19. SAP 金额转换成大写
  20. (2021总结篇)面向对象软件设计模式--(八)结构型模式---树形结构的处理--组合模式

热门文章

  1. 3年内被辞退5次,35岁程序员该何去何从?太厉害了!
  2. 在团队中如何带领新员工
  3. xdf文档怎么转换为pdf_如何将PDF文件和图像转换为Google文档文档
  4. 关于B2C电子商务顾客忠诚度影响因素的问卷调查
  5. coreldraw x8段落_CorelDRAWx8调整字间距的方法
  6. 基于 SpringBoot + Vue 框架开发的网页版聊天室项目
  7. 下列叙述中正确的是 java语言_1. 下列关于JAVA语言特点的叙述中,错误的是[   ] A、Java是面向过程的编程语言...
  8. harmonyos和emui 11概念股,从 EMUI11 到 HarmonyOS,华为 UX 设计的思考与传承
  9. 微信小程序 特殊布局下,页面上拉触底事件onReachBottom无法触发解决方法
  10. 【Python爬虫学习】八、股票数据定向爬虫(2020年1月31日成功爬取中财网,百度股市通web版404了)