Search Unity

  1. We are migrating the Unity Forums to Unity Discussions by the end of July. Read our announcement for more information and let us know if you have any questions.
    Dismiss Notice
  2. Dismiss Notice

Question Placement of a 3d texture

Discussion in 'Shaders' started by djnike00x, May 5, 2022.

  1. djnike00x

    djnike00x

    Joined:
    Nov 30, 2021
    Posts:
    1
    Hi everyone, I am new here so I hope to write a question in the right place.
    I am programming an ecography simulator and I have an interface that allow the user to place a 3D object of possible internal organs inside a human body.
    The rendering of the object is done using a shader over the object and a 3D texture.
    This is the shader code (if can be useful)
    Code (CSharp):
    1. Shader "Custom/Texture3D"
    2. {
    3.     Properties
    4.     {
    5.         _MainTex ("Albedo (RGB)", 3D) = "" {}
    6.     }
    7.     SubShader
    8.     {
    9.         Tags { "RenderType"="Opaque" }
    10.         LOD 200
    11.  
    12.         Pass{
    13.             CGPROGRAM
    14.  
    15.             #pragma vertex vert
    16.             #pragma fragment frag
    17.             #include "UnityCG.cginc"
    18.             #pragma target 3.0
    19.  
    20.             sampler3D _MainTex;
    21.  
    22.             struct vertInput
    23.             {
    24.                 float4 pos : POSITION;
    25.                 float3 uv : TEXCOORD0;
    26.             };
    27.  
    28.             struct v2f
    29.             {
    30.                 float4 pos : SV_POSITION;
    31.                 float4 pos_w : TEXCOORD1;
    32.                 float3 uv : TEXCOORD0;
    33.             };
    34.  
    35.             v2f vert (vertInput input)
    36.             {
    37.                 v2f o;
    38.                 o.pos_w = mul(unity_ObjectToWorld, input.pos) ;
    39.                 o.pos = UnityObjectToClipPos(input.pos);
    40.                 o.uv = input.uv;
    41.                 return o;
    42.             }
    43.  
    44.             half4 frag(v2f i) : SV_Target
    45.             {
    46.                 half4 mainColor = tex3D(_MainTex, float3(i.pos_w.x, i.pos_w.y, i.pos_w.z));
    47.                 return mainColor;
    48.             }
    49.            
    50.             ENDCG
    51.         }
    52.     }
    53.     FallBack "Diffuse"
    54. }
    It seems to work well, the problem is that using a shader the 3D texture is always placed in the origin (0,0,0).
    Is there a method to assign new world coordinates to the texture position?
    Any kind of alternative solutions are wisely accepted, thanks