前面使用SectionCrosss插件,无法获取预期的效果,又不知道怎么改,只能先学习一下相关的知识先。
有些博客和视频资料
资料1:https://www.cnblogs.com/flyingziming/p/12937642.html
资料2:UnityShader学习笔记- Stencil Buffer
资料3:https://www.cnblogs.com/hont/p/6579848.html
官方文档:https://docs.unity3d.com/Manual/SL-Stencil.html
----------------------------------------------------------------------------------------------------------------
视频1:【教程】模板测试原理详解(空间效果实现)(https://www.bilibili.com/video/BV1NJ41167Ec?from=search&seid=5371402051527103699)
视频内容吐槽了一下一个视频教程,想到我们公司没有专门的技术美术(TA)(什么是技术美术?),很大关系到效果的细节,都只能我们程序员自己边学边调整,说实话Shader的基础都没学过....,慢慢来吧,补一下。
然后内容是基本的Stencil的原理和基本参数
然后用一个特效例子说明了Stencil的使用,特效包:Magic Effects Pack
在这里才算基本有点怎么使用的概念,需要两个Shader,一个是Mask,一个是Render的内容,Mask的Shader里面的Comp是Always,Render的Shader里面Comp是Equal。
CrossSection里面的x_patch就行Mask,剖切纹理是Render。
CrossSection的Box也是Mask,被剖切的模型则是Render,在包围和外的模型都不显示,和上面的陨石一样。
-----------
另外收获了一个RFX4_Material_Queue的脚本,ColorMask 0,ZWrite On。
其他知识 作用位置,在透明测试(AlphaTest)和深度测试(DepthTest)之间
个人疑惑:
这样的话,我那个重叠模型剖切面问题,真的能够通过这个处理吗?正反面渲染是哪个测试的?或者说实际上不分正反面,仅仅是深度测试的原因。
我是想在该渲染的渲染后,把剖切再绘制出来的。
对了,剖面实际上是绘制在patch上,那深度应该是最近的吧。
--------------------------------------------------------------------------------------------------------
视频2:Unity Shader 模板缓冲(stencil buffer)简单例子(https://www.bilibili.com/video/BV1MK4y1b7dZ?from=search&seid=14837776400920233768)
通过一个和地板一样的Mask,将地板上的粒子效果拦截在地板范围内:
=>
------------------------------------------------------------------------------------------------------------
视频3:2020/07/15.使用Unity的Stencil功能 完成换装 模型切换等特殊效果(https://www.bilibili.com/video/BV135411e7dr?from=search&seid=9695326434311482142)
一个模型切换的Demo,两个模型,两个Mask(Cube),Mask位置移动,显示的模型切换
没有讲知识也没将代码,就提了一下,说实话,20多分钟,废话有些多,这些做视频的人还是比较活泼的。
提供了一个博客资料:https://blog.csdn.net/u011047171/article/details/46928463
-----------------------------------------------------------------------------------------------------
三个视频看了,也就是理解了Stencil是什么,能做什么,接下来需要实际操作。
另外感觉CrossSection的剖面部分还是有点其他东西,为什么纹理正好显示在剖面上,它怎么知道显示什么纹理的,纹理的信息存储在哪里?现在看的视频其实都就是模型的显示/隐藏的切换用。