GAMES104 作业2-ColorGrading

这篇具有很好参考价值的文章主要介绍了GAMES104 作业2-ColorGrading。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

ColorGrading网上资料很就多就不介绍了,简单来说就是将ps中一个像素的r-g-b值转换成x-y-z坐标映射到一个三维的颜色的颜色表(LUT)得到新的颜色,从而使场景更具电影感和好看。

以104中的色链LUT为例(ps中导出的LUT为矩形,但原理相同)

GAMES104 作业2-ColorGrading

对色链LUT简单图解就如上图所示,以颜色RG为xy值形成一个2d贴图,将一系列这样的2d贴图以B值作为索引连接在一起,成为一个可以使用RGB作为XYZ坐标进行索引查找颜色值的3维数组,注意这里B值不是连续的(为了降低LUT内存占用,压缩),后续具体颜色值通过插值获得。

以上图的点p为例,现在场景中一个像素点p的颜色值为(r, g, b),去查找表中发现b值位于b2和b3之间,则取b2贴图和b3贴图中(r,g)对应的两个点L,R做线性lerp即可得到p映射后的值。

先求出2d贴图数量
blockNum = lut.width / lut.height

求出b值位置
blockPLeft = floor(blockNum * p.r)
blockPRight = ceil(blockNum * p.r)

求出左贴图和右贴图中对应像素(L、R)的u值。除以lut长度归一化到0-1范围
uL = (blockPLeft * lut.height + p.r * lut.height) / lut.width
uR= (blockPRight * lut.height + p.r * lut.height) / lut.width

求出v值,注意计算方式和lut的格式有关系
v = p.g

根据uv值对lut进行采样
pixelL = texture(lut, vec2(uL, v))
pixelR = texture(lut, vec2(uR, v))

根据b值对采样结果进行插值
weight = fract(blockNum * p.r)
outColor = pixelL * weight + pixelR * (1 - weight)

对于104的作业,只需要改color_grading.frag即可,还是比较简单的

highp ivec2 lut_tex_size = textureSize(color_grading_lut_texture_sampler, 0);

highp vec4 color       = subpassLoad(in_color).rgba;

highp vec2 lutSize = vec2(lut_tex_size.x, lut_tex_size.y);

highp float blockNum = lutSize.x / lutSize.y;

highp float blockIndexL = floor(color.b * blockNum);
highp float blockIndexR = ceil(color.b * blockNum);

highp float lutCoordXL = (blockIndexL * lutSize.y + color.r * lutSize.y) / lutSize.x;
highp float lutCoordXR = (blockIndexR * lutSize.y + color.r * lutSize.y) / lutSize.x;

highp float lutCoorY = color.g;

highp vec2 lutCoordL = vec2(lutCoordXL, lutCoorY);
highp vec2 lutCoordR = vec2(lutCoordXR, lutCoorY);

highp vec4 lutcolorL = texture(color_grading_lut_texture_sampler, lutCoordL);
highp vec4 lutcolorR = texture(color_grading_lut_texture_sampler, lutCoordR);

highp float weight = fract(color.b * lutSize.y);

out_color = mix(lutcolorL, lutcolorR, weight);

GAMES104 作业2-ColorGrading


注意出现这种花纹可能是没有正确混合b值

最后我的结果。
GAMES104 作业2-ColorGrading

104小引擎中的color grading是post-tonemapping的,根据real-time rendering4th 8.2.3章指出,现在业界更多喜欢使用pre-tonemapping的colorgrading,可以提高更高的画面质量和保真度。
但是我太菜了呜呜,完全不会用vulkan,改了很久pre-tonemapping没有成功。想加一个pass做个描边,加上去才发现不知道怎么给ps传深度。。。学习路任重而道远,后续补上。文章来源地址https://www.toymoban.com/news/detail-400079.html

到了这里,关于GAMES104 作业2-ColorGrading的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Games104现代游戏引擎笔记高级ai

    World State是一个主观的对世界的认知,并不是一个真实世界的描述 Sensors负责从游戏环境中抓取各种状态 HTN Domain 存放层次化的树状结构Task和之间的关联关系1 Planner 根据World State从 Domain 里规划 task Plan Runner 根据 Planner 设定的计划执行 Task,当 Task 执行过程中发生了很多其他问

    2024年02月06日
    浏览(47)
  • GAMES104里渲染等一些剩下的问题

    Game104渲染的一些剩下的问题 我们先从一个简单的效果开始—环境光遮蔽(Ambient Occlusion,以下简称AO)。大家可以看到,下图中的场景没有任何渲染效果,也没有任何着色效果,但场景呈现出了非常清晰的结构层次感,其中有很多的几何细节,而在光场中表现出了一定的明暗关系

    2024年02月15日
    浏览(31)
  • Games104现代游戏引擎笔记 基础ai

    游戏AI navigation(导航系统) 地图的表达形式, 寻路,路径优化 Map representation: 1.可行走区域(物理碰撞,跳跃距离,攀爬高度) 2.表达形式:waypoint networks(路点网络图),grid(网格),navigation mesh(寻路网格),sparse voxel octree(八叉树) Waypoint Networks: 设置关键点,在关键点之间通过

    2024年02月08日
    浏览(46)
  • Games104现代游戏引擎笔记 网络游戏进阶架构

    玩家2的视角看玩家1的移动是起伏一截一截,并且滞后的 interpolation:内插值,在两个旧的但已知的状态计算 extrapolation:外插值,本质是预测 内插值:但网络随着时间不停地给我信息包时,信息包可以不均匀(由于网络波动等因素),客户端可以根据给的时间将中间值插出来

    2024年02月08日
    浏览(44)
  • [Games104笔记] 游戏中的渲染管线,后处理

    环境光遮蔽算法及效果 ★Ambient Occlusion: An Extensive Guide on Its Algorithms and Use in VR — ARVI VR (arvilab.com) 翻译: 什么是环境光遮蔽?都有哪些算法?又为何对AR/VR非常重要? The Dark Side Of Ray-Traced Ambient Occlusion (RTAO) | TheGamedev.Guru AO 环境遮挡 Precomputed AO 预计算环境遮挡 SSAO Screen Space

    2024年02月02日
    浏览(46)
  • Games104现代游戏引擎笔记 网络游戏架构基础

    挑战1:网络同步 挑战2:是网络的可靠性,包括应对网络的延迟,丢包和掉线 挑战3: 反作弊和安全系统,因为网络游戏的本质是经济系统 挑战4:多样性(不同设备,不同服务器),在不停服的情况下热更新 挑战5:大量人数时对高并发,高操作的要求 Socket编程,通过接口,确认好相

    2024年02月08日
    浏览(59)
  • 【Unity大气散射】GAMES104:3A中如何实现大气散射

    写在前面 前两天学习并整理的大气散射基础知识:【Unity大气渲染】关于单次大气散射的理论知识,收获了很多,但不得不承认的是,这其实已经是最早的、90年代的非常古老的方法了,后来也出现了一些优化性的计算思路和方法。因此,我打算先不急着跟各种教程在Unity中实

    2024年02月02日
    浏览(53)
  • Games104现代游戏引擎笔记 面向数据编程与任务系统

    核达到了上限,无法越做越快,只能通过更多的核来解决问题 Process 进程 有独立的存储单元,系统去管理,需要通过特殊机制去交换信息 Thread 线程 在进程之内,共享了内存。线程之间会分享很多内存,这些内存就是数据交换的通道。 管理Tasking的方法 Preemptive Multitasking 抢占

    2024年02月04日
    浏览(60)
  • GAMES104-现代游戏引擎:从入门到实践 - 物理引擎课程笔记汇总

    GAMES104-现代游戏引擎:从入门到实践_课程视频_bilibili GAMES104官方账号 - 知乎 课程主页 课程小引擎Piccolo 课件: GAMES104_Lecture10_Physics System_Basic Concepts.pdf GAMES104_Lecture11_Physics System_Applications.pdf 物理引擎的用途: 碰撞检测 解决碰撞、其它约束限制 更新所有物体的世界坐标(w

    2024年01月17日
    浏览(50)
  • 【GAMES-104现代游戏引擎】4、引擎渲染基础(渲染基础数据、全局光照、PBR、阴影)

    游戏渲染的挑战 一个场景包含成千上万的GO需要的材质、shader、效果都不尽相同,因此 复杂度极高 当代各种硬件的适配难度高,硬件架构一直在变化 高帧率、高分辨率的要求下,使得绘制算法绘制一帧的时间越来越短, 算法效率要求高 绘制系统可以100%的使用显卡,但CPU只

    2023年04月09日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包