Open Brush - 全方位艺术
Open Brush 是 Tilt Brush 的免费分支,Tilt Brush 是一款由 Google 提供的房间级 3D 绘画虚拟现实应用程序,最初由 Skillman & Hackett 开发。我们对原始代码库进行了大量更改,包括 Unity 升级和功能添加,使 Open Brush 达到现代 XR 开发标准。您可以在我们的文档网站上找到显著的变化。
我们希望将 Tilt Brush 作为一个社区主导的项目永久免费维护和改进!
由于原始仓库已归档,我们无法提交 PR,所以欢迎在这里提交!
用户指南 开发者说明 路线图 请加入 Icosa Discord 并参与其中! 社区教程、文章和其他资源列表 在 Open Collective 上支持我们
下载
商店
GitHub
致谢
- 感谢 Tilt Brush 开发者的出色工作,以及找到开源应用程序的方法!
- 感谢 SiMonk0 设计了全新的精彩logo!
- 感谢 SideQuest 团队的支持。
- 感谢 VR Rosie 制作宣传艺术品、横幅和视频。
最新开发版发布
无需等待正式发布,您可以从 Github 发布页面下载自动构建的 Windows(SteamVR)或 Oculus Quest / Quest 2 版本的 ZIP 文件。版本号形如"vX.Y.0"的是官方发布版,而不以.0结尾的版本仅供测试使用,不保证质量。此外,这些发布版被标记为"预发布"。但是,如果您想在正式发布之前测试最新的更改,您可以使用这些版本来替代或与正式 Open Brush 发布版并行使用。 这些构建版本与官方Open Brush发布版共享保存位置,但可以与正式版本并行安装。Oculus构建版本与所有侧载内容一样,会列在"未知来源"中,并在名称后附加"Github"字样(包名也不同),以区别于官方发布版。
请注意,"实验性"构建版本包含实验性笔刷,使用这些笔刷创建的草图在官方版Open Brush中加载时可能会呈现不同的效果!
此外,还有一个为Windows单目视觉创建的版本,它被列为Github Actions的"Artifact",但这仅供开发人员使用,普通用户不应使用。你可以通过浏览提交列表找到它,然后点击标题下方的绿色对勾(在XXX committed XXX ago旁边),滚动到你想要的构建版本,点击Details。然后在右上角点击Artifacts,再点击构建版本的名称。解压下载的文件,然后运行可执行文件(桌面OpenXR/单目视觉)或使用adb install com.Icosa.OpenBrush-github.apk
安装apk文件(Android Oculus)。
原Tilt Brush README中的重要说明
Tilt Brush商标和标志("Tilt Brush商标")是Google的商标,与GitHub上Apache许可的Tilt Brush仓库中包含的版权或专利许可授权分开处理。除这些指南允许的使用外,任何对Tilt Brush商标的使用都必须事先获得批准。
欲了解更多信息,请阅读Tilt Brush品牌指南。
构建应用程序
在你自己的设备上运行Open Brush开源应用程序。
前提条件
- Unity 2022.3.34f1
- Python 3(可选 — 仅当你希望运行
Support/bin
目录中的脚本时需要)已用Python 3.8测试。
在Unity编辑器中运行应用程序
首次运行应用程序时,请按以下步骤操作:
- 启动Unity。
- 转到File > Open Scene。
- 选择
/Assets/Scenes/Main.unity
。Unity应该会自动提示你导入TextMesh Pro。 - 选择Import TMP Essentials。 你也可以通过Window > TextMesh Pro > Import TMP Essential Resources来完成这一步。
- 按Play。
这些步骤已在Release 1.0.54中测试过。
从Unity编辑器构建应用程序
虽然可以使用标准Unity构建工具构建Open Brush,但我们建议使用构建脚本以确保应用程序使用正确的设置构建。要运行此脚本,请转到Open Brush > Build > Do Build,或通过导航到Open Brush > Build > Build Window从Open Brush构建窗口进行构建。
注意:首次构建应用程序可能需要一些时间。
从Windows命令行构建应用程序
使用Support/bin
目录中的build
脚本来指定目标平台和你希望启用的构建选项。运行build —help
查看各种构建选项。
附加功能
你应该能够很快地运行基本版本的Open Brush。以下功能需要更多时间:
开源Tilt Brush时被替换或移除的系统
由于开源许可问题,Tilt Brush中的一些系统被移除或替换为替代方案。这些包括:
-
Sonic Ether自然光晕。官方Tilt Brush应用使用从Asset Store购买的版本;开源版本使用Sonic Ether稍作修改的开源版本。
-
FXAA。官方Tilt Brush应用使用的是Unity早期版本中标准资产中包含的FXAA的修改版本 - FXAA3 Console。这已被jintiao的FXAA所替代。
-
渐晕和色差。官方Tilt Brush应用使用的是Unity早期版本中标准资产中包含的渐晕和色差效果的修改版本。这些已被Keijiro的KinoVignette的修改版本所替代。
-
移轴。官方Tilt Brush应用使用的是Unity早期版本中标准资产中包含的移轴效果的修改版本。这些已被ruby0x1的移轴的修改版本所替代。
生成Secrets文件
Google和Sketchfab等服务的凭证存储在SecretsConfig
可编程对象中。出于安全考虑,这在git配置中被忽略。要将其添加回来:
- 在Unity的项目窗口中右键点击根
/Assets
文件夹。 选择Create
,然后选择Secrets Config
。这将在Asset文件夹中创建Secrets.asset
。 - 在
Scenes/Main.unity
中,转到App > Config,将SecretsExample
替换为新生成的Secrets.asset
。
Google服务API支持
设置Google API支持以在应用中访问Google服务。
启用Google服务API
启用Google服务API时,请按以下步骤操作:
-
在Google Cloud Console中创建一个新项目。
-
启用以下API和服务:
- YouTube Data API v3 — 用于上传视频到YouTube
- Google Drive API — 用于备份到Google Drive
- People API — 用于用户名和头像
注意:您在开发者控制台上的应用名称应与您在App.cs
中的App.kGoogleServicesAppName
给应用的名称相匹配。
创建Google API密钥
创建Google API密钥时,请按以下步骤操作:
- 从Google Cloud Console进入凭证页面。
- 点击创建凭证并从下拉菜单中选择API密钥。
Google OAuth同意屏幕信息
OAuth同意屏幕会要求用户允许访问他们的Google账户。您应该能够从凭证屏幕配置它。
配置OAuth同意屏幕时,请按以下步骤操作:
-
填写您的应用名称和logo,以及应用将访问的用户数据范围。
-
将以下路径添加到作用域列表中:
- Google Drive API
../auth/drive.appdata
- Google Drive API
../auth/drive.file
- Google Drive API
创建OAuth凭证
凭证用于向Google服务器识别应用。按以下步骤创建OAuth凭证:
- 在凭证屏幕上创建一个新凭证。
- 选择OAuth,然后选择桌面应用。记下为您创建的客户端ID和客户端密钥值。请保密客户端密钥!
存储Google API密钥和凭证数据
按以下步骤存储Google API密钥和凭证数据:
- 按照创建secrets文件的步骤操作。 在Secrets字段中添加一个新项目。
- 选择
Google
作为服务。粘贴之前生成的API密钥、客户端ID和客户端密钥。
启用原生Oculus支持
Open Brush默认针对OpenXR而不是Oculus。按以下步骤启用原生Oculus支持:
- 在Player设置的Standalone和Android选项卡中,转到Other Settings > Scripting Define Symbols。
- 点击+按钮创建一个新条目。
- 添加
OCULUS_SUPPORTED
并按Apply。
为Oculus Quest构建应用
按以下步骤为Oculus Quest构建应用:
-
按照Oculus Quest开发指南设置您的机器。
-
确保在Unity中设置以下选项:
- Open Brush > Build > Plugin: Oculus
- Open Brush > Build > Platform: Android
- Open Brush > Build > Runtime: IL2CPP
-
导航到 Open Brush > Build > Do Build。
-
找到生成的可执行文件。它很可能位于
../Builds/OculusMobile_Release_OpenBrush/
目录下。 -
运行
adb install com.Icosa.OpenBrush.apk
。
发布到Oculus商店
注意:Tilt Brush 是Google的商标。如果您打算发布应用程序的克隆版本,您必须选择一个不同的名称以区别于官方版本。
按照以下步骤发布到Oculus商店:
-
从Oculus获取应用程序ID。桌面版和Quest版本的应用程序需要单独的ID。
-
按照步骤创建您的秘密文件。在Secrets字段中添加2个新项目。
-
将这些ID添加到
Secrets
文件中。Oculus
和OculusMobile
应各有一个条目。 -
将应用程序ID放在每个条目的
Client ID
字段中。
Open Brush 介绍草图
Open Brush介绍草图使用了一些稍作修改的着色器来产生动画淡入效果。为了加快加载速度,介绍草图事先被转换为*.prefab
文件。只有介绍草图中使用的着色器被转换以适用于介绍。
- 当前的介绍草图位于
Support/Sketches/Intro
。有两个版本,一个用于PC,一个用于移动设备。 *.prefab
文件位于Assets/Prefabs/Intro
。- 介绍中使用的材质和着色器位于
Assets/Materials/IntroMaterials
。 Assets/PlatformConfigPC
和Assets/PlatformConfigMobile
文件引用了将在介绍中使用的*.prefab
文件。
创建介绍草图
按照以下步骤替换或修改介绍草图:
-
确保已加载您选择的草图。在Unity编辑器中运行Open Brush。
-
在Unity主菜单中选择 Open Brush > Convert To Intro Materials。这将把草图中的材质转换为介绍版本。 控制台中会显示无法转换的材质的警告,以及转换了多少材质的摘要。
-
浏览层级。在Main场景下,打开
SceneParent/Main Canvas
。选择任何Batch_...
对象以检查它们是否设置了介绍材质。 -
将任何不以
Batch_
开头的对象从Main Canvas节点下移出。 -
选择Main Canvas节点,运行 Open Brush > Save Game Object As Prefab菜单命令。 场景将被保存为名为
gameobject_to_prefab
的*.prefab
文件,位于Assets/TestData
文件夹下。 -
将游戏对象移动到
Assets/Prefabs/Intro
文件夹。 -
更新
Assets/PlatformConfigPC
和Assets/PlatformConfigMobile
中的引用,使其指向您的新prefab文件。
为移动应用创建介绍草图
您可能想要为移动版应用创建一个简化版的介绍草图。笔画简化功能位于Open Brush内的Settings菜单中。
新场景
默认情况下,您的应用只会构建在Assets/Editor/
下的BuildTiltBrush.cs
中DoBuild方法(string[] scenes = {...})中定义的场景。确保将您的自定义场景添加到这个数组中,以便在应用中看到它们。
Sketchfab支持
按照以下步骤启用Sketchfab支持:
-
在上传到他们的服务之前,联系Sketchfab获取客户端ID和密钥。
- Application Name可能需要更改
- Grant Type应为Authorization Code
- URI应为http://localhost:40074/sketchfab
-
按照步骤创建您的秘密文件。在Secrets字段中添加一个新项目。
-
将客户端ID和密钥添加到该字段。
-
将服务设置为Sketchfab。将API密钥留空。
视频支持错误修复
如果您添加视频支持,可能会遇到一个错误:当控制器角度过大时,"Looking for audio"和"Play some music on your computer"文本会消失。通过以下方法修复:
- 在Unity中,找到
/Assets/TextMesh Pro/Resources/Shaders/TMP_SDF.shader
文件。 - 复制该文件并将其重命名为
TMP_SDF-WriteDepth.shader
。 - 在代码或文本编辑器中打开新文件,并进行以下修改:
- 将名称从
TextMeshPro/Distance Field
改为TextMeshPro/Distance Field Depth
。 - 将
Zwrite Off
改为Zwrite On
。
- 将名称从
- 在Unity中,选择
/Assets/Fonts/Oswald-Light SDF.asset
。 - 在
Atlas & Material
下,双击Oswald-Light SDF Material
。 - 在顶部,将
Shader
的名称从TextMeshPro/Distance Field
改为TextMeshPro/Distance Field Depth
。
离线渲染支持
当用户从Open Brush中保存的草图录制视频时,会在 .mp4
文件旁生成一个用于离线渲染支持的 .bat
文件。这个 .bat
文件需要Open Brush可执行文件的路径。写入此路径到文件的代码已被移除。
按照以下步骤恢复路径:
- 在代码或文本编辑器中打开
Assets/Scripts/Rendering/VideoRecorderUtils.cs
文件。 - 在文件底部附近找到
CreateOfflineRenderBatchFile
函数。 - 在函数中,找到关于如何修改字符串以指向可执行文件路径的注释。
- 更新字符串以指向正确的路径。
实验模式
实验模式是新功能在正式发布前的栖息地。这个模式启用实验性画笔和实验面板,同时禁用介绍序列。实验模式可以从设置面板启用,需要重启生效。
在实验模式中发现的新功能和画笔可能无法按预期工作。 使用实验性功能和画笔的草图在Icosa或Sketchfab上无法工作,在Open Brush的正式版本中加载时可能会出错。
使代码进入实验模式
实验模式下的代码通常包含在以下代码块中:
if (Config.IsExperimental) {
// 实验性代码放在这里
}
实验性画笔
实验性画笔和环境位于 Assets/Resources/X
文件夹中。它们在非实验模式下不可见。