虚幻4源码
1. 虚幻4源码控制已禁用
那肯定了 你现在使用的虽然是免费版的 但是又不是商用版本的 它只会给你引擎的内容 但不会让你深入的更改引擎,而且 你现在用的是编译后的 官网给你使用的版本 并不是源码版本 如果你想查看源码 可以去github下载源码版本
2. 问一下虚幻4和u3d的区别
区别一:编程语言不同。unity3D是一款综合开发平台,有比较强的文件兼容性,使用的是C#语言,引擎源代码不公开;虚幻4使用的C++语言,能够进行游戏项目的独立开发,实时对游戏组件进行优化,达到“所见即所得”,引擎源代码开源;
区别二:开发的游戏类型不同。unity3D侧重轻量级的开发,更偏向于移动端、手游的开发。而虚幻4更侧重于PC,端游以及高端手游,要求比较高的游戏开发。
1、U3D学习起来比UE4简单,短期培训就可以上手进行开发,而UE4则需要几个月甚至一年,另外U3D的教材多,资料齐全,网上非常容易找到相关资料与素材;而UE4目前还没有中文教材,网上资料相对少很多。
2、U3D安装方便,运行占内存小,UE4对硬件要求比较高,很容易无法安装或使用。
3、开发成本U3D更低,UE4引擎需要付费。
4、U3D发布容量小,兼容性高,更适合发布手游类游戏。
5、U3D的引擎功能没有UE4强大。
6、U3D项目管理麻烦,团队工作时需要精密的沟通和布置。
7、U3D需要的开发程序员的要求没有UE4高,UE4的开发程序员需要精通C++语言。
8、U3D的更新没有UE4快,所以在效果渲染上面还是UE4更为突出。
9、U3D的开发是基于模拟器的,非常吃机器内存。
10、目前国内还是用U3D开发游戏的比较多,因为成本低,对开发人员要求的也低。
3. 虚幻4和unity的区别
3D虚幻比Unlty好100倍,2DUnlty比虚幻好100倍,就是这样,两个最有名最出色的引擎。虚幻4、unity3d也是软件,主要是用来做游戏的,里面包含了很多做游戏的引擎。maya和max主要是做3d模型、效果、动画等的。
它们的用途是完全不一样的,而在实际的游戏制作中,一般是先用maya或max制作出游戏中需要的模型,然后导入到虚幻4、unity3d中,然后通过编程、制作。从而得到一个完整的游戏。
内容简介
本书除了可以作为高校相关专业的教材之外,还可以作为Unity3D的参考书。它涵盖了Unity3D的常见使用功能,除了介绍Unity3D的功能之外,每个章节中都有相应的例子和练习题,方便读者对这些功能的理解。本书适合不同水平层次的读者,无论是初学者或者是已经有一定经验的开发人员。
4. 虚幻4怎么延迟改变材质
首先在看这个系列之前,你需要具备以下:
(1)至少要敲过简单的渲染器,不管是拿dx敲还是拿gl敲或者vk之类的。
(2)对虚幻引擎有一定了解,对虚幻的渲染有一定了解。可以看我前几篇文章,或许可以有所帮助。
(3)C++基础。其实本人c++水平也是一般般(常常受到公司程序大牛的鄙视,不过我是美术)。
(4)至少一块RTX显卡可以用来做实时光线追踪(2019年)
随着引擎版本的更新,后续会逐步加入新版本。那么下面就正式开始吧!
【概览虚幻4渲染管线】
首先,虚幻有很多个管线的。Mobile管线和Deferred管线。首先找到
在这个函数里你将会看到很多熟悉的函数名称
虚幻就是通过调用这些函数来一步步绘制的。是不是很眼熟?这个就是各大论坛啦,博客啦讲的虚幻渲染流程的真面目。
下面就是官方的DrawOrder了。那么这个顺序是怎么来的呢。就是上面那个函数的调用顺序。
再打开这个Render函数,你就将看到延迟渲染一帧所调用的各个函数。(反正我看了半天就看到个大概的渲染顺序之外,还是啥也不知道)
那么当我们把一个模型托到场景里,这个模型被渲染出来的整个流程到底是什么样的呢?这个流程其实是非常庞大的。下面我就来一个一个拆分。
(1)第一步:资源准备阶段。这个阶段包括顶点缓冲区的准备,索引缓冲区的准备。这一步由场景代理管理完成。当然从磁盘里读取模型资源这些就涉及到StaticMesh这些了。想了解这一步可以去看我以前的博客,或者直接去看UPrimitiveComponent,UMeshComponent,UStaticMeshComponent,UCableComponent,UCustomMeshComponent。当你把这些源码全部研究一遍后,这个阶段算是了解了。这个阶段我不打算再描述了,因为已经有了很多现成的代码了。
(2)第二步就是shader资源的准备了,这个又是一个非常大的话题了。可以去看我以前关于给改材质编辑器和加shadingmode的文章便可以有个大概的了解。这一步我还会进一步阐述。
(3)第三步就是绘制了。
我们先不看Render函数那些复杂的调用,我们把精力先集中到shader层面来。一张画面是怎么开始绘制的呢?
通过这个我们便能知道一个大概的绘制流程(千万别以为虚幻只有这几步,不过主要的大概的流程是这样)。先绘制那些深度啊,初始化视口啦我们先不管。我们来看下这个BasePass。这个BasePass干的事情就是把GBuffer画出来。
这里就是像素着色器的入口。绘制完这一步后,我们就有了GBuffer然后再绘制剩下的。环境遮罩骤就先不说了。来看看最重要的光照部分。
光照部分的入口在这里:
虚幻的TiledDeferredLighting的渲染方式。不知道这个的去看毛星云的RTR3的博客的光照那节,讲得特别好。这里给个传送门:
https://blog.csdn.net/poem_qianmo/article/details/77142101
这里会调用
GetDynamicLighting这个函数会调用
这里会接着调用
看到这里就很熟悉了,看过前面我修改shadingmode的博客应该会对这里很熟悉。
lighting绘制完了之后就会绘制一些反射啊之类的东西了,然后就是透明物体啊后期啊。这些后面会慢慢分析他们。我们先把两个最重量级的研究了。
接下来我们研究一下fog渲染阶段。找到FogRendering.cpp你就会发现,其实绘制fog的是一个globalshader。前面绘制各个物体的是materialshader。
你会发现绘制fog的是一个globalshader。虚幻一共有这么几种shader:Globalshader materialshader和meshshader。
这篇博客只是一个概述性和引导性的。只是说明一下虚幻绘制的一个大概情况。下一卷我将演示一下怎么自己写个shader,引擎识别它,编译它,然后如何cpu和gpu进行信息交流的
4.20的Unreal渲染模块有了较大改动。
主要是为了配合引擎新增特性和性能优化。不过大体上的流程还是和上个版本的保持一致。
为了给LTC让道,所以shader做了大面积重构。
ShadingModel改为了IntergrateBxDF
下面会对绘制流水线详细写一遍,由于量巨大所以我会慢慢更新。
(1)【InitView】
引擎代码注释写得非常简单:Initialize scene's views.Check visibility, build visible mesh commands, etc.
这是渲染管线的开始,这步是为渲染管线准备绘制当前帧所需要各种资源。后面的管线就是判断一下画不画,绑定一下状态和RT然后就画画画就好了。这一阶段做的事情非常多也非常杂。首先来看看一些主要的
ComputeVisibility
可见性剔除有很多种技术,引擎会使用多种方法进行组合剔除,把没必要渲染的东西剔除干净,最大限度在渲染之前就做到最省。
虚幻提供了几种剔除方法
他们各有优劣,可以根据不同平台和情况进行选择。
VisibilityMap
在后面会把视口中可见性属性是非可见的物体剔除掉。
PrecomputedVisibilit
在场景中可以使用预烘焙的可见性数据。
如果当前视口场景中有可见性烘焙数据就会启用可见性烘焙的剔除方式
ViewFrustomCulled
做完前面的步骤后,还会进行视锥体剔除,并且大部分情况下,视口会使用视锥体剔除
进行视锥体剔除后可以减少大部分没必要绘制的图元
这时再配合各种其它的剔除方法就可以进一步剔除
而这里的“其它的剔除方法”包括但不限于PrecomputedVisibility,Distance,DynamicOcclusion
DistanceOcclusion
不在距离范围内就不绘制,非常简单有效的绘制方式。这种剔除方式挺适合地面上摆的小物件,摆的一些decal或者小道具,对大型建筑不适合。
Hardware Occlusion Queries
硬件的可见性剔除。这种方法将每帧的可见性检查作为每个Actor的查询发出。 Actor的可见度在一帧之后被回读 - 如果相机移动得非常快,有时会产生不利影响,导致它们“弹出”。 硬件遮挡的成本随着在GPU上执行的查询的数量而变化。 使用距离和预计算可见性方法可以减少GPU每帧执行的查询次数。
在各种剔除后,在InitView的最后会根据这些数据建立MeshPass
(2)【EarlyZ-PrePass】
EarlyZ由硬件实现,我们的渲染管线只需要按照硬件要求渲染就可以使用earlyz优化了,具体步骤如下:
(1)首先UE4会把场景中所有的Opaque和Mask的材质做一遍Pre-Pass,只写深度不写颜色,这样可以做到快速写入,先渲染Opaque再渲染Mask的物体,渲染Mask的时候开启Clip。
(2)做完Pre-pass之后,这个时候把深度测试改为Equal,关闭写深度渲染Opaque物体。然后再渲染Mask物体,同样是关闭深度写,深度测试改为Equal,但是这个时候是不开启clip的,因为pre-pass已经把深度写入,这个时候只需要把Equal的像素写入就可以了。
关于EarlyZ的具体详解可以去看参考文章【1】
首先渲染prepass的第一步肯定是渲染资源的准备啦。primitive资源会在InitView的时候准备好。
然后会再BeginRenderingPrePass函数中设置各种绘制管线的绑定,包括关闭颜色写入,绑定Render target
然后再调用draw之前会把各种UniformBuffer和渲染状态设置好
然后调用draw
最后完成PrePass的绘制
(3)【ShadowDepthPass】
根据不同的灯光类型会绘制不同种类的shadowmap。总的来说绘制shadowmap的时候不会使用遮挡剔除。
Unreal渲染shadowmap目前我就找到个视锥剔除
shadowdepthpass可能是在basepass之前,也可以是之后,具体看EarlyZ的方式
我们的灯光种类繁多大致可以分为两类,一类使用2Dshadowmap的,一类使用Cubemapshadowmap的
上图的1部分就是渲染2DshadowMap,2部分渲染的就是Cubemapshadowmap,这一步只是渲染出shadowmap供后面的Lightingpass使用。
(4)【BasePass】
BasePass使用了MRT技术一次性渲染出GBuffer。
再上一次GBuffer的数据分布
BasePass把GBuffer渲染出来之后就可以供后面的LightingPass使用了。我们的材质编辑器再Surface模式下也是在生成MaterialShader为BasePass服务
这部分可以去看看我的材质编辑器篇有详细介绍。
也是通过一系列设置绑定渲染状态资源等,最后调用dispatchdraw
可以注意到,MRT0是SceneColor而不是BaseColor
Scene在BasePass中做了简单的漫反射计算
这一步用到了,这个测试场景我是烘焙过的,我把烘焙数据去掉,SceneColor其实是这样的:
啥也没有黑的
BasePass会在这个阶段把预烘焙的IndirectLiting计算到SceneColor这张RT上供后面的pass使用
(5)【CustomDepthPass】
上面的图渲染了一个球的customdepth(在红圈处可以看到一个球,可能不是很明显哈)。CustomDepth没啥特别的,就是把需要绘制CustomDepth的物体的深度再绘制一遍到CustomDepthBuffer上。
(6)PreLightingPass
虚幻封装了一套方便画PostPass的机制,后面的绘制SSAO,Lighting,SSR,Bloom等各种pass都是用的这逃Context的机制。
PreLighting这步主要是在用前面的GBuffer算decals和SSAO为后面的Lighting做准备。
SSAO使用的是FPostProcessBasePassAOPS这个C++shader类。
对应的USF是PostProcessAmbientOcclusion
并且使用Computeshader来加速计算。
(7)【DirectLightPass】
LightPass也非常复杂,整个pass的代码有几千行,shader代码也有几千行非常恐怖的系统。我们先找到入口函数:
(1)方向光
根据不同的情况,使用不同的渲染策略
渲染不同情况下的灯光大体分类如下。还会根据不同的渲染方式分类。
比如一般的方向光:
在渲染方向光的时候因为不需要考虑分块,所以直接把每盏灯挨个画出来就可以了
下面我只放了一盏方向光
下面我放三盏方向光:
(2)TileDeferredLighting
如果灯光不渲染阴影,并且灯光没用IES并且灯光数目达到80盏以上(4.22)并且启用了TileDeferred管线,那么虚幻4就会使用TileDeferredLight来计算光照,虚幻实现TileDeferrdLight使用的是一个Computeshader
有很多灯光使用的潜规则。
(8)【ScreenSpaceReflectionPass】
(9)【TranslucencyPass】
透明物体会放在最后渲染,但是在后期的前面。需要看是否在DOF(景深)后合并。
对于这个上图的那个场景来说,透明物体渲染的buffer是长下面这样的:
最后在后期中组合
如果没有启用r.ParallelTranslucency透明物体只能挨个渲染。
如果启用了就可以走上面的并行渲染分支。
透明物体的渲染在实时渲染中一直比较迷,会有各种问题。比如排序等等。在默认情况下是走AllowTranslucentDOF的。AllowTranslucentDOF是什么意思呢,代码的注释里有解释。
Translucent物体的渲染有几种模式:
这里的代码我们在BasePassPixelShader.usf里能找到
对于非透明物体来说basepass是渲染GBuffer的,但是对于透明物体来说,BasePass是渲染基础的+Lighting的,会在这里一次性渲染完,如果我们想改透明物体的shading方式,就需要用在这里改了。
5. 怎么使用虚幻4开发游戏
你可以先去【绘学霸】网站找“游戏特效/unity3D”板块的【免费】视频教程-【点击进入】完整入门到精通视频教程列表: www.huixueba.net/web/AppWebClient/AllCourseAndResourcePage?type=1&tagid=305,306&zdhhr-11y17r-139780961621325845
想要系统的学习可以考虑报一个网络直播课,推荐CGWANG的网络课。老师讲得细,上完还可以回看,还有同类型录播课可以免费学(赠送终身VIP)。
自制能力相对较弱的话,建议还是去好点的培训机构,实力和规模在国内排名前几的大机构,推荐行业龙头:王氏教育。
王氏教育全国直营校区面授课程试听【复制后面链接在浏览器也可打开】:
www.cgwang.com/course/gecoursemobilecheck/?zdhhr-11y17r-139780961621325845
在“游戏特效/unity3D”领域的培训机构里,【王氏教育】是国内的老大,且没有加盟分校,都是总部直营的连锁校区。跟很多其它同类型大机构不一样的是:王氏教育每个校区都是实体面授,老师是手把手教,而且有专门的班主任从早盯到晚,爆肝式的学习模式,提升会很快,特别适合基础差的学生。
大家可以先把【绘学霸】APP下载到自己手机,方便碎片时间学习——绘学霸APP下载: www.huixueba.com.cn/Scripts/download.html
6. 求一个虚幻4最新中文版下载地址
这不就是了吗?(复制到迅雷的新建任务框就行了)
http://download.udk.com/UDKInstall-2014-08.exe
为什么有这么多奇怪的回答?
Update Time:UTC/GMT +8 2015-09-01 22:35
骚年们,虚幻4现在已经是“免费”的了(这个免费的意思是你可以免费获取虚幻四的引擎工具及源码,只要你做出来的东西不拿去卖就不收你的钱)。如果你们还想继续使用UDK的话那就使用下面这个网址获取最新的UDK:
https://www.unrealengine.com/previous-versions
今天之前最新的UDK是:http://download.udk.com/UDKInstall-2015-02.exe
如果想使用UE4那就下载:
Windows版启动器链接:
https://download.epicgames.com/Builds/UnrealEngineLauncher/Installers/EpicGamesLauncherInstaller-2.4.3-2669838.msi
Mac版启动器链接:
https://download.epicgames.com/Builds/UnrealEngineLauncher/Installers/EpicGamesLauncher-2.4.3-2669838.dmg
这个安装启动器安装并启动之后会自动帮你装好UE4。
7. 最新的unity5用C#,虚幻要C++,但虚幻4开放源代码,问题是我应该用什么引擎比较好,学C#还
C#和C++,C语言都差不多,C#是这些中最新的,学习之前建议你先学学算法,数据结构比较基础的东西
8. 怎么使用虚幻4开发游戏
使用虚幻4开发游戏的过程:
1、下载虚幻4引擎。
2、准备好游戏资源(美术,模型,音乐等等)。
3、把所有资源导入到虚幻4编辑器中。
4、使用蓝图或C++进行程序开发(前提需要游戏关卡设计等)。
5、虚幻4编辑器中进行游戏打包。
《虚幻4引擎》是由Epic Games公司推出的一款游戏开发引擎,相比其他引擎,虚幻引擎不仅高效、全能,还能直接预览开发效果,赋予了开发商更强的能力。
虚幻引擎4在大约2分半的Demo演示中,将其强大的功能发挥得淋漓尽致。与之相关的游戏有《连线》《绝地求生:刺激战场》等等。
操作工具
虚幻的编辑器(UnrealEd)是一个以“所见即所得”为设计理念的操作工具,它可以很好地弥补一些在3D Studio Max和Maya中无法实现的不足,并很好地运用到游戏开发里去。
在可视化的编辑窗口中游戏开发人员可以直接对游戏中角色,NPC,物品道具,AI的路点及光源进行自由的摆放和属性的控制,并且全部是实时渲染的。并且这种实时渲染还有动态的光影效果。
并且还有完整的数据属性编辑功能,可以让关卡设计人员自由地对游戏中的物件进行设置或是由程序人员通过脚本编写的形式直接进行优化设置。
实时的地图编辑工具可以让游戏的美术开发人员自由地对地形进行升降的高度调节,或是通过带有alpha通道的笔刷直接对地图层进行融合和修饰。并可以在地图编辑中直接生成碰撞数据和位移贴图。
9. 为什么我用虚幻4.2.1源码编译的无法打包
不知道你用的这个源码是哪个公司的?
你现在是编译出现错误还是打包出现的错误?
如果是全志的话
你编译完了,打包直接在文件系统文件夹中用命令:pack
如果是编译错误的话,可能是因为你的命令出错了
你进入文件系统中,试试
source
./build/ensetup.sh
;
lunch
???
???-->你要编译的产品
extract-bsp
make
-j4
第一次编译还是开的线程少点比较好,因为在编译target那一块比较耗费内存!
祝你好运!
10. 同时看过 unreal4 和 Unity 源代码的人觉得哪个引擎架构更好
两个引擎思路设计是不一样的:
Unreal注重的是工业化流程, 强调整体性, 官方性. 所以你会发现Unreal很少会有那么多的插件和扩展(普及程度是最大原因, 但还是和设计有关系).
Unity3D的思路就是全脚本化, 让大家来给它做各种Mod, 可以说是用互联网思想来做引擎. 有了流量和用户, 普及就不是啥问题, 更可以说自己的哲学是正确的
题主所说的, 用带反射的语言来做. Unity3D就是这么完成的编辑器. 可以说, 编辑器本身完完全全都是用引擎本体写出来的. 但引擎本体本没有编辑器支持.
而虚幻呢, 由于老的一些架构和思想下, 还是使用引擎本体糅合编辑器的功能, 通过宏控制来制作. 但多年的编写经验证明这么做其实也还好. 这是用C++做脚本这点. 我也感觉不大好, 至少来说, 开发效率和普及就受到很严重的牵制.
另外我觉得, Unreal这种整合方式的思想和Unity3D这种MOD开发的思想肯定会长期存在的, 各有各的好处. 有的人喜欢完善, 有的人喜欢自定义. 就像Windows和Linux一样