在Unity中使用ComputeShader(URP版本)

本文续前一篇《在Unity中使用ComputeShader》
https://blog.csdn.net/tangyin025/article/details/110876760

修改成使用URP环境下实现ComputeShader
Unity2019需要安装Package:Universal RP
在这里插入图片描述
安装之后,通过菜单 Asset | Create | Rendering | Universal Render Pipeline | Pipeline Asset (Forward Renderer),创建UniversalRenderPipelineAsset.asset、UniversalRenderPipelineAsset_Renderer.asset
在这里插入图片描述
再到菜单 Edit | Project Settings… | Graphics,设置Scriptable Render Pipeline Settings为刚才创建的asset,这样就将现有的工程修改为URP环境了
在这里插入图片描述
接下来准备好和上一篇一样的资源:

  • Cube.prefab
  • NewComputeShader.compute
  • NewSurfaceShader 1.shader
  • New Material 1.mat
  • NewBehaviourScript1.cs

其中NewSurfaceShader 1.shader必须修改为支持URP的HLSL版本

Shader "Custom/NewSurfaceShader 1"
{
    Properties
    {
    }
    SubShader
    {
        Tags { "RenderType" = "Opaque" "RenderPipeline" = "UniversalPipeline" }
        Pass
        {
            HLSLPROGRAM
            #pragma vertex vert
            #pragma fragment frag
            #pragma multi_compile_instancing
            #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"
            #pragma instancing_options procedural:ConfigureProcedural
            #pragma editor_sync_compilation
            #if defined(UNITY_PROCEDURAL_INSTANCING_ENABLED)
            StructuredBuffer<float3> _Positions;
            #endif
            float2 _Scale;
            void ConfigureProcedural()
            {
                #if defined(UNITY_PROCEDURAL_INSTANCING_ENABLED)
                float3 position = _Positions[unity_InstanceID];
                unity_ObjectToWorld = 0.0f;
                unity_ObjectToWorld._m03_m13_m23_m33 = float4(position, 1.0f);
                unity_ObjectToWorld._m00_m11_m22 = _Scale.x;

                unity_WorldToObject = 0.0f;
                unity_WorldToObject._m03_m13_m23_m33 = float4(-position, 1.0f);
                unity_WorldToObject._m00_m11_m22 = _Scale.y;
                #endif
            }
            struct Attributes
            {
                float4 positionOS   : POSITION;
                UNITY_VERTEX_INPUT_INSTANCE_ID
            };
            struct Varyings
            {
                float4 positionCS   : SV_POSITION;
                float4 color        : COLOR;
                UNITY_VERTEX_INPUT_INSTANCE_ID
                // UNITY_VERTEX_OUTPUT_STEREO // VR、立体眼镜支持
            };
            Varyings vert(Attributes input)
            {
                Varyings output = (Varyings)0;
                UNITY_SETUP_INSTANCE_ID(input);
                UNITY_TRANSFER_INSTANCE_ID(input, output);
                // UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(output);
                VertexPositionInputs vertexInput = GetVertexPositionInputs(input.positionOS.xyz);
                output.positionCS = vertexInput.positionCS;
                output.color = float4(saturate(vertexInput.positionWS * 0.5f + 0.5f), 1);
                return output;
            }
            half4 frag(Varyings input) : SV_Target
            {
                UNITY_SETUP_INSTANCE_ID(input);
                // UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(input);
                return input.color;
            }
            ENDHLSL
        }
    }
    FallBack "Diffuse"
}

修改之后,工程Reimport一下,确保没有错误。新建场景、新建Empty Object,挂载NewBehaviourScript1.cs,设置好Compute Shader、Material、Mesh等参数,就能运行了
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值