我不得不将XNA着色器移植到Unity的着色器中,并想验证我是否正确执行了此操作.
Pass1使用alpha混合的部分SrcBlend,DestBlend并将set的cull设置为none是我唯一想要确保正确的地方.
这是XNA着色器版本:
pass Pass1
{
AlphaBlendEnable = true;
SrcBlend = SRCALPHA;
DestBlend = INVSRCALPHA;
CullMode = None;
VertexShader = compile vs_2_0 TheVertexShader();
PixelShader = compile ps_2_0 ThePixelShader();
}
Run Code Online (Sandbox Code Playgroud)
这是我制作的Unity Shaderlab端口:
Tags{ "Queue" = "Transparent" "RenderType" = "Transparent" }
LOD 100
Blend SrcAlpha One
Blend DstAlpha OneMinusSrcAlpha
ZWrite Off
Cull Off
Run Code Online (Sandbox Code Playgroud)
它似乎在Unity中工作正常,但这是Unity中完全相同的传递设置吗?如果没有,则需要进行哪些更改以获得确切的等效性.
假设您有一个简单的 Unity 着色器。它根本不使用任何纹理。它只是抓住了位置..
void vert (inout appdata_full v, out Input o)
{
UNITY_INITIALIZE_OUTPUT(Input,o);
o.localPos = v.vertex.xyz;
}
Run Code Online (Sandbox Code Playgroud)
然后画一个正方形..
示例中的四边形已使用变换拉伸约 3:1。
如果在着色器中我们只知道缩放比例(或者只是比率),我们就可以很容易地绘制“正方形”
对于广告牌、2D 图像和背景等,这显然是一种常见的日常技术。
在当前的统一 (2018) 中,您如何简单地获得对象的当前缩放比例,在 Cg 中?
这是 Unity 那些疯狂的事情之一,它 (1) 完全没有记录 (2) 唯一可用的关于它的信息长达 13 年,我的意思是其中一些人可能已经去世 (3) 它已经发生了巨大变化在不同的 Unity 版本中,经常讨论它是完全错误的。叹。
怎么做?你是否可以?
目前我只有一个简单的脚本传递值,这还可以,但有点以次充好。
我在 Unity 中有一些(适当的、平面的)YUV 纹理,我只想看看它们供开发使用。
Unity(他们的着色器语言变体)实际上有一个可用的 YUV 着色器吗?
从概念上讲,从 YUV 转换为 RGB 很简单……但有点繁琐。
我按照这个视频创建了我的第一个着色器。溶解着色器视频链接
在协程中,我从对象中获取了材质的组件:
PalaceMaterial = palaceInstance.GetComponent <Renderer> () .material;
Run Code Online (Sandbox Code Playgroud)
我将参数设置为0:
PalaceMaterial.SetFloat ("_ CutoffHeight", 0);
Run Code Online (Sandbox Code Playgroud)
为了达到这个效果,我不得不修改参数“CuttoffHeight”,逐渐将其放入Update()中
PalaceMaterial.SetFloat("_CutoffHeight", Mathf.MoveTowards(PalaceMaterial.GetFloat("_CutoffHeight"), CutoffHeight, 100 * Time.deltaTime));
Run Code Online (Sandbox Code Playgroud)
我将其应用于所有对象。每 2 秒我实例化一个“不可见对象”(CutoffHeight 设置为 0),并在 Update() 中逐渐更改值。现在我想将此参数更改为同时使用此着色器的所有对象。我希望我说清楚了。
我的项目视频: 项目,Dissolve_Effect
我想同时更改第一个平台中的所有立方体中的“_CutoffHeight”参数,然后更改第二个平台中的所有立方体,等等。您有什么想法吗?