- Home /
Question by
bayatzadeler · Dec 09, 2021 at 08:31 AM ·
boxarray of gameobjectsdiffusejava to c#reaction
Less expensive methods for the low resolution visualisation of 2D Reaction-Diffusion with boxes?
Less expensive methods for the visualisation of 2D Reaction-Diffusion? Hi, These days, I am writing a 2d reaction-diffusion algorithm by using boxes. I utilised one of the JavaScript tutorials on youtube(Here, https://www.youtube.com/watch?v=BV9ny785UNc&t=1080s ). However, although I transferred these codes to c#, it became a very expensive method because I assigned a simple class to box-shape prefabs and tried to reach their scripts in every frame. The max fps I got is around 20sh. Do you have any idea to improve the performance of this model? (Note: I need to create it with boxes and a grid. Because this is what my assignment is). Thanks in advance….
void Start()
{
for (int i = 0; i < 100; i++)
{
for (int j = 0; j < 100; j++)
{
GameObject c = Instantiate(cube, transform.position+new Vector3(i+0.5f, 0.5f,j+0.5f), Quaternion.identity) ;
c.GetComponent<CubeMono_scp>().a = 1.0f;
c.GetComponent<CubeMono_scp>().b = 0f;
currentGrid[i, j] = c;
}
}
nextGrid = currentGrid;
for (int i = 45; i <55 ; i++)
{
for (int j = 45; j < 55; j++)
{
currentGrid[i, j].GetComponent<CubeMono_scp>().a = 1.0f;
currentGrid[i, j].GetComponent<CubeMono_scp>().b = 1.0f;
}
}
}
void Update()
{
for (int i = 0; i < 100; i++)
{
for (int j = 0; j < 100; j++)
{
if ((currentGrid[i, j].GetComponent<CubeMono_scp>().a - currentGrid[i, j].GetComponent<CubeMono_scp>().b)*255 <= 1)
{
currentGrid[i, j].transform.GetComponent<MeshRenderer>().enabled = true;
currentGrid[i, j].transform.GetComponent<BoxCollider>().enabled = true;
currentGrid[i, j].transform.GetComponent<MeshRenderer>().material.color = Color.black;
}
else
{
currentGrid[i, j].transform.GetComponent<MeshRenderer>().enabled = false;
currentGrid[i, j].transform.GetComponent<BoxCollider>().enabled = false;
//currentGrid[i, j].transform.GetComponent<MeshRenderer>().material.color = Color.white;
}
}
}
UpdateGrid();
}
void UpdateGrid()
{
for (int i = 1; i < 99; i++)
{
for (int j = 1; j < 99; j++)
{
float currentA = currentGrid[i, j].GetComponent<CubeMono_scp>().a;
float currentB = currentGrid[i, j].GetComponent<CubeMono_scp>().b;
float LabA = 0;
LabA += currentGrid[i, j].GetComponent<CubeMono_scp>().a * -1;
LabA += currentGrid[i-1, j].GetComponent<CubeMono_scp>().a * 0.2f;
LabA += currentGrid[i+1, j].GetComponent<CubeMono_scp>().a * 0.2f;
LabA += currentGrid[i, j-1].GetComponent<CubeMono_scp>().a * 0.2f;
LabA += currentGrid[i, j+1].GetComponent<CubeMono_scp>().a * 0.2f;
LabA += currentGrid[i-1, j-1].GetComponent<CubeMono_scp>().a * 0.05f;
LabA += currentGrid[i+1, j-1].GetComponent<CubeMono_scp>().a * 0.05f;
LabA += currentGrid[i-1, j+1].GetComponent<CubeMono_scp>().a * 0.05f;
LabA += currentGrid[i+1, j+1].GetComponent<CubeMono_scp>().a * 0.05f;
float LabB = 0;
LabB += currentGrid[i, j].GetComponent<CubeMono_scp>().b * -1;
LabB += currentGrid[i - 1, j].GetComponent<CubeMono_scp>().b * 0.2f;
LabB += currentGrid[i + 1, j].GetComponent<CubeMono_scp>().b * 0.2f;
LabB += currentGrid[i, j - 1].GetComponent<CubeMono_scp>().b * 0.2f;
LabB += currentGrid[i, j + 1].GetComponent<CubeMono_scp>().b * 0.2f;
LabB += currentGrid[i - 1, j - 1].GetComponent<CubeMono_scp>().b * 0.05f;
LabB += currentGrid[i + 1, j - 1].GetComponent<CubeMono_scp>().b * 0.05f;
LabB += currentGrid[i - 1, j + 1].GetComponent<CubeMono_scp>().b * 0.05f;
LabB += currentGrid[i + 1, j + 1].GetComponent<CubeMono_scp>().b * 0.05f;
float nextA = currentA + (dA * LabA - (currentA*currentB*currentB) + f*(1-currentA));
float nextB = currentB + (dB * LabB + (currentA * currentB * currentB) - (k+f)* currentB);
nextGrid[i, j].GetComponent<CubeMono_scp>().a = Mathf.Clamp01(nextA);
nextGrid[i, j].GetComponent<CubeMono_scp>().b = Mathf.Clamp01(nextB);
}
}
currentGrid = nextGrid;
}
rd.png
(43.0 kB)
Comment
Your answer
