Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // URCL Path Tracer written by Verlio_H
- // Designed to run on IRIS Minecraft CPU
- MINSTACK 0
- @DEFINE @MAX_REFLECT 10
- //iris size
- //@DEFINE @INC 0.0208333333f
- //@DEFINE @STARTX -0.666666
- //@DEFINE @MAXX 64
- //@DEFINE @MAXY 48
- //arbitrary size
- //MINHEAP 65510
- @DEFINE @INC 0.02083333333
- @DEFINE @STARTX -0.666666
- @DEFINE @MAXX 64
- @DEFINE @MAXY 48
- IMM R24 1
- IMM R19 0.0
- HPSH R19
- HPSH R0
- HPSH R0
- //OUT %BUFFER 1
- .SampleLoop
- MOV R1 @STARTX
- IMM R2 0.5
- IMM R3 0
- IMM R4 0
- OUT %COLORY 0
- HPOP R0
- HPOP R0
- HPOP R19
- FADD R19 R19 1.0
- HPSH R19
- FDIV R24 1.0 R19
- HPSH M0
- HPSH R24
- .Loop
- HCAL .xorshift
- OUT %COLORX R3
- MOV R18 R0
- ITOF R8 R24
- HCAL .xorshift
- FMLT R8 R8 @INC
- FDIV R8 R8 32768.0
- FMLT R8 R8 0.5
- FADD R5 R1 R8
- ITOF R8 R24
- HCAL .xorshift
- FMLT R8 R8 @INC
- FDIV R8 R8 32768.0
- FMLT R8 R8 0.5
- FADD R6 R2 R8
- MOV R7 1.0
- HCAL .prenormalize
- HCAL .normalize
- MOV R20 R0 //ro
- MOV R21 R0
- MOV R22 R0
- HCAL .intersect
- FMLT R20 R5 R15
- FMLT R21 R6 R15
- FMLT R22 R7 R15
- JMP .getLight
- .getLightRet
- HPOP R25
- HPOP R18
- FMLT R15 R8 R25
- LOD R8 R18
- FSUB R23 1.0 R25
- FMLT R8 R8 R23
- FADD R8 R8 R15
- STR R18 R8
- INC R18 R18
- HPSH R18
- HPSH R25
- //gamma correction
- FSQRT R8 R8
- //convert to display color
- FMLT R15 R8 15.0
- FTOI R15 R15
- BLE ~+2 R15 15
- IMM R15 15
- OUT %COLOR R15
- INC R3 R3
- FADD R1 R1 @INC
- BRL .Loop R3 @MAXX
- INC R4 R4
- FSUB R2 R2 @INC
- OUT %COLORY R4
- IMM R3 0
- IMM R1 @STARTX
- //OUT %BUFFER 2
- BRL .Loop R4 @MAXY
- JMP .SampleLoop
- //181.019335984
- .Objtbl
- DW .Sky
- DW .Sphere
- DW .Sphere2
- DW .Plane
- DW 0
- .Properties
- DW 2
- DW 0
- DW 1
- DW 3
- .Sky
- DW 0
- DW 0.97
- .Sphere
- DW 1
- DW 0.3
- DW [0.4 0.0 2.1]
- DW 0.5
- .Sphere2
- DW 1
- DW 0.7
- DW [-0.6 0.5 2.2]
- DW 0.5
- .Plane
- DW 2
- DW 1000.0
- DW -0.5
- .getLight
- MOV R23 R15
- IMM R8 -1 //refcnt
- IMM R12 1.0 //colMlt
- .getLightLoop
- INC R8 R8
- BGE .getLightBounceExceeded R8 @MAX_REFLECT
- LOD R13 R11
- LOD R14 R13
- SUB R15 R11 .Objtbl
- LLOD R18 R15 .Properties
- BRE .checkerboard R18 3
- .checkerboardret
- BRZ ~+2 R14
- BNE .getLightNotLight R18 2
- LLOD R13 R13 1
- FMLT R8 R12 R13
- JMP .getLightRet
- .getLightNotLight
- HPSH R18
- //get normal
- BRE .getNormalSphere R14 1
- IMM R15 0.0
- IMM R16 1.0
- IMM R17 0.0
- .getNormalRet
- HPOP R18
- //diffuse lighting
- BRE .specular R18 1
- .randPointLoop
- //get rand on sphere
- ITOF R5 R24
- HCAL .xorshift
- ITOF R6 R24
- HCAL .xorshift
- ITOF R7 R24
- HCAL .xorshift
- FDIV R5 R5 32768.0
- FDIV R6 R6 32768.0
- FDIV R7 R7 32768.0
- FMLT R18 R5 R5
- FMLT R19 R6 R6
- FADD R18 R18 R19
- FMLT R19 R7 R7
- FADD R18 R18 R19
- BRG .randPointLoop R18 1.0
- HPSH R8
- HCAL .prenormalize
- HCAL .normalize
- FADD R5 R15 R5
- FADD R6 R16 R6
- FADD R7 R17 R7
- HCAL .prenormalize
- HCAL .normalize
- //
- .specularRet
- LLOD R13 R13 1
- BRE .checkerboardCol R13 1000.0
- .checkerboardColRet
- FMLT R12 R12 R13
- HPSH R12
- HCAL .intersect
- HPOP R12
- HPOP R8
- FMLT R13 R5 R15
- FADD R20 R20 R13
- FMLT R13 R6 R15
- FADD R21 R21 R13
- FMLT R13 R7 R15
- FADD R22 R22 R13
- JMP .getLightLoop
- .specular
- FMLT R18 R5 R15
- FMLT R19 R6 R16
- FADD R18 R18 R19
- FMLT R19 R7 R17
- FADD R18 R18 R19
- FMLT R18 R18 2.0
- FMLT R15 R15 R18
- FMLT R16 R16 R18
- FMLT R17 R17 R18
- FSUB R5 R5 R15
- FSUB R6 R6 R16
- FSUB R7 R7 R17
- HPSH R8
- JMP .specularRet
- .checkerboard
- FMLT R18 R20 3.0
- FTOI R18 R18
- FMLT R19 R22 3.0
- FTOI R19 R19
- AND R18 R18 1
- AND R19 R19 1
- XOR R18 R18 R19
- JMP .checkerboardret
- .checkerboardCol
- FMLT R18 R20 3.0
- FTOI R18 R18
- FMLT R19 R22 3.0
- FTOI R19 R19
- AND R18 R18 1
- AND R19 R19 1
- XOR R18 R18 R19
- XOR R18 R18 1
- INC R18 R18
- ITOF R18 R18
- FMLT R13 0.3 R18
- JMP .checkerboardColRet
- .getNormalSphere
- LLOD R18 R13 5
- LLOD R15 R13 2
- FSUB R15 R20 R15
- FDIV R15 R15 R18
- LLOD R16 R13 3
- FSUB R16 R21 R16
- FDIV R16 R16 R18
- LLOD R17 R13 4
- FSUB R17 R22 R17
- FDIV R17 R17 R18
- JMP .getNormalRet
- .getLightBounceExceeded
- MOV R8 R0
- JMP .getLightRet
- .intersect
- IMM R13 .Objtbl //i
- IMM R11 .Objtbl //o
- IMM R15 100.0 //dist1
- IMM R16 100.0 //dist2
- .intersect_loop
- LOD R12 R13
- BNZ ~+2 R12
- HRET
- LOD R14 R12
- INC R13 R13
- BRZ .intersect_loop R14
- BRE .intersect_plane R14 2
- //sphere
- //vec3 oc = ro - thing.pos;
- //R17 R18 R19
- LLOD R17 R12 2
- FSUB R17 R20 R17
- LLOD R18 R12 3
- FSUB R18 R21 R18
- LLOD R19 R12 4
- FSUB R19 R22 R19
- //R23 = length(oc)
- HPSH R5
- HPSH R6
- HPSH R7
- MOV R5 R17
- MOV R6 R18
- MOV R7 R19
- HCAL .prenormalize
- FDIV R23 1.0 R8
- HPOP R7
- HPOP R6
- HPOP R5
- //float hb = dot(oc, rd);
- //R17
- FMLT R17 R17 R5
- FMLT R8 R18 R6
- FADD R17 R17 R8
- FMLT R8 R19 R7
- FADD R17 R17 R8
- //float c = R23*R23 - thing.r*thing.r;
- //R18
- LLOD R18 R12 5
- FMLT R18 R18 R18
- FMLT R19 R23 R23
- FSUB R18 R19 R18
- //float discriminant = hb*hb - c;
- //R8
- FMLT R8 R17 R17
- FSUB R8 R8 R18
- //if (discriminant > 0.) {
- BRN .intersect_loop R8
- //dist2 = -hb - sqrt(discriminant);
- //R16
- NOT R17 R17
- //inverse sqrt
- HCAL .invsqrt
- //inverse inverse sqrt
- FDIV R8 1.0 R8
- FSUB R16 R17 R8
- //if (dist2 < dist && dist2 > 0.) {
- BRN .intersect_loop R16
- BGE .intersect_loop R16 R15
- //o = i;
- DEC R11 R13
- //dist = dist2;
- MOV R15 R16
- //}
- //}
- JMP .intersect_loop
- .intersect_plane
- //if (thing.pos.y < ro.y && rd.y < 0.) {
- SBRG .intersect_loop R6 -0.0019
- LLOD R8 R12 2
- SBGE .intersect_loop R8 R21
- //float mfactor = (ro.y - thing.pos.y)/rd.y;
- //R17
- FSUB R17 R21 R8
- FDIV R17 R17 R6
- //dist2 = length(rd*mfactor);
- HPSH R5
- HPSH R6
- HPSH R7
- FMLT R5 R5 R17
- FMLT R6 R6 R17
- FMLT R7 R7 R17
- HCAL .prenormalize
- FDIV R16 1.0 R8
- HPOP R7
- HPOP R6
- HPOP R5
- //if (dist2 < dist) {
- BGE .intersect_loop R16 R15
- //o = i;
- DEC R11 R13
- //dist = dist2;
- MOV R15 R16
- JMP .intersect_loop
- //}
- //}
- .xorshift
- BSL R25 R24 7
- XOR R24 R24 R25
- BSR R25 R24 9
- XOR R24 R24 R25
- BSL R25 R24 8
- XOR R24 R24 R25
- HRET
- //inputs/outputs: R5 R6 R7
- //used: R8 R9 R10
- .prenormalize
- //calc len
- FMLT R8 R5 R5
- FMLT R9 R6 R6
- FADD R8 R8 R9
- FMLT R9 R7 R7
- FADD R8 R8 R9
- .invsqrt
- //inverse sqrt
- FSQRT R8 R8
- FDIV R8 1.0 R8
- HRET
- .normalize
- //actually normalize
- FMLT R5 R5 R8
- FMLT R6 R6 R8
- FMLT R7 R7 R8
- HRET
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement