工程链接:

链接:https://pan.baidu.com/s/1GmDZt2wRCIP7AlbM-uGhSw 
提取码:2gm1

鼠标点击地形会出现雪地轮廓,可扩展具体代码Snow脚本,修改射线检测处即可。

Shader可视化编辑器使用插件AmplifyShader

脚本说明:利用Graphics.DrawTexture将Rt参数的RendererTexture贴图修改,修改RT贴图的shader是stamp材质球的shader,输入有_SourceTex(RT图)和_SourceUV(被绘制的小图DrawImg所在RT图空间的[0,1]uv值),Snow脚本是通过射线检测点击到Plane地形就会在它身上绘制一个DrawImg图片,并输出到屏幕。

MySnow Shader说明:HeightToNormal 这是一个Shader函数体,输入的是整个Plane相关的数据,它会根据贴图高度(RT图)生成一个法线(根据高度生成法线),并用这个法线作为最终渲染的法线数据(增加明显的凹凸效果),对应如下框中的区域

这Tessellation是细分网格,因为原本的Plane网格顶点数太少了需细分才好看,Android端可以调整它来优化性能。

这部分是进行一个对顶点偏移朝着法线方向。

这部分是优化细节,AO环境遮罩增加立体感,Normal法线贴图,Albedo和Color自定义颜色。

这个default贴图是定义Plane初始值高度的,因为整体而言就是控制高度变化来形成雪地效果,其他都是表现优化,你可以设置到10~20左右的值即可(RGBA值)

DrawImg是被绘制的小图也就是鼠标点击到的地方会绘制出的轮廓图,可见是一个圆形四周RGBA高,越往中间越黑(越低数值)的高度图片。

stamp Shader说明:取DrawImg的图片像素值RGBA去叠加到RT图即(Plane图)的RGBA值,最终输出到屏幕上(通过Graphics.DrawTexture)其中SouceTex是RT图(Plane图),MainTex是DrawImg图,可视化里的节点看着很复杂其实就是采样出DrawImg分别在[-1,0]范围和[0,1]范围的RGBA数值,用[0,1]范围的数值进行对RT图相乘(加权),用[-1,0]范围的数值对相乘后的RT图数值相加,并且保持输出的Alpha值还是MainTex(DrawImg图)的Alpha,最终将它绘制到屏幕鼠标点击的位置上。

说说较难理解的部分:

这里_SourceUV是DrawImg图所在Plane图的相对UV值求法:

Vector4 sourceUV = new Vector4();sourceUV.x = rect.x / rt.width;sourceUV.y = 1 - rect.y / rt.height;sourceUV.z = rect.width / rt.width;sourceUV.w = rect.height / rt.height;sourceUV.y -= sourceUV.w;

rt为Plane图的renderertexture,其中x,y是rect(DrawImg图)的坐标左下角点,z,w是DrawImg图的宽高值,这xyzw都要除以相应的Plane图宽或高是为了将它们相对Plane图归一化到[0,1]的空间。 其中, 1 - rect.y 和 最后的 -= sourceUV.w 都是因为笛卡尔坐标系空间不同兼容问题,将Y倒转。比如:假设rect和rt一样大,左手坐标系 Y是0.2,但实际是用右手坐标系就需要变为-0.2,也就是 (1-0.2) - 1。

【Unity】Shader效果——Snow雪地相关推荐

  1. (一)unity shader在实际项目中出现的问题————unity的后处理插件景深效果在某些低档机(如三星)无效的解决方案

    本专栏主要解决一些移动平台上unity shader效果异常的问题.很多情况下我们发现unity中的shader在PC平台效果正常,但是在移动平台上效果不对,或者部分机型效果不对的问题,尤其是低档老年 ...

  2. Unity镜子效果的实现(无需镜子Shader)

    Unity镜子效果制作教程 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人! (拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- 心分享 ...

  3. Unity shader学习之屏幕后期处理效果之高斯模糊

    高斯模糊,见 百度百科. 也使用卷积来实现,每个卷积元素的公式为: 其中б是标准方差,一般取值为1. x和y分别对应当前位置到卷积中心的整数距离. 由于需要对高斯核中的权重进行归一化,即使所有权重相加 ...

  4. Unity Shader 之 透明效果

    本文引用 Unity Shader入门精要 开启透明混合后,一个物体被渲染到屏幕上时,每个片元除了颜色值和深度值外,还有--透明度.透明度为1,则完全不透明,透明度为0,则完全不会显示. 在Unity ...

  5. Unity Shader - GrabPass 实现武器热扭曲拖尾效果

    文章目录 先来看看效果 实现思路 Unity带的TrailRender组件 编写脚本实现 CSharp Shader 参数 注意性能 还可以优化 总结 Project 以前龙之谷喜欢选战士,帅气. 战 ...

  6. Unity Shader 实现透明护盾效果

    这是大致的效果图,图片压得有点糊.我参考了本篇博客 Unity shader护盾特效. 这是原博客展示的图片: 本例采用了特殊的模型与贴图,原博客里有视频链接的教程,从模型到贴图. 以下是代码 // ...

  7. Unity Shader 之 简单 护盾Shield 效果的实现

    Unity Shader 之 简单 护盾Shield 效果的实现 目录 Unity Shader 之 简单 护盾Shield 效果的实现 一.简单介绍 二.实现原理

  8. Unity Shader 实现简单的压扁效果

    有点累啊,一个CoverMap搞了一周多,还是太嫩了,还有好多东西等着我去学呢,今天就写个简单的东西吧--一个把模型压扁的效果,参考博客Unity Shader - 一些玩具Shader.话不多说,先 ...

  9. Unity Shader 之 简单实现物体被压扁(top顶点的逐渐与bottom顶点重合)的效果

    Unity Shader 之 简单实现物体被压扁(top顶点的逐渐与bottom顶点重合)的效果 目录 Unity

最新文章

  1. Nginx模块参考手册中文版
  2. python代码规范快捷键_pycharm格式化代码 常用快捷键
  3. shell脚本中的输入输出
  4. WinCE/Mobile上下滑动浏览DataGrid数据 【转】
  5. TikTok广告投放指南(基础入门)
  6. Linux中.a,.la,.o,.so文件的意义和编程实现
  7. JZOJ 3809. 【NOIP2014模拟8.25】设备塔
  8. MyBatis开发Dao的方法
  9. react 动态添加class_02.react进阶指南
  10. 38 | 案例篇:怎么使用 tcpdump 和 Wireshark 分析网络流量?
  11. 蓝桥杯2015初赛-奇妙的数字
  12. idea mysql 逆向生成,IDEA mybatis-generator逆向工程生成代码
  13. API功能未授权原因
  14. 【Python】keras使用Lenet5识别mnist
  15. 中级.NET开发人员应该知道些什么?
  16. Eclipse 中最常用的快捷键大全
  17. 廖雪峰git教程总结
  18. matlab max函数 最大值好几个,matlab中的最大值和最小值
  19. 计算机自检报错无法开机,电脑开机不自检无显示是怎么回事?
  20. Flutter3.0导入english_words报错flutter\packages\flutter_tools\gradle\flutter.gradle‘ 行: 1156

热门文章

  1. Flutter —— dio
  2. Flutter网络请求库DIO入门文档,实战案例
  3. js二维数组和多维数组 flatMap ( )
  4. WebVR简介和常用资源链接
  5. 【陈工笔记】# 若干块GPU,如何进行选择?一句代码搞定 #
  6. java调用海康威视sdk获取车牌号demo
  7. jenv add “ln No such file or directory“解决办法
  8. vue3 + vant 全局的loading效果制作,写的挺好的留个底
  9. 易联云打印机 php
  10. 3D建模软件FreeCAD