• Stars
    star
    211
  • Rank 185,816 (Top 4 %)
  • Language
    C#
  • License
    MIT License
  • Created about 6 years ago
  • Updated over 5 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

unity 大地形切割、加载、AB

Unity 大地形研究

  1. 切割大地形

    打开 unity, 在菜单栏点击 Terrain->Slicing 即可以切割大地形,代码会自动遍历 Hirerachy 里的地形,切割4X4的16块,切割好的地形默认会存在 Resources 目录下,生成一个地形 gameobject 同名的文件夹。

    除了地形分片资源,这里还会生成地形和物件相关的数据信息,保存成二进制文件,保存在同一目录下。

  2. 分段加载地形和物件。

    点击 Terrain->Load 会加载分片地形, 并且根据地形分片生成一个对应的 collider.

    collider 的 triger 会触发地形的加载和卸载,实现过程类似于 Unreal引擎实现的Level Streaming Volume。

  3. 部件的加载

    部件如场景里的石头这个物件,他的加载跟着地形分片一同加载、卸载。而不是以 player 为中心做四叉树来管理场景的加载卸载。

  4. 地形lightmap生成assetbundle

    点击 Terrain->生成lightmap资源,即可以把当前场景的lightmap 贴图全部达成assetbundle. 在打包lightmap贴图的同时,会生成一个二进制文件被打到同一个assetbundle中,这个二进制文件记录了当前场景里所有render的lightmap的index索引和offsetscale偏移。

我们使用AssetStudio 来查看assetbundle 里的内容,可以清楚看到资源的分布:

工程里有三个scene:

race_track_lake:用来测试地形的切割和加载

race_track_lake2:测试lightmap的动态加载(ab)和偏移 不考虑地形切割

race_track_lake3:地形切割且使用lightmap的动态加载

本文对应的博客地址:https://huailiang.github.io/blog/2018/terrain/

注意:

地形切割之后,隐藏之前的原有地形,放掉TerrainLoadEditor.Load函数里的注释,把所有的地形分片加载到场景,然后再进行场景烘焙,这样lightmap记录的所有切割地形的索引和偏移。lightmap生成之后,把对应的贴图打包到对应的assetbundle。

运行时,删去所有场景里分片地形,所有的地形都是动态加载的。assetbundle先找到里面的bytes数据,根据数据生成lightmapdata赋值给LightmapSetting, 然后再动态算场景里物件的render所对应的lightmap偏移和索引。

设置render的lightmap索引和偏移,会打断unity自身的static batch,为了减轻gpu的渲染负担,在所有设置好偏移和索引之后,可以使用CombineInstance 和MaterialPropertyBlock 等技术进行合批和优化。

More Repositories

1

face-nn

游戏捏脸,基于神经风格迁移框架生成逼真人脸
HLSL
473
star
2

knead_proj

游戏中捏脸的实现
C#
443
star
3

LipSync

LipSync for Unity3D 根据语音生成口型动画 支持fmod
CMake
380
star
4

seqence

剧情-技能编辑器
C#
223
star
5

unity_pose3D

Unity中还原抖音视频的动作
Python
175
star
6

pbr_proj

Shader of PBR for Unity
C#
113
star
7

lod

unity中lod分级减面工具SimplyGon, lod预览工具
C#
81
star
8

game_net

Unity游戏和C++服务器 socket通信demo, 数据格式采用google protobuf
C++
65
star
9

hud

游戏血条
C#
62
star
10

timeline

timeline of unity2019
C#
55
star
11

OpenGLEngine

基于OpenGL实现的渲染引擎
C++
52
star
12

batch_build

shell 自动化出包&补丁持续集成工具 适用于unity平台 Jenkins依赖脚本
CMake
37
star
13

Parabola

游戏中用于生成抛物线的编辑器, 如炮弹等投射物的轨迹, 不到100行代码
C#
33
star
14

MultipeerConnectivity

集成wifi、蓝牙直连的端对端unity的sdk, 类似于苹果设备上的airdrop,不需要中转服务器通信
Java
32
star
15

ai_bird

强化学习-游戏AI Trainning
C#
30
star
16

game_sdk

Unity游戏接入外部sdk框架
C#
29
star
17

ConnectPy

unity 和 Python TCP/UDP 通信
Python
24
star
18

ulua_proj

为你的游戏定制lua, 升级ulua底层库到lua53, 彻底地解决你的烦恼
C
23
star
19

nnStyle

a neural network style transfer for video game
Python
21
star
20

ibl_proj

在Unity中实现 LearnOpenGL中公式实现的 PBR 渲染, 包含生成辐射度贴图、预滤波环境贴图、镜面brdf积分贴图
HLSL
18
star
21

watermark

去除抖音、微视水印的脚本工具
Python
17
star
22

ray_tracing

gpu-ray-tracing-in-unity implements by three-eyed-games
C#
17
star
23

Astc

unity 使用原生astc兼容性和性能测试
CMake
15
star
24

video-face-recognition

视频人脸识别
Python
12
star
25

Variants_Proj

Unity 中Shader 和ShaderVariantCollection 生成 Assetbundle 案例测试
C#
10
star
26

game_pb

unity 集成c++ protobuf
C++
10
star
27

Vertex-Animation

C#
9
star
28

WebCam

支持Unity中的WebCameraTexture访问Android原生层Camera2的能力, 比如说变焦、曝光度、ISO等参数
Java
9
star
29

AREngineDemo

AREngine background rendering for URP
C#
8
star
30

swig

自动化导出c++各个平台库
C#
7
star
31

reverse-onepiece

破解《航海王燃烧之血》
Python
4
star
32

wx

微信小程序
JavaScript
2
star
33

SideScroll

使用UE5复现类似马里奥效果小游戏-youtube
2
star
34

huailiang.github.io

huailiang blog
JavaScript
1
star
35

lgRenderEngine

soft render engine based on SDL2
C
1
star