diff --git a/Assets/DepthOnlyShader.shader b/Assets/DepthOnlyShader.shader index c2c7016..8766bd7 100644 --- a/Assets/DepthOnlyShader.shader +++ b/Assets/DepthOnlyShader.shader @@ -23,8 +23,12 @@ Shader "Custom/DepthOnly" o.pos = UnityObjectToClipPos(v.vertex); // o.depth = (o.pos.z + 1.) / 2. / o.pos.w; // o.depth = (o.pos.z + 1.) / 2.; - o.depth = o.pos.z; - // o.depth = o.pos.z/ o.pos.w ; + // o.depth = o.pos.z; + + // o.pos.x = o.pos.x / o.pos.w; + // o.pos.y = o.pos.y / o.pos.w; + // o.pos.z = o.pos.z / o.pos.w; + o.depth = o.pos.z / o.pos.w; //o.depth = mul(UNITY_MATRIX_M, v.vertex).x; // o.pos2 = o.pos; return o; @@ -32,9 +36,38 @@ Shader "Custom/DepthOnly" fixed4 frag(v2f i) : SV_Target { + // if (i.depth <= 0) { + // return fixed4(1.0, 0.5, 0.0, 1.0); + // } + // ****We had to change Unity's color space to Gamma such that it doesn't add its own gamma correction, // for this to work ******* - return fixed4(i.depth, i.depth, i.depth, 1.0); + uint depth24b = (i.depth * ((1<<24)-1)); // maps depth to be from 0 --- 2^24 + + uint rEncode = 0; + uint gEncode = 0; + uint bEncode = 0; + // This loop encodes depth into a 24 bit value split across all three color channels. + // The least significant digit is the last blue value. + // The most significant digit is the first red value. + for (int i = 0; i < 8; i++){ + bEncode |= ((depth24b) & 1) << i; + depth24b >>= 1; + + gEncode |= ((depth24b) & 1) << i; + depth24b >>= 1; + + rEncode |= ((depth24b) & 1) << i; + depth24b >>= 1; + } + return fixed4( + rEncode/255., + gEncode/255., + bEncode/255., + 1.0 + ); + + // return fixed4(i.depth, i.depth, i.depth, 1.0); // Output depth as grayscale // return fixed4((i.depth), (i.depth), (i.depth), 1.0); // return fixed4( diff --git a/Assets/Flooded_Grounds/Scenes/Scene_A.unity b/Assets/Flooded_Grounds/Scenes/Scene_A.unity index 0694ae5..1cae5f6 100644 --- a/Assets/Flooded_Grounds/Scenes/Scene_A.unity +++ b/Assets/Flooded_Grounds/Scenes/Scene_A.unity @@ -12904,26 +12904,62 @@ PrefabInstance: propertyPath: m_Name value: Holostream starter kit objectReference: {fileID: 0} + - target: {fileID: 1490280167841848408, guid: a0090e2e14d4fa743aefa3c48d3707f3, type: 3} + propertyPath: m_ClearFlags + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 1490280167841848408, guid: a0090e2e14d4fa743aefa3c48d3707f3, type: 3} + propertyPath: orthographic + value: 1 + objectReference: {fileID: 0} - target: {fileID: 1490280167841848408, guid: a0090e2e14d4fa743aefa3c48d3707f3, type: 3} propertyPath: far clip plane value: 10 objectReference: {fileID: 0} + - target: {fileID: 1490280167841848408, guid: a0090e2e14d4fa743aefa3c48d3707f3, type: 3} + propertyPath: near clip plane + value: 0.01 + objectReference: {fileID: 0} - target: {fileID: 1490280167841848408, guid: a0090e2e14d4fa743aefa3c48d3707f3, type: 3} propertyPath: orthographic size value: 5 objectReference: {fileID: 0} + - target: {fileID: 1490280168423195780, guid: a0090e2e14d4fa743aefa3c48d3707f3, type: 3} + propertyPath: m_ClearFlags + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 1490280168423195780, guid: a0090e2e14d4fa743aefa3c48d3707f3, type: 3} + propertyPath: orthographic + value: 1 + objectReference: {fileID: 0} - target: {fileID: 1490280168423195780, guid: a0090e2e14d4fa743aefa3c48d3707f3, type: 3} propertyPath: far clip plane value: 10 objectReference: {fileID: 0} + - target: {fileID: 1490280168423195780, guid: a0090e2e14d4fa743aefa3c48d3707f3, type: 3} + propertyPath: near clip plane + value: 0.01 + objectReference: {fileID: 0} - target: {fileID: 1490280168423195780, guid: a0090e2e14d4fa743aefa3c48d3707f3, type: 3} propertyPath: orthographic size value: 5 objectReference: {fileID: 0} + - target: {fileID: 1490280168970962316, guid: a0090e2e14d4fa743aefa3c48d3707f3, type: 3} + propertyPath: m_ClearFlags + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 1490280168970962316, guid: a0090e2e14d4fa743aefa3c48d3707f3, type: 3} + propertyPath: orthographic + value: 1 + objectReference: {fileID: 0} - target: {fileID: 1490280168970962316, guid: a0090e2e14d4fa743aefa3c48d3707f3, type: 3} propertyPath: far clip plane value: 10 objectReference: {fileID: 0} + - target: {fileID: 1490280168970962316, guid: a0090e2e14d4fa743aefa3c48d3707f3, type: 3} + propertyPath: near clip plane + value: 0.01 + objectReference: {fileID: 0} - target: {fileID: 1490280168970962316, guid: a0090e2e14d4fa743aefa3c48d3707f3, type: 3} propertyPath: orthographic size value: 5 @@ -12950,7 +12986,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 4883613104065510132, guid: a0090e2e14d4fa743aefa3c48d3707f3, type: 3} propertyPath: m_LocalPosition.y - value: 21.83 + value: 21.18 objectReference: {fileID: 0} - target: {fileID: 4883613104065510132, guid: a0090e2e14d4fa743aefa3c48d3707f3, type: 3} propertyPath: m_LocalPosition.z diff --git a/Assets/RT3script.cs b/Assets/RT3script.cs index 80a7993..1eed8f1 100644 --- a/Assets/RT3script.cs +++ b/Assets/RT3script.cs @@ -14,8 +14,6 @@ public class RT3script : MonoBehaviour // public string outputRTMP = "rtmp://localhost/live/HoloPipeline"; public string ingestRTMP = "rtmp://ingest.vrcdn.live/live"; public string streamKey = ""; - public string mp4name = "my_movie_depth_ffmpeg.mp4"; - public Camera[] cameraList; private Camera[] depthCameraList; diff --git a/Assets/Website~/projection.vert.glsl b/Assets/Website~/projection.vert.glsl index 66ad9da..e2777fe 100644 --- a/Assets/Website~/projection.vert.glsl +++ b/Assets/Website~/projection.vert.glsl @@ -26,41 +26,6 @@ mat4 unity_to_opengl(mat4 U) { 0., 0., 0., 1. ) * U; } -// mat4 swapHandedness(mat4 sM) { -// return mat4( -// sM[0][0], sM[0][1], sM[0][2], sM[3][0], -// sM[1][0], sM[1][1], sM[1][2], sM[3][1], -// sM[2][0], sM[2][1], sM[2][2], sM[3][2], -// sM[0][3], sM[1][3], sM[2][3], sM[3][3]); -// } -// mat4 fuckAroundAndFindOut(mat4 sM) { -// // return mat4( -// // sM[0][0], sM[1][0], sM[2][0], sM[0][3], -// // sM[0][1], sM[1][1], sM[2][1], sM[1][3], -// // sM[0][2], sM[1][2], sM[2][2], sM[2][3], -// // sM[3][0], sM[3][1], sM[3][2], sM[3][3]); -// return mat4( -// -sM[0][0], -sM[0][1], -sM[0][2], -sM[0][3], -// sM[1][0], sM[1][1], sM[1][2], sM[1][3], -// -sM[2][0], -sM[2][1], -sM[2][2], -sM[2][3], -// sM[3][0], sM[3][1], sM[3][2], sM[3][3]); -// // return mat4( -// // sM[0][0], sM[1][0], sM[0][2], sM[0][3], -// // sM[0][1], sM[1][1], sM[1][2], sM[1][3], -// // sM[2][0], sM[2][1], sM[2][2], sM[2][3], -// // sM[3][0], sM[3][1], sM[3][2], sM[3][3]); -// // return mat4( -// // sM[0][0], sM[0][1], sM[2][0], sM[0][3], -// // sM[1][0], sM[1][1], sM[2][1], sM[1][3], -// // sM[0][2], sM[1][2], sM[2][2], sM[2][3], -// // sM[3][0], sM[3][1], sM[3][2], sM[3][3]); -// // return mat4( -// // sM[0][0], sM[0][1], -sM[0][2], sM[0][3], -// // sM[1][0], sM[1][1], sM[1][2], sM[1][3], -// // -sM[2][0], sM[2][1], sM[2][2], sM[2][3], -// // sM[3][0], sM[3][1], sM[3][2], sM[3][3]); - -// } void main() { @@ -82,24 +47,36 @@ void main() { } paintfordiscard = float(skipctr > skipthreshold); - //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; + // float depth = ( color.r + color.g + color.b ) / 3.0; + int decodeDepth = 0; + int rEncode = int(color.r*255.); + int gEncode = int(color.g*255.); + int bEncode = int(color.b*255.); - // (original) Projection code by @kcmic + // This loop decodes depth into a 24 bit value split across all three color channels. + // The least significant digit is the last blue value. + // The most significant digit is the first red value. + for (int i = 0; i < 8; i++){ + decodeDepth <<= 1; + decodeDepth |= ((rEncode >> (7-i)) & 1); + + decodeDepth <<= 1; + decodeDepth |= ((gEncode >> (7-i)) & 1); + + decodeDepth <<= 1; + decodeDepth |= ((bEncode >> (7-i)) & 1); + } + + // decodeDepth = int(10000024); + // decodeDepth = int(1<<23); + // decodeDepth = int(color.r * 255.*255.); + float depth = float(decodeDepth) / float((1<<24) - 1); + // float depth = .5; + // depth = color.r; + // if (decodeDepth > 6) depth = .5; - // 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; - // float z = depth; - - // vec4 pos = vec4( - // ( position.x / width - 0.5 )*boxSize, - // ( position.y / height - 0.5 )*boxSize, - // z*boxSize*0.5, // we had applied a (-1.0) multiplier to try to flip element [2,2] - // 1.0); vec4 pos = vec4( 2.*(position.x / float(width)) - 1., @@ -107,16 +84,11 @@ void main() { mix(1., -1., depth), 1.0 ); - //vec4 pos2 = pos; // First undo projection, then undo view, then below model is undone; flip the Y and Z vectors since WebGL is right handed vec4 pos2 = unity_to_opengl(c2wm) * inverse(prjm) * pos; // order matters here! Parentheses do not pos2.xyz *= boxSize; - // pos2 = pos2 * vec4(20000., 20000., 20000., 20000.); // bad idea! the last point needs to be 1 for translation to work - // pos2 = pos2 * boxSize; - //vec4 pos2 = inverse(c2wm) * pos; -// float(cameraIndex) gl_PointSize = pointSize; gl_Position = projectionMatrix * modelViewMatrix * pos2; if (depth <.01 || (paintfordiscard != 0.0)) { // move this point out of the view box if the depth is nearly zero diff --git a/Assets/Website~/thingy.js b/Assets/Website~/thingy.js new file mode 100644 index 0000000..8bb4068 --- /dev/null +++ b/Assets/Website~/thingy.js @@ -0,0 +1,19 @@ + + +var decodeDepth; +var rEncode = color.r; +var gEncode = color.g; +var bEncode = color.b; +// This loop decodes depth into a 24 bit value split across all three color channels. +// The least significant digit is the last blue value. +// The most significant digit is the first red value. +for (var i = 0; i < 8; i++){ + decodeDepth |= ((bEncode) & 1) << i; + decodeDepth >>= 1; + + decodeDepth |= ((gEncode) & 1) << i; + decodeDepth >>= 1; + + decodeDepth |= ((rEncode) & 1) << i; + decodeDepth >>= 1; +} \ No newline at end of file