草庐IT

Unity URP Shader(HLSL)踩坑日记(一)

最近开始转TA,刚开始学习,资料比较杂乱,其中遇到的问题和一些计算方式,记录一下,后续会一直完善补充。1.urp中基础不受光shaderShader"Example/URPUnlitShaderColor"{Properties{[MainColor]_BaseColor("BaseColor",Color)=(1,1,1,1)[MainTexture]_BaseMap("BaseMap",2D)="white"{}}SubShader{//SubShaderTags定义何时以及在何种条件下执行某个SubShader代码块或某个通道。Tags{"RenderType"="Opaque""Ren

Unity中Shader裁剪空间推导(透视相机到裁剪空间的转化矩阵)

文章目录前言一、简单看一下观察空间—>裁剪空间—>屏幕空间的转化1、观察空间(右手坐标系、透视相机)2、裁剪空间(左手坐标系、且转化为了齐次坐标)3、屏幕空间(把裁剪坐标归一化设置)4、从观察空间到裁剪空间5、从裁剪空间到屏幕空间后二、透视相机的参数推导1、从XoY平面,求出X~v~从观察空间到裁剪空间的坐标投影X~p~2、从YoZ平面,求出Y~v~从观察空间到裁剪空间的坐标投影Y~p~三、把投影到近裁剪面的坐标归一化设置1、求归一化设置后的x~n~2、求归一化设置后的y~n~3、得到最后化简的公式四、构建转化矩阵1、在OpenGL[-1,1]下:2、在DirectX[1,0]下:3、把A、B

Unity中Shader观察空间推导(在Shader中实现)

文章目录前言一、观察空间矩阵推导1、求观察空间基向量2、求观察空间的基向量在世界空间中的矩阵的逆矩阵2、求平移变换矩阵3、相乘得出观察空间转化矩阵4、得到顶点的世界空间坐标,然后转化到观察空间5、把观察空间坐标转化为齐次裁剪坐标输出到屏幕二、最终效果1、这是我们用默认Shader,在该摄像机坐标下的游戏界面2、使用我们的Shader,并且给我们的ViewPos赋值为摄像机坐标3、最终代码前言在上篇文章中,我们是实现了Shader中的观察空间推导。Unity中Shader观察空间推导我们在这篇文章中,根据上篇文章的推导,在Shader中实现观察空间矩阵的推导。一、观察空间矩阵推导Pview=[W

Unity-Shader-渲染队列,ZTest,ZWrite

Unity-Shader-渲染队列,ZTest,ZWriteZTest(深度测试)和ZWrite(深度写入)ZTestLess(深度小于当前缓存则通过)ZTestGreater(深度大于当前缓存则通过)ZTestLEqual(深度小于等于当前缓存则通过)ZTestGEqual(深度大于等于当前缓存则通过)ZTestEqual(深度等于当前缓存则通过)ZTestNotEqual(深度不等于当前缓存则通过)ZTestAlways(不论如何都通过)注意,ZTestOff等同于ZTestAlways,关闭深度测试等于完全通过。方法一:让绿色的对象不被前面的立方体遮挡,一种方式是关闭前面的蓝色立方体深度

Unity Shader UVLightReveal (紫外线显示,验钞效果)

UnityShaderUVLightReveal(紫外线显示,验钞效果)UVLightReveal实现验钞机的效果实现方案操作实现1.Light2.将另一个图形加入3.加上图形效果4.加上灯光的颜色自定义判定源码UVLightReveal实现验钞机的效果大家应该都有见过验钞机验100块钱的经历吧,而且在很多光感游戏中也会出现这种效果,当指定颜色的光线照射到对应的物体上物体就会呈现出隐藏的效果,在我理解的游戏中很多密室类型的游戏会有这种需求,况且我们把这种效果加在某些类型的游戏中作为一个彩蛋也是不错之选。下面先看下效果,今天带大家做一个UVLightReveal的效果这里用到的插件Amplify

Unity Shader相关的ZTest,ZWrite,Blend

1.引导画家算法:以一个画布为背景,从远到近画一个画面,先画最远的背景,也就是天空然后假如是雪山,然后再画上树木,树木在雪山上然后山下是若干个居民的房屋,以及若干条道路其次房屋门前可能有树木又当道部分房屋其中某片区域一定会进行若干次上色,这样在Unity中是非常耗费性能的。反画家算法:所以Unity中出现反画家算法。这个算法有两个辅助数组,以像素为单位,分别为深度缓冲数组和颜色缓冲数组假设为deep[][]和color[][],如果像素为1024*1024,那么这两个数组就是1024*1024大小仍然拿上副画来看假设某个像素点已经是最近的一个房子的某个点已经呈现出来的,它的坐标为(i,j),这

Unity中Shader裁剪空间推导(正交相机到裁剪空间的转化矩阵)

文章目录前言一、正交相机视图空间转化到裁剪空间干了什么1、正交相机裁剪的范围主要是这个方盒子2、裁剪了之后,需要把裁剪范围内的坐标值化到[-1,1]之间,这就是我们的裁剪空间。3、在Unity中,设置相机为正交相机4、在这里设置相机的近裁剪面和远裁剪面二、把正交相机的方盒子内的坐标转化到裁剪空间1、我们在Unity创建两个游戏对象来解释2、正交相机坐标到裁剪坐标的映射关系3、化简X轴坐标4、化简Y轴坐标5、化简Z坐标(OpenGL下[-1,1])6、化简Z坐标(DirectX下[0,1])三、把转化后的坐标转化为矩阵1、OpenGL下2、DirectX前言我们把顶点坐标信息转化为裁剪空间。有可

Unity Shader入门精要 第六章——Unity中的基础光照

目录一、标准光照模型(Phong光照模型)1、环境光 2、自发光3、漫反射4、高光反射(1)Phong模型(2)Blinn模型5、光照模型实现方法——逐顶点和逐像素二、UnityShader漫反射光照模型的实现1、实践:逐顶点2、实践:逐像素3、半兰伯特模型4、漫反射光照模型效果展示三、UnityShader高光反射光照模型的实现1、实践:逐顶点2、实践:逐像素3、Blinn-Phong光照模型4、高光反射光照模型效果展示四、Unity的内置函数一、标准光照模型(Phong光照模型)1、环境光    在标准光照模型中,使用环境光来近似模拟间接光照。间接光照就是指,光线通常会在多个物体之间反射,

DirectX12(D3D12)基础教程(二十一)—— PBR:IBL 的数学原理(3/5)漫反射积分项

目录3.4、漫反射项的重要性采样计算3.4.1、漫反射项的二重积分形式极其近似预积分计算3.4.2、漫反射辐照度积分项的直接积分计算3.4.3、漫反射辐照度积分项的蒙特卡洛积分重要性采样计算3.4、漫反射项的重要性采样计算3.4.1、漫反射项的二重积分形式极其近似预积分计算  进一步来说,因为对漫反射项积分来说κd、c、π\kappa_d、c、\piκd​、c、π等参数对于指定的一点p⃗\vec{p}p​来说是常数,可以提到积分外面,所以其中第一个积分可以进一步推导为:Lod(p⃗,ωo⃗)=κdcπ∫ΩLi(p⃗,ωi⃗)n⃗⋅ωi⃗dωi⃗∵dω=sin⁡(θ)dθdϕ,n⃗⋅ωi⃗=co

Unity中URP Shader 的 SRP Batcher

文章目录前言一、SRPBatcher是什么二、SRPBatcher的使用条件1、可编程渲染管线2、我们用URP作为例子3、URP设置中UseSRPBatcher开启4、使SRPBatcher代码路径能够渲染对象5、使着色器与SRPBatcher兼容:三、不同合批之间的区别BuildInRenderPipeline下:UniversalRenderPipeline下:四、对比BRP和SRP每一批次渲染间的区别1、BRP下2、SRP下(CPU部分就是SRP的核心)在这里插入图片描述五、在Unity中,测试一下开启和不开启SRPBatcher的效果1、不开启SRPBatcher(需要关闭HDR)2、