Giter VIP home page Giter VIP logo

glgraphics's Introduction

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

glgraphics's People

Contributors

mnrn avatar

Watchers

James Cloos avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.