URP实现毛玻璃效果一

本文介绍了在Unity的Universal Render Pipeline (URP)中如何实现毛玻璃效果。首先,详细讲解了URP的设置,包括确保所有层级,包括UI和毛玻璃层,都被正确渲染。接着,利用URP的Cbuffer shader抓取屏幕内容,并应用高斯模糊处理,将结果存入特定纹理。最后,为需要毛玻璃效果的物体分配材质球,使用定制的Shader将模糊后的图像映射出来。关键步骤包括URP配置、屏幕抓取Shader和毛玻璃效果Shader的编写。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先URP官方已经给了很详细的实现方案,知乎参考链接:https://zhuanlan.zhihu.com/p/248903320
原理就是在渲染所有3D和UI之后通过URP的Cbuffer shader进行屏幕抓取,然后再对抓到的图进行高斯模糊,然后映射到指定的毛玻璃效果的图上。

URP设置
在这里插入图片描述
默认的ForwardRender里 层级过滤设为所有,UI层级也好,毛玻璃层级也好都需要被渲染
GrabColor里:通过指定的Blurshader指定抓屏的层级(去掉毛玻璃层),开启抓屏并保存,然后经过高斯模糊,输出到指定的TextureName的RT上。
对需要实现毛玻璃效果的物体添加毛玻璃材质球,此材质球的shader中使用上一步获得的RT,映射出毛玻璃效果
此操作涉及到三个重点:1.URP设置 2.抓屏shader 3.毛玻璃效果shader

抓屏Shader

Shader "WeiLe/Blur_Gaussian"
{
   
    Properties
    {
   
        blurRangeX("Blur x", float) = 1
        blurRangeY("Blur y", float) = 1 
    }
    SubShader
    {
   
        Tags {
    "RenderType" = "Opaque" "RenderPipeline" = "UniversalPipeline"}
        LOD 100

        Pass //pass 0
        {
   
            Name "BlurX"
            ZTest Always
            ZWrite Off
            Cull Off

            HLSLPROGRAM
            #pragma vertex vert
            #pragma fragment frag
            #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Color.hlsl"
            #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"

            struct Attributes
            {
   
                float4 positionOS       : POSITION;
                float2 uv               : TEXCOORD0;
            };

            struct Varyings
            {
   
                float4 positionCS       : SV_POSITION;
                float2 uv               : TEXCOORD0;
            };


            CBUFFER_START(UnityPerMaterial)
            float4  _SourceTex_Blur1_ST;
            float   blurRangeX = 1;
            float4  _SourceTex_Blur1_TexelSize;
            CBUFFER_END

            TEXTURE2D (_SourceTex_Blur1);
            SAMPLER(sampler_SourceTex_Blur1);
            #define  SampleCount  10

            Varyings vert(Attributes v)
            {
   
                Varyings o = (Varyings)0;

                o.positionCS = TransformObjectToHClip(v.positionOS.xyz);
                o.uv.xy  = TRANSFORM_TEX(v.uv.xy, _SourceTex_Blur1);

                return o;
            }
            half4 frag(Varyings i) : SV_Target
            {
   
                UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(input);

                half4 col = 0;
                int s = 
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值