How do i add a pixelate effect to a 3d game

That effect is often referred to as “film grain”. It is a post processing effect usually. And/or handled by shaders. And I do not believe gdevelop has anyway to it or even current extensions.

However this forum post has someone who has create a custom extension that adds a bunch of post processing stuff

Here is the github

The only way I can I think of doing it Gdevelop right now with no code and no custom extensions or anything is adding a Seamless Texture that tiles over your entire scene. Then you will need to animate it. Then you can use gdevelop logic to format it and size it your screen , animate it and call it every frame

Here is my javascript code I usually start with for mouse/camera controls. It is setup to be 3rd person not 1st person but you can tweak the settings to get whatever camnera view you want.

const player = runtimeScene.getObjects("Player3dModel")\[0\];

if (!player) return;



const camera = player.getBehavior("ThirdPersonCamera");

if (!camera) return;



const vars = runtimeScene.getVariables();



// Always initialize once.

if (!vars.has("CamInit")) {

    vars.get("CamInit").setBoolean(true);



    vars.get("CamRot").setNumber(0);

    vars.get("CamElev").setNumber(20);



    vars.get("TargetDist").setNumber(500);

    vars.get("CurrentDist").setNumber(500);



    vars.get("PrevMouseX").setNumber(0);

    vars.get("PrevMouseY").setNumber(0);



    vars.get("Dragging").setBoolean(false);



    vars.get("RotationSensitivity").setNumber(0.09);

    vars.get("ElevationSensitivity").setNumber(0.25);

}



// One shared gate for all gameplay mouse control.

const uiOwnsMouse =

    vars.get("ControlsMenuOpen").getAsBoolean() ||

    vars.get("WaitingForKey").getAsString() !== "";



if (uiOwnsMouse) {

    vars.get("Dragging").setBoolean(false);

return;

}



const input = runtimeScene.getGame().getInputManager();



const mouseX = input.getMouseX();

const mouseY = input.getMouseY();



const leftPressed =

    gdjs.evtTools.input.isMouseButtonPressed(

        runtimeScene,

"Left"

);



if (leftPressed) {

if (!vars.get("Dragging").getAsBoolean()) {

        vars.get("Dragging").setBoolean(true);

        vars.get("PrevMouseX").setNumber(mouseX);

        vars.get("PrevMouseY").setNumber(mouseY);

} else {

const dx =

            mouseX - vars.get("PrevMouseX").getAsNumber();

const dy =

            mouseY - vars.get("PrevMouseY").getAsNumber();



let rot = vars.get("CamRot").getAsNumber();

let elev = vars.get("CamElev").getAsNumber();



        rot += dx \* vars.get("RotationSensitivity").getAsNumber();

        elev -= dy \* vars.get("ElevationSensitivity").getAsNumber();



if (elev > 80) elev = 80;

if (elev < 0) elev = 0;



        vars.get("CamRot").setNumber(rot);

        vars.get("CamElev").setNumber(elev);



        camera.SetRotationAngleOffset(rot);

        camera.SetElevationAngleOffset(elev);



        vars.get("PrevMouseX").setNumber(mouseX);

        vars.get("PrevMouseY").setNumber(mouseY);

}

} else {

    vars.get("Dragging").setBoolean(false);

}



const wheel =

    gdjs.evtTools.input.getMouseWheelDelta(runtimeScene);



if (wheel !== 0) {

let target = vars.get("TargetDist").getAsNumber();



    target -= wheel \* 1;



if (target < 100) target = 100;

if (target > 1500) target = 1500;



    vars.get("TargetDist").setNumber(target);

}



let current = vars.get("CurrentDist").getAsNumber();

const target = vars.get("TargetDist").getAsNumber();



current += (target - current) \* 0.20;



vars.get("CurrentDist").setNumber(current);

camera.SetDistance(current);