• 2025-01-07URP - 阴影投射和接收
    #URP_Shadow.shaderShader"My/URP_Shadow"{Properties{_BaseMap("Texture",2D)="white"{}//主贴图_BaseColor("TintColor",Color)=(1,1,1,1)//混合颜色_Specular("Specular"
  • 2025-01-07URP - 简单光照
    要点这边只涉及光源的漫反射和高光。漫反射(Diffuse)使用了Lambert方法来计算,高光(Specular)使用了Blin-Phone方法来计算,参考:Shader入门精要笔记-CH6_最简单的逐像素Blinn-Phong光照 公式中的相关变量的获取:1)顶点法线方向 VertexNormalInputsnormalInputs=GetVe
  • 2024-12-29在 WPF 中将视频中的纯绿色显示为透明
    最近需要制作一个类似桌面宠物的东西,碰到了这样一个问题:受MediaElement支持的带alpha通道的视频格式有限,且后续还要接入相关的深度学习模型动态生成口型,大概率生成不了透明背景。这个该怎么办呢?一个思路是把视频抽帧抠图,然后依次显示透明背景的图片(或者再组合成视频播放)。另外
  • 2024-12-19几种合批
    SRPBatchera) 优化原理  通过ConstantBuffer将对象的基本信息存储在GPU上,减少CPU和GPU频繁的数据交互带来的性能损失。b) 限制需要使用可编程渲染管线,不支持内置渲染管线。需要shader兼容。c) 写法参考Shader"Xxxx"{Properties{_BaseMap("Textur
  • 2024-12-19URP - 最简单的不受光(unlit)shader
     Shader"My/URP_Unlit"{Properties{_MainTex("Texture",2D)="white"{}}SubShader{Tags{"RenderPipeline"="UniversalPipeline"//这是用于URP的shader
  • 2024-12-09使用纹理的RGBA通道存储float类型数值
    有些情况下,单通道8位的数据精度无法支持我们的需求,就可以使用更多通道来实现更高精度的浮点数存储。其具体方法是将一个float类型的数据划分成多个部分,分别存储到不同的纹理颜色通道中。UnityCG.cginc实现代码inlinefloat4EncodeFloatRGBA(floatv){float4k
  • 2024-11-23科普文:软件架构之Linux系列【linux内核数据结构:链表、队列、映射、二叉树】
    概叙科普文:软件架构之Linux系列【linux内核数据结构汇总】-CSDN博客Linux内核提供了许多复杂的数据结构,这些结构被广泛用于各种不同的目的,例如存储设备管理、内存管理、进程管理等。以下是一些常见的数据结构以及它们的简要描述:双向链表(list):实现链表的数据结构,每个节点都
  • 2024-10-10UE4.26 Emissive Decal(发光贴花)模拟Light Function
    【USparkle专栏】如果你深怀绝技,爱“搞点研究”,乐于分享也博采众长,我们期待你的加入,让智慧的火花碰撞交织,让知识的传递生生不息!主要是想用EmissiveDecal(发光贴花)来模拟出SpotLight的LightFunction效果。原因是SpotLight的LightFunction依赖于阴影,而SpotLight开阴影比较费,且U
  • 2024-07-16假阴影,低开销的阴影实现方式
    参考:Unity无光照假阴影Shader实现及常见问题总结-简书(jianshu.com) 游戏实现阴影的常见处理方式(动态人或物,非烘焙)1.实时光照实时光照属于真阴影,一般来说效果是最好的,但是开销也是最大的。 ShadowMap(阴影贴图)跟SoftShadows(软阴影)-JeasonBoy-博客园(cn
  • 2024-07-14【Shader】ComputeScreenPos 的使用
     在顶点着色器中使用ComputeScreenPos.使用tex2Dproj搭配screenPos来按屏幕uv采样屏幕材质(如_CameraDepthTexture和_CameraNormalTexture).ComputeScreenPos:接受的输入顶点在裁剪空间(经过MVPmatrix的变换)的位置将输出从  ---转自 ComputeSc
  • 2024-06-04URP案例(较重要)
    简约水面场景准备:水底和水面的示例物体天空球和天空球一样的Cubemap组成部分深度颜色水下扭曲泡沫高光反射焦散代码部分github地址:有注释,就不写了详细过程了C# usingSystem.Collections;usingSystem.Collections.Generic;usingUnityEngine;namespaceU
  • 2024-06-01Unity 实现让物体渲染在最前面
    演示实现方案1.创建一个shader脚本2.删掉原来的内容:我们自己写附上完整的shader代码:Shader"Custom/ZTestAlways"{Properties{_Color("ColorTint",Color)=(1,1,1,1)_MainTex("MainTex",2D)="white"{}}Sub
  • 2024-03-02【Filament】材质系统
    1前言​本文主要介绍Filament的材质系统,官方介绍详见→FilamentMaterialsGuide。材质系统中会涉及到一些空间和变换的知识点,可以参考:【Unity3D】空间和变换、【Unity3D】Shader常量、变量、结构体、函数、【OpenGLES】MVP矩阵变换、【OpenGLES】透视变换原理。​
  • 2024-03-01Unity 贴图叠加,添加水印
    原创内容,转载请标明出处Shader"Custom/AddWatermarkShader"{Properties{_MainTex("MainTexture",2D)="white"{}_WatermarkTex("WatermarkTexture",2D)="white"{}_WatermarkPosit
  • 2024-01-26标准光照Shader
    思路《Shader入门精要》看到第九章,试着结合前面的知识实现一个标准光照模型,采用Blin-Phong模型,分为三大部分环境光,漫反射,高光反射。实现过程中加入凹凸效果,阴影效果。注释部分是透明效果,采用透明度测试的方法实现。具体细节见代码代码//UpgradeNOTE:replaced'mul(UNITY_MAT
  • 2024-01-25Shader实现翻书效果
    原理翻书这个过程可以看成是平面上的点都绕z轴旋转,但是直接这样写的话会出现问题。因为旋转轴是在中间的,所以我们在旋转之前要把点向左偏移5个单位这样旋转轴就到了最左边,然后再乘上旋转矩阵得到旋转之后的位置,再向右边偏移5个单位还原一下。这样实现的太生硬了,所以带入正弦函数
  • 2023-12-31Unity3d Vertex/Fragment Shader添加Shadow
    Shader"ZX/BaseVertFragmentShadow"{Properties{_DiffuseTexture("DiffuseTexture",2D)="white"{}_DiffuseTint("DiffuseTint",Color)=(1,1,1,1)}SubShader{
  • 2023-12-14Unity shader 里面使用数组
    很多人不知道Unityshader是支持通过C#脚本,往shader脚本里写入数组的。我不知道Properties里面怎么写,但是可以用C#代码往里写。数组的总长度似乎最大2048。注意,是所有数组的总长度加一起不能超过2048。比如你写了五个数组,每个数组的长度是100,五个数组的总长度就是500。不是