
图形技术
文章平均质量分 69
xoyojank
来如流水兮逝如风,不知何处来兮何所终
展开
-
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 · 2047 阅读 · 0 评论 -
踩了个TextureArray的坑
就是做了两层混合的材质, 采样了两TextureArray, 但是因为TextureIndex是动态计算的, 就会出现同一张纹理在不同的Texture2DArraySample里采样的情况, 然后就会出现一条一个像素宽的小缝.实验了一下, 只采样mip0或者两层纹理的UV一样的话, 就不会出现这个问题. 所以推测是采样时相邻像素是另一层纹理的UV, 导致miplevel计算错误, 然后这条线的上像素的mip是错的, 导致跟相邻像素无法连续.目前除了把纹理的UV(Tiling)改成一样的, 还没有想到.原创 2020-06-26 18:42:02 · 1668 阅读 · 2 评论 -
一些VR渲染优化方法
VR渲染需要左右眼两幅不同的画面,现在的大部分引擎都是暴力的直接渲染两遍,这样做想想性能也很难达到75FPS(或90FPS)以Oculus DK2为例,1920x1080@75FPS,加上Super Sampling就变成了(UE4默认135%)2592x1458@75FPS如果是Oculus的消费者版本和HTC Vive,分辨率和刷新率更是提升到了2160x1200@90FPS, 推荐配置是GT原创 2015-09-25 11:32:07 · 10537 阅读 · 3 评论 -
UE4学习笔记(五): 基于物理光照的材质
UE4相对于UE3, 渲染上最大的改变就是光照原创 2014-10-19 01:18:02 · 15715 阅读 · 0 评论 -
The Managed DirectX Render Loop
Tom has the final(?) say on the matter.... Or is it? Of course its not :-) Rick has added a response including some perf and memory numbers.I figured I should put a quick summary list together that e转载 2008-11-19 10:32:00 · 2140 阅读 · 0 评论 -
延迟渲染的G-Buffer压缩
最近渲染器终于稳定下来了, 效果也做得差不多了, 于是做一下总结当初为了追求进度和效果, 直接就是采用最暴力的A16R16G16B16F x 3的G-Buffer:COLOR0Normal.xNormal.yNormal.zDepthCOLOR1Diffuse.rDiffuse.gDiffuse.b COLOR2Specular.rSpecular.gSpecularbSpecular Glos原创 2012-03-18 00:53:13 · 9850 阅读 · 4 评论 -
近期工作与学习技术总结
色彩表现力这个是一些小引擎容易忽略的地方. 可能引擎各种功能都有, 但是为什么做出来的东西不够出彩呢? 除去美术自身的原因, 程序也要好好与美术进行沟通. 很多时候美术有一些很不错的想法, 确总是做不出来, 这个就是程序的责任了. 以WOW的技术为一个起始点, 我想可以从这些方面原创 2011-10-11 23:40:09 · 3495 阅读 · 5 评论 -
关于RenderTarget的注意事项
1. 设置一个RenderTarget会导致viewport变成跟RenderTarget一样大2. 反锯齿类型必须跟DepthStencilBuffer一样3. RenderTarget的类型必须跟DepthStencilBuffer的类型兼容, 可以用IDirect3D9::CheckDepthStencilMatch进行检测4. DepthStencilBuffer的大小必须>=Rende原创 2009-02-11 13:13:00 · 11244 阅读 · 9 评论 -
Gamma校正问题
最早是去年才开始接触这个东西, 至于具体是什么原理, google一大堆我只是想说的是, 大部分的国产自研引擎没有关注这个对于国内的卡通幻想风格可能影响不是特别大但是对于真实感的光照, 是非常有必要进行校正处理的要不然出来的结果不是正确的之前在折腾一个烘焙中间件时也被这个问题烦了很久因为烘焙做了校正, 而引擎没有, 实时的效果跟烘焙的效果就差别很大最后无奈就关掉了正原创 2011-06-16 22:00:00 · 4075 阅读 · 1 评论 -
MRT与AlphaTest
<br />想把DeferredShading的MRT改成A8R8G8B8的, 于是把Normal和Depth做了一下压缩<br />然后问题就来了, 有很多像素丢失了:<br /><br />当时想了很久没想明白, 后来还是用GPA看了一下pixel history才知道alphatest失败了<br />看了下render state的确是alpha test开启了, 关掉就正常了.<br />查了一下资料原来固定管线的alpha test使用rendertarget0的alpha做test, 而这里的原创 2011-05-14 21:08:00 · 2840 阅读 · 1 评论 -
一个简单实用的SSAO实现
全局照明(global illumination, GI)是一个计算机图形学术语, 它指的是所有表面之间相互作用的光照现象(光线来回跳动, 折射, 或者被遮挡), 例如: 渗色(color bleeding), 焦散(caustics), 和阴影. 很多情况下, GI这个术语代表的只是渗色和逼真的环境光照(ambient lighting). 直接照明– 光线直接来自光源– 对于今天的硬件来说已经非常容易计算, 但这对于GI并不成立, 因为我们需要收集场景中每个面的邻近面信息, 这样的复杂度很快就会失控翻译 2010-07-14 15:27:00 · 30924 阅读 · 13 评论 -
DirectX10 游戏的美好未来
转自: http://www.pcpop.com/doc/0/161/161825_8.shtml ● 第三章 第一节 技术背景 directX 的发展和API相关基本常识,DX10新特点概要。 Microsoft发布的DirectX 10代表了自从可编程Shader出现以来在3D API方面的最巨大的进步。通过一番脱胎换骨般的重建,DirectX 10展现出一转载 2010-04-15 11:38:00 · 4225 阅读 · 1 评论 -
About Lightmap Baking
Light Mapping - Theory and Implementation 基础理论, 入门必备. 知道原理才能写代码嘛但是呢, 感觉这个方法不是很好计算, 很多问题也没有提及Light mapping 一个基于三角形光栅化的例子(跟UE3算法差不多)带裂缝修复. 不过, 这种裂缝修复效果很不好, 会产生错误的像素Light bakin原创 2010-02-25 20:38:00 · 4355 阅读 · 3 评论 -
我与SM不得不说的故事(一)
话说当年学shader的目的, 就是为了想实现一个当时天真地以为很NB的算法TSM, 一年多来朝着这个目标努力, 到最后却发现, 结果并没有想像中的美好-_- 最开始实现的是Projective Shadow, 也就是投影纹理的方法. 先把需要投影的物体从光源视角以单一颜色画到一张RTT上, 然后用投影矩阵生成纹理坐标投影到地表上去跟纹理进行混合. 为什么用它呢? 主要是它对硬件没什么要求原创 2009-12-03 22:41:00 · 169122 阅读 · 20 评论 -
UE4学习笔记(六): 次世代的移动平台渲染技术
在GDC2014上, UE4展示了一个SOUL Mobile Tech Demo: http://www.youtube.com/watch?v=jzGRbGb-fog原创 2014-10-19 23:30:11 · 9906 阅读 · 1 评论 -
卡马克揭开VR延迟背后的真相
原文:http://oculusrift-blog.com/john-carmacks-message-of-latency/682/延迟是OculusVR所面对的最大挑战之一, 它不仅会分散玩家体验游戏时的注意力, 还会导致晕动症, 所以找出它背后的原因并消除它是非常重要的。整个系统保持在50ms已经很快了, 但是还是可以感觉到延迟20ms是可接受的最大延迟传感器数据的推导预测可以缓解部分的系翻译 2015-11-16 00:39:03 · 6400 阅读 · 1 评论 -
角色表情Blendshape重定向方法
注: 文章是美术同事写的, 我只是放这里记录一下问题重点:需要将已有角色脸型模型的所有表情Blendshapes精确的重定向到另一个五官位置不一样,模型布线也不一样的角色上。首先因为两套角色五官不一样,所以单一通过Wrap变形器无法实现精确的重定向。其次,由于两个面部模型布线也不一样,也不能通过Blendshape直接实现变形。解决办法:(1):首先将案例脸型用晶格变形来匹配我们目标角色...原创 2019-01-31 18:16:40 · 12601 阅读 · 2 评论 -
Unity中使用GPU Instancing优化SkinnedMesh渲染
有这么个需求: 一堆不会动的SkinnedMesh, 通过物理模拟出死亡姿势后, 需要优化性能, 不然才10FPS首先想到的做法是转成StaticMesh. 试了一下直接超出了Unity的顶点Index数量限制, 所以放弃, 再说转换完后也不方便编辑. 另一个思路就是使用Instanced Skinned Mesh Rendering, 找到两个参考:https://github.com/Unit...原创 2018-07-10 10:29:04 · 12129 阅读 · 1 评论 -
草的交互的几种实现
基本原理都差不多, 通过在VertexShader种更改顶点的位置实现, 各种做法的差别主要是偏移量的计算. 第一种做法: 根据顶点的UV来计算顶点偏移的权重, 因为草叶一般是沿纹理的一个轴方向分布的. 偏移的远近是根据顶点位置和玩家位置(寄存器传入)计算距离后得出. 第二种做法: 根据草的Pivot来计算旋转, 这种做法比直接拉伸顶点的效果要好一些, 不会出现草被拉长的情况. ...原创 2018-07-03 09:47:16 · 5380 阅读 · 0 评论 -
UE4衣服材质换色
游戏中衣服换色是个很普遍的需求, 除直接替换贴图外, 还有使用程序参数来控制颜色的做法. 原理就是使用一张灰白Mask图, 乘一个颜色, 替换原Diffuse贴图上的颜色 效果如下: 这种制作方式有两个缺点: 一是换色区域只能换一个固定颜色, 只有明亮不一样; 二是如果让玩家来自定义颜色, 总会出现一些亮瞎眼的配色, 影响整个游戏的画面美感. 那有没有一种方法可以同时更换多原创 2017-10-23 09:57:29 · 10419 阅读 · 4 评论 -
《Honey Select》捏人剖析
破优快云的文章编辑器太难用了, 传个图要累死. 以后在知乎写完再转过来: https://zhuanlan.zhihu.com/p/28471808关于游戏中的捏人系统, 很少有资料提到怎么做, 印象中只有《天涯明月刀》分享过. 前段时间关注了个VR资源分享的公众号, 经常推送HS的捏人作品, 所以才引发了我的好奇心, 决定一探究竟.HS之所以能够有这么强的定制能力, 是因为第三方MOD工具的存...原创 2017-08-12 01:29:48 · 102885 阅读 · 11 评论 -
GDC2017: PlayStation VR Worlds中的渲染优化
介绍了一种很trick的优化方法: Stencil Mask 这里他们称之为Resolution Gradient 主要的思想跟NVIDIA的MultiRes Shading差不多, 但是不用依赖硬件的特性才能实现. 简单一点说就是, 因为VR显示器透镜变形的原因, 边缘的渲染分辨率用不着那么高, 中心区域是全分辨率就好了. 这个优化思路来自于GDC2016上”Fast and Flex原创 2017-04-10 00:44:55 · 4000 阅读 · 2 评论 -
VRDC2017: Eagle Flight Technical Postmortem
Eagle Flight是我认为目前品质达到”优秀”的VR游戏, 所以关于它的一些分享是非常有参考价值的 这个游戏有几点挑战: * 怎么让高速的飞行尽可能的舒适? 因为VR中的移动非常难保证不会晕 * 规模非常庞大的场景, 还有非常多的植被 * PC上要达到90FPS, PS4上要达到60FPS, 性能优化是一个挑战 第一个关键点: 飞行的方向就是你面向的方向, 没有漂移, 这样可以极原创 2017-03-19 22:06:31 · 3598 阅读 · 1 评论 -
LowPloy风格的模型导入
LowPloy风格是一种小清新风格, 在美术设计上很有独特性. 典型的游戏作品有《纪念碑谷》《劳拉Go》等 2016上半年我们也进行过尝试, 从程序的角度来说, 这种风格是一种利好, 因为可以大大减少资源量, 对于性能的压力就小得多了, 所以在移动平台上会有比较好的性能表现. 这种风格在实际制作过程中, 反而不如传统的风格简单. 首先需要好的概念设计, 但是对于原画来说, 一般原创 2017-01-05 12:44:15 · 7259 阅读 · 8 评论 -
Mesh的平面切割算法
看了一下UKismetProceduralMeshLibrary::SliceProceduralMesh的代码实现, 发现也没想像中的复杂, 只要把网格/三角形/顶点/边的关系理清楚, 逐步分解问题就可以把复杂问题给简化成一个个的小问题, 然后各个击破. 把注释和代码的步骤整理了一下, 变成了人话:把切割面从World转换到Local空间对于每个Section(SubMesh), 计算包围盒原创 2017-01-05 00:23:19 · 13514 阅读 · 2 评论 -
GDC2011: Fast and Efficient Facial Rigging
讲的是Gears of War 3中的Face Rig GOW3中的角色很多, 过场动画也很多, 这就带来了一些挑战:表情动画必须容易编辑在外包制作的基础可以建立良好的工作流动画数据可以共享给不同的模型 容易编辑体现在所有结点都是一条曲线, 这也保证了数据的简洁, 方便外包数据传输 灵感来自MGS4 XSI的文章 Rig分4层:Cage: 一个低面的几何体, 定义了面部的大部分原创 2016-07-20 23:15:29 · 3856 阅读 · 0 评论 -
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 · 6749 阅读 · 3 评论 -
GDC2016: Animating With Math
Unity和UE4的Material Editor中都有类似VertexOffset的功能, 可以在VertexShader中驱动顶点, 做一些程序控制的顶点动画 用顶点动画的原因: 骨架是共享的, 骨骼动画是共享的等, 同时节省了骨骼数和动画师的工作量 使用cos三角函数+Time是基本的技巧, 配合顶点色控制每个部分的权重 材质参数暴露出来能够使用程序逻辑进行动态控制 顶原创 2016-04-21 23:15:21 · 7544 阅读 · 0 评论 -
KILLZONE 2 显示技术详解
转自 KILLZONE 2 显示技术详解【上】KILLZONE 2 显示技术详解【下】 人们开始摸索着如何抛弃现有的 Forward Rendering 而使用其他技术。作为其中一个方法,就是最近开始流行起来的 延迟着色( Deferred Shading )技术。延迟渲染是什么——重度渲染的优化手段之一 在欧美有着巨大人气的 FPS 游戏转载 2009-09-23 23:24:00 · 4430 阅读 · 0 评论 -
Light Pre-Pass 渲染器----为多光源设计一个渲染器
作者: Wolfgang Engel, 原文: http://www.wolfgang-engel.info/RendererDesign.zip 渲染器设计就像为一座房子打地基, 结果可能比预期大了, 小了, 或者太笨重了. 预先了解要在它之上建造什么, 并且为未来的扩展做出合理的预测, 是建造一座稳定房子的先决条件. 用软件设计的术语来说, 打地基好比渲染器设计, 而房子,翻译 2009-08-18 22:55:00 · 7902 阅读 · 8 评论 -
PerfHUD性能分析的一点技巧
(1) 在程序中将颜色缓存从32位改为16位,查看FPS值是否增加,以确定瓶颈是否因为帧真缓存带宽引起。(2) 在NVPerfHUD中按下Ctrl+T将纹理强行设置为2*2大小,查看FPS值是否增加,以确定瓶颈是否因为纹理带宽引起。(3) 在NVPerfHUD中按下Ctrl+1、Ctrl+2……Ctrl+9,NVPerfHUD会自动强行简化各个Profile的Pixel转载 2007-12-08 19:11:00 · 2199 阅读 · 0 评论 -
Z buffer 和 W buffer 簡介
目录: Part 1 Part 2文档内容:[Part 1]幾乎所有目前的 3D 顯示晶片都有 Z buffer 或 W buffer。不過,還是常常可以看到有人對 Z buffer 和 W buffer 有一些基本的問題,像是 Z buffer 的用途、Z buffer 和 W buffer 的差別、或是一些精確度上的問題等等。這篇文章的目的就是要簡單介紹一下 Z buffer 和 W bu转载 2007-11-02 17:38:00 · 3961 阅读 · 3 评论 -
MD2关键帧动画
本想用骨骼动画的,无奈.x格式的太过于复杂,而且游戏业里也不怎么用。只是把它的原理弄明白一些了,但是,我弱小的意志在DirectX SDK那个1000多行的SkinedMesh例子面前顺利地崩溃了,心想,还是先从最基本的关键帧动画开始做吧-_-!确定文件格式:md2(正好连找都不用找了,老师给了)以下是我Copy的:原创 2007-06-04 01:00:00 · 3781 阅读 · 5 评论 -
Direct3D学习(七):DirectX下天空盒子的实现
概述三维场影里的天空并不是“真正”的天空,而是用图片拼起来的,欺骗我们眼睛。通常把大家所在的场景用一个几何体包裹起来,再在里面贴上从各个角度的风景图,就好像一个真正的环境一样。想想CS之类的天空,是不是有点印象?原理现在的游戏里可能半球用的较多吧?不过原理上一样,我们这里以立方体为例。最简单的方法,莫过于画6个正方形,分别为它们贴上纹理。(要是真这样,我就不用写了-_-)这里我们只用一个正方形,也原创 2007-05-29 03:28:00 · 15877 阅读 · 7 评论 -
Direct3D学习(六):动画基础(1)动画和运动中的时间
基于时间的动作时间单位:ms速度慢的电脑可以通过丢帧来保证动画的速度在Windows中读取时间用timeGetTime()函数,详见MSDN可以在函数的开头用静态变量来存储时间: void FrameUpdate(){ static DWORD LastTime = timeGetTime();原创 2007-05-24 04:28:00 · 3446 阅读 · 1 评论 -
Direct3D学习(六):动画基础(2)X文件的使用
X文件的使用(完整) [转]这两天精神不太好,没写,先转一篇同样内容的来凑数吧[Copy to clipboard]CODE: 有很多朋友也许想更加了解X文件,正好,本文将全面的介绍X文件的使用。我想这是一篇纯技术性的文档,我就不加以诗篇歌颂润色了。相信读我的文章,就像啃牙签;)好了,我们板起面孔。首先给你一个完整的印象----传说中的X文件:xof 0302txt 0032转载 2007-05-29 03:44:00 · 4087 阅读 · 0 评论 -
Direct3D学习(四):高级着色语言初探
传统的3D绘图编程方式(1) 将顶点代入顶点缓冲区(2) 设定变换函数(3) 设定光源(4) 设定纹理和材质(5) 绘制多边形用的比较多的明暗处理算法在图形学上我们就学过:朗伯算法和高洛德算法。而在3D加速卡中可以硬件实现的的也就是上面的经典算法。但是随着硬件的发展,1999的SigGraph大会上游戏程序员一致希望将算法直接写入3D显卡原创 2007-05-18 02:57:00 · 3667 阅读 · 0 评论 -
DXUT进阶
概要这个指南涵盖了更多DXUT的高级应用. 这个指南里的大部分功能是可选的, 为了以最小的代价来增强你的应用程序. DXUT提供了一个简单的基于GUI系统的精灵和一个设备设置对话框. 另外, 它还提供了一些摄像机类.这个指南的结果是一个具有完善功能的GUI 用于更改设备和场景的设置. 它将有按钮, 滑块, 和文本来示范这些功能.导航 DXUT摄像机翻译 2007-05-06 03:13:00 · 2651 阅读 · 0 评论 -
Direct3D中实现图元的鼠标拾取
Direct3D中实现图元的鼠标拾取 BY 重剑,2004.5.28 重剑空间 索引:1、什么是拾取,拾取能做什么?2、拾取操作的步骤和实现 2.1. 变换并获得通过视点和屏幕上点击点的射线矢量(Dir) 2.1.1 确定鼠标选取点的屏幕坐标 2.1.2 得到Dir在观察坐标空间内的表示 2.1.3 转换Dir到世界坐标空间,并得到观察点转载 2007-04-23 23:30:00 · 3245 阅读 · 0 评论 -
Direct3D学习(三):光影贴图
刚看完了DXUT,拿来练练手这个框架却实方便啊,终于不用写那些令人恶心的API函数了光影贴图,说白了就是在纹理上表现出来光影效果,并不是实时计算的,所以适用于固定的场影平面,如地面,墙壁等原理嘛,就是多层纹理的叠加,除了模型本身的纹理外,还需要光纹理效果如图关键代码如下: pd3dDevice->SetTexture( 0, pTexture0 );原创 2007-04-18 23:58:00 · 3042 阅读 · 0 评论