Untiy Native Render Plugin在VR中的绘制(二): 透明排序
来源:互联网 发布:人工智能 中医 编辑:程序博客网 时间:2024/06/05 16:50
上篇已经能在VR中画出来了, 但是还存在两个问题:
1. 透明物体会被Native画的东西挡住
2. VR中Native画的东西透视关系有点问题, 跟Unity绘制的场景不能很好地融合在一起
先来解决一个透明排序的问题, 这个问题有两个思路去解决:
双Camera
双Camera的思路就是, 一个Camera只画不透明物体, OnPostRender中回调Native Renderer, 另一个Camera只画透明物体. 这样Native的绘制就能在两者之间进行, 有几个细节:
- 先保证两个Camera的参数一样
- 第一个Camera的Culling Mask把TransparentFX去掉
- 第二个Camera的Culling Mask只保留TransparentFX
- 所有透明物体设置layer为TransparentFX
- 第二个Camera的Clear Flags设置为Don’t Clear, 这样两个Camera的画面才能结合到一起
- 第二个Camera的Depth设置成比第一个Camera大, 代表后画
插入CommandBuffer
Unity5.2在CommandBuffer入加入了调用NativeRenderPlugin的支持, 这就可以让我们可以在渲染管线的各个阶段之前插入我们想要的效果. 具体到我们的需求, 可以简化为:
private CommandBuffer commandBuffer; void Start() { SetUnityStreamingAssetsPath(Application.streamingAssetsPath); commandBuffer = new CommandBuffer(); commandBuffer.IssuePluginEvent(GetRenderEventFunc(), 1); camera.AddCommandBuffer(CameraEvent.BeforeForwardOpaque, commandBuffer); GetComponent<MeshFilter>().mesh.bounds = new Bounds(Vector3.zero, Vector3.one * 1000); } void OnWillRenderObject() { // Set time for the plugin SetTimeFromUnity(Time.timeSinceLevelLoad); if (Camera.current != null) { var viewMatrix = Camera.current.worldToCameraMatrix; var projectionMatrix = GL.GetGPUProjectionMatrix(Camera.current.projectionMatrix, VRSettings.enabled); SetCameraMatrix(viewMatrix.toFloatArray(), projectionMatrix.toFloatArray(), VRSettings.enabled); } }
一个细节, OnWillRenderObject必须在有Mesh时才会调用, 所以这里挂了个Box到NativeRender的GameObject上, 并把包围盒设置成非常大, 一方面保证了SetCameraMatrix可以一直调用到, 另一方面也能”隐藏”掉这个Box(内部看经过back face culling是不可见的).
相对于双Camera的做法省去了为透明物体设置layer mask的工作, 也更为灵活和高效.
0 0
- Untiy Native Render Plugin在VR中的绘制(二): 透明排序
- Untiy Native Render Plugin在VR中的绘制(二): 透明排序
- Untiy Native Render Plugin在VR中的绘制
- Untiy Native Render Plugin在VR中的绘制
- VR在煤矿中的应用
- VR眼镜连接到Untiy项目
- u3d native render
- 在图像中绘制透明白色背景
- 【VR】VR中的交互
- Untiy 访问组件(二)
- Untiy中的数据平滑处理
- untiy中的委托与事件
- untiy 中的www读取文件
- 3D中的绘制流水线(Render/Display的工作流程)
- Untiy
- 如何在CDC上绘制背景透明的图片
- ReactNativeiOS(二)读书记录 7JSX在React-Native中的应用
- Flash在DirectX中的绘制
- 技术,已经很遥远
- uboot中添加自己的命令
- @PATHVARIABLE、@REQUESTPARAM和@SESSIONATTRIBUTES的区别
- Servlet 3.0 之@WebFilter怎么控制多个filter的执行顺序
- 规划在sharepoint中使用安全组
- Untiy Native Render Plugin在VR中的绘制(二): 透明排序
- ValueStack---对OGNL的扩展
- 如何将MyEclipse开发的项目导入到Eclipse中运行
- socket 通信的解决方案-Mina框架的使用心得及相关要点
- linux-php-yii2-nginx项目配置
- Web渗透测试求职问答大全
- matlab2014a生成.net的dll文件打包失败的解决方法
- c++第四次作业
- sharepoint多个NLB的web前段如何进行文件同步?