求解型AI设计思路

参考链接

整个AI中设置多个原子节点(可能是动作,或者几个动作组成的行为),或者说下层AI树。
每个AI树中可以含有多个原子节点。
AI求解器每次求解都是求一组原子节点组合来完成一个高层行为。
例如:AI任务目标是 获得2个金币。
原子节点 走路,摘苹果,挖矿,售卖。
可能的求解结果就是 走路-挖矿-售卖

每个原子节点要配置各种cost为求解器提供参考。

所以AI的逻辑代码是在全局的求解器中。
每个AI树包含:
- 一堆配置的原子几点。
- 每次求解步长。
- 求解策略,广搜深搜等。
- 结果的优先策略,最短节点优先,最短时间优先,性价比优先。
- 求解失败应对策略。
- 在中间节点执行完毕重求解策略。
- 沉默成本策略。

一个AI树就是一种AI。
AI树求解策略不同,导致AI表现不同。
AI求解很耗时,所以AI求解的步长就是AI的智能等级参数之一。

高智能的AI,系统分配的求解步长更长,包含的搜索策略更多。

Houdini学习笔记

  • 先了解[VEX],[VDB]。然后在看跟着教程学习。

    都先过一遍,然后在跟着做一遍,自己瞎捅咕几下,过几天在复习一边,有奇效。

    • [Wrangle] [VOP] 是互相对应的两个节点,功能是一样的。[Wrangle]是代码模式, [VOP]是节点图模式。
    • [Wrangle]代码使用的就是[VEX]。
    • [Wrangle]可以实现几乎所有功能,所有其他节点都可以看成[Wrangle]演化出来的成品变体。
    • 了解求解器的使用。
  • 在文档种大致看一下所有节点,不需要背,但是最好有个印象。知道哪些功能已经节点化了,免得用[Wrangle]继续造轮子。

  • 节点很多,但是很多节点功能是重复的。实现一个功能的方法不只有一种。但这是个先有鸡还是先有蛋的问题,只有你学会了那个节点,你才能知道那个节点基本用不到。

  • 然后就可以看各种制作教程了,遇到一个节点一定要完整看完节点文档。每个参数都试一下。

  • 善用右键,能点开的选项都点开看一下。颇有开箱子的乐趣。

  • 最后。学会了基础然后是学套路,套路学多了才能有思路。开始都是按着教程做都会,然后新东西做不出来。这个需要时间的积累。

UNITY生成LightmapUVs

模型通常含有8个UV。在不同的软件中叫法略有不同。

在unity中,分别叫[uv,uv2,uv3,……,uv7]。不存在uv1。
在Mesh API中,也已经废弃uv1属性。
在一些其他 API中,uv1属性 指的是第二通道的uv。 uv0属性指第一通道uv。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
namespace UnityEngine.Rendering
{
// Control which UV channels are affected by the Texture Animation Module
[Flags]
public enum UVChannelFlags
{
UV0 = 1,
UV1 = 2,
UV2 = 4,
UV3 = 8
}
}

namespace UnityEditor
{
[Flags]
public enum VertexChannelCompressionFlags
{
None = 0,
Position = 1 << 0,
Normal = 1 << 1,
Tangent = 1 << 2,
Color = 1 << 3,
TexCoord0 = 1 << 4,
TexCoord1 = 1 << 5,
TexCoord2 = 1 << 6,
TexCoord3 = 1 << 7,

[System.Obsolete("Use Position instead (UnityUpgradable) -> Position", false)]
kPosition = 1 << 0,
[System.Obsolete("Use Normal instead (UnityUpgradable) -> Normal", false)]
kNormal = 1 << 1,
[System.Obsolete("Use Color instead (UnityUpgradable) -> Color", false)]
kColor = 1 << 2,
[System.Obsolete("Use TexCoord0 instead (UnityUpgradable) -> TexCoord0", false)]
kUV0 = 1 << 3,
[System.Obsolete("Use TexCoord1 instead (UnityUpgradable) -> TexCoord1", false)]
kUV1 = 1 << 4,
[System.Obsolete("Use TexCoord2 instead (UnityUpgradable) -> TexCoord2", false)]
kUV2 = 1 << 5,
[System.Obsolete("Use TexCoord3 instead (UnityUpgradable) -> TexCoord3", false)]
kUV3 = 1 << 6,
[System.Obsolete("Use Tangent instead (UnityUpgradable) -> Tangent", false)]
kTangent = 1 << 7
}
}

MeshAPI中SetUV channel 参数为0-7。

在blender中,通常默认名字为[UVMap,UVMap.001,UVMap.002,……,UVMap.007]。

测试uv2

1. 将一个含有3个UV的模型导入unity,原样导出后uv如图。

三个通道uv位置不同。
img

2. 在unity中勾选Generate Lightmap UVs,导出模型。

img

发现引擎将模型的第二通道UV进行了覆盖,其他通道UV保持不变。
结论:使用多UV实现特殊功能时,尽量将第二通道UV预留。使用第三第四通道UV。

如何进行人物设计

1. 基本参数

基本参数 萌妹魔法师
名字/绰号 云却子
类型(幻想/科幻/末日/恐怖/西方/朋克) 幻想
原型/角色(主角/伙伴/导师/敌人/Boss/英雄) 主角
种族性别(人类/精灵/超人/兽人) 人类女性
年龄 17
个性(温和/保守/自信/鲁莽/傲慢/开朗/冷漠) 开朗,固执
职业 魔法师
经历/背景故事 幼年时被魔法剑选中的人/流浪者
细节 拥有两个魔法剑,没有法杖。其中一柄剑从来没有出鞘,背在背上。
参考图
简介描述: 中二固执的平板魔法师,却有一颗近战的心,经常被误认为是剑士,出乎意料的用魔法把敌人打败,并乐此不疲。

2. 寻找资料

3. 轮廓剪影

4. 内部分块

5. 画轮廓线

6. 细化上色

一些思考

智慧生命的终极目标

错误的方向不能称之为进化。这就涉及到进化的终极目标。我认为进化的终极目标是 永恒。小一些的终极目标是逃过热寂。
智慧生命的本能是进化,进化的反面是智慧生命的原罪。

进化和发展本身就是智慧生命的目标,所以不再有最终目标。2020年4月25日