A question about DSPs (plugin and core) when combined with the geometry engine

Hi all,

I was looking at the FMOD docs, but I couldn’t find anything on this.

Say I generate a geometric mesh using MC33[1] or marching cubes. I have a couple questions:

  1. Is it safe to just pass in the vertices directly into FMOD? Is there some way of determining if a polygon should be double-or single-sided, or should I just usually do double-sited unless I need to do something special?
  2. How does the geometry engine work when combined wit hspatializer DSPs or other plug-ins which take 3D attributes and other data parameters? Does the geometry occlusion occur before being handled by DSPs/effects, or is that something the DSP would need to do?

[1]: Vega, D., Abache, J., Coll, D., A Fast and Memory-Saving Marching Cubes 33 Implementation with the correct interior test, Journal of Computer Graphics Techniques (JCGT), vol. 8, no. 3, 1–18, 2019. http://jcgt.org/published/0008/03/01/

Hi,

Once you’ve created the geometry (FMOD Engine | Core API Reference - Geometry) it will be passed to FMOD using FMOD Engine | Core API Reference - System::createGeometry(). Passing the same objects to the geometry system and your renderer is the suggested workflow.

  • Double sided is fine
  • Any face that you would expect to apply occlusion should be passed to the system
  • The geometry system will apply occlusion to the signal which is then passed onto DPS to process.
  • So any DSP will be working with an occluded signal

Hope this helps.

Isn’t this backward? I create the geometry (with System::createGeometry) and then fill it with polygons?

And to confirm: I do pass the exact vertices that I’d get from algorithms like MC33, without modification or anything like that, to Geometry::addPolygon?

The rest of your post was very helpful – thank you!

Here is an example of the mesh struct used:

struct Mesh
{
	int numVertices;
	FMOD_VECTOR *vertices;
	float (*texcoords)[2];
	int numPolygons;
	Polygon* polygons;
	int numIndices;
	int *indices;
	FMOD::Geometry *geometry;
};

which you will then pass the polygons and vertexes to

mesh.geometry->setPolygonVertex(poly, i, &vertex);

Then passed to the FMOD system:

fmodSystem->createGeometry(mesh.numPolygons, mesh.numIndices, &mesh.geometry);

Hope this helps

It… Kind of does.It sort of does, I just need to figure out the best way to transform the grid into a mesh (I thought I had it nailed down but… Apparently I didn’t :-().