叮当你个喵 的blog

Unity中Shader的三种基本类型

按照渲染管线的分类,可以把Sharder分成3个类别:

1、固定功能着色器(Fixed Function Shader)

固定功能着色器为固定功能渲染管线的具体表现。

2、表面着色器

存在于Unity3D中由U3D发扬光大的一门技术。Untiy3D为我们把Shader的复杂性包装起来,降低shader的书写门槛。

3、顶点着色器和片段着色器

GPU上含有两个组件:可编程顶点处理器和可编程片段处理器,顶点和片段处理器被分离成可编程单元,可编程顶点处理器是一个硬件单元,可以运行顶点程序,而可编程片段处理器则是一个可以运行片段程序的单元。

顶点着色器

顶点着色程序从GPU前端(寄存器)中提取图元信息(顶点位置、法向量、纹理坐标),并完成顶点坐标空间变换、法向量空间转换、光照计算等操作,最后将计算数据传送到指定寄存器中。

片段着色器

关于Unity中水和雾的使用

自己来做水和雾还是有点麻烦的,不过没关系,Unity帮我们做好了很多可以用的。

1.Unity自己实现了水的特效,帮助我们解决游戏中水的问题

2.Unity的水集成在了Environment的环境资源包里面,导入的方法是:Assert---->Import---->Environent导入

需要正式版才能看到这个菜单,没有的话也没关系,我们可以使用网上别人导出的package

3.水分为Water与Water(Basic)两个文件夹,Basic效果要差,但是占用CPU比较低。两个文件夹中都有一个Prefabs预制体的文件夹,文件夹下面有两个为文件,对应DayTime和NightTime的水。

4.水是有Shader来实现的,所以要看一下水对应的Shader,可以自己调节参数。

水环境的实例

1.Assert---->Import Packages---->Cuotom Packages---->Environment.unitypackage,在E:\电影\Unity Video\47

Unity中的AssetBundle详解(三)

构建AssetBundles

AssetBundle工作流程的文档中,我们有一个示例代码,它将三个参数传递给BuildPipeline.BuildAssetBundles函数。让我们更深入地了解我们实际上在说什么。

Assets/AssetBundles:这是AssetBundles将被输出到的目录。您可以将其更改为所需的任何输出目录,只需在尝试构建之前确保文件夹实际存在。

BuildAssetBundleOptions

有多种不同的BuildAssetBundleOptions选项可以选择。相关的各个选项可以参阅脚本API文档中的关于BuildAssetBundleOptions的内容。

Unity项目资源加载与管理

本文转自Unity官方论坛:forum.china.unity3d.com

今天这篇文章将由Unity官方技术支持工程师柳振东,针对一些常见的Unity项目资源加载与管理问题进行解答。

1、将材质打包为AssetBundle,运行时使用LoadAsset加载材质也成功了,为什么还会出现材质丢失呢?

这也是开发者经常会遇到的问题。一般情况都是,开发者先把被依赖AssetBundle中的资源加载出来,然后用Unload卸载掉这个被依赖的AssetBundle,最后发现从其它AssetBundle中加载出来的GameObject丢失了前面加载出来的资源。

Unity中的AssetBundle详解(二)

为AssetBundles准备资源

使用AssetBundles时,您可以随意将任何Asset分配给所需的任何Bundle。但是,在设置Bundles时,需要考虑一些策略。这些分组策略可以使用到任何你认为适合的特定项目中。你可以随心所欲地混合和匹配这些策略。

逻辑实体分组

逻辑实体分组是根据其所代表的项目的功能部分将资产分配给AssetBundles的。这包括诸如用户界面、人物、环境以及在整个应用程序的整个生命周期中频繁出现的其他部分。

例子

• 把用户界面的所有纹理和布局数据打包到一起
• 把人物角色所包含的所有的模型和动画打包到一起
• 把多个关卡中共用的纹理和模型打包到一起

逻辑实体分组是可下载内容(DLC)的理想选择,因为以这种方式分离的所有内容,您可以对单个实体进行更改,而不需要下载其他未更改的资产。
能够正确实施这一策略的最大的窍门是,开发人员将资产分配给各自的Bundle必须熟悉项目中每个资产的使用时间和位置。

类型分组

Unity Shader 知识点总结(二)

紧接着上一篇文章的shader入门知识的总结,本文主要总结shader中的纹理贴图、透明度混合、顶点动画、后期特效处理等操作。如果有什么地方有错,请指出更正,谢谢。本文的代码主要来自开源书:unity入门精要

一、Unity shader中的纹理

1、简单纹理

在unity shader中,纹理的主要作用是用来给模型贴上一个外表,这样得到的模型颜色就具有纹理的颜色混合。在常见的一些shader上,都会有一个_MainTex的选项,这就是我们常常用的主纹理贴图。对于纹理贴图,其对应的需要有纹理坐标。在应用阶段,unity就会将模型的纹理坐标进行整理,存储在语义为TEXCOORD的语义中,通常我们会在shader中定义应用阶段到顶点计算阶段的结构体:

struct a2v{
     vertex:POSITION;  

Unity Shader的组织形式

Unity Shader的形态

Unity官方手册上讲Unity Shader有三种不同的编写方案,这三种编写方案分别是surface shaders、vertex and fragment shaders和fixed function shaders。

可编程图形管线中能够编写shader的主要是两个部分:vertex shader和fragment shader,但Unity还有surface shaders和fixed function shaders。

对于fixed function shaders,从表面意思来理解就是固定管线着色器,在可编程管线硬件出现之前,很多的光照流水计算都会放在硬件里进行处理,我们把这样的固定管线功能也看作是对应于固定管线硬件的操作,这种shader的功能是很保守的,比如说启用简单的光照,进行简单的纹理采样等等,对于现在绝大多数硬件都能得到很好的支持。

Unity中的AssetBundle详解(一)

AssetBundles

AssetBundle是一个存档文件,其中包含平台在运行时加载的特定资产(模型,纹理,预制,音频剪辑,甚至整个场景)。AssetBundles可以表示彼此之间的依赖关系;例如AssetBundle A中的一个材质可以引用AssetBundle B中的一个纹理。为了通过网络进行有效的传递,可以根据用例要求,选择内置算法(LZMA和LZ4)来对AssetBundles进行压缩。
AssetBundles可用于可下载内容(DLC),减少初始安装大小,加载为最终用户平台优化的资产,并降低运行时内存压力。

一个AssetBundle文件中有什么?

好的问题,实际上“AssetBundle”可以指两个不同但有关的事情。

第一个是磁盘上的实际文件。我们把这叫做AssetBundle存档,或在本文档只是短期档案。存档可以被认为是一个容器,就像一个文件夹,在其中保存其他文件。这些附加文件包括两种类型:序列化文件和资源文件。序列化的文件将您的资产分成各自的对象,并写入这个文件。资源文件只是存储在某些资产(纹理和音频)中的二进制数据块,允许我们在另一个线程上有效地将其从磁盘加载到内存。

Unity Shader 知识点总结(一)

在学习了一段时间的Unity Shader后,打算写一些知识总结,便于今后的查找。如有错误,希望大家指出更改。

本文参照的unity入门精要一书,做一个知识归纳,如有兴趣可以看看其开源的部分,是一本比较好的入门shader书。

一、渲染流水线

学习shader的知识,最重要的是要理解渲染流水线,基于渲染流水线,才能进一步的理解和学习下面的各个部分的shader。基于 Real-time rendering一书,渲染流水线可以分为三个部分:

1、应用阶段

在unity shader中,应用阶段主要完成三个基本的事:

1)准备渲染的场景和模型;

2)设置渲染的状态,主要是渲染所用到的材质、shader、贴图等;

3)对渲染对象做一个粗粒度的剔除操作。

这一阶段都是在CPU阶段执行的,特别是渲染状态的设置,对于后期的渲染有较大的影响,常见的批处理等操作都是在这阶段完成的。对于CPU阶段的优化,我也翻译了一篇外文如何优化CPU造成的渲染性能问题,可以查看这儿:Unity渲染优化中文翻译(二)——CPU的优化策略

【Unity Shader】---数据类型和关键字

一、基本数据类型:Cg支持7种基本的数据类型

1、float,32位浮点数据,一个符号位。浮点数据类型被所有的图形接口支持;

2、half,16位浮点数据;

3、int,32位整形数据

4,fixed,12位定点数,

5、bool,布尔数据,被所有的图形接口支持;

6、sampler*,纹理对象的句柄,分为sampler、sampler1D、sampler2D、sampler3D、samplerCUBE和samplerRECT。

二、内置的数据类型

基于基础数据类型,如float3,表示float类型的三维向量;同理,bool2表示布尔类型的二维向量。

注:向量最长不能超过四元,如float5 vector;//编译错误

向量的赋值:

    float2 a=float(1.0,1.0); //编译通过

float2 a=float(1.0f,1.0f); //编译错误

float3 b=float(a,0.0); //编译通过

矩阵数据类型:

同步内容
--电子创新网--
粤ICP备12070055号