首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >统一,天穹和遥远的剪辑

统一,天穹和遥远的剪辑
EN

Stack Overflow用户
提问于 2017-03-21 09:39:48
回答 3查看 2.7K关注 0票数 3

我正在为movil VR开发,所以这里的表演是强制性的。

它是写在每一个虚拟现实的良好实践中,以避免统一的天框和使用天穹代替。我在搅拌机里创造了一个圆顶,它的质地和所有的东西。

我导入穹顶作为fbx,应用移动/无光着色器和纹理图像,它看起来很棒。

我的问题是,当运行游戏时,圆顶从遥远的剪裁飞机上出来。选项:

  • 设置更大的远剪贴机,它带来了很多我想要剪辑的东西。没有被剪裁。
  • 设置了某种两遍渲染,我甚至没有尝试,头顶听起来很可怕。
  • 设置较高的远剪裁平面,然后将每层的裁剪设置为更低的每一层,这是可行的,但会导致解决问题,因为“动作”实际上发生在玩家附近。

我没有测试,但我很确定在虚拟现实的圆顶,我们可以使用单一渲染作为背景,相同的两个眼睛(因为它是在无限的,不应该视差。

我这样做了,添加了第二个相机,Clear Flags: Depth onlyculling mask only DomeLayer,实际上把相机移到了DomeLayer主摄像机(从googleVR演示场景)设置为Clear Flags: Don't clear,将掩码设置为Everything but DomeLayer

它很管用,但是

  1. 两台摄像机之间都存在着反同步现象。

注意小的第一锥的角度(主摄像机)和更大的外锥的方向(圆顶摄像机),顺便说一下,我不能将相机设置为左或右摄像机的子级,因为在我开始游戏之前它们并不存在。

  1. 打开第二个摄像头时的开销令人印象深刻..

我关掉了圆顶相机,让它运行了一段时间,打开它,注意到SetPass和任何其他指标。第二部相机的冲击力很难看。

我在一个没有专用显卡的笔记本上运行,但是开销在那里,这个东西应该在移动设备上运行。

我做错什么了吗?

EN

回答 3

Stack Overflow用户

发布于 2017-04-07 16:12:30

你可以通过一些着色技巧和一台相机来完成这一任务。

创建一个新的未亮着色器。

将材料的RenderQueue设置为几何图形后的渲染。这将减少透支。https://docs.unity3d.com/Manual/SL-SubShaderTags.html

试一试

代码语言:javascript
复制
"Queue"="Geometry+1"

禁用深度写入(Zwrite )-这节省了性能,并防止您的天穹剪裁任何透明度。

启用深度测试(ZTest LEqual) --这可以防止天球遮挡其他几何学。

在顶点着色器中,通过摆弄近/远剪辑平面,你可以在“无穷大”处创造天球的错觉。

代码语言:javascript
复制
Proj Mat [2][2] = -(far+near) / (far - near)
Proj Mat [3][2] = -2*far*near / (far - near)

lengyel.pdf

代码语言:javascript
复制
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);
票数 3
EN

Stack Overflow用户

发布于 2017-03-21 18:13:20

为您的skyDome添加一个新相机,并执行以下步骤

  • 确保skyDome的相机没有标签mainCamera。
  • 制作一个新的图层skyDome。
  • 将此相机的图层更改为skyDome。
  • 将skyDome网格层更改为skyDome。
  • 将相机的清晰标志设置为Skybox。
  • 将此相机的筛选掩码设置为仅skyDome层。
  • 将mainCamera的清除标志设置为深度。
  • 将层的剔除掩码设置为除skyDome以外的其他所有内容。
票数 2
EN

Stack Overflow用户

发布于 2017-03-21 17:59:45

只需使用两个摄像头,第一个会渲染你所有的环境,第二个只会渲染你的圆顶。只需通过以下步骤更改每个摄像机将呈现的内容:

1)第一摄像机:将标签设置为MainCamera,然后参数清除标志:不清除筛选掩码:混合.(选择除DomeLayer之外的每一层)

2)创建一个名为DomeLayer的新层

3)创建第二个摄像机,作为第一个摄像机的子摄像机,然后设置参数:、Clear标志:深度仅限剔除面具: DomeLayer。另外,第二个照相机Depth参数应该是-1。

4)然后将Dome对象放置在DomeLayer上,将所有其他对象放置在除DomeLayer之外的任何层上

下面是一个例子场景的一些截图:

第一摄像机:

第二摄像机(第一台相机的子摄像机):

通过这种方式,您可以单独设置两个摄像机的剪辑平面,而不影响性能。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42923226

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档