蓝图解锁怎么用_[UE4蓝图][Materials]虚幻4中可互动的雪地材质完整实现(一)

da3d17a53a9b8db4f6c7ab212ff57897.png

不说废话,先上个演示图

v2-5f8c1aa0f9f7b32b2e3484bc614bb65f_b.gif
最终成果(脚印,雪地可慢慢恢复,地形可控制)

主要原理(白话文):

假如你头上是块白色并且可以透视的平地,来了个非洲兄弟踩上面,你拿起单反对着上面拍了一张,照片如下

73be525ad17fb2ab044a2c0e13a10289.png

把脚印稍作翻转(因为需要的是从上往下看的图),然后用打印机打印照片,垫在黑人兄弟脚下之后得到

95441a6ea14bf7ad845b4164e9b808bc.png
黑人兄弟弹跳就是好

再试试用3D打印机,白色的地方堆高点,脚印的地方留个黑色凹槽,然后变成了

435bc57e3fa1e067c50351b26b824369.png

没错,原理就是这么简单,你可以开始跟着做了。

完整实现:

1.先新建一个新的ThirdPerson蓝图项目,把建筑都删掉,新建一个中心在原点的地形
(我们先把地形中心,人物,SceneCapture都放在原点位置,这样翻转UV的时候会好理解一点,后面我们再考虑上坐标的偏移)

  • UE4的项目名和项目文件名一定要用英文,之前我的项目总文件夹名是中文,创建C++项目一直报错

2.新建一个SceneCapture2D蓝图类,将SceneCaptur2D蓝图类拖入到场景中,设置坐标(0,0,-500),Y轴旋转90度,这样就使其在地面下并且镜头朝上了。

  • SceneCapture2D:相当于一个相机,每帧拍一张照片提供给你,你可以拿来放到材质里或者直接摆UI上,大部分游戏的小地图都是用这个做的

3.进入蓝图,将CaptureComponent2D组件的投射类型改为正交,宽度可以暂时设为2048(也就是之后雪地的最大宽度)

76d81981f420c1c80742e3109401e2f4.png
  • 投射类型(Projection Type)
    透视(Perspective)就是类似人眼,看到的是近大远小。
    正交(Orthographic)就像数学老师黑板上画的效果,不会因为投影而改变物体比例。

f565582ceadbe129b2161891977335bb.png
a为透视,b为正交

4.在资源管理器中新建两个RenderTarget,按1,2排序,2会用到。然后在CaptureComponent2D中绑定RendetTarget1,并将CaptureSource改为Final Color。

  • RenderTarget(渲染目标):用来保存渲染的缓存,类似拍张照片存在这里。

7776eb9e3e88971bf10997171f41bd6c.png

5.新建一个材质名为Depth,将MaterialDomain改为Post Process(后期处理),添加到CaptureComponent2D的后效材质数组中

2fbc56a2c46aada288f5d470639e32c5.png

6.新建一个材质Snow,将其设置为Two Sided(两面的),然后放到地形上。如果不设置成两面的,等会在地形下方的相机就看不到地形,捕捉不到地形的场景深度。

82827a56e90a3469ad522dd4867aefdd.png

7.Depth材质解析

  • 记得先开启Player的自定义深度
    (关于自定义深度和相关材质基础知识请先看这两篇
    [UE4蓝图][Materials]虚幻4中用自定义深度完整实现描边材质(一) - 架狙只打脚
    [UE4蓝图][Materials]虚幻4中用自定义深度完整实现描边材质(二) - 架狙只打脚)

09cdb57e0c42ce295dc2d7b337d55e14.png
Depth材质
  • 先介绍下Saturate节点,这个节点等同于Math.Clamp(0,1)。
    当输入值小于0时,输出0。
    当输入值大于1时,输出1。
    当输入值在0到1之间时,直接输出这个值。
  • 因为SceneCapture2D是从下往上拍的,所以获得Player的自定义深度是大于场景深度的,也就是Player离相机的距离大于地面离相机的距离。
  • 这里用(CustomDepth-SceneDepth)/自定义参数Depth=Result,那么有三种情况没有人站的地方:CustomDepth为正无穷,所以Result为正无穷,Saturate处理后为1,显示白色。人的脚底到离地面Depth高度的这一段(图中红色示意部分):CustomDepth大于SceneDepth并且小于参数Depth,所以Result为0~1的值,Saturate处理后值不变,那么根据离地越近的部分越黑。人从Depth高度往上的部分:Result为大于1的值,也是显示白色。

a341761a3547a68f5c52298be7a027f3.png

8.现在新建一个UserInterface-WidgetBlueprint(控件蓝图),也就是一个UI界面,拖入一个Image,并将其的Image引用选为RenderTarget1,然后记得编译。

e36640abeb01b39608c24ec544f6a0f9.png

9.打开一开始创建的SceneCapture2D蓝图,在GameBegin时将这个UI添加到视窗上。

cb45acbd6de1b47f265ead17b503a3f1.png

现在运行游戏应该可以看到我们要的初步照片了

8194e414de4697f4caf9576d2b9dca1d.gif
这里为了看得清楚,我把相机的OrthoWidth调成512了,所以脚印看起来比你的大

我们再把检测的深度参数Depth由20改为200试试

dfcabe358d8494fa5d8f187cc45274c7.gif

(这里注意:这里相机从下往上每个像素点检测到的自定义深度是取离相机最近的一个,也就是说从下往上看被脚掌挡住的部分,比如脚脖子,跟腱等等,检测到的自定义深度就是脚掌离相机的距离,显示黑色,只有在脚掌之外的部位被检测到,才会显示更淡的颜色。)

下一篇:

[UE4蓝图][Materials]虚幻4中可互动的雪地材质完整实现(二)​zhuanlan.zhihu.com
13e07cba0c709fac8bf17380de20fc91.png

本篇到此结束了,因为想记录的细致一点,所以会比较慢,感谢关注评论点赞收藏!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据预处理工具_数据预处理

数据预处理工具As the title states this is the last project from Udacity Nanodegree. The goal of this project is to analyze demographics data for customers of a mail-order sales company in Germany.如标题所示,这是Udacity Nanodegree的最后一个项目。…

这几日英文大汇

int > 整数. 主要⽤用来进⾏行行数学运算 str > 字符串串, 可以保存少量量数据并进⾏行行相应的操作 bool>判断真假, True, False list> 存储⼤大量量数据.⽤用[ ]表⽰示 tuple> 元组, 不可以发⽣生改变 ⽤用( )表⽰示 dict>字典,保存键值对,⼀一样可以…

在网上收集了一部分关于使用Google API进行手机定位的资料和大家分享

在网上收集了一部分关于使用Google API进行手机定位的资料和大家分享:关于基站定位方面的介绍:http://tech.c114.net/164/a140837.html开发方面的帮助:http://www.dotblogs.com.tw/kylin/archive/2009/08/09/9964.aspxhttp://code.google.com…

background图片叠加_css怎么让两张图片叠加,不用background只用img叠加

展开全部css层叠图片代码://这个层为外面的父层,只需设置相对位置样式即可//这个为里e69da5e887aa3231313335323631343130323136353331333431363030面要叠加的层,只需设置绝对样式//这个为层里面的内容图片//这个为父层内容或者:扩…

“入乡随俗,服务为主” 发明者量化兼容麦语言啦!

5年时光 我们裹挟前行。发明者量化从筚路蓝缕到步履蹒跚,从以“区块链资产交易”为阵地,再到以“内外盘商品期货”为依托。再到今天全面兼容“麦语言”。每一步,我们始终都在为建立一个优秀的量化交易平台而努力。 什么是麦语言? …

自考数据结构和数据结构导论_我跳过大学自学数据科学

自考数据结构和数据结构导论A few months back, I decided I wanted to learn data science. In order to do this, I skipped an entire semester of my data science major.几个月前,我决定要学习数据科学。 为此, 我跳过了数据科学专业的整个学期。 …

爬取LeetCode题目——如何发送GraphQL Query获取数据

前言 GraphQL 是一种用于 API 的查询语言,是由 Facebook 开源的一种用于提供数据查询服务的抽象框架。在服务端 API 开发中,很多时候定义一个接口返回的数据相对固定,因此要获得更多信息或者只想得到某部分信息时,基于 RESTful AP…

python中的thread_Python中的thread

测试代码import threadingimport timedef do_thread_test():print start thread time:, time.strftime(%H:%M:%S)time.sleep(5)print stop thread time:, time.strftime(%H:%M:%S)threads []for i in range(2):thread1 threading.Thread(targetdo_thread_test)thread1.setDae…

--附加数据库失败

--附加数据库失败1.产生失败的原因比如有个数据库,名叫HIMS,它的数据文件HIMS_Data.mdf和日志文件HIMS_Log.ldf,都放在路径c:/Program Files/Microsoft SQL Server/MSSQL/data/下。但是这个数据库天天跑日志,会产生上G的日志,现在通过企业管理…

十三、原生爬虫实战

一、简单实例 1、需求:爬取熊猫直播某类主播人气排行 2、了解网站结构 分类——英雄联盟——"观看人数" 3、找到有用的信息 二、整理爬虫常规思路 1、使用工具chrome——F12——element——箭头——定位目标元素 目标元素:主播名字&#xff0c…

归一化 均值归一化_归一化折现累积收益

归一化 均值归一化Do you remember the awkward moment when someone you had a good conversation with forgets your name? In this day and age we have a new standard, an expectation. And when the expectation is not met the feeling is not far off being asked “w…

sqlserver垮库查询_Oracle和SQLServer中实现跨库查询

一、在SQLServer中连接另一个SQLServer库数据在SQL中,要想在本地库中查询另一个数据库中的数据表时,可以创建一个链接服务器:EXEC master.dbo.sp_addlinkedserver server N别名, srvproductN库名,providerNSQLOLEDB, datasrcN服务器地址EXEC…

Angular2+ typescript 项目里面用require

在typescript里面怎么使用require方法呢? const jQuery require(jquery); const fip require( fonticonpicker/fonticonpicker )( jQuery ); 如果什么都不做,直接在项目里面使用,会得到以下错误: Cannot find name require 以下…

机器学习实践三---神经网络学习

Neural Networks 在这个练习中,将实现神经网络BP算法,练习的内容是手写数字识别。Visualizing the data 这次数据还是5000个样本,每个样本是一张20*20的灰度图片fig, ax_array plt.subplots(nrows10, ncols10, figsize(6, 4))for row in range(10):fo…

Microsoft Expression Blend 2 密钥,key

Microsoft Expression Blend 2 密钥,key,序列TJ2R3-WHW22-B848T-B78YJ-HHJWJ号

ethereumjs/ethereumjs-common-3-test

查看test能够让你更好滴了解其API文档的使用 ethereumjs-common/tests/chains.js const tape require(tape) const Common require(../index.js)tape([Common]: Initialization / Chain params, function (t) {t.test(Should initialize with chain provided, function (st) …

mysql修改_mysql修改表操作

一: 修改表信息1.修改表名alter table test_a rename to sys_app;2.修改表注释alter table sys_application comment 系统信息表;二:修改字段信息1.修改字段类型和注释alter table sys_application modify column app_name varchar(20) COMMENT 应用的名…

机器学习实践四--正则化线性回归 和 偏差vs方差

这次实践的前半部分是,用水库水位的变化,来预测大坝的出水量。 给数据集拟合一条直线,可能得到一个逻辑回归拟合,但它并不能很好地拟合数据,这是高偏差(high bias)的情况,也称为“欠…

深度学习 推理 训练_使用关系推理的自我监督学习进行训练而无需标记数据

深度学习 推理 训练背景与挑战📋 (Background and challenges 📋) In a modern deep learning algorithm, the dependence on manual annotation of unlabeled data is one of the major limitations. To train a good model, usually, we have to prepa…

Android strings.xml中定义字符串显示空格

<string name"str">字 符 串</string> 其中 就表示空格。如果直接在里面键入空格&#xff0c;无论多少空格都只会显示一个。 用的XML转义字符记录如下&#xff1a; 空格&#xff1a; <string name"out_bound_submit">出 库</strin…