其他分享
首页 > 其他分享> > 高真实感复杂光照环境光照场景模拟-软件设计方案

高真实感复杂光照环境光照场景模拟-软件设计方案

作者:互联网

前言:

  上一次笔者对高真实感的复杂光照进行了系统的需求设计和分析,给出了相应的用例图和类图进行说明。这次将对软件设计方案进行详细的阐述。

一、软件设计方案

1.软件架构

  本项目是基于UE4的,采用的是“MVC”架构。将整个工作流程划分成了三个层次,分别是Model,View,Controller。

  Model主要指的是Actor,Mesh,Material,Level,Resource等各种数据元素的内存表示。

  Controller可以是各种算法,包括渲染算法,AI寻路,物理模拟等等。

  View指的游戏的UI,可以是手柄的输入,也可以是与玩家直接交互的载体。

  本项目主要是在移动渲染管线中实现延迟渲染,并且在Shader上有一定的表现能力(海水,风场等)。在Model层主要是GBuffer,VertexBuffer,ZBuffer,Texture,Lighting以及各种细化的RHI资源。Controller层则是实现延迟渲染算法,主动提交切换Render Target的Command给Render Thread,放入CmdList。在之后异步执行RHICommandList中的命令,对所有的渲染操作全部渲染到指定的GBuffer中,对ZBuffer不符合条件的片段,不予渲染,实现延迟渲染。View层则更注重相应Shader的表现。

 

2.设计模式

  本项目主要是使用类模式中的模板方法模式 + 命令模式。

  模板方法模式最大的特点是可以直接继承已有的父类特征,不需要书写过多的代码就可以实现相应的效果。缺点就是耦合性太强,如果父类做出了某些改变,子类也要相应变化。但是在UE4已经经过了很久的演变,并且它的架构已经十分成熟了,不存在太大的变化。而且继承自UOjbect,不仅可以提供诸如反射,GC,元数据,序列化等特性。还可以实现父类已定义好的接口,实现类接口的统一化。

  选择命令模式则更出于对UE4的MVC架构以及三大Thread工作的机制的考虑。UE4的三大Thread:Game Thread,Render Thread,RHI Thread,为了不干涉各自的模块工作。采用的是异步工作方式,类似Windons下的事件机制。例如:当Render Thread有某个渲染Task,会生成很多的RHI Command,但Render Thread并不会直接跨模块的去执行RHI Command,而是将这些命令放入到RHI Command队列中。同时在需要执行的时候下发一个Task,然RHI Thread依次执行RHI队列中所有的Command。这样做的做法有很多的优点,显而易见的有两点:

  1)模块之间的划分十分清晰并且耦合性很低 

  2)十分符合“开闭原则”,我们不需要去重写Thread的工作方式,只需要实现自己的命令类,在合适的地方放入相应的队列即可。

 

3.接口API

  

二、视图描述

  1.依赖视图

  2.泛化视图

  3.实现视图

  4.执行视图

 

三、运行环境

  基本环境:

  Android移动端

  支持OpenglES

  推荐环境:

  内存:4GB

  CPU:高通骁龙636以上

四、技术选型

  C++开发,UE4移动开发,计算机图形学开发,OpenglES,HLSL,延迟渲染

五、核心工作机制

  延迟渲染的核心工作机制有以下三点:

  1.生成自定义命令类型,该命令完成下列工作:请求相应的RHI Resource(g-buffer),对RHI Resource进行跟踪和绑定,Push到Render Thread Task队列中

  2.生成相应的渲染命令,在执行RHI Command队列中的命令时。令所有的命令先跟z-buffer对比,并且如果不符合条件,予以丢弃。

  3.对g-buffer进行像素采样,并结合光照,生成相应的RHI Command。

  海水和风场等效果实现的核心工作机制则更取决于HLSL Shader的编写。

致谢

 

标签:Render,Thread,渲染,软件设计,视图,RHI,Command,真实感,光照
来源: https://www.cnblogs.com/lirenwei/p/14208421.html