conditional fluid chunk rasterization
All checks were successful
studiorailgun/Renderer/pipeline/head This commit looks good
All checks were successful
studiorailgun/Renderer/pipeline/head This commit looks good
This commit is contained in:
parent
ba7884363d
commit
d8eaf7f501
@ -1213,6 +1213,7 @@ Fix fluid chunk indexing from java side
|
|||||||
Memory pooling for chunk buffer allocations
|
Memory pooling for chunk buffer allocations
|
||||||
Server homogenous fluid chunk declarations
|
Server homogenous fluid chunk declarations
|
||||||
Unsleeping fluid chunks on edit
|
Unsleeping fluid chunks on edit
|
||||||
|
Conditionally rasterize fluid chunks based on homogeneity
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -65,11 +65,12 @@ public class FluidCell {
|
|||||||
Globals.clientScene.deregisterEntity(modelEntity);
|
Globals.clientScene.deregisterEntity(modelEntity);
|
||||||
}
|
}
|
||||||
|
|
||||||
fillInData();
|
FluidChunkData currentChunk = Globals.clientFluidManager.getChunkDataAtWorldPoint(worldPos);
|
||||||
|
if(!currentChunk.isHomogenous()){
|
||||||
modelEntity = FluidChunk.clientCreateFluidChunkEntity(weights);
|
this.fillInData(currentChunk);
|
||||||
|
modelEntity = FluidChunk.clientCreateFluidChunkEntity(weights);
|
||||||
ClientEntityUtils.initiallyPositionEntity(modelEntity, getRealPos(), new Quaterniond());
|
ClientEntityUtils.initiallyPositionEntity(modelEntity, getRealPos(), new Quaterniond());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected Vector3d getRealPos(){
|
protected Vector3d getRealPos(){
|
||||||
@ -85,11 +86,13 @@ public class FluidCell {
|
|||||||
*/
|
*/
|
||||||
public void destroy(){
|
public void destroy(){
|
||||||
CollisionEngine collisionEngine = Globals.clientSceneWrapper.getCollisionEngine();
|
CollisionEngine collisionEngine = Globals.clientSceneWrapper.getCollisionEngine();
|
||||||
collisionEngine.destroyPhysics(modelEntity);
|
if(modelEntity != null){
|
||||||
ClientEntityUtils.destroyEntity(modelEntity);
|
collisionEngine.destroyPhysics(modelEntity);
|
||||||
//destruct model
|
ClientEntityUtils.destroyEntity(modelEntity);
|
||||||
String modelPath = (String)modelEntity.getData(EntityDataStrings.DATA_STRING_MODEL_PATH);
|
//destruct model
|
||||||
Globals.assetManager.deregisterModelPath(modelPath);
|
String modelPath = (String)modelEntity.getData(EntityDataStrings.DATA_STRING_MODEL_PATH);
|
||||||
|
Globals.assetManager.deregisterModelPath(modelPath);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -103,13 +106,12 @@ public class FluidCell {
|
|||||||
/**
|
/**
|
||||||
* Fills in the internal arrays of data for generate terrain models
|
* Fills in the internal arrays of data for generate terrain models
|
||||||
*/
|
*/
|
||||||
private void fillInData(){
|
private void fillInData(FluidChunkData currentChunk){
|
||||||
|
|
||||||
//
|
//
|
||||||
//fill in data
|
//fill in data
|
||||||
//
|
//
|
||||||
//main chunk
|
//main chunk
|
||||||
FluidChunkData currentChunk = Globals.clientFluidManager.getChunkDataAtWorldPoint(worldPos);
|
|
||||||
if(!currentChunk.isHomogenous()){
|
if(!currentChunk.isHomogenous()){
|
||||||
for(int x = ServerFluidChunk.TRUE_DATA_OFFSET; x < ServerFluidChunk.TRUE_DATA_GENERATOR_SIZE + ServerFluidChunk.TRUE_DATA_OFFSET; x++){
|
for(int x = ServerFluidChunk.TRUE_DATA_OFFSET; x < ServerFluidChunk.TRUE_DATA_GENERATOR_SIZE + ServerFluidChunk.TRUE_DATA_OFFSET; x++){
|
||||||
for(int y = ServerFluidChunk.TRUE_DATA_OFFSET; y < ServerFluidChunk.TRUE_DATA_GENERATOR_SIZE + ServerFluidChunk.TRUE_DATA_OFFSET; y++){
|
for(int y = ServerFluidChunk.TRUE_DATA_OFFSET; y < ServerFluidChunk.TRUE_DATA_GENERATOR_SIZE + ServerFluidChunk.TRUE_DATA_OFFSET; y++){
|
||||||
@ -119,149 +121,6 @@ public class FluidCell {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// //face X
|
|
||||||
// if(worldPos.x + 1 < Globals.clientWorldData.getWorldDiscreteSize()){
|
|
||||||
// currentChunk = Globals.clientFluidManager.getChunkDataAtWorldPoint(worldPos.x + 1, worldPos.y, worldPos.z);
|
|
||||||
// if(currentChunk != null && !currentChunk.isHomogenous()){
|
|
||||||
// for(int i = ServerFluidChunk.TRUE_DATA_OFFSET; i < ServerFluidChunk.TRUE_DATA_GENERATOR_SIZE; i++){
|
|
||||||
// for(int j = ServerFluidChunk.TRUE_DATA_OFFSET; j < ServerFluidChunk.TRUE_DATA_GENERATOR_SIZE; j++){
|
|
||||||
// weights[ServerFluidChunk.TRUE_DATA_DIM][i][j] = currentChunk.getWeight(0, i, j);
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// } else {
|
|
||||||
// for(int i = ServerFluidChunk.TRUE_DATA_OFFSET; i < ServerFluidChunk.TRUE_DATA_GENERATOR_SIZE; i++){
|
|
||||||
// for(int j = ServerFluidChunk.TRUE_DATA_OFFSET; j < ServerFluidChunk.TRUE_DATA_GENERATOR_SIZE; j++){
|
|
||||||
// weights[ServerFluidChunk.TRUE_DATA_DIM][i][j] = ISO_SURFACE_EMPTY;
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// } else {
|
|
||||||
// for(int i = ServerFluidChunk.TRUE_DATA_OFFSET; i < ServerFluidChunk.TRUE_DATA_GENERATOR_SIZE; i++){
|
|
||||||
// for(int j = ServerFluidChunk.TRUE_DATA_OFFSET; j < ServerFluidChunk.TRUE_DATA_GENERATOR_SIZE; j++){
|
|
||||||
// weights[ServerFluidChunk.TRUE_DATA_DIM][i][j] = ISO_SURFACE_EMPTY;
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// //face Y
|
|
||||||
// if(worldPos.y + 1 < Globals.clientWorldData.getWorldDiscreteSize()){
|
|
||||||
// currentChunk = Globals.clientFluidManager.getChunkDataAtWorldPoint(worldPos.x, worldPos.y + 1, worldPos.z);
|
|
||||||
// if(currentChunk != null && !currentChunk.isHomogenous()){
|
|
||||||
// for(int i = ServerFluidChunk.TRUE_DATA_OFFSET; i < ServerFluidChunk.TRUE_DATA_GENERATOR_SIZE; i++){
|
|
||||||
// for(int j = ServerFluidChunk.TRUE_DATA_OFFSET; j < ServerFluidChunk.TRUE_DATA_GENERATOR_SIZE; j++){
|
|
||||||
// weights[i][ServerFluidChunk.TRUE_DATA_DIM][j] = currentChunk.getWeight(i, 0, j);
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// } else {
|
|
||||||
// for(int i = ServerFluidChunk.TRUE_DATA_OFFSET; i < ServerFluidChunk.TRUE_DATA_GENERATOR_SIZE; i++){
|
|
||||||
// for(int j = ServerFluidChunk.TRUE_DATA_OFFSET; j < ServerFluidChunk.TRUE_DATA_GENERATOR_SIZE; j++){
|
|
||||||
// weights[i][ServerFluidChunk.TRUE_DATA_DIM][j] = ISO_SURFACE_EMPTY;
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// } else {
|
|
||||||
// for(int i = ServerFluidChunk.TRUE_DATA_OFFSET; i < ServerFluidChunk.TRUE_DATA_GENERATOR_SIZE; i++){
|
|
||||||
// for(int j = ServerFluidChunk.TRUE_DATA_OFFSET; j < ServerFluidChunk.TRUE_DATA_GENERATOR_SIZE; j++){
|
|
||||||
// weights[i][ServerFluidChunk.TRUE_DATA_DIM][j] = ISO_SURFACE_EMPTY;
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// //face Z
|
|
||||||
// if(worldPos.z + 1 < Globals.clientWorldData.getWorldDiscreteSize()){
|
|
||||||
// currentChunk = Globals.clientFluidManager.getChunkDataAtWorldPoint(worldPos.x, worldPos.y, worldPos.z + 1);
|
|
||||||
// if(currentChunk != null && !currentChunk.isHomogenous()){
|
|
||||||
// for(int i = ServerFluidChunk.TRUE_DATA_OFFSET; i < ServerFluidChunk.TRUE_DATA_GENERATOR_SIZE; i++){
|
|
||||||
// for(int j = ServerFluidChunk.TRUE_DATA_OFFSET; j < ServerFluidChunk.TRUE_DATA_GENERATOR_SIZE; j++){
|
|
||||||
// weights[i][j][ServerFluidChunk.TRUE_DATA_DIM] = currentChunk.getWeight(i, j, 0);
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// } else {
|
|
||||||
// for(int i = ServerFluidChunk.TRUE_DATA_OFFSET; i < ServerFluidChunk.TRUE_DATA_GENERATOR_SIZE; i++){
|
|
||||||
// for(int j = ServerFluidChunk.TRUE_DATA_OFFSET; j < ServerFluidChunk.TRUE_DATA_GENERATOR_SIZE; j++){
|
|
||||||
// weights[i][j][ServerFluidChunk.TRUE_DATA_DIM] = ISO_SURFACE_EMPTY;
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// } else {
|
|
||||||
// for(int i = ServerFluidChunk.TRUE_DATA_OFFSET; i < ServerFluidChunk.TRUE_DATA_GENERATOR_SIZE; i++){
|
|
||||||
// for(int j = ServerFluidChunk.TRUE_DATA_OFFSET; j < ServerFluidChunk.TRUE_DATA_GENERATOR_SIZE; j++){
|
|
||||||
// weights[i][j][ServerFluidChunk.TRUE_DATA_DIM] = ISO_SURFACE_EMPTY;
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// //edge X-Y
|
|
||||||
// if(
|
|
||||||
// worldPos.x + 1 < Globals.clientWorldData.getWorldDiscreteSize() &&
|
|
||||||
// worldPos.y + 1 < Globals.clientWorldData.getWorldDiscreteSize()
|
|
||||||
// ){
|
|
||||||
// currentChunk = Globals.clientFluidManager.getChunkDataAtWorldPoint(worldPos.x + 1, worldPos.y + 1, worldPos.z);
|
|
||||||
// if(currentChunk != null && !currentChunk.isHomogenous()){
|
|
||||||
// for(int i = ServerFluidChunk.TRUE_DATA_OFFSET; i < ServerFluidChunk.TRUE_DATA_GENERATOR_SIZE; i++){
|
|
||||||
// weights[ServerFluidChunk.TRUE_DATA_DIM][ServerFluidChunk.TRUE_DATA_DIM][i] = currentChunk.getWeight(0, 0, i);
|
|
||||||
// }
|
|
||||||
// } else {
|
|
||||||
// for(int i = ServerFluidChunk.TRUE_DATA_OFFSET; i < ServerFluidChunk.TRUE_DATA_GENERATOR_SIZE; i++){
|
|
||||||
// weights[ServerFluidChunk.TRUE_DATA_DIM][ServerFluidChunk.TRUE_DATA_DIM][i] = ISO_SURFACE_EMPTY;
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// } else {
|
|
||||||
// for(int i = ServerFluidChunk.TRUE_DATA_OFFSET; i < ServerFluidChunk.TRUE_DATA_GENERATOR_SIZE; i++){
|
|
||||||
// weights[ServerFluidChunk.TRUE_DATA_DIM][ServerFluidChunk.TRUE_DATA_DIM][i] = ISO_SURFACE_EMPTY;
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// //edge X-Z
|
|
||||||
// if(
|
|
||||||
// worldPos.x + 1 < Globals.clientWorldData.getWorldDiscreteSize() &&
|
|
||||||
// worldPos.z + 1 < Globals.clientWorldData.getWorldDiscreteSize()
|
|
||||||
// ){
|
|
||||||
// currentChunk = Globals.clientFluidManager.getChunkDataAtWorldPoint(worldPos.x + 1, worldPos.y, worldPos.z + 1);
|
|
||||||
// if(currentChunk != null && !currentChunk.isHomogenous()){
|
|
||||||
// for(int i = ServerFluidChunk.TRUE_DATA_OFFSET; i < ServerFluidChunk.TRUE_DATA_GENERATOR_SIZE; i++){
|
|
||||||
// weights[ServerFluidChunk.TRUE_DATA_DIM][i][ServerFluidChunk.TRUE_DATA_DIM] = currentChunk.getWeight(0, i, 0);
|
|
||||||
// }
|
|
||||||
// } else {
|
|
||||||
// for(int i = ServerFluidChunk.TRUE_DATA_OFFSET; i < ServerFluidChunk.TRUE_DATA_GENERATOR_SIZE; i++){
|
|
||||||
// weights[ServerFluidChunk.TRUE_DATA_DIM][i][ServerFluidChunk.TRUE_DATA_DIM] = ISO_SURFACE_EMPTY;
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// } else {
|
|
||||||
// for(int i = ServerFluidChunk.TRUE_DATA_OFFSET; i < ServerFluidChunk.TRUE_DATA_GENERATOR_SIZE; i++){
|
|
||||||
// weights[ServerFluidChunk.TRUE_DATA_DIM][i][ServerFluidChunk.TRUE_DATA_DIM] = ISO_SURFACE_EMPTY;
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// //edge Y-Z
|
|
||||||
// if(
|
|
||||||
// worldPos.y + 1 < Globals.clientWorldData.getWorldDiscreteSize() &&
|
|
||||||
// worldPos.z + 1 < Globals.clientWorldData.getWorldDiscreteSize()
|
|
||||||
// ){
|
|
||||||
// currentChunk = Globals.clientFluidManager.getChunkDataAtWorldPoint(worldPos.x, worldPos.y + 1, worldPos.z + 1);
|
|
||||||
// if(currentChunk != null && !currentChunk.isHomogenous()){
|
|
||||||
// for(int i = ServerFluidChunk.TRUE_DATA_OFFSET; i < ServerFluidChunk.TRUE_DATA_GENERATOR_SIZE; i++){
|
|
||||||
// weights[i][ServerFluidChunk.TRUE_DATA_DIM][ServerFluidChunk.TRUE_DATA_DIM] = currentChunk.getWeight(i, 0, 0);
|
|
||||||
// }
|
|
||||||
// } else {
|
|
||||||
// for(int i = ServerFluidChunk.TRUE_DATA_OFFSET; i < ServerFluidChunk.TRUE_DATA_GENERATOR_SIZE; i++){
|
|
||||||
// weights[i][ServerFluidChunk.TRUE_DATA_DIM][ServerFluidChunk.TRUE_DATA_DIM] = ISO_SURFACE_EMPTY;
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// } else {
|
|
||||||
// for(int i = ServerFluidChunk.TRUE_DATA_OFFSET; i < ServerFluidChunk.TRUE_DATA_GENERATOR_SIZE; i++){
|
|
||||||
// weights[i][ServerFluidChunk.TRUE_DATA_DIM][ServerFluidChunk.TRUE_DATA_DIM] = ISO_SURFACE_EMPTY;
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// if(
|
|
||||||
// worldPos.x + 1 < Globals.clientWorldData.getWorldDiscreteSize() &&
|
|
||||||
// worldPos.y + 1 < Globals.clientWorldData.getWorldDiscreteSize() &&
|
|
||||||
// worldPos.z + 1 < Globals.clientWorldData.getWorldDiscreteSize()
|
|
||||||
// ){
|
|
||||||
// currentChunk = Globals.clientFluidManager.getChunkDataAtWorldPoint(worldPos.x + 1, worldPos.y + 1, worldPos.z + 1);
|
|
||||||
// if(currentChunk != null && !currentChunk.isHomogenous()){
|
|
||||||
// weights[ServerFluidChunk.TRUE_DATA_DIM][ServerFluidChunk.TRUE_DATA_DIM][ServerFluidChunk.TRUE_DATA_DIM] = currentChunk.getWeight(0, 0, 0);
|
|
||||||
// } else {
|
|
||||||
// weights[ServerFluidChunk.TRUE_DATA_DIM][ServerFluidChunk.TRUE_DATA_DIM][ServerFluidChunk.TRUE_DATA_DIM] = ISO_SURFACE_EMPTY;
|
|
||||||
// }
|
|
||||||
// } else {
|
|
||||||
// weights[ServerFluidChunk.TRUE_DATA_DIM][ServerFluidChunk.TRUE_DATA_DIM][ServerFluidChunk.TRUE_DATA_DIM] = ISO_SURFACE_EMPTY;
|
|
||||||
// }
|
|
||||||
|
|
||||||
//now set neighboring air weights based on nearby fluid count
|
//now set neighboring air weights based on nearby fluid count
|
||||||
//idea being that we dont have the snapping behavior from iso surface jumping from -1->0.01
|
//idea being that we dont have the snapping behavior from iso surface jumping from -1->0.01
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user