3D游戏场景DEMO——添加水体效果
好久没写了,5月初就把地形弄差不多了,后来几天把天空穹改了下,弄了多重纹理云彩飘动。
之后一直在做水体的实现,发现水体太烦了。原以为比较简单没地形复杂,结果一查阅资料,天呐~~比地形复杂多了。和地形也有相似的地方LOD之类的,也许是本来对图形方面的不了解。看了海水生成的方式——2D水波方法、正弦波叠加、FFT(快速博立叶变换)、柏林噪声、还有《游戏编程精髓6》上的“GPU交互式流体”。脑壳那个大呀,一开始太茫然了。=.=
考虑了实际情况,决定先尝试了“正弦波叠加法”产生水的波浪效果,用VS和PS试了下,虽然是可行,但是感觉重复性太大了。当采用单方向的波传播方式时,多个波相叠加后产生的波浪效果就是重复的,与水平面角度不大时 看上去还好,如果是俯视水平面看着就不真实了。
而采用以圆的方式扩散传播时,只有在距离波源不是很远时才能达到比较真实的效果,远了以后波长不知道怎么的会变短,就会发生很尖锐的效果。同时考虑到场景中多个水体并非一个波源,而且在河流和海水(4周环绕的)中时波源和不同单独水体块的衔接感觉不好处理,还担心计算顶点偏移会耗时间。(我机子太差)
所以最后就没采用动态网格,只通过动态纹理来产生了水波效果。嘿嘿^_^
使用了“GPU交互式流体”中在水波静态时产生水波效果的方法,通过法线贴图对水体纹理进行水波干扰。采用一个波浪类型的法线纹理,在VS中计算出UV坐标,在PS中取得法向量(Y为0)。将法向量XZ平面的值作为折射图和反射图的UV坐标的偏移量,如此这般,水体纹理颜色值就有些波浪的扭曲效果了。(我想游戏中部分的武器特效空间扭曲效果,应该和这类似吧?)
水体的折射图则采用RTT(渲染到纹理),当前摄像机位置所看到的地形渲染到折射图纹理中。(虽然剔除了部分但仍很耗时,还需要优化)
水体反射图也是RTT,把水平面作为裁剪平面SetClipPlane,渲染时要屏蔽掉地形在水以下的部分,计算出水平的反射矩阵D3DXMatrixReflect,将地形镜像翻转后设置背面剔除为顺时针剔除进行渲染。这时,相当于我门从地下从水下往上看能看到的东西就是水反射的东西,需要注意的是裁剪水平面的正方向设置b=-1向下,这个SetClipPlane函数起的效果是,保留平面正半区内容,剔除掉平面负半区的内容。(仔细想一下不难想^_^)。同时反射渲染时先渲染地形再是天空,也需要优化减少渲染地形的大小,很耗时。
5月初到前段时间都没啥状态,这几天终于弄出点成果了,天气也好,开心啊。^_^,下面放上效果图。
网站好像有问题 不让放图片
3D游戏场景DEMO——添加水体效果相关推荐
- SceneKit:简单的3D游戏场景搭建
SceneKit是Apple用来开发休闲3D游戏的框架,不同于底层的OpenGL库,你仅仅需要很少的代码就可以快速看到实际的3D场景效果.下面简单的聊聊搭建一个3D游戏场景需要做的事情. 首先你必须用 ...
- Unity 3D 环境特效||Unity 3D 游戏场景设计实例
Unity 3D 环境特效 一般情况下,要在游戏场景中添加雾特效和水特效较为困难,因为需要开发人员懂得着色器语言且能够熟练地使用它进行编程. Unity 3D 游戏开发引擎为了能够简单地还原真实世界中 ...
- 【企业数字化转型】数据可视化技术:Three.js 用Physijs在场景中添加物理效果
Three.js 极简教程 简介 Three.JS 是什么 Three.JS是基于WebGL的Javascript开源框架,简言之,就是能够实现3D效果的JS库. Three.JS 能做什么 利用Th ...
- 「3D游戏场景模型」如何在 ZBrush中雕刻精美的木材?
优质的环境艺术非常注重细节.将快速照片来源的纹理拍打到物体上并将其完成相对容易,但是使用这种方法很少会产生令人满意的结果. 专业的生产工作流程并不总是允许动手绘制图像或框架中每个表面的细节.很少的工作 ...
- three.js后期处理-使用UnrealBloomPass通道在场景中添加泛光效果,三维物体表面发光效果(vue中使用three.js85)
使用UnrealBloomPass通道在场景中添加泛光效果 1.demo效果 2. 重要知识点 2.1 回顾要点 2.2 UnrealBloomPass通道介绍 3. 实现要点 3.1 相关文件引入 ...
- 3D游戏 | 场景的搭建 + 牧师与魔鬼
基本操作演练 下载 Fantasy Skybox FREE, 构建自己的游戏场景 在Assert Store搜索Fantasy Skybox FREE并下载,下好之后import进项目中. Fanta ...
- unity创建草地_Unity5.X 创建基本的3D游戏场景
创建地形 Assets → Import Package → Environment 导入环境资源包 Environment属于Unity所提供的标准资源包, 但如果没有可以去官网下载 导入之后,3D ...
- 次世代3D游戏场景贴图绘制技巧,学起建模更简单!
今天为大家讲解次世代游戏场景贴图绘制技巧 ,希望能够对想要学习3D游戏美术的朋友们一些帮助. 1.模型UV制作完成后,将uv线框图导出进PS里面背景色为黑色. 2把烘培好的明影贴图在放在最顶层,用正片 ...
- 次世代3D游戏场景贴图绘制技巧,高效学建模!
今天为大家讲解次世代游戏场景贴图绘制技巧 ,希望能够对想要学习3D游戏美术的朋友们一些帮助. 1.模型UV制作完成后,将uv线框图导出进PS里面背景色为黑色. 2把烘培好的明影贴图在放在最顶层,用正片 ...
最新文章
- 如何在sqlite3连接中创建并调用自定义函数
- 案例式c语言程序设计陈明,C语言程序设计教程 清华大学出版社 陈明主编 第1章答案...
- 配置 Cisco ASA Static IP Addressing or DHCP for IPSec ××× Client
- 【深度学习】2021 年了,TensorFlow 和 PyTorch 两个深度学习框架地位又有什么变化吗?...
- aoe网最早开始时间和最迟开始时间_关键路径(AOE)网 通俗易懂
- 前端处理带t的时间_适合家用的跑步机?阿迪达斯轻爵T-19i跑步机测评|adidas|商用机...
- haskell 求列表最大值_Haskell和自然数之基础篇
- 四元数姿态解算c语言例程_(21)用四元数插值来对齐IMU和图像帧
- MongoDB 初体验:存储引擎 MMAPv1 与高内存消耗及升级迁移
- 找回被删并清空了回收站的文件
- [Android] android:visibility属性应用
- ensp查看历史配置命令_华为eNSP配置基本命令
- lammps数据后处理:Python Ovito CNA结构统计输出
- aliplayer阿里云播放器直播及录播前端代码
- jQuery按住滑块拖动验证插件
- SuiteCRM Beans(model)
- 2020年全球及中国干细胞医疗行业发展现状及竞争情况分析,美国领先于世界,北上广领先于中国「图」
- Android进程管理详解
- AE(After Effect) 自带抠像插件详解
- 【最新面试技巧分享】面试官想看到的以及面试者需要准备的!