网易游戏技术公开日分享

乱斗西游NeoX引擎的开发经验

NeoX目前支持了OpenGL ES和Metal两套API,同时支持多线程渲染的特性。


  • 逻辑和渲染拆分成两个独立的线程,更好的运用多核运算(缺点:饥饿,死锁,Crash)
  • 创建共享GL上下文来实现OpenGL的多线程渲染(!OpenGL ES上下文并不保证线程安全
  • 通过线程ID映射GLContext,每一个渲染线程独占一个GL Context
  • RenderQueue使用一个LockFree的RingBuffer执行渲染命令
  • 使用Double-Buffer(空间换时间)避免锁的使用。

注意事项:任何线程都能创建GPU资源,使用OpenGL时结束调用要调用glFlush(每个GLContext都有一个CommandQueue);GPU资源销毁的操作必须在渲染线程中执行。

推荐参考BGFX库的实现



《无尽战区》渲染迭代经验

风格化的渲染在最近开始流行起来,比如Valve的Team Fortress军团要塞2、暴雪的守望先锋以及Epic的Kite Demo

军团要塞2

守望先锋


卡通风格渲染


卡通风格渲染一般具备以下特点:

  • 动漫贴图画法和着色
  • 描边处理
  • 风格化处理

TF2的解决方案是使用了:

  • Modified Lambertian Terms
  • Warping Function
  • Rim Lighting
  • Spatially-varying Directional Ambient

f(x)=kd[a(n⃗ )+i=1Lciw((α(n⃗ l⃗ i)+β)r)]

Warping Function(核心) : 12(n⃗ l⃗ )+12

在他们的分享中也提到了线性工作流(Linear WorkFlow)的重要性,以及模型美术资源外包制作的一些坑。


Cloud GI(离线渲染LightMap )

关键词:Data-Parallel Octree, Radiosity, Point Cloud, Surfel

GPU上的八叉树构建和编码

大致方案:

  • 全局光照算法(Point Cloud Based GI)的思路参考Point-Based Approximate Color Bleeding论文. (RenderMan使用的全局光算法)
  • 八叉树(管理点云,每个节点记录颜色和球谐系数)快速构建算法的实现参考了Data-Parallel Octrees For surface Reconstruction论文
  • Light Map裂缝处理使用了Gutter方法

《天谕》大世界的渲染方案

资源控制

Budget系统:
所有资源都有优先级,不再用的资源尽可能换出。


LOD

  • 贴图LOD(缩略图-原图-大图):
    • 自动Stream大图
    • Device Lost的时候直接删除原图
    • D3D9使用DEFAULT POOL管理贴图
    • 贴图权重定义
      • 法线贴图>漫反射贴图>高光贴图
      • 离镜头越近权重越高
      • 包围盒越大权重越高?

合并DrawCall

使用Proxy系统合并模型焊接顶点以减少DrawCall。


…待续

你可能感兴趣的:(游戏开发,3D图形API)