void CreatePositionMap()
        {
            if (_hasCreatedWorldPositionAndNormalAndUVMap == true)
            {
                return;
            }

            FBOUtility.CreateBuffer(ref _worldPositionMap, BufferWidth, BufferHeight, RenderTextureFormat.ARGBFloat, FilterMode.Bilinear);

            if (_script.StageGo != null)
            {
                var mesh = _script.StageGo.transform.GetComponent <MeshFilter>().sharedMesh;

                FBOUtility.ClearBuffer(_worldPositionMap);
                FBOUtility.ClearBuffer(_uvMap);
                FBOUtility.ClearBuffer(_normalMap);

                for (var sm = 0; sm < mesh.subMeshCount; sm++)
                {
                    var vertices = mesh.vertices;
                    var uvs      = mesh.uv;
                    var normals  = mesh.normals;
                    var indices  = mesh.GetIndices(sm);

                    for (var i = 0; i < indices.Length; i += 3)
                    {
                        var idx0 = indices[i + 0];
                        var idx1 = indices[i + 1];
                        var idx2 = indices[i + 2];

                        _setTriangleDataMat.SetVector("_UV0", new Vector3(uvs[idx0].x, uvs[idx0].y, 0.0f));
                        _setTriangleDataMat.SetVector("_UV1", new Vector3(uvs[idx1].x, uvs[idx1].y, 0.0f));
                        _setTriangleDataMat.SetVector("_UV2", new Vector3(uvs[idx2].x, uvs[idx2].y, 0.0f));

                        // --- Position ---
                        // flip x and z
                        _setTriangleDataMat.SetVector("_Color0", new Vector4(vertices[idx0].z, vertices[idx0].y, vertices[idx0].x, 1.0f));
                        _setTriangleDataMat.SetVector("_Color1", new Vector4(vertices[idx1].z, vertices[idx1].y, vertices[idx1].x, 1.0f));
                        _setTriangleDataMat.SetVector("_Color2", new Vector4(vertices[idx2].z, vertices[idx2].y, vertices[idx2].x, 1.0f));
                        Graphics.Blit(null, _worldPositionMap, _setTriangleDataMat, 0);

                        // --- UV ---
                        _setTriangleDataMat.SetVector("_Color0", new Vector4(uvs[idx0].x, uvs[idx0].y, 0.0f, 1.0f));
                        _setTriangleDataMat.SetVector("_Color1", new Vector4(uvs[idx1].x, uvs[idx1].y, 0.0f, 1.0f));
                        _setTriangleDataMat.SetVector("_Color2", new Vector4(uvs[idx2].x, uvs[idx2].y, 0.0f, 1.0f));
                        Graphics.Blit(null, _uvMap, _setTriangleDataMat, 0);

                        // --- Normal ---
                        _setTriangleDataMat.SetVector("_Color0", new Vector4(normals[idx0].x, normals[idx0].y, normals[idx0].z, 1.0f));
                        _setTriangleDataMat.SetVector("_Color1", new Vector4(normals[idx1].x, normals[idx1].y, normals[idx1].z, 1.0f));
                        _setTriangleDataMat.SetVector("_Color2", new Vector4(normals[idx2].x, normals[idx2].y, normals[idx2].z, 1.0f));
                        Graphics.Blit(null, _normalMap, _setTriangleDataMat, 0);
                    }
                }

                Graphics.Blit(_worldPositionMap, _worldPositionYGradientMap, _calcGradientMat, 0);

                _hasCreatedWorldPositionAndNormalAndUVMap = true;
            }
        }
Example #2
0
    private void Awake()
    {
        FBOUtility.CreateMaterial(ref _setQuadrangleDataMat, _setQuadrangleDataShader);
        _materialPropertyBlock0 = new MaterialPropertyBlock();
        _materialPropertyBlock1 = new MaterialPropertyBlock();

        _RwMaterialPropertyBlock = new MaterialPropertyBlock[8];
        _LwMaterialPropertyBlock = new MaterialPropertyBlock[7];

        for (int i = 0; i < (18 - 2) / 2; i++)
        {
            _RwMaterialPropertyBlock[i] = new MaterialPropertyBlock();
        }
        for (int i = 0; i < (16 - 2) / 2; i++)
        {
            _LwMaterialPropertyBlock[i] = new MaterialPropertyBlock();
        }

        SetupToCalculation();

        for (int i = 0; i < _pointWallRightList.Count - 2; i += 2)
        //for (int i = 8; i < 10; i += 2)
        {
            BuildMesh(_pointWallRightList, 1, i, RightWallMesh, Mat, _RwMaterialPropertyBlock[i / 2]);
        }

        for (int i = 0; i < _pointWallLeftList.Count - 2; i += 2)
        {
            BuildMesh(_pointWallLeftList, -1, i, LeftWallMesh, Mat, _LwMaterialPropertyBlock[i / 2]);
        }
    }
        private void OnDestroy()
        {
            FBOUtility.DeleteBuffer(_gravityDirectionMap);
            FBOUtility.DeleteBuffer(_worldPositionMap);
            FBOUtility.DeleteBuffer(_worldPositionYGradientMap);
            FBOUtility.DeleteBuffer(_uvMap);
            FBOUtility.DeleteBuffer(_normalMap);
            FBOUtility.DeleteBuffer(_emitterUVMap);
            FBOUtility.DeleteBuffer(_gravityInteractionMap);

            FBOUtility.DeleteMaterial(_setQuadrangleDataMat);
            FBOUtility.DeleteMaterial(_setTriangleDataMat);
            FBOUtility.DeleteMaterial(_calcGradientMat);
            FBOUtility.DeleteMaterial(_resultRendererMapMat);
        }
        void Start()
        {
            FBOUtility.CreateBuffer(ref _gravityDirectionMap, BufferWidth, BufferHeight, RenderTextureFormat.ARGBFloat, FilterMode.Bilinear);
            FBOUtility.CreateBuffer(ref _worldPositionMap, BufferWidth, BufferHeight, RenderTextureFormat.ARGBFloat, FilterMode.Bilinear);
            FBOUtility.CreateBuffer(ref _worldPositionYGradientMap, BufferWidth, BufferHeight, RenderTextureFormat.ARGBFloat, FilterMode.Bilinear);
            FBOUtility.CreateBuffer(ref _uvMap, BufferWidth, BufferHeight, RenderTextureFormat.ARGBFloat, FilterMode.Bilinear);
            FBOUtility.CreateBuffer(ref _normalMap, BufferWidth, BufferHeight, RenderTextureFormat.ARGBFloat, FilterMode.Bilinear);
            FBOUtility.CreateBuffer(ref _emitterUVMap, BufferWidth, BufferHeight, RenderTextureFormat.ARGBFloat, FilterMode.Point);
            FBOUtility.CreateBuffer(ref _ceilingMap, BufferWidth, BufferHeight, RenderTextureFormat.ARGBFloat, FilterMode.Point);
            FBOUtility.CreateBuffer(ref _gravityInteractionMap, BufferWidth, BufferHeight, RenderTextureFormat.ARGBFloat, FilterMode.Bilinear);
            //FBOUtility.CreateBuffer(ref _resultRendererMap,         BufferWidth, BufferHeight, RenderTextureFormat.ARGBFloat, FilterMode.Bilinear);

            FBOUtility.CreateMaterial(ref _setQuadrangleDataMat, _setQuadrangleDataShader);
            FBOUtility.CreateMaterial(ref _setTriangleDataMat, _setTriangleDataShader);
            FBOUtility.CreateMaterial(ref _calcGradientMat, _calcGradientShader);
            FBOUtility.CreateMaterial(ref _resultRendererMapMat, _resultRendererMapShader);

            // GetComponent<Renderer>().sharedMaterial.mainTexture = _gravityDirectionMap;
        }
Example #5
0
 private void OnDestroy()
 {
     FBOUtility.DeleteMaterial(_setQuadrangleDataMat);
 }