Skip to content

mnrn/GLGraphics

Repository files navigation

OpenGL グラフィックメモ

Build Status License: MIT Launguage-C++

グラフィックに関する実装をOpenGLで行っていきます。

Vulkanへの移行を始めていますが、OpenGLでの実装も続けていきます。
また、統合してしまうことも考えておりますが、今のところ未定になります。

制作経緯

もともとはLinuxで動かしていたプログラムですが、PCが壊れたのでMacに移していたものです。
再入門にあたりWindowsでも動かせるようにしました。

現在動作確認はWindowsとMacのみになります。
動作環境にLinuxを近々追加する予定です。

動作環境にiOSとAndroidに追加するかどうかについては未定になります。

制作環境

  • OS
    • Windows10
    • Mac OSX Catalina 10.15

ビルド

ビルドツールはCMakeになります。
グラフィックライブラリはOpenGLで4.3以降がターゲットになります。
ただし現在使用しているグラフィックボードのスペックなどの諸事情により4.4までの確認になります。

以下はリポジトリにすでにおいてあるのでインストールがされてなくても大丈夫です。

ビルドの例です。

cmake -DCMAKE_EXPORT_COMPILE_COMMANDS:BOOL=TRUE -DCMAKE_BUILD_TYPE:STRING=Debug -H/. -B/./Build -G "Ninja"
cmake --build ./Build --parallel 13

リポジトリのルートディレクトリにCMakeLists.txtがあるので詳しくはそちらを参照ください。

Features

物理ベースレンダリング (Physically Based Rendering)

PBR

BRDFによるMicrofacet Modelの描画を行っています。
このあたりの理論はGoogleの物理ベースレンダリングエンジンFilamentのドキュメントなどを参考にしました。
左が金属(Metallic Material)、右が非金属(Dielectric Material)です。


遅延シェーディング (Deferred Shading)

Deferred

2次元の画面空間上でシェーディングを行う手法です。
半透明をうまく扱えない点やメモリを大きく消費する点などからゲームではあまり使われないかもしれません。
大量のライトを使う場合は候補に入れても良いかもしれません。


スクリーンスペースアンビエントオクルージョン (SSAO)

SSAO

アンビエントオクルージョン(環境光遮蔽)をスクリーン空間上で考えて計算するシェーディング手法です。
Deferred Renderingで実装しましたが、Forward Renderingでも用いることは可能です。

SSAOOnly

SSAOシーンのみをレンダリングした場合です。


シャドウマッピング (Shadow Maps)

ShadowMap

シャドウマッピングはライトの視点からシーンを描画し、各フラグメントでデプスの計算を行います。
次にシーンを描画するときに先に計算したデプスを考慮して影を描画する手法です。
上の画像は1024x1024の解像度のシャドウマップを使用しています。


平行分割シャドウマップ (Parallel-Split Shadow Maps)

PSSM

カメラの視錐台を分割して各視錐台に対してシャドウマップを適用し、影を描画する手法です。
実装していて気づきましたが、パラメータによってだいぶちらつきが発生するため、バウンディングスフィアによる安定化を採用しました。

PSSMIndicator3

視錐台を3分割にしてシャドウマップを生成した場合です。
手前のほうがくっきりしているのがわかると思います。


コンピュートパーティクル (Compute Particles)

ComputeParticles

コンピュートシェーダーによるパーティクルと重力場のシミュレートになります。
コンピュートシェーダーを使用しているのでOpenGL4.3以降が必要になるためMacOSでは動作しないことに注意してください。

参考

OpenGL 4 Shading Language Cookbook - Third Edition
HLSL Development Cookbook
Unity 2018 Shaders and Effects Cookbook - Third Edition
Physically Based Rendering in Filament
Advanced-Lighting - SSAO
Cascaded Shadow Maps
GPU Gems3 Chapter 10. Parallel-Split Shadow Maps on Programmable GPUs

About

リハビリとしてのOpenGL再入門

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published