自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(34)
  • 资源 (5)
  • 收藏
  • 关注

原创 SV_Position的每个component都是什么

SV_Position能在VS和PS中出现。VS中是要写入。写入的是clip space positionPS中是读出,xy是screen pixel position,范围是[(0,0),(ScreenWidth,ScreenHeight)], z是已经经过divide w后的depth,在[0,1]区间里。w就是clipspace w,所以SV_Position.z * SV_Posi...

2019-04-17 08:02:56 884

原创 第N次重新推到Camera变换矩阵后的总结

这个轮回我已经做过3次了:写DirectX的API driver,然后纠结几个小时把ViewPerspective给推导一遍。可能还有第4或这第5次,既然如此这次就留点东西,让下次再轮回时少浪费点时间。前面的废话这里就不记WorldView了。orthogonal 变换目的(简单描述版):把view空间的一个AABB变换到graphics API所处理的NDC(normalized de...

2019-04-07 18:11:48 500

原创 我的面试题目

# C++- 在游戏引擎架构中,组织代码时把功能分成若干独立模块,但是启动时需要能enumerate出程序中有那些模块、根据需求进行初始化。在C++中如何在程序初始化时把各个模块的信息注册到某个列表中去?理想的效果时在每个模块自己的cpp文件中写一些代码使得程序初始化时这些信息可以被注册。如何优雅地实现这个功能?...

2019-03-10 09:29:59 349

原创 内存分配器设计的思路:如何trace allocation

1. 可以提供直接falltrough到系统malloc/free的宏,在有问题时用系统的接口直接malloc/free,然后配合vs和xcode。不过对于没有比较好支持的系统,比如android就很捉急2. 可以在allocation sight调用allocator的alloc/free接口处加整数flag。进一步可以提供per-thread的push pop flag的接口,用自己实现的...

2019-01-11 10:28:17 442

原创 评价一个技术方案的几个视角

最近一直在做优化工作。发现一些模块的可观察性很低、就像一个固若金汤的碉堡一样,你从外面能知道他的消耗、但很难把它的消耗拆解开,这样也就不知道重点在哪里,没法知道问题在哪里、更谈不上找到解决方案。 评价技术方案的几个维度:# 性能## 算力消耗### cpu消耗### gpu消耗## 内存消耗# 易用性## 程序易用性### 对gameplay program...

2018-11-12 11:07:52 2772

原创 下一个项目要从开始抓的几件事情

进入新项目3个月。发现很多地方失控(内存、场景性能)。在这里总结下一些半路的经验。1. 内存监控:必须从一刚开始做,必须从一刚开始追踪到内存的增长。比较好的方式是以登录界面、新手场景、主要场景的出生点为testcase进行内存划分。等到半路再做这件事就很难了,内存帐挺难算清楚,因为还有driver、libc这些很难算明白的东西。2. build流程,必须模块化、必须专人负责、必须保证负责的...

2018-11-03 17:32:24 988

原创 Deferred Coarse Pixel Shading

# introduction- 之前有个coarse pixel shading,大概就是在变化不大的区域可以一块是一次计算。主要是省电- 似乎这个在forward已经有较好的解决方案了    - 在3个level来shading        - coarse pixel 2x2 block        - pixel        - sample- 有人提出过deferred...

2018-08-04 10:22:33 726

原创 sphere mapping

# what is it- 一种映射球面坐标到tex2d坐标的方法- 也可以用来encode normal(3channel->2channel)# 算法- u is a uniti vector(0,0,1) pointing from "point on sphere surface" to some where- n is normal vector(pass sphere...

2018-08-04 09:00:30 646

原创 Large-Scale Terrain Rendering forv Outdoor Games

# 7.1 introduction## 7.1.1 geometry choice- 使用mesh based terrain,而不是高度图- 为了artist flexibility## 7.1.2 texture choice- 用texture atlias,在若干sample间差值得到结果- 还reliable on precomputed data- 好处自然是省空间(...

2018-08-03 10:38:23 592

原创 GPUPro360 reducing texture memory usage by 2-channel Color Encoding

# brief- rgb改成色彩平面上的uv,另外平面也是有边界的,用2个basecolor来划出# introduction- motivation:画面(holly wood movie, game)色调有限,所以有文章提出可以用2个channel来encode framebuffer- 1 channel for full luminance, other for hue/satu...

2018-08-02 10:18:32 467

原创 GPUPro360 Grass Rendering and simulation with LOD

# introduction- 这伙人以前做了TressFX- 本来是想做个extension,用来搞草,渲染invididual grass blade,用rigid bodies和wind来搞interaction# 26.2 Render Grass Blades- 前人“Rendering  Grass  in  Real  Time  with  Dynamic  Light ...

2018-08-02 07:05:57 572

原创 如何让模板函数 对不同类型的参数做不同的处理

比如有个Convert函数,我希望对于能直接用static_cast的就不用dynamic_casttemplate<typename F, typename T>T* ConvertA(F* from){//如果是std::is_convertable_v<F, T>是true就用static_cast,否则dynamic_cast}方案1. S...

2018-07-28 11:53:58 5224

原创 使用Imp模式避免c++中的改类成员数据导致大规模重新编译

c++的header file+source file的分割有一个不干脆的地方:header file既是一个declaration,也是类数据结构的定义。如果是简单的c with class那没问题,因为struct的结构也是一种declaration。而到了c++,我们还需要封装,所以如果把内部struct暴露给别人就有问题了,抛开设计上的问题还有便以上的不方便:每次改了类的内部成员(增,删,...

2018-07-25 08:39:56 1351 1

原创 GDC2013 Relighting Forge in Halo 4 Just-In-Time LightingofUserGeneratedContent

# brief- 要解决的问题是给User Generated Content实现说得过去的光照效果- 首先probe完全用离线烘焙的,问题完全没解决- 会在加载前烘焙forge object的lightmap(应该是直接光+AO*环境光)、还有给背景场景(空场景)加上shadow# Forge- editor, debuted in halo3.可以用各种建筑碎片、甚至vehicle啥的来拼个地...

2018-07-06 09:53:11 478

原创 GDC2013Casting a NewLight on a Familiar Face Light Based Rendering in TombRaider

# Where we started- Tomb Raider: Underworld的引擎(2008)- forward lighting- heavy use of lightmap# lightmap problem with TombRaider2013- modular workflow in Horizon    - rapid iteration    - emphasis on r...

2018-07-03 15:20:49 596

原创 GDC2013 WhyRenderHidden Objects Cull Them With a Software DepthBufferRasterizer

# brief- 早就知道的,没啥新东西,算复习了# algorithm overview- scene object分成occluder和occludee- 遍历occluder    - to screen space    - bin triangles into tiles    - rasterize triangles to depth buffer- 遍历 occludees    ...

2018-07-02 17:50:37 383

原创 GDC2013 Horizon and Beyond A Look into Tomb Raider's Tools

# brief- 介绍tomb raider的level editor.对!只是level editor- animation、shadergraph、剧情编辑啥的都没说,很有可能就是没有- 感觉做的最好的还是prefab和concurrrent editing(把level分成slice,降低了冲突)- 4-7人做了4年,吓死人了,editor确实最难做- 内置的js scripting sys...

2018-07-02 10:15:55 427

原创 Tiled Rendering Showdown ForwardPlusPlus vs Deferred Rendering

# brief- 比起GPUPro上讲Forward+的文章,多介绍了alpha blend和shadow casting light的处理- 如果要用MSAA的话只能forward,但是deferred也是可以用SMAA TXAA的。。。。- 光源1k一下还是deferred有优势- 处理transparent这些,用hybrid,大部分用deferred,搞不定的用forward# 复习For...

2018-07-02 08:09:03 736

原创 GDC2013 Static Lighting Tricks in Halo 4

# brief- gpu lightmapper,间接光是一个texel一个hemi-cube烘焙。gpu烘焙坑更多,比如非workstation的gpu会melt。。。- texture packer很重要- 用了light intensity 用了sparse refinemnet(色彩没用这个refine),有个overlay texture用来indirect pixel到refineme...

2018-07-01 11:36:06 414

原创 gdc2013 Advanced Visual Effects with DirectX 11 D3D11 Deferred Contexts

# brief- 扯了30+ min,其实这东西就2个实质性好处(DC VS IC):buffer update可以并行化,Runtime(non driver)API的执行可以parallelize- 感觉是DX12的一些东西的雏形?# bottlenecks- 主要面向解决cpu bottleneck    - driver比较闲    - bottleneck in game applica...

2018-07-01 09:18:57 521

原创 GDC2016 Global Illumination in Tom Clancy's The Division

# brief- 最终是使用irradiance volume做realtime rendering- 用烘焙好的PRT参数来计算irradiance volume:这个过程叫做relighting- PRT参数是用ambient cube存的,觉得比SH2好- relighting的过程是算每个probe收到的radiance = 被遮蔽的天光+(周围surfel的exit radiance通过...

2018-06-30 12:05:43 872

原创 GDC2016 Lighting the City of Glass - Rendering Mirror's Edge Catalyst

# brief- 将的人很偏美术,讲了老多艺术向的东西- time of day的光照实现没讲明白,主要使用enlighten- 有讲一些细节:HDR sky,reflection# 上个项目(mirrow's edge本篇)- direct lighting/indirect lighting/normal, 每个物体有3张关于lighting的texture- UE3 + Beast, 1pi...

2018-06-29 16:00:53 336

原创 the pbr guide总结

# brief- pbr的核心是对材质的建模、对金属非金属的明显区分、参数取值的限制- pbr的特点:BRDF(能量守恒导致不会反直觉、Fresnel和roughness/glossiness更真实地描述材质)、线性算光照也是导致不会反直觉- metallic/roughness    - basemap/metal的值在metal和非metal情况下有完全不同的意义,dielectric的F0被...

2018-06-28 20:50:55 668

原创 GPUPro360 ForwardPlus A Step Toward Film Style Shading in Real Time

# brief- 和tile based deferred shading的区别:要求更强的hardware支持,用compute shader来算light list- indirect light:还挺有意思的。专门用来生成virtual point light,用这个标记成只生成indirect lighting的light生成RSM,然后在RSM上用很多light来搞出indirect b...

2018-06-28 10:52:01 271

原创 GPUPro360 Tiled Forward Shading

# brief- 所谓tile based deferred shading(渲染算法,非mobile gpu的tbdr架构),就是把deferred shading的shading阶段的二层循环的顺序换一下,不再是一个个光源地draw,而是一个个tile地draw(每个tile有light list)- 所谓forward+或者tile based forward shading,就是先把影响每...

2018-06-27 22:05:55 467

原创 deferred shading VS deferred lighting

- deferred shading    - attribute stage:画所有geometry。把depth, normal, specular color, diffuse color, emissive color都写到G-buffer上    - deferred stage:画光源。把算出来的irradiance累加的output rendertarget上- deferred l...

2018-06-26 17:08:46 571

原创 GPUPro360 Volume Decals

# brief- 一般的decal是要把一个quad给贴到已经渲染号的场景上,zai一些情况下会导致stretch- volume texture提供了旋转不变性。原理就是把像素还原到世界空间,然后在volume texture里sample- 一些情况下也不一定真的用volume texture,可以用2d texture达到同样的效果# 原理- 一般特效是个quad,但是在倾斜、有corner...

2018-06-26 15:17:47 376

原创 GPUPro360 Pre-Integrated Skin Shading

# brief- 这个应该是对应了siggraph2011的一个PPT- 卖点是消耗低、效果和texture space diffusion差不多- 方法    - 对dot(N,L)的变化(表面曲率的变化)造成的surface级别的scattering效果,用一个pre-integrated lookup texture(用curvature和NOL来查询)来修正NOL,效果上就是背光部分由于s...

2018-06-26 08:25:48 1413

原创 GPUPro360 Virtual Texture 101总结

#brief- 东西多了,一般来说要加载的texture自然多,然后一屏下来真正用到的texture量其实有限(不谈半透明的话就是看到的那一层opaque),所以理想情况是只有看到的那部分texture碎片加载- 由于硬件不直接支持这个,所以texture sample变复杂,先算出实际要sample的texture page在那里,然后去那个texture page上sample- 另外需要知道...

2018-06-24 18:10:54 1577

原创 GPUPro360 Alpha Blending as a Post-Process

#brief- 要处理的问题是foliage的渲染。alpha blend排序无解,alpha test效果不行(硬边缘、camera移动的时候洞在闪),alpha to coverage的gradiant不好、硬件支持参差不齐- 分3个pass来做- opaque pass:正常地画普通的opaque物体, pure还用MSAA- mask pass:用add和max operator分别累加a...

2018-06-23 11:52:41 337

原创 VXGI原理简述

1. 光栅化三角面片场景(只有和三角面片相交的体素会有值(color,normal)),生成场景中opaque物体的体素形式(使用clipmap,这样也没有tree那么麻烦了)2. 类似forward shading 一样渲染一下场景,得到物体表面收到的光照,从而得到体素反射出的intensity3. 在每个需要算间接光照的像素做cone tracing(也可以每隔多少个算一下,然后blur),d...

2018-06-22 11:30:15 1827

原创 clipmap

## history- SGI最早提出,用来在terrain上用超高精度贴图,不过要特殊hardware支持。## 原理- texture分2部分,能完整存下来的部分(一般是非常糙的几级mip)+ 不能完整存下来,只能存部分的- 所以DX的实现就是用1个有mip的texture+一个只有1级mip的texture array- 需要自己手动算mip,去采array中的某个## 实现细节- 存不下的...

2018-06-21 22:09:50 932

原创 GDC2018 Job System and Entity Component System的笔记

# brief- 粗看感觉没啥,就是个普通的多线程job system- 但是没想到的是还讲了一堆unity提供的collection、temp storage- 还提到了ECS,原来ECS就是为了data oriented# feature- job之间有dependency,submitt的顺序不一定是执行顺序,有依赖项。可是这个到底有啥用呢?- c#部分有对应的接口- 提供了一堆collec...

2018-06-19 20:16:13 1428

原创 gpu pro360 1. Quadtree Displacement Mapping with Height Blending总结

- 概要- 讲了quad displacement mapping,其鼻祖是parallax mapping.parallax mapping的原理:就是在渲染物体的时候多加一张表是物体表面坑洼成都的depth map,然后在tangent空间做一个简单的raymarch:所渲染的点实际上是个坑,根据depth map可以知道这个坑的半径大小,于是可以沿着tangent space的view向量做...

2018-06-18 10:22:41 341

基于HOLTEK单片机的电压力锅控制程序

基于HOLTEK单片机的电压力锅控制程序

2012-10-27

超简单的MFC做的聊天程序

我自己也是初学者 知道这种例子程序对于学习winsock的价值,通过看别人的代码可以很快搞明白winsock编程的基础内容

2011-08-12

c8051f单片机的资料

c8051f的例程 不可多得的资源! 能学会如何控制外围的各种资源

2011-08-07

ucosV2.90的移植

最新版的UCOS在c8051f上的移植 与已有的移植相比,堆栈的结构有了改进。 给想要练手的同志多提供些资料

2011-08-03

一个python tkinter 贪吃蛇(有AI)

练手写的贪吃蛇,有个ai. 可能还有些bug. 用到了tkinter的一些基本机制

2011-04-09

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除