Unity学习shader笔记[一百四十三]积雪二

Posted 染指流年灬

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Unity学习shader笔记[一百四十三]积雪二相关的知识,希望对你有一定的参考价值。

这里是在 Unity学习shader笔记[一百二十四]积雪和PBR的shader 一做的更改

首先首要的还是找类似效果的插件

效果参考 https://live.csdn.net/v/281535

特点

  • 坑洼处的地方先积雪
  • 雪地出现的形状特殊,是一个点一个点直接出现的,一出现就是不透明的颜色。而不是透明度从无到有。模仿雪落到地面之后的一点点增多的效果。

  • 雪的边缘没有渐变
  • 雪要有脚印

坑洼处的地方先积雪

因为坑洼处的积雪还是跟着默认的溶解来走的。即根据黑和白分布以及阈值来进行区分雪区域和非雪区域。

这个有几个思路,

  • 主帖图颜色深的地方先进行积雪,用RGB的平均值代表的灰度来判断是否颜色深, 这种思路有限制,一旦遇到暗的地方不代表缝隙坑洼处就会有问题.。如果要让灰度的边界值更加明显,即求得灰度之后界限更加清晰,可以用power再对灰度值进行处理。这样本身灰度值小的,power之后会比本身灰度值不小的差距大很多。这是power函数的函数走向特性决定的。

  • 有物体表面深度图的话,用深度图来代替主贴图的颜色深浅判断,这里的深度图是视差贴图的深度图

  • 用法线的夹角与上方的点积来判断,地砖的边缘部分法线一般xy比较大,主要针对的是地面,这样的面朝上的物体。因为其他物体,世界坐标下的法线方向没有这个规律。UE的插件用到的是法线z值直接power来做边界值。但是用法线的z值来做虽然可以表示沟壑。但是z值小的地方往往是沟壑的斜壁部分,因为这部分的法线在切线空间的xy值会比较大,z值比较小。所以这种做法对于那种垂直变化的法线是可以的,但是对于坡度比较缓的物体。首先雪出现在坡上而不是沟壑的底部,仔细看会不太正常。特别是当pow指数比较大的时候,这种情况就会特别明显。

主帖图方式


这里一减和不一减都可以。主要取决于原来依靠噪声图改变雪范围的时候,阈值是升的还是降的。


后面的时候直接用step来处理,将灰度值小于一定的直接就认为是黑的。只是这种做法会将某些不是缝隙的地方也算进去。

雪地出现的形状特殊

这个形状其实有点类似于结霜的过程,所以去搜索了一下AssetStore的霜Frost。
后来还是直接找了UE的同事截图发连线图, 下载UE以及直接查看插件比较快。

雪地出现的形状特殊,是一个点一个点直接出现的。而不是透明度从无到有。模仿雪落到地面之后的一点点增多的效果。
其实这个特殊形状还是溶解的扩散,只是溶解密度很大很大,所以一个小点小点出来看起来像点出来。

所以可以考虑将图做成2048*2048,然后将噪声密度设置得特别大。

所以需要图片本身的溶解范围很小,密度很高才行,配合到大地图还要将tiling设置得很高。

小点小点出来

其实真的小点小点出来还是不行的,会很突兀。但是这个点非常非常小,所以如果可以,需要一张密度很高的图。这样就看不出透明度的变化

实际上的在透明值0-0.5的情况下,是从0变到0.5或者0.4。然后在0.5或者0.4之后才是闪变到1.
这种做法其实也是会导致闪变 的问题。

最下面的multiply结果值是从0到1的渐变值。

后来就注意到了在lerp阶段的后期雪的面积增加是很均匀的,并且看不出透明变化的过程。所以是尽量将前期关于雪透明度的变量值往后期靠拢。

雪地脚印

参考 Unity学习shader笔记[一百四十四]雪地、沙地、泥地脚印

最后做法

最后还是回到某个刚调试好的PBR从lit更换到雪材质后表现无差的git的版本,把他的SG删减到最原始的PBR之后,以此为基础做的第二版雪扩展。

参考网址

雪地shader_游戏中沙漠、雪地的轨迹、脚印实现
Frost Effect
Snow Cover Shader

一百四十八:部署python项目之环境依赖

 

环境:centos7 + python3.6

 

准备工作,生成项目requirements.txt文件,用于存放第三方库和版本信息:pip freeze > requirements.txt,并且上传到服务器

一:准备python虚拟环境

pip install virtualenv
pip install virtualenvwrapper
安装virtualenvwrapper会自动安装virtualenv,所以直接安装virtualenvwrapper
这里指定豆瓣源安装速度快一些:pip install -i https://pypi.douban.com/simple virtualenvwrapper

安装完成会有一个virtualenvwrapper.sh文件,找到文件的位置:whereis virtualenvwrapper.sh

设置环境变量:vim ~/.bashrc

在文件末尾加上
export WORKON_HOME=$HOME/.virtualenvs
VIRTUALENVWRAPPER_PYTHON=/usr/local/python/bin/python3 防止找到python2,这里指定python3
source /usr/local/python/bin/virtualenvwrapper.sh

source一下,让变量生效:source ~/.bashrc

创建虚拟环境 :mkvirtualenv 环境名,安装完成后会自动进入虚拟环境

virtualenvwrapper常用命令列表
workon:列出虚拟环境列表
lsvirtualenv:同上
mkvirtualenv :新建虚拟环境
workon [虚拟环境名称]:切换虚拟环境
rmvirtualenv :删除虚拟环境
deactivate: 离开虚拟环境

进入虚拟环境,进项目requirements.txt所在目录,安装第三方库,同样,这里为了速度快些,使用豆瓣的源:
pip install -i https://pypi.douban.com/simple -r requirements.txt

二:安装mysql数据库见:https://www.cnblogs.com/zhongyehai/p/10475646.html

这里设置用户:root,密码:Admin123@qwe

创建数据库,数据库名与项目里面的数据库名一致,编码为utf8:create database test charset utf8;

由于数据库密码不一致,这里修改连接的信息,再执行数据库迁移

python manager.py db init
python manager.py db migrate
python manager.py db upgrade

 

把项目要用的端口开放
firewall-cmd --permanent --zone=public --add-port=8000/tcp
firewall-cmd --reload

 

普通运行模式运行看一下能不能访问

 

查询字符串的形式访问的接口,没有报错,说明数据库链接成功,没有查到数据是因为本身就没有数据

 

 

以上是关于Unity学习shader笔记[一百四十三]积雪二的主要内容,如果未能解决你的问题,请参考以下文章

Android开发笔记(一百四十一)读取PPT和PDF文件

小刘同学的第一百四十篇日记

第四百四十三天 how can I 坚持

一百四十八:部署python项目之环境依赖

测开之路一百四十八:WTForms表单验证

leecode第一百四十二题(环形链表II)