Question regarding 'fixing' shaders: is this possible?
Question: Can you use the values of this working shader, to fix the dodgy one? I have found, and previously disabled, a shader which is wonky. I have found a working shader that the dodgy one appears to 'sit' on. Is this possible? If so, how? Here is the working shader: [code]//Working shaders that the broken shader covers cbuffer cb1 : register(b1) { float4 cb1[8]; } Texture2D<float4> StereoParams : register(t125); Texture1D<float4> IniParams : register(t120); void main( float4 v0 : NORMAL0, float4 v1 : POSITION0, float4 v2 : POSITION6, float4 v3 : POSITION7, float4 v4 : TANGENT0, float4 v5 : TEXCOORD0, float4 v6 : TEXCOORD1, out float4 o0 : TEXCOORD0, out float3 o1 : TEXCOORD1, out float3 o2 : TEXCOORD2, out float2 o3 : TEXCOORD3, out float4 o4 : SV_Position0) { float4 r0,r1,r2,r3,r4; uint4 bitmask, uiDest; float4 fDest; r0.xyz = v0.xyz * cb1[0].www + cb1[1].www; r1.xyz = v3.zxy * r0.yzx; r1.xyz = v3.yzx * r0.zxy + -r1.xyz; r0.w = dot(v3.xyz, r0.xyz); r2.xyzw = v3.xyzw + v3.xyzw; r1.w = v3.w * r2.w; r0.xyz = r1.www * r0.xyz + -r0.xyz; r0.xyz = r0.www * r2.xyz + r0.xyz; r0.xyz = r1.xyz * r2.www + r0.xyz; r1.xyz = v4.xyz * cb1[0].www + cb1[1].www; r0.w = dot(v3.xyz, r1.xyz); r3.xyz = r1.www * r1.xyz + -r1.xyz; r3.xyz = r0.www * r2.xyz + r3.xyz; r4.xyz = v3.zxy * r1.yzx; r1.xyz = v3.yzx * r1.zxy + -r4.xyz; r1.xyz = r1.xyz * r2.www + r3.xyz; r3.xyz = r1.yzx * r0.zxy; r3.xyz = r0.yzx * r1.zxy + -r3.xyz; o1.xyz = r0.xyz; o2.xyz = r1.xyz; r0.x = 0.000000000e+000 < v4.w; o0.xyz = r0.xxx ? r3.xyz : -r3.xyz; r0.xyz = v1.xyz * cb1[0].xyz + cb1[1].xyz; r1.xyz = r1.www * r0.xyz + -r0.xyz; r0.w = dot(v3.xyz, r0.xyz); r1.xyz = r0.www * r2.xyz + r1.xyz; r2.xyz = v3.zxy * r0.yzx; r0.xyz = v3.yzx * r0.zxy + -r2.xyz; r0.xyz = r0.xyz * r2.www + r1.xyz; r0.xyz = v2.xyz + r0.xyz; r0.w = v1.w; r1.x = dot(cb1[7].xyzw, r0.xyzw); o0.w = r1.x; o4.w = r1.x; o3.xy = v6.xy * cb1[2].xy + cb1[2].zw; o4.x = dot(cb1[4].xyzw, r0.xyzw); o4.y = dot(cb1[5].xyzw, r0.xyzw); o4.z = dot(cb1[6].xyzw, r0.xyzw); return; }[/code] Here is the dodgy one which I have disabled: [code]//Messed up surfaces in station cbuffer cb0 : register(b0) { float4 cb0[11]; } Texture2D<float4> StereoParams : register(t125); Texture1D<float4> IniParams : register(t120); void main( float3 v0 : TEXCOORD0, out float3 o0 : TEXCOORD0, out float3 o1 : TEXCOORD1, out float4 o2 : SV_Position0) { float4 r0,r1; uint4 bitmask, uiDest; float4 fDest; r0.xyz = v0.xyz; r0.w = 1.000000000e+000; r1.x = dot(cb0[8].xyzw, r0.xyzw); r1.y = dot(cb0[9].xyzw, r0.xyzw); r1.z = dot(cb0[10].xyzw, r0.xyzw); r1.w = 1.000000000e+000; r0.x = dot(cb0[4].xyzw, r1.xyzw); r0.y = dot(cb0[5].xyzw, r1.xyzw); r0.w = dot(cb0[7].xyzw, r1.xyzw); o0.xyz = r0.xyw; o2.xyw = r0.xyw; o1.x = dot(cb0[0].xyzw, r1.xyzw); o1.y = dot(cb0[1].xyzw, r1.xyzw); o1.z = dot(cb0[2].xyzw, r1.xyzw); o2.z = dot(cb0[6].xyzw, r1.xyzw); //Disabled Shader o2=0; return; }[/code] Here is the ini file in case that is also needed: [code];------------------------------------------------------------------------------------------------------ ; Logging options. ; Comment line or set value to 0 for no logging. ;------------------------------------------------------------------------------------------------------ [Logging] ; Log all API usage calls=0 ; Log Input key actions input=0 ; Super verbose massive log debug=0 ; Unbuffered logging to avoid missing anything at file end unbuffered=0 ; Force the CPU affinity to use only a single CPU for debugging multi-threaded force_cpu_affinity=0 ; Log NVAPI convergence modifications convergence=0 ; Log NVAPI separation modifications separation=0 ; ------------------------------------------------------------------------------------------------------ ; Default constants to pass directly to shaders as IniParams ; ------------------------------------------------------------------------------------------------------ [Constants] ; x = 0.8 ; y = 1.0 ; z = 1.2 ; w = 0 ;------------------------------------------------------------------------------------------------------ ; Custom settings override for any of [convergence, separation, x, y, z, w] ; ; Four types are supported - by default the bindings will simply load the ; configured settings, but type=hold can be specified to have a preset ; active while the button is held, type=toggle can be used to make a simple ; on/off toggle, and type=cycle can be used to cycle between several presets. ; ; Delays (type=hold only) and linear or cosine trasition periods (any key type) ; can be used to better synchonrise setting changes to the game's animations, ; or to smoothly adjust UI elements over a short period of time. ; ; Key bindings: For A-Z and 0-9 on the number row, just use that single ; character. For everything else (including mouse buttons), use the virtual key ; name (with or without the VK_ prefix) or hex code from this article: ; http://msdn.microsoft.com/en-us/library/windows/desktop/dd375731(v=vs.85).aspx ; ; Keys can also be from XBox controllers using: ; XB_LEFT_TRIGGER, XB_RIGHT_TRIGGER, ; XB_LEFT_SHOULDER, XB_RIGHT_SHOULDER, ; XB_LEFT_THUMB, XB_RIGHT_THUMB, ; XB_DPAD_UP, XB_DPAD_DOWN, XB_DPAD_LEFT, XB_DPAD_RIGHT, ; XB_A, XB_B, XB_X, XB_Y, XB_START, XB_BACK ; By default all attached controllers are used - to associate a binding with a ; specific controller add the controller number 1-4 to the prefix, like ; XB2_LEFT_TRIGGER, though this may be more useful for hunting than playing. ;------------------------------------------------------------------------------------------------------ [Key1] ; THIS IS TO TOGGLE PLANET DEPTHS so they look bigger: default = OFF Key = / type = toggle w = 1.0 [Key2] ; THIS IS TO TOGGLE STAR BLOOM to reduce doubling of objects: default = ON Key = . type = toggle x = 1.0 ; Example to support momentary hold type overrides, like aiming. ;[Key2] ;Key = RBUTTON ;convergence = 0.1 ;type = hold ; Example for a toggle override. ;[Key3] ;Key = q ;separation = 0.1 ;type = toggle ;y = 0.0 ; Example for a momentary hold, but with a delay followed by a smooth ; transition (ms) on hold and release to sync better with the game. Note that ; delay only works with type=hold (for now), while transitions will work with ; all types. ;[Key4] ;Key = XB_LEFT_TRIGGER ;type = hold ;y = 0.25 ;delay = 100 ;transition = 100 ;transition_type = linear ;release_delay = 0 ;release_transition = 500 ;release_transition_type = cosine ; Example of a cycle transition that might be used to provide several presets ; that set both convergence and UI depth to suit different scenes in a game. ; Cosine transitions are used to smooth the changes over 1/10 of a second. ;[Key5] ;Key = Q ;type = cycle ;convergence = 1.45, 1.13, 0.98 ;z = 0.25, 0.5, 0.75 ;transition = 100 ;transition_type = cosine ;------------------------------------------------------------------------------------------------------ ; Shader hunting options. ; Default setup is to use keyboard similar to Helix presets ;------------------------------------------------------------------------------------------------------ [Hunting] ; Release mode is with shader hunting disabled, optimized for speed. hunting=0 ; Highlight mode of currently selected shader / rendertarget. ; "skip" = skip shader. don't render anything using the currently selected shader. ; "original" = fall back to original shader if the currently selected shader was patched. ; "mono" = disable stereo for the selected shader / rendertarget. ; "zero" = shader output is all zero. NOTE: this has a big performance impact. marking_mode=skip ; Key bindings: For A-Z and 0-9 on the number row, just use that single ; character. For everything else (including mouse buttons), use the virtual key ; name (with or without the VK_ prefix) or hex code from this article: ; http://msdn.microsoft.com/en-us/library/windows/desktop/dd375731(v=vs.85).aspx ; ; XBox controllers are supported using the same bindings as the [Key] sections ; (see above). If the game already uses the first controller you might try ; using the second controller for hunting with e.g. XB2_LEFT_SHOULDER ; rotate through all VISIBLE pixel shaders at the current scene. next_pixelshader=VK_NUMPAD2 previous_pixelshader=VK_NUMPAD1 mark_pixelshader=VK_NUMPAD3 ; rotate through all VISIBLE vertex shaders at the current scene. next_vertexshader=VK_NUMPAD5 previous_vertexshader=VK_NUMPAD4 mark_vertexshader=VK_NUMPAD6 ; rotate through all USED index buffers at the current scene. next_indexbuffer=VK_NUMPAD8 previous_indexbuffer=VK_NUMPAD7 mark_indexbuffer=VK_NUMPAD9 ; rotate through all USED render targets at the current scene. next_rendertarget=VK_MULTIPLY previous_rendertarget=VK_DIVIDE mark_rendertarget=VK_SUBTRACT ; Re-enable shaders once done with hunting: done_hunting=VK_ADD ; Screenshot as pns take_screenshot=VK_SNAPSHOT ; reload all fixes from ShaderFixes folder reload_fixes=VK_F10 ; Uncomment to enable experimental support to reload the d3dx.ini live. Note ; that certain settings may only take effect when the game is first launched or ; otherwise may not reload properly, so if something doesn't seem to work after ; reloading the config you should restart the game (e.g. hunting can be enabled ; live, but copy on mark won't work). This can be the same key as reload_fixes ; for convenience, or a different key may be used to avoid resetting the ini ; parameters every time the shaders are reloaded. ;reload_config=VK_F10 ; Hold this key to temporarily disable the fix - useful to quickly check what ; an effect looked like in the original game. ;show_original=VK_F11 ; tunable parameter to use in modified shaders as variable (StereoParams.Load(int3(1,0,0)).xyzw) ; enabling tuning results in a small performance hit because the parameter texture ;tune1_up=VK_INSERT ;tune1_down=VK_DELETE ; Auto-repeat key rate in events per second. repeat_rate=6 ;------------------------------------------------------------------------------------------------------ ; Chain load other wrapper DLLs instead of system DLLs. ;------------------------------------------------------------------------------------------------------ [System] ;proxy_d3d9=d3d9_helix.dll ;proxy_d3d11=d3d11_helix.dll ;------------------------------------------------------------------------------------------------------ ; Settings to force display device to a specific mode. ; Uncomment a value to force the specific setting. ;------------------------------------------------------------------------------------------------------ [Device] ; overrides screen resolution. ;width=1280 ;height=720 ; overrides refresh rate set by game. ;refresh_rate=60 ; filters available video modes to those providing given refresh rates. ; some games don't explicitely set the refresh rate, but use the video mode. ; use this if setting refresh_rate doesn't work. ;filter_refresh_rate=24,59,60 ; forces creation of full screen devices and swap chains. ; use this for 3dtvplay if game won't active stereo mode. ; a value of 0 doesn't deactivate this option like on the others but ; forces the application into windowed mode. ;full_screen=1 ; some games explicitely disable stereo, prohibiting any stereo attempts. ; settings this to 1 ignores all stereo disabling calls and also calls NvAPI_Stereo_Enable to force stereo on. ;force_stereo=1 ; almost all DX11 games deactivate window message handling. ; setting this to 1 reenables print screen handling, alt-tab key handling etc. ;allow_windowcommands=1 ;------------------------------------------------------------------------------------------------------ ; Settings for NVidia stereo driver. ;------------------------------------------------------------------------------------------------------ [Stereo] ; games which have their own stereo renderer disable the NVidia automatic ; stereo mode and render themselves into stereo buffers (Crysis 3 for example). ; Setting this to 1 disables the game stereo renderer and enables NVidia auto stereo mechanism. automatic_mode=0 ; Some games (CryEngine games, for example) lock the separation to a specific ; value, which can be undesirable. Set this to 1 to ignore these requests from ; the game to unlock the separation: unlock_separation=0 ; games without predefined profiles can't save stereo settings. ; enabling this options automatically creates a profile for unknown games. create_profile=0 ; sets the global surface creation heuristic for NVidia stero driver. ; 0 = NVAPI_STEREO_SURFACECREATEMODE_AUTO - use driver registry profile settings for surface creation mode. ; 1 = NVAPI_STEREO_SURFACECREATEMODE_FORCESTEREO - Always create stereo surfaces. ; 2 = NVAPI_STEREO_SURFACECREATEMODE_FORCEMONO - Always create mono surfaces. ;surface_createmode=1 ; overrides surface creation mode for square surfaces. ;surface_square_createmode=1 ;------------------------------------------------------------------------------------------------------ ; Settings for GPU manipulations. ; Render settings override ;------------------------------------------------------------------------------------------------------ [Rendering] ; GPU program manipulations. ; ; Shaders in game will be replaced by these custom shaders. override_directory=ShaderFixes ; Automatically patched shaders will be written here if caching is enabled. cache_directory=ShaderCache ; Shaders that are directly compiled by the game, instead of binary, go here. storage_directory=ShaderFromGame ; cache all compiled .txt shaders into .bin. this removes loading stalls. cache_shaders=1 ; preload all patched shaders. there's a bug in NVidia auto stereoization if stereo shaders ; are being loaded during the game on some HW/SW combinations, which turns off auto patching ; for those stereo shaders (results in partial mono rendering). this is a workaround for this case. preload_shaders=0 ; thread save data structure access. required on multithreaded rendering. use_criticalsection=1 ; Setting this option disables scissor limits rasterizer_disable_scissor=0 ;------------------------------------------------------------------------------------------------------ ; Analyzation options. ; ; save all autofixed shaders as HLSL export_fixed=0 ; save all shaders sent to DX11 as ASM, or as HLSL text files if compiled by game. export_shaders=0 ; save all shaders seen as HLSL code, autofixed or not. 1= HLSL only, 2=HLSL+OriginalASM, 3=HLSL+OriginalASM+RecompiledASM export_hlsl=0 ; stores a ShaderUsage.txt file on any marking button press. dump_usage=0 ;------------------------------------------------------------------------------------------------------ ; Automatic shader fixes. Those settings here apply only on newly read shaders. ; All existing *_replace.txt or *_replace.bin files are not tampered with. ; If you change settings here, the best workflow is to delete all shaders in ; the shader cache directory and let them be fixed again. ; Stereoize all shader parameters with position semantic. fix_sv_position=0 ; Pixel depth evaluation. ;fix_ZRepair_DepthTexture1=SceneDepthTexture.x ;fix_ZRepair_Dependencies1=MinZ_MaxZRatio ;fix_ZRepair_ZPosCalc1=zTex * MinZ_MaxZRatio.z - MinZ_MaxZRatio.w ;fix_ZRepair_DepthTexture2=SceneDepthTexture.x ;fix_ZRepair_Dependencies2= ;fix_ZRepair_ZPosCalc2=zTex ;fix_ZRepair_PositionTexture=PositionTexture ;fix_ZRepair_PositionCalc=1024 * %s ; Inject depth texture if other depth sources are unavailable. ;fix_ZRepair_DepthTextureHash=8a19f087b004598f ; Correct inverse transformations in pixel shaders using evaluated depth. ;fix_InvTransform=ScreenToLight,InverseTranslatedViewProjectionMatrix ; Back projection coordinate fix. ; ; Available variables in expressions: ; stereoParams.x = Separation value in range [0..1] or [-0..-1] dependent on active eye ; stereoParams.y = Convergence value in w coordinates (1/z) ; stereoParams.z = -1/1 for left/right eye ; stereoParams.w = Separation value without eye separation ; stereoTune.x = tune value 1 (default is 1) ; stereoTune.y = tune value 2 (default is 1) ; stereoTune.z = tune value 3 (default is 1) ; stereoTune.w = tune value 4 (default is 1) ; stereoScreenRes.x = Primary swap chain backbuffer horizontal resolution ; stereoScreenRes.y = Primary swap chain backbuffer vertical resolution ; zpos = current pixel z position in pixel shader ; wpos = current pixel w position in pixel shader ; Send inverse transformations from vertex shaders to pixel shaders. ;fix_BackProjectionTransform1=ScreenToTranslatedWorldMatrix._m00,ScreenToTranslatedWorldMatrix._m02,ScreenToTranslatedWorldMatrix._m01 ;fix_BackProjectionTransform2=ScreenToWorld._m00,ScreenToWorld._m02,ScreenToWorld._m01 ; Position variables to correct in pixel shaders. ;fix_ObjectPosition1=PointPositionAndInverseRadius ;fix_ObjectPosition1Multiplier=1, (stereoScreenRes.x/stereoScreenRes.y)*0.5, -0.5 ;fix_ObjectPosition2=SpotPositionAndInverseRadius ;fix_ObjectPosition2Multiplier=1, (stereoScreenRes.x/stereoScreenRes.y)*0.5, -0.5 ; Matrix multiplications to correct in pixel shaders. ;fix_MatrixOperand1=TranslatedWorldToShadowMatrix ;fix_MatrixOperand1Multiplier=1, (stereoScreenRes.x/stereoScreenRes.y)*0.5 - viewDirection.z*0.05 + (0.02791946-stereoParams.x/stereoParams.w), 0 ; autofix shader option: recompiles all vertex shaders. fixes minor differences in deferred rendering. ;recompile_all_vs=0 ;------------------------------------------------------------------------------------------------------ ; Shader manipulations without patches + shader filtering. ;------------------------------------------------------------------------------------------------------ ;[ShaderOverride1] ;Hash=69732c4f23cb6c48 ; Custom stereo separation value while rendering objects using this shader. ;Separation=0 ; Custom stereo convergence value while rendering objects using this ; shader (e.g. convergence=0 will move an object to infinity). ;Convergence=0 ; don't draw anything using this shader. ;Handling=skip ; advanced option: use this to override only if this shader is used rendering the given index buffer. ;IndexBufferFilter=b3e56ebcb0d20c32 ; Use replaced shader only when there is no active depth buffer (for UI filtering) ;depth_filter = depth_inactive ; Use replaced shader only when there *IS* an active depth buffer (for UI filtering) ;depth_filter = depth_active ; Only use replaced shader when it is used in conjunction with a specific shader ; (e.g. to adjust a vertex shader ONLY when it is used with a specific pixel shader) ;partner=af7b880f07630615 ;------------------------------------------------------------------------------------------------------ ; texture / render target manipulations ;------------------------------------------------------------------------------------------------------ ;[TextureOverride1] ;Hash=c3e55ebdb0d20c35 ; NVidia stores surface creation mode heuristics in the game profile. setting ; this option overrides the creation mode for a given texture / buffer. ; 0 = NVAPI_STEREO_SURFACECREATEMODE_AUTO - use driver registry profile settings. ; 1 = NVAPI_STEREO_SURFACECREATEMODE_FORCESTEREO - create stereo surface. ; 2 = NVAPI_STEREO_SURFACECREATEMODE_FORCEMONO - create mono surface. ;StereoMode=2 ;[TextureOverride2] ;... ;------------------------------------------------------------------------------------------------------ ; Example of settings override by mouse button configuration ; Mapping of from game provided hard coded convergence values to custom values ; Those are values for L.A. Noir ; Example of settings override by mouse button configuration ;------------------------------------------------------------------------------------------------------ ;[ConvergenceMap] ;Map1=from 3e99999a to 0.3 ;Map2=from 3f800000 to 1.0 ;Map3=from 3f666666 to 0.9 [/code] Or does it really not work like that! :) How do you guys fix shaders? Is there a copy and paste, with a couple of simple tweaks methods, like adjusting depth?
Question: Can you use the values of this working shader, to fix the dodgy one?

I have found, and previously disabled, a shader which is wonky. I have found a working shader that the dodgy one appears to 'sit' on.

Is this possible? If so, how?


Here is the working shader:

//Working shaders that the broken shader covers

cbuffer cb1 : register(b1)
{
float4 cb1[8];
}


Texture2D<float4> StereoParams : register(t125);
Texture1D<float4> IniParams : register(t120);

void main(
float4 v0 : NORMAL0,
float4 v1 : POSITION0,
float4 v2 : POSITION6,
float4 v3 : POSITION7,
float4 v4 : TANGENT0,
float4 v5 : TEXCOORD0,
float4 v6 : TEXCOORD1,
out float4 o0 : TEXCOORD0,
out float3 o1 : TEXCOORD1,
out float3 o2 : TEXCOORD2,
out float2 o3 : TEXCOORD3,
out float4 o4 : SV_Position0)
{
float4 r0,r1,r2,r3,r4;
uint4 bitmask, uiDest;
float4 fDest;

r0.xyz = v0.xyz * cb1[0].www + cb1[1].www;
r1.xyz = v3.zxy * r0.yzx;
r1.xyz = v3.yzx * r0.zxy + -r1.xyz;
r0.w = dot(v3.xyz, r0.xyz);
r2.xyzw = v3.xyzw + v3.xyzw;
r1.w = v3.w * r2.w;
r0.xyz = r1.www * r0.xyz + -r0.xyz;
r0.xyz = r0.www * r2.xyz + r0.xyz;
r0.xyz = r1.xyz * r2.www + r0.xyz;
r1.xyz = v4.xyz * cb1[0].www + cb1[1].www;
r0.w = dot(v3.xyz, r1.xyz);
r3.xyz = r1.www * r1.xyz + -r1.xyz;
r3.xyz = r0.www * r2.xyz + r3.xyz;
r4.xyz = v3.zxy * r1.yzx;
r1.xyz = v3.yzx * r1.zxy + -r4.xyz;
r1.xyz = r1.xyz * r2.www + r3.xyz;
r3.xyz = r1.yzx * r0.zxy;
r3.xyz = r0.yzx * r1.zxy + -r3.xyz;
o1.xyz = r0.xyz;
o2.xyz = r1.xyz;
r0.x = 0.000000000e+000 < v4.w;
o0.xyz = r0.xxx ? r3.xyz : -r3.xyz;
r0.xyz = v1.xyz * cb1[0].xyz + cb1[1].xyz;
r1.xyz = r1.www * r0.xyz + -r0.xyz;
r0.w = dot(v3.xyz, r0.xyz);
r1.xyz = r0.www * r2.xyz + r1.xyz;
r2.xyz = v3.zxy * r0.yzx;
r0.xyz = v3.yzx * r0.zxy + -r2.xyz;
r0.xyz = r0.xyz * r2.www + r1.xyz;
r0.xyz = v2.xyz + r0.xyz;
r0.w = v1.w;
r1.x = dot(cb1[7].xyzw, r0.xyzw);
o0.w = r1.x;
o4.w = r1.x;
o3.xy = v6.xy * cb1[2].xy + cb1[2].zw;
o4.x = dot(cb1[4].xyzw, r0.xyzw);
o4.y = dot(cb1[5].xyzw, r0.xyzw);
o4.z = dot(cb1[6].xyzw, r0.xyzw);
return;
}




Here is the dodgy one which I have disabled:

//Messed up surfaces in station

cbuffer cb0 : register(b0)
{
float4 cb0[11];
}


Texture2D<float4> StereoParams : register(t125);
Texture1D<float4> IniParams : register(t120);

void main(
float3 v0 : TEXCOORD0,
out float3 o0 : TEXCOORD0,
out float3 o1 : TEXCOORD1,
out float4 o2 : SV_Position0)
{
float4 r0,r1;
uint4 bitmask, uiDest;
float4 fDest;

r0.xyz = v0.xyz;
r0.w = 1.000000000e+000;
r1.x = dot(cb0[8].xyzw, r0.xyzw);
r1.y = dot(cb0[9].xyzw, r0.xyzw);
r1.z = dot(cb0[10].xyzw, r0.xyzw);
r1.w = 1.000000000e+000;
r0.x = dot(cb0[4].xyzw, r1.xyzw);
r0.y = dot(cb0[5].xyzw, r1.xyzw);
r0.w = dot(cb0[7].xyzw, r1.xyzw);
o0.xyz = r0.xyw;
o2.xyw = r0.xyw;
o1.x = dot(cb0[0].xyzw, r1.xyzw);
o1.y = dot(cb0[1].xyzw, r1.xyzw);
o1.z = dot(cb0[2].xyzw, r1.xyzw);
o2.z = dot(cb0[6].xyzw, r1.xyzw);

//Disabled Shader
o2=0;

return;
}





Here is the ini file in case that is also needed:

;------------------------------------------------------------------------------------------------------
; Logging options.
; Comment line or set value to 0 for no logging.
;------------------------------------------------------------------------------------------------------
[Logging]

; Log all API usage
calls=0

; Log Input key actions
input=0

; Super verbose massive log
debug=0

; Unbuffered logging to avoid missing anything at file end
unbuffered=0

; Force the CPU affinity to use only a single CPU for debugging multi-threaded
force_cpu_affinity=0

; Log NVAPI convergence modifications
convergence=0
; Log NVAPI separation modifications
separation=0


; ------------------------------------------------------------------------------------------------------
; Default constants to pass directly to shaders as IniParams
; ------------------------------------------------------------------------------------------------------
[Constants]
; x = 0.8
; y = 1.0
; z = 1.2
; w = 0


;------------------------------------------------------------------------------------------------------
; Custom settings override for any of [convergence, separation, x, y, z, w]
;
; Four types are supported - by default the bindings will simply load the
; configured settings, but type=hold can be specified to have a preset
; active while the button is held, type=toggle can be used to make a simple
; on/off toggle, and type=cycle can be used to cycle between several presets.
;
; Delays (type=hold only) and linear or cosine trasition periods (any key type)
; can be used to better synchonrise setting changes to the game's animations,
; or to smoothly adjust UI elements over a short period of time.
;
; Key bindings: For A-Z and 0-9 on the number row, just use that single
; character. For everything else (including mouse buttons), use the virtual key
; name (with or without the VK_ prefix) or hex code from this article:
; http://msdn.microsoft.com/en-us/library/windows/desktop/dd375731(v=vs.85).aspx
;
; Keys can also be from XBox controllers using:
; XB_LEFT_TRIGGER, XB_RIGHT_TRIGGER,
; XB_LEFT_SHOULDER, XB_RIGHT_SHOULDER,
; XB_LEFT_THUMB, XB_RIGHT_THUMB,
; XB_DPAD_UP, XB_DPAD_DOWN, XB_DPAD_LEFT, XB_DPAD_RIGHT,
; XB_A, XB_B, XB_X, XB_Y, XB_START, XB_BACK
; By default all attached controllers are used - to associate a binding with a
; specific controller add the controller number 1-4 to the prefix, like
; XB2_LEFT_TRIGGER, though this may be more useful for hunting than playing.
;------------------------------------------------------------------------------------------------------

[Key1]
; THIS IS TO TOGGLE PLANET DEPTHS so they look bigger: default = OFF
Key = /
type = toggle
w = 1.0

[Key2]
; THIS IS TO TOGGLE STAR BLOOM to reduce doubling of objects: default = ON
Key = .
type = toggle
x = 1.0


; Example to support momentary hold type overrides, like aiming.
;[Key2]
;Key = RBUTTON
;convergence = 0.1
;type = hold

; Example for a toggle override.
;[Key3]
;Key = q
;separation = 0.1
;type = toggle
;y = 0.0

; Example for a momentary hold, but with a delay followed by a smooth
; transition (ms) on hold and release to sync better with the game. Note that
; delay only works with type=hold (for now), while transitions will work with
; all types.
;[Key4]
;Key = XB_LEFT_TRIGGER
;type = hold
;y = 0.25
;delay = 100
;transition = 100
;transition_type = linear
;release_delay = 0
;release_transition = 500
;release_transition_type = cosine

; Example of a cycle transition that might be used to provide several presets
; that set both convergence and UI depth to suit different scenes in a game.
; Cosine transitions are used to smooth the changes over 1/10 of a second.
;[Key5]
;Key = Q
;type = cycle
;convergence = 1.45, 1.13, 0.98
;z = 0.25, 0.5, 0.75
;transition = 100
;transition_type = cosine


;------------------------------------------------------------------------------------------------------
; Shader hunting options.
; Default setup is to use keyboard similar to Helix presets
;------------------------------------------------------------------------------------------------------
[Hunting]

; Release mode is with shader hunting disabled, optimized for speed.
hunting=0

; Highlight mode of currently selected shader / rendertarget.
; "skip" = skip shader. don't render anything using the currently selected shader.
; "original" = fall back to original shader if the currently selected shader was patched.
; "mono" = disable stereo for the selected shader / rendertarget.
; "zero" = shader output is all zero. NOTE: this has a big performance impact.
marking_mode=skip

; Key bindings: For A-Z and 0-9 on the number row, just use that single
; character. For everything else (including mouse buttons), use the virtual key
; name (with or without the VK_ prefix) or hex code from this article:
; http://msdn.microsoft.com/en-us/library/windows/desktop/dd375731(v=vs.85).aspx
;
; XBox controllers are supported using the same bindings as the [Key] sections
; (see above). If the game already uses the first controller you might try
; using the second controller for hunting with e.g. XB2_LEFT_SHOULDER

; rotate through all VISIBLE pixel shaders at the current scene.
next_pixelshader=VK_NUMPAD2
previous_pixelshader=VK_NUMPAD1
mark_pixelshader=VK_NUMPAD3

; rotate through all VISIBLE vertex shaders at the current scene.
next_vertexshader=VK_NUMPAD5
previous_vertexshader=VK_NUMPAD4
mark_vertexshader=VK_NUMPAD6

; rotate through all USED index buffers at the current scene.
next_indexbuffer=VK_NUMPAD8
previous_indexbuffer=VK_NUMPAD7
mark_indexbuffer=VK_NUMPAD9

; rotate through all USED render targets at the current scene.
next_rendertarget=VK_MULTIPLY
previous_rendertarget=VK_DIVIDE
mark_rendertarget=VK_SUBTRACT

; Re-enable shaders once done with hunting:
done_hunting=VK_ADD

; Screenshot as pns
take_screenshot=VK_SNAPSHOT

; reload all fixes from ShaderFixes folder
reload_fixes=VK_F10

; Uncomment to enable experimental support to reload the d3dx.ini live. Note
; that certain settings may only take effect when the game is first launched or
; otherwise may not reload properly, so if something doesn't seem to work after
; reloading the config you should restart the game (e.g. hunting can be enabled
; live, but copy on mark won't work). This can be the same key as reload_fixes
; for convenience, or a different key may be used to avoid resetting the ini
; parameters every time the shaders are reloaded.
;reload_config=VK_F10

; Hold this key to temporarily disable the fix - useful to quickly check what
; an effect looked like in the original game.
;show_original=VK_F11

; tunable parameter to use in modified shaders as variable (StereoParams.Load(int3(1,0,0)).xyzw)
; enabling tuning results in a small performance hit because the parameter texture
;tune1_up=VK_INSERT
;tune1_down=VK_DELETE

; Auto-repeat key rate in events per second.
repeat_rate=6


;------------------------------------------------------------------------------------------------------
; Chain load other wrapper DLLs instead of system DLLs.
;------------------------------------------------------------------------------------------------------
[System]

;proxy_d3d9=d3d9_helix.dll
;proxy_d3d11=d3d11_helix.dll


;------------------------------------------------------------------------------------------------------
; Settings to force display device to a specific mode.
; Uncomment a value to force the specific setting.
;------------------------------------------------------------------------------------------------------
[Device]

; overrides screen resolution.
;width=1280
;height=720

; overrides refresh rate set by game.
;refresh_rate=60

; filters available video modes to those providing given refresh rates.
; some games don't explicitely set the refresh rate, but use the video mode.
; use this if setting refresh_rate doesn't work.
;filter_refresh_rate=24,59,60

; forces creation of full screen devices and swap chains.
; use this for 3dtvplay if game won't active stereo mode.
; a value of 0 doesn't deactivate this option like on the others but
; forces the application into windowed mode.
;full_screen=1

; some games explicitely disable stereo, prohibiting any stereo attempts.
; settings this to 1 ignores all stereo disabling calls and also calls NvAPI_Stereo_Enable to force stereo on.
;force_stereo=1

; almost all DX11 games deactivate window message handling.
; setting this to 1 reenables print screen handling, alt-tab key handling etc.
;allow_windowcommands=1


;------------------------------------------------------------------------------------------------------
; Settings for NVidia stereo driver.
;------------------------------------------------------------------------------------------------------
[Stereo]

; games which have their own stereo renderer disable the NVidia automatic
; stereo mode and render themselves into stereo buffers (Crysis 3 for example).
; Setting this to 1 disables the game stereo renderer and enables NVidia auto stereo mechanism.
automatic_mode=0

; Some games (CryEngine games, for example) lock the separation to a specific
; value, which can be undesirable. Set this to 1 to ignore these requests from
; the game to unlock the separation:
unlock_separation=0

; games without predefined profiles can't save stereo settings.
; enabling this options automatically creates a profile for unknown games.
create_profile=0

; sets the global surface creation heuristic for NVidia stero driver.
; 0 = NVAPI_STEREO_SURFACECREATEMODE_AUTO - use driver registry profile settings for surface creation mode.
; 1 = NVAPI_STEREO_SURFACECREATEMODE_FORCESTEREO - Always create stereo surfaces.
; 2 = NVAPI_STEREO_SURFACECREATEMODE_FORCEMONO - Always create mono surfaces.
;surface_createmode=1

; overrides surface creation mode for square surfaces.
;surface_square_createmode=1


;------------------------------------------------------------------------------------------------------
; Settings for GPU manipulations.
; Render settings override
;------------------------------------------------------------------------------------------------------
[Rendering]

; GPU program manipulations.
;
; Shaders in game will be replaced by these custom shaders.
override_directory=ShaderFixes

; Automatically patched shaders will be written here if caching is enabled.
cache_directory=ShaderCache

; Shaders that are directly compiled by the game, instead of binary, go here.
storage_directory=ShaderFromGame

; cache all compiled .txt shaders into .bin. this removes loading stalls.
cache_shaders=1

; preload all patched shaders. there's a bug in NVidia auto stereoization if stereo shaders
; are being loaded during the game on some HW/SW combinations, which turns off auto patching
; for those stereo shaders (results in partial mono rendering). this is a workaround for this case.
preload_shaders=0

; thread save data structure access. required on multithreaded rendering.
use_criticalsection=1

; Setting this option disables scissor limits
rasterizer_disable_scissor=0

;------------------------------------------------------------------------------------------------------
; Analyzation options.
;
; save all autofixed shaders as HLSL
export_fixed=0

; save all shaders sent to DX11 as ASM, or as HLSL text files if compiled by game.
export_shaders=0

; save all shaders seen as HLSL code, autofixed or not. 1= HLSL only, 2=HLSL+OriginalASM, 3=HLSL+OriginalASM+RecompiledASM
export_hlsl=0

; stores a ShaderUsage.txt file on any marking button press.
dump_usage=0

;------------------------------------------------------------------------------------------------------
; Automatic shader fixes. Those settings here apply only on newly read shaders.
; All existing *_replace.txt or *_replace.bin files are not tampered with.
; If you change settings here, the best workflow is to delete all shaders in
; the shader cache directory and let them be fixed again.

; Stereoize all shader parameters with position semantic.
fix_sv_position=0

; Pixel depth evaluation.
;fix_ZRepair_DepthTexture1=SceneDepthTexture.x
;fix_ZRepair_Dependencies1=MinZ_MaxZRatio
;fix_ZRepair_ZPosCalc1=zTex * MinZ_MaxZRatio.z - MinZ_MaxZRatio.w
;fix_ZRepair_DepthTexture2=SceneDepthTexture.x
;fix_ZRepair_Dependencies2=
;fix_ZRepair_ZPosCalc2=zTex
;fix_ZRepair_PositionTexture=PositionTexture
;fix_ZRepair_PositionCalc=1024 * %s

; Inject depth texture if other depth sources are unavailable.
;fix_ZRepair_DepthTextureHash=8a19f087b004598f

; Correct inverse transformations in pixel shaders using evaluated depth.
;fix_InvTransform=ScreenToLight,InverseTranslatedViewProjectionMatrix

; Back projection coordinate fix.
;
; Available variables in expressions:
; stereoParams.x = Separation value in range [0..1] or [-0..-1] dependent on active eye
; stereoParams.y = Convergence value in w coordinates (1/z)
; stereoParams.z = -1/1 for left/right eye
; stereoParams.w = Separation value without eye separation
; stereoTune.x = tune value 1 (default is 1)
; stereoTune.y = tune value 2 (default is 1)
; stereoTune.z = tune value 3 (default is 1)
; stereoTune.w = tune value 4 (default is 1)
; stereoScreenRes.x = Primary swap chain backbuffer horizontal resolution
; stereoScreenRes.y = Primary swap chain backbuffer vertical resolution
; zpos = current pixel z position in pixel shader
; wpos = current pixel w position in pixel shader

; Send inverse transformations from vertex shaders to pixel shaders.
;fix_BackProjectionTransform1=ScreenToTranslatedWorldMatrix._m00,ScreenToTranslatedWorldMatrix._m02,ScreenToTranslatedWorldMatrix._m01
;fix_BackProjectionTransform2=ScreenToWorld._m00,ScreenToWorld._m02,ScreenToWorld._m01

; Position variables to correct in pixel shaders.
;fix_ObjectPosition1=PointPositionAndInverseRadius
;fix_ObjectPosition1Multiplier=1, (stereoScreenRes.x/stereoScreenRes.y)*0.5, -0.5
;fix_ObjectPosition2=SpotPositionAndInverseRadius
;fix_ObjectPosition2Multiplier=1, (stereoScreenRes.x/stereoScreenRes.y)*0.5, -0.5

; Matrix multiplications to correct in pixel shaders.
;fix_MatrixOperand1=TranslatedWorldToShadowMatrix
;fix_MatrixOperand1Multiplier=1, (stereoScreenRes.x/stereoScreenRes.y)*0.5 - viewDirection.z*0.05 + (0.02791946-stereoParams.x/stereoParams.w), 0

; autofix shader option: recompiles all vertex shaders. fixes minor differences in deferred rendering.
;recompile_all_vs=0

;------------------------------------------------------------------------------------------------------
; Shader manipulations without patches + shader filtering.
;------------------------------------------------------------------------------------------------------
;[ShaderOverride1]
;Hash=69732c4f23cb6c48
; Custom stereo separation value while rendering objects using this shader.
;Separation=0
; Custom stereo convergence value while rendering objects using this
; shader (e.g. convergence=0 will move an object to infinity).
;Convergence=0
; don't draw anything using this shader.
;Handling=skip
; advanced option: use this to override only if this shader is used rendering the given index buffer.
;IndexBufferFilter=b3e56ebcb0d20c32
; Use replaced shader only when there is no active depth buffer (for UI filtering)
;depth_filter = depth_inactive
; Use replaced shader only when there *IS* an active depth buffer (for UI filtering)
;depth_filter = depth_active
; Only use replaced shader when it is used in conjunction with a specific shader
; (e.g. to adjust a vertex shader ONLY when it is used with a specific pixel shader)
;partner=af7b880f07630615


;------------------------------------------------------------------------------------------------------
; texture / render target manipulations
;------------------------------------------------------------------------------------------------------
;[TextureOverride1]
;Hash=c3e55ebdb0d20c35
; NVidia stores surface creation mode heuristics in the game profile. setting
; this option overrides the creation mode for a given texture / buffer.
; 0 = NVAPI_STEREO_SURFACECREATEMODE_AUTO - use driver registry profile settings.
; 1 = NVAPI_STEREO_SURFACECREATEMODE_FORCESTEREO - create stereo surface.
; 2 = NVAPI_STEREO_SURFACECREATEMODE_FORCEMONO - create mono surface.
;StereoMode=2

;[TextureOverride2]
;...


;------------------------------------------------------------------------------------------------------
; Example of settings override by mouse button configuration
; Mapping of from game provided hard coded convergence values to custom values
; Those are values for L.A. Noir
; Example of settings override by mouse button configuration
;------------------------------------------------------------------------------------------------------
;[ConvergenceMap]

;Map1=from 3e99999a to 0.3
;Map2=from 3f800000 to 1.0
;Map3=from 3f666666 to 0.9



Or does it really not work like that! :)


How do you guys fix shaders? Is there a copy and paste, with a couple of simple tweaks methods, like adjusting depth?

Lord, grant me the serenity to accept the things I cannot change, the courage to change the things I can, and the wisdom to know the difference.
-------------------
Vitals: Windows 7 64bit, i5 2500 @ 4.4ghz, SLI GTX670, 8GB, Viewsonic VX2268WM

Handy Driver Discussion
Helix Mod - community fixes
Bo3b's Shaderhacker School - How to fix 3D in games
3dsolutionsgaming.com - videos, reviews and 3D fixes

#1
Posted 01/02/2016 01:19 PM   
Are these two separate instances of the same effect used in different places, or are they both combined to make up a single effect? Their inputs & outputs don't match up, so you can't simply replace one with the other. It looks like a simple halo issue though so it might be easy to fix: [quote="andysonofbob"] Here is the working shader: [code] <snip> out float4 o4 : SV_Position0) <snip> o4.w = r1.x; <snip> o4.x = dot(cb1[4].xyzw, r0.xyzw); o4.y = dot(cb1[5].xyzw, r0.xyzw); o4.z = dot(cb1[6].xyzw, r0.xyzw); return; }[/code] [/quote]This one works because the output position is written directly from the matrix multiply and is not reused for any other purpose. [quote]Here is the dodgy one which I have disabled: [code] <snip> out float4 o2 : SV_Position0) <snip> r0.x = dot(cb0[4].xyzw, r1.xyzw); r0.y = dot(cb0[5].xyzw, r1.xyzw); r0.w = dot(cb0[7].xyzw, r1.xyzw); o0.xyz = r0.xyw; o2.xyw = r0.xyw; <snip - irrelevant matrix> o2.z = dot(cb0[6].xyzw, r1.xyzw); }[/code] [/quote]This one fails because the matrix multiply that calculates the output position is written to a temporary register, which is then used for both the output position and another output. The fix is almost certainly: [code]//Messed up surfaces in station cbuffer cb0 : register(b0) { float4 cb0[11]; } Texture2D<float4> StereoParams : register(t125); Texture1D<float4> IniParams : register(t120); void main( float3 v0 : TEXCOORD0, out float3 o0 : TEXCOORD0, out float3 o1 : TEXCOORD1, out float4 o2 : SV_Position0) { float4 r0,r1; uint4 bitmask, uiDest; float4 fDest; r0.xyz = v0.xyz; r0.w = 1.000000000e+000; r1.x = dot(cb0[8].xyzw, r0.xyzw); r1.y = dot(cb0[9].xyzw, r0.xyzw); r1.z = dot(cb0[10].xyzw, r0.xyzw); r1.w = 1.000000000e+000; r0.x = dot(cb0[4].xyzw, r1.xyzw); r0.y = dot(cb0[5].xyzw, r1.xyzw); r0.w = dot(cb0[7].xyzw, r1.xyzw); // Moved this instruction up to simplify things since we don't want to apply // the correction to the output position itself (the driver does that) - you // can safely move it up as far as the most recent write to it's input (r0): o2.xyw = r0.xyw; // Apply a stereo correction to the temporary register that holds a copy of the // output position: float4 stereo = StereoParams.Load(0); r0.x += stereo.x * (r0.w - stereo.y); // Now the copy of the output position will be corrected as well: o0.xyz = r0.xyw; o1.x = dot(cb0[0].xyzw, r1.xyzw); o1.y = dot(cb0[1].xyzw, r1.xyzw); o1.z = dot(cb0[2].xyzw, r1.xyzw); o2.z = dot(cb0[6].xyzw, r1.xyzw); return; }[/code] [quote]How do you guys fix shaders? Is there a copy and paste, with a couple of simple tweaks methods, like adjusting depth?[/quote]This particular pattern is extremely common, so I can recognise it easily and apply the fix as needed. For DX9 shaders I scripted this pattern in shadertool.py --auto-fix-vertex-halo (including handling many cases where rearranging instructions is needed like the above), so in a lot of cases I can just run it over all vertex shaders in a game and then start looking from there - it might break a few, but it's usually a much smaller number than I would have had to fix otherwise. There are some engines (UE3) where this doesn't really help though. For other effects I'd start by fixing them by hand to work out the pattern. If there's only a couple of shaders I'd leave it at that, but if it looks like there are going to be a significant number of shaders using the same pattern I'll work out a way to script it. For DX9 shaders these script all go in shadertool.py. For DX11 shaders I'm currently using vim macros and sed scripts (some day I'll port shadertool to DX11). Also for DX9 shaders I have a database of all shaders used in any fix published on the blog, which I used a bit while I was learning . You can use the __shader_database__/lookup_db.py script in my 3d-fixes repository to look these up - if you pass it a shader filename it will show the difference between your copy and any in the database, or just pass it a CRC to get the full text of the shader.
Are these two separate instances of the same effect used in different places, or are they both combined to make up a single effect? Their inputs & outputs don't match up, so you can't simply replace one with the other. It looks like a simple halo issue though so it might be easy to fix:

andysonofbob said: Here is the working shader:

<snip>
out float4 o4 : SV_Position0)
<snip>
o4.w = r1.x;
<snip>
o4.x = dot(cb1[4].xyzw, r0.xyzw);
o4.y = dot(cb1[5].xyzw, r0.xyzw);
o4.z = dot(cb1[6].xyzw, r0.xyzw);
return;
}

This one works because the output position is written directly from the matrix multiply and is not reused for any other purpose.

Here is the dodgy one which I have disabled:

<snip>
out float4 o2 : SV_Position0)
<snip>
r0.x = dot(cb0[4].xyzw, r1.xyzw);
r0.y = dot(cb0[5].xyzw, r1.xyzw);
r0.w = dot(cb0[7].xyzw, r1.xyzw);
o0.xyz = r0.xyw;
o2.xyw = r0.xyw;
<snip - irrelevant matrix>
o2.z = dot(cb0[6].xyzw, r1.xyzw);
}

This one fails because the matrix multiply that calculates the output position is written to a temporary register, which is then used for both the output position and another output. The fix is almost certainly:

//Messed up surfaces in station

cbuffer cb0 : register(b0)
{
float4 cb0[11];
}


Texture2D<float4> StereoParams : register(t125);
Texture1D<float4> IniParams : register(t120);

void main(
float3 v0 : TEXCOORD0,
out float3 o0 : TEXCOORD0,
out float3 o1 : TEXCOORD1,
out float4 o2 : SV_Position0)
{
float4 r0,r1;
uint4 bitmask, uiDest;
float4 fDest;

r0.xyz = v0.xyz;
r0.w = 1.000000000e+000;
r1.x = dot(cb0[8].xyzw, r0.xyzw);
r1.y = dot(cb0[9].xyzw, r0.xyzw);
r1.z = dot(cb0[10].xyzw, r0.xyzw);
r1.w = 1.000000000e+000;
r0.x = dot(cb0[4].xyzw, r1.xyzw);
r0.y = dot(cb0[5].xyzw, r1.xyzw);
r0.w = dot(cb0[7].xyzw, r1.xyzw);

// Moved this instruction up to simplify things since we don't want to apply
// the correction to the output position itself (the driver does that) - you
// can safely move it up as far as the most recent write to it's input (r0):
o2.xyw = r0.xyw;

// Apply a stereo correction to the temporary register that holds a copy of the
// output position:
float4 stereo = StereoParams.Load(0);
r0.x += stereo.x * (r0.w - stereo.y);

// Now the copy of the output position will be corrected as well:
o0.xyz = r0.xyw;

o1.x = dot(cb0[0].xyzw, r1.xyzw);
o1.y = dot(cb0[1].xyzw, r1.xyzw);
o1.z = dot(cb0[2].xyzw, r1.xyzw);
o2.z = dot(cb0[6].xyzw, r1.xyzw);
return;
}


How do you guys fix shaders? Is there a copy and paste, with a couple of simple tweaks methods, like adjusting depth?
This particular pattern is extremely common, so I can recognise it easily and apply the fix as needed. For DX9 shaders I scripted this pattern in shadertool.py --auto-fix-vertex-halo (including handling many cases where rearranging instructions is needed like the above), so in a lot of cases I can just run it over all vertex shaders in a game and then start looking from there - it might break a few, but it's usually a much smaller number than I would have had to fix otherwise. There are some engines (UE3) where this doesn't really help though.

For other effects I'd start by fixing them by hand to work out the pattern. If there's only a couple of shaders I'd leave it at that, but if it looks like there are going to be a significant number of shaders using the same pattern I'll work out a way to script it. For DX9 shaders these script all go in shadertool.py. For DX11 shaders I'm currently using vim macros and sed scripts (some day I'll port shadertool to DX11).

Also for DX9 shaders I have a database of all shaders used in any fix published on the blog, which I used a bit while I was learning . You can use the __shader_database__/lookup_db.py script in my 3d-fixes repository to look these up - if you pass it a shader filename it will show the difference between your copy and any in the database, or just pass it a CRC to get the full text of the shader.

2x Geforce GTX 980 in SLI provided by NVIDIA, i7 6700K 4GHz CPU, Asus 27" VG278HE 144Hz 3D Monitor, BenQ W1070 3D Projector, 120" Elite Screens YardMaster 2, 32GB Corsair DDR4 3200MHz RAM, Samsung 850 EVO 500G SSD, 4x750GB HDD in RAID5, Gigabyte Z170X-Gaming 7 Motherboard, Corsair Obsidian 750D Airflow Edition Case, Corsair RM850i PSU, HTC Vive, Win 10 64bit

Alienware M17x R4 w/ built in 3D, Intel i7 3740QM, GTX 680m 2GB, 16GB DDR3 1600MHz RAM, Win7 64bit, 1TB SSD, 1TB HDD, 750GB HDD

Pre-release 3D fixes, shadertool.py and other goodies: http://github.com/DarkStarSword/3d-fixes
Support me on Patreon: https://www.patreon.com/DarkStarSword or PayPal: https://www.paypal.me/DarkStarSword

#2
Posted 01/03/2016 06:57 AM   
Whatever!!!
Whatever!!!

Lord, grant me the serenity to accept the things I cannot change, the courage to change the things I can, and the wisdom to know the difference.
-------------------
Vitals: Windows 7 64bit, i5 2500 @ 4.4ghz, SLI GTX670, 8GB, Viewsonic VX2268WM

Handy Driver Discussion
Helix Mod - community fixes
Bo3b's Shaderhacker School - How to fix 3D in games
3dsolutionsgaming.com - videos, reviews and 3D fixes

#3
Posted 01/03/2016 03:32 PM   
YESSSSS!!!!! So excited!! I sussed it! You just need to change the number following the r to the number following the r in the line that looks like: o2.xyw = r0.xyw; And then move the oO.xyw = r0.xyw; underneath. You probably said as much in your explanation but I didn't get it because I'm a numpty. Once I sussed it I fixed 4 shaders before even pressing F10 and they all worked! The game looks so sweet now! Ship headlights: tick; cockpit glow: tick; reflection on walls: tick! Looks SWEET!!! EDIT Make that lots of shaders fixed without looking I have a couple of shaders that a: don't do what they're being told and b: don't fit your template e.g. there is no o2.xyw = r0.xyw; line Please will you have a look at them? Shader that should work (surface texture): [code]// Inside station wrong depth cbuffer cb0 : register(b0) { float4 cb0[9]; } Texture2D<float4> StereoParams : register(t125); Texture1D<float4> IniParams : register(t120); void main( float3 v0 : COLOR0, float3 v1 : POSITION0, float3 v2 : POSITION1, float3 v3 : TEXCOORD0, float v4 : TEXCOORD1, float v5 : TEXCOORD2, float3 v6 : TEXCOORD3, float3 v7 : TEXCOORD4, out float4 o0 : TEXCOORD0, out float4 o1 : TEXCOORD1, out float4 o2 : TEXCOORD2, out float4 o3 : TEXCOORD3, out float3 o4 : TEXCOORD4, out float4 o5 : SV_Position0) { float4 r0,r1,r2,r3,r4; uint4 bitmask, uiDest; float4 fDest; r0.x = 0.000000000e+000; r1.y = 0.000000000e+000; r2.xyz = v2.xyz + -v1.xyz; r0.w = dot(r2.xyz, r2.xyz); r0.w = rsqrt(r0.w); r2.xyz = r2.xyz * r0.www; r0.w = r2.x < r2.y; r0.yz = float2(1.000000e+000,-1.000000e+000) * r2.zy; r1.xz = float2(-1.000000e+000,1.000000e+000) * r2.zx; r0.xyz = r0.www ? r0.xyz : r1.xyz; r0.w = dot(r0.xyz, r0.xyz); r0.w = rsqrt(r0.w); r0.xyz = r0.xyz * r0.www; r1.xyz = r2.zxy * r0.yzx; r1.xyz = r2.yzx * r0.zxy + -r1.xyz; r3.xyz = v7.xyz * v5.xxx; r0.w = 0.000000000e+000 < r3.z; r4.xyz = r0.www ? v2.xyz : v1.xyz; r0.xyz = r3.xxx * r0.xyz + r4.xyz; r0.xyz = r3.yyy * r1.xyz + r0.xyz; r0.xyz = r3.zzz * r2.xyz + r0.xyz; r0.w = 1.000000000e+000; r1.x = dot(cb0[4].xyzw, r0.xyzw); r1.y = dot(cb0[5].xyzw, r0.xyzw); r1.w = dot(cb0[7].xyzw, r0.xyzw); o0.xyz = r1.xyw; o5.xyw = r1.xyw; // Apply a stereo correction to the temporary register that holds a copy of the // output position: float4 stereo = StereoParams.Load(0); r1.x += stereo.x * (r1.w - stereo.y); o0.w = v4.x * v4.x; o1.xyz = cb0[8].xxx * v0.xyz; r1.xyz = v1.xyz; r1.w = 1.000000000e+000; r2.x = dot(cb0[0].xyzw, r1.xyzw); r2.y = dot(cb0[1].xyzw, r1.xyzw); r2.z = dot(cb0[2].xyzw, r1.xyzw); r1.xyz = v2.xyz; r1.w = 1.000000000e+000; r3.x = dot(cb0[0].xyzw, r1.xyzw); r3.y = dot(cb0[1].xyzw, r1.xyzw); r3.z = dot(cb0[2].xyzw, r1.xyzw); r1.xyz = r3.xyz + -r2.xyz; o2.xyz = r2.xyz; r1.x = dot(r1.xyz, r1.xyz); o1.w = 1.000000e+000 / r1.x; r3.w = v5.x * v5.x; o2.w = 1.000000e+000 / r3.w; o3.xyzw = r3.xyzw; o4.x = dot(cb0[0].xyzw, r0.xyzw); o4.y = dot(cb0[1].xyzw, r0.xyzw); o4.z = dot(cb0[2].xyzw, r0.xyzw); o5.z = dot(cb0[6].xyzw, r0.xyzw); //Disabled Shader // 5=0; return; }[/code] I think I can remove the disabled tag because the game looks so sweet now! ;) Shadows: [code]//Shadows wrong depth cbuffer cb1 : register(b1) { float4 cb1[8]; } Texture2D<float4> StereoParams : register(t125); Texture1D<float4> IniParams : register(t120); void main( float4 v0 : NORMAL0, float4 v1 : POSITION0, float4 v2 : POSITION6, float4 v3 : POSITION7, float4 v4 : TANGENT0, float4 v5 : TEXCOORD0, out float4 o0 : SV_Position0) { float4 r0,r1,r2; uint4 bitmask, uiDest; float4 fDest; r0.xyzw = v3.xyzw + v3.xyzw; r1.x = v3.w * r0.w; r1.yzw = v1.xyz * cb1[0].xyz + cb1[1].xyz; r2.xyz = r1.xxx * r1.yzw + -r1.yzw; r1.x = dot(v3.xyz, r1.yzw); r0.xyz = r1.xxx * r0.xyz + r2.xyz; r2.xyz = v3.zxy * r1.zwy; r1.xyz = v3.yzx * r1.wyz + -r2.xyz; r0.xyz = r1.xyz * r0.www + r0.xyz; r0.xyz = v2.xyz + r0.xyz; r0.w = v1.w; r1.x = dot(cb1[6].xyzw, r0.xyzw); r1.y = dot(cb1[7].xyzw, r0.xyzw); o0.z = min(r1.y, r1.x); o0.w = r1.y; o0.x = dot(cb1[4].xyzw, r0.xyzw); o0.y = dot(cb1[5].xyzw, r0.xyzw); return; }[/code]
YESSSSS!!!!!

So excited!!

I sussed it! You just need to change the number following the r to the number following the r in the line that looks like:
o2.xyw = r0.xyw;

And then move the oO.xyw = r0.xyw; underneath.

You probably said as much in your explanation but I didn't get it because I'm a numpty.


Once I sussed it I fixed 4 shaders before even pressing F10 and they all worked!
The game looks so sweet now! Ship headlights: tick; cockpit glow: tick; reflection on walls: tick! Looks SWEET!!!

EDIT Make that lots of shaders fixed without looking

I have a couple of shaders that a: don't do what they're being told and b: don't fit your template e.g. there is no o2.xyw = r0.xyw; line

Please will you have a look at them?

Shader that should work (surface texture):
// Inside station wrong depth

cbuffer cb0 : register(b0)
{
float4 cb0[9];
}


Texture2D<float4> StereoParams : register(t125);
Texture1D<float4> IniParams : register(t120);

void main(
float3 v0 : COLOR0,
float3 v1 : POSITION0,
float3 v2 : POSITION1,
float3 v3 : TEXCOORD0,
float v4 : TEXCOORD1,
float v5 : TEXCOORD2,
float3 v6 : TEXCOORD3,
float3 v7 : TEXCOORD4,
out float4 o0 : TEXCOORD0,
out float4 o1 : TEXCOORD1,
out float4 o2 : TEXCOORD2,
out float4 o3 : TEXCOORD3,
out float3 o4 : TEXCOORD4,
out float4 o5 : SV_Position0)
{
float4 r0,r1,r2,r3,r4;
uint4 bitmask, uiDest;
float4 fDest;

r0.x = 0.000000000e+000;
r1.y = 0.000000000e+000;
r2.xyz = v2.xyz + -v1.xyz;
r0.w = dot(r2.xyz, r2.xyz);
r0.w = rsqrt(r0.w);
r2.xyz = r2.xyz * r0.www;
r0.w = r2.x < r2.y;
r0.yz = float2(1.000000e+000,-1.000000e+000) * r2.zy;
r1.xz = float2(-1.000000e+000,1.000000e+000) * r2.zx;
r0.xyz = r0.www ? r0.xyz : r1.xyz;
r0.w = dot(r0.xyz, r0.xyz);
r0.w = rsqrt(r0.w);
r0.xyz = r0.xyz * r0.www;
r1.xyz = r2.zxy * r0.yzx;
r1.xyz = r2.yzx * r0.zxy + -r1.xyz;
r3.xyz = v7.xyz * v5.xxx;
r0.w = 0.000000000e+000 < r3.z;
r4.xyz = r0.www ? v2.xyz : v1.xyz;
r0.xyz = r3.xxx * r0.xyz + r4.xyz;
r0.xyz = r3.yyy * r1.xyz + r0.xyz;
r0.xyz = r3.zzz * r2.xyz + r0.xyz;
r0.w = 1.000000000e+000;
r1.x = dot(cb0[4].xyzw, r0.xyzw);
r1.y = dot(cb0[5].xyzw, r0.xyzw);
r1.w = dot(cb0[7].xyzw, r0.xyzw);
o0.xyz = r1.xyw;



o5.xyw = r1.xyw;

// Apply a stereo correction to the temporary register that holds a copy of the
// output position:
float4 stereo = StereoParams.Load(0);
r1.x += stereo.x * (r1.w - stereo.y);

o0.w = v4.x * v4.x;
o1.xyz = cb0[8].xxx * v0.xyz;
r1.xyz = v1.xyz;
r1.w = 1.000000000e+000;
r2.x = dot(cb0[0].xyzw, r1.xyzw);
r2.y = dot(cb0[1].xyzw, r1.xyzw);
r2.z = dot(cb0[2].xyzw, r1.xyzw);
r1.xyz = v2.xyz;
r1.w = 1.000000000e+000;
r3.x = dot(cb0[0].xyzw, r1.xyzw);
r3.y = dot(cb0[1].xyzw, r1.xyzw);
r3.z = dot(cb0[2].xyzw, r1.xyzw);
r1.xyz = r3.xyz + -r2.xyz;
o2.xyz = r2.xyz;
r1.x = dot(r1.xyz, r1.xyz);
o1.w = 1.000000e+000 / r1.x;
r3.w = v5.x * v5.x;
o2.w = 1.000000e+000 / r3.w;
o3.xyzw = r3.xyzw;
o4.x = dot(cb0[0].xyzw, r0.xyzw);
o4.y = dot(cb0[1].xyzw, r0.xyzw);
o4.z = dot(cb0[2].xyzw, r0.xyzw);
o5.z = dot(cb0[6].xyzw, r0.xyzw);

//Disabled Shader
// 5=0;

return;
}


I think I can remove the disabled tag because the game looks so sweet now! ;)

Shadows:
//Shadows wrong depth

cbuffer cb1 : register(b1)
{
float4 cb1[8];
}


Texture2D<float4> StereoParams : register(t125);
Texture1D<float4> IniParams : register(t120);

void main(
float4 v0 : NORMAL0,
float4 v1 : POSITION0,
float4 v2 : POSITION6,
float4 v3 : POSITION7,
float4 v4 : TANGENT0,
float4 v5 : TEXCOORD0,
out float4 o0 : SV_Position0)
{
float4 r0,r1,r2;
uint4 bitmask, uiDest;
float4 fDest;

r0.xyzw = v3.xyzw + v3.xyzw;
r1.x = v3.w * r0.w;
r1.yzw = v1.xyz * cb1[0].xyz + cb1[1].xyz;
r2.xyz = r1.xxx * r1.yzw + -r1.yzw;
r1.x = dot(v3.xyz, r1.yzw);
r0.xyz = r1.xxx * r0.xyz + r2.xyz;
r2.xyz = v3.zxy * r1.zwy;
r1.xyz = v3.yzx * r1.wyz + -r2.xyz;
r0.xyz = r1.xyz * r0.www + r0.xyz;
r0.xyz = v2.xyz + r0.xyz;
r0.w = v1.w;
r1.x = dot(cb1[6].xyzw, r0.xyzw);
r1.y = dot(cb1[7].xyzw, r0.xyzw);
o0.z = min(r1.y, r1.x);
o0.w = r1.y;
o0.x = dot(cb1[4].xyzw, r0.xyzw);
o0.y = dot(cb1[5].xyzw, r0.xyzw);
return;
}

Lord, grant me the serenity to accept the things I cannot change, the courage to change the things I can, and the wisdom to know the difference.
-------------------
Vitals: Windows 7 64bit, i5 2500 @ 4.4ghz, SLI GTX670, 8GB, Viewsonic VX2268WM

Handy Driver Discussion
Helix Mod - community fixes
Bo3b's Shaderhacker School - How to fix 3D in games
3dsolutionsgaming.com - videos, reviews and 3D fixes

#4
Posted 01/04/2016 04:47 PM   
Hey, congratulations! I think this is a pretty important milestone while learning shaderhacking - understanding this problem and how to fix it can make a huge difference in the quality of the fix. Consider yourself graduated from beginner and are now at intermediate :) [quote="andysonofbob"]I have a couple of shaders that a: don't do what they're being told and b: don't fit your template e.g. there is no o2.xyw = r0.xyw; line Please will you have a look at them? Shader that should work (surface texture): [code]// Inside station wrong depth <snip> out float4 o0 : TEXCOORD0, <snip> out float4 o5 : SV_Position0) <snip> r1.x = dot(cb0[4].xyzw, r0.xyzw); r1.y = dot(cb0[5].xyzw, r0.xyzw); r1.w = dot(cb0[7].xyzw, r0.xyzw); o0.xyz = r1.xyw; o5.xyw = r1.xyw; // Apply a stereo correction to the temporary register that holds a copy of the // output position: float4 stereo = StereoParams.Load(0); r1.x += stereo.x * (r1.w - stereo.y); [/code][/quote]This one should just be a matter of moving the o0.xyz = r1.xyw; line below the stereo correction so that it (that is o0, which is a TEXCOORD) gets the corrected version. [quote]I think I can remove the disabled tag because the game looks so sweet now! ;)[/quote]Also feel free to bump the date on the post so it shows up on the first page again if you want - this update seems significant enough to warrant that :) [quote] Shadows: [code]//Shadows wrong depth <snip> [/code][/quote]Shadows will be a different pattern (sometimes a halo fix might make up part of a shadow fix, either in the lighting vertex shader or on the surfaces they cast onto, but even if one is present it is generally not the only part), and if you can understand how to solve this one you would move on to being an advanced shaderhacker ;-) You will almost certainly need to look at the pixel shaders for these - can you post them? One hint for finding the correct pixel shader - look for a shader that removes the entire effect of the light when hunted with marking_mode=skip, not just one that removes the shadow and leaves the light. This can be easier to see on point and spot lights since you can often point the camera to show an area covered by the light and an area outside it's range for comparison. Directional lighting can be harder to see this as everything is affected by it. Another good approach is to find every shader that you think might be relevant and just look for the most complicated one ;-) Also, experiment with using marking_mode=pink to hunt point and spot lights - it usually results in a pink sphere drawn around the area that the light was affecting, and sometimes can find a light that was impossible to hunt with marking_mode=skip.
Hey, congratulations!

I think this is a pretty important milestone while learning shaderhacking - understanding this problem and how to fix it can make a huge difference in the quality of the fix. Consider yourself graduated from beginner and are now at intermediate :)

andysonofbob said:I have a couple of shaders that a: don't do what they're being told and b: don't fit your template e.g. there is no o2.xyw = r0.xyw; line

Please will you have a look at them?

Shader that should work (surface texture):
// Inside station wrong depth
<snip>
out float4 o0 : TEXCOORD0,
<snip>
out float4 o5 : SV_Position0)
<snip>
r1.x = dot(cb0[4].xyzw, r0.xyzw);
r1.y = dot(cb0[5].xyzw, r0.xyzw);
r1.w = dot(cb0[7].xyzw, r0.xyzw);
o0.xyz = r1.xyw;

o5.xyw = r1.xyw;

// Apply a stereo correction to the temporary register that holds a copy of the
// output position:
float4 stereo = StereoParams.Load(0);
r1.x += stereo.x * (r1.w - stereo.y);
This one should just be a matter of moving the o0.xyz = r1.xyw; line below the stereo correction so that it (that is o0, which is a TEXCOORD) gets the corrected version.

I think I can remove the disabled tag because the game looks so sweet now! ;)
Also feel free to bump the date on the post so it shows up on the first page again if you want - this update seems significant enough to warrant that :)


Shadows:
//Shadows wrong depth
<snip>
Shadows will be a different pattern (sometimes a halo fix might make up part of a shadow fix, either in the lighting vertex shader or on the surfaces they cast onto, but even if one is present it is generally not the only part), and if you can understand how to solve this one you would move on to being an advanced shaderhacker ;-)

You will almost certainly need to look at the pixel shaders for these - can you post them?

One hint for finding the correct pixel shader - look for a shader that removes the entire effect of the light when hunted with marking_mode=skip, not just one that removes the shadow and leaves the light. This can be easier to see on point and spot lights since you can often point the camera to show an area covered by the light and an area outside it's range for comparison. Directional lighting can be harder to see this as everything is affected by it.

Another good approach is to find every shader that you think might be relevant and just look for the most complicated one ;-)

Also, experiment with using marking_mode=pink to hunt point and spot lights - it usually results in a pink sphere drawn around the area that the light was affecting, and sometimes can find a light that was impossible to hunt with marking_mode=skip.

2x Geforce GTX 980 in SLI provided by NVIDIA, i7 6700K 4GHz CPU, Asus 27" VG278HE 144Hz 3D Monitor, BenQ W1070 3D Projector, 120" Elite Screens YardMaster 2, 32GB Corsair DDR4 3200MHz RAM, Samsung 850 EVO 500G SSD, 4x750GB HDD in RAID5, Gigabyte Z170X-Gaming 7 Motherboard, Corsair Obsidian 750D Airflow Edition Case, Corsair RM850i PSU, HTC Vive, Win 10 64bit

Alienware M17x R4 w/ built in 3D, Intel i7 3740QM, GTX 680m 2GB, 16GB DDR3 1600MHz RAM, Win7 64bit, 1TB SSD, 1TB HDD, 750GB HDD

Pre-release 3D fixes, shadertool.py and other goodies: http://github.com/DarkStarSword/3d-fixes
Support me on Patreon: https://www.patreon.com/DarkStarSword or PayPal: https://www.paypal.me/DarkStarSword

#5
Posted 01/05/2016 08:09 AM   
Mate! Awesome. That first shader I had apparently already fixed. Soz. Turning on shadows, as you mention, used additional shaders but I have fixed them using the pattern. I could only find the one PS and VS for the dodgy shadow which is cast on the cockpit and station textures; however, other light maps seem to work and dynamic shadows on things like rocks on a planet's surface are OK once the cast light was fixed. Also the ship's shadow on objects is also fine. Here is the PS [code]//Shadow wrong depth - cockpit and station Texture2D<float4> t0 : register(t0); SamplerState s0_s : register(s0); cbuffer cb0 : register(b0) { float4 cb0[1]; } Texture2D<float4> StereoParams : register(t125); Texture1D<float4> IniParams : register(t120); void main( float4 v0 : TEXCOORD0, float3 v1 : TEXCOORD1, float3 v2 : TEXCOORD2, float3 v3 : TEXCOORD3, float2 v4 : TEXCOORD4, float4 v5 : SV_Position0, out float4 o0 : SV_Target0) { float4 r0,r1; uint4 bitmask, uiDest; float4 fDest; r0.x = dot(v1.xyz, v1.xyz); r0.x = rsqrt(r0.x); r0.xyz = v1.xyz * r0.xxx; r0.w = dot(-v2.xyz, -v2.xyz); r0.w = rsqrt(r0.w); r1.xyz = -v2.xyz * r0.www; r0.x = saturate(dot(r1.xyz, r0.xyz)); r0.x = 1.000000000e+000 + -r0.x; r0.x = max(r0.x, 9.999999747e-005); r0.x = log2(r0.x); r0.x = cb0[0].z * r0.x; r0.x = exp2(r0.x); r0.y = 1.000000000e+000 + -cb0[0].w; r0.x = r0.x * cb0[0].w + r0.y; r1.xyzw = t0.Sample(s0_s, v4.xy).xyzw; r0.y = 1.000000000e+000 + -r1.y; r0.y = max(r0.y, 9.999999747e-005); r0.y = log2(r0.y); r0.y = cb0[0].y * r0.y; r0.y = exp2(r0.y); r0.y = cb0[0].x * r0.y; o0.xyzw = r0.yyyy * r0.xxxx + v0.wwww; return; }[/code] Here is the VS [code]//Shadow wrong depth - cockpit and station cbuffer cb1 : register(b1) { float4 cb1[8]; } Texture2D<float4> StereoParams : register(t125); Texture1D<float4> IniParams : register(t120); void main( float4 v0 : NORMAL0, float4 v1 : POSITION0, float4 v2 : POSITION6, float4 v3 : POSITION7, float4 v4 : TANGENT0, float4 v5 : TEXCOORD0, out float4 o0 : SV_Position0) { float4 r0,r1,r2; uint4 bitmask, uiDest; float4 fDest; r0.xyzw = v3.xyzw + v3.xyzw; r1.x = v3.w * r0.w; r1.yzw = v1.xyz * cb1[0].xyz + cb1[1].xyz; r2.xyz = r1.xxx * r1.yzw + -r1.yzw; r1.x = dot(v3.xyz, r1.yzw); r0.xyz = r1.xxx * r0.xyz + r2.xyz; r2.xyz = v3.zxy * r1.zwy; r1.xyz = v3.yzx * r1.wyz + -r2.xyz; r0.xyz = r1.xyz * r0.www + r0.xyz; r0.xyz = v2.xyz + r0.xyz; r0.w = v1.w; r1.x = dot(cb1[6].xyzw, r0.xyzw); r1.y = dot(cb1[7].xyzw, r0.xyzw); o0.z = min(r1.y, r1.x); o0.w = r1.y; o0.x = dot(cb1[4].xyzw, r0.xyzw); o0.y = dot(cb1[5].xyzw, r0.xyzw); return; }[/code] Really appreciate the help. I have AC:Syndicate, got it free; if this is DX11, I will have a look at this next. :) EDIT OK. Found one that fits the bill; the ps's shader is way more complex than its vs counterpart but they both do the same thing. ps [code]// Dodgy textures on asteriods - shadows on Texture2D<float4> t3 : register(t3); Texture2D<float4> t2 : register(t2); Texture2D<float4> t1 : register(t1); Texture2D<float4> t0 : register(t0); SamplerState s3_s : register(s3); SamplerState s2_s : register(s2); SamplerState s1_s : register(s1); SamplerState s0_s : register(s0); cbuffer cb0 : register(b0) { float4 cb0[26]; } Texture2D<float4> StereoParams : register(t125); Texture1D<float4> IniParams : register(t120); void main( float2 v0 : TEXCOORD0, float3 v1 : TEXCOORD1, float4 v2 : SV_Position0, out float4 o0 : SV_Target0) { float4 r0,r1,r2,r3,r4,r5; uint4 bitmask, uiDest; float4 fDest; r0.xyzw = t0.Sample(s3_s, v0.xy).xyzw; r1.xyzw = t1.Sample(s0_s, v0.xy).xyzw; r1.yzw = r1.yzw * float3(2.000000e+000,2.000000e+000,2.000000e+000) + float3(-1.000000e+000,-1.000000e+000,-1.000000e+000); r2.x = dot(r1.yzw, r1.yzw); r2.x = rsqrt(r2.x); r1.yzw = r2.xxx * r1.yzw; r2.xyzw = t2.Sample(s1_s, v0.xy).xyzw; r2.w = r2.w * 2.550000000e+002 + 5.000000000e-001; r2.w = (uint)r2.w; r3.xyzw = (int4)r2.wwww & int4(64,1,16,32); if (r3.x != 0) { r3.x = 1.000000000e+000; r4.x = 1.000000000e+000; } else { r0.w = 1.000000000e+000 + -r0.w; r3.x = -r0.w * cb0[24].w + 1.000000000e+000; r4.x = -r0.w * cb0[25].x + 1.000000000e+000; } r0.w = cb0[0].x * r1.x + 1.000000000e+000; r0.w = exp2(r0.w); r4.y = dot(v1.xyz, v1.xyz); r4.y = rsqrt(r4.y); r5.xyz = v1.xyz * r4.yyy; if (r3.y != 0) { r3.y = dot(-r5.xyz, -r5.xyz); r3.y = rsqrt(r3.y); r5.xyz = -r5.xyz * r3.yyy; r3.y = dot(r1.yzw, r5.xyz); r3.y = saturate(1.000000012e-007 + r3.y); r4.z = dot(r5.xyz, -cb0[9].xyz); r4.w = dot(r1.yzw, -cb0[9].xyz); r4.z = -r3.y * r4.w + r4.z; r5.x = r4.z >= 0.000000000e+000; r3.y = r4.w / r3.y; r3.y = min(r3.y, 1.000000000e+000); r3.y = r5.x ? r3.y : r4.w; r5.xy = r0.ww * float2(6.500000e-001,1.000000e-001) + float2(2.000000e+000,2.222220e+000); r5.xy = float2(1.000000e+000,1.000000e+000) / r5.xy; r5.x = 1.000000000e+000 + -r5.x; r4.z = r5.y * r4.z; r3.y = r4.z * r3.y; r3.y = saturate(r4.w * r5.x + r3.y); } else { r4.z = (int)r2.w & 32; r4.w = dot(-cb0[9].xyz, r1.yzw); r5.x = saturate(r4.w * 5.000000000e-001 + 5.000000000e-001); r4.w = saturate(r4.w); r3.y = r4.z ? r5.x : r4.w; } if (r3.z == 0) { r4.yzw = -v1.xyz * r4.yyy + -cb0[9].xyz; r4.yzw = float3(1.000000e-009,1.000000e-009,1.000000e-009) + r4.yzw; r3.z = dot(r4.yzw, r4.yzw); r3.z = rsqrt(r3.z); r4.yzw = r4.yzw * r3.zzz; r3.z = dot(-cb0[9].xyz, r4.yzw); r3.z = 1.000000000e+000 + -abs(r3.z); r5.x = r3.z * r3.z; r5.x = r5.x * r5.x; r3.z = r5.x * r3.z; r5.xyz = float3(1.000000e+000,1.000000e+000,1.000000e+000) + -r0.xyz; r5.xyz = r5.xyz * r3.zzz; r1.x = r1.x * r1.x; r0.xyz = r5.xyz * r1.xxx + r0.xyz; r1.x = 6.000000000e+000 + r0.w; r1.x = 3.125000000e-002 * r1.x; r3.z = saturate(dot(r1.yzw, r4.yzw)); r3.z = log2(r3.z); r0.w = r3.z * r0.w; r0.w = exp2(r0.w); r0.w = r1.x * r0.w; r0.xyz = r0.www * r0.xyz; r0.w = saturate(dot(r1.yzw, -cb0[9].xyz)); r0.xyz = r0.xyz * r0.www; } else { r0.xyz = float3(0.000000e+000,0.000000e+000,0.000000e+000); } if (r3.w != 0) { r0.w = 1.000000000e+000; } else { r1.x = (int)r2.w & 4; r1.x = r1.x ? 0.000000000e+000 : 1.000000000e+000; r5.xyzw = t3.Sample(s2_s, v0.xy).xyzw; r1.y = dot(r5.xyz, cb0[17].xyz); r1.x = r1.x + -r1.y; r0.w = cb0[0].y * r1.x + r1.y; } r1.x = r3.y * r3.x; r0.xyz = r0.xyz * r4.xxx; r0.xyz = r1.xxx * r2.xyz + r0.xyz; r0.xyz = cb0[1].xyz * r0.xyz; o0.xyz = r0.xyz * r0.www; o0.w = 0.000000000e+000; return; }[/code] vs [code]// Dodgy textures on asteriods - shadows on cbuffer cb0 : register(b0) { float4 cb0[3] : packoffset(c0); } Texture2D<float4> StereoParams : register(t125); Texture1D<float4> IniParams : register(t120); void main( float4 v0 : POSITION0, float4 v1 : TEXCOORD0, out float2 o0 : TEXCOORD0, out float3 o1 : TEXCOORD1, out float4 o2 : SV_Position0) { float4 r0; uint4 bitmask, uiDest; float4 fDest; o0.xy = v1.xy; r0.xy = v1.xy; r0.z = 1.000000000e+000; o1.x = dot(cb0[0].xyw, r0.xyz); o1.y = dot(cb0[1].xyw, r0.xyz); o1.z = dot(cb0[2].xyw, r0.xyz); o2.xyw = v0.xyw; o2.z = 0.000000000e+000; return; } [/code]
Mate! Awesome. That first shader I had apparently already fixed. Soz.

Turning on shadows, as you mention, used additional shaders but I have fixed them using the pattern.

I could only find the one PS and VS for the dodgy shadow which is cast on the cockpit and station textures; however, other light maps seem to work and dynamic shadows on things like rocks on a planet's surface are OK once the cast light was fixed. Also the ship's shadow on objects is also fine.

Here is the PS
//Shadow wrong depth - cockpit and station

Texture2D<float4> t0 : register(t0);

SamplerState s0_s : register(s0);

cbuffer cb0 : register(b0)
{
float4 cb0[1];
}


Texture2D<float4> StereoParams : register(t125);
Texture1D<float4> IniParams : register(t120);

void main(
float4 v0 : TEXCOORD0,
float3 v1 : TEXCOORD1,
float3 v2 : TEXCOORD2,
float3 v3 : TEXCOORD3,
float2 v4 : TEXCOORD4,
float4 v5 : SV_Position0,
out float4 o0 : SV_Target0)
{
float4 r0,r1;
uint4 bitmask, uiDest;
float4 fDest;

r0.x = dot(v1.xyz, v1.xyz);
r0.x = rsqrt(r0.x);
r0.xyz = v1.xyz * r0.xxx;
r0.w = dot(-v2.xyz, -v2.xyz);
r0.w = rsqrt(r0.w);
r1.xyz = -v2.xyz * r0.www;
r0.x = saturate(dot(r1.xyz, r0.xyz));
r0.x = 1.000000000e+000 + -r0.x;
r0.x = max(r0.x, 9.999999747e-005);
r0.x = log2(r0.x);
r0.x = cb0[0].z * r0.x;
r0.x = exp2(r0.x);
r0.y = 1.000000000e+000 + -cb0[0].w;
r0.x = r0.x * cb0[0].w + r0.y;
r1.xyzw = t0.Sample(s0_s, v4.xy).xyzw;
r0.y = 1.000000000e+000 + -r1.y;
r0.y = max(r0.y, 9.999999747e-005);
r0.y = log2(r0.y);
r0.y = cb0[0].y * r0.y;
r0.y = exp2(r0.y);
r0.y = cb0[0].x * r0.y;
o0.xyzw = r0.yyyy * r0.xxxx + v0.wwww;
return;
}



Here is the VS
//Shadow wrong depth - cockpit and station

cbuffer cb1 : register(b1)
{
float4 cb1[8];
}


Texture2D<float4> StereoParams : register(t125);
Texture1D<float4> IniParams : register(t120);

void main(
float4 v0 : NORMAL0,
float4 v1 : POSITION0,
float4 v2 : POSITION6,
float4 v3 : POSITION7,
float4 v4 : TANGENT0,
float4 v5 : TEXCOORD0,
out float4 o0 : SV_Position0)
{
float4 r0,r1,r2;
uint4 bitmask, uiDest;
float4 fDest;

r0.xyzw = v3.xyzw + v3.xyzw;
r1.x = v3.w * r0.w;
r1.yzw = v1.xyz * cb1[0].xyz + cb1[1].xyz;
r2.xyz = r1.xxx * r1.yzw + -r1.yzw;
r1.x = dot(v3.xyz, r1.yzw);
r0.xyz = r1.xxx * r0.xyz + r2.xyz;
r2.xyz = v3.zxy * r1.zwy;
r1.xyz = v3.yzx * r1.wyz + -r2.xyz;
r0.xyz = r1.xyz * r0.www + r0.xyz;
r0.xyz = v2.xyz + r0.xyz;
r0.w = v1.w;
r1.x = dot(cb1[6].xyzw, r0.xyzw);
r1.y = dot(cb1[7].xyzw, r0.xyzw);
o0.z = min(r1.y, r1.x);
o0.w = r1.y;
o0.x = dot(cb1[4].xyzw, r0.xyzw);
o0.y = dot(cb1[5].xyzw, r0.xyzw);
return;
}


Really appreciate the help. I have AC:Syndicate, got it free; if this is DX11, I will have a look at this next. :)



EDIT

OK. Found one that fits the bill; the ps's shader is way more complex than its vs counterpart but they both do the same thing.

ps
// Dodgy textures on asteriods - shadows on

Texture2D<float4> t3 : register(t3);

Texture2D<float4> t2 : register(t2);

Texture2D<float4> t1 : register(t1);

Texture2D<float4> t0 : register(t0);

SamplerState s3_s : register(s3);

SamplerState s2_s : register(s2);

SamplerState s1_s : register(s1);

SamplerState s0_s : register(s0);

cbuffer cb0 : register(b0)
{
float4 cb0[26];
}


Texture2D<float4> StereoParams : register(t125);
Texture1D<float4> IniParams : register(t120);

void main(
float2 v0 : TEXCOORD0,
float3 v1 : TEXCOORD1,
float4 v2 : SV_Position0,
out float4 o0 : SV_Target0)
{
float4 r0,r1,r2,r3,r4,r5;
uint4 bitmask, uiDest;
float4 fDest;

r0.xyzw = t0.Sample(s3_s, v0.xy).xyzw;
r1.xyzw = t1.Sample(s0_s, v0.xy).xyzw;
r1.yzw = r1.yzw * float3(2.000000e+000,2.000000e+000,2.000000e+000) + float3(-1.000000e+000,-1.000000e+000,-1.000000e+000);
r2.x = dot(r1.yzw, r1.yzw);
r2.x = rsqrt(r2.x);
r1.yzw = r2.xxx * r1.yzw;
r2.xyzw = t2.Sample(s1_s, v0.xy).xyzw;
r2.w = r2.w * 2.550000000e+002 + 5.000000000e-001;
r2.w = (uint)r2.w;
r3.xyzw = (int4)r2.wwww & int4(64,1,16,32);
if (r3.x != 0) {
r3.x = 1.000000000e+000;
r4.x = 1.000000000e+000;
} else {
r0.w = 1.000000000e+000 + -r0.w;
r3.x = -r0.w * cb0[24].w + 1.000000000e+000;
r4.x = -r0.w * cb0[25].x + 1.000000000e+000;
}
r0.w = cb0[0].x * r1.x + 1.000000000e+000;
r0.w = exp2(r0.w);
r4.y = dot(v1.xyz, v1.xyz);
r4.y = rsqrt(r4.y);
r5.xyz = v1.xyz * r4.yyy;
if (r3.y != 0) {
r3.y = dot(-r5.xyz, -r5.xyz);
r3.y = rsqrt(r3.y);
r5.xyz = -r5.xyz * r3.yyy;
r3.y = dot(r1.yzw, r5.xyz);
r3.y = saturate(1.000000012e-007 + r3.y);
r4.z = dot(r5.xyz, -cb0[9].xyz);
r4.w = dot(r1.yzw, -cb0[9].xyz);
r4.z = -r3.y * r4.w + r4.z;
r5.x = r4.z >= 0.000000000e+000;
r3.y = r4.w / r3.y;
r3.y = min(r3.y, 1.000000000e+000);
r3.y = r5.x ? r3.y : r4.w;
r5.xy = r0.ww * float2(6.500000e-001,1.000000e-001) + float2(2.000000e+000,2.222220e+000);
r5.xy = float2(1.000000e+000,1.000000e+000) / r5.xy;
r5.x = 1.000000000e+000 + -r5.x;
r4.z = r5.y * r4.z;
r3.y = r4.z * r3.y;
r3.y = saturate(r4.w * r5.x + r3.y);
} else {
r4.z = (int)r2.w & 32;
r4.w = dot(-cb0[9].xyz, r1.yzw);
r5.x = saturate(r4.w * 5.000000000e-001 + 5.000000000e-001);
r4.w = saturate(r4.w);
r3.y = r4.z ? r5.x : r4.w;
}
if (r3.z == 0) {
r4.yzw = -v1.xyz * r4.yyy + -cb0[9].xyz;
r4.yzw = float3(1.000000e-009,1.000000e-009,1.000000e-009) + r4.yzw;
r3.z = dot(r4.yzw, r4.yzw);
r3.z = rsqrt(r3.z);
r4.yzw = r4.yzw * r3.zzz;
r3.z = dot(-cb0[9].xyz, r4.yzw);
r3.z = 1.000000000e+000 + -abs(r3.z);
r5.x = r3.z * r3.z;
r5.x = r5.x * r5.x;
r3.z = r5.x * r3.z;
r5.xyz = float3(1.000000e+000,1.000000e+000,1.000000e+000) + -r0.xyz;
r5.xyz = r5.xyz * r3.zzz;
r1.x = r1.x * r1.x;
r0.xyz = r5.xyz * r1.xxx + r0.xyz;
r1.x = 6.000000000e+000 + r0.w;
r1.x = 3.125000000e-002 * r1.x;
r3.z = saturate(dot(r1.yzw, r4.yzw));
r3.z = log2(r3.z);
r0.w = r3.z * r0.w;
r0.w = exp2(r0.w);
r0.w = r1.x * r0.w;
r0.xyz = r0.www * r0.xyz;
r0.w = saturate(dot(r1.yzw, -cb0[9].xyz));
r0.xyz = r0.xyz * r0.www;
} else {
r0.xyz = float3(0.000000e+000,0.000000e+000,0.000000e+000);
}
if (r3.w != 0) {
r0.w = 1.000000000e+000;
} else {
r1.x = (int)r2.w & 4;
r1.x = r1.x ? 0.000000000e+000 : 1.000000000e+000;
r5.xyzw = t3.Sample(s2_s, v0.xy).xyzw;
r1.y = dot(r5.xyz, cb0[17].xyz);
r1.x = r1.x + -r1.y;
r0.w = cb0[0].y * r1.x + r1.y;
}
r1.x = r3.y * r3.x;
r0.xyz = r0.xyz * r4.xxx;
r0.xyz = r1.xxx * r2.xyz + r0.xyz;
r0.xyz = cb0[1].xyz * r0.xyz;
o0.xyz = r0.xyz * r0.www;
o0.w = 0.000000000e+000;
return;
}



vs
// Dodgy textures on asteriods - shadows on
cbuffer cb0 : register(b0)
{
float4 cb0[3] : packoffset(c0);
}

Texture2D<float4> StereoParams : register(t125);
Texture1D<float4> IniParams : register(t120);

void main(
float4 v0 : POSITION0,
float4 v1 : TEXCOORD0,
out float2 o0 : TEXCOORD0,
out float3 o1 : TEXCOORD1,
out float4 o2 : SV_Position0)
{
float4 r0;
uint4 bitmask, uiDest;
float4 fDest;

o0.xy = v1.xy;
r0.xy = v1.xy;
r0.z = 1.000000000e+000;
o1.x = dot(cb0[0].xyw, r0.xyz);
o1.y = dot(cb0[1].xyw, r0.xyz);
o1.z = dot(cb0[2].xyw, r0.xyz);
o2.xyw = v0.xyw;
o2.z = 0.000000000e+000;
return;
}

Lord, grant me the serenity to accept the things I cannot change, the courage to change the things I can, and the wisdom to know the difference.
-------------------
Vitals: Windows 7 64bit, i5 2500 @ 4.4ghz, SLI GTX670, 8GB, Viewsonic VX2268WM

Handy Driver Discussion
Helix Mod - community fixes
Bo3b's Shaderhacker School - How to fix 3D in games
3dsolutionsgaming.com - videos, reviews and 3D fixes

#6
Posted 01/05/2016 04:41 PM   
None of those shaders look right for shadows to me (at least not deferred shadows) - I can't see anything that looks like it's constructing a 3D coordinate from the depth buffer. You could try doing some experiments on them to see if you are able to disable or move the shadows by adjusting various variables in them, which might give you some clues. Can you post a screenshot of the dodgy shadow?
None of those shaders look right for shadows to me (at least not deferred shadows) - I can't see anything that looks like it's constructing a 3D coordinate from the depth buffer. You could try doing some experiments on them to see if you are able to disable or move the shadows by adjusting various variables in them, which might give you some clues. Can you post a screenshot of the dodgy shadow?

2x Geforce GTX 980 in SLI provided by NVIDIA, i7 6700K 4GHz CPU, Asus 27" VG278HE 144Hz 3D Monitor, BenQ W1070 3D Projector, 120" Elite Screens YardMaster 2, 32GB Corsair DDR4 3200MHz RAM, Samsung 850 EVO 500G SSD, 4x750GB HDD in RAID5, Gigabyte Z170X-Gaming 7 Motherboard, Corsair Obsidian 750D Airflow Edition Case, Corsair RM850i PSU, HTC Vive, Win 10 64bit

Alienware M17x R4 w/ built in 3D, Intel i7 3740QM, GTX 680m 2GB, 16GB DDR3 1600MHz RAM, Win7 64bit, 1TB SSD, 1TB HDD, 750GB HDD

Pre-release 3D fixes, shadertool.py and other goodies: http://github.com/DarkStarSword/3d-fixes
Support me on Patreon: https://www.patreon.com/DarkStarSword or PayPal: https://www.paypal.me/DarkStarSword

#7
Posted 01/05/2016 11:02 PM   
Hello mate. I tried the pink thing but it didn't work? I tried: marking_mode=pink marking_mode="pink" Here are the screenies. [url]https://forums.geforce.com/cmd/default/download-comment-attachment/67741/[/url] The first relates to the cockpit shader, the first shader pair on the previous post. Shadows OFF [img]https://forums.geforce.com/cmd/default/download-comment-attachment/67738/[/img] Shadows ON [img]https://forums.geforce.com/cmd/default/download-comment-attachment/67737/[/img] Shadows ON shader tagged [img]https://forums.geforce.com/cmd/default/download-comment-attachment/67739/[/img] This lot is for the asteroids: Shadows OFF [img]https://forums.geforce.com/cmd/default/download-comment-attachment/67734/[/img] Shadows ON [img]https://forums.geforce.com/cmd/default/download-comment-attachment/67735/[/img] Shadows ON shader tagged [img]https://forums.geforce.com/cmd/default/download-comment-attachment/67736/[/img] I found another potential shader; this one is within the station. Shadows OFF [img]https://forums.geforce.com/cmd/default/download-comment-attachment/67733/[/img] Shadows ON [img]https://forums.geforce.com/cmd/default/download-comment-attachment/67732/[/img] Shadows ON shader tagged [img]https://forums.geforce.com/cmd/default/download-comment-attachment/67731/[/img] The shaders are here and confusingly, the vs is the same one as the asteroid above. So I have probably ballsed up! ps [code]//Funny Light on station Texture2D<float4> t0 : register(t0); SamplerState s0_s : register(s0); cbuffer cb0 : register(b0) { float4 cb0[1]; } Texture2D<float4> StereoParams : register(t125); Texture1D<float4> IniParams : register(t120); void main( float2 v0 : TEXCOORD0, out float4 o0 : SV_Target0) { float4 r0; uint4 bitmask, uiDest; float4 fDest; r0.xyzw = t0.Sample(s0_s, v0.xy).xyzw; r0.x = cb0[0].x * r0.x; r0.y = 1.000000000e+000 < r0.x; if (r0.y != 0) { r0.x = -5.000000000e+000; } o0.xy = r0.xx; o0.zw = float2(0.000000e+000,0.000000e+000); return; }[/code] vs [code]//Funny Light on station cbuffer cb0 : register(b0) { float4 cb0[3] : packoffset(c0); } Texture2D<float4> StereoParams : register(t125); Texture1D<float4> IniParams : register(t120); void main( float4 v0 : POSITION0, float4 v1 : TEXCOORD0, out float2 o0 : TEXCOORD0, out float3 o1 : TEXCOORD1, out float4 o2 : SV_Position0) { float4 r0; uint4 bitmask, uiDest; float4 fDest; o0.xy = v1.xy; r0.xy = v1.xy; r0.z = 1.000000000e+000; o1.x = dot(cb0[0].xyw, r0.xyz); o1.y = dot(cb0[1].xyw, r0.xyz); o1.z = dot(cb0[2].xyw, r0.xyz); o2.xyw = v0.xyw; o2.z = 0.000000000e+000; return; }[/code] Thanks again! edit On a planet Funny black torn ground ps [code]// Black 'tear' in the ground Texture2D<float4> t0 : register(t0); SamplerState s0_s : register(s0); Texture2D<float4> StereoParams : register(t125); Texture1D<float4> IniParams : register(t120); void main( float4 v0 : TEXCOORD0, float4 v1 : TEXCOORD1, float3 v2 : TEXCOORD2, out float4 o0 : SV_Target0) { float4 r0; uint4 bitmask, uiDest; float4 fDest; r0.xyzw = t0.Sample(s0_s, v2.yz).xyzw; r0.xyzw = r0.xyzw * v1.xyzw + v0.xyzw; o0.w = v2.x * r0.w; o0.xyz = r0.xyz; return; } [/code] vs [code]// Black 'tear' in the ground cbuffer cb0 : register(b0) { float4 cb0[3]; } cbuffer cb1 : register(b1) { float4 cb1[8]; } Texture2D<float4> StereoParams : register(t125); Texture1D<float4> IniParams : register(t120); void main( float4 v0 : NORMAL0, float4 v1 : POSITION0, float4 v2 : POSITION6, float4 v3 : POSITION7, float4 v4 : TANGENT0, float4 v5 : TEXCOORD0, float4 v6 : TEXCOORD1, float4 v7 : TEXCOORD2, float4 v8 : TEXCOORD3, float4 v9 : TEXCOORD4, float4 v10 : TEXCOORD5, float4 v11 : TEXCOORD6, out float4 o0 : SV_Position0) { float4 r0,r1,r2,r3; uint4 bitmask, uiDest; float4 fDest; r0.xyz = cb0[1].zxy * v8.yzx; r0.xyz = cb0[1].yzx * v8.zxy + -r0.xyz; r0.w = dot(cb0[1].xyz, v8.xyz); r1.xyzw = cb0[1].xyzw + cb0[1].xyzw; r2.x = cb0[1].w * r1.w; r2.yzw = r2.xxx * v8.xyz + -v8.xyz; r2.yzw = r0.www * r1.xyz + r2.yzw; r0.xyz = r0.xyz * r1.www + r2.yzw; r0.xyz = cb0[0].xyz + r0.xyz; r2.yzw = v1.xyz * cb1[0].xyz + cb1[1].xyz; r3.xyz = r2.xxx * r2.yzw + -r2.yzw; r0.w = dot(cb0[1].xyz, r2.yzw); r1.xyz = r0.www * r1.xyz + r3.xyz; r3.xyz = cb0[1].zxy * r2.zwy; r2.xyz = cb0[1].yzx * r2.wyz + -r3.xyz; r1.xyz = r2.xyz * r1.www + r1.xyz; r1.xyz = cb0[0].xyz + r1.xyz; r0.xyz = -r1.xyz + r0.xyz; r2.x = dot(r1.xyz, r1.xyz); r2.x = saturate(r2.x * cb0[2].x + cb0[2].y); r1.w = 1.000000000e+000; r0.w = 0.000000000e+000; r0.xyzw = r2.xxxx * r0.xyzw + r1.xyzw; r1.x = dot(cb1[6].xyzw, r0.xyzw); r1.y = dot(cb1[7].xyzw, r0.xyzw); o0.z = min(r1.y, r1.x); o0.w = r1.y; o0.x = dot(cb1[4].xyzw, r0.xyzw); o0.y = dot(cb1[5].xyzw, r0.xyzw); return; }[/code] The entire surface. Was this what you meant? ps [code]// sun lit planet surface cbuffer cb0 : register(b0) { float4 cb0[75] : packoffset(c0); } SamplerState s0_s_s : register(s0); SamplerState s1_s_s : register(s1); SamplerState s2_s_s : register(s2); SamplerState s3_s_s : register(s3); SamplerState s4_s_s : register(s4); SamplerState s5_s_s : register(s5); SamplerState s6_s_s : register(s6); SamplerState s7_s_s : register(s7); SamplerState s8_s_s : register(s8); SamplerState s9_s_s : register(s9); SamplerState s10_s_s : register(s10); SamplerState s11_s_s : register(s11); SamplerState s12_s_s : register(s12); Texture2D<float4> t0 : register(t0); Texture2D<float4> t1 : register(t1); Texture2D<float4> t2 : register(t2); Texture2D<float4> t3 : register(t3); Texture2D<float4> t4 : register(t4); Texture2D<float4> t5 : register(t5); Texture2D<float4> t6 : register(t6); Texture2D<float4> t7 : register(t7); Texture2D<float4> t8 : register(t8); Texture2D<float4> t9 : register(t9); Texture2D<float4> t10 : register(t10); Texture2D<float4> t11 : register(t11); Texture2D<float4> t12 : register(t12); Texture2D<float4> StereoParams : register(t125); Texture1D<float4> IniParams : register(t120); void main( float4 v0 : TEXCOORD0, float4 v1 : TEXCOORD1, float4 v2 : TEXCOORD2, float4 v3 : TEXCOORD3, float4 v4 : TEXCOORD4, float4 v5 : TEXCOORD5, float2 v6 : TEXCOORD6, float4 v7 : SV_Position0, out float4 o0 : SV_Target0, out float4 o1 : SV_Target1, out float4 o2 : SV_Target2, out float4 o3 : SV_Target3, out float4 o4 : SV_Target4) { float4 r0,r1,r2,r3,r4,r5,r6,r7,r8,r9,r10,r11,r12,r13,r14,r15,r16,r17,r18,r19,r20,r21,r22,r23; uint4 bitmask, uiDest; float4 fDest; float4 x0[10]; x0[0].xyzw = float4(0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000); x0[1].xyzw = float4(0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000); x0[2].xyzw = float4(0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000); x0[3].xyzw = float4(0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000); x0[4].xyzw = float4(0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000); x0[5].xyzw = float4(0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000); x0[6].xyzw = float4(0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000); x0[7].xyzw = float4(0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000); x0[8].xyzw = float4(0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000); x0[9].xyzw = float4(0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000); r0.x = dot(v3.xyz, v3.xyz); r0.x = rsqrt(r0.x); r0.yzw = v3.xyz * r0.xxx; r1.x = dot(r0.yzw, v0.xyz); r1.y = 1.000000000e+000 + -abs(r1.x); r1.y = sqrt(r1.y); r1.z = abs(r1.x) * -1.872929931e-002 + 7.426100224e-002; r1.z = r1.z * abs(r1.x) + -2.121143937e-001; r1.z = r1.z * abs(r1.x) + 1.570728779e+000; r1.w = r1.z * r1.y; r1.w = r1.w * -2.000000000e+000 + 3.141592741e+000; r1.x = r1.x < -r1.x; r1.x = r1.x ? r1.w : 0; r1.x = r1.z * r1.y + r1.x; r1.x = 6.366197467e-001 * r1.x; r2.x = -5.000000000e-001 + v5.y; r2.y = dot(v4.xyz, v4.xyz); r2.y = sqrt(r2.y); r2.z = saturate(cb0[73].x); r2.w = 1.000000000e+000 + -r2.z; r3.xyz = -cb0[39].xyz + v2.xyz; r3.w = dot(r3.xyz, r3.xyz); r3.w = rsqrt(r3.w); r3.xyz = r3.xyz * r3.www; r3.x = dot(-r3.xyz, cb0[72].xyz); r3.x = 5.000000000e-001 + r3.x; r3.x = saturate(6.666666865e-001 * r3.x); r3.x = r3.x * r3.x; r3.y = 1.000000000e+000 + -v4.w; r3.y = saturate(cb0[74].x * r3.y); r3.y = log2(r3.y); r3.y = cb0[74].y * r3.y; r4.x = exp2(r3.y); r3.y = cb0[73].z * -v2.w; r3.y = 1.442695022e+000 * r3.y; r4.y = exp2(r3.y); r3.yz = float2(1.000000e+000,1.000000e+000) + -r4.xy; r3.z = log2(r3.z); r3.z = cb0[73].w * r3.z; r3.z = exp2(r3.z); r3.w = dot(v2.xyz, v2.xyz); r3.w = rsqrt(r3.w); r4.xyz = v2.xyz * r3.www; r3.w = saturate(dot(-r4.xyz, cb0[72].xyz)); r4.x = r3.x * r3.z; r4.x = r4.x * r3.y; r4.x = r4.x * 4.400000000e+001 + 4.000000000e+000; r3.w = log2(r3.w); r3.w = r4.x * r3.w; r3.w = exp2(r3.w); r3.w = cb0[74].w * r3.w; r4.x = dot(cb0[72].xyz, -v1.xyz); r4.x = 2.000000030e-001 + r4.x; r4.x = saturate(8.333333135e-001 * r4.x); r4.x = r4.x * r4.x; r3.z = r3.w * r3.z + r3.z; r2.z = r4.x * r2.z; r2.w = r3.z * r2.w; r2.w = r2.w * r3.y; r3.yzw = r4.xxx * float3(3.500000e-001,2.000000e-001,0.000000e+000) + float3(6.500000e-001,8.000000e-001,1.000000e+000); r2.z = r2.z * v0.w + r2.w; r4.xyz = cb0[71].xyz * r2.zzz; r3.yzw = r4.xyz * r3.yzw; r3.xyz = r3.yzw * r3.xxx; r3.xyz = cb0[73].yyy * r3.xyz; r2.z = max(cb0[71].x, cb0[71].y); r2.z = max(r2.z, cb0[71].z); r2.z = min(r2.z, cb0[74].z); r2.z = max(r2.z, 9.999999747e-006); r3.xyz = -r3.xyz / r2.zzz; r3.xyz = float3(1.442695e+000,1.442695e+000,1.442695e+000) * r3.xyz; r3.xyz = exp2(r3.xyz); r3.xyz = float3(1.000000e+000,1.000000e+000,1.000000e+000) + -r3.xyz; r3.xyz = r3.xyz * r2.zzz; r3.xyz = v3.www * r3.xyz; r4.xyz = ddx(v4.xyz); r5.xyz = ddy(v4.xyz); r2.z = dot(r4.xyz, r4.xyz); r2.w = dot(r5.xyz, r5.xyz); r3.w = min(r2.z, r2.w); r4.w = max(r2.z, r2.w); r5.w = r2.y / cb0[0].x; r6.x = sqrt(cb0[0].x); r5.w = r6.x * r5.w; r5.w = log2(r5.w); r5.w = 5.000000000e+000 + r5.w; r6.x = floor(r5.w); r6.y = -r6.x + r5.w; r6.z = exp2(r6.x); r6.w = r6.z < 1.024000000e+003; if (r6.w != 0) { r7.xyz = float3(-3.906250e-003,-3.906250e-003,-3.906250e-003) * cb0[38].xyz; r7.w = 1.000000e+000 / r6.z; r7.w = 5.000000000e-001 * r7.w; r8.x = r7.w; r8.y = 0.000000000e+000; while (true) { r8.z = (int)r8.y; r8.w = (int)r8.z >= (int)10; if (r8.w != 0) { break; } r8.w = r8.x + r8.x; r9.x = r8.x < 5.000000000e-001; if (r9.x != 0) { r9.x = (int)r8.z + 1; r9.x = r9.x; r8.x = r8.w; r8.y = r9.x; continue; } r9.xyz = r8.www * r7.xyz; r9.xyz = frac(r9.xyz); r9.xyz = float3(2.560000e+002,2.560000e+002,2.560000e+002) * r9.xyz; r9.xyz = v4.xyz * r8.www + r9.xyz; r10.xyz = floor(r9.xyz); r9.xyz = frac(r9.xyz); r11.xyz = r9.xyz * r9.xyz; r12.xyz = r9.xyz * float3(-2.000000e+000,-2.000000e+000,-2.000000e+000) + float3(3.000000e+000,3.000000e+000,3.000000e+000); r11.xyz = r12.xyz * r11.xyz; r12.xyz = float3(3.906250e-003,3.906250e-003,3.906250e-003) * r10.xyz; r12.xyz = frac(r12.xyz); r9.w = dot(r12.xyz, float3(1.271000e+002,3.117000e+002,2.013000e+002)); r9.w = sin(r9.w); r9.w = 4.375854688e+004 * r9.w; r9.w = frac(r9.w); r12.xyz = float3(1.000000e+000,0.000000e+000,0.000000e+000) + r10.xyz; r12.xyz = float3(3.906250e-003,3.906250e-003,3.906250e-003) * r12.xyz; r12.xyz = frac(r12.xyz); r10.w = dot(r12.xyz, float3(1.271000e+002,3.117000e+002,2.013000e+002)); r10.w = sin(r10.w); r10.w = 4.375854688e+004 * r10.w; r12.xyz = float3(0.000000e+000,1.000000e+000,0.000000e+000) + r10.xyz; r12.xyz = float3(3.906250e-003,3.906250e-003,3.906250e-003) * r12.xyz; r12.xyz = frac(r12.xyz); r11.w = dot(r12.xyz, float3(1.271000e+002,3.117000e+002,2.013000e+002)); r11.w = sin(r11.w); r11.w = 4.375854688e+004 * r11.w; r12.xyz = float3(1.000000e+000,1.000000e+000,0.000000e+000) + r10.xyz; r12.xyz = float3(3.906250e-003,3.906250e-003,3.906250e-003) * r12.xyz; r12.xyz = frac(r12.xyz); r12.x = dot(r12.xyz, float3(1.271000e+002,3.117000e+002,2.013000e+002)); r12.x = sin(r12.x); r12.x = 4.375854688e+004 * r12.x; r12.yzw = float3(0.000000e+000,0.000000e+000,1.000000e+000) + r10.xyz; r12.yzw = float3(3.906250e-003,3.906250e-003,3.906250e-003) * r12.yzw; r12.xyzw = frac(r12.xyzw); r12.y = dot(r12.yzw, float3(1.271000e+002,3.117000e+002,2.013000e+002)); r12.y = sin(r12.y); r12.y = 4.375854688e+004 * r12.y; r13.xyz = float3(1.000000e+000,0.000000e+000,1.000000e+000) + r10.xyz; r13.xyz = float3(3.906250e-003,3.906250e-003,3.906250e-003) * r13.xyz; r12.y = frac(r12.y); r13.xyz = frac(r13.xyz); r12.z = dot(r13.xyz, float3(1.271000e+002,3.117000e+002,2.013000e+002)); r12.z = sin(r12.z); r13.xyz = float3(0.000000e+000,1.000000e+000,1.000000e+000) + r10.xyz; r13.xyz = float3(3.906250e-003,3.906250e-003,3.906250e-003) * r13.xyz; r13.xyz = frac(r13.xyz); r12.w = dot(r13.xyz, float3(1.271000e+002,3.117000e+002,2.013000e+002)); r12.w = sin(r12.w); r12.zw = float2(4.375855e+004,4.375855e+004) * r12.zw; r13.xy = frac(r12.zw); r10.xyz = float3(1.000000e+000,1.000000e+000,1.000000e+000) + r10.xyz; r10.xyz = float3(3.906250e-003,3.906250e-003,3.906250e-003) * r10.xyz; r10.xyzw = frac(r10.xyzw); r11.w = frac(r11.w); r10.x = dot(r10.xyz, float3(1.271000e+002,3.117000e+002,2.013000e+002)); r10.x = sin(r10.x); r10.x = 4.375854688e+004 * r10.x; r10.x = frac(r10.x); r10.y = r10.w + -r9.w; r10.y = r11.x * r10.y + r9.w; r10.zw = r13.xy + -r12.yy; r10.zw = r11.xy * r10.zw + r12.yy; r12.x = r12.x + -r11.w; r12.x = r11.x * r12.x + r11.w; r10.x = r10.x + -r13.y; r10.x = r11.x * r10.x + r13.y; r12.x = r12.x + -r10.y; r12.x = r11.y * r12.x + r10.y; r10.x = r10.x + -r10.z; r10.x = r11.y * r10.x + r10.z; r10.z = r10.z + -r10.y; r10.y = r11.z * r10.z + r10.y; r10.z = r11.w + -r9.w; r9.w = r11.y * r10.z + r9.w; r10.z = r10.w + -r9.w; r9.w = r11.z * r10.z + r9.w; r10.x = r10.x + -r12.x; r10.z = r11.z * r10.x; r12.w = r11.z * r10.x + r12.x; r13.xyz = float3(1.000000e+000,1.000000e+000,1.000000e+000) + -r9.xyz; r9.xyz = r13.xyz * r9.xyz; r9.xyz = float3(6.000000e+000,6.000000e+000,6.000000e+000) * r9.xyz; r11.xyz = max(r11.xyz, float3(1.525879e-005,1.525879e-005,1.525879e-005)); r9.xyz = r9.xyz / r11.xyz; r9.w = r12.w + -r9.w; r11.x = r9.x * r9.w; r9.x = r12.w + -r10.y; r11.y = r9.y * r9.x; r11.z = r9.z * r10.z; r12.xyz = r11.xyz * r8.www; r9.x = (uint)r8.y; x0[r9.x+0].xyzw = r12.xyzw; r8.z = (int)r8.z + 1; r8.y = r8.z; r8.x = r8.w; } } r7.xyz = float3(-2.000000e-001,-2.000000e-001,-2.000000e-001) + abs(r0.yzw); r7.xyz = max(r7.xyz, float3(1.000000e-003,1.000000e-003,1.000000e-003)); r7.xyz = r7.xyz * r7.xyz; r7.w = dot(r7.xyz, float3(1.000000e+000,1.000000e+000,1.000000e+000)); r7.xyz = r7.xyz / r7.www; r8.xyz = float3(-4.882813e-004,-4.882813e-004,-4.882813e-004) * cb0[38].xyz; r8.xyz = frac(r8.xyz); r8.xyz = v4.xyz * float3(4.882813e-004,4.882813e-004,4.882813e-004) + r8.xyz; r4.w = r4.w + -r3.w; r3.w = r4.w * 5.000000000e-001 + r3.w; r3.w = sqrt(r3.w); r4.w = 4.882812500e-004 * r3.w; r7.w = min(r4.w, 1.000000000e+000); r8.w = min(v5.z, v5.w); r8.w = r8.w < 9.990000129e-001; if (r8.w != 0) { r9.xyz = -cb0[34].xzy + cb0[31].xzy; r1.y = v5.x; r10.xy = -cb0[34].xz + r1.xy; r9.xy = float2(1.000000e+000,1.000000e+000) / r9.xy; r9.xy = saturate(r10.xy * r9.xy); r10.xy = r9.xy * float2(-2.000000e+000,-2.000000e+000) + float2(3.000000e+000,3.000000e+000); r9.xy = r9.xy * r9.xy; r10.xz = r10.xy * r9.xy; r1.y = 8.000000000e+001 * abs(r9.z); r1.y = r2.y / r1.y; r1.y = max(r1.y, 1.000000000e+000); r8.w = cb0[34].y * r1.y; r8.w = cb0[31].y * r1.y + -r8.w; r1.y = -cb0[34].y * r1.y + r2.x; r8.w = 1.000000e+000 / r8.w; r1.y = saturate(r8.w * r1.y); r8.w = r1.y * -2.000000000e+000 + 3.000000000e+000; r1.y = r1.y * r1.y; r10.y = r8.w * r1.y; r1.y = dot(float3(1.000000e+000,1.000000e+000,1.000000e+000), r10.xyz); r1.y = max(r1.y, 1.000000000e+000); r9.xyz = r10.xyz / r1.yyy; r10.xyzw = cb0[55].xyzw * r9.zzzz + cb0[49].xyzw; r10.xyzw = cb0[52].xyzw * r9.yyyy + r10.xyzw; r10.xyzw = cb0[58].xyzw * r9.xxxx + r10.xyzw; r11.xyzw = cb0[10].xyzw * r9.zzzz + cb0[4].xyzw; r11.xyzw = cb0[7].xyzw * r9.yyyy + r11.xyzw; r11.xyzw = cb0[13].xyzw * r9.xxxx + r11.xyzw; r12.xyzw = cb0[22].xyzw * r9.zzzz + cb0[16].xyzw; r12.xyzw = cb0[19].xyzw * r9.yyyy + r12.xyzw; r9.xyzw = cb0[25].xyzw * r9.xxxx + r12.xyzw; r1.y = log2(r11.y); if (r6.w != 0) { r8.w = 1.000000000e+000 + -r11.w; r12.x = 5.000000000e-001 + r11.z; r12.x = frac(r12.x); r12.x = -5.000000000e-001 + r12.x; r12.x = 5.000000000e-001 + abs(r12.x); r12.x = 1.000000e+000 / r12.x; r12.yz = r11.zz * float2(5.000000e-001,5.000000e-001) + float2(-5.000000e-001,2.500000e-001); r11.z = abs(r12.y) * -2.000000000e+000 + 5.000000000e-001; r11.z = max(r11.z, 0.000000000e+000); r11.z = -r11.z * r12.x; r9.x = max(r9.x, 1.000000012e-007); r12.y = r9.x * 2.000000000e+000 + 1.000000000e+000; r12.w = r9.x * r9.x + r12.y; r9.x = 1.000000000e+000 + r9.x; r13.x = r1.y * -r6.x; r13.x = exp2(r13.x); r13.y = r2.z + r2.w; r13.y = sqrt(r13.y); r13.x = r13.x / r11.y; r13.z = r6.z + r6.z; r13.w = 5.000000000e-001 * r13.y; r14.x = 1.000000000e+000 + -r6.y; r14.yzw = float3(0.000000e+000,0.000000e+000,0.000000e+000); r15.xyzw = float4(0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000); r16.yz = r13.xz; r16.xw = float2(0.000000e+000,1.000000e+000); r17.x = 0.000000000e+000; while (true) { r17.y = (uint)r17.x; r17.z = (uint)r17.y >= (uint)10; if (r17.z != 0) { break; } r17.z = r16.y * r11.y; r17.w = 5.000000000e-001 * r16.z; r18.x = 2.000000000e+000 < r16.z; if (r18.x != 0) { r18.x = (int)r17.x; r18.x = (int)r18.x + 1; r18.x = r18.x; r16.yz = r17.zw; r17.x = r18.x; continue; } r18.x = r13.w >= r17.w; if (r18.x != 0) { break; } r18.x = x0[r17.y+0].w; r18.yzw = x0[r17.y+0].xyz; r17.y = r18.x * 5.000000000e-001 + r12.z; r17.y = frac(r17.y); r17.y = r17.y * 2.000000000e+000 + -1.000000000e+000; r18.xyz = r18.yzw * r12.xxx; r18.w = 0.000000000e+000 < r17.y; r19.x = r17.y < 0.000000000e+000; r19.x = r19.x ? 1 : 0; r18.w = ((int)r18.w ? -1 : 0) + ((int)r19.x ? 1 : 0); r18.w = r18.w; r18.xyz = r18.xyz * r18.www; r17.y = abs(r17.y) * r12.x + r11.z; r18.w = r17.y * r12.y; r18.w = r12.y * -2.000000000e+000 + r18.w; r18.w = r18.w * r17.y + r12.w; r18.w = sqrt(r18.w); r17.y = -r12.y * r17.y + r12.y; r17.y = r17.y / r18.w; r18.xyz = r18.xyz * r17.yyy; r17.y = -r18.w + r9.x; r18.w = r17.y + r17.y; r18.xyz = r18.www * r18.xyz; r17.y = r17.y * r17.y; r18.w = r16.w * r8.w + r11.w; r19.xyz = r17.yyy * r15.xyz; r19.xyz = r19.xyz * r8.www; r18.xyz = r18.xyz * r18.www + r19.xyz; r19.x = r18.w * r17.y; r19.y = (int)r17.x; r19.z = (int)r19.y == 9; r19.w = r17.x == 0.000000; r19.w = r19.w ? r6.y : 1.000000000e+000; r19.z = r19.z ? r14.x : r19.w; r19.w = r17.w / r13.y; r19.w = -5.000000000e-001 + r19.w; r19.w = saturate(r19.w + r19.w); r19.z = r19.z * r19.w; r19.x = r19.x * r17.z; r15.w = r19.x * r19.z + r15.w; r20.xyz = r18.xyz * r17.zzz; r14.yzw = r20.xyz * r19.zzz + r14.yzw; r16.x = r17.z * r19.z + r16.x; r17.y = r17.y * r18.w + -1.000000000e+000; r16.w = r19.z * r17.y + 1.000000000e+000; r15.xyz = r19.zzz * r18.xyz; r17.y = (int)r19.y + 1; r17.x = r17.y; r16.yz = r17.zw; } } else { r14.yzw = float3(0.000000e+000,0.000000e+000,0.000000e+000); r15.w = 0.000000000e+000; r16.x = 0.000000000e+000; } r8.w = min(-r5.w, 0.000000000e+000); r8.w = 9.000000000e+000 + r8.w; r1.y = r8.w * r1.y; r1.y = exp2(r1.y); r1.y = min(r1.y, 1.000000000e+000); r8.w = max(r16.x, 1.000000047e-003); r8.w = 1.000000e+000 / r8.w; r9.x = r15.w * r8.w; r8.w = -r15.w * r8.w + 2.500000000e-001; r8.w = r1.y * r8.w + r9.x; r9.x = r9.y + -r8.w; r9.x = saturate(r9.z * r9.x + r8.w); r8.w = 1.000000000e+000 + -r9.z; r1.y = r8.w * r1.y; r11.yzw = float3(4.882813e-004,4.882813e-004,4.882813e-004) * r4.xyz; r12.xyz = float3(4.882813e-004,4.882813e-004,4.882813e-004) * r5.xyz; r13.xyzw = t0.SampleGrad(s7_s_s, r8.yz, r11.zwzz, r12.yzyy).xyzw; r15.xyzw = t0.SampleGrad(s7_s_s, r8.zx, r11.wyww, r12.zxzz).xyzw; r12.xyzw = t0.SampleGrad(s7_s_s, r8.xy, r11.yzyy, r12.xyxx).xyzw; r13.xyzw = r13.zxyw * float4(2.048000e+003,2.560000e+002,2.560000e+002,2.048000e+003) + float4(0.000000e+000,-1.285020e+002,-1.285020e+002,0.000000e+000); r15.xyzw = r15.xyzw * float4(2.560000e+002,2.560000e+002,2.048000e+003,2.048000e+003) + float4(-1.285020e+002,-1.285020e+002,0.000000e+000,0.000000e+000); r12.xyzw = r12.xyzw * float4(2.560000e+002,2.560000e+002,2.048000e+003,2.048000e+003) + float4(-1.285020e+002,-1.285020e+002,0.000000e+000,0.000000e+000); r11.yzw = float3(3.125000e-002,3.125000e-002,3.125000e-002) * r4.xyz; r16.xyz = float3(3.125000e-002,3.125000e-002,3.125000e-002) * r5.xyz; r17.xyz = float3(6.400000e+001,6.400000e+001,6.400000e+001) * r8.xyz; r18.xyzw = t1.SampleGrad(s8_s_s, r17.yz, r11.zwzz, r16.yzyy).xyzw; r19.xyzw = t1.SampleGrad(s8_s_s, r17.zx, r11.wyww, r16.zxzz).xyzw; r16.xyzw = t1.SampleGrad(s8_s_s, r17.xy, r11.yzyy, r16.xyxx).xyzw; r17.yz = r13.yz; r17.xw = float2(0.000000e+000,0.000000e+000); r17.xyzw = r18.zxyw * float4(3.200000e+001,2.560000e+002,2.560000e+002,3.200000e+001) + r17.xyzw; r13.y = -1.285019684e+002; r13.xyzw = r13.xyyw + r17.xyzw; r17.zw = r15.yx; r17.xy = float2(0.000000e+000,0.000000e+000); r17.xyzw = r19.zwyx * float4(3.200000e+001,3.200000e+001,2.560000e+002,2.560000e+002) + r17.xyzw; r15.x = -1.285019684e+002; r15.xyzw = r15.zwxx + r17.xyzw; r17.zw = r12.xy; r17.xy = float2(0.000000e+000,0.000000e+000); r16.xyzw = r16.zwxy * float4(3.200000e+001,3.200000e+001,2.560000e+002,2.560000e+002) + r17.xyzw; r12.x = -1.285019684e+002; r12.xyzw = r12.zwxx + r16.xyzw; r15.xyzw = r15.zxwy * r7.yyyy; r11.yzw = r13.xwx * r7.xxx + r15.ywy; r16.xy = r12.zw * r7.zz; r11.yzw = r12.xyx * r7.zzz + r11.yzw; r13.x = 0.000000000e+000; r15.y = 0.000000000e+000; r12.xyz = r13.xyz * r7.xxx + r15.xyz; r16.z = 0.000000000e+000; r12.xyz = r16.xyz + r12.xyz; r12.xyz = float3(4.807692e-004,4.807692e-004,4.807692e-004) * r12.xyz; r8.w = cb0[40].y < r2.y; r13.xy = cb0[40].yz; r13.zw = cb0[43].yz; r13.xy = r8.ww ? r13.xy : cb0[40].xy; r13.zw = r8.ww ? r13.zw : cb0[43].xy; r8.w = r13.y < r2.y; r15.xy = r8.ww ? cb0[40].zw : r13.xy; r15.zw = r8.ww ? cb0[43].zw : r13.zw; r13.xy = r15.yw + -r15.xz; r8.w = -r15.x + r2.y; r9.z = 1.000000e+000 / r13.x; r8.w = saturate(r9.z * r8.w); r9.z = r8.w * -2.000000000e+000 + 3.000000000e+000; r8.w = r8.w * r8.w; r8.w = r9.z * r8.w; r8.w = r8.w * r13.y + r15.z; r9.z = r10.w * r8.w; r10.w = 4.807692312e-004 * r11.y; r11.yz = r11.zw * float2(4.807692e-004,-4.807692e-004) + float2(-5.000000e-001,5.000000e-001); r8.w = r8.w * r11.y + r10.y; r9.z = 2.080000000e+003 * r9.z; r10.x = max(r10.x, 9.999999747e-005); r10.x = 1.000000e+000 / r10.x; r10.w = r7.w * r11.z + r10.w; r10.y = r10.w + r10.y; r10.y = -5.000000000e-001 + r10.y; r10.y = r10.y * r10.x + 5.000000000e-001; r11.yzw = r12.xyz * r10.xxx; r9.y = saturate(r8.w * r10.x + 5.000000000e-001); r8.w = r7.w * 2.414212942e+000 + r10.z; r10.x = r10.y * 2.000000000e+000 + -1.000000000e+000; r10.y = r8.w * 2.000000000e+000 + 1.000000000e+000; r10.y = sqrt(r10.y); r10.x = r10.y + -abs(r10.x); r10.x = max(r10.x, 0.000000000e+000); r8.w = r8.w * r8.w; r8.w = r10.x * r10.x + r8.w; r8.w = sqrt(r8.w); r8.w = max(r8.w, 1.000000047e-003); r8.w = r10.x / r8.w; r10.x = 1.000000000e+000 + -r8.w; r8.w = r9.w * r10.x + r8.w; r10.xyz = r11.yzw * r8.www; r10.xyz = r10.xyz * r9.zzz; r10.xyz = r14.yzw * r11.xxx + r10.xyz; r8.w = -5.000000000e-001 + cb0[28].w; r9.z = -5.000000000e-001 + cb0[46].w; r11.x = r8.w * r1.y; r11.y = r9.z * r4.w; r9.xy = r11.xy + r9.xy; r11.x = cb0[28].z * r1.y; r11.y = cb0[46].z * r4.w; r9.zw = r9.xy + r9.xy; r11.zw = float2(1.000000e+000,1.000000e+000) + -r9.xy; r11.zw = r11.zw + r11.zw; r9.zw = min(r9.zw, r11.zw); r11.xy = min(r11.xy, r9.zw); r11.z = 0.000000000e+000; r12.xyzw = t2.SampleGrad(s1_s_s, r9.xy, r11.xzxx, r11.zyzz).xyzw; r9.xyzw = t3.SampleGrad(s2_s_s, r9.xy, r11.xzxx, r11.zyzz).xyzw; r11.xyz = log2(r12.xyz); r11.xyz = float3(2.200000e+000,2.200000e+000,2.200000e+000) * r11.xyz; r11.xyz = exp2(r11.xyz); r9.xyz = log2(r9.xyz); r9.xyz = float3(2.200000e+000,2.200000e+000,2.200000e+000) * r9.xyz; r9.xyz = exp2(r9.xyz); r1.y = cb0[64].y + -cb0[64].x; r1.y = r9.w * r1.y + cb0[64].x; r11.xyz = cb0[2].xxx * r11.xyz; } else { r9.xyz = float3(0.000000e+000,0.000000e+000,0.000000e+000); r10.xyz = float3(0.000000e+000,0.000000e+000,0.000000e+000); r11.xyz = float3(0.000000e+000,0.000000e+000,0.000000e+000); r1.y = 0.000000000e+000; } r12.xy = float2(1.000000e-003,1.000000e-003) < v5.zw; if (r12.x != 0) { r12.xzw = -cb0[35].xzy + cb0[32].xzy; r1.z = v5.x; r13.xy = -cb0[35].xz + r1.xz; r12.xz = float2(1.000000e+000,1.000000e+000) / r12.xz; r12.xz = saturate(r13.xy * r12.xz); r13.xy = r12.xz * float2(-2.000000e+000,-2.000000e+000) + float2(3.000000e+000,3.000000e+000); r12.xz = r12.xz * r12.xz; r13.xz = r13.xy * r12.xz; r1.z = 8.000000000e+001 * abs(r12.w); r1.z = r2.y / r1.z; r1.z = max(r1.z, 1.000000000e+000); r8.w = cb0[35].y * r1.z; r8.w = cb0[32].y * r1.z + -r8.w; r1.z = -cb0[35].y * r1.z + r2.x; r8.w = 1.000000e+000 / r8.w; r1.z = saturate(r8.w * r1.z); r8.w = r1.z * -2.000000000e+000 + 3.000000000e+000; r1.z = r1.z * r1.z; r13.y = r8.w * r1.z; r1.z = dot(float3(1.000000e+000,1.000000e+000,1.000000e+000), r13.xyz); r1.z = max(r1.z, 1.000000000e+000); r12.xzw = r13.xyz / r1.zzz; r13.xyzw = cb0[56].xyzw * r12.wwww + cb0[50].xyzw; r13.xyzw = cb0[53].xyzw * r12.zzzz + r13.xyzw; r13.xyzw = cb0[59].xyzw * r12.xxxx + r13.xyzw; r14.xyzw = cb0[11].xyzw * r12.wwww + cb0[5].xyzw; r14.xyzw = cb0[8].xyzw * r12.zzzz + r14.xyzw; r14.xyzw = cb0[14].xyzw * r12.xxxx + r14.xyzw; r15.xyzw = cb0[23].xyzw * r12.wwww + cb0[17].xyzw; r15.xyzw = cb0[20].xyzw * r12.zzzz + r15.xyzw; r15.xyzw = cb0[26].xyzw * r12.xxxx + r15.xyzw; r1.z = log2(r14.y); if (r6.w != 0) { r8.w = 1.000000000e+000 + -r14.w; r9.w = 5.000000000e-001 + r14.z; r9.w = frac(r9.w); r9.w = -5.000000000e-001 + r9.w; r9.w = 5.000000000e-001 + abs(r9.w); r9.w = 1.000000e+000 / r9.w; r12.xz = r14.zz * float2(5.000000e-001,5.000000e-001) + float2(-5.000000e-001,2.500000e-001); r10.w = abs(r12.x) * -2.000000000e+000 + 5.000000000e-001; r10.w = max(r10.w, 0.000000000e+000); r10.w = -r10.w * r9.w; r11.w = max(r15.x, 1.000000012e-007); r12.x = r11.w * 2.000000000e+000 + 1.000000000e+000; r12.w = r11.w * r11.w + r12.x; r11.w = 1.000000000e+000 + r11.w; r14.z = r1.z * -r6.x; r14.z = exp2(r14.z); r15.x = r2.z + r2.w; r15.x = sqrt(r15.x); r14.z = r14.z / r14.y; r16.x = r6.z + r6.z; r16.y = 5.000000000e-001 * r15.x; r16.z = 1.000000000e+000 + -r6.y; r17.xyz = float3(0.000000e+000,0.000000e+000,0.000000e+000); r18.xyz = float3(0.000000e+000,0.000000e+000,0.000000e+000); r16.w = 0.000000000e+000; r17.w = r14.z; r18.w = r16.x; r19.xyz = float3(0.000000e+000,1.000000e+000,0.000000e+000); while (true) { r19.w = (uint)r19.z; r20.x = (uint)r19.w >= (uint)10; if (r20.x != 0) { break; } r20.x = r17.w * r14.y; r20.y = 5.000000000e-001 * r18.w; r20.z = 2.000000000e+000 < r18.w; if (r20.z != 0) { r20.z = (int)r19.z; r20.z = (int)r20.z + 1; r20.z = r20.z; r17.w = r20.x; r18.w = r20.y; r19.z = r20.z; continue; } r20.z = r16.y >= r20.y; if (r20.z != 0) { break; } r20.z = x0[r19.w+0].w; r21.xyz = x0[r19.w+0].xyz; r19.w = r20.z * 5.000000000e-001 + r12.z; r19.w = frac(r19.w); r19.w = r19.w * 2.000000000e+000 + -1.000000000e+000; r21.xyz = r21.xyz * r9.www; r20.z = 0.000000000e+000 < r19.w; r20.w = r19.w < 0.000000000e+000; r20.w = r20.w ? 1 : 0; r20.z = ((int)r20.w ? -1 : 0) + ((int)r20.z ? 1 : 0); r20.z = r20.z; r21.xyz = r21.xyz * r20.zzz; r19.w = abs(r19.w) * r9.w + r10.w; r20.z = r19.w * r12.x; r20.z = r12.x * -2.000000000e+000 + r20.z; r20.z = r20.z * r19.w + r12.w; r20.z = sqrt(r20.z); r19.w = -r12.x * r19.w + r12.x; r19.w = r19.w / r20.z; r21.xyz = r21.xyz * r19.www; r19.w = -r20.z + r11.w; r20.z = r19.w + r19.w; r21.xyz = r20.zzz * r21.xyz; r19.w = r19.w * r19.w; r20.z = r19.y * r8.w + r14.w; r22.xyz = r19.www * r18.xyz; r22.xyz = r22.xyz * r8.www; r21.xyz = r21.xyz * r20.zzz + r22.xyz; r20.w = r20.z * r19.w; r21.w = (int)r19.z; r22.x = (int)r21.w == 9; r22.y = r19.z == 0.000000; r22.y = r22.y ? r6.y : 1.000000000e+000; r22.x = r22.x ? r16.z : r22.y; r22.y = r20.y / r15.x; r22.y = -5.000000000e-001 + r22.y; r22.y = saturate(r22.y + r22.y); r22.x = r22.x * r22.y; r20.w = r20.w * r20.x; r16.w = r20.w * r22.x + r16.w; r22.yzw = r21.xyz * r20.xxx; r17.xyz = r22.yzw * r22.xxx + r17.xyz; r19.x = r20.x * r22.x + r19.x; r19.w = r19.w * r20.z + -1.000000000e+000; r19.y = r22.x * r19.w + 1.000000000e+000; r18.xyz = r22.xxx * r21.xyz; r19.w = (int)r21.w + 1; r19.z = r19.w; r17.w = r20.x; r18.w = r20.y; } } else { r17.xyz = float3(0.000000e+000,0.000000e+000,0.000000e+000); r16.w = 0.000000000e+000; r19.x = 0.000000000e+000; } r8.w = min(-r5.w, 0.000000000e+000); r8.w = 9.000000000e+000 + r8.w; r1.z = r8.w * r1.z; r1.z = exp2(r1.z); r1.z = min(r1.z, 1.000000000e+000); r8.w = max(r19.x, 1.000000047e-003); r8.w = 1.000000e+000 / r8.w; r9.w = r16.w * r8.w; r8.w = -r16.w * r8.w + 2.500000000e-001; r8.w = r1.z * r8.w + r9.w; r9.w = r15.y + -r8.w; r15.x = saturate(r15.z * r9.w + r8.w); r8.w = 1.000000000e+000 + -r15.z; r1.z = r8.w * r1.z; r12.xzw = float3(4.882813e-004,4.882813e-004,4.882813e-004) * r4.xyz; r14.yzw = float3(4.882813e-004,4.882813e-004,4.882813e-004) * r5.xyz; r16.xyzw = t4.SampleGrad(s9_s_s, r8.yz, r12.zwzz, r14.zwzz).xyzw; r18.xyzw = t4.SampleGrad(s9_s_s, r8.zx, r12.wxww, r14.wyww).xyzw; r19.xyzw = t4.SampleGrad(s9_s_s, r8.xy, r12.xzxx, r14.yzyy).xyzw; r16.xyzw = r16.zxyw * float4(2.048000e+003,2.560000e+002,2.560000e+002,2.048000e+003) + float4(0.000000e+000,-1.285020e+002,-1.285020e+002,0.000000e+000); r18.xyzw = r18.xyzw * float4(2.560000e+002,2.560000e+002,2.048000e+003,2.048000e+003) + float4(-1.285020e+002,-1.285020e+002,0.000000e+000,0.000000e+000); r19.xyzw = r19.xyzw * float4(2.560000e+002,2.560000e+002,2.048000e+003,2.048000e+003) + float4(-1.285020e+002,-1.285020e+002,0.000000e+000,0.000000e+000); r12.xzw = float3(3.125000e-002,3.125000e-002,3.125000e-002) * r4.xyz; r14.yzw = float3(3.125000e-002,3.125000e-002,3.125000e-002) * r5.xyz; r20.xyz = float3(6.400000e+001,6.400000e+001,6.400000e+001) * r8.xyz; r21.xyzw = t5.SampleGrad(s10_s_s, r20.yz, r12.zwzz, r14.zwzz).xyzw; r22.xyzw = t5.SampleGrad(s10_s_s, r20.zx, r12.wxww, r14.wyww).xyzw; r20.xyzw = t5.SampleGrad(s10_s_s, r20.xy, r12.xzxx, r14.yzyy).xyzw; r23.yz = r16.yz; r23.xw = float2(0.000000e+000,0.000000e+000); r21.xyzw = r21.zxyw * float4(3.200000e+001,2.560000e+002,2.560000e+002,3.200000e+001) + r23.xyzw; r16.y = -1.285019684e+002; r16.xyzw = r16.xyyw + r21.xyzw; r21.zw = r18.yx; r21.xy = float2(0.000000e+000,0.000000e+000); r21.xyzw = r22.zwyx * float4(3.200000e+001,3.200000e+001,2.560000e+002,2.560000e+002) + r21.xyzw; r18.x = -1.285019684e+002; r18.xyzw = r18.zwxx + r21.xyzw; r21.zw = r19.xy; r21.xy = float2(0.000000e+000,0.000000e+000); r20.xyzw = r20.zwxy * float4(3.200000e+001,3.200000e+001,2.560000e+002,2.560000e+002) + r21.xyzw; r19.x = -1.285019684e+002; r19.xyzw = r19.zwxx + r20.xyzw; r18.xyzw = r18.zxwy * r7.yyyy; r12.xzw = r16.xwx * r7.xxx + r18.ywy; r20.xy = r19.zw * r7.zz; r12.xzw = r19.xyx * r7.zzz + r12.xzw; r16.x = 0.000000000e+000; r18.y = 0.000000000e+000; r14.yzw = r16.xyz * r7.xxx + r18.xyz; r20.z = 0.000000000e+000; r14.yzw = r20.xyz + r14.yzw; r14.yzw = float3(4.807692e-004,4.807692e-004,4.807692e-004) * r14.yzw; r8.w = cb0[41].y < r2.y; r16.xy = cb0[41].yz; r16.zw = cb0[44].yz; r16.xy = r8.ww ? r16.xy : cb0[41].xy; r16.zw = r8.ww ? r16.zw : cb0[44].xy; r8.w = r16.y < r2.y; r18.xy = r8.ww ? cb0[41].zw : r16.xy; r18.zw = r8.ww ? cb0[44].zw : r16.zw; r16.xy = r18.yw + -r18.xz; r8.w = -r18.x + r2.y; r9.w = 1.000000e+000 / r16.x; r8.w = saturate(r9.w * r8.w); r9.w = r8.w * -2.000000000e+000 + 3.000000000e+000; r8.w = r8.w * r8.w; r8.w = r9.w * r8.w; r8.w = r8.w * r16.y + r18.z; r9.w = r13.w * r8.w; r10.w = 4.807692312e-004 * r12.x; r12.xz = r12.zw * float2(4.807692e-004,-4.807692e-004) + float2(-5.000000e-001,5.000000e-001); r8.w = r8.w * r12.x + r13.y; r9.w = 2.080000000e+003 * r9.w; r11.w = max(r13.x, 9.999999747e-005); r11.w = 1.000000e+000 / r11.w; r10.w = r7.w * r12.z + r10.w; r10.w = r10.w + r13.y; r10.w = -5.000000000e-001 + r10.w; r10.w = r10.w * r11.w + 5.000000000e-001; r12.xzw = r14.yzw * r11.www; r15.y = saturate(r8.w * r11.w + 5.000000000e-001); r8.w = r7.w * 2.414212942e+000 + r13.z; r10.w = r10.w * 2.000000000e+000 + -1.000000000e+000; r11.w = r8.w * 2.000000000e+000 + 1.000000000e+000; r11.w = sqrt(r11.w); r10.w = r11.w + -abs(r10.w); r10.w = max(r10.w, 0.000000000e+000); r8.w = r8.w * r8.w; r8.w = r10.w * r10.w + r8.w; r8.w = sqrt(r8.w); r8.w = max(r8.w, 1.000000047e-003); r8.w = r10.w / r8.w; r10.w = 1.000000000e+000 + -r8.w; r8.w = r15.w * r10.w + r8.w; r12.xzw = r12.xzw * r8.www; r12.xzw = r12.xzw * r9.www; r12.xzw = r17.xyz * r14.xxx + r12.xzw; r8.w = -5.000000000e-001 + cb0[29].w; r9.w = -5.000000000e-001 + cb0[47].w; r13.x = r8.w * r1.z; r13.y = r9.w * r4.w; r13.xy = r13.xy + r15.xy; r14.x = cb0[29].z * r1.z; r14.y = cb0[47].z * r4.w; r13.zw = r13.xy + r13.xy; r14.zw = float2(1.000000e+000,1.000000e+000) + -r13.xy; r14.zw = r14.zw + r14.zw; r13.zw = min(r13.zw, r14.zw); r14.xy = min(r14.xy, r13.zw); r14.z = 0.000000000e+000; r15.xyzw = t6.SampleGrad(s3_s_s, r13.xy, r14.xzxx, r14.zyzz).xyzw; r13.xyzw = t7.SampleGrad(s4_s_s, r13.xy, r14.xzxx, r14.zyzz).xyzw; r14.xyz = log2(r15.xyz); r14.xyz = float3(2.200000e+000,2.200000e+000,2.200000e+000) * r14.xyz; r14.xyz = exp2(r14.xyz); r13.xyz = log2(r13.xyz); r13.xyz = float3(2.200000e+000,2.200000e+000,2.200000e+000) * r13.xyz; r13.xyz = exp2(r13.xyz); r1.z = cb0[65].y + -cb0[65].x; r1.z = r13.w * r1.z + cb0[65].x; r14.xyz = cb0[2].yyy * r14.xyz; } else { r12.xzw = float3(0.000000e+000,0.000000e+000,0.000000e+000); r13.xyz = float3(0.000000e+000,0.000000e+000,0.000000e+000); r14.xyz = float3(0.000000e+000,0.000000e+000,0.000000e+000); r1.z = 0.000000000e+000; } if (r12.y != 0) { r15.xyz = -cb0[36].xzy + cb0[33].xzy; r1.w = v5.x; r1.xw = -cb0[36].xz + r1.xw; r15.xy = float2(1.000000e+000,1.000000e+000) / r15.xy; r1.xw = saturate(r15.xy * r1.xw); r15.xy = r1.xw * float2(-2.000000e+000,-2.000000e+000) + float2(3.000000e+000,3.000000e+000); r1.xw = r1.xw * r1.xw; r16.xz = r15.xy * r1.xw; r1.x = 8.000000000e+001 * abs(r15.z); r1.x = r2.y / r1.x; r1.x = max(r1.x, 1.000000000e+000); r1.w = cb0[36].y * r1.x; r1.w = cb0[33].y * r1.x + -r1.w; r1.x = -cb0[36].y * r1.x + r2.x; r1.w = 1.000000e+000 / r1.w; r1.x = saturate(r1.x * r1.w); r1.w = r1.x * -2.000000000e+000 + 3.000000000e+000; r1.x = r1.x * r1.x; r16.y = r1.w * r1.x; r1.x = dot(float3(1.000000e+000,1.000000e+000,1.000000e+000), r16.xyz); r1.x = max(r1.x, 1.000000000e+000); r15.xyz = r16.xyz / r1.xxx; r16.xyzw = cb0[57].xyzw * r15.zzzz + cb0[51].xyzw; r16.xyzw = cb0[54].xyzw * r15.yyyy + r16.xyzw; r16.xyzw = cb0[60].xyzw * r15.xxxx + r16.xyzw; r17.xyzw = cb0[12].xyzw * r15.zzzz + cb0[6].xyzw; r17.xyzw = cb0[9].xyzw * r15.yyyy + r17.xyzw; r17.xyzw = cb0[15].xyzw * r15.xxxx + r17.xyzw; r18.xyzw = cb0[24].xyzw * r15.zzzz + cb0[18].xyzw; r18.xyzw = cb0[21].xyzw * r15.yyyy + r18.xyzw; r15.xyzw = cb0[27].xyzw * r15.xxxx + r18.xyzw; r1.x = log2(r17.y); if (r6.w != 0) { r1.w = 1.000000000e+000 + -r17.w; r2.x = 5.000000000e-001 + r17.z; r2.x = frac(r2.x); r2.x = -5.000000000e-001 + r2.x; r2.x = 5.000000000e-001 + abs(r2.x); r2.x = 1.000000e+000 / r2.x; r18.xy = r17.zz * float2(5.000000e-001,5.000000e-001) + float2(-5.000000e-001,2.500000e-001); r6.w = abs(r18.x) * -2.000000000e+000 + 5.000000000e-001; r6.w = max(r6.w, 0.000000000e+000); r6.w = -r6.w * r2.x; r8.w = max(r15.x, 1.000000012e-007); r9.w = r8.w * 2.000000000e+000 + 1.000000000e+000; r10.w = r8.w * r8.w + r9.w; r8.w = 1.000000000e+000 + r8.w; r6.x = r1.x * -r6.x; r6.x = exp2(r6.x); r2.z = r2.z + r2.w; r2.z = sqrt(r2.z); r2.w = r6.x / r17.y; r6.x = r6.z + r6.z; r6.z = 5.000000000e-001 * r2.z; r11.w = 1.000000000e+000 + -r6.y; r18.xzw = float3(0.000000e+000,0.000000e+000,0.000000e+000); r19.xyz = float3(0.000000e+000,0.000000e+000,0.000000e+000); r12.y = 0.000000000e+000; r13.w = 0.000000000e+000; r14.w = 1.000000000e+000; r15.x = 0.000000000e+000; r17.z = r2.w; r19.w = r6.x; while (true) { r20.x = (uint)r15.x; r20.y = (uint)r20.x >= (uint)10; if (r20.y != 0) { break; } r20.y = r17.z * r17.y; r20.z = 5.000000000e-001 * r19.w; r20.w = 2.000000000e+000 < r19.w; if (r20.w != 0) { r20.w = (int)r15.x; r20.w = (int)r20.w + 1; r20.w = r20.w; r17.z = r20.y; r19.w = r20.z; r15.x = r20.w; continue; } r20.w = r6.z >= r20.z; if (r20.w != 0) { break; } r20.w = x0[r20.x+0].w; r21.xyz = x0[r20.x+0].xyz; r20.x = r20.w * 5.000000000e-001 + r18.y; r20.x = frac(r20.x); r20.x = r20.x * 2.000000000e+000 + -1.000000000e+000; r21.xyz = r21.xyz * r2.xxx; r20.w = 0.000000000e+000 < r20.x; r21.w = r20.x < 0.000000000e+000; r21.w = r21.w ? 1 : 0; r20.w = ((int)r20.w ? -1 : 0) + ((int)r21.w ? 1 : 0); r20.w = r20.w; r21.xyz = r21.xyz * r20.www; r20.x = abs(r20.x) * r2.x + r6.w; r20.w = r20.x * r9.w; r20.w = r9.w * -2.000000000e+000 + r20.w; r20.w = r20.w * r20.x + r10.w; r20.w = sqrt(r20.w); r20.x = -r9.w * r20.x + r9.w; r20.x = r20.x / r20.w; r21.xyz = r21.xyz * r20.xxx; r20.x = -r20.w + r8.w; r20.w = r20.x + r20.x; r21.xyz = r20.www * r21.xyz; r20.x = r20.x * r20.x; r20.w = r14.w * r1.w + r17.w; r22.xyz = r20.xxx * r19.xyz; r22.xyz = r22.xyz * r1.www; r21.xyz = r21.xyz * r20.www + r22.xyz; r21.w = r20.w * r20.x; r22.x = (int)r15.x; r22.y = (int)r22.x == 9; r22.z = r15.x == 0.000000; r22.z = r22.z ? r6.y : 1.000000000e+000; r22.y = r22.y ? r11.w : r22.z; r22.z = r20.z / r2.z; r22.z = -5.000000000e-001 + r22.z; r22.z = saturate(r22.z + r22.z); r22.y = r22.z * r22.y; r21.w = r21.w * r20.y; r12.y = r21.w * r22.y + r12.y; r23.xyz = r21.xyz * r20.yyy; r18.xzw = r23.xyz * r22.yyy + r18.xzw; r13.w = r20.y * r22.y + r13.w; r20.x = r20.w * r20.x + -1.000000000e+000; r14.w = r22.y * r20.x + 1.000000000e+000; r19.xyz = r22.yyy * r21.xyz; r20.x = (int)r22.x + 1; r15.x = r20.x; r17.z = r20.y; r19.w = r20.z; } } else { r18.xzw = float3(0.000000e+000,0.000000e+000,0.000000e+000); r12.y = 0.000000000e+000; r13.w = 0.000000000e+000; } r1.w = min(-r5.w, 0.000000000e+000); r1.w = 9.000000000e+000 + r1.w; r1.x = r1.w * r1.x; r1.x = exp2(r1.x); r1.x = min(r1.x, 1.000000000e+000); r1.w = max(r13.w, 1.000000047e-003); r1.w = 1.000000e+000 / r1.w; r2.x = r12.y * r1.w; r1.w = -r12.y * r1.w + 2.500000000e-001; r1.w = r1.x * r1.w + r2.x; r2.x = r15.y + -r1.w; r6.x = saturate(r15.z * r2.x + r1.w); r1.w = 1.000000000e+000 + -r15.z; r1.x = r1.x * r1.w; r2.xzw = float3(4.882813e-004,4.882813e-004,4.882813e-004) * r4.xyz; r15.xyz = float3(4.882813e-004,4.882813e-004,4.882813e-004) * r5.xyz; r19.xyzw = t8.SampleGrad(s11_s_s, r8.yz, r2.zwzz, r15.yzyy).xyzw; r20.xyzw = t8.SampleGrad(s11_s_s, r8.zx, r2.wxww, r15.zxzz).xyzw; r21.xyzw = t8.SampleGrad(s11_s_s, r8.xy, r2.xzxx, r15.xyxx).xyzw; r19.xyzw = r19.zxyw * float4(2.048000e+003,2.560000e+002,2.560000e+002,2.048000e+003) + float4(0.000000e+000,-1.285020e+002,-1.285020e+002,0.000000e+000); r20.xyzw = r20.xyzw * float4(2.560000e+002,2.560000e+002,2.048000e+003,2.048000e+003) + float4(-1.285020e+002,-1.285020e+002,0.000000e+000,0.000000e+000); r21.xyzw = r21.xyzw * float4(2.560000e+002,2.560000e+002,2.048000e+003,2.048000e+003) + float4(-1.285020e+002,-1.285020e+002,0.000000e+000,0.000000e+000); r2.xzw = float3(3.125000e-002,3.125000e-002,3.125000e-002) * r4.xyz; r4.xyz = float3(3.125000e-002,3.125000e-002,3.125000e-002) * r5.xyz; r5.xyz = float3(6.400000e+001,6.400000e+001,6.400000e+001) * r8.xyz; r8.xyzw = t9.SampleGrad(s12_s_s, r5.yz, r2.zwzz, r4.yzyy).xyzw; r22.xyzw = t9.SampleGrad(s12_s_s, r5.zx, r2.wxww, r4.zxzz).xyzw; r5.xyzw = t9.SampleGrad(s12_s_s, r5.xy, r2.xzxx, r4.xyxx).xyzw; r23.yz = r19.yz; r23.xw = float2(0.000000e+000,0.000000e+000); r8.xyzw = r8.zxyw * float4(3.200000e+001,2.560000e+002,2.560000e+002,3.200000e+001) + r23.xyzw; r19.y = -1.285019684e+002; r8.xyzw = r19.xyyw + r8.xyzw; r19.zw = r20.yx; r19.xy = float2(0.000000e+000,0.000000e+000); r19.xyzw = r22.zwyx * float4(3.200000e+001,3.200000e+001,2.560000e+002,2.560000e+002) + r19.xyzw; r20.x = -1.285019684e+002; r19.xyzw = r20.zwxx + r19.xyzw; r20.zw = r21.xy; r20.xy = float2(0.000000e+000,0.000000e+000); r5.xyzw = r5.zwxy * float4(3.200000e+001,3.200000e+001,2.560000e+002,2.560000e+002) + r20.xyzw; r21.x = -1.285019684e+002; r5.xyzw = r21.zwxx + r5.xyzw; r19.xyzw = r19.zxwy * r7.yyyy; r2.xzw = r8.xwx * r7.xxx + r19.ywy; r4.xy = r5.zw * r7.zz; r2.xzw = r5.xyx * r7.zzz + r2.xzw; r8.x = 0.000000000e+000; r19.y = 0.000000000e+000; r5.xyz = r8.xyz * r7.xxx + r19.xyz; r4.z = 0.000000000e+000; r4.xyz = r4.xyz + r5.xyz; r4.xyz = float3(4.807692e-004,4.807692e-004,4.807692e-004) * r4.xyz; r1.w = cb0[42].y < r2.y; r5.xy = cb0[45].yz; r5.zw = cb0[42].yz; r5.xy = r1.ww ? r5.xy : cb0[45].xy; r5.zw = r1.ww ? r5.zw : cb0[42].xy; r1.w = r5.w < r2.y; r8.xy = r1.ww ? cb0[45].zw : r5.xy; r8.zw = r1.ww ? cb0[42].zw : r5.zw; r5.xy = r8.wy + -r8.zx; r1.w = -r8.z + r2.y; r2.y = 1.000000e+000 / r5.x; r1.w = saturate(r2.y * r1.w); r2.y = r1.w * -2.000000000e+000 + 3.000000000e+000; r1.w = r1.w * r1.w; r1.w = r2.y * r1.w; r1.w = r1.w * r5.y + r8.x; r2.y = r16.w * r1.w; r2.zw = r2.zw * float2(4.807692e-004,-4.807692e-004) + float2(-5.000000e-001,5.000000e-001); r1.w = r1.w * r2.z + r16.y; r2.xy = float2(4.807692e-004,2.080000e+003) * r2.xy; r2.z = max(r16.x, 9.999999747e-005); r2.z = 1.000000e+000 / r2.z; r2.x = r7.w * r2.w + r2.x; r2.x = r2.x + r16.y; r2.x = -5.000000000e-001 + r2.x; r2.x = r2.x * r2.z + 5.000000000e-001; r4.xyz = r2.zzz * r4.xyz; r6.y = saturate(r1.w * r2.z + 5.000000000e-001); r1.w = r7.w * 2.414212942e+000 + r16.z; r2.x = r2.x * 2.000000000e+000 + -1.000000000e+000; r2.z = r1.w * 2.000000000e+000 + 1.000000000e+000; r2.z = sqrt(r2.z); r2.x = r2.z + -abs(r2.x); r2.x = max(r2.x, 0.000000000e+000); r1.w = r1.w * r1.w; r1.w = r2.x * r2.x + r1.w; r1.w = sqrt(r1.w); r1.w = max(r1.w, 1.000000047e-003); r1.w = r2.x / r1.w; r2.x = 1.000000000e+000 + -r1.w; r1.w = r15.w * r2.x + r1.w; r2.xzw = r4.xyz * r1.www; r2.xyz = r2.xzw * r2.yyy; r2.xyz = r18.xzw * r17.xxx + r2.xyz; r1.w = -5.000000000e-001 + cb0[30].w; r2.w = -5.000000000e-001 + cb0[48].w; r4.x = r1.x * r1.w; r4.y = r4.w * r2.w; r4.xy = r4.xy + r6.xy; r5.x = cb0[30].z * r1.x; r5.y = cb0[48].z * r4.w; r1.xw = r4.xy + r4.xy; r4.zw = float2(1.000000e+000,1.000000e+000) + -r4.xy; r4.zw = r4.zw + r4.zw; r1.xw = min(r1.xw, r4.zw); r5.xy = min(r5.xy, r1.xw); r5.z = 0.000000000e+000; r6.xyzw = t10.SampleGrad(s5_s_s, r4.xy, r5.xzxx, r5.zyzz).xyzw; r4.xyzw = t11.SampleGrad(s6_s_s, r4.xy, r5.xzxx, r5.zyzz).xyzw; r5.xyz = log2(r6.xyz); r5.xyz = float3(2.200000e+000,2.200000e+000,2.200000e+000) * r5.xyz; r5.xyz = exp2(r5.xyz); r4.xyz = log2(r4.xyz); r4.xyz = float3(2.200000e+000,2.200000e+000,2.200000e+000) * r4.xyz; r4.xyz = exp2(r4.xyz); r1.x = cb0[66].y + -cb0[66].x; r1.x = r4.w * r1.x + cb0[66].x; r5.xyz = cb0[2].zzz * r5.xyz; } else { r2.xyz = float3(0.000000e+000,0.000000e+000,0.000000e+000); r4.xyz = float3(0.000000e+000,0.000000e+000,0.000000e+000); r5.xyz = float3(0.000000e+000,0.000000e+000,0.000000e+000); r1.x = 0.000000000e+000; } r6.xy = saturate(v5.zw); r6.zw = r6.xy * float2(-2.000000e+000,-2.000000e+000) + float2(3.000000e+000,3.000000e+000); r6.xy = r6.xy * r6.xy; r6.xy = r6.zw * r6.xy; r7.xyz = r12.xzw + -r10.xyz; r7.xyz = r6.xxx * r7.xyz + r10.xyz; r2.xyz = -r7.xyz + r2.xyz; r2.xyz = r6.yyy * r2.xyz + r7.xyz; r1.z = r1.z + -r1.y; r1.y = r6.x * r1.z + r1.y; r1.x = r1.x + -r1.y; o1.x = r6.y * r1.x + r1.y; r1.xyz = r13.xyz + -r9.xyz; r1.xyz = r6.xxx * r1.xyz + r9.xyz; r4.xyz = r4.xyz + -r1.xyz; r1.xyz = r6.yyy * r4.xyz + r1.xyz; r4.xyz = r14.xyz + -r11.xyz; r4.xyz = r6.xxx * r4.xyz + r11.xyz; r5.xyz = r5.xyz + -r4.xyz; r4.xyz = r6.yyy * r5.xyz + r4.xyz; r5.xyz = cb0[68].xyz + -cb0[67].xyz; r5.xyz = r6.xxx * r5.xyz + cb0[67].xyz; r6.xzw = cb0[69].xyz + -r5.xyz; r5.xyz = r6.yyy * r6.xzw + r5.xyz; o4.xyz = r5.xyz * r3.xyz; r1.w = dot(r0.yzw, r2.xyz); r0.yzw = -r0.yzw * r1.www + r2.xyz; r0.xyz = v3.xyz * r0.xxx + -r0.yzw; r0.w = dot(r0.xyz, r0.xyz); r0.w = rsqrt(r0.w); r0.xyz = r0.xyz * r0.www; r2.xyzw = cb0[3].xyzw + cb0[3].xyzw; r3.xyz = cb0[3].yzx * r0.zxy; r3.xyz = r0.yzx * cb0[3].zxy + -r3.xyz; r0.w = dot(cb0[3].xyz, r0.xyz); r1.w = cb0[3].w * r2.w; r0.xyz = r1.www * r0.xyz + -r0.xyz; r0.xyz = r0.www * r2.xyz + r0.xyz; r0.xyz = r3.xyz * r2.www + r0.xyz; r0.w = log2(v6.y); r0.w = cb0[1].y * r0.w; r0.w = exp2(r0.w); r1.w = -5.000000000e-001 + v6.x; o3.w = saturate(r1.w * 3.200000000e+001 + 5.000000000e-001); r1.w = 1.000000000e+000 + -cb0[1].z; r0.w = r0.w * r1.w + cb0[1].z; o3.xyz = r1.xyz * r0.www; o2.w = 2.500000000e-001 + cb0[70].x; r1.x = log2(r3.w); r1.x = floor(r1.x); r1.x = exp2(-r1.x); r1.yzw = cb0[37].xyz * r1.xxx; r1.yzw = float3(9.765625e-004,9.765625e-004,9.765625e-004) * r1.yzw; r1.yzw = frac(r1.yzw); r1.yzw = float3(1.024000e+003,1.024000e+003,1.024000e+003) * r1.yzw; r1.yzw = r1.yzw / r1.xxx; r1.yzw = v4.xyz + -r1.yzw; r1.xyz = r1.yzw * r1.xxx; r1.xyz = floor(r1.xyz); r1.xyz = float3(3.906250e-003,3.906250e-003,3.906250e-003) * r1.xyz; r1.xyz = frac(r1.xyz); r1.x = dot(r1.xyz, float3(1.271000e+002,3.117000e+002,2.013000e+002)); r1.x = sin(r1.x); r1.x = 4.375854688e+004 * r1.x; r1.x = frac(r1.x); r1.x = -5.000000000e-001 + r1.x; r1.x = 4.882812500e-004 * r1.x; o2.xyz = r4.xyz * r0.www + r1.xxx; r0.w = max(abs(r0.y), abs(r0.z)); r0.w = max(abs(r0.x), r0.w); r1.xy = abs(r0.xy) == r0.ww; r1.xy = r1.xy ? abs(r0.zz) : abs(r0.xy); r1.xy = r1.xy / r0.ww; r1.xyzw = t12.SampleBias(s0_s_s, r1.xy, -1.000000000e+000).xyzw; r0.w = r1.x / r0.w; r0.xyz = r0.xyz * r0.www; o1.yzw = r0.xyz * float3(5.000000e-001,5.000000e-001,5.000000e-001) + float3(5.000000e-001,5.000000e-001,5.000000e-001); o0.xyzw = v1.wwww; o4.w = 1.000000000e+000; return; } [/code] vs [code]//sun lit planet surface cbuffer cb0 : register(b0) { float4 cb0[12] : packoffset(c0); } cbuffer cb1 : register(b1) { float4 cb1[12] : packoffset(c0); } Texture2D<float4> StereoParams : register(t125); Texture1D<float4> IniParams : register(t120); void main( float4 v0 : NORMAL0, float4 v1 : POSITION0, float4 v2 : POSITION6, float4 v3 : POSITION7, float4 v4 : TANGENT0, float4 v5 : TEXCOORD0, float4 v6 : TEXCOORD1, float4 v7 : TEXCOORD10, float4 v8 : TEXCOORD2, float4 v9 : TEXCOORD3, float4 v10 : TEXCOORD4, float4 v11 : TEXCOORD5, float4 v12 : TEXCOORD6, float4 v13 : TEXCOORD7, float4 v14 : TEXCOORD8, float4 v15 : TEXCOORD9, out float4 o0 : TEXCOORD0, out float4 o1 : TEXCOORD1, out float4 o2 : TEXCOORD2, out float4 o3 : TEXCOORD3, out float4 o4 : TEXCOORD4, out float4 o5 : TEXCOORD5, out float2 o6 : TEXCOORD6, out float4 o7 : SV_Position0) { float4 r0,r1,r2,r3,r4,r5,r6; uint4 bitmask, uiDest; float4 fDest; r0.xy = float2(-2.000000e-002,-2.000000e-002) + v14.yx; r0.xy = saturate(cb0[9].yy * r0.xy); r0.z = max(r0.x, r0.y); r0.w = 1.000000000e+000 + -r0.z; r0.z = cb0[10].x * r0.w + r0.z; r0.z = min(r0.z, 1.000000000e+000); r1.xy = float2(1.000000e+000,1.000000e+000) + -r0.xy; r1.xy = cb0[10].yw * r1.xy + r0.xy; r0.z = min(r0.z, r1.x); r1.xz = float2(9.800000e-001,9.800000e-001) + -v14.xy; r1.xz = saturate(cb0[9].yy * r1.xz); r0.xy = max(r0.xy, r1.xz); r2.xy = float2(1.000000e+000,1.000000e+000) + -r0.xy; r0.x = cb0[10].z * r2.x + r0.x; r0.y = cb0[11].y * r2.y + r0.y; r0.x = min(r0.z, r0.x); r0.x = min(r0.x, r1.y); r0.zw = float2(1.000000e+000,1.000000e+000) + -r1.xz; r0.zw = cb0[11].xz * r0.zw + r1.xz; r1.x = max(r1.z, r1.x); r0.x = min(r0.x, r0.z); r0.x = min(r0.x, r0.y); r0.x = min(r0.x, r0.w); r0.y = 1.000000000e+000 + -r1.x; r0.y = cb0[11].w * r0.y + r1.x; r0.x = min(r0.x, r0.y); r0.x = cb0[9].x * r0.x; r0.y = r0.x * r0.x; r0.y = r0.y * r0.x; r0.z = r0.x * 6.000000000e+000 + -1.500000000e+001; r0.x = r0.x * r0.z + 1.000000000e+001; r0.x = r0.y * r0.x; r0.y = cb0[9].z < cb0[9].w; r0.z = cb0[9].w + -cb0[9].z; r1.xyz = cb0[7].zxy * v9.yzx; r1.xyz = cb0[7].yzx * v9.zxy + -r1.xyz; r0.w = dot(cb0[7].xyz, v9.xyz); r2.xyzw = cb0[7].xyzw + cb0[7].xyzw; r1.w = cb0[7].w * r2.w; r3.xyz = r1.www * v9.xyz + -v9.xyz; r3.xyz = r0.www * r2.xyz + r3.xyz; r1.xyz = r1.xyz * r2.www + r3.xyz; r1.xyz = cb0[6].xyz + r1.xyz; r3.xyz = v1.xyz * cb1[0].xyz + cb1[1].xyz; r4.xyz = cb0[7].zxy * r3.yzx; r4.xyz = cb0[7].yzx * r3.zxy + -r4.xyz; r0.w = dot(cb0[7].xyz, r3.xyz); r3.xyz = r1.www * r3.xyz + -r3.xyz; r3.xyz = r0.www * r2.xyz + r3.xyz; r3.xyz = r4.xyz * r2.www + r3.xyz; r3.xyz = cb0[6].xyz + r3.xyz; r1.xyz = -r3.xyz + r1.xyz; r0.w = dot(r3.xyz, r3.xyz); r0.w = saturate(r0.w * cb0[8].z + cb0[8].w); r3.xyz = r0.www * r1.xyz + r3.xyz; r1.x = dot(r3.xyz, r3.xyz); r1.x = sqrt(r1.x); r1.x = -cb0[9].z + r1.x; r0.z = saturate(r1.x / r0.z); r0.y = r0.y ? r0.z : 0; r0.y = 1.000000000e+000 + -r0.y; r0.x = min(r0.x, r0.y); r1.xyz = v13.xxy + -v13.zzw; o0.w = r0.x * r1.x + v13.z; o6.xy = r0.xx * r1.yz + v13.zw; r3.w = 1.000000000e+000; r1.x = dot(r3.xyzw, cb1[9].xyzw); r1.y = dot(r3.xyzw, cb1[10].xyzw); r1.z = dot(r3.xyzw, cb1[11].xyzw); r4.xyz = cb0[3].zxy * r1.yzx; r4.xyz = cb0[3].yzx * r1.zxy + -r4.xyz; r0.y = dot(cb0[3].xyz, r1.xyz); r5.xyzw = cb0[3].xyzw + cb0[3].xyzw; r0.z = cb0[3].w * r5.w; r6.xyz = r0.zzz * r1.xyz + -r1.xyz; o2.xyz = r1.xyz; r1.xyz = r0.yyy * r5.xyz + r6.xyz; r1.xyz = r4.xyz * r5.www + r1.xyz; r4.xyz = -cb0[4].xyz + r1.xyz; o4.xyz = r1.xyz; r0.y = dot(r4.xyz, r4.xyz); r0.y = rsqrt(r0.y); o0.xyz = r4.xyz * r0.yyy; r1.xyz = cb0[7].zxy * v10.yzx; r1.xyz = cb0[7].yzx * v10.zxy + -r1.xyz; r0.y = dot(cb0[7].xyz, v10.xyz); r4.xyz = r1.www * v10.xyz + -v10.xyz; r4.xyz = r0.yyy * r2.xyz + r4.xyz; r1.xyz = r1.xyz * r2.www + r4.xyz; r4.xyz = v0.zxy * cb1[0].www + cb1[1].www; r6.xyz = r1.www * r4.yzx + -r4.yzx; r0.y = dot(cb0[7].zxy, r4.xyz); r2.xyz = r0.yyy * r2.xyz + r6.xyz; r6.xyz = cb0[7].zxy * r4.zxy; r4.xyz = cb0[7].yzx * r4.xyz + -r6.xyz; r2.xyz = r4.xyz * r2.www + r2.xyz; r1.xyz = -r2.xyz + r1.xyz; r1.xyz = r0.www * r1.xyz + r2.xyz; r2.x = dot(r1.xyz, cb1[9].xyz); r2.y = dot(r1.xyz, cb1[10].xyz); r2.z = dot(r1.xyz, cb1[11].xyz); r2.w = dot(cb1[7].xyzw, r3.xyzw); o1.xyzw = r2.xyzw; o7.w = r2.w; r0.y = v15.x + -v15.y; o2.w = r0.x * r0.y + v15.y; r0.y = dot(cb0[3].xyz, r2.xyz); r1.xyz = r0.zzz * r2.xyz + -r2.xyz; r1.xyz = r0.yyy * r5.xyz + r1.xyz; r4.xyz = cb0[3].zxy * r2.yzx; r2.xyz = cb0[3].yzx * r2.zxy + -r4.xyz; o3.xyz = r2.xyz * r5.www + r1.xyz; r1.z = dot(cb0[2].xyz, cb0[5].xyz); r1.x = dot(cb0[0].xyz, cb0[5].xyz); r1.y = dot(cb0[1].xyz, cb0[5].xyz); r0.y = dot(r1.xyz, r1.xyz); r0.y = sqrt(r0.y); r0.yz = r1.xy / r0.yy; r1.xy = cb0[5].ww + r1.xy; r0.yz = r0.yz * float2(5.000000e-001,5.000000e-001) + float2(5.000000e-001,5.000000e-001); r1.z = dot(r1.xyz, r1.xyz); r1.z = sqrt(r1.z); r1.xy = r1.xy / r1.zz; r1.xy = r1.xy * float2(5.000000e-001,5.000000e-001) + float2(5.000000e-001,5.000000e-001); r0.yz = -r1.xy + r0.yz; r0.y = dot(r0.yz, r0.yz); r0.y = sqrt(r0.y); r0.y = -cb0[8].x + r0.y; r0.z = cb0[8].y + -cb0[8].x; o3.w = saturate(r0.y / r0.z); r0.y = v7.x + -v7.y; o4.w = r0.x * r0.y + v7.y; r0.xy = v11.xy + -v6.xy; o5.zw = r0.ww * r0.xy + v6.xy; r0.xy = v12.xy + -v8.xy; o5.xy = r0.ww * r0.xy + v8.xy; o7.x = dot(cb1[4].xyzw, r3.xyzw); o7.y = dot(cb1[5].xyzw, r3.xyzw); o7.z = dot(cb1[6].xyzw, r3.xyzw); return; }[/code]
Hello mate.

I tried the pink thing but it didn't work? I tried:
marking_mode=pink
marking_mode="pink"

Here are the screenies.
https://forums.geforce.com/cmd/default/download-comment-attachment/67741/


The first relates to the cockpit shader, the first shader pair on the previous post.

Shadows OFF
Image

Shadows ON
Image

Shadows ON shader tagged
Image


This lot is for the asteroids:
Shadows OFF
Image

Shadows ON
Image

Shadows ON shader tagged
Image


I found another potential shader; this one is within the station.
Shadows OFF
Image

Shadows ON
Image

Shadows ON shader tagged
Image


The shaders are here and confusingly, the vs is the same one as the asteroid above. So I have probably ballsed up!
ps
//Funny Light on station

Texture2D<float4> t0 : register(t0);

SamplerState s0_s : register(s0);

cbuffer cb0 : register(b0)
{
float4 cb0[1];
}


Texture2D<float4> StereoParams : register(t125);
Texture1D<float4> IniParams : register(t120);

void main(
float2 v0 : TEXCOORD0,
out float4 o0 : SV_Target0)
{
float4 r0;
uint4 bitmask, uiDest;
float4 fDest;

r0.xyzw = t0.Sample(s0_s, v0.xy).xyzw;
r0.x = cb0[0].x * r0.x;
r0.y = 1.000000000e+000 < r0.x;
if (r0.y != 0) {
r0.x = -5.000000000e+000;
}
o0.xy = r0.xx;
o0.zw = float2(0.000000e+000,0.000000e+000);
return;
}



vs
//Funny Light on station

cbuffer cb0 : register(b0)
{
float4 cb0[3] : packoffset(c0);
}

Texture2D<float4> StereoParams : register(t125);
Texture1D<float4> IniParams : register(t120);

void main(
float4 v0 : POSITION0,
float4 v1 : TEXCOORD0,
out float2 o0 : TEXCOORD0,
out float3 o1 : TEXCOORD1,
out float4 o2 : SV_Position0)
{
float4 r0;
uint4 bitmask, uiDest;
float4 fDest;

o0.xy = v1.xy;
r0.xy = v1.xy;
r0.z = 1.000000000e+000;
o1.x = dot(cb0[0].xyw, r0.xyz);
o1.y = dot(cb0[1].xyw, r0.xyz);
o1.z = dot(cb0[2].xyw, r0.xyz);
o2.xyw = v0.xyw;
o2.z = 0.000000000e+000;
return;
}



Thanks again!


edit

On a planet

Funny black torn ground
ps
//  Black 'tear' in the ground

Texture2D<float4> t0 : register(t0);

SamplerState s0_s : register(s0);


Texture2D<float4> StereoParams : register(t125);
Texture1D<float4> IniParams : register(t120);

void main(
float4 v0 : TEXCOORD0,
float4 v1 : TEXCOORD1,
float3 v2 : TEXCOORD2,
out float4 o0 : SV_Target0)
{
float4 r0;
uint4 bitmask, uiDest;
float4 fDest;

r0.xyzw = t0.Sample(s0_s, v2.yz).xyzw;
r0.xyzw = r0.xyzw * v1.xyzw + v0.xyzw;
o0.w = v2.x * r0.w;
o0.xyz = r0.xyz;
return;
}



vs
//  Black 'tear' in the ground

cbuffer cb0 : register(b0)
{
float4 cb0[3];
}

cbuffer cb1 : register(b1)
{
float4 cb1[8];
}


Texture2D<float4> StereoParams : register(t125);
Texture1D<float4> IniParams : register(t120);

void main(
float4 v0 : NORMAL0,
float4 v1 : POSITION0,
float4 v2 : POSITION6,
float4 v3 : POSITION7,
float4 v4 : TANGENT0,
float4 v5 : TEXCOORD0,
float4 v6 : TEXCOORD1,
float4 v7 : TEXCOORD2,
float4 v8 : TEXCOORD3,
float4 v9 : TEXCOORD4,
float4 v10 : TEXCOORD5,
float4 v11 : TEXCOORD6,
out float4 o0 : SV_Position0)
{
float4 r0,r1,r2,r3;
uint4 bitmask, uiDest;
float4 fDest;

r0.xyz = cb0[1].zxy * v8.yzx;
r0.xyz = cb0[1].yzx * v8.zxy + -r0.xyz;
r0.w = dot(cb0[1].xyz, v8.xyz);
r1.xyzw = cb0[1].xyzw + cb0[1].xyzw;
r2.x = cb0[1].w * r1.w;
r2.yzw = r2.xxx * v8.xyz + -v8.xyz;
r2.yzw = r0.www * r1.xyz + r2.yzw;
r0.xyz = r0.xyz * r1.www + r2.yzw;
r0.xyz = cb0[0].xyz + r0.xyz;
r2.yzw = v1.xyz * cb1[0].xyz + cb1[1].xyz;
r3.xyz = r2.xxx * r2.yzw + -r2.yzw;
r0.w = dot(cb0[1].xyz, r2.yzw);
r1.xyz = r0.www * r1.xyz + r3.xyz;
r3.xyz = cb0[1].zxy * r2.zwy;
r2.xyz = cb0[1].yzx * r2.wyz + -r3.xyz;
r1.xyz = r2.xyz * r1.www + r1.xyz;
r1.xyz = cb0[0].xyz + r1.xyz;
r0.xyz = -r1.xyz + r0.xyz;
r2.x = dot(r1.xyz, r1.xyz);
r2.x = saturate(r2.x * cb0[2].x + cb0[2].y);
r1.w = 1.000000000e+000;
r0.w = 0.000000000e+000;
r0.xyzw = r2.xxxx * r0.xyzw + r1.xyzw;
r1.x = dot(cb1[6].xyzw, r0.xyzw);
r1.y = dot(cb1[7].xyzw, r0.xyzw);
o0.z = min(r1.y, r1.x);
o0.w = r1.y;
o0.x = dot(cb1[4].xyzw, r0.xyzw);
o0.y = dot(cb1[5].xyzw, r0.xyzw);
return;
}







The entire surface. Was this what you meant?
ps
// sun lit planet surface
cbuffer cb0 : register(b0)
{
float4 cb0[75] : packoffset(c0);
}
SamplerState s0_s_s : register(s0);
SamplerState s1_s_s : register(s1);
SamplerState s2_s_s : register(s2);
SamplerState s3_s_s : register(s3);
SamplerState s4_s_s : register(s4);
SamplerState s5_s_s : register(s5);
SamplerState s6_s_s : register(s6);
SamplerState s7_s_s : register(s7);
SamplerState s8_s_s : register(s8);
SamplerState s9_s_s : register(s9);
SamplerState s10_s_s : register(s10);
SamplerState s11_s_s : register(s11);
SamplerState s12_s_s : register(s12);
Texture2D<float4> t0 : register(t0);
Texture2D<float4> t1 : register(t1);
Texture2D<float4> t2 : register(t2);
Texture2D<float4> t3 : register(t3);
Texture2D<float4> t4 : register(t4);
Texture2D<float4> t5 : register(t5);
Texture2D<float4> t6 : register(t6);
Texture2D<float4> t7 : register(t7);
Texture2D<float4> t8 : register(t8);
Texture2D<float4> t9 : register(t9);
Texture2D<float4> t10 : register(t10);
Texture2D<float4> t11 : register(t11);
Texture2D<float4> t12 : register(t12);

Texture2D<float4> StereoParams : register(t125);
Texture1D<float4> IniParams : register(t120);

void main(
float4 v0 : TEXCOORD0,
float4 v1 : TEXCOORD1,
float4 v2 : TEXCOORD2,
float4 v3 : TEXCOORD3,
float4 v4 : TEXCOORD4,
float4 v5 : TEXCOORD5,
float2 v6 : TEXCOORD6,
float4 v7 : SV_Position0,
out float4 o0 : SV_Target0,
out float4 o1 : SV_Target1,
out float4 o2 : SV_Target2,
out float4 o3 : SV_Target3,
out float4 o4 : SV_Target4)
{
float4 r0,r1,r2,r3,r4,r5,r6,r7,r8,r9,r10,r11,r12,r13,r14,r15,r16,r17,r18,r19,r20,r21,r22,r23;
uint4 bitmask, uiDest;
float4 fDest;

float4 x0[10];
x0[0].xyzw = float4(0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000);
x0[1].xyzw = float4(0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000);
x0[2].xyzw = float4(0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000);
x0[3].xyzw = float4(0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000);
x0[4].xyzw = float4(0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000);
x0[5].xyzw = float4(0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000);
x0[6].xyzw = float4(0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000);
x0[7].xyzw = float4(0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000);
x0[8].xyzw = float4(0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000);
x0[9].xyzw = float4(0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000);
r0.x = dot(v3.xyz, v3.xyz);
r0.x = rsqrt(r0.x);
r0.yzw = v3.xyz * r0.xxx;
r1.x = dot(r0.yzw, v0.xyz);
r1.y = 1.000000000e+000 + -abs(r1.x);
r1.y = sqrt(r1.y);
r1.z = abs(r1.x) * -1.872929931e-002 + 7.426100224e-002;
r1.z = r1.z * abs(r1.x) + -2.121143937e-001;
r1.z = r1.z * abs(r1.x) + 1.570728779e+000;
r1.w = r1.z * r1.y;
r1.w = r1.w * -2.000000000e+000 + 3.141592741e+000;
r1.x = r1.x < -r1.x;
r1.x = r1.x ? r1.w : 0;
r1.x = r1.z * r1.y + r1.x;
r1.x = 6.366197467e-001 * r1.x;
r2.x = -5.000000000e-001 + v5.y;
r2.y = dot(v4.xyz, v4.xyz);
r2.y = sqrt(r2.y);
r2.z = saturate(cb0[73].x);
r2.w = 1.000000000e+000 + -r2.z;
r3.xyz = -cb0[39].xyz + v2.xyz;
r3.w = dot(r3.xyz, r3.xyz);
r3.w = rsqrt(r3.w);
r3.xyz = r3.xyz * r3.www;
r3.x = dot(-r3.xyz, cb0[72].xyz);
r3.x = 5.000000000e-001 + r3.x;
r3.x = saturate(6.666666865e-001 * r3.x);
r3.x = r3.x * r3.x;
r3.y = 1.000000000e+000 + -v4.w;
r3.y = saturate(cb0[74].x * r3.y);
r3.y = log2(r3.y);
r3.y = cb0[74].y * r3.y;
r4.x = exp2(r3.y);
r3.y = cb0[73].z * -v2.w;
r3.y = 1.442695022e+000 * r3.y;
r4.y = exp2(r3.y);
r3.yz = float2(1.000000e+000,1.000000e+000) + -r4.xy;
r3.z = log2(r3.z);
r3.z = cb0[73].w * r3.z;
r3.z = exp2(r3.z);
r3.w = dot(v2.xyz, v2.xyz);
r3.w = rsqrt(r3.w);
r4.xyz = v2.xyz * r3.www;
r3.w = saturate(dot(-r4.xyz, cb0[72].xyz));
r4.x = r3.x * r3.z;
r4.x = r4.x * r3.y;
r4.x = r4.x * 4.400000000e+001 + 4.000000000e+000;
r3.w = log2(r3.w);
r3.w = r4.x * r3.w;
r3.w = exp2(r3.w);
r3.w = cb0[74].w * r3.w;
r4.x = dot(cb0[72].xyz, -v1.xyz);
r4.x = 2.000000030e-001 + r4.x;
r4.x = saturate(8.333333135e-001 * r4.x);
r4.x = r4.x * r4.x;
r3.z = r3.w * r3.z + r3.z;
r2.z = r4.x * r2.z;
r2.w = r3.z * r2.w;
r2.w = r2.w * r3.y;
r3.yzw = r4.xxx * float3(3.500000e-001,2.000000e-001,0.000000e+000) + float3(6.500000e-001,8.000000e-001,1.000000e+000);
r2.z = r2.z * v0.w + r2.w;
r4.xyz = cb0[71].xyz * r2.zzz;
r3.yzw = r4.xyz * r3.yzw;
r3.xyz = r3.yzw * r3.xxx;
r3.xyz = cb0[73].yyy * r3.xyz;
r2.z = max(cb0[71].x, cb0[71].y);
r2.z = max(r2.z, cb0[71].z);
r2.z = min(r2.z, cb0[74].z);
r2.z = max(r2.z, 9.999999747e-006);
r3.xyz = -r3.xyz / r2.zzz;
r3.xyz = float3(1.442695e+000,1.442695e+000,1.442695e+000) * r3.xyz;
r3.xyz = exp2(r3.xyz);
r3.xyz = float3(1.000000e+000,1.000000e+000,1.000000e+000) + -r3.xyz;
r3.xyz = r3.xyz * r2.zzz;
r3.xyz = v3.www * r3.xyz;
r4.xyz = ddx(v4.xyz);
r5.xyz = ddy(v4.xyz);
r2.z = dot(r4.xyz, r4.xyz);
r2.w = dot(r5.xyz, r5.xyz);
r3.w = min(r2.z, r2.w);
r4.w = max(r2.z, r2.w);
r5.w = r2.y / cb0[0].x;
r6.x = sqrt(cb0[0].x);
r5.w = r6.x * r5.w;
r5.w = log2(r5.w);
r5.w = 5.000000000e+000 + r5.w;
r6.x = floor(r5.w);
r6.y = -r6.x + r5.w;
r6.z = exp2(r6.x);
r6.w = r6.z < 1.024000000e+003;
if (r6.w != 0) {
r7.xyz = float3(-3.906250e-003,-3.906250e-003,-3.906250e-003) * cb0[38].xyz;
r7.w = 1.000000e+000 / r6.z;
r7.w = 5.000000000e-001 * r7.w;
r8.x = r7.w;
r8.y = 0.000000000e+000;
while (true) {
r8.z = (int)r8.y;
r8.w = (int)r8.z >= (int)10;
if (r8.w != 0) {
break;
}
r8.w = r8.x + r8.x;
r9.x = r8.x < 5.000000000e-001;
if (r9.x != 0) {
r9.x = (int)r8.z + 1;
r9.x = r9.x;
r8.x = r8.w;
r8.y = r9.x;
continue;
}
r9.xyz = r8.www * r7.xyz;
r9.xyz = frac(r9.xyz);
r9.xyz = float3(2.560000e+002,2.560000e+002,2.560000e+002) * r9.xyz;
r9.xyz = v4.xyz * r8.www + r9.xyz;
r10.xyz = floor(r9.xyz);
r9.xyz = frac(r9.xyz);
r11.xyz = r9.xyz * r9.xyz;
r12.xyz = r9.xyz * float3(-2.000000e+000,-2.000000e+000,-2.000000e+000) + float3(3.000000e+000,3.000000e+000,3.000000e+000);
r11.xyz = r12.xyz * r11.xyz;
r12.xyz = float3(3.906250e-003,3.906250e-003,3.906250e-003) * r10.xyz;
r12.xyz = frac(r12.xyz);
r9.w = dot(r12.xyz, float3(1.271000e+002,3.117000e+002,2.013000e+002));
r9.w = sin(r9.w);
r9.w = 4.375854688e+004 * r9.w;
r9.w = frac(r9.w);
r12.xyz = float3(1.000000e+000,0.000000e+000,0.000000e+000) + r10.xyz;
r12.xyz = float3(3.906250e-003,3.906250e-003,3.906250e-003) * r12.xyz;
r12.xyz = frac(r12.xyz);
r10.w = dot(r12.xyz, float3(1.271000e+002,3.117000e+002,2.013000e+002));
r10.w = sin(r10.w);
r10.w = 4.375854688e+004 * r10.w;
r12.xyz = float3(0.000000e+000,1.000000e+000,0.000000e+000) + r10.xyz;
r12.xyz = float3(3.906250e-003,3.906250e-003,3.906250e-003) * r12.xyz;
r12.xyz = frac(r12.xyz);
r11.w = dot(r12.xyz, float3(1.271000e+002,3.117000e+002,2.013000e+002));
r11.w = sin(r11.w);
r11.w = 4.375854688e+004 * r11.w;
r12.xyz = float3(1.000000e+000,1.000000e+000,0.000000e+000) + r10.xyz;
r12.xyz = float3(3.906250e-003,3.906250e-003,3.906250e-003) * r12.xyz;
r12.xyz = frac(r12.xyz);
r12.x = dot(r12.xyz, float3(1.271000e+002,3.117000e+002,2.013000e+002));
r12.x = sin(r12.x);
r12.x = 4.375854688e+004 * r12.x;
r12.yzw = float3(0.000000e+000,0.000000e+000,1.000000e+000) + r10.xyz;
r12.yzw = float3(3.906250e-003,3.906250e-003,3.906250e-003) * r12.yzw;
r12.xyzw = frac(r12.xyzw);
r12.y = dot(r12.yzw, float3(1.271000e+002,3.117000e+002,2.013000e+002));
r12.y = sin(r12.y);
r12.y = 4.375854688e+004 * r12.y;
r13.xyz = float3(1.000000e+000,0.000000e+000,1.000000e+000) + r10.xyz;
r13.xyz = float3(3.906250e-003,3.906250e-003,3.906250e-003) * r13.xyz;
r12.y = frac(r12.y);
r13.xyz = frac(r13.xyz);
r12.z = dot(r13.xyz, float3(1.271000e+002,3.117000e+002,2.013000e+002));
r12.z = sin(r12.z);
r13.xyz = float3(0.000000e+000,1.000000e+000,1.000000e+000) + r10.xyz;
r13.xyz = float3(3.906250e-003,3.906250e-003,3.906250e-003) * r13.xyz;
r13.xyz = frac(r13.xyz);
r12.w = dot(r13.xyz, float3(1.271000e+002,3.117000e+002,2.013000e+002));
r12.w = sin(r12.w);
r12.zw = float2(4.375855e+004,4.375855e+004) * r12.zw;
r13.xy = frac(r12.zw);
r10.xyz = float3(1.000000e+000,1.000000e+000,1.000000e+000) + r10.xyz;
r10.xyz = float3(3.906250e-003,3.906250e-003,3.906250e-003) * r10.xyz;
r10.xyzw = frac(r10.xyzw);
r11.w = frac(r11.w);
r10.x = dot(r10.xyz, float3(1.271000e+002,3.117000e+002,2.013000e+002));
r10.x = sin(r10.x);
r10.x = 4.375854688e+004 * r10.x;
r10.x = frac(r10.x);
r10.y = r10.w + -r9.w;
r10.y = r11.x * r10.y + r9.w;
r10.zw = r13.xy + -r12.yy;
r10.zw = r11.xy * r10.zw + r12.yy;
r12.x = r12.x + -r11.w;
r12.x = r11.x * r12.x + r11.w;
r10.x = r10.x + -r13.y;
r10.x = r11.x * r10.x + r13.y;
r12.x = r12.x + -r10.y;
r12.x = r11.y * r12.x + r10.y;
r10.x = r10.x + -r10.z;
r10.x = r11.y * r10.x + r10.z;
r10.z = r10.z + -r10.y;
r10.y = r11.z * r10.z + r10.y;
r10.z = r11.w + -r9.w;
r9.w = r11.y * r10.z + r9.w;
r10.z = r10.w + -r9.w;
r9.w = r11.z * r10.z + r9.w;
r10.x = r10.x + -r12.x;
r10.z = r11.z * r10.x;
r12.w = r11.z * r10.x + r12.x;
r13.xyz = float3(1.000000e+000,1.000000e+000,1.000000e+000) + -r9.xyz;
r9.xyz = r13.xyz * r9.xyz;
r9.xyz = float3(6.000000e+000,6.000000e+000,6.000000e+000) * r9.xyz;
r11.xyz = max(r11.xyz, float3(1.525879e-005,1.525879e-005,1.525879e-005));
r9.xyz = r9.xyz / r11.xyz;
r9.w = r12.w + -r9.w;
r11.x = r9.x * r9.w;
r9.x = r12.w + -r10.y;
r11.y = r9.y * r9.x;
r11.z = r9.z * r10.z;
r12.xyz = r11.xyz * r8.www;
r9.x = (uint)r8.y;
x0[r9.x+0].xyzw = r12.xyzw;
r8.z = (int)r8.z + 1;
r8.y = r8.z;
r8.x = r8.w;
}
}
r7.xyz = float3(-2.000000e-001,-2.000000e-001,-2.000000e-001) + abs(r0.yzw);
r7.xyz = max(r7.xyz, float3(1.000000e-003,1.000000e-003,1.000000e-003));
r7.xyz = r7.xyz * r7.xyz;
r7.w = dot(r7.xyz, float3(1.000000e+000,1.000000e+000,1.000000e+000));
r7.xyz = r7.xyz / r7.www;
r8.xyz = float3(-4.882813e-004,-4.882813e-004,-4.882813e-004) * cb0[38].xyz;
r8.xyz = frac(r8.xyz);
r8.xyz = v4.xyz * float3(4.882813e-004,4.882813e-004,4.882813e-004) + r8.xyz;
r4.w = r4.w + -r3.w;
r3.w = r4.w * 5.000000000e-001 + r3.w;
r3.w = sqrt(r3.w);
r4.w = 4.882812500e-004 * r3.w;
r7.w = min(r4.w, 1.000000000e+000);
r8.w = min(v5.z, v5.w);
r8.w = r8.w < 9.990000129e-001;
if (r8.w != 0) {
r9.xyz = -cb0[34].xzy + cb0[31].xzy;
r1.y = v5.x;
r10.xy = -cb0[34].xz + r1.xy;
r9.xy = float2(1.000000e+000,1.000000e+000) / r9.xy;
r9.xy = saturate(r10.xy * r9.xy);
r10.xy = r9.xy * float2(-2.000000e+000,-2.000000e+000) + float2(3.000000e+000,3.000000e+000);
r9.xy = r9.xy * r9.xy;
r10.xz = r10.xy * r9.xy;
r1.y = 8.000000000e+001 * abs(r9.z);
r1.y = r2.y / r1.y;
r1.y = max(r1.y, 1.000000000e+000);
r8.w = cb0[34].y * r1.y;
r8.w = cb0[31].y * r1.y + -r8.w;
r1.y = -cb0[34].y * r1.y + r2.x;
r8.w = 1.000000e+000 / r8.w;
r1.y = saturate(r8.w * r1.y);
r8.w = r1.y * -2.000000000e+000 + 3.000000000e+000;
r1.y = r1.y * r1.y;
r10.y = r8.w * r1.y;
r1.y = dot(float3(1.000000e+000,1.000000e+000,1.000000e+000), r10.xyz);
r1.y = max(r1.y, 1.000000000e+000);
r9.xyz = r10.xyz / r1.yyy;
r10.xyzw = cb0[55].xyzw * r9.zzzz + cb0[49].xyzw;
r10.xyzw = cb0[52].xyzw * r9.yyyy + r10.xyzw;
r10.xyzw = cb0[58].xyzw * r9.xxxx + r10.xyzw;
r11.xyzw = cb0[10].xyzw * r9.zzzz + cb0[4].xyzw;
r11.xyzw = cb0[7].xyzw * r9.yyyy + r11.xyzw;
r11.xyzw = cb0[13].xyzw * r9.xxxx + r11.xyzw;
r12.xyzw = cb0[22].xyzw * r9.zzzz + cb0[16].xyzw;
r12.xyzw = cb0[19].xyzw * r9.yyyy + r12.xyzw;
r9.xyzw = cb0[25].xyzw * r9.xxxx + r12.xyzw;
r1.y = log2(r11.y);
if (r6.w != 0) {
r8.w = 1.000000000e+000 + -r11.w;
r12.x = 5.000000000e-001 + r11.z;
r12.x = frac(r12.x);
r12.x = -5.000000000e-001 + r12.x;
r12.x = 5.000000000e-001 + abs(r12.x);
r12.x = 1.000000e+000 / r12.x;
r12.yz = r11.zz * float2(5.000000e-001,5.000000e-001) + float2(-5.000000e-001,2.500000e-001);
r11.z = abs(r12.y) * -2.000000000e+000 + 5.000000000e-001;
r11.z = max(r11.z, 0.000000000e+000);
r11.z = -r11.z * r12.x;
r9.x = max(r9.x, 1.000000012e-007);
r12.y = r9.x * 2.000000000e+000 + 1.000000000e+000;
r12.w = r9.x * r9.x + r12.y;
r9.x = 1.000000000e+000 + r9.x;
r13.x = r1.y * -r6.x;
r13.x = exp2(r13.x);
r13.y = r2.z + r2.w;
r13.y = sqrt(r13.y);
r13.x = r13.x / r11.y;
r13.z = r6.z + r6.z;
r13.w = 5.000000000e-001 * r13.y;
r14.x = 1.000000000e+000 + -r6.y;
r14.yzw = float3(0.000000e+000,0.000000e+000,0.000000e+000);
r15.xyzw = float4(0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000);
r16.yz = r13.xz;
r16.xw = float2(0.000000e+000,1.000000e+000);
r17.x = 0.000000000e+000;
while (true) {
r17.y = (uint)r17.x;
r17.z = (uint)r17.y >= (uint)10;
if (r17.z != 0) {
break;
}
r17.z = r16.y * r11.y;
r17.w = 5.000000000e-001 * r16.z;
r18.x = 2.000000000e+000 < r16.z;
if (r18.x != 0) {
r18.x = (int)r17.x;
r18.x = (int)r18.x + 1;
r18.x = r18.x;
r16.yz = r17.zw;
r17.x = r18.x;
continue;
}
r18.x = r13.w >= r17.w;
if (r18.x != 0) {
break;
}
r18.x = x0[r17.y+0].w;
r18.yzw = x0[r17.y+0].xyz;
r17.y = r18.x * 5.000000000e-001 + r12.z;
r17.y = frac(r17.y);
r17.y = r17.y * 2.000000000e+000 + -1.000000000e+000;
r18.xyz = r18.yzw * r12.xxx;
r18.w = 0.000000000e+000 < r17.y;
r19.x = r17.y < 0.000000000e+000;
r19.x = r19.x ? 1 : 0;
r18.w = ((int)r18.w ? -1 : 0) + ((int)r19.x ? 1 : 0);
r18.w = r18.w;
r18.xyz = r18.xyz * r18.www;
r17.y = abs(r17.y) * r12.x + r11.z;
r18.w = r17.y * r12.y;
r18.w = r12.y * -2.000000000e+000 + r18.w;
r18.w = r18.w * r17.y + r12.w;
r18.w = sqrt(r18.w);
r17.y = -r12.y * r17.y + r12.y;
r17.y = r17.y / r18.w;
r18.xyz = r18.xyz * r17.yyy;
r17.y = -r18.w + r9.x;
r18.w = r17.y + r17.y;
r18.xyz = r18.www * r18.xyz;
r17.y = r17.y * r17.y;
r18.w = r16.w * r8.w + r11.w;
r19.xyz = r17.yyy * r15.xyz;
r19.xyz = r19.xyz * r8.www;
r18.xyz = r18.xyz * r18.www + r19.xyz;
r19.x = r18.w * r17.y;
r19.y = (int)r17.x;
r19.z = (int)r19.y == 9;
r19.w = r17.x == 0.000000;
r19.w = r19.w ? r6.y : 1.000000000e+000;
r19.z = r19.z ? r14.x : r19.w;
r19.w = r17.w / r13.y;
r19.w = -5.000000000e-001 + r19.w;
r19.w = saturate(r19.w + r19.w);
r19.z = r19.z * r19.w;
r19.x = r19.x * r17.z;
r15.w = r19.x * r19.z + r15.w;
r20.xyz = r18.xyz * r17.zzz;
r14.yzw = r20.xyz * r19.zzz + r14.yzw;
r16.x = r17.z * r19.z + r16.x;
r17.y = r17.y * r18.w + -1.000000000e+000;
r16.w = r19.z * r17.y + 1.000000000e+000;
r15.xyz = r19.zzz * r18.xyz;
r17.y = (int)r19.y + 1;
r17.x = r17.y;
r16.yz = r17.zw;
}
} else {
r14.yzw = float3(0.000000e+000,0.000000e+000,0.000000e+000);
r15.w = 0.000000000e+000;
r16.x = 0.000000000e+000;
}
r8.w = min(-r5.w, 0.000000000e+000);
r8.w = 9.000000000e+000 + r8.w;
r1.y = r8.w * r1.y;
r1.y = exp2(r1.y);
r1.y = min(r1.y, 1.000000000e+000);
r8.w = max(r16.x, 1.000000047e-003);
r8.w = 1.000000e+000 / r8.w;
r9.x = r15.w * r8.w;
r8.w = -r15.w * r8.w + 2.500000000e-001;
r8.w = r1.y * r8.w + r9.x;
r9.x = r9.y + -r8.w;
r9.x = saturate(r9.z * r9.x + r8.w);
r8.w = 1.000000000e+000 + -r9.z;
r1.y = r8.w * r1.y;
r11.yzw = float3(4.882813e-004,4.882813e-004,4.882813e-004) * r4.xyz;
r12.xyz = float3(4.882813e-004,4.882813e-004,4.882813e-004) * r5.xyz;
r13.xyzw = t0.SampleGrad(s7_s_s, r8.yz, r11.zwzz, r12.yzyy).xyzw;
r15.xyzw = t0.SampleGrad(s7_s_s, r8.zx, r11.wyww, r12.zxzz).xyzw;
r12.xyzw = t0.SampleGrad(s7_s_s, r8.xy, r11.yzyy, r12.xyxx).xyzw;
r13.xyzw = r13.zxyw * float4(2.048000e+003,2.560000e+002,2.560000e+002,2.048000e+003) + float4(0.000000e+000,-1.285020e+002,-1.285020e+002,0.000000e+000);
r15.xyzw = r15.xyzw * float4(2.560000e+002,2.560000e+002,2.048000e+003,2.048000e+003) + float4(-1.285020e+002,-1.285020e+002,0.000000e+000,0.000000e+000);
r12.xyzw = r12.xyzw * float4(2.560000e+002,2.560000e+002,2.048000e+003,2.048000e+003) + float4(-1.285020e+002,-1.285020e+002,0.000000e+000,0.000000e+000);
r11.yzw = float3(3.125000e-002,3.125000e-002,3.125000e-002) * r4.xyz;
r16.xyz = float3(3.125000e-002,3.125000e-002,3.125000e-002) * r5.xyz;
r17.xyz = float3(6.400000e+001,6.400000e+001,6.400000e+001) * r8.xyz;
r18.xyzw = t1.SampleGrad(s8_s_s, r17.yz, r11.zwzz, r16.yzyy).xyzw;
r19.xyzw = t1.SampleGrad(s8_s_s, r17.zx, r11.wyww, r16.zxzz).xyzw;
r16.xyzw = t1.SampleGrad(s8_s_s, r17.xy, r11.yzyy, r16.xyxx).xyzw;
r17.yz = r13.yz;
r17.xw = float2(0.000000e+000,0.000000e+000);
r17.xyzw = r18.zxyw * float4(3.200000e+001,2.560000e+002,2.560000e+002,3.200000e+001) + r17.xyzw;
r13.y = -1.285019684e+002;
r13.xyzw = r13.xyyw + r17.xyzw;
r17.zw = r15.yx;
r17.xy = float2(0.000000e+000,0.000000e+000);
r17.xyzw = r19.zwyx * float4(3.200000e+001,3.200000e+001,2.560000e+002,2.560000e+002) + r17.xyzw;
r15.x = -1.285019684e+002;
r15.xyzw = r15.zwxx + r17.xyzw;
r17.zw = r12.xy;
r17.xy = float2(0.000000e+000,0.000000e+000);
r16.xyzw = r16.zwxy * float4(3.200000e+001,3.200000e+001,2.560000e+002,2.560000e+002) + r17.xyzw;
r12.x = -1.285019684e+002;
r12.xyzw = r12.zwxx + r16.xyzw;
r15.xyzw = r15.zxwy * r7.yyyy;
r11.yzw = r13.xwx * r7.xxx + r15.ywy;
r16.xy = r12.zw * r7.zz;
r11.yzw = r12.xyx * r7.zzz + r11.yzw;
r13.x = 0.000000000e+000;
r15.y = 0.000000000e+000;
r12.xyz = r13.xyz * r7.xxx + r15.xyz;
r16.z = 0.000000000e+000;
r12.xyz = r16.xyz + r12.xyz;
r12.xyz = float3(4.807692e-004,4.807692e-004,4.807692e-004) * r12.xyz;
r8.w = cb0[40].y < r2.y;
r13.xy = cb0[40].yz;
r13.zw = cb0[43].yz;
r13.xy = r8.ww ? r13.xy : cb0[40].xy;
r13.zw = r8.ww ? r13.zw : cb0[43].xy;
r8.w = r13.y < r2.y;
r15.xy = r8.ww ? cb0[40].zw : r13.xy;
r15.zw = r8.ww ? cb0[43].zw : r13.zw;
r13.xy = r15.yw + -r15.xz;
r8.w = -r15.x + r2.y;
r9.z = 1.000000e+000 / r13.x;
r8.w = saturate(r9.z * r8.w);
r9.z = r8.w * -2.000000000e+000 + 3.000000000e+000;
r8.w = r8.w * r8.w;
r8.w = r9.z * r8.w;
r8.w = r8.w * r13.y + r15.z;
r9.z = r10.w * r8.w;
r10.w = 4.807692312e-004 * r11.y;
r11.yz = r11.zw * float2(4.807692e-004,-4.807692e-004) + float2(-5.000000e-001,5.000000e-001);
r8.w = r8.w * r11.y + r10.y;
r9.z = 2.080000000e+003 * r9.z;
r10.x = max(r10.x, 9.999999747e-005);
r10.x = 1.000000e+000 / r10.x;
r10.w = r7.w * r11.z + r10.w;
r10.y = r10.w + r10.y;
r10.y = -5.000000000e-001 + r10.y;
r10.y = r10.y * r10.x + 5.000000000e-001;
r11.yzw = r12.xyz * r10.xxx;
r9.y = saturate(r8.w * r10.x + 5.000000000e-001);
r8.w = r7.w * 2.414212942e+000 + r10.z;
r10.x = r10.y * 2.000000000e+000 + -1.000000000e+000;
r10.y = r8.w * 2.000000000e+000 + 1.000000000e+000;
r10.y = sqrt(r10.y);
r10.x = r10.y + -abs(r10.x);
r10.x = max(r10.x, 0.000000000e+000);
r8.w = r8.w * r8.w;
r8.w = r10.x * r10.x + r8.w;
r8.w = sqrt(r8.w);
r8.w = max(r8.w, 1.000000047e-003);
r8.w = r10.x / r8.w;
r10.x = 1.000000000e+000 + -r8.w;
r8.w = r9.w * r10.x + r8.w;
r10.xyz = r11.yzw * r8.www;
r10.xyz = r10.xyz * r9.zzz;
r10.xyz = r14.yzw * r11.xxx + r10.xyz;
r8.w = -5.000000000e-001 + cb0[28].w;
r9.z = -5.000000000e-001 + cb0[46].w;
r11.x = r8.w * r1.y;
r11.y = r9.z * r4.w;
r9.xy = r11.xy + r9.xy;
r11.x = cb0[28].z * r1.y;
r11.y = cb0[46].z * r4.w;
r9.zw = r9.xy + r9.xy;
r11.zw = float2(1.000000e+000,1.000000e+000) + -r9.xy;
r11.zw = r11.zw + r11.zw;
r9.zw = min(r9.zw, r11.zw);
r11.xy = min(r11.xy, r9.zw);
r11.z = 0.000000000e+000;
r12.xyzw = t2.SampleGrad(s1_s_s, r9.xy, r11.xzxx, r11.zyzz).xyzw;
r9.xyzw = t3.SampleGrad(s2_s_s, r9.xy, r11.xzxx, r11.zyzz).xyzw;
r11.xyz = log2(r12.xyz);
r11.xyz = float3(2.200000e+000,2.200000e+000,2.200000e+000) * r11.xyz;
r11.xyz = exp2(r11.xyz);
r9.xyz = log2(r9.xyz);
r9.xyz = float3(2.200000e+000,2.200000e+000,2.200000e+000) * r9.xyz;
r9.xyz = exp2(r9.xyz);
r1.y = cb0[64].y + -cb0[64].x;
r1.y = r9.w * r1.y + cb0[64].x;
r11.xyz = cb0[2].xxx * r11.xyz;
} else {
r9.xyz = float3(0.000000e+000,0.000000e+000,0.000000e+000);
r10.xyz = float3(0.000000e+000,0.000000e+000,0.000000e+000);
r11.xyz = float3(0.000000e+000,0.000000e+000,0.000000e+000);
r1.y = 0.000000000e+000;
}
r12.xy = float2(1.000000e-003,1.000000e-003) < v5.zw;
if (r12.x != 0) {
r12.xzw = -cb0[35].xzy + cb0[32].xzy;
r1.z = v5.x;
r13.xy = -cb0[35].xz + r1.xz;
r12.xz = float2(1.000000e+000,1.000000e+000) / r12.xz;
r12.xz = saturate(r13.xy * r12.xz);
r13.xy = r12.xz * float2(-2.000000e+000,-2.000000e+000) + float2(3.000000e+000,3.000000e+000);
r12.xz = r12.xz * r12.xz;
r13.xz = r13.xy * r12.xz;
r1.z = 8.000000000e+001 * abs(r12.w);
r1.z = r2.y / r1.z;
r1.z = max(r1.z, 1.000000000e+000);
r8.w = cb0[35].y * r1.z;
r8.w = cb0[32].y * r1.z + -r8.w;
r1.z = -cb0[35].y * r1.z + r2.x;
r8.w = 1.000000e+000 / r8.w;
r1.z = saturate(r8.w * r1.z);
r8.w = r1.z * -2.000000000e+000 + 3.000000000e+000;
r1.z = r1.z * r1.z;
r13.y = r8.w * r1.z;
r1.z = dot(float3(1.000000e+000,1.000000e+000,1.000000e+000), r13.xyz);
r1.z = max(r1.z, 1.000000000e+000);
r12.xzw = r13.xyz / r1.zzz;
r13.xyzw = cb0[56].xyzw * r12.wwww + cb0[50].xyzw;
r13.xyzw = cb0[53].xyzw * r12.zzzz + r13.xyzw;
r13.xyzw = cb0[59].xyzw * r12.xxxx + r13.xyzw;
r14.xyzw = cb0[11].xyzw * r12.wwww + cb0[5].xyzw;
r14.xyzw = cb0[8].xyzw * r12.zzzz + r14.xyzw;
r14.xyzw = cb0[14].xyzw * r12.xxxx + r14.xyzw;
r15.xyzw = cb0[23].xyzw * r12.wwww + cb0[17].xyzw;
r15.xyzw = cb0[20].xyzw * r12.zzzz + r15.xyzw;
r15.xyzw = cb0[26].xyzw * r12.xxxx + r15.xyzw;
r1.z = log2(r14.y);
if (r6.w != 0) {
r8.w = 1.000000000e+000 + -r14.w;
r9.w = 5.000000000e-001 + r14.z;
r9.w = frac(r9.w);
r9.w = -5.000000000e-001 + r9.w;
r9.w = 5.000000000e-001 + abs(r9.w);
r9.w = 1.000000e+000 / r9.w;
r12.xz = r14.zz * float2(5.000000e-001,5.000000e-001) + float2(-5.000000e-001,2.500000e-001);
r10.w = abs(r12.x) * -2.000000000e+000 + 5.000000000e-001;
r10.w = max(r10.w, 0.000000000e+000);
r10.w = -r10.w * r9.w;
r11.w = max(r15.x, 1.000000012e-007);
r12.x = r11.w * 2.000000000e+000 + 1.000000000e+000;
r12.w = r11.w * r11.w + r12.x;
r11.w = 1.000000000e+000 + r11.w;
r14.z = r1.z * -r6.x;
r14.z = exp2(r14.z);
r15.x = r2.z + r2.w;
r15.x = sqrt(r15.x);
r14.z = r14.z / r14.y;
r16.x = r6.z + r6.z;
r16.y = 5.000000000e-001 * r15.x;
r16.z = 1.000000000e+000 + -r6.y;
r17.xyz = float3(0.000000e+000,0.000000e+000,0.000000e+000);
r18.xyz = float3(0.000000e+000,0.000000e+000,0.000000e+000);
r16.w = 0.000000000e+000;
r17.w = r14.z;
r18.w = r16.x;
r19.xyz = float3(0.000000e+000,1.000000e+000,0.000000e+000);
while (true) {
r19.w = (uint)r19.z;
r20.x = (uint)r19.w >= (uint)10;
if (r20.x != 0) {
break;
}
r20.x = r17.w * r14.y;
r20.y = 5.000000000e-001 * r18.w;
r20.z = 2.000000000e+000 < r18.w;
if (r20.z != 0) {
r20.z = (int)r19.z;
r20.z = (int)r20.z + 1;
r20.z = r20.z;
r17.w = r20.x;
r18.w = r20.y;
r19.z = r20.z;
continue;
}
r20.z = r16.y >= r20.y;
if (r20.z != 0) {
break;
}
r20.z = x0[r19.w+0].w;
r21.xyz = x0[r19.w+0].xyz;
r19.w = r20.z * 5.000000000e-001 + r12.z;
r19.w = frac(r19.w);
r19.w = r19.w * 2.000000000e+000 + -1.000000000e+000;
r21.xyz = r21.xyz * r9.www;
r20.z = 0.000000000e+000 < r19.w;
r20.w = r19.w < 0.000000000e+000;
r20.w = r20.w ? 1 : 0;
r20.z = ((int)r20.w ? -1 : 0) + ((int)r20.z ? 1 : 0);
r20.z = r20.z;
r21.xyz = r21.xyz * r20.zzz;
r19.w = abs(r19.w) * r9.w + r10.w;
r20.z = r19.w * r12.x;
r20.z = r12.x * -2.000000000e+000 + r20.z;
r20.z = r20.z * r19.w + r12.w;
r20.z = sqrt(r20.z);
r19.w = -r12.x * r19.w + r12.x;
r19.w = r19.w / r20.z;
r21.xyz = r21.xyz * r19.www;
r19.w = -r20.z + r11.w;
r20.z = r19.w + r19.w;
r21.xyz = r20.zzz * r21.xyz;
r19.w = r19.w * r19.w;
r20.z = r19.y * r8.w + r14.w;
r22.xyz = r19.www * r18.xyz;
r22.xyz = r22.xyz * r8.www;
r21.xyz = r21.xyz * r20.zzz + r22.xyz;
r20.w = r20.z * r19.w;
r21.w = (int)r19.z;
r22.x = (int)r21.w == 9;
r22.y = r19.z == 0.000000;
r22.y = r22.y ? r6.y : 1.000000000e+000;
r22.x = r22.x ? r16.z : r22.y;
r22.y = r20.y / r15.x;
r22.y = -5.000000000e-001 + r22.y;
r22.y = saturate(r22.y + r22.y);
r22.x = r22.x * r22.y;
r20.w = r20.w * r20.x;
r16.w = r20.w * r22.x + r16.w;
r22.yzw = r21.xyz * r20.xxx;
r17.xyz = r22.yzw * r22.xxx + r17.xyz;
r19.x = r20.x * r22.x + r19.x;
r19.w = r19.w * r20.z + -1.000000000e+000;
r19.y = r22.x * r19.w + 1.000000000e+000;
r18.xyz = r22.xxx * r21.xyz;
r19.w = (int)r21.w + 1;
r19.z = r19.w;
r17.w = r20.x;
r18.w = r20.y;
}
} else {
r17.xyz = float3(0.000000e+000,0.000000e+000,0.000000e+000);
r16.w = 0.000000000e+000;
r19.x = 0.000000000e+000;
}
r8.w = min(-r5.w, 0.000000000e+000);
r8.w = 9.000000000e+000 + r8.w;
r1.z = r8.w * r1.z;
r1.z = exp2(r1.z);
r1.z = min(r1.z, 1.000000000e+000);
r8.w = max(r19.x, 1.000000047e-003);
r8.w = 1.000000e+000 / r8.w;
r9.w = r16.w * r8.w;
r8.w = -r16.w * r8.w + 2.500000000e-001;
r8.w = r1.z * r8.w + r9.w;
r9.w = r15.y + -r8.w;
r15.x = saturate(r15.z * r9.w + r8.w);
r8.w = 1.000000000e+000 + -r15.z;
r1.z = r8.w * r1.z;
r12.xzw = float3(4.882813e-004,4.882813e-004,4.882813e-004) * r4.xyz;
r14.yzw = float3(4.882813e-004,4.882813e-004,4.882813e-004) * r5.xyz;
r16.xyzw = t4.SampleGrad(s9_s_s, r8.yz, r12.zwzz, r14.zwzz).xyzw;
r18.xyzw = t4.SampleGrad(s9_s_s, r8.zx, r12.wxww, r14.wyww).xyzw;
r19.xyzw = t4.SampleGrad(s9_s_s, r8.xy, r12.xzxx, r14.yzyy).xyzw;
r16.xyzw = r16.zxyw * float4(2.048000e+003,2.560000e+002,2.560000e+002,2.048000e+003) + float4(0.000000e+000,-1.285020e+002,-1.285020e+002,0.000000e+000);
r18.xyzw = r18.xyzw * float4(2.560000e+002,2.560000e+002,2.048000e+003,2.048000e+003) + float4(-1.285020e+002,-1.285020e+002,0.000000e+000,0.000000e+000);
r19.xyzw = r19.xyzw * float4(2.560000e+002,2.560000e+002,2.048000e+003,2.048000e+003) + float4(-1.285020e+002,-1.285020e+002,0.000000e+000,0.000000e+000);
r12.xzw = float3(3.125000e-002,3.125000e-002,3.125000e-002) * r4.xyz;
r14.yzw = float3(3.125000e-002,3.125000e-002,3.125000e-002) * r5.xyz;
r20.xyz = float3(6.400000e+001,6.400000e+001,6.400000e+001) * r8.xyz;
r21.xyzw = t5.SampleGrad(s10_s_s, r20.yz, r12.zwzz, r14.zwzz).xyzw;
r22.xyzw = t5.SampleGrad(s10_s_s, r20.zx, r12.wxww, r14.wyww).xyzw;
r20.xyzw = t5.SampleGrad(s10_s_s, r20.xy, r12.xzxx, r14.yzyy).xyzw;
r23.yz = r16.yz;
r23.xw = float2(0.000000e+000,0.000000e+000);
r21.xyzw = r21.zxyw * float4(3.200000e+001,2.560000e+002,2.560000e+002,3.200000e+001) + r23.xyzw;
r16.y = -1.285019684e+002;
r16.xyzw = r16.xyyw + r21.xyzw;
r21.zw = r18.yx;
r21.xy = float2(0.000000e+000,0.000000e+000);
r21.xyzw = r22.zwyx * float4(3.200000e+001,3.200000e+001,2.560000e+002,2.560000e+002) + r21.xyzw;
r18.x = -1.285019684e+002;
r18.xyzw = r18.zwxx + r21.xyzw;
r21.zw = r19.xy;
r21.xy = float2(0.000000e+000,0.000000e+000);
r20.xyzw = r20.zwxy * float4(3.200000e+001,3.200000e+001,2.560000e+002,2.560000e+002) + r21.xyzw;
r19.x = -1.285019684e+002;
r19.xyzw = r19.zwxx + r20.xyzw;
r18.xyzw = r18.zxwy * r7.yyyy;
r12.xzw = r16.xwx * r7.xxx + r18.ywy;
r20.xy = r19.zw * r7.zz;
r12.xzw = r19.xyx * r7.zzz + r12.xzw;
r16.x = 0.000000000e+000;
r18.y = 0.000000000e+000;
r14.yzw = r16.xyz * r7.xxx + r18.xyz;
r20.z = 0.000000000e+000;
r14.yzw = r20.xyz + r14.yzw;
r14.yzw = float3(4.807692e-004,4.807692e-004,4.807692e-004) * r14.yzw;
r8.w = cb0[41].y < r2.y;
r16.xy = cb0[41].yz;
r16.zw = cb0[44].yz;
r16.xy = r8.ww ? r16.xy : cb0[41].xy;
r16.zw = r8.ww ? r16.zw : cb0[44].xy;
r8.w = r16.y < r2.y;
r18.xy = r8.ww ? cb0[41].zw : r16.xy;
r18.zw = r8.ww ? cb0[44].zw : r16.zw;
r16.xy = r18.yw + -r18.xz;
r8.w = -r18.x + r2.y;
r9.w = 1.000000e+000 / r16.x;
r8.w = saturate(r9.w * r8.w);
r9.w = r8.w * -2.000000000e+000 + 3.000000000e+000;
r8.w = r8.w * r8.w;
r8.w = r9.w * r8.w;
r8.w = r8.w * r16.y + r18.z;
r9.w = r13.w * r8.w;
r10.w = 4.807692312e-004 * r12.x;
r12.xz = r12.zw * float2(4.807692e-004,-4.807692e-004) + float2(-5.000000e-001,5.000000e-001);
r8.w = r8.w * r12.x + r13.y;
r9.w = 2.080000000e+003 * r9.w;
r11.w = max(r13.x, 9.999999747e-005);
r11.w = 1.000000e+000 / r11.w;
r10.w = r7.w * r12.z + r10.w;
r10.w = r10.w + r13.y;
r10.w = -5.000000000e-001 + r10.w;
r10.w = r10.w * r11.w + 5.000000000e-001;
r12.xzw = r14.yzw * r11.www;
r15.y = saturate(r8.w * r11.w + 5.000000000e-001);
r8.w = r7.w * 2.414212942e+000 + r13.z;
r10.w = r10.w * 2.000000000e+000 + -1.000000000e+000;
r11.w = r8.w * 2.000000000e+000 + 1.000000000e+000;
r11.w = sqrt(r11.w);
r10.w = r11.w + -abs(r10.w);
r10.w = max(r10.w, 0.000000000e+000);
r8.w = r8.w * r8.w;
r8.w = r10.w * r10.w + r8.w;
r8.w = sqrt(r8.w);
r8.w = max(r8.w, 1.000000047e-003);
r8.w = r10.w / r8.w;
r10.w = 1.000000000e+000 + -r8.w;
r8.w = r15.w * r10.w + r8.w;
r12.xzw = r12.xzw * r8.www;
r12.xzw = r12.xzw * r9.www;
r12.xzw = r17.xyz * r14.xxx + r12.xzw;
r8.w = -5.000000000e-001 + cb0[29].w;
r9.w = -5.000000000e-001 + cb0[47].w;
r13.x = r8.w * r1.z;
r13.y = r9.w * r4.w;
r13.xy = r13.xy + r15.xy;
r14.x = cb0[29].z * r1.z;
r14.y = cb0[47].z * r4.w;
r13.zw = r13.xy + r13.xy;
r14.zw = float2(1.000000e+000,1.000000e+000) + -r13.xy;
r14.zw = r14.zw + r14.zw;
r13.zw = min(r13.zw, r14.zw);
r14.xy = min(r14.xy, r13.zw);
r14.z = 0.000000000e+000;
r15.xyzw = t6.SampleGrad(s3_s_s, r13.xy, r14.xzxx, r14.zyzz).xyzw;
r13.xyzw = t7.SampleGrad(s4_s_s, r13.xy, r14.xzxx, r14.zyzz).xyzw;
r14.xyz = log2(r15.xyz);
r14.xyz = float3(2.200000e+000,2.200000e+000,2.200000e+000) * r14.xyz;
r14.xyz = exp2(r14.xyz);
r13.xyz = log2(r13.xyz);
r13.xyz = float3(2.200000e+000,2.200000e+000,2.200000e+000) * r13.xyz;
r13.xyz = exp2(r13.xyz);
r1.z = cb0[65].y + -cb0[65].x;
r1.z = r13.w * r1.z + cb0[65].x;
r14.xyz = cb0[2].yyy * r14.xyz;
} else {
r12.xzw = float3(0.000000e+000,0.000000e+000,0.000000e+000);
r13.xyz = float3(0.000000e+000,0.000000e+000,0.000000e+000);
r14.xyz = float3(0.000000e+000,0.000000e+000,0.000000e+000);
r1.z = 0.000000000e+000;
}
if (r12.y != 0) {
r15.xyz = -cb0[36].xzy + cb0[33].xzy;
r1.w = v5.x;
r1.xw = -cb0[36].xz + r1.xw;
r15.xy = float2(1.000000e+000,1.000000e+000) / r15.xy;
r1.xw = saturate(r15.xy * r1.xw);
r15.xy = r1.xw * float2(-2.000000e+000,-2.000000e+000) + float2(3.000000e+000,3.000000e+000);
r1.xw = r1.xw * r1.xw;
r16.xz = r15.xy * r1.xw;
r1.x = 8.000000000e+001 * abs(r15.z);
r1.x = r2.y / r1.x;
r1.x = max(r1.x, 1.000000000e+000);
r1.w = cb0[36].y * r1.x;
r1.w = cb0[33].y * r1.x + -r1.w;
r1.x = -cb0[36].y * r1.x + r2.x;
r1.w = 1.000000e+000 / r1.w;
r1.x = saturate(r1.x * r1.w);
r1.w = r1.x * -2.000000000e+000 + 3.000000000e+000;
r1.x = r1.x * r1.x;
r16.y = r1.w * r1.x;
r1.x = dot(float3(1.000000e+000,1.000000e+000,1.000000e+000), r16.xyz);
r1.x = max(r1.x, 1.000000000e+000);
r15.xyz = r16.xyz / r1.xxx;
r16.xyzw = cb0[57].xyzw * r15.zzzz + cb0[51].xyzw;
r16.xyzw = cb0[54].xyzw * r15.yyyy + r16.xyzw;
r16.xyzw = cb0[60].xyzw * r15.xxxx + r16.xyzw;
r17.xyzw = cb0[12].xyzw * r15.zzzz + cb0[6].xyzw;
r17.xyzw = cb0[9].xyzw * r15.yyyy + r17.xyzw;
r17.xyzw = cb0[15].xyzw * r15.xxxx + r17.xyzw;
r18.xyzw = cb0[24].xyzw * r15.zzzz + cb0[18].xyzw;
r18.xyzw = cb0[21].xyzw * r15.yyyy + r18.xyzw;
r15.xyzw = cb0[27].xyzw * r15.xxxx + r18.xyzw;
r1.x = log2(r17.y);
if (r6.w != 0) {
r1.w = 1.000000000e+000 + -r17.w;
r2.x = 5.000000000e-001 + r17.z;
r2.x = frac(r2.x);
r2.x = -5.000000000e-001 + r2.x;
r2.x = 5.000000000e-001 + abs(r2.x);
r2.x = 1.000000e+000 / r2.x;
r18.xy = r17.zz * float2(5.000000e-001,5.000000e-001) + float2(-5.000000e-001,2.500000e-001);
r6.w = abs(r18.x) * -2.000000000e+000 + 5.000000000e-001;
r6.w = max(r6.w, 0.000000000e+000);
r6.w = -r6.w * r2.x;
r8.w = max(r15.x, 1.000000012e-007);
r9.w = r8.w * 2.000000000e+000 + 1.000000000e+000;
r10.w = r8.w * r8.w + r9.w;
r8.w = 1.000000000e+000 + r8.w;
r6.x = r1.x * -r6.x;
r6.x = exp2(r6.x);
r2.z = r2.z + r2.w;
r2.z = sqrt(r2.z);
r2.w = r6.x / r17.y;
r6.x = r6.z + r6.z;
r6.z = 5.000000000e-001 * r2.z;
r11.w = 1.000000000e+000 + -r6.y;
r18.xzw = float3(0.000000e+000,0.000000e+000,0.000000e+000);
r19.xyz = float3(0.000000e+000,0.000000e+000,0.000000e+000);
r12.y = 0.000000000e+000;
r13.w = 0.000000000e+000;
r14.w = 1.000000000e+000;
r15.x = 0.000000000e+000;
r17.z = r2.w;
r19.w = r6.x;
while (true) {
r20.x = (uint)r15.x;
r20.y = (uint)r20.x >= (uint)10;
if (r20.y != 0) {
break;
}
r20.y = r17.z * r17.y;
r20.z = 5.000000000e-001 * r19.w;
r20.w = 2.000000000e+000 < r19.w;
if (r20.w != 0) {
r20.w = (int)r15.x;
r20.w = (int)r20.w + 1;
r20.w = r20.w;
r17.z = r20.y;
r19.w = r20.z;
r15.x = r20.w;
continue;
}
r20.w = r6.z >= r20.z;
if (r20.w != 0) {
break;
}
r20.w = x0[r20.x+0].w;
r21.xyz = x0[r20.x+0].xyz;
r20.x = r20.w * 5.000000000e-001 + r18.y;
r20.x = frac(r20.x);
r20.x = r20.x * 2.000000000e+000 + -1.000000000e+000;
r21.xyz = r21.xyz * r2.xxx;
r20.w = 0.000000000e+000 < r20.x;
r21.w = r20.x < 0.000000000e+000;
r21.w = r21.w ? 1 : 0;
r20.w = ((int)r20.w ? -1 : 0) + ((int)r21.w ? 1 : 0);
r20.w = r20.w;
r21.xyz = r21.xyz * r20.www;
r20.x = abs(r20.x) * r2.x + r6.w;
r20.w = r20.x * r9.w;
r20.w = r9.w * -2.000000000e+000 + r20.w;
r20.w = r20.w * r20.x + r10.w;
r20.w = sqrt(r20.w);
r20.x = -r9.w * r20.x + r9.w;
r20.x = r20.x / r20.w;
r21.xyz = r21.xyz * r20.xxx;
r20.x = -r20.w + r8.w;
r20.w = r20.x + r20.x;
r21.xyz = r20.www * r21.xyz;
r20.x = r20.x * r20.x;
r20.w = r14.w * r1.w + r17.w;
r22.xyz = r20.xxx * r19.xyz;
r22.xyz = r22.xyz * r1.www;
r21.xyz = r21.xyz * r20.www + r22.xyz;
r21.w = r20.w * r20.x;
r22.x = (int)r15.x;
r22.y = (int)r22.x == 9;
r22.z = r15.x == 0.000000;
r22.z = r22.z ? r6.y : 1.000000000e+000;
r22.y = r22.y ? r11.w : r22.z;
r22.z = r20.z / r2.z;
r22.z = -5.000000000e-001 + r22.z;
r22.z = saturate(r22.z + r22.z);
r22.y = r22.z * r22.y;
r21.w = r21.w * r20.y;
r12.y = r21.w * r22.y + r12.y;
r23.xyz = r21.xyz * r20.yyy;
r18.xzw = r23.xyz * r22.yyy + r18.xzw;
r13.w = r20.y * r22.y + r13.w;
r20.x = r20.w * r20.x + -1.000000000e+000;
r14.w = r22.y * r20.x + 1.000000000e+000;
r19.xyz = r22.yyy * r21.xyz;
r20.x = (int)r22.x + 1;
r15.x = r20.x;
r17.z = r20.y;
r19.w = r20.z;
}
} else {
r18.xzw = float3(0.000000e+000,0.000000e+000,0.000000e+000);
r12.y = 0.000000000e+000;
r13.w = 0.000000000e+000;
}
r1.w = min(-r5.w, 0.000000000e+000);
r1.w = 9.000000000e+000 + r1.w;
r1.x = r1.w * r1.x;
r1.x = exp2(r1.x);
r1.x = min(r1.x, 1.000000000e+000);
r1.w = max(r13.w, 1.000000047e-003);
r1.w = 1.000000e+000 / r1.w;
r2.x = r12.y * r1.w;
r1.w = -r12.y * r1.w + 2.500000000e-001;
r1.w = r1.x * r1.w + r2.x;
r2.x = r15.y + -r1.w;
r6.x = saturate(r15.z * r2.x + r1.w);
r1.w = 1.000000000e+000 + -r15.z;
r1.x = r1.x * r1.w;
r2.xzw = float3(4.882813e-004,4.882813e-004,4.882813e-004) * r4.xyz;
r15.xyz = float3(4.882813e-004,4.882813e-004,4.882813e-004) * r5.xyz;
r19.xyzw = t8.SampleGrad(s11_s_s, r8.yz, r2.zwzz, r15.yzyy).xyzw;
r20.xyzw = t8.SampleGrad(s11_s_s, r8.zx, r2.wxww, r15.zxzz).xyzw;
r21.xyzw = t8.SampleGrad(s11_s_s, r8.xy, r2.xzxx, r15.xyxx).xyzw;
r19.xyzw = r19.zxyw * float4(2.048000e+003,2.560000e+002,2.560000e+002,2.048000e+003) + float4(0.000000e+000,-1.285020e+002,-1.285020e+002,0.000000e+000);
r20.xyzw = r20.xyzw * float4(2.560000e+002,2.560000e+002,2.048000e+003,2.048000e+003) + float4(-1.285020e+002,-1.285020e+002,0.000000e+000,0.000000e+000);
r21.xyzw = r21.xyzw * float4(2.560000e+002,2.560000e+002,2.048000e+003,2.048000e+003) + float4(-1.285020e+002,-1.285020e+002,0.000000e+000,0.000000e+000);
r2.xzw = float3(3.125000e-002,3.125000e-002,3.125000e-002) * r4.xyz;
r4.xyz = float3(3.125000e-002,3.125000e-002,3.125000e-002) * r5.xyz;
r5.xyz = float3(6.400000e+001,6.400000e+001,6.400000e+001) * r8.xyz;
r8.xyzw = t9.SampleGrad(s12_s_s, r5.yz, r2.zwzz, r4.yzyy).xyzw;
r22.xyzw = t9.SampleGrad(s12_s_s, r5.zx, r2.wxww, r4.zxzz).xyzw;
r5.xyzw = t9.SampleGrad(s12_s_s, r5.xy, r2.xzxx, r4.xyxx).xyzw;
r23.yz = r19.yz;
r23.xw = float2(0.000000e+000,0.000000e+000);
r8.xyzw = r8.zxyw * float4(3.200000e+001,2.560000e+002,2.560000e+002,3.200000e+001) + r23.xyzw;
r19.y = -1.285019684e+002;
r8.xyzw = r19.xyyw + r8.xyzw;
r19.zw = r20.yx;
r19.xy = float2(0.000000e+000,0.000000e+000);
r19.xyzw = r22.zwyx * float4(3.200000e+001,3.200000e+001,2.560000e+002,2.560000e+002) + r19.xyzw;
r20.x = -1.285019684e+002;
r19.xyzw = r20.zwxx + r19.xyzw;
r20.zw = r21.xy;
r20.xy = float2(0.000000e+000,0.000000e+000);
r5.xyzw = r5.zwxy * float4(3.200000e+001,3.200000e+001,2.560000e+002,2.560000e+002) + r20.xyzw;
r21.x = -1.285019684e+002;
r5.xyzw = r21.zwxx + r5.xyzw;
r19.xyzw = r19.zxwy * r7.yyyy;
r2.xzw = r8.xwx * r7.xxx + r19.ywy;
r4.xy = r5.zw * r7.zz;
r2.xzw = r5.xyx * r7.zzz + r2.xzw;
r8.x = 0.000000000e+000;
r19.y = 0.000000000e+000;
r5.xyz = r8.xyz * r7.xxx + r19.xyz;
r4.z = 0.000000000e+000;
r4.xyz = r4.xyz + r5.xyz;
r4.xyz = float3(4.807692e-004,4.807692e-004,4.807692e-004) * r4.xyz;
r1.w = cb0[42].y < r2.y;
r5.xy = cb0[45].yz;
r5.zw = cb0[42].yz;
r5.xy = r1.ww ? r5.xy : cb0[45].xy;
r5.zw = r1.ww ? r5.zw : cb0[42].xy;
r1.w = r5.w < r2.y;
r8.xy = r1.ww ? cb0[45].zw : r5.xy;
r8.zw = r1.ww ? cb0[42].zw : r5.zw;
r5.xy = r8.wy + -r8.zx;
r1.w = -r8.z + r2.y;
r2.y = 1.000000e+000 / r5.x;
r1.w = saturate(r2.y * r1.w);
r2.y = r1.w * -2.000000000e+000 + 3.000000000e+000;
r1.w = r1.w * r1.w;
r1.w = r2.y * r1.w;
r1.w = r1.w * r5.y + r8.x;
r2.y = r16.w * r1.w;
r2.zw = r2.zw * float2(4.807692e-004,-4.807692e-004) + float2(-5.000000e-001,5.000000e-001);
r1.w = r1.w * r2.z + r16.y;
r2.xy = float2(4.807692e-004,2.080000e+003) * r2.xy;
r2.z = max(r16.x, 9.999999747e-005);
r2.z = 1.000000e+000 / r2.z;
r2.x = r7.w * r2.w + r2.x;
r2.x = r2.x + r16.y;
r2.x = -5.000000000e-001 + r2.x;
r2.x = r2.x * r2.z + 5.000000000e-001;
r4.xyz = r2.zzz * r4.xyz;
r6.y = saturate(r1.w * r2.z + 5.000000000e-001);
r1.w = r7.w * 2.414212942e+000 + r16.z;
r2.x = r2.x * 2.000000000e+000 + -1.000000000e+000;
r2.z = r1.w * 2.000000000e+000 + 1.000000000e+000;
r2.z = sqrt(r2.z);
r2.x = r2.z + -abs(r2.x);
r2.x = max(r2.x, 0.000000000e+000);
r1.w = r1.w * r1.w;
r1.w = r2.x * r2.x + r1.w;
r1.w = sqrt(r1.w);
r1.w = max(r1.w, 1.000000047e-003);
r1.w = r2.x / r1.w;
r2.x = 1.000000000e+000 + -r1.w;
r1.w = r15.w * r2.x + r1.w;
r2.xzw = r4.xyz * r1.www;
r2.xyz = r2.xzw * r2.yyy;
r2.xyz = r18.xzw * r17.xxx + r2.xyz;
r1.w = -5.000000000e-001 + cb0[30].w;
r2.w = -5.000000000e-001 + cb0[48].w;
r4.x = r1.x * r1.w;
r4.y = r4.w * r2.w;
r4.xy = r4.xy + r6.xy;
r5.x = cb0[30].z * r1.x;
r5.y = cb0[48].z * r4.w;
r1.xw = r4.xy + r4.xy;
r4.zw = float2(1.000000e+000,1.000000e+000) + -r4.xy;
r4.zw = r4.zw + r4.zw;
r1.xw = min(r1.xw, r4.zw);
r5.xy = min(r5.xy, r1.xw);
r5.z = 0.000000000e+000;
r6.xyzw = t10.SampleGrad(s5_s_s, r4.xy, r5.xzxx, r5.zyzz).xyzw;
r4.xyzw = t11.SampleGrad(s6_s_s, r4.xy, r5.xzxx, r5.zyzz).xyzw;
r5.xyz = log2(r6.xyz);
r5.xyz = float3(2.200000e+000,2.200000e+000,2.200000e+000) * r5.xyz;
r5.xyz = exp2(r5.xyz);
r4.xyz = log2(r4.xyz);
r4.xyz = float3(2.200000e+000,2.200000e+000,2.200000e+000) * r4.xyz;
r4.xyz = exp2(r4.xyz);
r1.x = cb0[66].y + -cb0[66].x;
r1.x = r4.w * r1.x + cb0[66].x;
r5.xyz = cb0[2].zzz * r5.xyz;
} else {
r2.xyz = float3(0.000000e+000,0.000000e+000,0.000000e+000);
r4.xyz = float3(0.000000e+000,0.000000e+000,0.000000e+000);
r5.xyz = float3(0.000000e+000,0.000000e+000,0.000000e+000);
r1.x = 0.000000000e+000;
}
r6.xy = saturate(v5.zw);
r6.zw = r6.xy * float2(-2.000000e+000,-2.000000e+000) + float2(3.000000e+000,3.000000e+000);
r6.xy = r6.xy * r6.xy;
r6.xy = r6.zw * r6.xy;
r7.xyz = r12.xzw + -r10.xyz;
r7.xyz = r6.xxx * r7.xyz + r10.xyz;
r2.xyz = -r7.xyz + r2.xyz;
r2.xyz = r6.yyy * r2.xyz + r7.xyz;
r1.z = r1.z + -r1.y;
r1.y = r6.x * r1.z + r1.y;
r1.x = r1.x + -r1.y;
o1.x = r6.y * r1.x + r1.y;
r1.xyz = r13.xyz + -r9.xyz;
r1.xyz = r6.xxx * r1.xyz + r9.xyz;
r4.xyz = r4.xyz + -r1.xyz;
r1.xyz = r6.yyy * r4.xyz + r1.xyz;
r4.xyz = r14.xyz + -r11.xyz;
r4.xyz = r6.xxx * r4.xyz + r11.xyz;
r5.xyz = r5.xyz + -r4.xyz;
r4.xyz = r6.yyy * r5.xyz + r4.xyz;
r5.xyz = cb0[68].xyz + -cb0[67].xyz;
r5.xyz = r6.xxx * r5.xyz + cb0[67].xyz;
r6.xzw = cb0[69].xyz + -r5.xyz;
r5.xyz = r6.yyy * r6.xzw + r5.xyz;
o4.xyz = r5.xyz * r3.xyz;
r1.w = dot(r0.yzw, r2.xyz);
r0.yzw = -r0.yzw * r1.www + r2.xyz;
r0.xyz = v3.xyz * r0.xxx + -r0.yzw;
r0.w = dot(r0.xyz, r0.xyz);
r0.w = rsqrt(r0.w);
r0.xyz = r0.xyz * r0.www;
r2.xyzw = cb0[3].xyzw + cb0[3].xyzw;
r3.xyz = cb0[3].yzx * r0.zxy;
r3.xyz = r0.yzx * cb0[3].zxy + -r3.xyz;
r0.w = dot(cb0[3].xyz, r0.xyz);
r1.w = cb0[3].w * r2.w;
r0.xyz = r1.www * r0.xyz + -r0.xyz;
r0.xyz = r0.www * r2.xyz + r0.xyz;
r0.xyz = r3.xyz * r2.www + r0.xyz;
r0.w = log2(v6.y);
r0.w = cb0[1].y * r0.w;
r0.w = exp2(r0.w);
r1.w = -5.000000000e-001 + v6.x;
o3.w = saturate(r1.w * 3.200000000e+001 + 5.000000000e-001);
r1.w = 1.000000000e+000 + -cb0[1].z;
r0.w = r0.w * r1.w + cb0[1].z;
o3.xyz = r1.xyz * r0.www;
o2.w = 2.500000000e-001 + cb0[70].x;
r1.x = log2(r3.w);
r1.x = floor(r1.x);
r1.x = exp2(-r1.x);
r1.yzw = cb0[37].xyz * r1.xxx;
r1.yzw = float3(9.765625e-004,9.765625e-004,9.765625e-004) * r1.yzw;
r1.yzw = frac(r1.yzw);
r1.yzw = float3(1.024000e+003,1.024000e+003,1.024000e+003) * r1.yzw;
r1.yzw = r1.yzw / r1.xxx;
r1.yzw = v4.xyz + -r1.yzw;
r1.xyz = r1.yzw * r1.xxx;
r1.xyz = floor(r1.xyz);
r1.xyz = float3(3.906250e-003,3.906250e-003,3.906250e-003) * r1.xyz;
r1.xyz = frac(r1.xyz);
r1.x = dot(r1.xyz, float3(1.271000e+002,3.117000e+002,2.013000e+002));
r1.x = sin(r1.x);
r1.x = 4.375854688e+004 * r1.x;
r1.x = frac(r1.x);
r1.x = -5.000000000e-001 + r1.x;
r1.x = 4.882812500e-004 * r1.x;
o2.xyz = r4.xyz * r0.www + r1.xxx;
r0.w = max(abs(r0.y), abs(r0.z));
r0.w = max(abs(r0.x), r0.w);
r1.xy = abs(r0.xy) == r0.ww;
r1.xy = r1.xy ? abs(r0.zz) : abs(r0.xy);
r1.xy = r1.xy / r0.ww;
r1.xyzw = t12.SampleBias(s0_s_s, r1.xy, -1.000000000e+000).xyzw;
r0.w = r1.x / r0.w;
r0.xyz = r0.xyz * r0.www;
o1.yzw = r0.xyz * float3(5.000000e-001,5.000000e-001,5.000000e-001) + float3(5.000000e-001,5.000000e-001,5.000000e-001);
o0.xyzw = v1.wwww;
o4.w = 1.000000000e+000;
return;
}



vs
//sun lit planet surface
cbuffer cb0 : register(b0)
{
float4 cb0[12] : packoffset(c0);
}

cbuffer cb1 : register(b1)
{
float4 cb1[12] : packoffset(c0);
}

Texture2D<float4> StereoParams : register(t125);
Texture1D<float4> IniParams : register(t120);

void main(
float4 v0 : NORMAL0,
float4 v1 : POSITION0,
float4 v2 : POSITION6,
float4 v3 : POSITION7,
float4 v4 : TANGENT0,
float4 v5 : TEXCOORD0,
float4 v6 : TEXCOORD1,
float4 v7 : TEXCOORD10,
float4 v8 : TEXCOORD2,
float4 v9 : TEXCOORD3,
float4 v10 : TEXCOORD4,
float4 v11 : TEXCOORD5,
float4 v12 : TEXCOORD6,
float4 v13 : TEXCOORD7,
float4 v14 : TEXCOORD8,
float4 v15 : TEXCOORD9,
out float4 o0 : TEXCOORD0,
out float4 o1 : TEXCOORD1,
out float4 o2 : TEXCOORD2,
out float4 o3 : TEXCOORD3,
out float4 o4 : TEXCOORD4,
out float4 o5 : TEXCOORD5,
out float2 o6 : TEXCOORD6,
out float4 o7 : SV_Position0)
{
float4 r0,r1,r2,r3,r4,r5,r6;
uint4 bitmask, uiDest;
float4 fDest;

r0.xy = float2(-2.000000e-002,-2.000000e-002) + v14.yx;
r0.xy = saturate(cb0[9].yy * r0.xy);
r0.z = max(r0.x, r0.y);
r0.w = 1.000000000e+000 + -r0.z;
r0.z = cb0[10].x * r0.w + r0.z;
r0.z = min(r0.z, 1.000000000e+000);
r1.xy = float2(1.000000e+000,1.000000e+000) + -r0.xy;
r1.xy = cb0[10].yw * r1.xy + r0.xy;
r0.z = min(r0.z, r1.x);
r1.xz = float2(9.800000e-001,9.800000e-001) + -v14.xy;
r1.xz = saturate(cb0[9].yy * r1.xz);
r0.xy = max(r0.xy, r1.xz);
r2.xy = float2(1.000000e+000,1.000000e+000) + -r0.xy;
r0.x = cb0[10].z * r2.x + r0.x;
r0.y = cb0[11].y * r2.y + r0.y;
r0.x = min(r0.z, r0.x);
r0.x = min(r0.x, r1.y);
r0.zw = float2(1.000000e+000,1.000000e+000) + -r1.xz;
r0.zw = cb0[11].xz * r0.zw + r1.xz;
r1.x = max(r1.z, r1.x);
r0.x = min(r0.x, r0.z);
r0.x = min(r0.x, r0.y);
r0.x = min(r0.x, r0.w);
r0.y = 1.000000000e+000 + -r1.x;
r0.y = cb0[11].w * r0.y + r1.x;
r0.x = min(r0.x, r0.y);
r0.x = cb0[9].x * r0.x;
r0.y = r0.x * r0.x;
r0.y = r0.y * r0.x;
r0.z = r0.x * 6.000000000e+000 + -1.500000000e+001;
r0.x = r0.x * r0.z + 1.000000000e+001;
r0.x = r0.y * r0.x;
r0.y = cb0[9].z < cb0[9].w;
r0.z = cb0[9].w + -cb0[9].z;
r1.xyz = cb0[7].zxy * v9.yzx;
r1.xyz = cb0[7].yzx * v9.zxy + -r1.xyz;
r0.w = dot(cb0[7].xyz, v9.xyz);
r2.xyzw = cb0[7].xyzw + cb0[7].xyzw;
r1.w = cb0[7].w * r2.w;
r3.xyz = r1.www * v9.xyz + -v9.xyz;
r3.xyz = r0.www * r2.xyz + r3.xyz;
r1.xyz = r1.xyz * r2.www + r3.xyz;
r1.xyz = cb0[6].xyz + r1.xyz;
r3.xyz = v1.xyz * cb1[0].xyz + cb1[1].xyz;
r4.xyz = cb0[7].zxy * r3.yzx;
r4.xyz = cb0[7].yzx * r3.zxy + -r4.xyz;
r0.w = dot(cb0[7].xyz, r3.xyz);
r3.xyz = r1.www * r3.xyz + -r3.xyz;
r3.xyz = r0.www * r2.xyz + r3.xyz;
r3.xyz = r4.xyz * r2.www + r3.xyz;
r3.xyz = cb0[6].xyz + r3.xyz;
r1.xyz = -r3.xyz + r1.xyz;
r0.w = dot(r3.xyz, r3.xyz);
r0.w = saturate(r0.w * cb0[8].z + cb0[8].w);
r3.xyz = r0.www * r1.xyz + r3.xyz;
r1.x = dot(r3.xyz, r3.xyz);
r1.x = sqrt(r1.x);
r1.x = -cb0[9].z + r1.x;
r0.z = saturate(r1.x / r0.z);
r0.y = r0.y ? r0.z : 0;
r0.y = 1.000000000e+000 + -r0.y;
r0.x = min(r0.x, r0.y);
r1.xyz = v13.xxy + -v13.zzw;
o0.w = r0.x * r1.x + v13.z;
o6.xy = r0.xx * r1.yz + v13.zw;
r3.w = 1.000000000e+000;
r1.x = dot(r3.xyzw, cb1[9].xyzw);
r1.y = dot(r3.xyzw, cb1[10].xyzw);
r1.z = dot(r3.xyzw, cb1[11].xyzw);
r4.xyz = cb0[3].zxy * r1.yzx;
r4.xyz = cb0[3].yzx * r1.zxy + -r4.xyz;
r0.y = dot(cb0[3].xyz, r1.xyz);
r5.xyzw = cb0[3].xyzw + cb0[3].xyzw;
r0.z = cb0[3].w * r5.w;
r6.xyz = r0.zzz * r1.xyz + -r1.xyz;
o2.xyz = r1.xyz;
r1.xyz = r0.yyy * r5.xyz + r6.xyz;
r1.xyz = r4.xyz * r5.www + r1.xyz;
r4.xyz = -cb0[4].xyz + r1.xyz;
o4.xyz = r1.xyz;
r0.y = dot(r4.xyz, r4.xyz);
r0.y = rsqrt(r0.y);
o0.xyz = r4.xyz * r0.yyy;
r1.xyz = cb0[7].zxy * v10.yzx;
r1.xyz = cb0[7].yzx * v10.zxy + -r1.xyz;
r0.y = dot(cb0[7].xyz, v10.xyz);
r4.xyz = r1.www * v10.xyz + -v10.xyz;
r4.xyz = r0.yyy * r2.xyz + r4.xyz;
r1.xyz = r1.xyz * r2.www + r4.xyz;
r4.xyz = v0.zxy * cb1[0].www + cb1[1].www;
r6.xyz = r1.www * r4.yzx + -r4.yzx;
r0.y = dot(cb0[7].zxy, r4.xyz);
r2.xyz = r0.yyy * r2.xyz + r6.xyz;
r6.xyz = cb0[7].zxy * r4.zxy;
r4.xyz = cb0[7].yzx * r4.xyz + -r6.xyz;
r2.xyz = r4.xyz * r2.www + r2.xyz;
r1.xyz = -r2.xyz + r1.xyz;
r1.xyz = r0.www * r1.xyz + r2.xyz;
r2.x = dot(r1.xyz, cb1[9].xyz);
r2.y = dot(r1.xyz, cb1[10].xyz);
r2.z = dot(r1.xyz, cb1[11].xyz);
r2.w = dot(cb1[7].xyzw, r3.xyzw);
o1.xyzw = r2.xyzw;
o7.w = r2.w;
r0.y = v15.x + -v15.y;
o2.w = r0.x * r0.y + v15.y;
r0.y = dot(cb0[3].xyz, r2.xyz);
r1.xyz = r0.zzz * r2.xyz + -r2.xyz;
r1.xyz = r0.yyy * r5.xyz + r1.xyz;
r4.xyz = cb0[3].zxy * r2.yzx;
r2.xyz = cb0[3].yzx * r2.zxy + -r4.xyz;
o3.xyz = r2.xyz * r5.www + r1.xyz;
r1.z = dot(cb0[2].xyz, cb0[5].xyz);
r1.x = dot(cb0[0].xyz, cb0[5].xyz);
r1.y = dot(cb0[1].xyz, cb0[5].xyz);
r0.y = dot(r1.xyz, r1.xyz);
r0.y = sqrt(r0.y);
r0.yz = r1.xy / r0.yy;
r1.xy = cb0[5].ww + r1.xy;
r0.yz = r0.yz * float2(5.000000e-001,5.000000e-001) + float2(5.000000e-001,5.000000e-001);
r1.z = dot(r1.xyz, r1.xyz);
r1.z = sqrt(r1.z);
r1.xy = r1.xy / r1.zz;
r1.xy = r1.xy * float2(5.000000e-001,5.000000e-001) + float2(5.000000e-001,5.000000e-001);
r0.yz = -r1.xy + r0.yz;
r0.y = dot(r0.yz, r0.yz);
r0.y = sqrt(r0.y);
r0.y = -cb0[8].x + r0.y;
r0.z = cb0[8].y + -cb0[8].x;
o3.w = saturate(r0.y / r0.z);
r0.y = v7.x + -v7.y;
o4.w = r0.x * r0.y + v7.y;
r0.xy = v11.xy + -v6.xy;
o5.zw = r0.ww * r0.xy + v6.xy;
r0.xy = v12.xy + -v8.xy;
o5.xy = r0.ww * r0.xy + v8.xy;
o7.x = dot(cb1[4].xyzw, r3.xyzw);
o7.y = dot(cb1[5].xyzw, r3.xyzw);
o7.z = dot(cb1[6].xyzw, r3.xyzw);
return;
}

Lord, grant me the serenity to accept the things I cannot change, the courage to change the things I can, and the wisdom to know the difference.
-------------------
Vitals: Windows 7 64bit, i5 2500 @ 4.4ghz, SLI GTX670, 8GB, Viewsonic VX2268WM

Handy Driver Discussion
Helix Mod - community fixes
Bo3b's Shaderhacker School - How to fix 3D in games
3dsolutionsgaming.com - videos, reviews and 3D fixes

#8
Posted 01/06/2016 07:51 PM   
[quote="andysonofbob"]I tried the pink thing but it didn't work? I tried: marking_mode=pink marking_mode="pink"[/quote]Oh sorry, I forgot you are still using the old version that doesn't support this. [quote] Shadows ON [img]https://forums.geforce.com/cmd/default/download-comment-attachment/67735/[/img] [/quote] This is probably the most interesting screenshot as I can see what might be a halo issue here - you can see an outline of the cockpit strut in the shadows on either side. See if you can find the vertex shader for the Asteroid (or shaders - in Unity games it is common for a surface to use two shaders, one of which makes it disappear and the other turns it a solid colour) and check for any halos. If you don't find any there it may be in the lighting vertex shader. It also looks like the shadows are not at screen depth, which is interesting in itself (might need to get them to screen depth before we can start on the main fix). [quote]The shaders are here and confusingly, the vs is the same one as the asteroid above. So I have probably ballsed up![/quote]Perhaps, but not necessarily - it's fairly common to have multiple lighting pixel shaders that all share a common vertex shader. [quote] ps [code]//Funny Light on station <snip>[/code][/quote]This one is too simple to be the right shader. [quote] vs [code]//Funny Light on station[/code][/quote]This is plausible for a lighting vertex shader, but impossible to be sure from the code alone. [quote]On a planet Funny black torn ground[/quote]Not entirely sure what these are - the pixel shader looks to simple for shadows, and I'm not sure what to make of the vertex shader. [quote]The entire surface. Was this what you meant?[/quote]Unfortunately I don't see a halo issue here :(
andysonofbob said:I tried the pink thing but it didn't work? I tried:
marking_mode=pink
marking_mode="pink"
Oh sorry, I forgot you are still using the old version that doesn't support this.


Shadows ON
Image

This is probably the most interesting screenshot as I can see what might be a halo issue here - you can see an outline of the cockpit strut in the shadows on either side. See if you can find the vertex shader for the Asteroid (or shaders - in Unity games it is common for a surface to use two shaders, one of which makes it disappear and the other turns it a solid colour) and check for any halos. If you don't find any there it may be in the lighting vertex shader. It also looks like the shadows are not at screen depth, which is interesting in itself (might need to get them to screen depth before we can start on the main fix).

The shaders are here and confusingly, the vs is the same one as the asteroid above. So I have probably ballsed up!
Perhaps, but not necessarily - it's fairly common to have multiple lighting pixel shaders that all share a common vertex shader.


ps
//Funny Light on station
<snip>
This one is too simple to be the right shader.


vs
//Funny Light on station
This is plausible for a lighting vertex shader, but impossible to be sure from the code alone.

On a planet

Funny black torn ground
Not entirely sure what these are - the pixel shader looks to simple for shadows, and I'm not sure what to make of the vertex shader.

The entire surface. Was this what you meant?
Unfortunately I don't see a halo issue here :(

2x Geforce GTX 980 in SLI provided by NVIDIA, i7 6700K 4GHz CPU, Asus 27" VG278HE 144Hz 3D Monitor, BenQ W1070 3D Projector, 120" Elite Screens YardMaster 2, 32GB Corsair DDR4 3200MHz RAM, Samsung 850 EVO 500G SSD, 4x750GB HDD in RAID5, Gigabyte Z170X-Gaming 7 Motherboard, Corsair Obsidian 750D Airflow Edition Case, Corsair RM850i PSU, HTC Vive, Win 10 64bit

Alienware M17x R4 w/ built in 3D, Intel i7 3740QM, GTX 680m 2GB, 16GB DDR3 1600MHz RAM, Win7 64bit, 1TB SSD, 1TB HDD, 750GB HDD

Pre-release 3D fixes, shadertool.py and other goodies: http://github.com/DarkStarSword/3d-fixes
Support me on Patreon: https://www.patreon.com/DarkStarSword or PayPal: https://www.paypal.me/DarkStarSword

#9
Posted 01/07/2016 02:10 AM   
Mate, I really appreciate your help. I am worried it's a lot of effort for you, showing me the ropes! The game looks awesome now and I am not too bothered with the shadows tbh because most of the time they aren't shown anyway! There aren't many shaders that affect the asteroids with regard to the borked effects. I have found a pair that turn off the whole asteroid and a similar pair that seem to clear up the borked effect on the asteroid when tagged, when tagged it removes a light. Looking at the screenshots above, the VS looks like the screenshot with shadows off (slightly darker) and the PS looks like the tagged image (darker still) VS [code]// Funny Light on station also main texture on Asteroid // when tagged the asteroid texture under is solid and darker. // Clears the issues on the asteroids. Similar to the PS? // VS cbuffer cb0 : register(b0) { float4 cb0[3] : packoffset(c0); } Texture2D<float4> StereoParams : register(t125); Texture1D<float4> IniParams : register(t120); void main( float4 v0 : POSITION0, float4 v1 : TEXCOORD0, out float2 o0 : TEXCOORD0, out float3 o1 : TEXCOORD1, out float4 o2 : SV_Position0) { float4 r0; uint4 bitmask, uiDest; float4 fDest; o0.xy = v1.xy; r0.xy = v1.xy; r0.z = 1.000000000e+000; o1.x = dot(cb0[0].xyw, r0.xyz); o1.y = dot(cb0[1].xyw, r0.xyz); o1.z = dot(cb0[2].xyw, r0.xyz); o2.xyw = v0.xyw; o2.z = 0.000000000e+000; return; }[/code] PS [code]// Main texture on Asteroid // when tagged effects whole asteroid, texture left is solid, a little bit darker, // It seems to retain the texture but removes some of the light. Clears the issues on the asteroids. // Similar VS? // PS cbuffer cb0 : register(b0) { float4 cb0[26] : packoffset(c0); } SamplerState s0_s_s : register(s0); SamplerState s1_s_s : register(s1); SamplerState s2_s_s : register(s2); SamplerState s3_s_s : register(s3); Texture2D<float4> t0 : register(t0); Texture2D<float4> t1 : register(t1); Texture2D<float4> t2 : register(t2); Texture2D<float4> t3 : register(t3); Texture2D<float4> StereoParams : register(t125); Texture1D<float4> IniParams : register(t120); void main( float2 v0 : TEXCOORD0, float3 v1 : TEXCOORD1, float4 v2 : SV_Position0, out float4 o0 : SV_Target0) { float4 r0,r1,r2,r3,r4,r5,r6; uint4 bitmask, uiDest; float4 fDest; r0.xyzw = t0.Sample(s3_s_s, v0.xy).xyzw; r1.xyzw = t1.Sample(s0_s_s, v0.xy).xyzw; r1.yzw = r1.yzw * float3(2.000000e+000,2.000000e+000,2.000000e+000) + float3(-1.000000e+000,-1.000000e+000,-1.000000e+000); r2.x = dot(r1.yzw, r1.yzw); r2.x = rsqrt(r2.x); r1.yzw = r2.xxx * r1.yzw; r2.xyzw = t2.Sample(s1_s_s, v0.xy).xyzw; r2.w = r2.w * 2.550000000e+002 + 5.000000000e-001; r2.w = (uint)r2.w; r2.w = r2.w; r2.w = (int)r2.w; r3.xyzw = (int4)r2.wwww & int4(64,1,16,32); r3.xyzw = r3.xyzw; r4.xyz = r3.xyw != float3(0.000000e+000,0.000000e+000,0.000000e+000); r5.xyzw = float4(1.000000e+000,1.000000e+000,1.000000e+000,1.000000e+000) + -r0.wxyz; r3.x = -r5.x * cb0[24].w + 1.000000000e+000; r3.y = -r5.x * cb0[25].x + 1.000000000e+000; r3.xy = r4.xx ? float2(1.000000e+000,1.000000e+000) : r3.xy; r0.w = cb0[0].x * r1.x + 1.000000000e+000; r0.w = exp2(r0.w); r4.x = dot(v1.xyz, v1.xyz); r4.x = rsqrt(r4.x); r6.xyz = v1.xyz * r4.xxx; r4.w = dot(-r6.xyz, -r6.xyz); r4.w = rsqrt(r4.w); r6.xyz = -r6.xyz * r4.www; r4.w = dot(r1.yzw, r6.xyz); r4.w = saturate(1.000000012e-007 + r4.w); r5.x = dot(r6.xyz, -cb0[9].xyz); r6.x = dot(r1.yzw, -cb0[9].xyz); r5.x = -r4.w * r6.x + r5.x; r6.y = r5.x >= 0.000000000e+000; r4.w = r6.x / r4.w; r4.w = min(r4.w, 1.000000000e+000); r4.w = r6.y ? r4.w : r6.x; r6.yz = r0.ww * float2(6.500000e-001,1.000000e-001) + float2(2.000000e+000,2.222220e+000); r6.yz = float2(1.000000e+000,1.000000e+000) / r6.yz; r6.y = 1.000000000e+000 + -r6.y; r5.x = r6.z * r5.x; r4.w = r5.x * r4.w; r4.w = saturate(r6.x * r6.y + r4.w); r5.x = saturate(r6.x * 5.000000000e-001 + 5.000000000e-001); r6.x = saturate(r6.x); r3.w = 0.000000e+000 != r3.w; r3.w = r3.w ? r5.x : r6.x; r3.w = r4.y ? r4.w : r3.w; r3.z = r3.z == 0.000000; r4.xyw = -v1.xyz * r4.xxx + -cb0[9].xyz; r4.xyw = float3(1.000000e-009,1.000000e-009,1.000000e-009) + r4.xyw; r5.x = dot(r4.xyw, r4.xyw); r5.x = rsqrt(r5.x); r4.xyw = r5.xxx * r4.xyw; r5.x = dot(-cb0[9].xyz, r4.xyw); r5.x = 1.000000000e+000 + -abs(r5.x); r6.y = r5.x * r5.x; r6.y = r6.y * r6.y; r5.x = r6.y * r5.x; r5.xyz = r5.yzw * r5.xxx; r1.x = r1.x * r1.x; r0.xyz = r5.xyz * r1.xxx + r0.xyz; r1.x = 6.000000000e+000 + r0.w; r1.x = 3.125000000e-002 * r1.x; r1.y = saturate(dot(r1.yzw, r4.xyw)); r1.y = log2(r1.y); r0.w = r1.y * r0.w; r0.w = exp2(r0.w); r0.w = r1.x * r0.w; r0.xyz = r0.www * r0.xyz; r0.xyz = r0.xyz * r6.xxx; r0.xyz = r3.zzz ? r0.xyz : 0; if (r4.z != 0) { r0.w = 1.000000000e+000; } else { r1.x = (int)r2.w & 4; r1.x = r1.x; r1.x = 0.000000e+000 != r1.x; r1.x = r1.x ? 0.000000000e+000 : 1.000000000e+000; r4.xyzw = t3.Sample(s2_s_s, v0.xy).xyzw; r1.y = dot(r4.xyz, cb0[17].xyz); r1.x = r1.x + -r1.y; r0.w = cb0[0].y * r1.x + r1.y; } r1.x = r3.w * r3.x; r0.xyz = r0.xyz * r3.yyy; r0.xyz = r1.xxx * r2.xyz + r0.xyz; r0.xyz = cb0[1].xyz * r0.xyz; o0.xyz = r0.xyz * r0.www; o0.w = 0.000000000e+000; return; }[/code] The shader pair that turn off the entire asteroids VS [code]// Removes the entire asteroid // VS cbuffer cb1 : register(b1) { float4 cb1[8]; } Texture2D<float4> StereoParams : register(t125); Texture1D<float4> IniParams : register(t120); void main( float4 v0 : NORMAL0, float4 v1 : POSITION0, float4 v2 : POSITION6, float4 v3 : POSITION7, float4 v4 : TANGENT0, float4 v5 : TEXCOORD0, float4 v6 : TEXCOORD1, float4 v7 : TEXCOORD2, out float4 o0 : TEXCOORD0, out float3 o1 : TEXCOORD1, out float3 o2 : TEXCOORD2, out float3 o3 : TEXCOORD3, out float3 o4 : TEXCOORD4, out float4 o5 : TEXCOORD5, out float4 o6 : SV_Position0) { float4 r0,r1,r2,r3,r4; uint4 bitmask, uiDest; float4 fDest; r0.xyz = v0.xyz * cb1[0].www + cb1[1].www; r1.xyz = v3.zxy * r0.yzx; r1.xyz = v3.yzx * r0.zxy + -r1.xyz; r0.w = dot(v3.xyz, r0.xyz); r2.xyzw = v3.xyzw + v3.xyzw; r1.w = v3.w * r2.w; r0.xyz = r1.www * r0.xyz + -r0.xyz; r0.xyz = r0.www * r2.xyz + r0.xyz; r0.xyz = r1.xyz * r2.www + r0.xyz; r1.xyz = v4.xyz * cb1[0].www + cb1[1].www; r0.w = dot(v3.xyz, r1.xyz); r3.xyz = r1.www * r1.xyz + -r1.xyz; r3.xyz = r0.www * r2.xyz + r3.xyz; r4.xyz = v3.zxy * r1.yzx; r1.xyz = v3.yzx * r1.zxy + -r4.xyz; r1.xyz = r1.xyz * r2.www + r3.xyz; r3.xyz = r1.yzx * r0.zxy; r3.xyz = r0.yzx * r1.zxy + -r3.xyz; o1.xyz = r0.xyz; o3.xyz = r1.xyz; r0.x = 0.000000000e+000 < v4.w; o0.xyz = r0.xxx ? r3.xyz : -r3.xyz; r0.xyz = v1.xyz * cb1[0].xyz + cb1[1].xyz; r1.xyz = r1.www * r0.xyz + -r0.xyz; r0.w = dot(v3.xyz, r0.xyz); r1.xyz = r0.www * r2.xyz + r1.xyz; r2.xyz = v3.zxy * r0.yzx; r0.xyz = v3.yzx * r0.zxy + -r2.xyz; r0.xyz = r0.xyz * r2.www + r1.xyz; r0.xyz = r0.xyz * v2.www + v2.xyz; r0.w = v1.w; r1.x = dot(cb1[7].xyzw, r0.xyzw); o0.w = r1.x; o6.w = r1.x; o2.xyz = r0.xyz; o4.xyz = v2.xyz; o5.xy = v6.xy * cb1[2].xy + cb1[2].zw; o5.zw = v7.xy * cb1[3].xy + cb1[3].zw; o6.x = dot(cb1[4].xyzw, r0.xyzw); o6.y = dot(cb1[5].xyzw, r0.xyzw); o6.z = dot(cb1[6].xyzw, r0.xyzw); return; }[/code] PS [code]// Removes the entire asteroid // PS Texture2D<float4> t9 : register(t9); Texture2D<float4> t8 : register(t8); Texture2D<float4> t7 : register(t7); Texture2D<float4> t6 : register(t6); Texture2D<float4> t5 : register(t5); Texture2D<float4> t4 : register(t4); Texture2D<float4> t3 : register(t3); Texture2D<float4> t2 : register(t2); Texture2D<float4> t1 : register(t1); Texture2D<float4> t0 : register(t0); SamplerState s9_s : register(s9); SamplerState s8_s : register(s8); SamplerState s7_s : register(s7); SamplerState s6_s : register(s6); SamplerState s5_s : register(s5); SamplerState s4_s : register(s4); SamplerState s3_s : register(s3); SamplerState s2_s : register(s2); SamplerState s1_s : register(s1); SamplerState s0_s : register(s0); cbuffer cb0 : register(b0) { float4 cb0[13]; } Texture2D<float4> StereoParams : register(t125); Texture1D<float4> IniParams : register(t120); void main( float4 v0 : TEXCOORD0, float3 v1 : TEXCOORD1, float3 v2 : TEXCOORD2, float3 v3 : TEXCOORD3, float3 v4 : TEXCOORD4, float4 v5 : TEXCOORD5, float4 v6 : SV_Position0, out float4 o0 : SV_Target0, out float4 o1 : SV_Target1, out float4 o2 : SV_Target2, out float4 o3 : SV_Target3, out float4 o4 : SV_Target4) { float4 r0,r1,r2,r3,r4,r5,r6,r7; uint4 bitmask, uiDest; float4 fDest; r0.xyzw = t0.Sample(s5_s, v5.xy).xyzw; r1.xyzw = t1.Sample(s3_s, v5.xy).xyzw; r1.xz = r1.xy * float2(2.007874e+000,2.007874e+000) + float2(-9.999847e-001,-9.999847e-001); r0.z = dot(r1.xz, r1.xz); r0.z = -1.000000000e+000 + r0.z; r0.z = max(-r0.z, 0.000000000e+000); r1.y = sqrt(r0.z); r2.xy = cb0[9].ww * v5.xy; r3.xyzw = t2.Sample(s1_s, r2.xy).xyzw; r4.xyzw = t3.Sample(s2_s, r2.xy).xyzw; r4.xyzw = r4.xyzw + -r3.xyzw; r3.xyzw = r0.wwww * r4.xyzw + r3.xyzw; r3.xyzw = cb0[11].yyyz * r3.xyzw; r4.xyzw = t4.Sample(s6_s, r2.xy).xyzw; r5.xyzw = t5.Sample(s7_s, r2.xy).xyzw; r5.xyz = r5.xyz + -r4.xyz; r4.xyz = r0.www * r5.xyz + r4.xyz; r4.xyz = cb0[11].www * r4.xyz; r2.xyzw = t6.Sample(s4_s, r2.xy).xyzw; r2.xy = r2.xy * float2(2.007874e+000,2.007874e+000) + float2(-9.999847e-001,-9.999847e-001); r0.z = dot(r2.xy, r2.xy); r0.z = -1.000000000e+000 + r0.z; r0.z = max(-r0.z, 0.000000000e+000); r2.z = sqrt(r0.z); r2.yw = cb0[10].xx * v5.zw; r5.xyzw = t2.Sample(s1_s, r2.yw).xyzw; r6.xyzw = t3.Sample(s2_s, r2.yw).xyzw; r6.xyzw = r6.xyzw + -r5.xyzw; r5.xyzw = r0.wwww * r6.xyzw + r5.xyzw; r6.xyzw = t4.Sample(s6_s, r2.yw).xyzw; r7.xyzw = t5.Sample(s7_s, r2.yw).xyzw; r7.xyz = r7.xyz + -r6.xyz; r6.xyz = r0.www * r7.xyz + r6.xyz; r7.xyzw = t6.Sample(s4_s, r2.yw).xyzw; r7.xy = r7.xy * float2(2.007874e+000,2.007874e+000) + float2(-9.999847e-001,-9.999847e-001); r0.z = dot(r7.xy, r7.xy); r0.z = -1.000000000e+000 + r0.z; r0.z = max(-r0.z, 0.000000000e+000); r7.z = sqrt(r0.z); r5.xyzw = r5.xyzw * cb0[12].xxxy + -r3.xyzw; r3.xyzw = r0.yyyy * r5.xyzw + r3.xyzw; r5.xyz = r6.xyz * cb0[12].zzz + -r4.xyz; r4.xyz = r0.yyy * r5.xyz + r4.xyz; r4.xyz = cb0[11].xxx * r4.xyz; r3.xyzw = cb0[10].yyyz * r3.xyzw; r0.zw = r7.xz + -r2.xz; r0.yz = r0.yy * r0.zw + r2.xz; r1.xy = r1.xy + r0.yz; r0.y = dot(r1.xyz, r1.xyz); r0.y = rsqrt(r0.y); r0.yzw = r1.xyz * r0.yyy; r0.yzw = cb0[10].www * r0.yzw; o2.xyz = cb0[4].yyy * r3.xyz; o1.x = cb0[4].w * r3.w; o3.w = cb0[5].x * r0.x; r1.xyz = v1.xyz * r0.zzz; r0.xyz = r0.yyy * v3.xyz + r1.xyz; r0.xyz = r0.www * v0.xyz + r0.xyz; r0.w = dot(r0.xyz, r0.xyz); r0.w = rsqrt(r0.w); r0.xyz = r0.xyz * r0.www; r0.w = dot(v2.xyz, v2.xyz); r1.x = sqrt(r0.w); r1.yzw = v2.xyz / r1.xxx; r2.x = r1.x < cb0[9].x; r2.y = r1.x < cb0[8].w; r2.z = r2.y ? cb0[8].x : cb0[8].y; r2.x = r2.x ? r2.z : cb0[8].z; r2.xz = v5.xy * r2.xx + float2(5.000000e-001,5.000000e-001); r3.xyzw = t7.SampleLevel(s8_s, r2.xz, 0.000000000e+000).xyzw; r1.yzw = r1.yzw * float3(1.000000e-001,1.000000e-001,1.000000e-001) + r3.xxx; r2.x = v2.x + v2.y; r2.x = v2.z + r2.x; r2.x = cb0[7].w * r2.x; r2.x = 4.999999888e-003 * r2.x; r2.x = sin(r2.x); r1.yzw = r2.xxx + r1.yzw; r1.yzw = frac(r1.yzw); r2.xzw = float3(1.000000e+000,1.000000e+000,1.000000e+000) + -r1.yzw; r1.yz = r2.xz * r1.yz; r1.y = r1.y + r1.z; r1.y = r1.w * r2.w + r1.y; r1.y = -r1.y * 7.000000000e+000 + 1.000000000e+000; r1.y = max(r1.y, 0.000000000e+000); if (r2.y != 0) { r1.z = r1.x / cb0[8].w; r1.y = r1.y * r1.z; } else { r1.z = cb0[9].y < r1.x; if (r1.z != 0) { r1.x = min(r1.x, cb0[9].z); r1.x = -cb0[9].y + r1.x; r1.z = cb0[9].z + -cb0[9].y; r1.x = r1.x / r1.z; r1.x = 1.000000000e+000 + -r1.x; r1.y = r1.y * r1.x; } } r1.x = cb0[7].z * r1.y; r1.y = 1.000000000e+000 + -cb0[4].x; r1.x = r1.x * r1.y; o3.xyz = r4.xyz * cb0[4].zzz + r1.xxx; r1.xyz = -cb0[0].xyz * cb0[5].yyy + v4.xyz; r0.w = rsqrt(r0.w); r2.xyz = v2.xyz * r0.www; r1.xyz = v2.xyz + -r1.xyz; r0.w = dot(r1.xyz, r1.xyz); r1.x = cb0[5].y + cb0[5].y; r1.x = r1.x * r1.x; r0.w = r0.w / r1.x; r0.w = 1.000000000e+000 + -r0.w; r0.w = r0.w * r0.w; r1.xyzw = t8.Sample(s9_s, v5.xy).xyzw; r1.y = dot(cb0[6].xyz, float3(3.000000e-001,6.000000e-001,1.000000e-001)); r1.yzw = cb0[6].xyz * r1.yyy; r1.yzw = r1.yzw * cb0[5].zzz + cb0[6].xyz; r3.xyz = r0.xyz * cb0[6].www + cb0[0].xyz; r2.x = dot(r2.xyz, -r3.xyz); r2.x = saturate(r2.x * 5.000000000e-001 + 5.000000000e-001); r2.x = log2(r2.x); r2.x = cb0[7].x * r2.x; r2.x = exp2(r2.x); r2.x = cb0[5].w + r2.x; r0.w = r2.x * r0.w; r0.w = r0.w * r1.x; r1.xyz = r1.yzw * r0.www; r1.xyz = cb0[7].yyy * r1.xyz; r0.w = dot(cb0[2].xyzw, float4(3.333000e-001,3.333000e-001,3.333000e-001,3.333000e-001)); r0.w = max(r0.w, 9.999999747e-006); r2.xyz = cb0[2].xyz / r0.www; o4.xyz = r2.xyz * r1.xyz; r0.w = max(abs(r0.z), abs(r0.y)); r0.w = max(r0.w, abs(r0.x)); r1.xy = r0.ww == abs(r0.xy); r1.xy = r1.xy ? abs(r0.zz) : abs(r0.xy); r1.xy = r1.xy / r0.ww; r1.xyzw = t9.SampleBias(s0_s, r1.xy, -1.000000000e+000).xyzw; r0.w = r1.x / r0.w; r0.xyz = r0.xyz * r0.www; o1.yzw = r0.xyz * float3(5.000000e-001,5.000000e-001,5.000000e-001) + float3(5.000000e-001,5.000000e-001,5.000000e-001); o0.xyzw = v0.wwww; o2.w = 0.000000000e+000; o4.w = 1.000000000e+000; return; }[/code] Hope that helps! No worries if not! The game looks so cool now anyway. Awesome! Thanks!! EDIT I have also attached a bunch of surface shaders I found setting shadows to low. The PSs all seem to be for the whole surface, like a light map or everything. One of the VSs looked like it should have been fixable but the pattern didn't work, another affected the ground the same way but didn't follow the pattern - I imagine there were more than one shader...
Mate, I really appreciate your help. I am worried it's a lot of effort for you, showing me the ropes!
The game looks awesome now and I am not too bothered with the shadows tbh because most of the time they aren't shown anyway!


There aren't many shaders that affect the asteroids with regard to the borked effects. I have found a pair that turn off the whole asteroid and a similar pair that seem to clear up the borked effect on the asteroid when tagged, when tagged it removes a light.

Looking at the screenshots above, the VS looks like the screenshot with shadows off (slightly darker) and the PS looks like the tagged image (darker still)

VS
// Funny Light on station also main texture on Asteroid
// when tagged the asteroid texture under is solid and darker.
// Clears the issues on the asteroids. Similar to the PS?
// VS


cbuffer cb0 : register(b0)
{
float4 cb0[3] : packoffset(c0);
}

Texture2D<float4> StereoParams : register(t125);
Texture1D<float4> IniParams : register(t120);

void main(
float4 v0 : POSITION0,
float4 v1 : TEXCOORD0,
out float2 o0 : TEXCOORD0,
out float3 o1 : TEXCOORD1,
out float4 o2 : SV_Position0)
{
float4 r0;
uint4 bitmask, uiDest;
float4 fDest;

o0.xy = v1.xy;
r0.xy = v1.xy;
r0.z = 1.000000000e+000;
o1.x = dot(cb0[0].xyw, r0.xyz);
o1.y = dot(cb0[1].xyw, r0.xyz);
o1.z = dot(cb0[2].xyw, r0.xyz);
o2.xyw = v0.xyw;
o2.z = 0.000000000e+000;
return;
}




PS
// Main texture on Asteroid
// when tagged effects whole asteroid, texture left is solid, a little bit darker,
// It seems to retain the texture but removes some of the light. Clears the issues on the asteroids.
// Similar VS?
// PS

cbuffer cb0 : register(b0)
{
float4 cb0[26] : packoffset(c0);
}
SamplerState s0_s_s : register(s0);
SamplerState s1_s_s : register(s1);
SamplerState s2_s_s : register(s2);
SamplerState s3_s_s : register(s3);
Texture2D<float4> t0 : register(t0);
Texture2D<float4> t1 : register(t1);
Texture2D<float4> t2 : register(t2);
Texture2D<float4> t3 : register(t3);

Texture2D<float4> StereoParams : register(t125);
Texture1D<float4> IniParams : register(t120);

void main(
float2 v0 : TEXCOORD0,
float3 v1 : TEXCOORD1,
float4 v2 : SV_Position0,
out float4 o0 : SV_Target0)
{
float4 r0,r1,r2,r3,r4,r5,r6;
uint4 bitmask, uiDest;
float4 fDest;

r0.xyzw = t0.Sample(s3_s_s, v0.xy).xyzw;
r1.xyzw = t1.Sample(s0_s_s, v0.xy).xyzw;
r1.yzw = r1.yzw * float3(2.000000e+000,2.000000e+000,2.000000e+000) + float3(-1.000000e+000,-1.000000e+000,-1.000000e+000);
r2.x = dot(r1.yzw, r1.yzw);
r2.x = rsqrt(r2.x);
r1.yzw = r2.xxx * r1.yzw;
r2.xyzw = t2.Sample(s1_s_s, v0.xy).xyzw;
r2.w = r2.w * 2.550000000e+002 + 5.000000000e-001;
r2.w = (uint)r2.w;
r2.w = r2.w;
r2.w = (int)r2.w;
r3.xyzw = (int4)r2.wwww & int4(64,1,16,32);
r3.xyzw = r3.xyzw;
r4.xyz = r3.xyw != float3(0.000000e+000,0.000000e+000,0.000000e+000);
r5.xyzw = float4(1.000000e+000,1.000000e+000,1.000000e+000,1.000000e+000) + -r0.wxyz;
r3.x = -r5.x * cb0[24].w + 1.000000000e+000;
r3.y = -r5.x * cb0[25].x + 1.000000000e+000;
r3.xy = r4.xx ? float2(1.000000e+000,1.000000e+000) : r3.xy;
r0.w = cb0[0].x * r1.x + 1.000000000e+000;
r0.w = exp2(r0.w);
r4.x = dot(v1.xyz, v1.xyz);
r4.x = rsqrt(r4.x);
r6.xyz = v1.xyz * r4.xxx;
r4.w = dot(-r6.xyz, -r6.xyz);
r4.w = rsqrt(r4.w);
r6.xyz = -r6.xyz * r4.www;
r4.w = dot(r1.yzw, r6.xyz);
r4.w = saturate(1.000000012e-007 + r4.w);
r5.x = dot(r6.xyz, -cb0[9].xyz);
r6.x = dot(r1.yzw, -cb0[9].xyz);
r5.x = -r4.w * r6.x + r5.x;
r6.y = r5.x >= 0.000000000e+000;
r4.w = r6.x / r4.w;
r4.w = min(r4.w, 1.000000000e+000);
r4.w = r6.y ? r4.w : r6.x;
r6.yz = r0.ww * float2(6.500000e-001,1.000000e-001) + float2(2.000000e+000,2.222220e+000);
r6.yz = float2(1.000000e+000,1.000000e+000) / r6.yz;
r6.y = 1.000000000e+000 + -r6.y;
r5.x = r6.z * r5.x;
r4.w = r5.x * r4.w;
r4.w = saturate(r6.x * r6.y + r4.w);
r5.x = saturate(r6.x * 5.000000000e-001 + 5.000000000e-001);
r6.x = saturate(r6.x);
r3.w = 0.000000e+000 != r3.w;
r3.w = r3.w ? r5.x : r6.x;
r3.w = r4.y ? r4.w : r3.w;
r3.z = r3.z == 0.000000;
r4.xyw = -v1.xyz * r4.xxx + -cb0[9].xyz;
r4.xyw = float3(1.000000e-009,1.000000e-009,1.000000e-009) + r4.xyw;
r5.x = dot(r4.xyw, r4.xyw);
r5.x = rsqrt(r5.x);
r4.xyw = r5.xxx * r4.xyw;
r5.x = dot(-cb0[9].xyz, r4.xyw);
r5.x = 1.000000000e+000 + -abs(r5.x);
r6.y = r5.x * r5.x;
r6.y = r6.y * r6.y;
r5.x = r6.y * r5.x;
r5.xyz = r5.yzw * r5.xxx;
r1.x = r1.x * r1.x;
r0.xyz = r5.xyz * r1.xxx + r0.xyz;
r1.x = 6.000000000e+000 + r0.w;
r1.x = 3.125000000e-002 * r1.x;
r1.y = saturate(dot(r1.yzw, r4.xyw));
r1.y = log2(r1.y);
r0.w = r1.y * r0.w;
r0.w = exp2(r0.w);
r0.w = r1.x * r0.w;
r0.xyz = r0.www * r0.xyz;
r0.xyz = r0.xyz * r6.xxx;
r0.xyz = r3.zzz ? r0.xyz : 0;
if (r4.z != 0) {
r0.w = 1.000000000e+000;
} else {
r1.x = (int)r2.w & 4;
r1.x = r1.x;
r1.x = 0.000000e+000 != r1.x;
r1.x = r1.x ? 0.000000000e+000 : 1.000000000e+000;
r4.xyzw = t3.Sample(s2_s_s, v0.xy).xyzw;
r1.y = dot(r4.xyz, cb0[17].xyz);
r1.x = r1.x + -r1.y;
r0.w = cb0[0].y * r1.x + r1.y;
}
r1.x = r3.w * r3.x;
r0.xyz = r0.xyz * r3.yyy;
r0.xyz = r1.xxx * r2.xyz + r0.xyz;
r0.xyz = cb0[1].xyz * r0.xyz;
o0.xyz = r0.xyz * r0.www;
o0.w = 0.000000000e+000;
return;
}




The shader pair that turn off the entire asteroids

VS
// Removes the entire asteroid
// VS

cbuffer cb1 : register(b1)
{
float4 cb1[8];
}


Texture2D<float4> StereoParams : register(t125);
Texture1D<float4> IniParams : register(t120);

void main(
float4 v0 : NORMAL0,
float4 v1 : POSITION0,
float4 v2 : POSITION6,
float4 v3 : POSITION7,
float4 v4 : TANGENT0,
float4 v5 : TEXCOORD0,
float4 v6 : TEXCOORD1,
float4 v7 : TEXCOORD2,
out float4 o0 : TEXCOORD0,
out float3 o1 : TEXCOORD1,
out float3 o2 : TEXCOORD2,
out float3 o3 : TEXCOORD3,
out float3 o4 : TEXCOORD4,
out float4 o5 : TEXCOORD5,
out float4 o6 : SV_Position0)
{
float4 r0,r1,r2,r3,r4;
uint4 bitmask, uiDest;
float4 fDest;

r0.xyz = v0.xyz * cb1[0].www + cb1[1].www;
r1.xyz = v3.zxy * r0.yzx;
r1.xyz = v3.yzx * r0.zxy + -r1.xyz;
r0.w = dot(v3.xyz, r0.xyz);
r2.xyzw = v3.xyzw + v3.xyzw;
r1.w = v3.w * r2.w;
r0.xyz = r1.www * r0.xyz + -r0.xyz;
r0.xyz = r0.www * r2.xyz + r0.xyz;
r0.xyz = r1.xyz * r2.www + r0.xyz;
r1.xyz = v4.xyz * cb1[0].www + cb1[1].www;
r0.w = dot(v3.xyz, r1.xyz);
r3.xyz = r1.www * r1.xyz + -r1.xyz;
r3.xyz = r0.www * r2.xyz + r3.xyz;
r4.xyz = v3.zxy * r1.yzx;
r1.xyz = v3.yzx * r1.zxy + -r4.xyz;
r1.xyz = r1.xyz * r2.www + r3.xyz;
r3.xyz = r1.yzx * r0.zxy;
r3.xyz = r0.yzx * r1.zxy + -r3.xyz;
o1.xyz = r0.xyz;
o3.xyz = r1.xyz;
r0.x = 0.000000000e+000 < v4.w;
o0.xyz = r0.xxx ? r3.xyz : -r3.xyz;
r0.xyz = v1.xyz * cb1[0].xyz + cb1[1].xyz;
r1.xyz = r1.www * r0.xyz + -r0.xyz;
r0.w = dot(v3.xyz, r0.xyz);
r1.xyz = r0.www * r2.xyz + r1.xyz;
r2.xyz = v3.zxy * r0.yzx;
r0.xyz = v3.yzx * r0.zxy + -r2.xyz;
r0.xyz = r0.xyz * r2.www + r1.xyz;
r0.xyz = r0.xyz * v2.www + v2.xyz;
r0.w = v1.w;
r1.x = dot(cb1[7].xyzw, r0.xyzw);
o0.w = r1.x;
o6.w = r1.x;
o2.xyz = r0.xyz;
o4.xyz = v2.xyz;
o5.xy = v6.xy * cb1[2].xy + cb1[2].zw;
o5.zw = v7.xy * cb1[3].xy + cb1[3].zw;
o6.x = dot(cb1[4].xyzw, r0.xyzw);
o6.y = dot(cb1[5].xyzw, r0.xyzw);
o6.z = dot(cb1[6].xyzw, r0.xyzw);
return;
}



PS
// Removes the entire asteroid
// PS

Texture2D<float4> t9 : register(t9);

Texture2D<float4> t8 : register(t8);

Texture2D<float4> t7 : register(t7);

Texture2D<float4> t6 : register(t6);

Texture2D<float4> t5 : register(t5);

Texture2D<float4> t4 : register(t4);

Texture2D<float4> t3 : register(t3);

Texture2D<float4> t2 : register(t2);

Texture2D<float4> t1 : register(t1);

Texture2D<float4> t0 : register(t0);

SamplerState s9_s : register(s9);

SamplerState s8_s : register(s8);

SamplerState s7_s : register(s7);

SamplerState s6_s : register(s6);

SamplerState s5_s : register(s5);

SamplerState s4_s : register(s4);

SamplerState s3_s : register(s3);

SamplerState s2_s : register(s2);

SamplerState s1_s : register(s1);

SamplerState s0_s : register(s0);

cbuffer cb0 : register(b0)
{
float4 cb0[13];
}


Texture2D<float4> StereoParams : register(t125);
Texture1D<float4> IniParams : register(t120);

void main(
float4 v0 : TEXCOORD0,
float3 v1 : TEXCOORD1,
float3 v2 : TEXCOORD2,
float3 v3 : TEXCOORD3,
float3 v4 : TEXCOORD4,
float4 v5 : TEXCOORD5,
float4 v6 : SV_Position0,
out float4 o0 : SV_Target0,
out float4 o1 : SV_Target1,
out float4 o2 : SV_Target2,
out float4 o3 : SV_Target3,
out float4 o4 : SV_Target4)
{
float4 r0,r1,r2,r3,r4,r5,r6,r7;
uint4 bitmask, uiDest;
float4 fDest;

r0.xyzw = t0.Sample(s5_s, v5.xy).xyzw;
r1.xyzw = t1.Sample(s3_s, v5.xy).xyzw;
r1.xz = r1.xy * float2(2.007874e+000,2.007874e+000) + float2(-9.999847e-001,-9.999847e-001);
r0.z = dot(r1.xz, r1.xz);
r0.z = -1.000000000e+000 + r0.z;
r0.z = max(-r0.z, 0.000000000e+000);
r1.y = sqrt(r0.z);
r2.xy = cb0[9].ww * v5.xy;
r3.xyzw = t2.Sample(s1_s, r2.xy).xyzw;
r4.xyzw = t3.Sample(s2_s, r2.xy).xyzw;
r4.xyzw = r4.xyzw + -r3.xyzw;
r3.xyzw = r0.wwww * r4.xyzw + r3.xyzw;
r3.xyzw = cb0[11].yyyz * r3.xyzw;
r4.xyzw = t4.Sample(s6_s, r2.xy).xyzw;
r5.xyzw = t5.Sample(s7_s, r2.xy).xyzw;
r5.xyz = r5.xyz + -r4.xyz;
r4.xyz = r0.www * r5.xyz + r4.xyz;
r4.xyz = cb0[11].www * r4.xyz;
r2.xyzw = t6.Sample(s4_s, r2.xy).xyzw;
r2.xy = r2.xy * float2(2.007874e+000,2.007874e+000) + float2(-9.999847e-001,-9.999847e-001);
r0.z = dot(r2.xy, r2.xy);
r0.z = -1.000000000e+000 + r0.z;
r0.z = max(-r0.z, 0.000000000e+000);
r2.z = sqrt(r0.z);
r2.yw = cb0[10].xx * v5.zw;
r5.xyzw = t2.Sample(s1_s, r2.yw).xyzw;
r6.xyzw = t3.Sample(s2_s, r2.yw).xyzw;
r6.xyzw = r6.xyzw + -r5.xyzw;
r5.xyzw = r0.wwww * r6.xyzw + r5.xyzw;
r6.xyzw = t4.Sample(s6_s, r2.yw).xyzw;
r7.xyzw = t5.Sample(s7_s, r2.yw).xyzw;
r7.xyz = r7.xyz + -r6.xyz;
r6.xyz = r0.www * r7.xyz + r6.xyz;
r7.xyzw = t6.Sample(s4_s, r2.yw).xyzw;
r7.xy = r7.xy * float2(2.007874e+000,2.007874e+000) + float2(-9.999847e-001,-9.999847e-001);
r0.z = dot(r7.xy, r7.xy);
r0.z = -1.000000000e+000 + r0.z;
r0.z = max(-r0.z, 0.000000000e+000);
r7.z = sqrt(r0.z);
r5.xyzw = r5.xyzw * cb0[12].xxxy + -r3.xyzw;
r3.xyzw = r0.yyyy * r5.xyzw + r3.xyzw;
r5.xyz = r6.xyz * cb0[12].zzz + -r4.xyz;
r4.xyz = r0.yyy * r5.xyz + r4.xyz;
r4.xyz = cb0[11].xxx * r4.xyz;
r3.xyzw = cb0[10].yyyz * r3.xyzw;
r0.zw = r7.xz + -r2.xz;
r0.yz = r0.yy * r0.zw + r2.xz;
r1.xy = r1.xy + r0.yz;
r0.y = dot(r1.xyz, r1.xyz);
r0.y = rsqrt(r0.y);
r0.yzw = r1.xyz * r0.yyy;
r0.yzw = cb0[10].www * r0.yzw;
o2.xyz = cb0[4].yyy * r3.xyz;
o1.x = cb0[4].w * r3.w;
o3.w = cb0[5].x * r0.x;
r1.xyz = v1.xyz * r0.zzz;
r0.xyz = r0.yyy * v3.xyz + r1.xyz;
r0.xyz = r0.www * v0.xyz + r0.xyz;
r0.w = dot(r0.xyz, r0.xyz);
r0.w = rsqrt(r0.w);
r0.xyz = r0.xyz * r0.www;
r0.w = dot(v2.xyz, v2.xyz);
r1.x = sqrt(r0.w);
r1.yzw = v2.xyz / r1.xxx;
r2.x = r1.x < cb0[9].x;
r2.y = r1.x < cb0[8].w;
r2.z = r2.y ? cb0[8].x : cb0[8].y;
r2.x = r2.x ? r2.z : cb0[8].z;
r2.xz = v5.xy * r2.xx + float2(5.000000e-001,5.000000e-001);
r3.xyzw = t7.SampleLevel(s8_s, r2.xz, 0.000000000e+000).xyzw;
r1.yzw = r1.yzw * float3(1.000000e-001,1.000000e-001,1.000000e-001) + r3.xxx;
r2.x = v2.x + v2.y;
r2.x = v2.z + r2.x;
r2.x = cb0[7].w * r2.x;
r2.x = 4.999999888e-003 * r2.x;
r2.x = sin(r2.x);
r1.yzw = r2.xxx + r1.yzw;
r1.yzw = frac(r1.yzw);
r2.xzw = float3(1.000000e+000,1.000000e+000,1.000000e+000) + -r1.yzw;
r1.yz = r2.xz * r1.yz;
r1.y = r1.y + r1.z;
r1.y = r1.w * r2.w + r1.y;
r1.y = -r1.y * 7.000000000e+000 + 1.000000000e+000;
r1.y = max(r1.y, 0.000000000e+000);
if (r2.y != 0) {
r1.z = r1.x / cb0[8].w;
r1.y = r1.y * r1.z;
} else {
r1.z = cb0[9].y < r1.x;
if (r1.z != 0) {
r1.x = min(r1.x, cb0[9].z);
r1.x = -cb0[9].y + r1.x;
r1.z = cb0[9].z + -cb0[9].y;
r1.x = r1.x / r1.z;
r1.x = 1.000000000e+000 + -r1.x;
r1.y = r1.y * r1.x;
}
}
r1.x = cb0[7].z * r1.y;
r1.y = 1.000000000e+000 + -cb0[4].x;
r1.x = r1.x * r1.y;
o3.xyz = r4.xyz * cb0[4].zzz + r1.xxx;
r1.xyz = -cb0[0].xyz * cb0[5].yyy + v4.xyz;
r0.w = rsqrt(r0.w);
r2.xyz = v2.xyz * r0.www;
r1.xyz = v2.xyz + -r1.xyz;
r0.w = dot(r1.xyz, r1.xyz);
r1.x = cb0[5].y + cb0[5].y;
r1.x = r1.x * r1.x;
r0.w = r0.w / r1.x;
r0.w = 1.000000000e+000 + -r0.w;
r0.w = r0.w * r0.w;
r1.xyzw = t8.Sample(s9_s, v5.xy).xyzw;
r1.y = dot(cb0[6].xyz, float3(3.000000e-001,6.000000e-001,1.000000e-001));
r1.yzw = cb0[6].xyz * r1.yyy;
r1.yzw = r1.yzw * cb0[5].zzz + cb0[6].xyz;
r3.xyz = r0.xyz * cb0[6].www + cb0[0].xyz;
r2.x = dot(r2.xyz, -r3.xyz);
r2.x = saturate(r2.x * 5.000000000e-001 + 5.000000000e-001);
r2.x = log2(r2.x);
r2.x = cb0[7].x * r2.x;
r2.x = exp2(r2.x);
r2.x = cb0[5].w + r2.x;
r0.w = r2.x * r0.w;
r0.w = r0.w * r1.x;
r1.xyz = r1.yzw * r0.www;
r1.xyz = cb0[7].yyy * r1.xyz;
r0.w = dot(cb0[2].xyzw, float4(3.333000e-001,3.333000e-001,3.333000e-001,3.333000e-001));
r0.w = max(r0.w, 9.999999747e-006);
r2.xyz = cb0[2].xyz / r0.www;
o4.xyz = r2.xyz * r1.xyz;
r0.w = max(abs(r0.z), abs(r0.y));
r0.w = max(r0.w, abs(r0.x));
r1.xy = r0.ww == abs(r0.xy);
r1.xy = r1.xy ? abs(r0.zz) : abs(r0.xy);
r1.xy = r1.xy / r0.ww;
r1.xyzw = t9.SampleBias(s0_s, r1.xy, -1.000000000e+000).xyzw;
r0.w = r1.x / r0.w;
r0.xyz = r0.xyz * r0.www;
o1.yzw = r0.xyz * float3(5.000000e-001,5.000000e-001,5.000000e-001) + float3(5.000000e-001,5.000000e-001,5.000000e-001);
o0.xyzw = v0.wwww;
o2.w = 0.000000000e+000;
o4.w = 1.000000000e+000;
return;
}


Hope that helps!

No worries if not! The game looks so cool now anyway. Awesome!

Thanks!!


EDIT

I have also attached a bunch of surface shaders I found setting shadows to low. The PSs all seem to be for the whole surface, like a light map or everything. One of the VSs looked like it should have been fixable but the pattern didn't work, another affected the ground the same way but didn't follow the pattern - I imagine there were more than one shader...

Lord, grant me the serenity to accept the things I cannot change, the courage to change the things I can, and the wisdom to know the difference.
-------------------
Vitals: Windows 7 64bit, i5 2500 @ 4.4ghz, SLI GTX670, 8GB, Viewsonic VX2268WM

Handy Driver Discussion
Helix Mod - community fixes
Bo3b's Shaderhacker School - How to fix 3D in games
3dsolutionsgaming.com - videos, reviews and 3D fixes

#10
Posted 01/07/2016 07:48 PM   
Scroll To Top