Skip to content

Houdini 21.0 issues with displaying gsplats in Vulkan #42

@Serzhiv

Description

@Serzhiv

Hi!
I installed the new version of GSOPs 2.9.0 for Houdini 21.0 and tried to display a Gaussian through the gaussian_splats_source node. However, I didn't see anything in the viewport in smoothing mode.
In wireframe mode, the Gaussians are present. Apparently, rendering using Vulkan does not work in your version (the same was true in version 20.5). Houdini 21.0 uses Vulkan by default, and I would like to get results in it as well. As I wrote earlier, I compiled my gaussian_splats_source node for version 21.0 from the source code and solved this problem as follows (perhaps incorrectly) by modifying the GR_PrimGsplat::render() method from the GR_GSplat.C file:

void
GR_PrimGsplat::render(
	RE_RenderContext	r,
	GR_RenderMode	    render_mode,
	GR_RenderFlags	    flags,
	GR_DrawParms	    dp)
{
	if(!myWireframeGeo)
	{
		return;
	}

	//TODO, pass in r here, as different viewports could have different render modes.
	GSplatRenderer::getInstance().setRenderingEnabled(render_mode < GR_RENDER_NUM_BEAUTY_MODES);

	bool need_wire =(render_mode == GR_RENDER_WIREFRAME) || (flags & GR_RENDER_FLAG_WIRE_OVER);

	// Only for shaded/beauty
	GSplatRenderer::getInstance().setRenderingEnabled(!need_wire);

    if(need_wire)
    {
		RE_Shader* sh = GsplatShaderManager::getInstance().getShader(GsplatShaderManager::GSPLAT_WIRE_SHADER, r);
		r->pushShader(sh);
		myWireframeGeo->draw(r, RE_GEO_WIRE_IDX);
		r->popShader();
	}
    else
    {
    	GSplatRenderer::getInstance().includeInRenderPass(myRegistryId);

    	if (mySetExplicitCameraPos)
    		GSplatRenderer::getInstance().setExplicitCameraPos(myExplicitCameraPos);

    	GSplatRenderer::getInstance().setSphericalHarmonicsOrder(myShOrder);
    }

	GSplatRenderer::getInstance().includeInRenderPass(myRegistryId);

	if (mySetExplicitCameraPos)
	{
		GSplatRenderer::getInstance().setExplicitCameraPos(myExplicitCameraPos);
	}

	GSplatRenderer::getInstance().setSphericalHarmonicsOrder(myShOrder);
}

There is another problem in the UT_GSplatVectorTypes.h file.
Instead of:
typedef UT_Matrix4T<fpreal16> MyUT_Matrix4H;
I wrote:
typedef UT_Matrix4F MyUT_Matrix4H;

If I am incorrect in my conclusions, then I do not understand why gaussian is not displayed correctly in Vulkan.
Thank you.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions