GetBoidDataBuffer() публичный Метод

public GetBoidDataBuffer ( ) : ComputeBuffer
Результат ComputeBuffer
Пример #1
0
        void RenderInstancedMesh()
        {
            if (InstanceRenderMaterial == null || GPUBoidsScript == null ||
                !SystemInfo.supportsInstancing)
            {
                return;
            }

            uint numIndices = (InstanceMesh != null) ?
                              (uint)InstanceMesh.GetIndexCount(0) : 0;

            args[0] = numIndices;                             // メッシュのインデックス数をセット
            args[1] = (uint)GPUBoidsScript.GetMaxObjectNum(); // インスタンス数をセット
            argsBuffer.SetData(args);                         // バッファにセット

            InstanceRenderMaterial.SetBuffer("_BoidDataBuffer",
                                             GPUBoidsScript.GetBoidDataBuffer());
            InstanceRenderMaterial.SetVector("_ObjectScale", ObjectScale);
            var bounds = new Bounds
                         (
                GPUBoidsScript.GetSimulationAreaCenter(),
                GPUBoidsScript.GetSimulationAreaSize()
                         );

            Graphics.DrawMeshInstancedIndirect
            (
                InstanceMesh,
                0,
                InstanceRenderMaterial,
                bounds,
                argsBuffer
            );
        }
Пример #2
0
        void RenderInstancedMesh()
        {
            // 렌더링용 메터리얼이 Null 또는 GPUBoids 스크립트가 Null,
            // 또는 GPU 인스턴싱이 지원되지 않으면 처리를 하지 않는다.
            if (InstanceRenderMaterial == null || GPUBoidsScript == null ||
                !SystemInfo.supportsInstancing)
            {
                return;
            }

            // 지정한 메쉬의 인덱스 가져오기
            uint numIndices = (InstanceMesh != null) ?
                              (uint)InstanceMesh.GetIndexCount(0) : 0;

            args[0] = numIndices;                             // 메쉬의 인덱스 수를 설정(초기화)
            args[1] = (uint)GPUBoidsScript.GetMaxObjectNum(); // 인스턴수 수 초기화
            argsBuffer.SetData(args);                         // 버퍼에 설정(초기화)

            // Boid 데이터를 저장하는 버퍼를 메터리얼에 설정(초기화)
            InstanceRenderMaterial.SetBuffer("_BoidDataBuffer",
                                             GPUBoidsScript.GetBoidDataBuffer());
            // Boid 객체 스케일을 설정(초기화)
            InstanceRenderMaterial.SetVector("_ObjectScale", ObjectScale);
            // 境界領域を定義
            var bounds = new Bounds
                         (
                GPUBoidsScript.GetSimulationAreaCenter(), // 중심
                GPUBoidsScript.GetSimulationAreaSize()    // 크기
                         );

            // 메쉬를 GPU 인스턴싱하여 그리기
            Graphics.DrawMeshInstancedIndirect
            (
                InstanceMesh,           // 인스턴싱하는 메쉬
                0,                      // submesh 인덱스
                InstanceRenderMaterial, // 그리기를 할 메터리얼
                bounds,                 // 경계 영역
                argsBuffer              // GPU 인스턴싱을 위한 인수의 버퍼
            );

            // Debug.Log((uint)GPUBoidsScript.GetMaxObjectNum());
        }
Пример #3
0
        void RenderInstancedMesh()
        {
            // 描画用マテリアルがNull, または, GPUBoidsスクリプトがNull,
            // またはGPUインスタンシングがサポートされていなければ, 処理をしない
            if (InstanceRenderMaterial == null || GPUBoidsScript == null ||
                !SystemInfo.supportsInstancing)
            {
                return;
            }

            // 指定したメッシュのインデックス数を取得
            uint numIndices = (InstanceMesh != null) ?
                              (uint)InstanceMesh.GetIndexCount(0) : 0;

            args[0] = numIndices;                             // メッシュのインデックス数をセット
            args[1] = (uint)GPUBoidsScript.GetMaxObjectNum(); // インスタンス数をセット
            argsBuffer.SetData(args);                         // バッファにセット

            // Boidデータを格納したバッファをマテリアルにセット
            InstanceRenderMaterial.SetBuffer("_BoidDataBuffer", GPUBoidsScript.GetBoidDataBuffer());
            // Boidオブジェクトスケールをセット
            InstanceRenderMaterial.SetVector("_ObjectScale", ObjectScale);
            // 境界領域を定義
            var bounds = new Bounds
                         (
                GPUBoidsScript.GetSimulationAreaCenter(), // 中心
                GPUBoidsScript.GetSimulationAreaSize()    // サイズ
                         );

            // メッシュをGPUインスタンシングして描画
            Graphics.DrawMeshInstancedIndirect
            (
                InstanceMesh,           // インスタンシングするメッシュ
                0,                      // submeshのインデックス
                InstanceRenderMaterial, // 描画を行うマテリアル
                bounds,                 // 境界領域
                argsBuffer,
                0,
                property
            );
        }
Пример #4
0
        void RenderInstancedMesh()
        {
            //绘图材料Null,或, GPUBoids脚本Null,
            //或不支持GPU实例,则不进行处理.
            if (InstanceRenderMaterial == null || GPUBoidsScript == null ||
                !SystemInfo.supportsInstancing)
            {
                return;
            }

            // 获取指定网格的索引数
            uint numIndices = (InstanceMesh != null) ?
                              (uint)InstanceMesh.GetIndexCount(0) : 0;

            args[0] = numIndices;                             // 设置网格索引数
            args[1] = (uint)GPUBoidsScript.GetMaxObjectNum(); // 设置实例数
            argsBuffer.SetData(args);                         // 设置在缓冲区

            // 将存储Boid数据的缓冲器设置为素材
            InstanceRenderMaterial.SetBuffer("_BoidDataBuffer",
                                             GPUBoidsScript.GetBoidDataBuffer());
            // 设置背景对象比例
            InstanceRenderMaterial.SetVector("_ObjectScale", ObjectScale);
            // 境界領域を定義
            var bounds = new Bounds
                         (
                GPUBoidsScript.GetSimulationAreaCenter(), // 中心
                GPUBoidsScript.GetSimulationAreaSize()    // 大小
                         );

            // 在GPU实例中绘制网格
            Graphics.DrawMeshInstancedIndirect
            (
                InstanceMesh,           // 实时网格
                0,                      // submesh 索引
                InstanceRenderMaterial, // 绘制素材
                bounds,                 // 境界領域
                argsBuffer              // 用于GPU实例的参数的缓冲器
            );
        }