Unity和Substance Painter的Look Dev显示校准
显示 Unity Dev 校准 look
2023-09-11 14:14:32 时间
首先,我们需要分别在SP和Unity里搭建一个相同的场景。本小节对应的资源路径为LookdevCalibration\MeetMat_Substance\1_Setup.spp和LookdevCalibration\MeetMat_Unity\Scenes\1_Setup.unity。
这两个场景的搭建环境如下:
- 都使用了同一个HDRI图像作为光照来源(来源:HDRI Haven的Artist Workshop)
- 都使用了同一套模型和贴图(来源:Sketchfab的Meet MAT 2 Mesh)
将上述HDRI、模型和贴图分别导入SP和Unity后,两者的项目设置分别如下:
1. Substance Painter设置:
- 在Environment Settings里进行设置(参见图1),以正确设置SP的环境光部分。
- 确保关闭Camera Settings里的所有后处理(参见图2),以排除后处理对渲染结果的影响。
- 确保材质使用的Shader是pbr-metal-rough(参见图3),并把相应贴图赋给对应的通道上。
2. Unity设置:
- 确保项目的颜色空间为Linear(参见图4),以保证我们能在线性空间下进行计算和渲染。
- 在项目ProjectSettings/GraphicsSettings.asset里将m_LightsUseLinearIntensity设为1,以保证我们能正确读取光源面板上的光源颜色和亮度信息。
- 设置相机位置和参数(例如FOV等)以保证和SP保持一致。
- 设置天空球。为了便于读者完全理解整个系统的原理,我们选择使用自己编写的Skybox Shader(LookdevCalibration\MeetMat_Unity\Assets\Shaders\CustomSkybox.shader)来创建天空球材质。这个Shader的基本逻辑与Unity内置的Skybox/Panoramic完全相同,只是去掉了无关的功能和Unity的兼容性代码。在Lighting Settings里把我们的天空盒材质球设置到Skybox Material属性上(参见图5)。如果读者使用的是Unity默认的Skybox/Panoramic材质,则需要注意要想让Skybox的颜色无偏地来自于HDRI,需要保持材质属性Exposure为1、Tint为(0.5, 0.5, 0.5)。这是因为,可能是出于某些历史版本的效果兼容原因,Unity会在Skybox/Panoramic的代码里把颜色值乘以unity_ColorSpaceDouble,因此我们要保证材质属性为0.5才能与其抵消。
- 设置模型材质球。这里我们暂时使用Unity内置的Standard Shader(参见图6)。
- 点击Lighting Settings里的Generate Lighting,来让Unity根据我们设置的HDRI正确计算相应的Ambient SH和Reflection Map,这是让Shader能读取到正确光照参数的关键。
![http://note.youdao.com/yws/public/resource/07d35855f08d46dab85503ef6724badb/xmlnote/E9F43B82C4D04C97AB2CCE4C4DD1A0EB/25206](https://img-blog.csdnimg.cn/img_convert/9cc73546db9247f75bbb395dd31fa2a7.png)
![http://note.youdao.com/yws/public/resource/07d35855f08d46dab85503ef6724badb/xmlnote/306C021FFC744C99814C1BB36B8BE2C0/25215](https://img-blog.csdnimg.cn/img_convert/c61f7650bd6be03af7b5c6e4b6695f24.png)
![http://note.youdao.com/yws/public/resource/07d35855f08d46dab85503ef6724badb/xmlnote/BC0990FB78484083861FCAA79E37B7EB/25246](https://img-blog.csdnimg.cn/img_convert/38dd2072fc39e8738ff63cacf87d4996.png)
![http://note.youdao.com/yws/public/resource/07d35855f08d46dab85503ef6724badb/xmlnote/4E5E21E59A0C4E24BC87D6BF661917D4/25255](https://img-blog.csdnimg.cn/img_convert/14a3d10b4059d2de6e8bca1613cbe174.png)
![http://note.youdao.com/yws/public/resource/07d35855f08d46dab85503ef6724badb/xmlnote/10FF3DA07D3F4FD5A34344CDFBF06896/25262](https://img-blog.csdnimg.cn/img_convert/beccf75e65455d872681dc702cd8144a.png)
![http://note.youdao.com/yws/public/resource/07d35855f08d46dab85503ef6724badb/xmlnote/6713DA8900104A20945A6609EFDA5B1C/25259](https://img-blog.csdnimg.cn/img_convert/80e73e3c1bb20c59e27d34ef3e1015cd.png)
按照如上进行设置后,我们可以在SP和Unity里得到效果非常相近的结果,如下图所示:
![http://note.youdao.com/yws/public/resource/07d35855f08d46dab85503ef6724badb/xmlnote/B8A9D14454BB4831A2DB2DCA6301FA5E/26804](https://img-blog.csdnimg.cn/img_convert/ebbe0b16128f208f294f3270bc9ee5b3.png)
这看上去似乎很像!但现实是,此时我们没有添加任何Tone Mapping等后处理计算。与此同时,绝大多数情况下我们会根据项目需要定制Shader,而不会直接使用自带的Standard Shader。在这些情况下,仅使用上述设置就无法保证在两个环境中可以得到一致的效果。在下面的内容里,我们会学习如何解决这些问题。
相关文章
- python魔法方法之-Python __repr__()方法:显示属性
- 为什么Unity引擎中,显示的顶点数过多?
- Google earth engine(GEE)——平均气温计算并且显示直方图
- 用 screenfetch 和 linux_logo 显示带有酷炫 Linux 标志的基本硬件信息
- [转]layDate显示默认时间
- C# 应用程序设置运行时自动获取管理员权限,不显示uac提升权限提示
- 如何使git log只显示修改的文件,不显示commit id和commit message?
- iOS开发技巧 - 使用Alerts和Action Sheets显示弹出框
- Github库中的Languages显示与修改
- Eclipse运行Applet没有显示图片,getCodeBase,getDocumentBase
- Xcode 如何显示快速帮助(快捷键 Xcode 中文使用手册SwiftUI)
- Sublime 输入中文显示方框问号乱码
- 【unity细节】unity中实例化的物体在Game视图无法显示
- jquery uploadify修改上传的文件名和显示
- 微软开窍!Win10 Redstone再改显示缩放
- odoo image字段显示
- Unity UGUI 效果 之 UI 元素 多边形UI (例如雷达图,圆形,不规则多边形 UI等)显示 的简单实现的几种方法整理
- Unity 基础 之 在 UGUI 上简单实现VideoPlayer视频播放的功能,简单暂停播放/显示视频名称/显示时长/拖拽播放等
- Unity 游戏物体的显示隐藏以及Time类
- Unity 之 OnGUI实时显示游戏FPS...