3D角色遮挡住UI的实现,关于Stencil Buffer,描边,以及其他

我这么懒的人能会写这篇博客,主因是这个需求对我造成的大量伤害~~~

起因

最近服务器AI的工作刚刚阶段性完成,马上被策划拉过去做一个渲染的效果,需求是这样的:在游戏中被选中敌人是有一个红色描边的,同时会有一个感知箭头(一个UI提示图表),现在这两个都会显示在主角上面。现象如下

前面的这个怪物X假设为主角(原谅我只能拿以前项目的资源了,那公司黄了应该不会来找我吧~~),更远处的那个是怪物,白色格子是一个UI 图片,现在均可以渲染在主角上面,影响视觉感受。希望主角可以挡住描边以及特定UI。

这里要先提前说一下描边的实现,目前主要的描边实现方式有几种

(1)有的是渲染在角色上的,即对角色模型根据法线方向或者offset进行外扩,实现描边

(2) 类似于posteffect的方式,用一个摄像机单独渲染需要描边角色,然后对得到的rendertexture进行模糊放大,再cut off掉原图进而得到描边的rendertexture,然后合并到场景摄像机上面渲染即可。

(3) 根据模型法线方向以及view 方向进行计算,叠加颜色实现边缘光的效果。

项目现在的是第二种方法,后面代码部分会有展示,另外几种方式大家如果感兴趣可以自行google下,相关的帖子很多。

坑坑坑,biu

于是乎~~这需求就是要某个3D角色可以盖住UI以及这个描边图呗。其实在最初的需求中是没有挡住描边的,所以我的第一个想法是利用Stencil Buffer。订制主角和UI的Shader,主角会写入特定的stencilValue,UI在这个值下不会通过stencil test,代码如下:

UI部分

 Stencil{<span style="white-space:pre"> </span>Ref [_StencilValue]Comp NotEqual//Pass [_StencilOp] //ReadMask [_StencilReadMask]//WriteMask [_StencilWriteMask]}

主角部分

 Stencil{Ref[_StencilValue]Comp AlwaysPass replace}

这样就应该是OK了!!(这里推荐一篇Stencil Buffer相关的博客:)在测试场景中,角色成功挡住了UI图标。然而,,在运行时,,并没有效果。。。Orz。。

经过测试,涉及stencil buffer的代码并没有问题。那么,只有一个可能是模板缓存被清掉。

谁偷走了我的Stencil Buffer?

上面提到过,我们的描边实现是posteffect的方式做的,在OnRenderImage中做了很多处理。在OnRenderImage中实现功能必然会使用到Graphics.Blits这个方法,类似代码:

void OnRenderImage(RenderTexture src, RenderTexture dest )
{Graphics.Blits(src,dest);
}

经过排查发现,注释掉上面代码之后效果恢复正常。

这是为什么呢!!!让我们看看官方的解释:

真是悲剧!描边兄给我挖了一个小坑。

解决方案

后续过程中,我把描边输出的RenderTexture输出到了Ugui中的一个Raw Image单独渲染,而不是在主摄像机中使用OnRenderImage方法把这张图渲染在摄像机中。这个描边图片同样使用UI订制的那个材质球,这样就会被主角挡住了。
下面会分享一个展示项目,包含了所有细节。
后续应该会优化描边中的blur shader,现在锯齿效果有点严重,可能会考虑下使用描边中第一种实现方式,那样效率应该会高上不少。
第一次分享博客哈,感觉写的丑的话大家就点赞鼓励下吧!

项目下载:http://pan.baidu.com/s/1bpiaqWv

3D角色遮挡住UI的实现,关于Stencil Buffer,描边,以及其他相关推荐

  1. 如何利用Shader来渲染游戏中的3D角色

    杨航最近在学Unity3D 本文主要介绍一下如何利用Shader来渲染游戏中的3D角色,以及如何利用Unity提供的Surface Shader来书写自定义Shader. 一.从Shader开始 ...

  2. 3D角色模型欣赏:韩国3D设计师 Jiwoong Choi 科幻3d角色

    今天给大家分享来自韩国3D设计师 Jiwoong Choi 的科幻3d角色作品,整体造型炫酷,欢迎欣赏 ![upload-images.jianshu.io/upload_images/2425227 ...

  3. 简述3D角色动画的应用及三大类型

    一.概述3D角色动画的应用 3D角色动画是计算机动画技术的一个重要组成部分,也是计算机图形学的一个分支.无论是在离 线渲染环境下,还是在实时渲染环境下,3D角色动画都得到了广泛的应用.在离线渲染环境下 ...

  4. Poser v7.0 1DVD(3D 角色动画)

    Ulead产品: Ulead.Videostudio.v10.Plus-ISO 1CD Ulead.Video.Studio.9.CHS-ISO 1CD(简体中文,会声会影 是一套专为个人及家庭所设计 ...

  5. 专访王博,国内资深游戏3D角色美术大神

    王博简介 原Massive Black (Shang Hai) 3Dartist, 原网龙U3美术组资深角色设计师,原金山西山居成都研发中心3D角色指导, 现就职于腾讯游戏天美工作室. 曾参与制作&l ...

  6. DirectX游戏开发之3D角色动起(下)

    DirectX游戏开发之3D角色动起(下) 直接先上图吧! 动作idle 动作attack 动作walk 动作run 看,多动作的模型搞下来了.原则上只要在此基础上略做修改就可以实现3d游戏的基本制作 ...

  7. Unity3D游戏制作(二)——如何渲染3D角色

    本系列文章由 Amazonzx 编写,欢迎转载,转载请注明出处. http://blog.csdn.net/amazonzx/article/details/7935341 本文主要介绍一下如何利用S ...

  8. 3D模型欣赏:强肌肉男的壮汉3d角色 肉跟血管的纹理材质超级写实

    本作品是由国外3D设计师 FabricioBatista创作的,是一个超强肌肉男的壮汉3d角色.肌肉跟血管的纹理材质超级写实,处理细腻,整体造型动作设计带感,值得参考 文章推荐阅读 [ 学习企鹅圈:1 ...

  9. 学习游戏模型3d角色,出来好找工作吗?

    游戏行业的发展如火如荼,目前已经成为了时下热门的就业行业之一,不仅带来了大量的就业岗位需求,同时也拥有了相当可观的发展前景,吸引了不少人将学习游戏相关专业列为学习目标. 其中,3d游戏模型专业成为许多 ...

最新文章

  1. Cell:无症状新冠患者阳性持续105天
  2. 百度编辑器ueditor每次编辑后多一个空行的解决办法
  3. 当文员学计算机二级,二本学生毕业后在干什么?多半做3种工作,过来人深有同感...
  4. 深度学习之利用TensorFlow实现简单的卷积神经网络(MNIST数据集)
  5. Android 开发技能图谱
  6. css3 animation
  7. 图例解析四大UML关系图使用
  8. Ruby gem 更换国内源
  9. Linux安装GCC方法
  10. scratch3文件转exe文件方法
  11. Qt android 开发环境搭建
  12. 最新抖音下载无水印视频
  13. 轻松读懂三极管,原来它是这样工作的
  14. gw node节点 xshell连接 访问外网
  15. apache的动态网站部署,discuz论坛系统和ecshop电商系统
  16. 对List<Map>数据排序
  17. 手机老是收不到短信验证码?我来告诉你为什么!
  18. GYM 101350 I. Mirrored String II
  19. 软件测试周刊(第61期):内心强大的人都有三个共性「不和他人作比较」「不对他人有期待」「不批判他人」
  20. Unity知识点总结(1)

热门文章

  1. 前端安全系列(一):如何防止XSS攻击?
  2. java连接数据库,jdbc四要素,jdbc六大步
  3. c语言char s[] 语句,35、若有定义和语句: char s[10]=abcd;printf(%s\n,s); 则结果是(以下u代表空格)...
  4. IDEA+Java控制台实现医院管理系统
  5. Windows CMD中的findstr命令详解
  6. 明确不站队BAT,帆软——这家只有几百人的BI公司靠什么赢得生存?
  7. 【YOLO-Pose】在Windows上的部署与测试(调用摄像头)
  8. Ruby on Rails,创建和执行migrations迁移文件
  9. python基于爬虫技术的海量电影数据分析源码,数据处理分析可视化,GUI界面展示
  10. 腾讯企业邮箱设置与企业微信绑定