A cool-headed display transform

Overview

🌈 Tony McMapface 🌈

Takes HDR Rec.709/sRGB stimulus, and maps it to LDR. It's tranquil and collected, and won't set your eyes ablaze.

About

Tony is a display transform intended for real-time applications such as games. It is intentionally boring, does not increase contrast or saturation, and stays close to the input stimulus where compression isn't necessary.

It ships as a LUT along with a bit of shader code for sampling. There's no tweakables; if you need a different look, do it before and/or after the display transform.

Please note that the shader output is linear, so if "gamma space" sRGB is desired, the sRGB OETF must be used afterwards.

There's also a basic OCIO config with sRGB output.

Disclaimer: Tony McMapface is phenomenological, and tuned to its author's visual system (with mixed success). If you need something mathematically pure, try AgX.

Ports 💖

Derivation

The generator's source code will come at a later time. Meanwhile, here's a TL;DR:

Tony McMapface takes a maximalist approach to the image formation process, and explicitly models perceptual phenomena:

  • Brightness-equivalent luminance of the input stimulus is compressed (accounting for the Helmholtz–Kohlrausch effect).
    • The non-linearity resembles Reinhard.
  • Color hues are preserved during compression, except for a deliberate Bezold–Brücke shift.
  • To avoid posterization, selective desaturation is employed, with care to avoid the Abney effect.

As can be expected, the models underlying this process are imperfect, thus a liberal amount of eyeballing and fine tuning was applied.

Examples

Acknowledgments

Thanks to Chris Brejon, David Briggs, Jed Smith, Troy Sobotka, and Alex Tardif for their excellent write-ups about color.

Special thanks to Troy Sobotka for eye-opening discussions, and triggering my obsessions 🙈

License

This contribution is dual licensed under EITHER OF

at your option.

You might also like...
A visual canvas and virtual machine for writing assembly to build cool things. Create machines and connect them together.
A visual canvas and virtual machine for writing assembly to build cool things. Create machines and connect them together.

Visual Assembly Canvas A highly visual assembly editor, infinite canvas for wiring blocks and machines together, bytecode virtual machine runnable nat

Transform Linux Audit logs for SIEM usage

Linux Audit – Usable, Robust, Easy Logging TLDR: Instead of audit events that look like this… type=EXECVE msg=audit(1626611363.720:348501): argc=3 a0=

audioviz is a libary to transform raw audiodata to be visually pleasing.

audioviz A modular and simple libary to make raw and realtime audiodata captured for example from cpal visually more appealing. It is not intended for

A tool to deserialize data from an input encoding, transform it and serialize it back into an output encoding.

dts A simple tool to deserialize data from an input encoding, transform it and serialize it back into an output encoding. Requires rust = 1.56.0. Ins

A set of cryptographic primitives for building a multi-hop Proxy Re-encryption scheme, known as Transform Encryption.

recrypt A pure-Rust library that implements a set of cryptographic primitives for building a multi-hop Proxy Re-encryption scheme, known as Transform

Instrument and transform wasm modules.

wasm-instrument A Rust library containing a collection of wasm module instrumentations and transformations mainly useful for wasm based block chains a

SWC Transform to prefix logs. Useful for adding file and line number to logs

SWC Transform to prefix logs. Useful for adding file and line number to logs

TODO pass transform struct instead of trying to modify particles everywhere.

Sparticles RS TODO pass transform struct instead of trying to modify particles everywhere. Roadmap add animations. move particle away if on top of eac

Automatically transform your Next.js Pages to use SuperJSON with SWC

🔌 NEXT SUPERJSON PLUGIN export default function Page({ date }) { return ( div Today is {date.toDateString()} /div ) } // You c

SWC plugin for transform Vue3-jsx syntax

swc-plugin-transform-vue3-jsx 💡 SWC plugin for faster conversion vue3-jsx. Installation npm npm install swc-plugin-transform-vue3-jsx -D yarn yarn ad

Transform your terminal into an art canvas where you can draw stuff!
Transform your terminal into an art canvas where you can draw stuff!

Termdraw Turn your terminal into the drawing cavnas of your dream... or not! Installation To install this dream-come-true of a tool simply run cargo i

Rust implementations of Fast Fourier Transform convolution and correlation for n-dimensional arrays

fftconvolve Rust implementations of Fast Fourier Transform convolution and correlation for n-dimensional arrays Examples 1-dimensional use fftconvolve

Rust-lang Continuous Wavelet Transform(CWT) library inspired by fCWT.

fastcwt Rust-lang Continuous Wavelet Transform(CWT) library inspired by fCWT. This crate is a direct translation of fCWT Library written in C++ by Art

Transform tagged Markdown string to HTML during build time.

tagged-md Transform tagged Markdown string to HTML! Check out the examples! Motivation Have you ever written HTML strings in your JavaScript code? It'

This is a small demo of how to transform a simple single-server RocksDB service written in Rust into a distributed version using OmniPaxos.

OmniPaxos Demo This is a small demo of how to transform a simple single-server RocksDB service into a distributed version using OmniPaxos. Related res

Transform jsx/tsx files to reactive views in js/ts to use in Web Components, insert into DOM or integrate with other libraries/frameworks
Transform jsx/tsx files to reactive views in js/ts to use in Web Components, insert into DOM or integrate with other libraries/frameworks

viewmill Features | Installation | Getting Started | Notes | Examples viewmill is aimed to create complex UIs from a simple form of JSX. It statically

ratlab is a programming platform designed loosely for hobbyist and masochist to analyse and design stuff and things that transform our world?
ratlab is a programming platform designed loosely for hobbyist and masochist to analyse and design stuff and things that transform our world?

ratlab A programming language developed by Quinn Horton and Jay Hunter. ratlab is a programming platform designed loosely for hobbyists and masochists

Transform Obsidian Vault's notes into web pages

Transform Obsidian Vault's notes into web pages. Converts your markdown notes, created in Obsidian, into fully functional site, ready for deployment.

A tool to display the minimap of a game larger on a second screen
A tool to display the minimap of a game larger on a second screen

maximap A tool to display the minimap of a game larger on a second screen. Should work on all operating systems supported by captrs and rust_minifb, s

Comments
  • Issues with dds format

    Issues with dds format

    Hello @h3r2tic and thanks for your great work!

    Unfortunately I had issues trying to open the .dds LUT in Unity 2022, therefore I tried converting it, without luck.

    I also tried using the ktx2 file provided in #2, but both software mentioned above had issues opening that file as well. Even an up-to-date Unity ktx importer failed.

    Do the above ring a bell ?

    Suggestion: A raw data dump of the LUT's contents would be useful, and trivial to directly load into an HLSL Texture3D object. I assume it's a W x H x D array of 32-bit floats ?

    Thanks for your time!

    opened by GeorgeAdamon 10
  • KTX2 LUT texture

    KTX2 LUT texture

    Hi! I was experimenting with https://github.com/expenses/ktx2-tools and thought I'd cook up a KTX2 version of the LUT texture as that might be more usable for some folks. I supercompressed it with Zstandard so it's a little bit smaller (354092 bytes vs 442368). I skipped out on adding a full data format descriptor section to the file as that's the part of the KTX2 spec I don't really get but most readers should be okay with that.

    tony-mc-mapface.ktx2.zip

    opened by expenses 1
Owner
Tomasz Stachowiak
Rust and GPU hacker
Tomasz Stachowiak
Quickly build cool CLI apps in Rust.

QuiCLI Quickly build cool CLI apps in Rust. Getting started Read the Getting Started guide! Thanks This is only possible because of all the awesome li

Pascal Hertleif 538 Dec 5, 2022
very cool esoteric language pls use

okfrick has one memory pointer has less than 5 characters hopefully works well is turing complete (possibly) + - increase memeory pointer value ( - st

null 3 Jun 24, 2021
a simple program that you can scrap, is shit and really simple but is cool.

if you want to run it you need to have installed curl by default scrap youtube, but you can change it, also change the number of threads and run: carg

pai 7 Oct 15, 2021
A cool, fast maze generator and solver written in Rust

MazeCruncher Welcome to maze cruncher! Download Standalone Here Usage To get started, just run the standalone .exe in target/release or compile and ru

null 69 Sep 20, 2022
A webring of people who make cool stuff. technology, music, art, writing, anything goes!

a webring of people who make cool stuff. technology, music, art, writing, anything goes!

Kognise 44 Dec 6, 2022
Goodname is a tool to assist you with cool naming of your methods and software

Goodname is a tool to assist you with cool naming of your methods and software. Given a brief description of your method or software, this tool enumerates name candidates forming subsequences of the description (i.e., abbreviation).

Shunsuke Kanda 118 Dec 28, 2022
A cool log library built using rust-lang

RustLog A cool log library built using rust-lang Installation: Cargo.toml rustlog = { git = "https://github.com/krishpranav/rustlog" } log = "0.4.17"

Krisna Pranav 2 Jul 21, 2022
LL Cool Twitch Tools

LL Cool Twitch Tools Hit me up on my twitch channel This project is a playground twitch API playground for me.

Christopher N. KATOYI 9 Dec 23, 2022
Remember how cool smlinux was? It's now time to bring it back.

smbuilder Remember how cool smlinux was? It's now time to bring it back. What is smbuilder? In short, smbuilder (stylized as all lowercase) is an app

ezntek 3 Apr 11, 2023
A visual canvas and virtual machine for writing assembly to build cool things. Create machines and connect them together.

Visual Assembly Canvas A highly visual assembly editor, infinite canvas for wiring blocks and machines together, bytecode virtual machine runnable nat

Phoomparin Mano 31 Oct 11, 2023