3D游戏初学者着色器指南:环境搭建

image.png

环境搭建

在开始学习和应用3D游戏着色器之前,确保你的开发环境已经正确设置。下面是开发和测试示例代码所用的环境。

开发环境

  • 操作系统:Linux Manjaro 5.10.42-1-MANJARO
  • 显卡:GeForce GTX 970/PCIe/SSE2
  • OpenGL版本:4.6.0 NVIDIA 465.31
  • 编译器:g++ (GCC) 11.1.0
  • 引擎:Panda3D 1.10.9

材质设置

使用Blender创建的mill-scene.egg模型包含如下五种纹理:

  • Diffuse(漫反射)
  • Normal(法线)
  • Specular(高光)
  • Reflection(反射)
  • Refraction(折射)

通过在所有模型中使用相同位置的这些纹理贴图,着色器可以被通用化,减少重复代码的需求。

如果一个物体使用其顶点法线,则使用“平蓝色”法线贴图。

image.png

例如,这是一张平蓝色法线贴图。它仅包含平蓝色 (red = 128, green = 128, blue = 255),代表一个指向正z轴 (0, 0, 1) 的单位法线。

(0, 0, 1) =
  ( round((0 * 0.5 + 0.5) * 255)
  , round((0 * 0.5 + 0.5) * 255)
  , round((1 * 0.5 + 0.5) * 255)
  ) =
    (128, 128, 255) =
      ( round(128 / 255 * 2 - 1)
      , round(128 / 255 * 2 - 1)
      , round(255 / 255 * 2 - 1)
      ) =
        (0, 0, 1)

如上所示,单位法线 (0, 0, 1) 被转换为平蓝色 (128, 128, 255),并且平蓝色被转换回单位法线。你将在法线映射技术部分学习更多内容。

image.png

上图是其中一个高光贴图。红色和蓝色通道控制根据摄像机角度看到的高光反射量,绿色通道控制光泽度。你将在光照菲涅耳效应部分了解更多内容。

反射和折射纹理用于屏蔽那些具有反射、折射或两者皆有的物体。对于反射纹理,红色通道控制反射量,绿色通道控制反射的清晰度或模糊度。

Panda3D配置

示例代码使用Panda3D作为着色器之间的粘合剂。这对描述的技术没有实际影响,意味着你可以将这里学到的内容应用到你选择的技术栈或游戏引擎中。Panda3D确实提供了一些便利功能,我会指出这些功能,以便你可以在你的技术栈中找到等价功能或自己实现它们。

为了演示程序的目的,更改了三个Panda3D配置。你可以在config.prc中找到这些配置。更改的配置包括:

  • gl-coordinate-system default:Panda3D默认使用z-up右手坐标系,而OpenGL使用y-up右手坐标系。这个配置可以避免在着色器内部进行坐标系转换。
  • textures-auto-power-2 1:允许我们使用非二次幂的纹理尺寸(如果系统支持)。这在进行SSAO和其他屏幕/窗口尺寸相关的技术时非常有用,因为屏幕/窗口尺寸通常不是二次幂。
  • textures-power-2 down:如果系统只支持二次幂大小的纹理,这个配置会将我们的纹理大小调整为二次幂。

更多详情请参阅Panda3D配置手册页面。


希望这篇博客能帮助你快速搭建3D游戏着色器的开发环境,顺利开启你的开发之旅!如果你有任何问题,欢迎在评论区留言。

(C. 2019 David Lettier
lettier.com

0 0 投票数
Article Rating
订阅评论
提醒
0 评论
最多投票
最新 最旧
内联反馈
查看所有评论
0
希望看到您的想法,请您发表评论x