General purpose model viewer

Overview

Foxotron

GitHub Workflow Status

ASSIMP based general purpose model viewer ("turntable") created for the Revision 2021 3D Graphics Competition

image

Usage

Check the wiki for information on how to use it.

Keyboard shortcuts

  • F11: Toggle menu
  • F: Refocus camera on mesh
  • W: Toggle wireframe / edged faces
  • C: Toggle auto camera
  • PgUp / PgDn: Cycle through shaders
  • Alt-F4: Enter hyberwormtunnel

Mouse operations

  • Left click & drag: Rotate camera
  • Right click & drag: Rotate light / skybox
  • Middle click & drag: Pan camera

Requirements

OpenGL 4.1 is required.

Building

You're gonna need CMAKE

Credits

Libraries and other included software

These software are available under their respective licenses.

The remainder of this project code was (mostly) written by Gargaj / Conspiracy and is public domain; PBR lighting shaders by cce / Peisik. Large portions of the code were cannibalized from Bonzomatic.

Textures and cube maps

All HDR textures are courtesy of the HDRLabs sIBL archive.

Comments
  • Translucency support

    Translucency support

    You want to ignore resource.rc changes, and possibly you don't want the changes from 6ff7230. Most risky change is the emissive & alpha reading code, only tested with Maya fbx exports at this point.

    opened by trevorvanhoof 2
  • PBR quality fixes

    PBR quality fixes

    • Fix sometimes black speculars by clamping BRDF LUT lookup (turns out its first column is all zeros...)
    • clean up skybox sampling (had Y-axis flips that weren't necessary)
    • tweak diffuse ambient's magic constants for a less shiny look
    opened by seece 1
  • Read sun position from an IBL file

    Read sun position from an IBL file

    Skysphere's rotation is now relative to light direction so that the sun (lights[0]) always shines from (lightYaw, lightPitch) direction. Changing the pitch won't change the skyboxes orientation, just like it was before.

    opened by seece 0
  • Blurry skyboxes

    Blurry skyboxes

    • blurry skyboxes
    • dither with noise (both sky and model)
    • read the blurry irradiance texture also in specgloss shader

    image

    image

    Left: no diffuse ambient, right: with diffuse ambient read from irradiance map

    opened by seece 0
  • Create a better system for color maps

    Create a better system for color maps

    Allow importing of color-or-texture values and sending them to the shader, something like struct map { bool isColor; texture2D texture; vec4 color; } and get(map,uv) { return map.isColor ? texture(map.texture,uv) : map.color; }

    opened by Gargaj 0
  • Quality fixes

    Quality fixes

    • Compute view vector in vertex shader
    • Increase roughness if normal map was minified (its LOD was > 0) and had variation (normalmap vector length < 1.0)

    Here's how the variation hack works: normal_variation_to_roughness

    There's a "proper" way to do it via VMF lobes https://graphicrants.blogspot.com/2018/05/normal-map-filtering-using-vmf-part-3.html but it's still not 100% correct for GGX normal distribution function so it may not look better anyway.

    opened by seece 0
  • Diffuse IBL

    Diffuse IBL

    spheres

    Load irradiance maps (called "Env" in the HDR Labs nomenclature) and samples them in pbr.fs. If no map is present a blurred skybox is used which looks pretty much the same.

    opened by seece 0
  • Add two more lights

    Add two more lights

    image

    Directions and colors are hard coded right now in a rough "key & fill & back" formation.

    Only the first light is used in the specgloss shader since it would be too bright otherwise.

    opened by seece 0
  • more keyboard shortcuts

    more keyboard shortcuts

    • [ ] alt-enter to switch fullscreen/windowed
    • [x] switching from physical based to non physical based
    • [x] wireframe on and off
    • [x] idle animation on and off.
    • [ ] hide cursor when you use F11 to hide menu
    opened by Gargaj 1
Releases(2022-11-02)
Owner
Polyurethane audio breeder / semi-organic code regurgitation trooper.
null
an SVG image viewer for plan9

svg A native SVG file viewer for Plan9. When using the -9 command line flag, the image is dumped to standard output in plan9 image format. svg relies

phil9 15 Oct 21, 2021
Polyscope is a C++/Python viewer and user interface for 3D data such as meshes and point clouds

Polyscope is a C++/Python viewer and user interface for 3D data such as meshes and point clouds. It allows you to register your data and quickly generate informative and beautiful visualizations, either programmatically or via a dynamic GUI.

Nicholas Sharp 1.3k Dec 30, 2022
Model synthesis is a technique for generating 2D and 3D shapes from examples.

Model Synthesis Model synthesis is a technique for generating 2D and 3D shapes from examples. It is inspired by texture synthesis. Model synthesis was

Paul Merrell 82 Jan 4, 2023
This Project Implement an interactive camera for 3D model using Quaternion. It have some advantages over eulerian camera like no gimbal lock and faster to compute.

Quaternion-Camera This Project Implement an interactive camera for 3D model using Quaternion. It have some advantages over eulerian camera like no gim

Phan Sang 8 Nov 10, 2022
Basic framework for D3D11 init, model/texture loading, shader compilation and camera movement.

reed-framework Basic framework for D3D11 init, model/texture loading, camera movement, etc. Instructions: #include <framework.h> Link with framework.l

Nathan Reed 34 May 18, 2022
A model viewer for Quake 1 and Hexen 2 with a focus on accurate representation.

LunarViewer A model viewer for Quake 1 and Hexen 2 with a focus on accurate representation. Powered by raylib and dear imgui! Features Support for Qua

Luna Ryuko Zaremba 37 Jan 4, 2023
ArrayFire: a general purpose GPU library.

ArrayFire is a general-purpose library that simplifies the process of developing software that targets parallel and massively-parallel architectures i

ArrayFire 4k Dec 27, 2022
A General-purpose Parallel and Heterogeneous Task Programming System

Taskflow Taskflow helps you quickly write parallel and heterogeneous tasks programs in modern C++ Why Taskflow? Taskflow is faster, more expressive, a

Taskflow 7.6k Dec 31, 2022
jemalloc websitejemalloc - General purpose malloc(3) implementation that emphasizes fragmentation avoidance and scalable concurrency support. [BSD] website

jemalloc is a general purpose malloc(3) implementation that emphasizes fragmentation avoidance and scalable concurrency support. jemalloc first came

jemalloc memory allocator 7.7k Jan 7, 2023
mimalloc is a compact general purpose allocator with excellent performance.

mimalloc mimalloc (pronounced "me-malloc") is a general purpose allocator with excellent performance characteristics. Initially developed by Daan Leij

Microsoft 7.6k Dec 30, 2022
An open-source general-purpose programming language

An open source general purpose high-level programming language! [OO-N-YUH] This language is gonna onya other languages Vs Code Extention Language Supp

Tech Penguin 4 Aug 9, 2021
A General-purpose Parallel and Heterogeneous Task Programming System

Taskflow Taskflow helps you quickly write parallel and heterogeneous task programs in modern C++ Why Taskflow? Taskflow is faster, more expressive, an

Taskflow 7.6k Dec 26, 2022
🎩 An interpreted general-purpose scripting language 🔨

Dunamis Version 0.0.0.2 - Alpha Version 1.1 An interpreted general-purpose programming language Contents Syntax Functions Variables Objects Enums Incl

Tech Penguin 4 Dec 21, 2021
general purpose os

ticx A free operating system for the x86 architecture. What does ticx have? Handmade bootloader IDT, GDT Paging Legacy BIOS support What does it do? S

ababo 4 Nov 20, 2021
A general purpose data serializer.

GPDS is a General Purpose Data Serializer implemented as a very small C++ library. It allows to serialize C++ classes to and from XML files in a gener

Simulton 11 Dec 2, 2022
Multi-Joint dynamics with Contact. A general purpose physics simulator.

Multi-Joint dynamics with Contact. A general purpose physics simulator.

DeepMind 5.2k Dec 31, 2022
ArrayFire: a general purpose GPU library.

ArrayFire is a general-purpose tensor library that simplifies the process of software development for the parallel architectures found in CPUs, GPUs,

ArrayFire 4k Jan 6, 2023
The pico can be used to program other devices. Raspberry pi made such an effort. However there is no board yet, that is open-source and can be used with OpenOCD as a general-purpose programmer

pico-probe-programmer The pico can be used to program other devices. Raspberry pi made such an effort. However there is no board yet, that is open-sou

martijn 22 Oct 15, 2022
GPTPU: General-Purpose Computing on (Edge) Tensor Processing Units

GPTPU: General-Purpose Computing on (Edge) Tensor Processing Units Welcome to the repository of ESCAL @ UCR's GPTPU project! We aim at demonstrating t

Extreme Storage and Computer Architecture Lab 34 Dec 23, 2022