ShadyLYF

Keep Thinking

0%

  在使用c#进行Unity开发时, 构建一个对象只需要New对象构造函数(),我们并不知道如何回收该对象。那么就有一个问题: 该对象在创建时,其内存是如何分配的;以及何时对该对象进行回收,如何回收其对应内存? 由于c#并没有提供直接可操作内存的方法(unsafe除外,一般不会使用),所以上面的问题都交给了一个叫做垃圾回收器的东西,它既为创建对象分配内存,又回收对象内存。在Mono中使用的垃圾回收器为SGen, 这是一款专门为Mono设计的垃圾回收器,下面就来初步认识一下SGen。

阅读全文 »

  DX12和DX11相比有了很多的变化,最核心的便是拉近了开发者和硬件的距离,让开发者能够更接近底层。对于硬件的控制DX12更加直接,更加高效,也增加了更多了可能性(多线程渲染);但与此同时与DX11相比开发者的额外工作量也增加了不少。下面是个人学习笔记的一些整理,希望和大家分享。

基础流程介绍

  基础流程的学习主要参考了微软官方DX12编程指南中,创建基础的DX12组件(Creating a basic Direct3D 12 component))这一章节。

  可以看到DX12是通过commandList将渲染指令提交给GPU的,此时cpu和gpu是异步执行的,而他们之前的同步是通过fence实现的。

阅读全文 »

Horizon-Based Ambient Occlusion 算法说明

  Ambient Occlusion(漫反射遮罩),是用来描述反射光线被周围物体遮挡的一种光照模型。先看下面的公式:是描述物体表面任一一点的遮罩情况:

阅读全文 »

Protocol如何实现高效编码

 当看到proto协议的时候, 会觉得和struct和class的定义差不多.那么它是不是以一定的内存对齐原则,排列在stream里面的呢?但是如果int类型都是占4个字节的话,1和10000在stream中的长度都是一样的,岂不是很浪费, 都说使用protocol buffers可以节省内存,但具体是如何实现的呢?

阅读全文 »

从.Net Framework谈到Mono

.Net Framework

 由于本文的目的是探索mono与unity的关系,所以.net Framework部分的整理会相对简单一些,主要目的是为理解mono做一个铺垫。
  .net Framework简单来说是微软推出的一个跨平台基础(只有windows实现)框架, c#则是运行在该框架下的编程语言。
 为什么说它是一个跨平台的框架呢?原因在于它是基于通用语言基础架构(Common Language Infrastructure, 简称CLI)实现的。
 CLI的提出旨在统一不同的高级开发语言在不同平台直接执行方式的差异。 按照CLI的规定,用来描述可执行代码的是一种叫做CILCommon Intermediate Language)的语言,这是一种介于高级语言和机器语言之间的中间语言。
  不同语言统一成CIL后,通过不同平台CLR(Common Language Runtime)翻译器机器指令,从而实现大一统。

阅读全文 »