HLSL Shader
文章平均质量分 94
HLSL Shader专栏
GamebabyRockSun_QQ
曾经拥有的,不要忘记,
已经得到的,更要珍惜,
属于自己的,不要放弃,
已经失去的,留着回忆,
想要得到的,必须努力,
但最重要的,是好好爱惜自己!
展开
-
DirectX12(D3D12)基础教程(二十三) ——DirectShaderCompiler 头文件接口 ID3DInclude 的应用
本章教程较短小,但内容十分重要,是后续更灵活使用 Shader 编程的重要基础之一。也就是对 Shader 代码进行头文件分离复用设计进行全面支持。或者直白的说,本章内容重点就是让各位掌握以编程的方式在代码中支持 Shader 头文件的方法,方便在设计 Shader 编辑器之类工具时,可以让所有的 Shader 组织的更有层次。本章实例代码依然基于示例是从Direct3D 10及更高版本中引入的回调接口,它用于处理着色器编译过程中的文件包含操作,即 “#include” 宏命令。原创 2024-04-24 09:37:14 · 1751 阅读 · 14 评论 -
DirectX12(D3D12)基础教程(二十二) ——HDR IBL 等距柱面环境光源加载和解算及 GS 一次性渲染到 CubeMap
在上一讲DirectX12(D3D12)基础教程(二十一)—— PBR:IBL 的数学原理中,着重介绍了整个基于 IBL 光源的 PBR 渲染过程中的数学原理,核心还是围绕反射方程(渲染方程)的简化高效计算过程展开的。当然其中数学过程稍微有些复杂。这一讲主要介绍 IBL 中等距柱面贴图解算的全过程。原创 2023-07-19 18:59:43 · 2853 阅读 · 9 评论 -
DirectX12(D3D12)基础教程(二十一)—— PBR:IBL 的数学原理(5/5)镜面反射积分项2及光照合成
至此总算在历时将近一个月之后,我将这篇教程全部编写整理完毕了,期间翻阅了很多资料,查证了很多公式,通过推演梳理整个IBL渲染过程中的数学原理,终于将整个 IBL过程搞清楚也能讲清楚了。其实 PBR 中的有些理论最早都可以追溯到上个世纪的60年代,整个过程中有很多知名的不知名的大咖们奉献了很多方法和理论,而实时 PBR 更是迟到 2012 年因迪士尼的几篇论文而兴起,再经过 Epic 中众多大佬的打磨提炼,直至今天,实时 PBR 的应用才是方兴未艾之时。原创 2023-03-20 20:07:22 · 1805 阅读 · 13 评论 -
DirectX12(D3D12)基础教程(二十一)—— PBR:IBL 的数学原理(4/5)镜面反射积分项1
接着我们观察整个积分方程拆分后的第二项,也就是被称之为镜面反射项的部分:Los(p⃗,ωo⃗)=∫Ω(DFG4(ωo⃗⋅n⃗)(ωi⃗⋅n⃗))Li(p⃗,ωi⃗)n⃗⋅ωi⃗dωi⃗D=NDFGGXTR(n⃗,h⃗,α)=α2π((n⃗⋅h⃗)2(α2−1)+1)2F=FSchlick(h⃗,ωo⃗,F0)=F0+(1−F0)(1−(h⃗⋅ωo⃗))5GSchlickGGX(n⃗,ωo⃗,κ)=n⃗⋅ωo⃗(n⃗⋅ωo⃗)(1−κ)+κκdirect=(α+1)28κIBL=α22G(n⃗,ωo⃗,原创 2023-03-20 20:03:39 · 1125 阅读 · 5 评论 -
DirectX12(D3D12)基础教程(二十一)—— PBR:IBL 的数学原理(3/5)漫反射积分项
额外需要提醒的是在著名的 [漫反射辐照 - LearnOpenGL CN](https://learnopengl-cn.github.io/07 PBR/03 IBL/01 Diffuse irradiance/) 教程中,既没有详细讲述整个数学过程,也没有推导重要性采样的过程,最后其漫反射辐照度贴图使用了计算量更大的双重循环来计算,如果不加思索的直接使用其代码,可能会造成显卡过热保护而退出,严重的情形下可能会造成显卡硬伤,所以在没有搞清楚的情况下请不要随意执行。更高级的可以使用球谐函数的方式简化存储。原创 2023-03-20 19:51:08 · 1247 阅读 · 5 评论 -
DirectX12(D3D12)基础教程(二十一)—— PBR:IBL 的数学原理(2/5)
如果你有一点关于积分运算的知识的话,那么明显的就可以发现渲染方程可以进一步拆分为两个部分,这样反射积分就变成了两个部分积分的和。这样显然是有好处的,因为这种形式两个积分项可以分开计算,最后再来求和,所以可以被方便的用来并行计算。原创 2023-03-20 19:34:44 · 1034 阅读 · 4 评论 -
DirectX12(D3D12)基础教程(二十一)—— PBR:IBL 的数学原理(1/5)
2023年来了,令人闹心伤身的疫情也暂告一段落了。感慨之余,其实我也挺惆怅,这个系列教程还能继续下去吗?或者我自己还能坚持多久,我不知道。因为我也天天徘徊在失业的边缘,年纪大了被人嫌弃,学历低被人嫌弃,身体稍差也被人嫌弃,忽然发现我已不是当初那个少年了,却还始终怀揣着少年时的梦想,依旧挣扎在理想与现实之间,或者只是挣扎在温饱线上,已然是一身债,半条命了。当然幸运的是到现在我都还没有阳过,属于少数那部分,我身边的朋友们也很惊奇。然而我的家人也都阳过了,他们也很惊奇我居然一直没有阳过,算是一点小小的慰藉吧。原创 2023-03-20 19:16:01 · 2058 阅读 · 8 评论 -
DirectX12(D3D12)基础教程(十六)——实现渲染线程池:3个内核同步对象实现渲染线程池/大规模线程池
使用1个信标量对象 + 1个CPU屏障 + 1个事件对象共3个内核同步对象实现渲染线程池/大规模线程池管理。原创 2020-11-07 20:24:29 · 2203 阅读 · 3 评论 -
DirectX12(D3D12)基础教程(十八)—— PBR基础从物理到艺术(下)
基于D3D12的PBR渲染基础教程第三部分原创 2022-05-27 10:39:45 · 2521 阅读 · 12 评论 -
DirectX12(D3D12)基础教程(十八)—— PBR基础从物理到艺术(中)
基于D3D12的PBR基础教程原创 2022-05-27 10:09:33 · 1902 阅读 · 3 评论 -
DirectX12(D3D12)基础教程(十八)—— PBR基础从物理到艺术(上)
基于D3D12的PBR基础教程第一部分原创 2022-05-27 09:35:42 · 1728 阅读 · 0 评论 -
3D数学系列之——从“蒙的挺准”到“蒙的真准”解密蒙特卡洛积分!
目录1、前言2、积分概念简单回顾3、积分在程序计算上的困难4、蒙特卡洛积分5、一些扩展应用1、前言 在学习3D数学的过程中,或者说在学习游戏开发、引擎开发、渲染器开发、Shader开发的过程中,对大家来说,当然也包括我,数学是一道必须要迈过的坎,而无论你有多么头疼。 目前市面上所见3D数学类的书籍,其内容还是主要集中在3D的线性代数部分,即向量和矩阵的理论及运用上,这部分内容其实如果有初高中的牢固的数学的基础的话,理解和掌握是不难的。但是在真正的渲染编程的过程中,仅仅有线性代数的知识是远远不够的,原创 2021-06-21 18:30:56 · 2075 阅读 · 55 评论 -
DirectX12(D3D12)基础教程(外篇三)——CreateGraphicsPipelineState 错误 #682的修复,深刻理解POSITION和SV_POSITION
目录一、问题二、解决三、简析一、问题 当继续编写D3D12后续教程示例的过程中,在调用ID3D12Device::CreateGraphicsPipelineState时遇到如下的错误,调用失败,无法创建管线状态对象:D3D12 ERROR: ID3D12Device::CreateGraphicsPipelineState: Rasterization Unit is enabled (PixelShader is not NULL or Depth/Stencil test is enabled原创 2021-05-08 21:22:02 · 2348 阅读 · 20 评论 -
DirectX12(D3D12)基础教程(十四)——使用WIC、Computer Shader显示GIF动画纹理(下)
文章目录5、用DirectComputer完成GIF帧预处理5.1、Computer Shader中以数组方式访问纹理完成帧预处理5.2、Dispatch启动GIF帧绘制5、用DirectComputer完成GIF帧预处理 当看到这一小节的标题时,可能会有点蒙,为什么不把解析出来的帧直接当成纹理用?还需要“处理”什么?其实仔细想想这不是那么简单的。前面已经啰嗦了很多关于GIF以及帧的属性读取...原创 2020-03-23 00:04:56 · 1822 阅读 · 16 评论 -
DirectX12(D3D12)基础教程(十四)——使用WIC、Computer Shader显示GIF动画纹理(中)
文章目录4、Direct Computer基础知识4.1、Direct Computer简介4.2、Direct Computer编程基本框架4.3、Computer Shader简介4.4、Computer Shader示例4.5、[numthreads(x, y, z)]语义文法详解4.6、通过Dispatch来批量发起GPU线程盒4.7、SV_GroupID、SV_DispatchThrea...原创 2020-03-23 00:00:14 · 1549 阅读 · 0 评论 -
DirectX12(D3D12)基础教程(十四)——使用WIC、Computer Shader显示GIF动画纹理(上)
文章目录1、前言2、GIF文件简介3、使用WIC加载并解析GIF文件3.1、解析GIF全局背景色3.2、获取GIF的像素尺寸3.3、获取像素纵横比修正图片像素尺寸3.4、读取GIF帧和属性3.5、创建GIF纹理(画板)和帧纹理1、前言 在本系列教程开头的几章中,开初使用的纹理加载组件是WIC。后来在不断的编码过程中,通过慢慢的摸索学习我才发现之前可能一直有点误解WIC这个组件了。其实这个组件...原创 2020-03-22 23:02:25 · 2762 阅读 · 10 评论 -
DirectX12(D3D12)基础教程(十二)——多线程+多显卡渲染及水彩画效果和标准简化版高斯模糊
1、前言上一章中最后一个水彩画效果是有问题的,这一讲我们特意修正这个错误。其实错误主要是因为真正的水彩画效果还需要一个后处理——高斯模糊。这一章主要的任务就是修正这个错误。同时这一章中将结合使用酷炫的多线程+多显卡渲染框架。为了能更好的理解本章教程示例,请各位最好已经仔细阅读了之前关于多线程渲染、多显卡渲染,以及Shader原始特效的章节文章及示例代码。在本章中,多线程渲染依旧是用来录...原创 2020-03-08 15:50:17 · 3878 阅读 · 5 评论 -
DirectX12(D3D12)基础教程(十一)——几个“上古时代”的基于Pixel Shader的滤镜效果
1、前言记得大约是在10多年前,还在我努力的在学习着DirectX编程和3D引擎编程的方方面面知识的时候,初次接触到了当时很先进的Shader程序。当时搜集了很多资料,其中有一份就是讲解如何在PixelShader中实现类似PhotoShop中的一些滤镜功能。这次我就将这些陈年的有意思的Shader翻出来,用D3D12再次回炉一下,也做成教程,供大家学习Shader使用。本章的源代码已...原创 2019-11-11 23:24:00 · 2135 阅读 · 7 评论