在Unity中复刻《海岛奇兵》海水渲染

8 篇文章 0 订阅
4 篇文章 0 订阅

周末花了一天时间在Unity中复刻了一下《海岛奇兵》海岛场景海水的渲染效果,先上目前复刻的效果图:

总体上还原了海水深度、海面波光、海水流动、海岸泡沫的效果。

复刻的思路其实就是拿Adreno Profiler、SnapDragon和Intel GPA进行抓帧,随后分析渲染用到的Shader、uniform参数。

记录一些踩到的坑:

  1. AdrenoProfiler极容易报错,但是抓到的Resources最完善,但是Mesh中可能某一项属性如Color末尾缺失,导致导出Obj文件缺少数据,需要手动进行修复,比较花费精力。另外AdrenoProfiler导出的Obj是伪Obj文件,需要手动修复格式描述语法。
  2. SnapDragon要求app的AndroidManifest.xml开启了Debug选项,否则即使连接上真机,也无法在Take Snapshot窗口中启动想要抓帧的app。因此需要在抓帧前在反编译apk添加Debug选项再回编,一般需要配合apktool.jar,但是如果apk开启了安装包MD5自校验,就比较麻烦,腾讯MTP一般都开启了自校验。
  3. Intel GPA在安卓下只支持x86架构的app,因此一般选择连接x86架构的模拟器抓帧,但是直接连接Android的失败率很高,各种闪退。因此如果使用Intel GPA来抓模拟器,最好配合GraphicsMoniter检测模拟器真正的绘制进程,随后在System Analyzer中直接连接localHost,采用DirectX的方式抓帧,成功率理论上是100%。
  4. Intel GPA的FrameAnalyzer体验最好,但是导出Obj时不含UV信息等,如果在乎Mesh相关的数据,则只能求助AdrenoProfiler。
  5. 抓帧抓到的模型坐标系很大概率和Unity不一致,纹理采样、坐标运算等需要进行微调。
  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 在 Unity 添加渲染视口的方法如下: 1. 创建一个新的 Unity 项目。 2. 在资源管理器创建一个新的 C# 脚本,命名为 RenderView。 3. 在脚本添加以下代码: ``` using UnityEngine; using UnityEngine.UI; public class RenderView : MonoBehaviour { public RenderTexture renderTexture; public RawImage rawImage; private void Start() { rawImage.texture = renderTexture; } } ``` 4. 将新创建的脚本挂载到一个空的游戏对象上。 5. 在场景创建一个 RawImage 组件,并将其作为游戏对象的子对象。 6. 在游戏对象上创建一个 RenderTexture,并将其作为 RenderView 脚本的 renderTexture 字段。 7. 在 RawImage 组件上,将其作为 RenderView 脚本的 rawImage 字段。 8. 运行场景,您将在 GUI 看到渲染视口。 这是一种添加渲染视口到 Unity GUI 的基本方法,您可以根据需要进行修改。 ### 回答2: 在Unity,可以通过以下步骤在GUI添加渲染视口: 1. 创建一个空的游戏对象,并将其作为渲染视口的父级对象。 2. 在该游戏对象上添加一个Camera组件,用于渲染场景。 3. 在场景选择一个适当的位置和角度,调整该Camera的Transform属性,以确保它拍摄到想要呈现的内容。 4. 在GUI创建一个RawImage对象,用于显示渲染视口。 5. 将该RawImage的纹理(Texture)属性设置为之前所创建的Camera的渲染纹理(RenderTexture)。 可以使用RenderTexture.Create()方法创建渲染纹理,并将其设置为Camera的targetTexture属性。 6. 将渲染视口的父级对象的位置、尺寸和锚点根据GUI界面的要求进行调整。 7. 在每一帧更新时,通过调用Camera的Render()方法来进行场景的渲染。 8. 渲染完成后,通过将Camera的渲染纹理赋值给RawImage的纹理属性来显示渲染视口。 需要注意的是,渲染视口是通过在GUI模拟相机视角来实现的,因此在渲染视口的游戏对象并不会响应物理交互。如果需要实现交互功能,可以在GUI添加相应的按钮或其他控件,并通过代码控制游戏对象的行为。 此外,为了提高性能,可以选择将渲染视口的相机设置为只渲染特定的图层(Layer),并在GUI摄像机的Culling Mask属性排除这些图层,以避免不必要的渲染。 以上是在Unity的GUI添加渲染视口的基本步骤,通过合理的调整相机和GUI的参数,可以实现各种不同的效果和交互体验。 ### 回答3: 在Unity的GUI添加渲染视口,需要按照以下步骤进行操作: 1. 创建一个空的GameObject,用于容纳渲染视口。将其命名为"RenderViewport"。 2. 在"RenderViewport"对象上添加一个Camera组件。这将成为渲染视口的相机。 3. 配置相机的参数,例如设置宽高比、视野、背景色等。 4. 在"RenderViewport"对象上添加一个RawImage组件。这将用于显示渲染视口。 5. 创建一个RenderTexture对象用于渲染视口的输出。可以使用RenderTexture.Create函数创建一个指定分辨率的RenderTexture。 6. 将RenderTexture赋值给相机的targetTexture属性,以便将相机的输出渲染到RenderTexture上。 7. 将RenderTexture赋值给RawImage的texture属性,以便将RenderTexture显示在RawImage上。 8. 在GUI界面,将"RenderViewport"对象放置在期望显示渲染视口的位置上。可以使用GUILayout组件或自定义脚本来控制其位置和大小。 使用这些步骤,可以在Unity的GUI界面成功添加一个渲染视口。这样,通过控制相机的参数和渲染纹理,可以实现在GUI界面显示任何所需的渲染内容。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值