HDRP 自定义DecalGraph,以实现AlphaCutoff等功能

2024-02-02 21:10

本文主要是介绍HDRP 自定义DecalGraph,以实现AlphaCutoff等功能,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

HDRP,自定义DecalGraph,以实现AlphaCutoff等功能

  • 综述
    • 1. Emission无法AlphaCutoff
    • 2. Decal根据Layer判断是否接受投影,而不是Lit.ReceiveDecal

综述

HDRP自带了多种Shader,如Lit,Decal,Unlit,LayeredLit,TerrainLit等,可实现多种效果,具体参数可查询UnityLearn或官方文档。在笔者的使用过程中(Unity 2019.4.10f, HDRP7.3.1),遭遇了某些Decal表现上的问题,所以尝试以其他方式实现。

1. Emission无法AlphaCutoff

普通Decal开启Emission后
在这里插入图片描述在这里插入图片描述
在这里插入图片描述asd

很明显,BaseMap上部分Alpha为0,直接Decal上去也进行了Cutoff,但是对于Emission,用相同贴图进行采样就没有进行CutOff,导致圆周外围部分也进行了Emission,与需求效果不符。

经过多番测试,自定义一个DecalGraph,自行实现Cutoff可以解决问题。

  • 首先,创建一个DecalGraph, Create/Shader/HDRP/Decal Graph

  • 创建变量如下"
    在这里插入图片描述
    _BaseMap :对应Decal的贴图
    _BaseColor: BaseMap采样后Multiply的颜色
    _EnableEmission: 是否开启Emission
    _EmissionColor: Emission颜色(默认采用BaseMap,可自行修改)
    _EmissionIntensity:Emission强度
    _EimissionWeight: Emission权重(用于混合BaseColor + EmissionColor)

  • 核心思路:
    通过BaseMap采样的Alpha进行Branch操作,如果>0才输出Color/Emission,否则不输出. BaseMap输出BaseColorBaseColor Opacity都可以采用这种判断
    在这里插入图片描述

  • EmissionNode:
    HDRP中存在一个EmissionNode,只有使用这个节点并配置参数才能真正开启Emission.使用之前定义的变量为节点赋值,最终结果输出给DecalMaster的Emission就好.
    在这里插入图片描述
    此外Metal,Smooth等参数也有影响,需要微调.

  • 最终结果如下:
    在这里插入图片描述

在这里插入图片描述
文件链接(修改至Github):
https://github.com/123455151/Unity-HDRP-SharedAssets/tree/main/Decal%20Shadergraph

2. Decal根据Layer判断是否接受投影,而不是Lit.ReceiveDecal

这个问题在HDRP 9.x/10.x版本中会得到解决,当前版本暂时没有解决办法,先留个坑。

Ps:
2022-3-25:已修改下载链接至Github

这篇关于HDRP 自定义DecalGraph,以实现AlphaCutoff等功能的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/671958

相关文章

SpringBoot实现微信小程序支付功能

《SpringBoot实现微信小程序支付功能》小程序支付功能已成为众多应用的核心需求之一,本文主要介绍了SpringBoot实现微信小程序支付功能,文中通过示例代码介绍的非常详细,对大家的学习或者工作... 目录一、引言二、准备工作(一)微信支付商户平台配置(二)Spring Boot项目搭建(三)配置文件

基于Python实现高效PPT转图片工具

《基于Python实现高效PPT转图片工具》在日常工作中,PPT是我们常用的演示工具,但有时候我们需要将PPT的内容提取为图片格式以便于展示或保存,所以本文将用Python实现PPT转PNG工具,希望... 目录1. 概述2. 功能使用2.1 安装依赖2.2 使用步骤2.3 代码实现2.4 GUI界面3.效

MySQL更新某个字段拼接固定字符串的实现

《MySQL更新某个字段拼接固定字符串的实现》在MySQL中,我们经常需要对数据库中的某个字段进行更新操作,本文就来介绍一下MySQL更新某个字段拼接固定字符串的实现,感兴趣的可以了解一下... 目录1. 查看字段当前值2. 更新字段拼接固定字符串3. 验证更新结果mysql更新某个字段拼接固定字符串 -

java实现延迟/超时/定时问题

《java实现延迟/超时/定时问题》:本文主要介绍java实现延迟/超时/定时问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Java实现延迟/超时/定时java 每间隔5秒执行一次,一共执行5次然后结束scheduleAtFixedRate 和 schedu

Java Optional避免空指针异常的实现

《JavaOptional避免空指针异常的实现》空指针异常一直是困扰开发者的常见问题之一,本文主要介绍了JavaOptional避免空指针异常的实现,帮助开发者编写更健壮、可读性更高的代码,减少因... 目录一、Optional 概述二、Optional 的创建三、Optional 的常用方法四、Optio

在Android平台上实现消息推送功能

《在Android平台上实现消息推送功能》随着移动互联网应用的飞速发展,消息推送已成为移动应用中不可或缺的功能,在Android平台上,实现消息推送涉及到服务端的消息发送、客户端的消息接收、通知渠道(... 目录一、项目概述二、相关知识介绍2.1 消息推送的基本原理2.2 Firebase Cloud Me

Spring Boot项目中结合MyBatis实现MySQL的自动主从切换功能

《SpringBoot项目中结合MyBatis实现MySQL的自动主从切换功能》:本文主要介绍SpringBoot项目中结合MyBatis实现MySQL的自动主从切换功能,本文分步骤给大家介绍的... 目录原理解析1. mysql主从复制(Master-Slave Replication)2. 读写分离3.

Redis实现延迟任务的三种方法详解

《Redis实现延迟任务的三种方法详解》延迟任务(DelayedTask)是指在未来的某个时间点,执行相应的任务,本文为大家整理了三种常见的实现方法,感兴趣的小伙伴可以参考一下... 目录1.前言2.Redis如何实现延迟任务3.代码实现3.1. 过期键通知事件实现3.2. 使用ZSet实现延迟任务3.3

基于Python和MoviePy实现照片管理和视频合成工具

《基于Python和MoviePy实现照片管理和视频合成工具》在这篇博客中,我们将详细剖析一个基于Python的图形界面应用程序,该程序使用wxPython构建用户界面,并结合MoviePy、Pill... 目录引言项目概述代码结构分析1. 导入和依赖2. 主类:PhotoManager初始化方法:__in

springboot filter实现请求响应全链路拦截

《springbootfilter实现请求响应全链路拦截》这篇文章主要为大家详细介绍了SpringBoot如何结合Filter同时拦截请求和响应,从而实现​​日志采集自动化,感兴趣的小伙伴可以跟随小... 目录一、为什么你需要这个过滤器?​​​二、核心实现:一个Filter搞定双向数据流​​​​三、完整代码