- 博客(32)
- 资源 (1)
- 收藏
- 关注
原创 UnityShader实现液体倾倒效果
烧杯内的液体始终相对世界坐标保持水平,因此需要将模型的本地顶点坐标通过UNITY_MATRIX_M矩阵转换到世界坐标,然后水平截取(即使烧杯倾斜,水杯内的液体始终保持世界空间水平)实现思路:在烧杯倾倒液体时,烧杯内的液体始终不会超过烧杯口的高度,所以我们计算得到这个高度值,然后截取掉超过该高度的像素。转换到世界空间的坐标需要以烧杯自身的坐标为基准截取,这样保证无论烧杯在时间空间的什么位置,截取的高度都是相对于烧杯本身的。首先准备烧杯内液体的模型,挂载一下shader对应的材质球。
2022-08-25 16:31:42
4373
6
原创 面向对象编程(以Java语言为例)
一、概念1)对象。对象是人们要进行研究的任何事物,从最简单的整数到复杂的飞机等均可看作对象,它不仅能表示具体的事物,还能表示抽象的规则、计划或事件。2)对象的状态和行为。对象具有状态,一个对象用数据值来描述它的状态。对象还有操作,用于改变对象的状态,对象及其操作就是对象的行为。对象实现了数据和操作的结合,使数据和操作封装于对象的统一体中。3)类。具有相同特性(数据元素)和行为(功能)的对象的抽象就是类。因此,对象的抽象是类,类的具体化就是对象,也可以说类的实例是对象,
2022-04-20 15:19:40
1107
原创 解决unity发布webgl端Input Field不支持中文输入的问题
Unity项目发布webgl端时Input Field控件是无法支持中文的,解决这个问题就需要重写unity的inputField控件来调用html页面上的input表单,然后输入完成后将输入的值传给unity的inputfield控件。...
2021-12-15 12:01:41
2772
原创 unity发布webgl平台结合vue,并实现事件交互
1.首先将unity发布出来的文件夹导入到vue项目中的static文件夹下 2.然后在vue组建中调用unity组建3.调整一下样式4.事件交互unity调用vue页面方法:unity向vue组建发送数据 :Application.ExternalCall("enter",param);vue组建监听事件: vue调用unity内部方法:在Unity中新建一个gameobject,命名为JSM.........
2021-12-15 11:47:39
7701
7
原创 利用x-shell远程启动linux服务器的tomcat服务
1. ssh root@ip2. cd .. 返回上一级目录3. ls 查看当前目录下所有文件信息4. cd xx/xx/ 定位到指定文件夹5. ./startup.sh 启动服务6. ./shutdown.sh 停止服务
2021-12-15 11:21:56
1382
原创 为unity写简单的web接口(nodejs)
//引入express 创建服务器var express = require('express');var app = express();// 需要对表单数据进行解析的,安装bodyParservar bodyParser = require('body-parser'); //解析函数app.use(bodyParser.json()); //json请求app.use(bodyParser.urlencoded({ extended:true})); //表单请求.
2020-10-09 15:48:49
543
2
原创 unity发布webgl端页面内嵌以及通信
主页面:<body><iframe id="555" src="http://192.168.1.5:8888/webshow_H/index.html" frameborder="0" style="width:50%;height: 50%"></iframe><button onclick="document.getElementById('555').contentWindow.postMessage('10010016','*');">&l
2020-10-09 15:33:37
1387
1
原创 unity发布webgl端页面自适应问题的解决方案
Unity发布webgl端时,会出现这样的问题:页面边上会出现滚动条,当我们操作鼠标时,鼠标会带动整个页面滑动,现在我们通过修改样式来解决这个问题,让unity的窗口始终100%填充浏览器窗口,并且不出现滚动条。我们创建自己的样式文件mystyle.cssbody { margin: 0; width: 100%; height:100%;}html,canv...
2020-03-25 11:19:14
1670
原创 基于UnityShader的面模型射线检测与表面曲线测量
实现流程:首先需要准备一个shader来做屏幕特效,shader中输出屏幕上面模型的深度信息,用来计算模型像素的坐标。Shader "Custom/Depth" { SubShader{ Tags{ "RenderType" = "Opaque" } Pass{ ZTest Always Cull Off ZWrite Off CGPROGRAM // Use sh...
2019-04-24 14:44:32
932
原创 Unity中使用设计模式之简单工厂模式、工厂方法模式和抽象工厂模式
比如我们想生产两种饮料(农夫山泉和脉动),在不使用任何设计模式时是这样的:using System.Collections;using System.Collections.Generic;using UnityEngine;public class Test : MonoBehaviour{ void Start() { Drink drink1...
2019-04-18 15:34:39
691
转载 Shader——移动平台上的优化
以下摘录自《Unity 3D ShaderLab开发实战详解》,第34章。(2015年第2版) 本章的大部分内容都是从 Unity 的官方论坛和文档收集的,在此只是简单地分享给读者。移动平台的特点相对于 PC 来说,移动平台上不论是内存还是运算速度,都相差了至少一个数量级,而且移动平台一般使用的是电源电池,而不是插线板,因此,其最大负荷是有限的...
2019-04-16 16:05:59
888
原创 Unity读取并加载大模型(OBJ格式)
本篇博客介绍如何在Unity中加载3Dmax导出的obj模型文件,为了简化流程,我们除了顶点和三角面之外只选择导出法线信息。 导出之后我们得到这样的一个文件 其中v代表顶点信息,vn代表法线信息,f代表三角索引信息。我们在c#脚本中分别读取这些信息并绘制网格。(ReadInfoObj方法放在多线程中可以避免读取文件时Unity卡顿,路...
2019-04-03 15:17:45
9330
15
原创 Unity Tessellation Shader+Geometry shader实现毛发效果
思路:利用Tessellation Shader(曲面细分着色器)来细化模型的三角面,保证后面生成的毛发足够细,足够密,利用Geometry shader(几何着色器)在细化后的三角面上额外生成向外突出的锥体来模拟毛发,该思路也可以实现其他类似的效果,性能消耗极少。Shader "Unlit/Tessellation"{ Properties { _Color("Mai...
2019-02-21 17:46:18
2626
2
原创 Unity之基于GeometryShader的补面
当我们在使用discard命令的时候模型会破面,因为discard截的是像素,截掉的地方并没有网格,是空的,所以要生成面才能组成一个封闭的模型,这里基于Unity的GeometryShader进行面的绘制。使用两个pass,第一个pass正常discard模型,第二个pass使用GeometryShader程序绘制面补上破面Shader "MyShader/GSTest"{ Pro...
2019-02-03 11:55:48
1580
6
原创 Unity之Geometry Shader
在DirectX 9的渲染管线中,可编程的Shader只有顶点着色器和片段着色器两类。但是在DirectX 10开始,渲染管线增加了一个【可选】的几何体着色器。优点:可以修改网格(增删改模型的顶点及三角面等)缺点:几何体着色器并行调用硬件困难,并行程度低,效率和顶点着色器有很大的差距实现流程:(以一个简单的实例为准)Shader "Custom/Geometry...
2019-02-02 16:22:45
2784
原创 Unity之基于光线投射算法的体渲染技术(二)
接上文https://blog.youkuaiyun.com/qq_34980278/article/details/84633767第二种光线投射算法的实现,基于光线起点(相机位置)。将相机位置由世界坐标通过模型视图投影矩阵反变换到长方体的局部坐标空间。每个fragment的坐标作为光线的入射点,由变换后的相机位置与光线入射点确定光线的方向,在沿着光线方向从入射点前进时,每到达一个新的点,判断其是否在长...
2019-01-25 18:20:41
1877
原创 初识ComputeShader
同其他shader一样,ComputeShader也是一段直接运行在GPU上的代码,只是它不在传统的渲染管线当中。它支持海量数据的传输和计算。下面通过具体的例子来见识一下ComputerShader的魅力所在。 我们通过ComputeShader+VFShader+C#来实现粒子效果,并且实时控制这些粒子的颜色和位置。在Computeshader中我们定义粒子对象的结构体,包...
2019-01-18 17:12:03
4836
2
原创 Unity中基于观察者模式的原理实现事件绑定
两种方法都可以实现对对象中数据的绑定,第一种通过接口实现,第二种通过委托实现,都需要手动添加绑定,第一种手动触发对应事件,第二种自动触发对应事件。一、通过接口实现1.首先定义需要触发的事件的接口public interface IWBindable{ void onBindingUpdate(Wbindable vo);}2.定义值对象的基类,实现事件的注册注销等...
2018-12-20 16:23:39
581
原创 Unity中使用设计模式之观察者模式
观察者模式描述了一夫多妻的关系,多个妻子(观察者)同时监视一个丈夫(被观察者),丈夫有什么小动作,妻子会收到通知或者采取一些行动。首先需要定义一个丈夫类,该类包含了结婚了离婚的操作(添加和删除观察者),以及妻子将会采取事件的回调Unity的委托和事件大大简化了该模式的实现,否则我们需要在丈夫类申请一个妻子容器,在Notify()中还要foreach所有妻子对象public class...
2018-12-20 14:34:33
452
1
原创 Unity中使用设计模式之命令模式
首先实现命令模式的基本流程:需要三个类(命令发起者,具体命令类(继承自抽象命令类),命令执行者),命令执行操作放在命令执行者的类中,具体命令类来决定具体执行的是哪一个或哪些命令执行操作。using System;using System.Collections;using System.Collections.Generic;using UnityEngine;public c...
2018-12-20 10:48:43
539
原创 Unity内置BRDF光照模型的详解和实现
参考:http://www.cnblogs.com/wbaoqing/p/9810386.htmlhttps://blog.youkuaiyun.com/linuxheik/article/details/78662590BRDF(双向反射分布函数):光线照到一个物体产生了反射,由于该物体的表面不是理想的镜面,所以光线向各个方向反射(双向反射命名的含义),而且各个方向上的反射强度不同(反射包括漫反射和...
2018-12-04 17:32:40
4393
2
原创 Unity之基于光线投射算法的体渲染技术(一)
本文参考《GPU编程与CG语言之阳春白雪下里巴人》光线投射算法原理: 光线投射方法是基于图像序列的直接体会之算法,从图像的每一个像素,沿固定方向(通常是视线方向)发射一条光线,光线穿越整个图像序列,并在这个过程中,对图像序列进行采样获取颜色信息,同时根据光线吸收模型将会颜色值进行累加,直至光线穿越整个图像序列,最后得到的颜色值就是渲染图像的颜色。实现流程:C#代码部...
2018-11-29 15:56:51
2687
5
转载 图形学渲染管线
本文由@浅墨_毛星云 出品,转载请注明出处。 文章链接: http://blog.youkuaiyun.com/poem_qianmo/article/details/70544201这篇文章是解析计算机图形学界“九阴真经总纲”一般存在的《Real-Time Render...
2018-11-29 11:19:14
654
原创 高斯模糊、均值模糊和边缘检测
参考文献https://www.cnblogs.com/evennl/p/3894438.html 传统的高斯模糊实现的原理是用三个通道(降采样通道、横向模糊通道和纵向模糊通道),降采样通道决定采样的步长,然后以当前uv为中心,当前步长为基准,采样左三右三及自身共七个点为横向模糊的pass,采样上三下三及自身七个点为纵向模糊的pass,每个采样值需乘以高斯分布曲线的取值(系数)加权...
2018-11-26 18:32:53
1901
原创 解决discard或clip后模型的视觉破面问题
在UnityShader中discard和clip是用在fs中的剔除像素的操作,可以很方便快速的实现模型的切割消融等效果,但单纯的discard(clip)操作会是图一这样的效果,很丑陋。加了反面渲染(cull off)之后是图二的效果,也很丑陋。图三图四就不一样了,像个实心的模型,高大上。代码如下: Shader "Unlit/CullShader"{ Pro...
2018-11-26 16:50:24
1742
原创 在自己的VFShader中调用标准光照模型
我们知道在surfaceShader中可以通过#pragma surface surf Standard 直接调用标准光照模型,Unity对surfaceShader封装了太多东西。本节参照NewSurfaceShader编译成的VFShader实现自己的VFSahder中的标准光照模型。代码如下:Shader "Unlit/NewUnlitShader"{Propert...
2018-11-08 16:57:51
530
原创 从最简单的SurfaceShader开始层层解剖unity的标准光照模型
我们新建一个Standard Surface Shader,单击showgenerated code打开该表面着色器被编译成vfShader之后的代码。 代码框架如下:每个重要的pass的片段程序中都进行了标准光照模型的处理,我们提取其中一个打开Unity安装目录Editor\Data\CGIncludes中的UnityPBSLighting.cginc文件找到这两个方...
2018-11-08 16:49:30
952
原创 ShaderToy上GLSL代码移植到unity平台总结
此处借用shadertoy上大神的glslShader https://www.shadertoy.com/view/MdX3zr方法一:自定义一个cginc文件来映射两种语言的数据类型,然后在shader中移植算法部分,最后在片段程序中输出颜色时调用mainImage(main)方法。GlslToHlsl.cginc#ifndef GlslToHlsl#define Glsl...
2018-11-07 18:26:33
2959
原创 基于光线投射算法(累加密度和最大密度投影)的三维CT图像(X光)效果
思路:利用平面的顶点和法线模拟一束平行光线,计算光线与物体(AABB)相交部分,以一定的步长采样相交部分,并且累加每一步采样得到的值,最后乘以相同的系数取平均值输出颜色。Texture3D大小512x512x415。Shader "Custom/XAddShader"{ Properties { _Volume("Texture3D", 3D) = "" {...
2018-10-31 18:21:41
2198
原创 shader实现二维CT图像效果
首先需要根据医院提供的数据生成Texture3D,然后在shader中使用内置函数tex3D进行3D纹理采样,最后通过lightCT封装的算法过滤颜色通道,只取单个通道。shader代码如下,效果如图。Shader "Custom/CT"{ Properties { _Volume ("Texture3D", 3D) = "" {} ...
2018-10-29 14:36:51
964
3
原创 带光照模型的的6面切割模型VFshader
这是用6个面来切割模型shader,当然稍加修改可以支持n(n>=1)个面,在c#代码中分别为pPoint和pNormal参数赋值,pPoint传入平面的世界坐标,pNormal传入该平面的法线。考虑到性能,光照模型加在了顶点程序中。Shader "Custom/6PlaneClipShader"{ Properties{ _Diffuse("Di...
2018-10-29 13:55:55
410
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人