about to blind test encodeMatrix

This commit is contained in:
buncccc 2025-04-10 20:06:30 +12:00
parent 1f31073017
commit bafc67c982
3 changed files with 37 additions and 13 deletions

View File

@ -121,10 +121,11 @@ public class RT3script : MonoBehaviour
}
// this is encoding COLUMN MAJOR; the inner loop (j) goes along the COLUMN index
private int encodeMatrix(Matrix4x4 mat, int colOffset, int rowOffset) {
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
encodeData(mat[i,j], colOffset, rowOffset);
encodeData(mat[i,j], colOffset, rowOffset); // if I want to switch to ROW MAJOR encoding, switch i and j here so it's [j,i]
rowOffset++;
}
}
@ -146,6 +147,7 @@ public class RT3script : MonoBehaviour
encodedTransform[j] = Color.black;
}
}
outputImage.SetPixels((256*colNumber), outputImage.height-rowNumber,32,1, encodedTransform);
}

View File

@ -763,7 +763,7 @@ Camera:
near clip plane: 0.01
far clip plane: 7
field of view: 60
orthographic: 0
orthographic: 1
orthographic size: 2
m_Depth: -1
m_CullingMask:
@ -802,7 +802,7 @@ MonoBehaviour:
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 963194225}
m_Enabled: 1
m_Enabled: 0
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: a42175a861c72054982b102c884dd2a6, type: 3}
m_Name:

View File

@ -37,7 +37,11 @@
uniform float pointSize;
uniform float boxSize;
uniform int cameraIndex;
uniform float cameraIndex;
uniform float numCameras;
uniform mat4 c2wm;
varying vec2 vUv;
@ -46,11 +50,16 @@
vUv = vec2( position.x / width, position.y / height );
vec4 color = texture2D( map, vUv*vec2(0.5,0.333)+vec2(0,0.333));
//vec4 color = texture2D( map, vUv*vec2(0.5,(1.0/3.0))+vec2(0,(1.0/3.0)));
vec4 color = texture2D( map, vUv*vec2(1.0/numCameras,(1.0/3.0))+vec2(cameraIndex/numCameras,(1.0/3.0)));
float depth = ( color.r + color.g + color.b ) / 3.0;
// Projection code by @kcmic
// instead of building a matrix and multiplying by the matrix, math is being done to
// guess the projection.
// Undoes the perspective division
float z = depth * (farClipping-nearClipping) + nearClipping;
vec4 pos = vec4(
@ -59,8 +68,10 @@
z*boxSize*0.5,
1.0);
vec4 pos2 = inverse (c2wm) * pos;
gl_PointSize = pointSize;
gl_Position = projectionMatrix * modelViewMatrix * pos;
gl_Position = projectionMatrix * modelViewMatrix * pos2;
if (depth <.01) { // move this point out of the view box if the depth is nearly zero
gl_Position = vec4(-1., -1., -1., -1.);
}
@ -70,14 +81,24 @@
<script id="fs" type="x-shader/x-fragment">
uniform sampler2D map;
uniform int cameraIndex;
uniform float cameraIndex;
uniform float numCameras;
uniform mat4 c2wm;
varying vec2 vUv;
void main() {
vec4 color = texture2D( map, vUv*vec2(0.5,0.333) + vec2(0.0, 0.0) );
vec4 color = texture2D( map, vUv*vec2(1.0/numCameras,(1.0/3.0))+vec2(cameraIndex/numCameras,0.0));
// if (color.r < .2) { discard;}
if (c2wm[1][2] > .26) {
gl_FragColor = vec4(1.0, 0.5, 0.0, 1.0);
}
else {
gl_FragColor = vec4( color.r, color.g, color.b, 1.0);
}
}
</script>
@ -221,8 +242,8 @@
boxSize: { value: boxSize },
pointSize: { value: pointSize },
cameraIndex: { value: i },
captureCameraToWorldMatrix: {value: [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},
captureCameraProjectionMatrix: {value: [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},
numCameras: { value: numCameras },
c2wm: { value: new THREE.Matrix4() }
},
vertexShader: document.getElementById("vs").textContent,
fragmentShader: document.getElementById("fs").textContent,
@ -272,11 +293,12 @@
// the appropriate pixel encoded floats for the camera matrix.
let d = context.getImageData(0,1,canvas.width,16); //should get data from the second line to the 17th, or 16 rows of pixels
const c2wm_array = [0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0];
for(let rowNr = 0; rowNr < 16; rowNr++) {
// cameraFloats[i][rowNr] = decodeUint32ToFloat(pixelArrayToUint32(d.data, c.width, rowNr))
materialList[i].uniforms.captureCameraToWorldMatrix.value[rowNr] = decodeUint32ToFloat(pixelArrayToUint32(d.data, canvas.width, rowNr))
c2wm_array[rowNr] = decodeUint32ToFloat(pixelArrayToUint32(d.data, canvas.width, rowNr))
}
materialList[i].uniforms.c2wm.value.fromArray(c2wm_array);
}
renderer.render(scene, camera);
}