Unity3D GPU Instancing测试

本文探讨了Unity3D中的GPU Instancing技术,通过对比静态合并批次和自定义Shader的效果,发现对于不动的物体静态合并批次更为高效。接着测试了Graphics.DrawMeshInstanced()方法,适用于移动物体并能稳定实现60帧。最后提到了Graphics.DrawMeshInstancedIndirect()的限制及其在PC上的应用,并给出相关Shader和代码示例,适合于创建大规模的植被等场景。
摘要由CSDN通过智能技术生成

GPU instancing 很早就支持手机了(Android只支持Opengl ES 3.0),最近在调研这个就对它测试了一下。

如果是不动的物体勾选static静态合并批次(40-50帧率)

 

自定义Shader中勾选Enable GPU Instancing

 

帧率竟然还不如静态合批次(帧率 30-40)

 

自定义Shader

Shader "SimplestInstancedShader1"

{

    Properties

    {

        _Color ("Color", Color) = (1, 1, 1, 1)

        _MainTex ("Texture", 2D) = "white" {}

 

    }

 

    SubShader

    {

        Tags { "RenderType"="Opaque" }

        LOD 100

 

        Pass

        {

            CGPROGRAM

            #pragma vertex vert

            #pragma fragment frag

            #pragma multi_compile_instancing

            #include "UnityCG.cginc"

 

            struct appdata

            {

                float4 vertex : POSITION;

                float2 uv : TEXCOORD0;

                UNITY_VERTEX_INPUT_INSTANCE_ID

            };

 

            struct v2f

            {

                float2 uv : TEXCOORD0;

                float4 vertex : SV_POSITION;

                UNITY_VERTEX_INPUT_INSTANCE_ID // necessary only if you want to access instanced properties in fragment Shader.

            };

 

            UNITY_INSTANCING_BUFFER_START(Props)

                UNITY_DEFINE_INSTANCED_PROP(float4, _Color)

            UNITY_INSTANCING_BUFFER_END(Props)

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值