avatar
文章
81
标签
33
分类
12

首页
标签
分类
简历
mao的博客
搜索
首页
标签
分类
简历

UnityShader

UnityShader——水效果实现
发表于2024-11-14|UnityShader
水效果水面颜色渐变效果深度图定义使用深度图来决定水体表面和底部的距,从而改变该部分水体的颜色,达到一个从岸边到深水区的颜色渐变效果 深度图在Shader使用 使用SurfaceShader 深度图获取固定名称 123sampler2D _CameraDepthTexture;//sampler2D_float ,增加精度,预防某些手机精度不够 同时还需要开启摄像机的深度 深度图采样深度图渲染出来后在屏幕空间内,要到屏幕空间进行采样,需要获取到屏幕坐标的UV才能对深度图进行采样 Input结构体中额外定义1float4 proj;//屏幕坐标 属性1234fixed4 _WaterShallowColor;//浅水区的颜色fixed4 _WaterDeepColor;//深水区的颜色half _DeepPower;//水深强度half _TranAmount;//透明度数 顶点着色器123i.proj = ComputeScreenPos(UnityObjectToClipPos(v.vertex));//根据顶点计算屏幕空间,没有齐次裁剪COMPUTE_EYEDEPTH(i.pr ...
UnityShader——中级,Shader动画
发表于2024-11-14|UnityShader
Shader动画种类序列帧动画 对贴图进行采样 滚动动画 顶点动画 最常用的 序列帧动画过程上类似于赛璐璐动画的实现,一张贴图上均匀分布动画的不同帧数,配合缩放和位移进行采样即可 案例12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576Shader "Unlit/024"{ Properties { _MainTex ("Texture", 2D) = "white" {} _HorAmount("HorAmount", float) = 4 _VerAmount("VerAmount", float) = 4 _Speed("Speed" ...
UnityShader——经验
发表于2024-11-13|UnityShader
Shader某些手机端使用samlper2D会造成贴图精度不够,这个时候使用sampler2D_float来提升精度
UnityShader——中级,高级纹理
发表于2024-11-13|UnityShader
高级纹理CubeMap类似于天空盒,正方体的六个面分别渲染 实现方式手动拖拽6张无缝贴图在Assets中中新建一个Cubemap,位置在Legacy/CubeMap中,也可以自行搜索,选择图片之前要先选择清晰度,之后再改无效 程序化生成代码 实际上该操作是以指定物体为中心,将周围常见渲染到cubemap上 123456789101112131415161718192021222324252627282930313233using System;using System.Collections;using System.Collections.Generic;using UnityEditor;using UnityEngine;public class RenderCubeMap : ScriptableWizard{ public Transform renderPos; public Cubemap cubemap; [MenuItem("Tools/3D Render Cubemap")] public static ...
UnityShader——中级,LightMap
发表于2024-11-12|UnityShader
LightMap渲染类型 Lighting设置在比较新的版本中,Lighting中的设置位置发生的变化,需要通过Windows-》Rendering进入,按照图示前往 skybox:环境光是天空盒的颜色 Gradient:对天空,中间,大地的颜色做了一个详细的区分 color:单一颜色代表环境光 反射光的选项 实时光和烘焙光各自的控制 实时光照GI启用在2023.2版本中,一个场景需要新建一个LightAssets,然后才能对这些数据进行修改 将场景中的需要进行实时光照贴图渲染的游戏对象在设置窗口右上角的Static选项框中勾选下图所示的左侧有对钩的选项就可以启动光照贴图,然后再去Lighting窗口中点击最下面的 Generate Lighting选项就能生成实时光照贴图,需要注意场景中的需要进行实时光照贴图的灯光的选项也应该是RealTime 实时光照贴图有一定的精度区分,在Lighting的设置中,下图红框所所示的数字就是实时光照贴图的精度,这个值越大,贴图越精细 参数 Directional Mode:直射模式 Albedo Boost:间接光照的强度 ...
UnityShader——中级,SurfaceShader
发表于2024-11-08|UnityShader
Unity,SurfaceShader介绍 Surface Shader和CG其他部分一样,代码也是要写在CGPROGRAM和ENDCG之间。但区别是,它必须写在SubShader内部,而不能写在Pass内部。Surface Shader自己会自动生成所需的各个Pass。由上面的编译格式可以看出,surfaceFunction和lightModel是必须指定的。 surfaceFunction通常就是名为surf的函数(函数名可以任意),它的函数格式是固定的: void surf (Input IN, inout SurfaceOutput o) void surf (Input IN, inout SurfaceOutputStandard o) void surf (Input IN, inout SurfaceOutputStandardSpecular o) lightModel也是必须指定的。由于Unity内置了一些光照函数——Lambert(diffuse)和Blinn-Phong(specular),因此这里在默认情况下会使用内置的Lambert模型。当然我们也可以自定义 ...
UnityShader——中级
发表于2024-11-04|UnityShader
UnityShader中级复杂光照Unity 渲染路径:Forward Deferred Legacy Vertex Lit Legacy Deferred 标签名 描述 Always 不管使用哪种渲染路径,该pass总会被渲染,但不会计算任何光照 ForwardBase 用于前向渲染。该pass会计算环境光,最重要的平行光,逐顶点/SH光源和Lightmaps ForwardAdd 用于前向渲染。该pass会计算额外的逐像素光源,每个pass对应一个光源。 Deferred 用于延迟渲染。该pass会渲染G缓冲(G-buffer) ShadowCaster 把物体的深度信息渲染到阴影映射纹理或一张深度纹理中 PrepassBase 用于遗留的延迟渲染。该pass会渲染法线和高光反射的指数部分。 PrepassFinal 用于遗留的延迟渲染。该pass会通过合并纹理,光照和自发光来渲染得到最后颜色 Vertex, VertexLMRGBM和VertexLM 用于遗留的顶点照明渲染 在Shader对光照渲染模式进行设置12// ...
UnityShader入门——卡通效果实现
发表于2024-11-02|UnityShader
Unity卡通着色Shader实现另外一篇已经被实现的边缘着色Unity——Shader实现边缘发光效果 | mao的博客 (mao1mao2mao3mao4.github.io) 法线外拓的三种方式 来自文心一言的回答要将模型空间下的法线转换到视角空间下,你需要使用模型到视图矩阵(UNITY_MATRIX_MV),但需要注意法线变换的特殊性。法线变换需要使用逆转置矩阵(Inverse Transpose Matrix)来保持其垂直性。Unity提供了一个宏UNITY_MATRIX_IT_MV(尽管你之前的代码中名称有误,但这里是为了说明正确的使用方式),它实际上已经包含了模型到视图矩阵的逆转置。 1.模型空间下 2.视角空间下 3.裁剪空间下 基础阴影实现12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868 ...
Unity —— Shader入门,纹理应用和透明效果
发表于2024-11-01|UnityShader
UnityShader入门——纹理应用和透明效果渐变纹理最简单的,用一张贴图去实现,给出的贴图应该是渐变的色块 123float halfLambert = dot(i.worldNormal,lightDir)* 0.5 + 0.5;//漫反射float3 diffue = _LightColor0.rgb * _Diffse.rgb * tex2D(_RampTex,float2(halfLambert,halfLambert)); 渐变纹理按照半兰伯特光照的颜色排序,在 x 轴上渐变 遮罩纹理对blinn phong高光使用该效果,可以控制高光颜色强度 局部着色器实现 123456float3 halfPhongMask = tex2D(_SpecularMask,i.uvMask).r * _SpecularMaskStrength;//提取遮罩贴图并 和强度进行相关 //高光反射 //float3 halfView = normalize(_WorldSpaceCameraPos + _WorldSpaceLightPos0); float3 halfView = ...
Unity —— Shader入门,法线贴图
发表于2024-10-31|UnityShader
UnityShader入门——法线贴图高度映射,模型空间下的法线映射,切线空间下的法线映射 贴图纹理和法线之间的转换 知识:向量的分量就是 向量的点表示图中,按照逗号进行分割数字 高度映射使用像素的灰度值来表示该位置的深度 缺点是需要通过一系列的计算来变换为可以使用的法线角度、不利于美术的处理 模型空间下的法线映射坐标系的原点是模型坐标系的原点 颜色很多,每个点的向量都有可能不同,最后呈现的结果就是花里胡哨的。 UV点和模型的每一个顶点都是一一对应的,不方便移动改变,有些高级的特效或者粒子特效需要移动UV贴图来实现。 制作简单 一般在3S贴图中可能遇见 优点 实现简单,更加直观。计算量少。在纹理的边角部分,缝隙较少,可提供平滑的边界。是因为所有法线都是在同一坐标空间中,可以在边角处通过插值进行平滑变换。 切线空间下的法线映射 叉乘: 向量叉乘是对两个三维空间中的向量进行的一种二元运算,其结果是一个新的向量,这个向量垂直于由原始两个向量所定义的平面。 对于两个三维向量a(x1, y1, z1)和b(x2, y2, z2),它们的叉乘c = a × b可以表示为: c & ...
12
avatar
mao
文章
81
标签
33
分类
12
Follow Me
公告
This is my Blog
最新文章
Unity打包后窗户化切换2025-01-11
InputSystem按键重绑定2025-01-06
Unity —— 2D,雨水2024-12-31
C++ 事件系统使用手册2024-12-26
游戏事件池实现解释文档2024-12-26
分类
  • Alogrithm1
  • C++5
  • UI技术1
  • Unity13
  • Unity2D4
  • UnityShader16
  • 图形接口1
  • 左神算法4
标签
功能 经验 栈 语言知识 物理 解法总结 Plugins 特性 OpenGl alogrithm AI 2D渲染 组件 UI 性能优化 特效 位运算 渲染 Unity UI 字符串 二分查找 C++ string C# 热更 数组 Unity 枚举 github Pixiv 题目 动态规划 lua
归档
  • 一月 20252
  • 十二月 202411
  • 十一月 202410
  • 十月 202410
  • 九月 202430
  • 八月 202413
  • 七月 20245
网站资讯
文章数目 :
81
本站访客数 :
本站总访问量 :
最后更新时间 :
©2020 - 2025 By mao
框架 Hexo|主题 Butterfly
搜索
数据库加载中