我正在为movil VR开发,所以必须在这里进行表演。
在VR的每一个好习惯中都写了这个,以避免统一的天空盒,而是使用天幕。我在搅拌器中用它的质地创造了一个圆顶。
我将圆顶导入为fbx,应用移动/无光泽着色器和纹理图像,看起来很棒。
我的问题是,当运行游戏时,圆顶离开远剪裁平面。 选项:
我没有测试,但我非常确定VR中的圆顶我们可以使用单个渲染作为背景,对于双眼都是一样的(因为它是无限的,不应该是视差。
我做了消化,添加了第二个相机,Clear Flags: Depth only
,culling mask only DomeLayer
并实际将相机移动到DomeLayer
主摄像头(来自googleVR演示场景)设置为Clear Flags: Don't clear
,剔除掩码为Everything but DomeLayer
它有点有用但是
答案 0 :(得分:2)
只需使用两个相机,第一个将渲染您的所有环境,第二个将只渲染您的圆顶。只需使用以下步骤更改每个相机将呈现的内容:
1)第一个相机:将标签设置为 MainCamera ,然后参数清除标记:不要清除和剔除蒙版:混合...... (选择除DomeLayer
以外的每一层)
2)创建名为 DomeLayer 的新图层
3)创建第二个摄像机作为第一个摄像机的孩子,然后设置参数:清除标志:仅深度和剔除面具:DomeLayer 。第二个相机Depth
参数也应为-1
4)然后将 Dome 对象放在DomeLayer
以及除DomeLayer
以外的任何图层上的所有其他对象
以下是示例场景的截图:
第二台相机(第一台相机的孩子):
这样,您可以单独设置两个摄像机的剪裁平面而不会失去性能。
答案 1 :(得分:2)
为skyDome添加新相机并执行以下步骤
答案 2 :(得分:2)
你可以通过一些着色器技巧和一个摄像头来实现这一目标。
创建一个新的不亮的着色器。
设置要在几何体后渲染的材质的RenderQueue。这将减少透支。 https://docs.unity3d.com/Manual/SL-SubShaderTags.html
尝试
"Queue"="Geometry+1"
禁用深度写入(Zwrite Off) - 这样可以节省性能,并防止你的天幕被剪切掉任何透明度。
启用深度测试(ZTest LEqual) - 这可以防止你的天体遮挡其他几何体。
在顶点着色器中,您可以通过摆弄近/远剪裁平面,在“无限”处创建一个天体的错觉。
Proj Mat [2][2] = -(far+near) / (far - near)
Proj Mat [3][2] = -2*far*near / (far - near)
http://www.terathon.com/gdc07_lengyel.pdf
float4x4 newMat= UNITY_MATRIX_P;
newMat[2][2]= -(1001.0/999.0);
newMat[3][2]= -2*1000.0/999.0;
v.vertex.xyz *= 100;
v.vertex = mul(UNITY_MATRIX_V,v.vertex);
o.vertex = mul(newMat,v.vertex);