unity Shader实现半透明阴影

2023-11-15

在shader中,要对移动端的兼容,还不想实现两套分开兼容的话,

#pragma exclude_renderers gles gles3 glcore
#pragma target 4.5

这两句话一定要改掉,第一行代码直接剔除了gles的渲染,而恰恰大部分移动端都是用的gles(安卓平台)所以,第一行要去掉。第二行是针对于ShaderMod,也就是一些shader新特性,可以调低,内置的lit里面是实现了两套一套高质感的用来配合pc,对gles平台专门书写了一套高性能的渲染。
如果我们需要多端兼容的话,推荐target的值 3 或者 3.5,放弃一些不兼容的特性。

目前unity URP对半透明对象的处理:不能参与Shadow Map,Depth,Depth Normal的渲染,可以在材质Debug模式下查看。
并且半透明无法产生阴影,屏幕空间阴影(这个需要深度),SSAO
半透明阴影:利用UnityDitherMask3D贴图解决
实现:
首先在ShadowPass的头部定义宏:

#if (SHADER_API_D3D11 || SHADER_API_GLCORE || SHADER_API_GLES3 || SHADER_API_METAL || SHADER_API_VULKAN)
    #define CAN_SKIP_VPOS
#endif

用来确定当前是否可以支持这种方式。

声明一张贴图,这是一张3d贴图,unity内置提供的

TEXTURE3D(_DitherMaskLOD); SAMPLER(sampler_DitherMaskLOD);

然后在片元着色器上面增加参数:

half4 ShadowPassFragment(Varyings input
#if !defined(CAN_SKIP_VPOS)
    , UNITY_VPOS_TYPE vpos : VPOS
#endif
) : SV_TARGET
{

这个是能够直接获取到屏幕空间的位置。

最后,在shader中增加噪波相关的运算:

half4 ShadowPassFragment(Varyings input
#if !defined(CAN_SKIP_VPOS)
    , UNITY_VPOS_TYPE vpos : VPOS
#endif
) : SV_TARGET
{
    half4 BaseColorAlpha = SAMPLE_TEXTURE2D(_BaseMap, sampler_BaseMap, input.uv) * _BaseColor;
    half3 BaseColor = BaseColorAlpha.rgb;
    half BaseAlpha = BaseColorAlpha.a;
    #if defined(_ALPHATEST_ON)
        clip(BaseAlpha - _Cutoff);
    #endif

    #if defined(_SURFACE_TYPE_TRANSPARENT)
        #if defined(CAN_SKIP_VPOS)
            float2 vpos = input.positionCS;
        #endif
        half alphaRef = SAMPLE_TEXTURE3D(_DitherMaskLOD, sampler_DitherMaskLOD, float3(vpos.xy * 0.25, BaseAlpha * 0.9375)).a;
        clip(alphaRef - 0.01);
    #endif

    return 0;
}

在这里插入图片描述
注意,查看材质的ShadowPass不要被禁掉,要不然就无法渲染阴影了。
在这里插入图片描述
可以看到透明度设置为1的时候,和不透明效果一样。
在这里插入图片描述
修改透明度,不但模型变透明了,阴影也跟着变透明了。

它这种实现的原理其实不是真的透明了,是通过Dither这个东西实现的,一直会更新的噪波图,然后模拟出来的半透明效果。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

unity Shader实现半透明阴影 的相关文章

  • c#获取cpu序列号

  • Unity 粒子特效、材质发光 HDR ShaderGraph图文教程[完成lit发光设置]

    效果如图 准备工作 在hdr模式下 关闭Directional Light 相机设置 移动球挂一个点光源作为子节点 设置自行调节 0 创建移动球的材质及shader shader gt 在Project Create Shader Grap
  • Unity中按钮检测鼠标状态

    改方法主要是用于按钮检测鼠标的进入 滑出 点击 抬起 长按 长按停止 1 先将下面这个脚本挂载到需要检测鼠标状态的按钮上 using System Collections using System Collections Generic u
  • Unity动画系统详解

    目录 动画编辑器 编辑器面板 动画复用 前言 人形重定向动画 Humanoid 通用动画 Generic 旧版本动画 Legacy 动画控制器 系统状态 切换条件 状态机脚本 IK动画 反向动力学 BlendTree 混合树 Animato
  • Unity3d 插件 系列——DoTweenPro介绍(图文详细+案例)

    Unity3d 插件 系列 DoTweenPro介绍 图文详细 案例 前言 一 DoTweenPro简介 二 DoTweenPro安装 三 DoTweenPro主要组件 1 DoTweenAnimation 2 DoTweenPath 3
  • unity中创建询问弹出窗口

    在开发过程中进程会遇到需要弹出一个窗口询问用户是否进行的操作 今天就来制作一个这样弹出窗口 然后根据弹出窗口的选择内容不同进行不同的操作 本例中主要是为了删除一个数据 而在删除数据操作前需要得到用户的一个确认操作 这里面主要用到了Notif
  • unity3d大型互动照片墙

    1 本次应客户需求 制作一个大型照片墙互动 输出分辨率为9600 4320 注 unity3d官方推荐最大分辨率为8192 3686 4 经过现场长达24小时暴力测试中途未发生问题 姑且判定可以达到正常标准 废话不多说 先上效果 unity
  • VLC for unity 插件如何使用

    VLC for unity 插件如何使用 先去下载一个VLC播放器 安装完成后 然后导入插件链接https download csdn net my 这个插件我的另一个上传资源里有 或者到商店去下载 这个插件链接下载完是一个txt文档 里面
  • 【Unity】按Esc进入操作菜单

    本文章是基于如下视频的自我总结 https www youtube com watch v JivuXdrIHK0 步骤如下 1 在Canvas 界面添加一个Panel Panel中添加一个按钮 调整按钮的大小为合适大小 调整字体的大小为合
  • Unity保存图片到相册

    Unity保存图片到Android相册 Java 纯文本查看 复制代码 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
  • unity实现鼠标右键控制视角

    主要实现的功能是相机跟随主角 鼠标右击移动后 相机的视角会旋转 思路 在主角里创建空的子物体 把相机绑在空物体上 通过旋转空物体来实现视角的旋转 要把相机调整到适当位置 代码如下 public float rotateSpeed 100 设
  • Unity万向节死锁解决方案(2023/12/4)

    1 万向节死锁无法解决 这是因为它的特性就是如此 就像玻璃杯就是玻璃 这不可否认 别钻牛角尖昂 2 大多数情况下欧拉角足够用 例如 CF 摄像机不可能绕z轴旋转 x轴旋转也不会超过九十度 因为那样人物的腰子会被扭断 塔防游戏 保卫萝卜 吃鸡
  • unity3d 自定义的图片无法放入source image中

    须将图片的texture type改为 sprite
  • unity3d image组件不显示

    需要将UI组件放到画布下面
  • 【转载】【Unity】WebSocket通信

    1 前言 Unity客户端常用的与服务器通信的方式有socket http webSocket 本文主要实现一个简单的WebSocket通信案例 包含客户端 服务器 实现了两端的通信以及客户端向服务器发送关闭连接请求的功能 实现上没有使用U
  • 【Unity】运行时创建曲线(贝塞尔的运用)

    Unity 运行时创建线 贝塞尔的运用 1 实现的目标 在运行状态下创建一条可以使用贝塞尔方法实时编辑的网格曲线 2 原理介绍 2 1 曲线的创建 unity建立网格曲线可以参考 Unity程序化网格体 的实现方法 主要分为顶点 三角面 U
  • Unity学习笔记

    一 旋转欧拉角 四元数 Vector3 rotate new Vector3 0 30 0 Quaternion quaternion Quaternion identity quaternion Quaternion Euler rota
  • 游戏开发创建操作之玩家信息系统的建立

    游戏一般都需要玩家信息系统 那么我们应该如何搭建玩家信息系统 接下来我将展示一种简单的方法 完整代码如下 using System Collections using System Collections Generic using Uni
  • 游戏开发常见操作梳理之小地图的制作

    游戏中一般存在小地图系统 实际上就是设置一个新的摄像机放置在玩家的正上方 然后在小地图上显示新摄像机看见的东西就可以了 在小地图上一般存在放大地图和缩小地图的按钮可以方便放大和缩小地图 这些操作是如何实现的呢 接下来直接上核心代码 usin
  • 游戏开发常用实践操作之按动任意键触发

    接下来一些笔记会对于一些大大小小的实践操作进行记录 希望对你有所帮助 在游戏中 我们经常会遇到一些按动任意键触发的操作 接下来展示核心代码 以下是对于Unity中的操作 使用的UI是NGUI 对于核心操作没有影响 你可以自己置换 void

随机推荐

  • 汽配企业如何利用MES管理系统解决生产防错难题

    汽车配件制造业是一个高效率 低成本 高质量的生产领域 但同时也面临着一系列的挑战 其中最为突出的挑战之一是如何在生产过程中避免错误 提高产品的合格率 本文将介绍汽车配件的制造特点以及如何通过MES管理系统解决方案实现生产防错 从而提高产品合
  • 爬虫逆向(js逆向)

    异步爬虫的实现方式 线程池 多任务的异步协程 多线程 生产者消费者模型 线程池 前提 from flask import Flask render template from time import sleep app Flask name
  • 【NLP】文本聚类和主题建模

    大家好 我是Sonhhxg 柒 希望你看完之后 能对你有所帮助 不足请指正 共同学习交流 个人主页 Sonhhxg 柒的博客 CSDN博客 欢迎各位 点赞 收藏 留言 系列专栏 机器学习 ML 自然语言处理 NLP 深度学习 DL fore
  • Chrome浏览器更新之后在开发者工具中查看格式化后的js不显示行号问题

    最近更新了谷歌浏览器 然后在调试代码的时候发现一个问题 就是当js代码是压缩后的 将其格式化之后就只显示压缩之前的行号了 如下 未格式化的 格式化之后 这样就很无语了 突然没有了行号就很不习惯了 经过在浏览器设置里面一番找之后终于找到设置这
  • 微信公众号开发(一)——开发模式接入,消息的接收与响应

    1 想自己开一个公众号 先学习一下用 Java 进行微信公众号的开发 微信公众号的管理有开发模式和编辑模式两种 两者是互斥的 腾讯是这么讲的 编辑模式 编辑模式指所有的公众号运营者都可以通过简单的编辑 设置 按关键字回复 等功能 您可以设定
  • python 打包成可执行文件

    文章目录 pyinstaller 另外一个打包工具Nuitka 常见命令选项 工具很多 只说两个 pyinstaller 网上很多人说 pyinstaller 打包慢啊 文件大啊 这那这那的 可能是我还没理解别的工具的妙用 我发现 pyin
  • Unsupported major.minor version 52.0 版本不支持问题

    摘自 https blog csdn net qq 36769100 article details 78880341 Unsupported major minor version 52 0 这个错误网上一百度一大堆 我就简单的记一下 直
  • 从github上下载下来的c++代码用vs或QTCreator运行起来(Cmake)

    初学C 从github上下载了一份源码 不知道怎么运行 特此来记录一下 源码下载下来如图所示 1 用VS运行的方法 1 文件里有CMake 需要我们有CMake工具来构建 所以第一步就是下载CMake 下载链接 Download CMake
  • 微信小程序tab切换,可滑动切换,导航栏跟随滚动实现

    微信小程序tab切换 可滑动切换 导航栏跟随滚动实现 简介 看到今日头条小程序页面可以滑动切换 而且tab导航条也会跟着滚动 点击tab导航 页面滑动 切导航栏也会跟着滚动 就想着要怎么实现这个功能 像商城类商品类目如果做成左右滑动切换类目
  • 关于:Google Chrome 官方下载地址

    1 官方在线安装版 Google Chrome 网络浏览器https www google cn intl zh CN chrome 2 官方离线安装版
  • 五大学科竞赛(二)NIOP全国青少年信息学奥林匹克分区联赛竞赛大纲

    一 初赛内容与要求 表示普及组不涉及 以下同 计 基 算 本 机 常 的 识 诞生与发展 特点 在现代社会中的应用 计算机系统的基本组成 计算机的工作原理 计算机中的数的表示 计算机信息安全基础知识 计算机网络 计 基 算 本 机 操 的
  • IDEA使用JDBC连接MySQL数据库详细教程

    文章目录 创建项目 导入驱动 让导入的驱动生效 注册数据库驱动 连接数据库 创建项目 首先需要保证你已经成功安装mysql和下载连接MySQL数据库的驱动 在IDEA里面创建一个java项目 选择创建Java项目 JDK这里选择1 8 直接
  • 二进制文件与文本文件详解

    二进制文件 定义 二进制文件就是把内存中的数据按其在内存中存储的形式原样输出到磁盘中存放 即存放的是数据的原形式 二进制文件是包含在 ASCII 及扩展 ASCII 字符中编写的数据或程序指令的文件 一般是可执行程序 图形 声音等文件 有自
  • LeetCode 4 - 寻找两个正序数组的中位数

    二分 递归 如果某个有序数组长度是奇数 那么其中位数就是中间元素 如果长度是偶数 那么中位数就是中间两个数字的平均值 假设两个有序数组的长度分别为 m 和 n 由于两个数组长度之和 m n 的奇偶不确定 为了简化代码 在合并后的数组找到第
  • Android 环信的简单使用

    最近在项目中用到了即使用讯 客户要求用环信 我擦 第一次做 坑啊 网上对这个没有特别明确的使用教程 环信的官网也不像其他的第三方有明确的使用方法 只是说了一个简单的集成 看其他人的博客感觉都说的很麻烦 很含糊 所以现在项目完成了 做个简单的
  • MySQL数据库更换数据路径

    1 路径 原路径 datadir var lib mysql socket var lib mysql mysql sock log error var log mysqld log 更换后目标路径 datadir home mysql s
  • win10 python永久换源-- 解决VSCode配置ESP IDF到最后python virtual environment 错误 问题

    运行shell 找到 python 的 Scripts 文件夹下 例如 cd F ESP VSC ESP32 ENV python env idf4 4 py3 8 env Scripts 执行它 pip config set global
  • HTML静态网页设计基础

    如何新建一个HTML文件 答 1 新建一个TXT文件 2 打开TXT文件后 输入网页基本结构 另存为 可得到 回答over 下一步 html静态网页的基本结构 以及插入图片 插入超链接 分段 换行 标题号 表格标签 标题号 h2 第二分网页
  • java和bootstrap实现行内编辑

    实现BootstrapTable单个单元格编辑后立马提交保存 批量编辑已经选中的单元格后提交保存的实现 排序有点乱了 随便记一下吧 大概就是引入这三个文件 首先引入x editable相关的js css文件
  • unity Shader实现半透明阴影

    在shader中 要对移动端的兼容 还不想实现两套分开兼容的话 pragma exclude renderers gles gles3 glcore pragma target 4 5 这两句话一定要改掉 第一行代码直接剔除了gles的渲染