白泽图

  • 文章
    • Unity渲染
    • Unity项目开发
    • 工具
    • 数学
    • 算法
    • 网站搭建
    • 网络&操作系统
Unity渲染
Unity渲染

URP自定义后期实现方法

前段时间项目升级了使用了URP后,收到了一些关于后期的BUG,Debug后发现URP改变了渲染管线导致原先BuildIn的一些机制无法使用了,比如OnRenderImage、OnPreRender等函数失效,所以之前BuildIn的写的一些效果都不能用了,于是源看了一下URP源码,也查找网上的一些相关资料,有了个大致的理解,先把使用方式记录下来,之后抽空再写一篇URP源码设计防止遗忘 这里拿项目中的一个实例来说明使用方式,功能描述: 角色XXX释放技能后,除了场上的角色与特效,其他可见物都变成深红色(用于加强角色技…

2021-01-11 0条评论 2868点热度 1人点赞 蒋程 阅读全文
Unity渲染

Unity渲染顺序(Queue,ZWrite,ZTest)

用实例说明Queue,ZWrite ,ZTest对渲染循序的影响 新建两个一样的Shader(Test1.shader与Test2.shader) 并分别创建材质球,然后赋值给两个Cube, shader代码如下: Shader "Custom/Test1" { Properties { _MainTex ("Texture", 2D) = "white" {} } SubShader { Pass { CGPROGRAM #pragma vertex vert #pragma fragment frag stru…

2020-12-31 0条评论 3306点热度 2人点赞 蒋程 阅读全文
Unity渲染

Unity定制Shader GUI优化方案

参考:官方API 写过脚本编译器的同学应该都知道Monobehaivor的脚本可以重画检视面板,这有利我们开发各利插件,方便调试,Shader的面板也可以重画,区别在于,Monobehavior的脚本设置只能在运行时生效,再Shader的面板设置在编译环境下就生效,在运行时无法生效,其实这个很好理解,unity的shader最终还要是编译成各平台对应的shader语言,所以它这里用的控制更多类似于宏,即不同设置会导致最终的编译结果不同 直接上代码: 在Asset中新建文件夹Editor,创建CustomShader…

2020-12-28 0条评论 2827点热度 0人点赞 蒋程 阅读全文
Unity渲染

UnityShader if判断优化

参考:Unity Shader: 优化GPU代码--用step()代替if else等条件语句 原文核心思路: 对于GPU来讲,各个顶点各个像素都在进行大量的并行运算,每个片段着色器都在同步运行,只有所有像素全部完成计算,才会进行下一次运算, 在片段着色器中,每个片段处理器每条指令操作上百个像素,如果有些片段(像素)采取一个分支而有些片段不采用另一个分支,则所有片段都会执行两个分支,但只在每个片段应该采取的分支上写入寄存器。不论何种策略,对追求高并行度的GPU来讲,分支是必须要同步的,那么最慢的case就会造成短板…

2020-12-28 0条评论 3174点热度 0人点赞 蒋程 阅读全文
Unity渲染

Gamma空间和线性空间

本文参考:  https://catlikecoding.com/unity/tutorials/rendering/part-3/                 https://blog.csdn.net/candycat1992/article/details/46228771 Unity中有两种颜色空间,一是线性空间,另一个则是Gamma空…

2020-12-19 0条评论 1488点热度 0人点赞 蒋程 阅读全文
Unity渲染

UnityShader Tags标识汇总

SubShader的Queue标签 (用于决定当前模型的渲染队列,索引越小的越早被渲染) 名称 队列索引号 描述 Background 1000 这个渲染队列会在任何其它队列之前被渲染,通常用来渲染那些需要绘制在背景上的物体 Geometry 2000 默认渲染队列,不透明物体使用 AlphaTest 2450 需要透明测试的物体使用 Transparent 3000 该队列会在所有Gemetry和AlphaTest物体渲染后,再按从后往前的循序进行渲染,用于使用透明混合的物体 Overlay 4000 …

2020-12-17 0条评论 1117点热度 0人点赞 蒋程 阅读全文
Unity渲染

Unity Shader saturate与DotClamped函数

saturate函数可以将最终的结果限制在0到1之间 计算光照时,根据兰伯特余弦定定律,我们需要忽略从负方向过来的光,所以我们可以通过max函数限制小于0的值都为0,如 max(0, dot(world_normal, world_light_dir)) 但是看了很多unity的shader都是用的saturate函数而不是max函数,而且我也没有从结果上看出任何区别,好奇就特意查了一番,直到我看到catlikecoding的教程 也就是从理论来说余弦值永远不会超过1,但是由于不同平台计算浮点精度的问题,可能会导致…

2020-12-17 0条评论 4164点热度 1人点赞 蒋程 阅读全文
Unity渲染

非等比缩放模型法线转换UnityObjectToWorldNormal详解

在光照运算中,我们需要将模型的顶点法线转换到世界空间坐标,通常Unity给我们提供了unity_ObjectToWorld矩阵方便我们进行转换,但是这种转换仅适用于等比缩放的模型,如果是非等比缩放的模型转换后顶点法线与切线不再垂直,原因如下: 上图中x轴缩短为原来的1/2,法线\(\vec{n}\)与切线\(\vec{t}\):(p3-p2),不再垂直 对于切线它始终由p3-p2来表示,所以p2怎么变,都不会影响到切线,这里为了简化推导我们设unity_ObjectToWorld为M,\(\vec{n}\)转世界空…

2020-12-17 0条评论 5056点热度 1人点赞 蒋程 阅读全文
Unity渲染

UnityShader 纹理 _XX_ST字段

UnityShader中经常出现类似“float4 _MainTex_ST”、“float4 _BumpTex_ST;”的字段声明,但是却没有任何引用 ,找了下资源才知道是怎么回事,参考网址:传送门 下面是一个最简单的纹理采样Shader Shader "Custom/MainTex_ST" { Properties { _MainTex("MainTex",2D) = "white"{} } SubShader { LOD 100 Pass { CGPROGRAM #pragma vertex vert #pra…

2020-12-08 0条评论 4614点热度 0人点赞 蒋程 阅读全文
Unity渲染

Phong光照模型与BlinnPhong光照模型

现实中光照是一件非常复杂的事情,人眼能看到的某个物体是因为该物体反射了光进入了人的眼晴,而物体反射光的来源并不单单只来源于光源,也包含其他物体反射出来的光,也就是说光线是在物体之间反复弹射(举个例子:光滑的瓷砖表面会折射出其他物体),除此之外,光滑的物体还会使人眼接收到更亮高光效果,所以说想要达到更加逼真的光照效果单靠Lambert光照模型模拟的漫反射效果是远远不够的。 原理参考资料: 现代计算机图形学入门-闫令琪 第8讲 (说明图片来源该课件截图) Phong光照模型 \(L=L_{…

2020-12-07 0条评论 2394点热度 0人点赞 蒋程 阅读全文
123
分类
  • Unity渲染 / 26篇
  • Unity项目开发 / 41篇
  • 工具 / 20篇
  • 数学 / 2篇
  • 算法 / 1篇
  • 网站搭建 / 4篇
  • 网络&操作系统 / 5篇
最新 热点 随机
最新 热点 随机
在Unity中通过反射获取SerializedProperty的值 Unity Hierarchy与Scene窗口的操作限制 常用Gizmos图形封装 使用命令行调用unity案例模板(支持update) vscode安装chatgpt 判断TimelineAsset是否被修改
如何使用EditorGUILayout编辑PropertyDrawer 解决VisualStudio安装ErrorCode1714的问题 使用命令行调用unity案例模板(支持update) URP后处理真机调试 Gamma空间和线性空间 Unity RichText

COPYRIGHT © 2023 白泽图. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

登录
注册|忘记密码?