unityShader基本介绍
第二章:Shader和渲染管线【图形学】学长沉浸式啃《实时渲染4th》- 第一章图形渲染流水线 - 深入浅出实时渲染的整体流程_哔哩哔哩_bilibili
2.1 什么是Shader
GPU流水线上高度可编程阶段。
有特定类型的着色器,如顶点着色器,片元着色器。
依靠着色器可以控制流水线中的渲染细节。
2.2 什么是顶点、片元
顶点就是点,包含了空间坐标信息。
图元是由顶点组成的。一个顶点,一条线段,一个三角形或者多边形都可以成为图元。
片元是在图元经过光栅化阶段后,被分割成一个个像素大小的基本单位。
像素是最终呈现在屏幕上的包含RGBA值的图像最小单元。
2.3 渲染流水线
计算机从一系列的顶点数据,纹理等信息出发,将这些信息转换为图像,这个工作通常由GPU和CPU共同完成。
渲染流水线是概念流水线。
渲染流水线:应用阶段->几何阶段->光栅化阶段->像素化阶段
2.3.1 应用阶段这一阶段由三个主要任务:
准备场景数据
粗粒度剔除(可以剔除不可见物体,提升渲染性能)
输出渲染图元。
渲染图元:可以是点,线,三角面等。渲染图元会传递到几何阶段。
步骤 ...
unity UI优化
前言UI的性能问题是很多人容易忽视,但却很重要的一个问题。通常我们的UI界面可能是美术或者策划来拼接,然后程序在做功能时并不会去关心UI的布局是否合理,有没有动静分离,以及禁用一些不需要的属性。所以在团队中制定一些做UI的规则就很重要。
优化UI系统能带来什么收益呢?优化UI系统带来的最明显的收益就是包体和内存的骤减,以及整体界面的流畅度。
一个没有提前考虑性能和优化的UI系统带来的问题会有很多,比如:
APK包体过大内存占用过大(致应用闪退)Draw Call过多导致性能问题界面之间切换不流畅动画卡顿掉帧顶点过多造成游戏卡顿等等这里列举的只是一部分在很常见的未优化导致的问题。
2.如何进行优化,从哪下手?相信有些人开始优化的时候会觉得无从下手,或者跟着网上优化一下图片格式,或者删删减减无用资源等,说白了这些跟算不得上是优化,因为他就是基础必备的。
内存优化使用图集尽量一个界面的元素保持在一个图集中,一些公用的图片放到一张公用的图集中,比如关闭 \底框等,这样做的好处是我们打开一个界面就只需要把对应的图集加载到内存中,如果该界面引用到其他图集中图片,哪怕是一张,对应的整个图集都会加载 ...
游戏设计模式
前言本文为游戏设计模式的读书笔记,
架构,性能和游戏重访设计模式命令模式定义:1将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化; 对请求排队或记录请求日志,以及支持可撤销的操作。
理解1将命令封装,与目标行为解耦,使命令由流程概念变为对象数据
UML
要点
将一组行为抽象为对象,这个对象和其他对象一样可以被存储和传递,从而实现行为请求者与行为实现者之间的松耦合,这就是命令模式。
命令模式是回调机制的面向对象版本。
命令模式的本质是对命令进行封装,将发出命令的责任和执行命令的责任分割开。
命令模式的优点有:对类间解耦、可扩展性强、易于命令的组合维护、易于与其他模式结合,而缺点是会导致类的膨胀。
命令模式有不少的细分种类,实际使用时应根据当前所需来找到合适的设计方式。
使用场合
命令模式很适合实现诸如撤消,重做,回放,时间倒流之类的功能。
基于命令模式实现录像与回放等功能,也就是执行并解析一系列经过预录制的序列化后的各玩家操作的有序命令集合。
引申与参考
最终我们可能会得到很多不同的命令类。为了更容易实现这些类,定义一个具体的基类,包含一些能定义行 ...
unity 3d数学理论
向量定义
向量在Unity中用于表示方向和位移。一个向量由三个部分组成,即x、y和z轴的分量。
向量的大小(长度)是其在各个维度上的绝对值的总和,表示向量的长度或幅度。
向量的方向由其相对原点的角度和旋转角决定。
向量的几何意义是表示一个有向线段,其中箭头表示方向和长度。
在unity中用Vector3 代替
名称
概念
公式
unity实例
零向量
没有方向
(0,0,0)
Vector3.zero
负向量
让原向量乘以-1得到了相当于原向量来说的负向量
单位向量
长度为1的向量叫单位向量(1,1,1)
各个分量分别除以magnitude模长就等于单位向量
向量的模
向量的长度
向量的长度=sqr(x^2+y^2+z^2) //各向量的平方相加,再开方
Vector.magnitude
向量相加
各分量分别相加
a向量+b向量=c向量 a(x,y,z)+b(x,y,z)=c(ax+bx,ay+by,az+bz)
向量计算点乘概念点乘,也叫向量的内积、数量积。
描述了两个向量的相似程度,结果越大两向量越相似,还可表示投影。
向量a·向量 ...
文件与脚本MVC整理
前言作为一个unity 开放者来说,工程规范是及其重要的,而文件规范又占了一大部分
这文件规范就像一个个柜子一样,你正确放置物品的话下一次找到这个资源就很容易。
不想整理?你多人协作后就知道什么是痛苦了
命名规则Assets目录中的所有资源文件名(场景、脚本、预设、模型、网格、纹理、材质、精灵、着色器、音频剪辑、视频剪辑)均采用 大驼峰式命名法 ,即每一个单词的首字母都大写。且使用能够描述其功能或意义的英文单词或词组。
文件目录
目录
说明
ABRes
自定义资源目录,用于存放需要动态加载的AB包中的资源。职责类似于Artwork,需要热更新的放入该文件夹并打包.
Artwork
存放美术资源的目录(涵盖动画、模型、材质、Shader、UI、原图等等),最好通过 svn 外链或者 git submodel 的方式引入,同样在上面的目录少了一个策划的目录,其实一般就是一个 csv 目录,一般也是通过 svn 外链或者 git submodel 的方式引入
Editor
编辑器目录,存放扩展编辑器的代码,该代码可调用Unity Editor的API。该目录中的代码不会被打 ...
射线检测
前言对于游戏来说射线检测是区别于物理检测来说另一个重要的场景对象交互方式
概念直接上unity源码
1234567891011121314151617181920212223242526public struct Ray{ private Vector3 m_Origin; private Vector3 m_Direction; public Ray(Vector3 origin, Vector3 direction) { this.m_Origin = origin; this.m_Direction = direction.normalized; } public Vector3 origin { get => this.m_Origin; set => this.m_Origin = value; } public Vector3 direction { get => this.m_Direc ...
数据可持续化
【图文详解】Unity存储游戏数据的几种方法_unity存储数据的方法-CSDN博客
前言PlayerPrefs 用于存入磁盘本地的数据
ScriptableObject用于缓存固定的数值,打包用不了Json 可以写入磁盘如果数据需要在Web应用程序之间传输,则 JSON格式通常是首选,如果数据需要与其他系统进行交互,则XML格式通常是首选,因为它是一种通用的数据交换格式,被广泛使用。
PlayerPrefshttps://blog.csdn.net/qq_32175379/article/details/121199932
概念
PlayerPrefs是Unity自带的一种简单的键值(键即用于查找的关键字,值即存储的数据)存储系统,用于存储少量的游戏数据。
PlayerPrefs是基于本地文件存储数据的,数据以键值对的形式保存在本地磁盘上。
作用
PlayerPrefs主要适用于一些简单的游戏数据的存储,例如玩家的音效、音乐、难度等级等。使用PlayerPrefs可以方便地在游戏中读写这些数据。
可用于存储一些非关键性的数据,尤其在没有服务器的单机游戏中,游戏存档、分数排 ...
背包系统初体验
前言花了几天时间去磨这个背包系统,发现有很多可学习的点
在背包系统有以下知识点,包括但不限于
对于UI的综合应用,对于设计模式的综合应用,对于数据处理的综合应用,对于存储方式的应用,编辑器扩展的应用。
建立背包UI这一部分大量使用了UGUI的组件,是对于组件的灵活应用
UGUI框架
限定分辨率
在Canvas下
Canvas Scaler组件 -> UI Scale Mode -> Scale Whith Sceeen Size
Reference Resolution -> X 1920 Y 1080
确保界面在任意分辨率下有着正确的表现方式
创建背包空物体
创建空对象PackagePanel
在Rect Transform组件下的锚点点击Alt选中右下角的跟随父物体伸展宽高
顶部菜单
在顶部创建一个空对象Menus挂载
Horizontal Layout Group:
Content Size Fitter: 将Horizontal Fit 设置为Preferred Size
滚动容器
创建一个Scroll View
在Scroll Rect中可以 ...
U3d的移动
简介在unity3d中,有多种方式可以改变物体的坐标,实现移动的目的,其本质是每帧修改物体的position。
通过Transform组件移动物体Transform 组件用于描述物体在空间中的状态,它包括 位置(position), 旋转(rotation)和 缩放(scale)。 其实所有的移动都会导致position的改变,这里所说的通过Transform组件来移动物体,指的是直接操作Transform来控制物体的位置(position)。
Transform.Translate 该方法可以将物体从当前位置,移动到指定位置,并且可以选择参照的坐标系。 当需要进行坐标系转换时,可以考虑使用该方法以省去转换坐标系的步骤。
public function Translate(translation: Vector3, relativeTo: Space = Space.Self): void;
缺点:无优点:有一定的惯性感,同样8向平滑,
使用Horizontal与Vertical123456789101112void transMove_GetAxis(){ // ...
自我学习路线目标
前言本篇为自定义学习方向,对以前的学习资源的整理以及学习进度的发展
unity 学习方向【Unity3D】Unity3D 技术栈_unity 技术栈-CSDN 博客
(95 封私信 / 80 条消息) unity 游戏开发的学习流程是怎样的? - 知乎 (zhihu.com)
Unity 学习路线(精良整理\持续更新) - 知乎 (zhihu.com)
游戏开发完整学习路线,都在这里了 - 知乎 (zhihu.com)
GameDevMind/mds/1.基础能力/1.基础能力.md at main · gonglei007/GameDevMind · GitHub
2021 最新 Unity 学习提升书籍推荐,小白必看 (zhihu.com)
[教程汇总+持续更新]Unity 从入门到入坟——收藏这一篇就够了 - 知乎 (zhihu.com)
重点
游戏网络编程(帧同步和状态同步)
AB包
CPP
OS
UGUI
后续
shader 入门精要
三阶段:
一: c# UI 框架 MVC 框架 存储功能 设计模式 unity 3d 数学
二: Lu ...