u3d texture2d显示透明_【Unity HDRP】Custom Pass 遮挡显示及描边效果

5efc4691f6dc5467bc01aeca84aa14aa.png

0. 前言

      近日,笔者在进行项目开发时,美术提出了一个需求,要让主角Player有个描边,而且被建筑遮挡的时候能有斜线使其显示出来。
      听到这个需求,笔者首先想到的是用后处理把两个效果都做掉,然后便想起了URP的Render Feature,因为笔者曾经看过以Render Feature实现遮挡半透明效果的教程。不过不同的是,我们的项目使用的是HDRP,而HDRP中与URP的Render Feature相对应的强大功能为Custom Pass
      在学习相关内容时发现,目前关于Custom Pass的资料实在稀少,笔者便决定在自己完成效果并理解原理后写一篇文章作为笔记,也权且当做一个简单的Custom Pass入门教程提供给各位。

0.1 关于CustomPass

      如上文所言,Custom Pass是个HDRP所独有的强大功能,它能够支持用户自定义Pass,并将其插入渲染管线的绝大部分位置。
      而HDRP默认有两种Custom Pass,分别为DrawRenderersCustomPassFullScreenCustomPass
      两者的用途都正如其名,前者为专门渲染某类物体的Pass,后者为全屏后处理的Pass。

8f8a9337c768caf0e449ece1eb9adece.png


      而在这次的效果实现中,我们就是要使用这两个Pass来完成。
      如果你想知道更多关于CustomPass的内容,可以参考官方文档:

https://docs.unity3d.com/Packages/com.unity.render-pipelines.high-definition@7.3/manual/Custom-Pass.html

0.2 效果实现原理


      虽然Custom Pass是个新功能,但是我们效果的基本原理其实跟传统的后处理做法是一样的,具体可参考下文


      简单来说,遮挡高亮的原理就是以两个深度图来进行对比,一个深度图所存的是Player的深度,一个是场景的深度,当场景的深度值大于Player的深度值(此时的深度图均为Reverse-Z的,即“近大远小”)时,我们即可判定Player被遮挡,便可以在这个像素上进行一些操作了。

      而后处理描边的原理可以参考这篇文章,言简意赅地说,就是想办法对我们需要绘制描边的那些物体额外绘制出一个“纯色”(物体为纯白或其他颜色,背景为纯黑)的buffer,然后对那个纯色buffer做边缘检测来进行描边。

乐园:利用StencilBuffer实现局部后处理描边78c8f8fbb348e3356b96d5bb322729e0.png


      只是这篇文章是利用Stencil Buffer来进行纯色buffer的绘制,我们则直接使用CustomPass即可。
      可以说,本文的方法是典型的新瓶装旧酒。

0.3 注

      笔者所用Unity版本为2019.4.6f1,HDRP 7.3.1

       笔者经验甚少,难以避免文中出现错误,还请大家不吝斧正,只求轻喷。

       本文代码参考自:

https://github.com/alelievr/HDRP-Custom-Passes


      且使用了其中的InnerColor图片(被遮挡时的那个斜线Texture):

6e725772589a04085b71a11ab2610d12.png
没错,白底的情况下你是看不清这张图的


      这个工程中还有许多CustomPass的使用示例,相当值得学习。


1. 绘制“纯色Buffer”及Player深度

      那么我们正式动工。

       在HDRP默认场景中创建一个Empty Object,然后给它添加Custom Pass Volume

9002905c8ec92facfa2e53ec43caa66b.png


      之后它点击右下角的"+",选择DrawRenderersCustomPass,

eba8228c4b1d254ddb85dd5a88439d39.png


      我们暂时不去修改它的默认值。

      那么以Create/Shader/HDRP/Custom Renderers Pass创建我们所需的Pass,并以它创建Material,放进刚刚创建的CustomPass的Overrides/Material中,当然,现在还没什么变化。

865b2b8a81ec7d3ebd4d730718601015.png


那么打开Shader,让我们来粗略地看一下它

Shader "Renderers/NewRenderersCustomPass"{
        Properties    {
            _Color("Color", Color) = (1,1,1,1)        _ColorMap("ColorMap", 2D) = "white" {}        // Transparency        _AlphaCutoff("Alpha Cutoff", Range(0.0, 1.0)) = 0.5    }    HLSLINCLUDE    #pragma target 4.5    #pragma only_renderers d3d11 ps4 xboxone vulkan metal switch  
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值