Unity Shader-Matcap(材质捕获)

关于MatCap(Material Capture) 字如其名,就是一张球形贴图,pia叽给拍到模型表面???? 由于转换到了摄像机空间,所以无论从那个方向看,这张图始终都是面向你的(但是由于模型法线方向的不一样,所以会有光的动态变化感觉,但其实的是假的) Shader "TJia/Matcap_Basic" { Properties { _MatCapDiffuse ("MatCapDiffuse (RGB)", 2D) = "white" {} } Subshader { Tags { "RenderType"="Opaque" } 阅读详情

前言

最近通关了《Alan Wake》(心灵杀手),整体感觉很不错,游戏虽然是2010年发行的,但是画面至今看来也还是不错的,尤其是游戏内的体积光效果,贯穿了整个游戏,因为光本身就是这个游戏中最强力的武器。

主人公是一位小说家,但是当你发现你所写的小说都变成了现实的时候,这肯定是一件细思极恐的事情。故事情节一波三折,颇有些美剧的感觉。

每次看到电锯,不由得想起被《生化危机》和《恶灵附身》支配的恐惧,好在这款游戏的电锯不太抗揍。其实《恶灵附身》跟这款游戏有不少相似的地方,都是在“意念”的世界中,所以游戏中经常出现走着走着天上掉下来辆火车啦,走着走着桥飞啦之类的情况。

游戏还是很给力的,我就不多剧透了,下面是本文的正题。之前的blog里面,大多是一些特殊效果以及屏幕后处理相关的内容,但是关于模型本身光照效果的比较少。今天刚好来玩一个简单,但是却很有意思的东东,叫做Matcap。

简介

Matcap,全称为Material Capture,翻译过来就是材质捕获。简单来说就是预先生成的一种存储了光照和反射等信息的贴图,运行时使用法线方向进行采样。Matcap的好处就是可以用很低的消耗来实现很多特殊风格的效果,但是Matcap也有一些缺陷,在于Matcap仅对于固定相机视角的情况较好,这也是Matcap的原理决定的。

Matcap主要是在Zbrush,Mudbox这些软件里面使用的,ZBrush里面雕模的时候有时候虽然没有贴图,但是效果看起来也挺好的,实际上就是Matcap的作用,而且这些美术大佬们不断在扩展这些matcap,积累了很多好玩的matcap效果,而使用这些效果却非常容易,只需要换一下贴图。

Matcap的原理

先来看一下Matcap的原理。先可以考虑一下CubeMap的原理,CubeMap是一个六面体,正常的反射采样时使用的反射对应方向上投影最近的面上进行采样,更简单一点的(应该算是一个Trick了),甚至可以直接使用法线方向进行采样,对于天空盒类型的反射也可以得到不错的效果,即不同法线所指向的方向有不同的效果。而Matcap将这一点发挥得更加淋漓尽致,因为Matcap只用一张图就可以。所以我们需要考虑怎样将这个法线转换到一个合适的区间来采样Matcap。

由于物体的法线是一个三维的朝向,但是我们最终采样到二维贴图也只有两个维度。我们需要去掉一个维度,在相机空间下的物体法线向量,我们可以不考虑Z轴的指向,即不考虑Z轴本身对屏幕空间的XY平面的贡献,因为法线是一个单位向量,如果法线在XY方向上的投影权重很大,那么说明在Z方向的权重就很小,对应到二维的Matcap上采样的位置越靠近边缘;而如果法线在XY方向的投影权重很小,那么Z方向的权重就很大,对应到二维的Matcap上的采样位置就越靠近中心。

接下来我们需要考虑的是在哪一个空间计算Matcap,如果是物体空间或者是世界空间,由于相机位置朝向不确定,不好确定法线的Z方向与屏幕空间的关系,我们不好确定舍弃哪一个维度。而相机空间下的物体在屏幕上的方位都已经大致确定,相机空间下相对运算要比屏幕空间更少一些。所以最合适的实际上就是相机空间下进行计算。

我们可以通过Unity的内置矩阵将法线从物体空间转化到视空间,然后对于是空间的法线方向,由于方向是(-1,1)区间,我们需要再将其*0.5 + 0.5变化到(0,1)区间,就可以实现使用这个xy方向采样Matcap贴图了。

Matcap的实现

上面了解了Matcap的原理,下面直接上代码:

/********************************************************************
 FileName: Matcap.shader
 Description
Matcap的原理和应用 什么是Matcap?Matcap实际上是Material Capture的缩写,即材质捕捉。实际上,这是一种离线渲染方案。类似光照烘焙,将光照或者其它更复杂环境下的渲染数据存储到一张2D贴图上, 再从这张2D贴图进行采样进行实时渲染。 阅读详情

相关推荐

Unity Shader - What is MatCap - 什么是 MatCap - ShaderLab 中实现

文章目录什么是 MatCap?Unity ShaderLab 实现 MatCap然后自己撸一个References 什么是 MatCap? MatCaps Matcap stands for “material capture” and is an image that is used as an image texture to fake a whole material including lighting and reflections in 3D applications. The most co

Jave.Lin 的学习笔记 4250

Unity Shader实战:MatCap技术实现炫酷镭射材质效果

在计算机图形学中,材质渲染是模拟物体表面光学特性的核心技术。传统基于物理的渲染(PBR)流程虽然真实,但计算复杂。MatCap(Material Capture)作为一种高效的渲染技术,其原理是通过预渲染的环境球贴图,根据模型表面法线方向直接采样颜色,从而模拟复杂光照和材质效果,避免了实时光照计算的性能开销。这项技术的核心价值在于以极低的性能成本实现高表现力的视觉风格,特别适用于移动端和风格化渲染需求。在游戏开发、虚拟现实和动态UI设计等应用场景中,MatCap常被用于快速实现金属、丝绸、虹彩等特殊质感。本

weixin_30644369的博客 397

600张MatCap贴图(不同大小64,512,1024)

600张MatCap贴图(不同大小64,512,1024)

MatCap.rar

这个工具可以用于生成matcap图,蛮有意思的一个工具。

UE4-MatCap原理与实现

UE4中节省性能的高光和反射计算原理

ZBrush材质球350个

ZBrush材质球350个, ZBrush, MatCap, PBR, 材质球, Shader, Unity

UnityShader MatCapShader(Unity2018)的实现及优化(一种低消耗“次世代”的渲染技术)

UnityShader MatCapShader的实现及优化(一种低消耗“次世代”的渲染技术) 该项目是基于Unity2018.3.0的 该资源相关的文章链接:https://blog.youkuaiyun.com/u012722551/article/details/105588501

RAG项目简历包装指南:从“流水线工人”到“问题解决者”的跃迁(附代码与思路)

本文代码已在Python 3.11 + CUDA 12.3环境测试,部分功能需LangChain 0.2+支持。

Conan_0728的博客 1885

从‘静态拍照’到‘动态录像’:用Malmquist指数讲好你的效率变化故事(附Stata/R代码)

本文深入探讨了如何利用Malmquist指数构建动态效率分析框架,从静态数据到动态叙事的转变。通过分解技术效率变化(EC)和技术进步(TC),结合Stata/R代码实现四种动态可视化方法,帮助研究者更直观地展示效率变化的动态特征。文章还提供了诊断性叙事结构和比较叙事技巧,助力决策者理解效率提升的来源与趋势。

weixin_32678995的博客 603

H3C交换机Console口连接全攻略:从接线到PuTTY配置(附常见问题排查)

本文详细介绍了H3C交换机Console口的连接与配置方法,包括硬件线缆选择、驱动安装、PuTTY参数设置及常见问题排查。特别针对Console转USB线缆的兼容性和驱动安装难点提供实用建议,帮助网络工程师快速掌握串联调试技巧,解决连接中的黑屏、乱码等典型问题。

weixin_42549451的博客 674

初学者入门机器学习 (ML)的推荐教程

了解基本的机器学习概念并不难。有大量免费的在线博客文章、视频和编码教程可以引导您了解基础知识——从介绍性内容到常见应用程序,再到算法和应用技能。这篇文章总结了一些用于介绍 ML 的最佳免费选项。它按逻辑顺序排列,每个概念都建立在上一个概念的基础上。

u010542847的博客 4615

从零部署DeepSeek V4 Flash:NVIDIA DGX Spark实战指南

GPU加速计算已成为现代人工智能基础设施的核心,其原理是通过并行处理架构大幅提升深度学习模型的训练与推理效率。在AI工程实践中,NVIDIA GPU凭借CUDA生态和专用驱动栈,为大规模语言模型部署提供了硬件基础。本文聚焦于企业级AI服务器部署场景,针对NVIDIA DGX Spark多节点系统的硬件初始化、驱动兼容性配置、容器化部署等关键环节,提供从系统层到应用层的完整解决方案。通过vLLM推理框架的实战配置,演示如何将DeepSeek V4 Flash模型高效部署于多GPU环境,涵盖Tensor Par

weixin_32296621的博客 377

《多模态融合改进》支持目标检测、目标分割、OBB、姿态估计,配置教程

本文以为例,讲解如何配置,支持替换专栏里所有的改进方式。

Limiiiing的博客 795

激光打标轴坐标计算分析

‌:基于坐标差的平方和开方运算,勾股定理将几何关系转化为代数计算,从而实现了从坐标到距离的精确转换‌12。直角三角形的应用从上图可以看到A,B,P三个点连起来就是一个直角三角形了。用勾股定理计算距离 C#有相关的方法直接传参数就可以了。很方便。

StevenChen的博客 308

零基础学simulink仿真建模--使用Simulink来构建一个混合动力无人机中燃料电池与锂电池协同控制的仿真模型

延长飞行时间:燃料电池的能量密度高于锂电池,适合长时间稳定供电。提高功率密度:锂电池能够快速响应瞬时高功率需求,比如起飞和加速阶段。优化能源管理:通过有效的能量管理系统,可以根据实际需求动态调整燃料电池和锂电池的工作状态,从而提高整体效率。通过上述步骤,我们简要介绍了如何基于Simulink实现混合动力无人机中燃料电池与锂电池协同控制的仿真模型。

amy_mhd的博客 189

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

上一篇: Unity Shader-Ambient Occlusion环境光遮蔽(AO贴图,GPU AO贴图烘焙,SSAO,HBAO)
下一篇: Unity Shader-边缘检测效果(基于颜色,基于深度法线,边缘流光效果,转场效果)
puppet_master
puppet_master 领域专家: C/C++技术领域 领域专家: C/C++技术领域
博客等级 码龄12年 2695粉丝 161原创
评论 9
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值