如何使用RGB纹理为Google Tango(Nash)pointcloud着色?

时间:2015-05-23 22:07:29

标签: unity3d shader google-project-tango

我正在尝试使用Unity Pointcloud Example from Github作为基础编写着色器,以便使用与默认蓝色/粉色不同的颜色渲染pointcloud。这是我第一次使用3D数据和着色器,因此我对事情如何运作的理解很可能已经消失。我注意到我所使用的pointcloud的密度与我使用的1280x720图像有很大不同,所以每次着色器进行纹理元素查找时,它都会变成黑色?我的pointcloud shows up as tiny black dots代替了我已经附加到其上有着色器的素材的RGB图像的预期颜色混合。这是我的着色器代码:

    Shader "Tango/TextureTest" {
    Properties {
      _MainTex ("RGBA Texture Image", 2D) = "white" {} 
   }
   SubShader {
      Tags {"Queue" = "Geometry"}

      Pass {    

         CGPROGRAM

         #pragma vertex vert  
         #pragma fragment frag 

         uniform sampler2D _MainTex;    

         struct vertexInput {
            float4 vertex : POSITION;
            float4 texcoord : TEXCOORD0;
         };
         struct vertexOutput {
            float4 pos : SV_POSITION;
            float4 tex : TEXCOORD0;
         };

         vertexOutput vert(vertexInput input) 
         {
            vertexOutput output;

            output.tex = input.texcoord;
            output.pos = mul(UNITY_MATRIX_MVP, input.vertex);
            return output;
         }

         float4 frag(vertexOutput input) : COLOR
         {
            float4 textureColor = tex2D(_MainTex, input.tex);  
            return textureColor;
         }

         ENDCG
      }
   }
    FallBack "Diffuse"
}

在Unity编辑器中,我创建了一个新材质,并为其添加了一个随机RGB图像。为了使用这个新材质+着色器,我将Pointcloud Unity示例中使用的Pointcloud材质+着色器替换为我的。所以我有两个问题:我的着色器不完整/不正确以及我在理解着色器中使用纹理的概念时缺少什么,特别是与此Tango pointcloud场景有关?

感谢。

我的Tango设备正在运行Nash。

1 个答案:

答案 0 :(得分:1)

是的 - 除非你在固定视图中累积3d点击并希望他们最终获得完全覆盖,否则你不会取得任何成功 - 鉴于野兽的性质,这是非常不可能的

你有两个解决方案 - 第一种是使用Delauney三角剖分或任何其他技术生成网格,这些技术会将您所拥有的点拼接到曲面中。然后,您可以让图形引擎找出其间的所有点 - 为您知道的点生成纹理坐标,不知道插值的纹理坐标 - here's a movie of that -

现在,我必须首先承认,在追逐狙击两个月之后,由于所有错误的原因,它的方向错误 - tl; dr是Tango数据返回是一个统计过程,即你必须继续假设虽然随着时间的推移在统计上准确到某种程度,Tango返回的各个点既不准确也不可重复 - 因此体积可视化技术是可行的方法,如this - 在那一个,有各种booboos然而,在纹理应用中,它实际上是使用多轴融合模型,而前者仅在视图与采集时的摄像机轨迹和姿态直接对齐时才起作用。

至于着色器的实际创建,这是一个不同的反应 - 但我认为在选择着色器之前没有多大意义,直到你知道如何将这些点编织成一个表面(第一部电影)或第三部电影(第二部电影) - 我无法强调第一部电影是一个非常糟糕的想法"