Skip to content

Commit c6da15a

Browse files
committed
Water?
1 parent 0677ae7 commit c6da15a

File tree

8 files changed

+56
-9
lines changed

8 files changed

+56
-9
lines changed

Blobtory/Scripts/Main.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ def __init__(self):
2121
self.winCreator = WindowCreator(self, enableRP=False, isFullscreen=False)
2222
self.scene: SceneBuilder = SceneBuilder(self.winCreator)
2323

24+
# self.loader.loadModel("assets/models/icosphere").reparentTo(self.render)
25+
2426

2527
loadPrcFileData('', 'framebuffer-srgb #t')
2628
loadPrcFileData('', 'framebuffer-multisample 0')

Blobtory/Scripts/game/SceneBuilder.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ def SetupPlanets(self):
3939

4040
def IncreaseSize(self, planetGen: PlanetGenerator, a):
4141
planetGen.cubeformer.mouseTime.setData(PTAFloat([10, 0, 0, planetGen.cubeformer.mouseTime.getElement(3)+a]))
42+
planetGen.cubeformerNav.mouseTime.setData(PTAFloat([10, 0, 0, planetGen.cubeformer.mouseTime.getElement(3) + a]))
4243
planetGen.RegenPlanet()
4344

4445
def SetupLighting(self):

Blobtory/Scripts/planet_former/CubeFormer.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import math
2+
from copy import copy, deepcopy
23

34
from panda3d.core import Texture, NodePath, Shader, LVecBase3i, ShaderAttrib, PTAFloat, LVecBase3f
45
from Blobtory.Scripts.Pipeline.WindowCreator import WindowCreator
@@ -10,6 +11,7 @@ class CubeFormer:
1011
__cubeBufferCreatorComputeNode: NodePath = None
1112
offset = PTAFloat([0])
1213
radius = PTAFloat([0])
14+
isWater = False
1315

1416
def __init__(self, winCreator: WindowCreator, width: int, length: int, height: int, spacing: float):
1517
self.winCreator = winCreator
@@ -21,7 +23,7 @@ def __init__(self, winCreator: WindowCreator, width: int, length: int, height: i
2123

2224
def GenerateCube(self) -> Texture:
2325
if self.vertexBuffer is None:
24-
self.vertexBuffer = Texture("vertex buffer")
26+
self.vertexBuffer = deepcopy(Texture("vertex buffer"))
2527
self.vertexBuffer.setup_3d_texture(self.size[0], self.size[1], self.size[2], Texture.T_float, Texture.F_rgba32)
2628

2729
if self.__cubeBufferCreatorComputeNode is None:

Blobtory/Scripts/planet_former/MarchingCubes.py

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import math
2+
from copy import copy, deepcopy
23

34
from panda3d.core import Texture, Shader, NodePath, LVecBase3i, ShaderAttrib, GeomEnums, GeomNode, \
45
GeomVertexFormat, GeomVertexData, GeomTriangles, Geom, OmniBoundingVolume, Material, LColor, SamplerState, \
@@ -29,7 +30,7 @@ def __init__(self, cubeformer: CubeFormer):
2930

3031
def EdgeGenerator(self) -> Texture:
3132
if self.edgeVertexBuffer is None:
32-
self.edgeVertexBuffer = Texture("edge vertex buffer")
33+
self.edgeVertexBuffer = deepcopy(Texture("edge vertex buffer"))
3334
self.edgeVertexBuffer.setup_3d_texture(self.size[0]*3, self.size[1], self.size[2],
3435
Texture.T_float, Texture.F_rgba32)
3536
else:
@@ -53,21 +54,21 @@ def EdgeGenerator(self) -> Texture:
5354

5455
def MarchCube(self):
5556
if self.atomic is None:
56-
self.atomic = Texture("atomic int")
57+
self.atomic = copy(Texture("atomic int"))
5758
self.atomic.setupBufferTexture(1, Texture.T_int, Texture.F_r32i, GeomEnums.UH_dynamic)
5859

5960
if self.triangleBuffer is None:
60-
self.triangleBuffer = Texture("Cube march triangle Buffer")
61+
self.triangleBuffer = deepcopy(Texture("Cube march triangle Buffer"))
6162
self.triangleBuffer.setupBufferTexture((self.size[0]-1)*(self.size[1]-1)*(self.size[2]-1)*4*3,
6263
Texture.T_int, Texture.F_rgba32, GeomEnums.UH_dynamic)
63-
self.normalBuffer = Texture("Cube march normal Buffer")
64+
self.normalBuffer = deepcopy(Texture("Cube march normal Buffer"))
6465
self.normalBuffer.setupBufferTexture((self.size[0] - 1) * (self.size[1] - 1) * (self.size[2] - 1) * 4,
6566
Texture.T_float, Texture.F_rgba32, GeomEnums.UH_dynamic)
6667
else:
6768
self.triangleBuffer.setClearColor(-1)
6869

6970
if self.triangulationBuffer is None:
70-
self.triangulationBuffer = Texture("Triangulation buffer")
71+
self.triangulationBuffer = deepcopy(Texture("Triangulation buffer"))
7172
self.triangulationBuffer.setup_2d_texture(16, 256, Texture.T_int, Texture.F_r32i)
7273
self.triangulationBuffer.set_ram_image(MarchTable.TRIANGULATION.tobytes())
7374
else:
@@ -77,6 +78,7 @@ def MarchCube(self):
7778
shader = Shader.load_compute(Shader.SL_GLSL, "assets/shaders/compute/cubemarcher.glsl")
7879
self.cubeMarchBufferGeneratorNode = NodePath("Cube march triangle Generator")
7980
self.cubeMarchBufferGeneratorNode.set_shader(shader)
81+
self.cubeMarchBufferGeneratorNode.set_shader_input("isWater", self.cubeformer.isWater)
8082
self.cubeMarchBufferGeneratorNode.set_shader_input("isoLevel", 0.5)
8183
self.cubeMarchBufferGeneratorNode.set_shader_input("size", self.size)
8284
self.cubeMarchBufferGeneratorNode.set_shader_input("triagIndexBuffer", self.atomic)

Blobtory/Scripts/planet_former/PlanetGenerator.py

Lines changed: 39 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,22 +3,60 @@
33
from Blobtory.Scripts.Pipeline.WindowCreator import WindowCreator
44
from Blobtory.Scripts.planet_former.CubeFormer import CubeFormer
55
from Blobtory.Scripts.planet_former.MarchingCubes import MarchingCubes
6-
6+
from Blobtory.Scripts.Pipeline.PipelineInstancing import PipelineInstancing
77

88
class PlanetGenerator:
99
def __init__(self, winCreator: WindowCreator, gridSize: int, radius: float):
1010
self.radius = radius
1111
self.winCreator = winCreator
12+
13+
# Setup Mesh
1214
self.cubeformer: CubeFormer = CubeFormer(self.winCreator, gridSize, gridSize, gridSize, winCreator.cubeSpacing)
1315
self.cubeformer.GenerateCube()
1416
self.cubeformer.GenerateNoiseSphere(self.radius)
17+
1518
self.marchingCubes: MarchingCubes = MarchingCubes(self.cubeformer)
1619
self.marchingCubes.EdgeGenerator()
1720
self.marchingCubes.MarchCube()
1821
self.marchingCubes.GenerateMesh()
1922

23+
# Setup Navigation Mesh
24+
self.cubeformerNav: CubeFormer = CubeFormer(self.winCreator, gridSize//4, gridSize//4, gridSize//4, winCreator.cubeSpacing*4)
25+
self.cubeformerNav.GenerateCube()
26+
self.cubeformerNav.GenerateNoiseSphere(self.radius)
27+
28+
self.marchingCubesNav: MarchingCubes = MarchingCubes(self.cubeformerNav)
29+
self.marchingCubesNav.EdgeGenerator()
30+
self.marchingCubesNav.MarchCube()
31+
32+
# Setup Water Mesh
33+
self.cubeformerWater: CubeFormer = CubeFormer(self.winCreator, gridSize//4, gridSize//4, gridSize//4, winCreator.cubeSpacing*4)
34+
self.cubeformerWater.GenerateCube()
35+
self.cubeformerWater.mouseTime.setData(PTAFloat([10, 0, 0, 10.1]))
36+
self.cubeformerWater.GenerateNoiseSphere(self.radius * 0.98)
37+
self.cubeformerWater.isWater = True
38+
39+
self.marchingCubesWater: MarchingCubes = MarchingCubes(self.cubeformerWater)
40+
self.marchingCubesWater.EdgeGenerator()
41+
self.marchingCubesWater.MarchCube()
42+
self.marchingCubesWater.GenerateMesh()
43+
44+
# sphere = self.winCreator.base.loader.loadModel("assets/models/icosphere")
45+
# PipelineInstancing.RenderThisModelAtVertexesFrom3DBuffer(sphere, self.cubeformer.vertexBuffer,
46+
# self.cubeformer.size, self.winCreator)
47+
48+
# box = self.winCreator.base.loader.loadModel("box")
49+
# PipelineInstancing.RenderThisModelAtVertexesFrom3DBuffer(box, self.cubeformerNav.vertexBuffer,
50+
# self.cubeformerNav.size, self.winCreator)
51+
2052
def RegenPlanet(self):
2153
self.winCreator.baseData.debuggerPlanetFormer.Inform("Regenerating planet")
54+
55+
self.cubeformerNav.GenerateNoiseSphere(self.radius)
56+
self.marchingCubesNav.EdgeGenerator()
57+
self.marchingCubesNav.MarchCube()
58+
self.marchingCubesNav.GenerateMesh()
59+
2260
self.cubeformer.GenerateNoiseSphere(self.radius)
2361
self.marchingCubes.EdgeGenerator()
2462
self.marchingCubes.MarchCube()

assets/shaders/compute/cubemarcher.glsl

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ layout(rgba32f) uniform readonly image3D vertexBufferEdge;
1212
uniform writeonly iimageBuffer triangleBuffer;
1313
uniform writeonly imageBuffer normalBuffer;
1414
uniform float isoLevel;
15+
uniform bool isWater;
1516
uniform ivec3 size;
1617

1718

@@ -70,8 +71,9 @@ void main() {
7071

7172
vec3 normal = normalize(cross(v2-v0, v1-v0));
7273
//vec3 normal = normalize(v2+v0+v1);
73-
int type = int(distance(vec3(512), v1)/45);
74-
//if(type > 6) if(dot(normalize(vec3(512)-v1), normal)<0.8) type = 5;
74+
int type = int(distance(vec3(512), v1)/51);
75+
if (isWater) type = 13;
76+
// if(type > 7) if(dot(normalize(vec3(512)-v1), normal)<0.5) type = 6;
7577
imageStore(normalBuffer, int(triangleIDIndex/3), vec4(normal, type));
7678

7779
i+=3;
34 Bytes
Loading
34 Bytes
Binary file not shown.

0 commit comments

Comments
 (0)