public void OnEnable() { this.cullingData = this.GetComponent <CullingData>(); if (this.cullingData.ChunksInRange != null) { this.chunkAddress = this.cullingData.GetChunkAddress(this.cullingData.MapBehaviour.GetMapPosition(this.Camera.transform.position)); this.UpdateChunks(); } }
protected virtual void UpdateVertexBuffer() { if (cullingData == null) { cullingData = new CullingData(particleNum); } //_SetCommonParameterForCS(cullingCS); cullingData.Update(cullingCS, targetCamera, particleNum, particleBuffer, activeIndexBuffer); }
protected override void UpdateVertexBuffer() { if (cullingData == null) { cullingData = new CullingData(particleNum); cullingData.SetVertexCount(meshIndicesNum); } //_SetCommonParameterForCS(cullingCS); cullingData.Update(cullingCS, targetCamera, particleNum, particleBuffer, activeIndexBuffer); }
void UpdateVertexBuffer(Camera camera) { CullingData data = cameraDatas[camera]; if (data == null) { data = cameraDatas[camera] = new CullingData(particleNum); } data.Update(cullingCS, camera, particleNum, particleBuffer, activeIndexBuffer); }
public void Initialize() { ModuleData.Current = this.ModuleData.Modules; this.Clear(); this.Map = new InfiniteMap(this.MapHeight); if (this.ApplyBoundaryConstraints && this.BoundaryConstraints != null && this.BoundaryConstraints.Any()) { this.Map.ApplyBoundaryConstraints(this.BoundaryConstraints); } this.cullingData = this.GetComponent <CullingData>(); this.cullingData.Initialize(); }
protected override void UpdateVertexBuffer(Camera camera) { CullingData data = cameraDatas[camera]; if (data == null) { data = cameraDatas[camera] = new CullingData(particleNum); data.SetVertexCount(meshIndicesNum); } data.Update(cullingCS, camera, particleNum, particleBuffer, activeIndexBuffer); }
protected virtual void UpdateVertexBuffer(Camera camera) { CullingData data = cameraDatas[camera]; if (data == null) { data = cameraDatas[camera] = new CullingData(particleNum); } //_SetCommonParameterForCS(cullingCS); data.Update(cullingCS, camera, particleNum, particleBuffer, activeIndexBuffer); }
protected virtual void UpdateVertexBuffer(Camera camera) { CullingData data = cameraDatas[camera]; if (data == null) { data = cameraDatas[camera] = new CullingData(particleNum); data.SetVertexCount(1); // パーティクルなので頂点数は1 } data.Update(cullingCS, camera, particleNum, particleBuffer, activeIndexBuffer); }
// Direction must be 0, 1 or 2 public Portal(Vector3Int position, int direction, CullingData cullingData) { this.Position1 = position; this.Direction = direction; this.Position2 = this.Position1 + Orientations.Direction[direction]; this.Room1 = cullingData.GetRoom(this.Position1); this.Room2 = cullingData.GetRoom(this.Position2); var dir = Orientations.Direction[this.Direction].ToVector3(); this.Bounds = new Bounds(cullingData.MapBehaviour.GetWorldspacePosition(this.Position1) + dir, (Vector3.one - new Vector3(Mathf.Abs(dir.x), Mathf.Abs(dir.y), Mathf.Abs(dir.z)) * 0.8f) * AbstractMap.BLOCK_SIZE); }
// 描画処理 private void OnRenderObjectInternal() { // カリングを行うか判定 if (_isCulling) { // カメラを取得 Camera cam = Camera.current; // カメラが存在するか判定 if (!m_cameraDatas.ContainsKey(cam)) { // このフレームは登録だけ m_cameraDatas[cam] = null; } else { // カメラのカリングデータを取得 CullingData data = m_cameraDatas[cam]; // カリングデータが存在するか判定 if (data != null) { // シェーダーの値の設定 SetMaterialParam(); // バッファを設定 _shaderMaterial.SetBuffer(ShaderDefines.GetBufferPropertyID(ShaderDefines.BufferID._inViewParticlesBuffer), data.GetInViewParticlesBuffer()); // キーワードを有効化 _shaderMaterial.EnableKeyword("GPUPARTICLE_CULLING_ON"); // 描画処理 Graphics.DrawProceduralIndirect(MeshTopology.Triangles, data.GetInViewCountsBuffer()); } } } else { // シェーダーの値の設定 SetMaterialParam(); // バッファを設定 _shaderMaterial.SetBuffer(ShaderDefines.GetBufferPropertyID(ShaderDefines.BufferID._activeParticlesBuffer), m_activeParticlesBuffer); // キーワードを無効化 _shaderMaterial.DisableKeyword("GPUPARTICLE_CULLING_ON"); // 描画処理 Graphics.DrawProceduralIndirect(MeshTopology.Triangles, m_activeCountBuffer); } }
static void DrawGizmos(CullingData cullingData, GizmoType gizmoType) { if (!cullingData.DrawGizmo || cullingData.ChunksInRange == null) { return; } foreach (var chunk in cullingData.ChunksInRange) { foreach (var room in chunk.Rooms) { room.DrawGizmo(cullingData.MapBehaviour); } } }
// カメラごとのカリングデータの更新処理 private void UpdateCullingDatas(Camera _camera) { // カメラのカリングデータを取得 CullingData data = m_cameraDatas[_camera]; // カリングデータが見つかったか判定する if (data == null) { // カリングデータを設定 data = m_cameraDatas[_camera] = new CullingData(m_numParticles); data.SetVertexCount(m_numMeshIndices); } // カリングデータの更新処理 data.Update(_cullingComputeShader, _camera, m_numParticles, m_particlesBuffer, m_activeParticlesBuffer); }
void OnGUI() { if (isCulling) { int i = 0; cameraDatas.Keys .Where(cam => cam.isActiveAndEnabled) .ToList().ForEach(cam => { CullingData data = cameraDatas[cam]; if (data != null) { data.inViewsCountBuffer.GetData(data.inViewsCounts); GUI.Label(new Rect(10, 72 + i * 64, 240, 64), "InViews / Active " + data.GetInViewNum() + " / " + particle.GetActiveParticleNum()); i++; } }); } else { GUI.Label(new Rect(10, 72, 480, 64), "[No Culling]Active / Pool " + particle.GetActiveParticleNum() + " / " + particle.GetPoolParticleNum()); } }
public void OnEnable() { this.cullingData = this.GetComponent <CullingData>(); }