stevensen Geschrieben 5. Dezember 2017 Melden Share Geschrieben 5. Dezember 2017 Mache schon paar Jahre immer wieder mit Unity rum, hab aber immer wieder meine Probleme. Ich habe 2 Kameras als Childs an einem Rick und möchte diese beiden Views in einer Ausgabe vereinen. Jetzt soll jedes Bild (der jeweiligen Kamera) mit einer einem Raster(Alpha) versehen werden. Jeder Kamerabild soll mit einem Raster (veritkale Linies mit 1 Pixel abstand) maskiert werden Wie fängt man sowas an? Gibts zum Einstieg irgendwo z.B. einen ImageShader mit dem man ein geratestertes Bild anzeigen kann? Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Zer0Cool Geschrieben 5. Dezember 2017 Melden Share Geschrieben 5. Dezember 2017 Wäre eine gute Aufgabe für ein Kameraeffekt-Script. Hier ein Tutorial mit einem CRT-Effekt:https://www.alanzucconi.com/2015/07/08/screen-shaders-and-postprocessing-effects-in-unity3d/ Im Endeffekt brauchst du einen Fragmentshader der deinen gewünschten Effekt erzeugt. Shader die in "OnRenderImage" verwendet werden operieren auf einem Quad. Dieses Quad (Plane) beinhaltet den kompletten Bildschirminhalt. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Zer0Cool Geschrieben 5. Dezember 2017 Melden Share Geschrieben 5. Dezember 2017 Der Shader war ne harte Nuss, aber hier das Ergebnis: Shader "Custom/RasterShader" { Properties { _Color ("Color", Color) = (1,1,1,1) _GridColor("Grid Color", Color) = (0,0,0,1) _MainTex ("Albedo (RGB)", 2D) = "white" {} _Glossiness ("Smoothness", Range(0,1)) = 0.5 _Metallic ("Metallic", Range(0,1)) = 0.0 } SubShader { Tags { "RenderType"="Opaque" } LOD 200 CGPROGRAM // Physically based Standard lighting model, and enable shadows on all light types #pragma surface surf Standard fullforwardshadows // Use shader model 3.0 target, to get nicer looking lighting #pragma target 3.0 sampler2D _MainTex; struct Input { float2 uv_MainTex; float4 screenPos; }; half _Glossiness; half _Metallic; fixed4 _Color; fixed4 _GridColor; // Add instancing support for this shader. You need to check 'Enable Instancing' on materials that use the shader. // See https://docs.unity3d.com/Manual/GPUInstancing.html for more information about instancing. // #pragma instancing_options assumeuniformscaling UNITY_INSTANCING_CBUFFER_START(Props) // put more per-instance properties here UNITY_INSTANCING_CBUFFER_END void surf (Input IN, inout SurfaceOutputStandard o) { // Albedo comes from a texture tinted by color fixed4 c = tex2D (_MainTex, IN.uv_MainTex) * _Color; float _screenX = _ScreenParams.x * IN.screenPos.x; float _screenY = _ScreenParams.y * IN.screenPos.y; float3 _color = c.rgb; for (int i = 0; i < _ScreenParams.x; i++) { if (_screenX > i && _screenX <= i+1) { float stepx = i; if (fmod(stepx, 2) == 0) _color = _GridColor; } } o.Albedo = _color; // Metallic and smoothness come from slider variables o.Metallic = _Metallic; o.Smoothness = _Glossiness; o.Alpha = c.a; } ENDCG } FallBack "Diffuse" } (Das Bild ist durch den Forumsviewer verfälscht, 2x draufklicken dann sieht man das Original) Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
stevensen Geschrieben 8. Dezember 2017 Autor Melden Share Geschrieben 8. Dezember 2017 Vielen Dank für die Antworten! Ich habs mal ausprobiert aber es geht irgendwie nicht. Hier mal was ich gefunden habe. Also wenn ich das Material auf eine Textur(Box) lege, funktioniert der Alpha teilweise richtig, wenn ich das Material mit dem Shader als Imageshader auf die Kamera lege sieht das im ersten Moment auch noch richtig aus , dann aber ändert sich die Ansicht des Alpha, und wenn ich z.B. das Tileing des Alpha verändere,verschmiert er. Auf der Textur (auf einem Mesh zb) sieht das Tiling weiterhin korrekt aus. Die Settexture und combine Funktionen etc sind ja veraltet, gibt's irgendwo mal Tutorials für Imageshader mit der aktuellen empfolenen Methode? Shader "Custom/testShader" { Properties{ _Tint("Tint Color", Color) = (.9, .9, .9, 1.0) _TexMat1("Base (RGB)", 2D) = "white" {} _PathMask1("Path Mask (A)", 2D) = "" {} _TexMat2("Base (RGB)", 2D) = "white" {} _PathMask2("Path Mask (B)", 2D) = "" {} _Blend("Blend", Range(0.0,1.0)) = 0.0 } Category{ ZWrite On Alphatest Greater 0 Tags{ Queue = Transparent RenderType = Transparent } Blend SrcAlpha OneMinusSrcAlpha ColorMask RGB SubShader{ Pass{ Material{ Diffuse[_Tint] Ambient[_Tint] } Lighting On SetTexture[_TexMat1]{ combine texture } SetTexture[_PathMask1]{ combine previous, texture } SetTexture[_TexMat2]{ constantColor(0,0,0,[_Blend]) combine texture lerp(constant) previous } SetTexture[_TexMat2]{ combine previous + -primary, previous * primary } } // end pass } // end shader FallBack " Diffuse", 1 } } Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Zer0Cool Geschrieben 8. Dezember 2017 Melden Share Geschrieben 8. Dezember 2017 Ich weis immer noch nicht, was du eigentlich genau haben möchtest. Was meinst du mit Alpha, was verwendest du für Texturen? Was funktioniert an meinem Shader nicht? Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Recommended Posts
Archiviert
Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.