Jump to content
Unity Insider Forum

Textur grösse beibehalten


Jomnitech

Recommended Posts

Hallo

Ich suche eine möglichkeit um die Textur grösse bei zu behalten, unabhängig wie gross das Objekt ist. Ich hab schon viel gegoogelt, bin aber auf keine Lösung gestossen.

Ich möchte das die Textur/Material immer seine grösse beibehält, egal wie gross oder klein das Objekt ist.

Ich habe dazu nach langem googeln keine vernüftige Lösung gefunden. Natürlich könnte man einfach mit kleinen Planes arbeiten die das entsprechende Seitenverhältnis haben, oder für jedes grösse Plain ein separates Material mit entsprechenden "tiles" erstellen, aber muss das sein? Gibt es hierfür nicht etwas einfaches?

Ich habe auch schon Scripts gefunden die das Problem lösen, aber da muss man für jede Plane einzeln die Proportionen einstellen, kommt in etwa auf selbe raus wie entsprechende Materials zu erstellen.

Im Anhang zu sehen wie es ist, und wie ich es gerne hätte.

Ist.png

soll.png

Link zu diesem Kommentar
Auf anderen Seiten teilen

Es gibt keine generelle Lösung für alle 3D-Objekte die funktioniert. Es gibt einige Speziallösungen die für Cubes oder andere 3D-Objekte, dabei werden die UVs überschrieben. Ein Asset welches für viele 3D-Objekte funktioniert wird dabei genannt.

Die Shadervariante funktioniert dabei leider nur für 2D-Objekte.

Wir hatten letztens eine Diskussion zum Thema:

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hier ist ein Shader der nicht perfekt ist, aber das Ergebnis ist annehmbar. Sollte man aber nur für statische Objekte verwenden und die Textur bleibt nicht 100%tig "stabil", aber was besseres habe ich auf die Schnelle nicht hinbekommen, zumindest nicht als Shader. Für bessere Lösungen muss man vermutlich die UVs vorberechnen.

// Shader by Zer0Cool for the Unity Insider Forum (forum.unity-community.de)
// Skype: zer0f0rce
Shader "Custom/WorldspaceTiling" {
	Properties{
		_Color("Color", Color) = (1,1,1,1)
		_MainTex("Albedo (RGB)", 2D) = "white" {}
		_Scale("Scale", Vector) = (1, 1, 1, 1)
		_BumpMap("Bumpmap", 2D) = "bump" {}
		_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 vertex:vert 

		// Use shader model 3.0 target, to get nicer looking lighting
		#pragma target 3.0

		sampler2D _MainTex;
		sampler2D _BumpMap;
		float4 _Scale;

		struct Input {
			float2 uv_MainTex;
			float2 uv_BumpMap;
		};

		half _Glossiness;
		half _Metallic;
		fixed4 _Color;
		
		float4 TexCoordsWorld(appdata_full v)
		{
			float4 posWorld = mul(unity_ObjectToWorld, v.vertex);
			float4 texcoord;

			float4 _normal = normalize(mul(unity_ObjectToWorld, v.normal));

			if (abs(_normal.x) > 0.5)
			{
				texcoord.xy = posWorld.yz;
				texcoord.zw = posWorld.yz;
			}
			else if (abs(_normal.z) > 0.5)
			{
				texcoord.xy = posWorld.xy;
				texcoord.zw = posWorld.xy;
			}
			else
			{
				texcoord.xy = posWorld.xz;
				texcoord.zw = posWorld.xz;
			}

			return texcoord;
		}

		void vert(inout appdata_full v)
		{
			v.texcoord = TexCoordsWorld(v);
		}

		void surf(Input IN, inout SurfaceOutputStandard o) {
			// Albedo comes from a texture tinted by color
			fixed4 c = tex2D(_MainTex, IN.uv_MainTex) * _Color;
			o.Albedo = c.rgb;
			o.Normal = UnpackNormal(tex2D(_BumpMap, IN.uv_MainTex));
			// Metallic and smoothness come from slider variables
			o.Metallic = _Metallic;
			o.Smoothness = _Glossiness;
			o.Alpha = c.a;
		}
	ENDCG
	}
	FallBack "Diffuse"
}

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

@Zer0Cool

Hey, vielen Dank für deine Antwort. Der Shader macht prinzipiell genau das was ich möchte, grosses Danke hierfür. Ein kleiner Wermutstropfen dass er die, ich sage mal Referenzposition, nicht beibehält. Wenn ich das Objekt verschiebe, bleibt der Shader/Textur an der Position, statt sich an dem Objekt auszurichten.

Edit:

Was meinst du mit Zitat:" was besseres habe ich auf die Schnelle nicht hinbekommen "? hast du den auf die Schnelle selber geschreiben?
Und jetzt weiss ich auch was du mit "nur auf statische Objekte" meinst, da er sich nicht mitbewegt.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Zitat

Hey, vielen Dank für deine Antwort. Der Shader macht prinzipiell genau das was ich möchte, grosses Danke hierfür. Ein kleiner Wermutstropfen dass er die, ich sage mal Referenzposition, nicht beibehält. Wenn ich das Objekt verschiebe, bleibt der Shader/Textur an der Position, statt sich an dem Objekt auszurichten.

Ja, die Textur richtet sich nicht am Objekt aus, sondern quasi an der Worldposition und damit sollte man den Shader für bewegte Objekte lieber nicht verwenden.
 

Zitat

Was meinst du mit Zitat:" was besseres habe ich auf die Schnelle nicht hinbekommen "? hast du den auf die Schnelle selber geschreiben?

Ja, ca. 90% des Shaders sind von mir. Der Shader ist nicht perfekt, da er die Originaltextur teilweise etwas verzerrt (hängt von der Rotation des Meshes im Raum ab).

Link zu diesem Kommentar
Auf anderen Seiten teilen

@Zer0Cool

Wow, bin gerade etwas sprachsol das du extra eine Shader für mich schreibst. Shaders sind ja schon etwas wie die Königsdisziplin des Programmierens.
Der Shader macht eigentlich genau was er sollte, von daher vielen Dank.

Habe jetzt etwas damit rumgespielt und bin eigentlich vollends zufrieden.

Ich ziehe meinen Hut und verneige mein Haupt, vielen Dank.

 

-closed-

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.

×
×
  • Neu erstellen...