颜色管线精粹
前言 接触图形学中颜色相关的概念许久了,色域,LDR,HDR,ToneMapping,伽马空间,线性空间,sRGB,ACES等名词也都算耳熟能详,但一直以来都是零散细碎的知识点,从来没系统整理过。 个人一直关注UE的发展和官方油管频道,恰巧看到了一个颜色管线的视频,算是事无巨细的详解了上面每一个概念和他们之间的关系,遂有此文,与诸君共赏。 今天我们要讨论发生在引擎和渲染过程中的颜色管线以及特定的颜色转换 线性渲染 我们先想象一个简化版的渲染管线,一个纹理输入,在线性空间下渲染,经过后处理,最后显示在窗口中(或者存储到一个文件中) 我们先从中间看起,即Linear Rendering in RGB,既然是渲染,我们首先应该关注的就是颜色值 颜色值代表光量,可以是范围很大的值,也可以是范围很小的值 并且他们是线性的,这意味着如果我们将颜色值翻倍,我们得到的光量也是翻倍的 他们用于引擎的工作环境和运行时环境的颜色空间中 在更加深入之前,我们先了解一下颜色的基础知识 颜色基础知识 一般我们在谈论颜色空间的时候,同时涵盖了颜色编码和颜色空间这两个概念,我们先来看颜色空间 颜色空间 ...
2024个人年度总结
2024年是我职业生涯以来过的最快的一年,一方面是大部分时间都在加班中度过,另一方面是对游戏行业的烈火般的热情终究是在这一年燃烧殆尽,感觉曾经认定的一切都是没有意义的,便近乎自暴自弃的荒废了大半闲暇时光 为何? 我自诩脾气虽然不算好,但耐力还算说得过去,饶是如此,一次次被人打断的工作状态,一个个问了一遍又一遍问题,不断积压的压力和怒气,长时间没有获取的满足感。。。,这些种种最终让我如同泄了气的皮球,歇斯底里,状若疯魔,因为我一直以为,游戏行业不该是这样 在那之后,我如同失去了心气神,从锱铢必较,据理力争,变成了得过且过,能跑就行 无数个夜深人静里,我平静的思考,开始回顾自己从写下第一行printf("Hellow World");,第一个游戏Demo,第一个B站技术视频,第一篇技术博客,第一次参加实习,第一次正式工作,到如今这般田地,我到底做错了什么,其他人又错在哪里 都没有错 我为项目尽心尽力,一方面承接除剧情外的各个模块的功能需求,性能优化,一方面应付已经上百人的CG美术团队,泥人尚有三分脾气,我偶尔怒从心中起又有何不可?不如说,我能做到这一步已经是仁至义...
ProjectS中的地形系统-Terrian Shading(Material Id)
地形系统思路来自 ProjectS中的GPU Driven 前言 再来回顾下传统地表材质与我们定好的方案之间的对比: 传统Weight Blend方案:通过纹理 + Mask图实现多纹理混合渲染 每多一张纹理贴图,就要多一份遮罩数据。 由于每点的mask总和为1,所以改变一层需要动到其他所有层的数据,耦合度太高,不方面大规模修改迭代。 编辑器在处理edit layer时,由于需要全局的归一化操作,所以会让上层的layer表现非常奇怪。 随着edit layer的增加,内存和操作延时也会是个问题。 渲染时由于每个地块使用的weightmap各不相同,所以加大了合批处理的难度。 Material Id方案:确保每个点只有一种纹理贴图的情况下,通过一张Material Id图控制,最后通过双线性插值混合平滑,这里的材质不是指材质球,而是指一个数据结构,其中包含材质参数,贴图索引以及其他信息 优点是这张MaterialId,它相当于一个间接的索引,每个值表示一张纹理图。8位的单通道materialID图就足以支持超过200种纹理图。它的大小可控,不会随着纹理数量的增加而增加。同...
解决地形渲染里不同材质之间的接缝问题
机缘巧合下,遇到了地形渲染上常见的接缝问题,常见类型有如下几种: 图集+双线性插值导致采样结果错误 Mipmap跳变,导致两个像素采样得到的值跳变 采样器Point模式采样精度不足,导致在纹素临界处跳变 不同LOD Mesh导致的模型接缝 以上几点在 不帅的 地形5种常见接缝的修复方案 中均有解决方案,而ProjectS遇到的问题,严格来说也可以归类于第二点,不过原因却是有些耐人寻味,请看下文 临时写法造成的意外 出于快速验证方案的目的,我直接通过if-else进行纹理采样,逻辑也很简单,根据不同的index采样不同的纹理 1234567891011121314151617float4 SampleTexture2D(int index, float2 uv){ float2 finalUV = TRANSFORM_TEX(uv, _GrassTex); if (index == 0) { return SAMPLE_TEXTURE2D(_GroundTex, sampler_GroundTex, finalUV); ...
ProjectS中的纹素密度规划
很长一段时间里,我都对游戏中各种贴图的分辨率规范认知处于一种混沌的状态,比如离镜头远的给1024分辨率,离镜头近的给2048分辨率,大物体给2048分辨率,小物体给512分辨率等等,也就是纯凭感觉,虽然不科学,但it works! 直到某天刷知乎看到了关于此类问题的讨论和技术分享,方才恍然大悟 浅谈容易被忽视的纹素密度(Texel Density) 我该给一个3D物体用多大的贴图?——游戏工程中快速确定物体贴图分辨率的实践方法 本篇文章是对ProjectS中纹素密度选择的过程总结,以及相关工具分享 Mipmap验证工具制作 源代码来自我该给一个3D物体用多大的贴图?——游戏工程中快速确定物体贴图分辨率的实践方法,做了一些优化整理 内容也很简单,就是手动将对应分辨率的基元mipmap写入纹理中,具体优化为: 支持0-7级的mipmap指定,生成对应的纹理,实际上7级的时候纹理大小已经来到8192分辨率了,再高也没必要 0代表只生成一张64分辨率的纹理,仅有mip0 1代表生成一张128分辨率的纹理,mip1为64 2代表生成一张256分辨率的纹理,mip1为128,mip2...
Android SDK总结
希望看到这篇文章的各位永远不会处理Android SDK相关的工作内容,谷歌,我真是超丝你的梦啊! 基础概念 JDK (Java Development Kit) JDK 是Java开发工具包,它是开发Java应用程序的基础工具集。JDK包含了Java编译器(javac)、Java运行时环境(JRE)、标准类库以及各种开发工具。 用途: 用于编写、编译和运行Java程序。 组成 Java编译器(javac): 将Java源代码编译成字节码。 Java运行时环境(JRE): 包含Java虚拟机(JVM)和标准类库,用于运行Java程序。 开发工具: 如调试器、文档生成器等。 OpenJDK 顾名思义,JDK的开源版本,由 Oracle 主导并由 Java 社区共同开发和维护。OpenJDK 是 JDK 的开源实现,遵循 GPL(GNU General Public License)许可证。 Unity的安卓就是基于此 SDK (Software Development Kit) SDK 是软件开发工具包,Android SDK是专门用于开发Android应用程序的工...
截至《绝区零》来聊聊二次元游戏的未来
序 今年来的主流二次元游戏属实给了我很多惊喜,先是鸣潮,后是绝区零,还有前些天的异环 那么为什么这篇文章是截至绝区零呢?因为在我看来,绝区零是一个相当具有里程碑意义的作品。 画风 冷色调才能接住更深刻成熟的故事 崩坏三于2016.10公测,那年我17岁,匆匆玩过,只觉得动画小人跳来跳去的挺有意思,但也仅此而已,过于可爱和幼态的画风让我对游戏内的各种日常提不起兴趣 2017年的夏天,我接触了《Fate Stay Night》,忽然明白这种赛璐璐+真实感+冷色调的二次元画风才能承担的起那些相对严肃,成熟的故事,倘若把Fate的画风换成崩坏三那种清新,明艳的,即便是HF线中黑Saber对士郎说出“士郎,我是第一次,如此恨你”的时候,我想我也会相当出戏,因为明艳的画风让我感觉这是在过家家,没有生离死别的氛围感。 对于这一点,我在看过《86不存在的战区》之后更加深信不疑 直到今年,距离2016年,跨越了整整8个年头,我也来到25岁这个分水岭一般的年纪,也更加喜欢偏成熟,严肃的作品,因为相比于欢快,明艳的作品,它们能带给我更多的思考和感动 期间《原神》,《幻塔》,《星穹铁道》,《鸣潮》等...
Houdini大纲
总览 Houdini 是一款次时代的程序化建模、动画、特效、模拟、渲染和合成软件包。 Houdini 的强大在于程序化的工作流程。在 Houdini 中工作涉及创建连接在一起的节点网络,描述完成任务的步骤。例如,一个创建盒子的节点可能被连接到一个将盒子的边缘挤出的节点,然后是一个细分多边形的节点,再是一个编辑点位置的节点。这赋予了您巨大的力量: 您可以返回到网络中的先前节点并更改选择、更改设置或替换资产。更改会自动传播到网络中,改变最终结果。您无需撤销或重新开始并重新创建工作,以更改您之前做出的决定。 它鼓励快速原型设计。在探索想法时,您无需丢弃已完成的工作 - 只需重复使用网络的部分或重新配置网络以将其升级为工业级的质量。 由于 Houdini 基于程序生成事物,它拥有许多用于管理极其庞大和复杂场景的工具,包括支持生成/加载几何体,并在渲染时添加细节,而不是将所有内容保存在内存中。 您可以打包网络并将其制作成具有自己界面的新工具,而无需编写任何代码。在 Houdini 中,这些工具被称为数字资产(HDA Houdini Digital Assets)。 节点和网络 Hou...
(译)Forward vs Deferred vs Forward+ Rendering with DirectX 11
在网上鲜少有能全面,具体对比Forward,Deferred,Forward+渲染管线的文章,所以抽空翻译下,分享出来 原文地址:https://www.3dgep.com/forward-plus/ In this article, I will analyze and compare three rendering algorithms: 在本文中,我将分析并比较三种渲染算法: Forward Rendering Forward 渲染 Deferred Shading 延迟着色 Forward+ (Tiled Forward Rendering) Forward+(平铺前向渲染) Contents 1 Introduction 1 介绍 1.1 Definitions 1.1 定义 2 Forward Rendering 2 前向渲染 2.1 Vertex Shader 2.1 顶点着色器 2.2 Pixel Shader 2.2 像素着色器 2.2.1 Material 2.2.1 材质 2.2.2 Textures 2.2.2 纹理 2.2.3 Light...
(译)Ghost Recon Wildlands Terrain Technology And Tools
本文是对https://www.gdcvault.com/play/1024029/-Ghost-Recon-Wildlands-Terrain 进行的中文翻译 大纲 《幽灵行动:荒野》是育碧迄今为止制作的最大动作冒险开放世界游戏,32km x 32km 游戏设定在玻利维亚,我们在游戏中有很多多样性,11 个完全不同的生物群落 湖泊、河流和溪流覆盖了 16 平方公里的表面 道路:超过 600 公里的道路,甚至更多的小径 一条贯穿整个游戏世界的完整铁路网络 游戏中有 200 多个特定位置:营地、地标、前哨站和 58 个完全程序生成的村庄 第一个原型 地形工具 地形渲染的所有细节 程序化工具 第一个原型 https://vimeo.com/207479227 《幽灵行动:未来战士》之后,我们开始尝试更大的地形。 使用真实世界数据,我们使用世界机器优化了 DEM 文件。然后使用 Houdini 创建了一些工具来: 自动创建具有 LOD 的tile网格。 定义一种splat mask,根据坡度、海拔、粗糙度和来自 worldMachine 的其他mask(如flowmap)...