Unity Color Space

2023-11-04

  这一周都在看Unity的Color Space相关的内容,看明白了,写下来给自己和他们参考,有不对的地方欢迎指正.

  显示器所能显示的颜色很有限,于是业界出了sRGB颜色空间,Photo Shop默认的颜色空间就是这个.照相机不用这个,用别的,这里不多说了.

  早期的显示器,电压和颜色变化不是线性关系,是幂函数关系:G(x)^Gamma,Gamma取2.2.于是要想正确在显示器上显示颜色,就该对图本身进行一次校正:G(x)^(1/Gamma),这样最终图像在屏幕上显示就是正确的.

  用Photo Shop做出的图保存之后,是经过了G(x)^(1/Gamma)校正了的,以便显示在显示器上时正确.接着说Unity的Color Space中的Gamma Space和Linear Space.

  在Shader中计算颜色是在线性空间进行的.

  Gamma Space:加载贴图(此时贴图是校正了的),采样,计算,再写到缓冲区,显示在屏幕上.直接显示图没有问题,因为两次运算结果是一个线性变换,能反应出原图.但是如果在原图基础上进行了颜色计算,就会:Final = G(x)^(1/Gamma)(原图) * S(x)(线性颜色计算) * G(x)^Gamma(显示器显示颜色) ,颜色如果S(x)变化了,但Final不是线性变化的,带来了颜色显示不准确.

此外,Alpha混合操作是线性操作,对写入到颜色缓冲区的Final进行线性变换会使得混合颜色不准确.看起来其实说得过去,但那其实并不是我们想要的.

  Linear Spcace:会创建支持sRGB的缓冲区,替换普通的缓冲区.这里我给的解释不明确.同时贴图加载进去之后,保证采样的时候,贴图校正回了原来的线性变换,也就是对贴图进行了一次G(x)^Gamma,这样接下来的Shader执行的输入是线性变化的贴图,计算后结果是正确的.写入到支持sRGB的缓冲区时,硬件会自动对颜色进行G(x)^(1/Gamma),这样显示在显示器上时结果就是正确的了.同时,在此种缓冲区进行Alpha混合时,先将缓冲区的颜色G(x)^Gamma,变换回线性变化,再进行混合,而后再对得到的结果G(x)^(1/Gamma)到缓冲区,这样保证Alpha混合时结果也是正确的.此外,如果应用了HDR,创建了浮点缓冲区,写入和读取浮点缓冲区时都没做特殊处理,里面的内容都是线性变化的,在将浮点缓冲区写入带sRGB的缓冲区时再一次性进行G(x)^(1/Gamma).

  以上内容多数是Unity官方文档中的(搜:Unity Linear Space就有).但是想整明白还不是看几遍就能明白的,这个问题也困扰了我大半年,这个礼拜才决心整明白.为了一鼓作气写完这个,延迟了吃饭的时间,上次这样,还要追溯到大概2年前了.

  补充一下,贴图的Bypass sRGB sampling的意思是绕过G(x)^Gamma.值得注意的是,这个选项只有在设定为Linear Space后才起作用,因为Gamma Space本来就是不进行G(x)^Gamma这步处理的.适用于用来look up的贴图,当然还有法线贴图.把法线贴图的Import Type改为Texture后会发现选中了Bypass sRGB sampling.至于为什么UI也要选中Bypass sRGB sampling,我还不清楚.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Unity Color Space 的相关文章

  • Unity用Vuforia做AR实现脱卡效果

    有时在识别目标丢失后我们仍希望虚拟物体能够出现在摄像机前 或者到一个特定的位置 我们能对其进行操作 这就是脱卡功能 自带的脱卡功能应该是ExtendedTracking 允许模型在识别图丢失的时候还存在 位置不变 在丢失的时候的位置 这样也
  • Unity—UGUI

    每日一句 读数 学习 去更远的地方 才能摆脱那些你不屑一顾的圈子 目录 InputFiled输入框 例 用户名和密码 Toggle组件 案例 冷却效果 InputFiled输入框 Text Component 输入文本组件 Text输入内容
  • unity粒子特效附上贴图后播放动画

    转自 http jingyan baidu com article f96699bbb1a0d6894f3c1b77 html 参考 http www unitymanual com thread 2993 1 1 html dsign a
  • Unity单元测试流程

    文章目录 环境 流程 1 创建一个存放 单元测试程序集 的目录 2 打开 Test Runner 窗口 3 选择单元测试模式 4 创建单元测试程序集 5 创建测试脚本 6 运行测试 环境 Unity 2020 3 3f1 流程 1 创建一个
  • Unity Animator 动画没切换

    恶魔射手 Survival Shooter 项目 有两个动画 一个是静止时的Idle 一个是走路时候的Move 如下图 设置好动画状态机后发现按方向键后还是Idle 没反应 而一直按着方向键后呢又动起来了 最后找到了真相 原来选中了 Has
  • 蒙特卡洛积分、重要性采样、低差异序列

    渲染公式 渲染的目标在于计算周围环境的光线有多少从表面像素点反射到相机视口中 要计算总的反射光 每个入射方向的贡献 必须将他们在半球上相加 为入射光线 与法线 的夹角 为方便计算可以使用法线向量和入射向量 单位化 的乘积表示 对于基于图像的
  • Unity 安卓打包

    Unity打包的方式有很多种 自动打包和手动打包 今天小弟就鼓捣鼓捣unity手动打包 如果想动态打包的话 可以去看其他大佬的帖帖哈 unity打包先配置环境 下载unity的时候可以顺道把unity的安卓包下载下来 如果忘了也没事 可以从
  • Unity中按钮检测鼠标状态

    改方法主要是用于按钮检测鼠标的进入 滑出 点击 抬起 长按 长按停止 1 先将下面这个脚本挂载到需要检测鼠标状态的按钮上 using System Collections using System Collections Generic u
  • Unity中实现倒计时的几种方式

    1 Time time using UnityEngine public class TimeTest MonoBehaviour public float secound 10 void Update Timing private flo
  • Unity中UI框架的使用1-添加面板、显示Loading页面

    其中BasePanel和Canvas都是挂在面板的预制物上的 1 导入我们的UI框架 本篇文章中有用的是两个UIPanelType NUIManager和NBasePanel 会放在文章最后供大家使用 2 先将我们做好的Panel设置成预制
  • Unity之获取游戏物体对象或组件的几个方法

    文章目录 前言 通过物体名称获取对象 GameObject Find Transform Find 通过物体标签获取对象 GameObject FindWithTag GameObject FindGameObjectWithTag Gam
  • unity工程崩溃资源找回

    1 Unity死机未保存场景 当你在Unity中编辑场景 突然死机时 可以在项目文件目录中找到Temp文件夹 双击文件夹 找到 Backupscenes文件夹 把后缀为 backup的文件后缀改为 unity 然后拖进Unity的Proje
  • Unity打包WebGL的优化常用操作?

    1 贴图部分优化 如果贴图格式时2048 在不影响画面效果的情况下 改成1024或者5 12 还可以缩小包体 2 压缩和解压缩问题 WebGL打包的时候分三种压缩情况 gzip 比Brotli文件打 但打包快 http和https都支持 B
  • 【Unity步步升】监控与检测物体的各种方案,如:射线、碰撞、挂载等...

    在制作AR模型数值控制方案的时候遇到了检测的问题 学习过程受益匪浅 故今天为大家整理带来一篇监控与检测物体的参考方案集合 目录 一 射线检测 二 物体存在检测 三 碰撞检测 一 射线检测 单射线检测 首先完成搭建场景如下图1 1 我这里用到
  • Unity万向节死锁解决方案(2023/12/4)

    1 万向节死锁无法解决 这是因为它的特性就是如此 就像玻璃杯就是玻璃 这不可否认 别钻牛角尖昂 2 大多数情况下欧拉角足够用 例如 CF 摄像机不可能绕z轴旋转 x轴旋转也不会超过九十度 因为那样人物的腰子会被扭断 塔防游戏 保卫萝卜 吃鸡
  • unity3d image组件不显示

    需要将UI组件放到画布下面
  • unity小球跟随音乐节奏放大缩小和改变颜色

    放在小球身上 设置对应组件即可 using System Collections using System Collections Generic using Unity VisualScripting using UnityEngine
  • 【Unity】如何让Unity程序一打开就运行命令行命令

    背景 Unity程序有时依赖于某些服务去实现一些功能 此时可能需要类似打开程序就自动运行Windows命令行命令的功能 方法 using UnityEngine using System Diagnostics using System T
  • 【Unity】运行时创建曲线(贝塞尔的运用)

    Unity 运行时创建线 贝塞尔的运用 1 实现的目标 在运行状态下创建一条可以使用贝塞尔方法实时编辑的网格曲线 2 原理介绍 2 1 曲线的创建 unity建立网格曲线可以参考 Unity程序化网格体 的实现方法 主要分为顶点 三角面 U
  • 游戏开发常见操作梳理系列之——玩家信息的显示系统

    在游戏中 有不少游戏在左上角会出现玩家的头像和等级以及血量 这就是玩家的信息显示系统 那么这些是如何制作的呢 接下来我将讲讲代码的操作 其它操作我会在其它笔记中一一说明 敬请期待 信息的显示相当简单就是控制一些UI 然后在其它系统里面填写相

随机推荐

  • 【SpringCloud】Stream消息通知使用

    文章目录 概述 标准MQ 配置 POM YML 示例 消息发送 配置RabbitMQ可视化插件 消息消费者 遇到的问题 复现 解决 修改YML 注意 概述 屏蔽底层消息中间件的差异 降低切换成本 统一消息的编程模型 官网 https spr
  • TypeError: 'builtin_function_or_method' object has no attribute '__getitem__'

    谷歌下的翻译是 内置函数或方法对象没有获取项目属性 错误的是在内置的函数中符号写错 例如 range 1 5 写成 range 1 5
  • BaseRecyclerViewAdapterHelper之BaseMultiItemQuickAdapter实现多级列表功能

    这里实现的是一个三级列表效果 可展开和收起 三个实体类ExpandItem Expand1Item和Expand2Item 均要继承AbstractExpandableItem 实现接口MultiItemEntity public clas
  • Spring Cloud介绍

    给你们看看我上课在干啥你就知道我为啥啥都不会了 上课笔记 emmm 字比较丑 我还记得那是一堂英语课 老师不让用电子设备 我只能手写我这篇文章的思路 所以 冒着期末要挂科的风险 我也得把这篇文章写完 给大家分享知识 自己也能重新复习和认识一
  • JVM类的加载机制

    1 类的加载机制 类的加载指的是将类的 class文件中的二进制数据读入到内存中 将其放在运行时数据区的方法区内 然后在堆区创建一个java lang Class对象 用来封装类在方法区内的数据结构 类的加载的最终产品是位于堆区中的Clas
  • 算法分析与设计编程题 贪心算法

    活动安排问题 题目描述 解题代码 vector
  • 线程池以及UDP、socket通信

    目录 线程池 UDP通信 本地socket通信 线程池 什么是线程池 是一个抽象的概念 若干个线程组合到一起 形成线程池 为什么需要线程池 多线程版服务器一个客户端就需要创建一个线程 若客户端太多 显然不太合适 什么时候需要创建线程池呢 简
  • QT (C++)安装5.14

    QT 5 14 安装 介绍 C 版本 据说 这个版本是最后一个提供离线安装包的QT5 例如 qt opensource windows x86 5 14 2 exe 2 4G 最后一个可能是5 14 2 下载方式 1 在https down
  • unity开发VR的项目01——环境配置(unity2020.3)

    使用unity创建一个steam VR项目 首先要进行环境的配置 一 Steam VR插件导入 创建一个unity 3 项目 在 商店 window asset store 中搜索SteamVR Plugin 找到并导入到unity资源 也
  • STL:map

    首先包含头文件 include
  • 适合小白的详细虚拟机网络配置方法(附图)

    首先VMware的版本号需要16 0或者16 0以上版本 我用都版本应该是16 0的 有点悠久忘记了版本号 图标长这样 接下来右击镜像 点击设置 将网络适配器设置为NAT 点击编辑 再点击虚拟网络适配器 选择VMnet8 点击NAT设置 记
  • matlab矩阵处理

    2 1特殊矩阵 通用特殊矩阵 zeros函数 零矩阵 A zeros 2 3 A 0 0 0 0 0 0 zeros size reshape A 3 2 ans 0 0 0 0 0 0 ones函数 全一矩阵 eye函数 单位矩阵 ran
  • 三进制计算机_三进制会取代二进制计算机吗?

    三进制计算机 是以三进制数字系统为基础而发展的计算机 三进制计算机跟二进制计算机比 优势在哪里 三进制逻辑电路比二进制逻辑电路速度更快 可靠性更高 而且需要的设备和电能也更少 三进制代码的一个特点是对称 即相反数的一致性 因此它和二进制代码
  • express文件上传中间件Multer最新使用说明

    原文地址 http cnodejs org topic 564f32631986c7df7e92b0db 说明 multer是express官方推荐的文件上传中间件 它是在busboy的基础上开发的 目前multer的最新版本为 1 1 0
  • spring boot2 (40)- JWT token

    本篇介绍JWT token的生成和解析的基本方法 pom xml
  • JavaScript代码是怎么执行的?

    前言 众所周知 JavaScript是单线程语言 所以JavaScript是按顺序执行的 先编译再执行 变量提升 请看下面的例子 console log cat catName Chloe var cat Chloe function ca
  • 高级程序员解决问题的思维模式和普通程序员的区别在哪里?

    作者主页 士别三日wyx 先给你出一道题 看你会如何思考 假设你是一个程序员 常年保持自学和超长工作时长的状态 承受着不为人知的压力和痛苦 面对同行程序员的攀比和压力 在公司title 年薪 房子之间深陷 35岁大限越来越近 头顶日愈清凉
  • 2022年同济大学计算机考研复试分数线

    同济大学属于34所自划线院校之一 考研复试分数线分国家线和院校自划线 院校自划线公布时间一般早于国家线 报考同济大学计算机研究生的考生 复试分数线请以院校官网公布的分数线为准 2021年同济大学计算机考研复试分数线公布日期在3月13日 预计
  • ubuntu 22 安装elasticsearch

    安装说明 在 Ubuntu 上安装 Elasticsearch DEB 文件的过程与上面提到的大致相同 你可以按照以下步骤进行操作 1 首先 打开终端 并进入包含 Elasticsearch DEB 文件的目录 cd home userna
  • Unity Color Space

    这一周都在看Unity的Color Space相关的内容 看明白了 写下来给自己和他们参考 有不对的地方欢迎指正 显示器所能显示的颜色很有限 于是业界出了sRGB颜色空间 Photo Shop默认的颜色空间就是这个 照相机不用这个 用别的