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; } }
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; }
private void OnDestroy() { FBOUtility.DeleteMaterial(_setQuadrangleDataMat); }