链接:https://www.zhihu.com/question/42128016/answer/94670767
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
尽量挑冷门的说。
官方顶点动画插件:用贴图来记录顶点动画数据,用 VTF 做顶点动画,而不是传统的动态顶点提交。(https://docs.unrealengine.com/latest/INT/Engine/Animation/Tools/VertexAnimationTool/index.html)
Render To Texture Blueprint 工具集之 3D Imposter Sprites:先预渲染多个角度的公告板,然后在运行时根据视角选择最接近的一个(https://docs.unrealengine.com/latest/INT/Engine/Content/Tools/RenderToTextureTools/3/index.html)
Render To Texture Blueprint 工具集之 Render a Normalized Depth Map:预渲染ShadowMap贴图,然后再材质里面把ShadowMap算一遍,来实现自阴影(https://docs.unrealengine.com/latest/INT/Engine/Content/Tools/RenderToTextureTools/4/index.html)
Bullet Train 拿材质编辑器当 Substance Designer 用,烘培贴图来提高性能,还是Render To Texture Blueprint 工具集(https://www.youtube.com/watch?v=PG2fHLdzRIs&feature=youtu.be&t=2000)
Phong 高光的 SG 近似:把Phong方程里面的Pow函数给干掉,代码在BasePassForForwardShadingPixelShader.usf里面的PhongApprox(Spherical Gaussian approximation for Blinn-Phong, Phong and Fresnel)
利用移动平台的 framebuffer_fetch 扩展在 shader 里面做 alphablend,代码在BasePassForForwardShadingPixelShader.usf 的 FrameBufferBlendOp;同时,在 framebuffer_fetch_depth_stencil 不支持时候用 framebuffer 的 w 存深度
虚幻3的半透明头发自动排序工具,虚幻4代码还在,工具没做(DCC 软件里有没有类似的东西?有用过的麻烦分享下),(https://udn.epicgames.com/Three/TranslucentHairSorting.html)
材质里 WorldPositionBehindTranslucency 函数实现的各种类贴花效果,比如虚幻竞技场2014(UT2014)主角足下阴影、UT2014 的 Outpost23 外景地表半透明云的投影、Showdown 里面汽车的阴影等
材质里用 CustomUV 通道存 Color 数据,来实现在材质编辑器里面把像素着色器计算转移到顶点着色
禅意花园里面不使用 RelectionVector+Cubemap 的组合来制作水面,而是先假设水面法线朝上,然后通过法线对反射UV做个简单的偏移,再取 Cubemap,来提高性能,龚神这篇文章第二点就是在介绍这个思路(加速反射的渲染)
在广角镜头下需要避免屏幕边缘的广角畸变,传统做法一般是两个摄像机 FOV 分开渲染,而 UT2014 则利用 Panini 投影来做,代码在 PaniniProjection.usf(http://tksharpless.net/vedutismo/Pannini/panini.pdf),也有全局的 Panini(https://docs.unrealengine.com/latest/INT/Engine/Rendering/PostProcessEffects/PaniniProjection/index.html)
延迟渲染下实现个别对象置顶显示,一种思路是模板缓冲区处理,但是牵一发动全身太麻烦,UT2014 在顶点着色器里把武器的所有顶点朝摄像机移近了一定的百分比
沙发骑士的小人跑到沙发后面也会变成类似全息影像的置顶显示,他的做法是做了两个材质,第二个材质禁用了深度测试,平时用第一个材质,当检测到摄像机和小人中心点中间有遮挡就切换到第二个材质。正常做这个用CustomDepth+Postprocess也行,他这个做法要节省点。
材质编辑器里面的 PixelDepthOffset 只能为正,不能为负,开始以为是引擎代码写的不严谨,后来才知道这叫 conservative depth output(Conservative Depth Output (and Other Lesser-Known D3D11 Features))
按住鼠标右键,滚动中间滚轮可以调节WASD的速度(拍案叫绝?拍桌大笑!)
Slate 实现的这套 DSL 是为了在传统 UI 基础上实现类 Unity 的 IMGUI 的优势(https://docs.unrealengine.com/latest/INT/Programming/Slate/Architecture/index.html)
有时候水底看起来因为折射在波动,其实是水塘的顶点在波动,和水和折射没有关系
禅意花园里面的蝴蝶和鱼都不是骨骼动画,翅膀、尾巴或头的正弦运动,可以是刷上了顶点权重色配合 RotateAboutAxis 在顶点着色器里做正弦动画。
Showdown 里面的窗户玻璃,并不是透明材质,而是不透明材质加上 bumpoffset(parallax mapping)做的伪透明
FastMath.usf 里面一大把黑科技数学函数,当然少不了卡神的 0x5f3759df 啦
BSP 里面 pen 和 brush clip 只有在顶视图等正交视图用空格键操作才有效,最吓人的是 lathe 工具,教程 https://www.youtube.com/watch?v=zJLVq-7vNbg ,官方案例的 BSP 关卡做的真是让人拍案叫绝(不过感觉现在引擎的重心没在这块?各种 bug 不修)
粒子系统配合材质编辑器加上粒子 Event 体系,扩展性太强了,可惜 Niagara 模块很久没有动静,否则再配合上蓝图,已经是我能想象出来的极限
无尽之剑里的 PBR 材质直接把 basecolor 贴图的某个通道做简单的 lerp 之类的处理就传给了roughness,效果显著,性能优秀。UT2014 的武器 material layer 做多了以后,性能不行,单个材质层也用这个技术来做优化贴图采样。
PS 里法线越叠越平?那是因为没有掌握法线混合的 N 种姿势( Blending in Detail,web 预览:Shader Sandbox),材质节点里面的 BlendAngleCorrectedNormals 就是 RNM(Reoriented Normal Mapping),当然啦,入 Substance Designer 神教就没这个问题了
yEd 是个好玩的工具,把引擎内树状数据结构可视化打印出来(yEd - Graph Editor),r.CompositionGraphDebug 这个命令可以把光照合成、后期处理的流程打印出来
不过还是 gephi (Gephi - The Open Graph Viz Platform)好看点,引擎用它来打印 UnrealBuildTool 的上下文依赖关系(GraphVisualization.cs 文件)
与其折腾策划数据编辑软件,不如学好 VBA,直接来扩展 Excel,Driving Gameplay with Data from Excel,文章里面的 Export To CSV 内嵌按钮就是 VBA 写的,UT2014 也在用这个方案(例子的下载链接失效了,用这个:https://docs.unrealengine.com/latest/attachments/Gameplay/DataDriven/Example.xlsm)
Lightmass 用挡光板逆向打光模拟区域光源(Simulating Area Lights in UE4),妈妈再也不用担心我打不好光了,禅意花园的室内氛围就是这么出来的
Fresnel 在不明显的时候,用 lerp 替代 pow 只要慢慢调也能差不多,性能还好点,材质函数 Fresnel_Function 内部就同时集成了两种实现
材质的自发光通道可以直接算光照模型,把光照模型关了,补一个 Lambert,补一个 Phong,甚至更简化的版本,小东西这么用比较省,尤其移动平台
官方的 PostProcess Matinee (https://www.youtube.com/watch?v=Hd3AV_Sx65Y)里面蝴蝶的翅膀,高光效果感人,就用上面说的方法:Phong 的一个变种,可以双向高光。不过他还是保留了 Volumetric 的 NonDirectional 光照计算
======================================= 有空再更