- 博客(9)
- 收藏
- 关注
原创 【Games101】Transformation
线性代数相关向量点乘 → 获得方向 向量叉乘 → 获得左右&内外 线性变换:保持网格平行并等距分布的变换线性变换具有的性质:所有的线仍是直线(包括对角线) 原点还在原点,不发生移动我们如何理解Transformation(变换)?简单的,我们可以将其理解为一系列的步骤,通过这些步骤,得以实现从三维空间到二维影像的转变。一、二维/三维变换 缩放(Scale) 对称(Reflection) 切变(Shea...
2022-02-14 18:44:33
3676
原创 【Shader】后处理之Bloom效果实现
实现路径分析:提取发光区域的mask 对mask进行多次模糊处理,得到BloomTexture 将BloomTexture于MainTexture进行叠加 利用ToneMapping还原亮度范围一、BlurShader:主要分为4个Pass进行操作,取阈值 → 双重模糊 → 图像合并: // Pass0: 取阈值,做mask half4 frag_PreFilter (v2f_img i) : SV_Target { half4 col = t..
2022-01-27 20:21:55
1916
原创 【Shader】后处理之屏幕映射
一、计算屏幕空间坐标一个模型的MVP变换,即从模型空间(M)转换到观察空间(V)再转换到裁剪空间(P),然后将投影完成的标准立方体通过屏幕映射(视口变换)转换成屏幕坐标进行显示。下图即标准立方体到屏幕空间的映射过程。Clip Space → Screen Space的基本方法v2f vert (appdata v){ o.screen_pos = o.pos; //_ProjectionParams.x用于校正不同平台下的uv坐标...
2022-01-24 20:47:36
3058
原创 【Shader】次表面散射与各向异性高光
一、次表面散射(Sub-Surface-Scattering)次表面散射,简称3S,用来描述光线穿过透明/半透明表面时发生散射的照明现象,是指光从表面进入物体经过内部散射,然后又通过物体表面的其他顶点出射的光线传递过程。次表面散射主要用于模拟不完全透明材质内部表现出来的一种真实光影特效, 主要用于模拟蜡烛、大理石、玉石、灯光照射下的人的皮肤等材质。如何利用一张LUT贴图模拟3S效果? → 只需通过Lambert光照模型与自定义滑块采样其uv//需...
2022-01-23 23:11:35
2040
原创 【Shader】通用光照框架的构建
一个完整的光照框架可初步分为以下四部分:①直接光的漫反射、② 直接光的镜面反射、③间接光的漫反射、④间接光的镜面反射其中,对于金属材质来说,可以粗略的只考虑其镜面反射部分,即只具有②直接光的镜面反射与④间接光的镜面反射。对于片元Shader的代码框架来说,可分为以下六部分来进行构建:①所需使用向量的准备//vector preparedhalf3 nDir = normalize(i.normal_D...
2022-01-23 19:20:26
281
原创 【Shader】基于图像的光照(Image Based Lighting,IBL)
一、立方体贴图(CubeMap)CubeMap是什么?CubeMap是一个由六个独立的正方形纹理组成的集合,它将多个纹理组合起来映射到一个单一纹理,通常被用来作为具有反射属性物体的反射源。CubeMap如何实现?→ 采样反射向量与立方体的交点//Shader实现对CubeMap采样samplerCUBE _CubeMap;float4 _CubeMap_HDR;fixed4 frag (v2f i) : SV_Target{ half3...
2022-01-18 21:28:00
2141
原创 【Shader】色调映射、视差贴图与实时阴影
一、色调映射(Tone - Mapping) 为什么需要色调映射? 高动态范围图像(HDR)能够达到甚至更高数量级的亮度,而一般显示器只能表示的亮度值,因此往往会因为光照强度过大而造成的过暗/过曝光问题。色调映射在做什么?色调映射能够将原本大幅度的亮度与对比度衰减至显示器可以显示的范围内,同时仍然保存有原本图像细节与颜色等重要信息。色调映射的一种函数使用小技巧(我不理解,但我先记)//对Diffuse接收的color做线性空间的转换b...
2022-01-17 18:09:23
1273
原创 【Shader】光源获取与法线贴图
一、光照计算不同光源数据获取 + 光源衰减计算//宏定义判断光源类型#if defined(DIRECTIONAL)float3 lDir = normalize(_WorldSpaceLightPos0.xyz);float attuention = 1.0;#elif defined(POINT)float3 lDir = normalize(_WorldSpaceLightPos0.xyz - i.pos_WS);float distance = length(_WorldSpac
2022-01-15 19:41:09
878
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人