- 博客(371)
- 资源 (14)
- 收藏
- 关注
原创 UE4画面亮度可视化
参考https://www.artstation.com/artwork/3omYwB做一个这样的视图, 用于Debug光照亮度:需要获取当前像素的亮度(nit), 映射成一个颜色显示出来获取当前像素亮度正好在EyeAdaption Debug视图有一个nit显示:翻代码发现NIT/LUX值是在Shader中实现的(骚操作):向上查找Luminance来源自HDRSceneColorSampler:而HDRSceneColorTexture就是Toonmap前的SceneColor:
2021-01-14 13:28:29 2098 1
原创 UE4黑苹果BigSur开发环境搭建
硬件配置配件型号CPUAMD 锐龙9 3950X 16核32线程主板华擎 B550M Steel Legend显卡AMD Radeon RX 5700 XT (8G GDDR6)内存美商海盗船 DDR4 3600 64GB(32G×2)SSD美商海盗船 Force MP600 2TB SSD PCI-E 4.0机箱恩杰 H510 白色 ATX机箱电源长城 额定650W G6金牌电源散热器利民 Frozen EYE 280 A.
2020-11-27 21:52:48 2022
原创 UE4 iOS Metal FrameBufferFetchMRT
最近在手机上尝试了一下把SceneColor改成R11G11B10, 使用FrameBufferFetch来读取深度.Android上可以使用framebuffer_fetch_depth_stencil, 但是iOS上不支持DepthFetch.所以就尝试使用MRT输出一个R16F的Depth, 需要依赖FramebufferFetchMRT的实现.4.26中UE4已经增加了延迟渲染, FramebufferFetchMRT已经实现了vk和metal的, 所以很方便地就合并了过来, 用法是这样的:
2020-11-27 18:19:33 1873
原创 UE4 Cook On The Fly通过数据线连接Android手机
UE4如果需要在真机上测试, 通常编译+打包+安装需要很长的时间.所以UE4提供了Cook On The Fly的功能, 就是默认只编译, 资源的Cook在运行时由FileHostServer进行Cook, 这样就不用每次测试经历痛苦的打包过程.对于Android平台来说, 只需要安装apk, 资源文件(默认在obb里)仍然保存在PC机上, 通过网络进行访问.PC机做为FileHostServer, 对于请求的文件进行Cook , 如果没有请求的则不会进行Cook.但是对于公司的网络策略来说, 手机
2020-06-26 18:54:18 2853
原创 UE4多个分支版本兼容相同的工程dll
如果是从源代码编译出来的UE4, 明明代码完全一样, 不同机器编译出来的dll却无法兼容, 这对于多分支开发非常不方便.在老版本里有个通过版本号判断的逻辑, 新版本改没了. 分析UE4源码后发现目前是通过BulidId来判断dll跟引擎是不是兼容的. 那BuildId是哪里来的呢?其实像发布的UE4版本是通过"-Formal"参数来生成固定的BuildId的, 不过我们也可以直接修改Engine/Build/Build.version来生成固定的BuildId:改完后如果代码一样, 不同机器
2020-06-26 18:49:08 1404 1
原创 踩了个TextureArray的坑
就是做了两层混合的材质, 采样了两TextureArray, 但是因为TextureIndex是动态计算的, 就会出现同一张纹理在不同的Texture2DArraySample里采样的情况, 然后就会出现一条一个像素宽的小缝.实验了一下, 只采样mip0或者两层纹理的UV一样的话, 就不会出现这个问题. 所以推测是采样时相邻像素是另一层纹理的UV, 导致miplevel计算错误, 然后这条线的上像素的mip是错的, 导致跟相邻像素无法连续.目前除了把纹理的UV(Tiling)改成一样的, 还没有想到.
2020-06-26 18:42:02 1563 2
原创 远程桌面启动Houdini
最近疫情比较严重大家都是在家办公的, 需要远程登录公司里的开发机. 但是远程桌面无法直接启动Houdini, 会报OpenGL的错这个方法也适用于一些依赖OpenGL硬件加速的程序, 如Substance等原理就是中断当前远程登录的session, 然后再启动程序, 这时候就可以使用OpenGL加速了代价就是重新登录一次, 脚本是这样的:@echo offecho.echo Remo...
2020-02-12 14:30:25 1570 2
原创 角色表情Blendshape重定向方法
注: 文章是美术同事写的, 我只是放这里记录一下问题重点:需要将已有角色脸型模型的所有表情Blendshapes精确的重定向到另一个五官位置不一样,模型布线也不一样的角色上。首先因为两套角色五官不一样,所以单一通过Wrap变形器无法实现精确的重定向。其次,由于两个面部模型布线也不一样,也不能通过Blendshape直接实现变形。解决办法:(1):首先将案例脸型用晶格变形来匹配我们目标角色...
2019-01-31 18:16:40 12440 2
原创 UE4 Shader开发的一些东西
http://blog.kiteandlightning.la/ue4-hlsl-shader-development-guide-notes-tips/Ctrl+Shift+.可以编译引擎Shader并重新载入, 但是对Plugins下的无效如果要在RenderDoc里看到Shader代码, 需要打开r.ShaderDevelopmentMode=1, r.Shaders.Optimize...
2019-01-12 16:37:58 4776 1
原创 UE4 LightRendering
最近把HairWorks整合到了UE4 4.20, 整合的过程中发现了一些没法直接merge的代码, 主要集中在LightRendering.cpp和DeferredLightingPixelShader.usf中. 所以顺便简单读了一下代码, 把其中的一些关键字概念整理出来方便查阅理解.Uniform Buffer StructUE4使用了一些宏来辅助定义UniformBuffer中的结...
2018-11-09 19:10:11 1580 1
原创 Android平台上的Native内存分析
文章目录背景UE4的内存统计memreportMemoryProfiler2LLMAndroid进程内存DDMSMemoryAnalyzer背景UE4游戏在Android上的进程内存占用(PSS)很让人困惑, 没有一个清晰直观的方式可以统计到每一部分的内存占用. 所以在做内存分析的过程中顺手做了一个统计工具, 可以从系统底层统计UE4在Android的所有内存分配(包括Graphics部分),...
2018-09-28 09:39:03 10701
原创 Unity中使用GPU Instancing优化SkinnedMesh渲染
有这么个需求: 一堆不会动的SkinnedMesh, 通过物理模拟出死亡姿势后, 需要优化性能, 不然才10FPS首先想到的做法是转成StaticMesh. 试了一下直接超出了Unity的顶点Index数量限制, 所以放弃, 再说转换完后也不方便编辑. 另一个思路就是使用Instanced Skinned Mesh Rendering, 找到两个参考:https://github.com/Unit...
2018-07-10 10:29:04 11955 1
原创 草的交互的几种实现
基本原理都差不多, 通过在VertexShader种更改顶点的位置实现, 各种做法的差别主要是偏移量的计算. 第一种做法: 根据顶点的UV来计算顶点偏移的权重, 因为草叶一般是沿纹理的一个轴方向分布的. 偏移的远近是根据顶点位置和玩家位置(寄存器传入)计算距离后得出. 第二种做法: 根据草的Pivot来计算旋转, 这种做法比直接拉伸顶点的效果要好一些, 不会出现草被拉长的情况. ...
2018-07-03 09:47:16 5240
原创 基于Unity的编辑器开发(二): 进程间通信
共享代码进程间通信通信协议其它共享代码首先要做的, 是需要编辑器和Unity共享一部部分代码, 至少协议定义和解析我不想写两遍. 虽然有protobuf这样的工具库, 但是如果不是跨语言的话, 我觉得没必要引入另一套流程. 所以我就想能不能让一个C# dll库可以同时被Winforms的编辑器和Unity脚本引用呢? 考查了一下还是可以的:Unity的.Net默...
2018-05-09 20:15:14 5621 1
原创 基于Unity的编辑器开发(一): GUI框架技术
需求背景技术挑战GUI框架技术Unity渲染窗口GUIDockingProperty Editor小结需求背景用Unity开发的游戏, 需要做个关卡编辑器. 如果只是内部用用, 其实直接扩展Unity就够了; 但问题是需要发布给外部的用户使用, 那么总不能把全套资源和Unity发给他们, 所以就诞生了这么个奇葩需求. 技术挑战既然用了Unit...
2018-04-26 10:13:54 11201 4
原创 VR中物理的网络同步
参考: Networked Physics in Virtual Reality: Networking a stack of cubes with Unity and PhysX之前做VR游戏时也是尝试了几种物理的同步方案, 最近看到Oculus Blog上也分享了一些, 经验, 做个笔记.多人VR游戏中的物理交互, 有这么几个要求:玩家对物体交互不能有延迟物体能静止后稳定, 不...
2018-03-09 10:47:35 3435
原创 UE4源码Build上传Perforce
UE4每次升级个版本总是要提交大量文件到Perforce, 是件很麻烦的事. 我们的引擎编译好了会连同Binaries一起上传, 这样美术和策划都可以直接使用跟程序一样的版本. 这样的话, Perforce上的引擎就需要有这些注意事项:引擎目录完全包含所有代码和引擎依赖资源引擎编译输出的dll, exe等也都需要提交, 保证策划和美术能够直接拉取引擎版本引擎编译过程中会写入的文件, 需要改成w
2017-11-03 15:02:28 4947
原创 UE4衣服材质换色
游戏中衣服换色是个很普遍的需求, 除直接替换贴图外, 还有使用程序参数来控制颜色的做法. 原理就是使用一张灰白Mask图, 乘一个颜色, 替换原Diffuse贴图上的颜色 效果如下: 这种制作方式有两个缺点: 一是换色区域只能换一个固定颜色, 只有明亮不一样; 二是如果让玩家来自定义颜色, 总会出现一些亮瞎眼的配色, 影响整个游戏的画面美感. 那有没有一种方法可以同时更换多
2017-10-23 09:57:29 10327 4
原创 《Honey Select》捏人剖析
破CSDN的文章编辑器太难用了, 传个图要累死. 以后在知乎写完再转过来: https://zhuanlan.zhihu.com/p/28471808关于游戏中的捏人系统, 很少有资料提到怎么做, 印象中只有《天涯明月刀》分享过. 前段时间关注了个VR资源分享的公众号, 经常推送HS的捏人作品, 所以才引发了我的好奇心, 决定一探究竟.HS之所以能够有这么强的定制能力, 是因为第三方MOD工具的存...
2017-08-12 01:29:48 102079 11
原创 Morph动画的转移
以往做游戏换装什么的, 大多是使用骨骼来调整体型/脸型什么的, 这算是比较成熟的技术了. 最近的项目里尝试了使用MorphTarget(BlendShape)来做个事情, 好处是能够做到逐顶点的调节, 可以做出比较细腻的效果, 但是与此同时来带了制作成本的上升. 不过看目前AAA级的游戏这种做法已经比较普遍了, 所以还有必要把制作流程理一下. 常见的问题: 比如我们人的身体通过Morph做了胖瘦
2017-06-27 20:29:35 12873
原创 GDC2017: 《Lone Echo》中的VR动画
去年在Oculus Connect 3体验过《Lone Echo》的多人竞技玩法, 品质很高, 算是VR游戏中的一线大作了. 正好今年GDC上他们分享了一些关于VR中角色动画的一些经验, 还是比较有借鉴意义的, 毕竟Avatar做了全身的VR游戏少之又少. 这是一个太空失重背景下的游戏, 可以用手抓住环境物体或者推墙进行反向的漂浮. 一开始他们是通过手部射线了检测是不是抓住静态几何体, 通过让身
2017-06-21 21:30:43 5661
原创 UE4中程序驱动的LookAt动画
很多游戏中都有, 就是角色转头+眼镜转动盯着一个目标看, 通常是盯着镜头看用的比较多 UE4里实现这个功能很容易, 直接在AnimGraph里使用LookAt结点就可以了 4个LookAt分别控制脖子, 头, 左眼, 右眼的朝向, 脖子和头的角度比眼睛小, 转动速度也比眼睛慢. 实际项目中用的时候, 有个需求是NPC播放一段动画师做的全身动画后, 再盯住玩家, 然后再播, 再盯, 如此循环.
2017-05-16 00:29:23 7284 4
原创 GDC2017: PlayStation VR Worlds中的渲染优化
介绍了一种很trick的优化方法: Stencil Mask 这里他们称之为Resolution Gradient 主要的思想跟NVIDIA的MultiRes Shading差不多, 但是不用依赖硬件的特性才能实现. 简单一点说就是, 因为VR显示器透镜变形的原因, 边缘的渲染分辨率用不着那么高, 中心区域是全分辨率就好了. 这个优化思路来自于GDC2016上”Fast and Flex
2017-04-10 00:44:55 3948 2
原创 VRDC2017: Eagle Flight Technical Postmortem
Eagle Flight是我认为目前品质达到”优秀”的VR游戏, 所以关于它的一些分享是非常有参考价值的 这个游戏有几点挑战: * 怎么让高速的飞行尽可能的舒适? 因为VR中的移动非常难保证不会晕 * 规模非常庞大的场景, 还有非常多的植被 * PC上要达到90FPS, PS4上要达到60FPS, 性能优化是一个挑战 第一个关键点: 飞行的方向就是你面向的方向, 没有漂移, 这样可以极
2017-03-19 22:06:31 3566 1
原创 VRMMO的技术挑战
又是新的一年, 2016总体不错, 前两年的坚持和积累开始产生效果, 2017不忘初心, 继续前行. 从做PC网游开始, 到2014年做主机游戏, 2015年做单机VR游戏, 2016年做多人VR游戏, 我们一直在走一条非主流的路. 不过现在回头看看, 冒似绕了一条路走在了前面, 做为一名技术人员来说, 还是挺有成就感的. 看看目前绝大数的VR游戏, 其实就是美术做个场景, 程序实现一下交互,
2017-01-22 15:52:20 5590 1
原创 LowPloy风格的模型导入
LowPloy风格是一种小清新风格, 在美术设计上很有独特性. 典型的游戏作品有《纪念碑谷》《劳拉Go》等 2016上半年我们也进行过尝试, 从程序的角度来说, 这种风格是一种利好, 因为可以大大减少资源量, 对于性能的压力就小得多了, 所以在移动平台上会有比较好的性能表现. 这种风格在实际制作过程中, 反而不如传统的风格简单. 首先需要好的概念设计, 但是对于原画来说, 一般
2017-01-05 12:44:15 7167 8
原创 Mesh的平面切割算法
看了一下UKismetProceduralMeshLibrary::SliceProceduralMesh的代码实现, 发现也没想像中的复杂, 只要把网格/三角形/顶点/边的关系理清楚, 逐步分解问题就可以把复杂问题给简化成一个个的小问题, 然后各个击破. 把注释和代码的步骤整理了一下, 变成了人话:把切割面从World转换到Local空间对于每个Section(SubMesh), 计算包围盒
2017-01-05 00:23:19 13385 2
原创 YY一下VR游戏的潜入玩法
很早之前玩过两个小众的潜入游戏, 分别是《Warp》和《Mark of the Ninja》, 就喜欢上了这类游戏, 不过对我口味的不多, MGS5算一个. 最近又玩了另外两个潜入游戏: 《Aragami》和《Dishonored》, 发现这两个游戏有一个共同点: 游戏中的移动频繁依赖传送. 因为自己正在做VR游戏项目, 所以自然而然地就联想到了VR上. 体验过VR的人都知道, 一动就容易晕. 对于
2016-12-08 00:24:55 4281
原创 VR中对带有约束的物理对象的交互
在VR游戏中, 使用双手(控制器)直接对虚拟世界中的对象进行交互, 已经成为一种”标准化”的设计, 一切看起来能够用手去交互的物体, 都需要附合物理规则. 简单的物理对象, 通常只是一个刚体(Rigidbody), 这种只需要模拟重力和惯性运动就可以了, 最多再调节一下摩擦力, 弹性, 空气阻力等, 所以在技术上借助物理引擎的帮助是比较简单的. 稍微复杂一点儿的物理对象, 是带有约束(Co
2016-12-07 23:12:44 3711
原创 UE4中Lambda的一些用法
跟Delegate一起用FTimerDelegate TimerCallback;TimerCallback.BindLambda([]{ // callback;});FTimerHandle Handle;GetWorld()->GetTimerManager().SetTimer(Handle, TimerCallback, 5.0f, false);UI回调事件 SNew(S
2016-10-19 15:01:32 9296
原创 移植了OVRLipSync到UE4
OVRLipSync 是Oculus为Unity开发的一个口型同步插件, 能够实时处理语音数据转换成相应的口型, 按照它的规范, 一共有15个口型: 上面的截图是基于MorphTarget的, 这个插件也提供了基于贴图的表现形式: 通过分析插件可以知道, 核心算法封装在OVRLipSync.dll里, 这个dll经过我测试是可以独立运行的: 之前也有个人尝试把它整合进UE4:
2016-09-23 12:17:46 8513 7
原创 VR下双手与物体的交互
背景Oculus的Touch, HTC Vive的Controller, PSVR的PS Move, 三家一线VR硬件都在给大家传达一个信息: VR下能够模拟双手的体感控制器是一个趋势. 在VR游戏中, 一旦有了双手, 这就意味着不光能看了…..如果说之前的VR游戏只是输出方式(显示器)发生了变化, 那现在有了个双手, 输入方式也发生了变化, 这对游戏来说是一个革命性的改变, 是完全可以改变用户体验
2016-08-09 23:45:02 5677 1
原创 GDC2011: Fast and Efficient Facial Rigging
讲的是Gears of War 3中的Face Rig GOW3中的角色很多, 过场动画也很多, 这就带来了一些挑战:表情动画必须容易编辑在外包制作的基础可以建立良好的工作流动画数据可以共享给不同的模型 容易编辑体现在所有结点都是一条曲线, 这也保证了数据的简洁, 方便外包数据传输 灵感来自MGS4 XSI的文章 Rig分4层:Cage: 一个低面的几何体, 定义了面部的大部分
2016-07-20 23:15:29 3803
原创 Valve: The Lab Renderer for Unity
来源https://www.assetstore.unity3d.com/en/#!/content/63141 https://steamcommunity.com/games/250820/announcements/detail/604985915045842668前几天Valve放出来他们在The Lab中基于Unity做的一些渲染优化相关的东西, 对于VR开发者来说还是非常有参考价值的.
2016-06-13 23:53:07 6708 3
原创 DIY一个VR小钢炮
背景去年做了一个VR Demo后, 总是有各种参观啊, 演示啊, 讲座啊等, 然后很少有合格的电脑跑得动…有时又想现场演示下, 就只能把工作站抬过去了. 来回折腾几次就下定决心要装一台VR专用的演示机, 要求很明确: 小. 品牌主机如果想要GTX980级别显卡配置的, 几乎要么体积巨大, 要么价格巨贵, 排除. 那就自己DIY小机箱的PC吧, 只能选ITX规格了, 要求满足以下条件: *
2016-06-12 13:57:40 10997 6
原创 GDC2015: Networking for Physics Programmers
物理模拟的问题物理模拟需要是确定性的吗?应该是发送物理对象的状态还是碰撞事件或者受力?使用UCP还是TCP发送数据?使用C/S还是P2P?需要一个DS吗?怎么隐藏玩家行为的延迟?怎么防止作弊?带宽同步策略帧同步只同步输入, 不同步状态优点: 带宽需求很低, 跟对象多少无关难点: 需要保证物理模拟是确定性的, 而浮点数很难保证确定性 随机数操作系统编译器硬件缺点: 需
2016-06-08 09:55:43 3102
原创 走进VR游戏开发的世界
注: 原文2016年2月发表于公司内部社区, 最近才由同事转载出来, 删去了文中引用的一些内部文章和视频. 在这里我也只是把外网版本转过来, 留做备份. 背景介绍我们组在2014年下半年尝试开发了一款 XboxOne 平台的体感游戏, 2015年上半年进行收尾工作的同时, 结合之前积累的体感交互经验, 开始进行 VR 游戏的预研工作. 在这近一年的时间里, 一方面从外界感受到了一股虚拟现实快速发展
2016-05-01 00:19:21 21560 4
原创 GDC2016: Animating With Math
Unity和UE4的Material Editor中都有类似VertexOffset的功能, 可以在VertexShader中驱动顶点, 做一些程序控制的顶点动画 用顶点动画的原因: 骨架是共享的, 骨骼动画是共享的等, 同时节省了骨骼数和动画师的工作量 使用cos三角函数+Time是基本的技巧, 配合顶点色控制每个部分的权重 材质参数暴露出来能够使用程序逻辑进行动态控制 顶
2016-04-21 23:15:21 7510
原创 Untiy Native Render Plugin在VR中的绘制(二): 透明排序
上篇已经能在VR中画出来了, 但是还存在两个问题: 1. 透明物体会被Native画的东西挡住 2. VR中Native画的东西透视关系有点问题, 跟Unity绘制的场景不能很好地融合在一起先来解决一个透明排序的问题, 这个问题有两个思路去解决:双Camera双Camera的思路就是, 一个Camera只画不透明物体, OnPostRender中回调Native Renderer, 另一个Cam
2016-04-21 10:34:23 3156
View Frustum Culling Tutorial
2009-11-19
Introduction to 3D Game Programming with Direct3D 10(2)
2009-11-16
Introduction to 3D Game Programming with Direct3D 10(1)
2009-11-16
Programming Vertex, Geometry, and Pixel Shaders
2009-02-02
DirectX in C++/CLI
2008-11-02
Introduction to 3D Game Programming with DirectX9.0c A Shader Approach
2008-09-17
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人